Python’dan Ufak Kod Parçaları – 2

Python ile işlemlerimizde MySQL / MariaDB bağlantıları için aşağıdaki yöntemleri kullanabilirsiniz.

Veritabanı bağlantıları için mysql.connector ‘ü kullanıyoruz.

import mysql.connector

db_log = []

db_conn = mysql.connector.connect(
	host="127.0.0.1",
	user="USER",
	password="PASSWORD",
	database="wi_syslog"
)
db = db_conn.cursor()

Bağlantıyı sağladıktan sonra SELECT ve INSERT işlemleri için 2 adet ufak fonksiyona ihtiyacımız olacak. İşin kolayına kaçmak bazen rahatlık olabiliyor 🙂

PHP’den gelen alışkanlığımız için SELECT işleminden sonraki gelen satırların KEY => VALUE serisine benzer yapabilmek için aşağıdaki fonksiyon bizlere yardımcı oluyor. Okumaya devam et “Python’dan Ufak Kod Parçaları – 2”

PHP Dosyasının Derlenip HTML Çıktısı Alınması

PHP ile geliştirme sırasında PHP dosyasının derlenip HTML halinin geriye RETURN edilmesi gerektiği yerler olur. Bunu Codeigniter gibi framework’ler yapmaktadır. Bilenler anlayacaktır -> $this->load->view( ‘dosya_yolu’, ‘dizi_degiskeni’, true ); yaptığımızda geri bize gönderilmiş parametreler ile birlikte derlenmiş string hali gelir.

Bu işlem çok basit olmakla birlikte genellikle sayfa yapılarında kullanılır. Peki düz bir PHP sayfası hazırlarken elinizde framework olmadığında ne yapacaksınız ? Aşağıdaki kod parçasını kendinize göre düzenleyip kullanmanız yeterli olacaktır.

function load_html( $file_path, $data )
{
	extract( $data );
	ob_start();
	include( $file_path );
	$buffer = ob_get_contents();
	@ob_end_clean();
	return $buffer;
}

 

Bunu yaparken dikkat etmeniz gereken tek şey include etmiş olduğunuz dosyanın yolu ve gönderilen $data değişkeninin extract edilirkenki halinin KEY değerlerinin artık birer değişken olarak kullanılmasıdır. Değişkenleri include etmiş olduğunuz dosyada rahatlıkla kullanabilirsiniz.

Bu işlemde PHP olarak derlenmeyi sağlayan olay ise ob_XX fonksiyonları sağlamaktadır.

IOT Denemeleri – LUA Dili

Bir zamanlar malum ülkeden Çin’den birkaç akıllı alet almıştık. Bunlardan bir tanesi WiFi üzerinden Röle açıp kapayan ufak, minnak bir cihazdı. Cihaz’ı Cep telefonu uygulaması üzerinden WiFi ayarlarını vs. yaptıktan sonra uygulama üzerinden Röle’yi açıp kapatabiliyorsunuz. Ufak bir elektrik bağlantısı ile birlikte, Kombinizi, Kapınızı, Televizyonunuzu, Evinizdeki Lambayı vs. Elektrik ile çalışan birçok şeyi cep telefonu üzerinden kontrol edebilir hale geliyorsunuz.

Bir zaman sonra bu cihazın içini merak edip açtığımızda birçok IOT severinde sevdiği ufak bir çip bizi karşıladı. ESP32. ESP32 nin üzerine Node’lardan birini yerleştirmişler. WiFi’ye de bağlanıyor, bişiler de çalışıyor. Sonra TX, RX bağlantı pimlerini görünce dedik ki acaba ? Acaba biz bunun içine girebilir miyiz 🙂 Okumaya devam et “IOT Denemeleri – LUA Dili”

PHP Ufak Tefek Fonksiyonlar – 4

PHP üzerinde ufak tefek fonksiyonlarımdan paylaşmaya devam ediyorum. Bir önceki yazıya buradan ve  buradan tüm ufak tefeklere ulaşabilirsiniz.

Basit ve zaman kazandıran fonksiyonlara yeni bir yazı ile merhaba.

Birkaç yerde tarih işkemi için date( “Y-m-d H:i:s” ) yazıp duruyorum/uz. Kısaltmak lazım. Ne de olsa 3 5 saniye çok önemli. 🙂 datee adında bir fonksiyon ile birkaç karakter fazla yazmaktan kurtuldum diyebilirim. 🙂

function datee( )
{
	return date( 'Y-m-d H:i:s' );
}

Okumaya devam et “PHP Ufak Tefek Fonksiyonlar – 4”

Javascript / JQuery Input Virgül Yerine Nokta

JQuery kullanarak geliştirdiğimiz arayüz çalışmasında matematiksel işlemler yapan ufak bir sayfamız vardı. Fakat Klavyenin sağ tarafındaki Number Pad kullanılığında el alışkanlığı olaraktan ondalıklı sayılar için Virgül kullanıldığında Javascript hataları alıyorduk. Bize gerekli olan ise Virgül tuşuna basıldığında Nokta’ya çevirmesiydi.

Bununla ilgili olaraktan Javascript / JQuery kod parçasını paylaşıyorum. Aynı zamanda ondalıklı sayılar için tek bir ondalık parçası yani tek bir Nokta işareti almalıydı. Kod parçasında nokta yani ondalık var ise tekrardan Nokta basmayacak şekilde düzenleme yaptık.

	$( document ).on( 'keypress', '.input_calc', function( e )
	{
		if( e.keyCode == 46 && $( this ).val().indexOf( '.' ) != -1 )
			e.preventDefault();

		var tmp = $( this ).val();
		if( e.keyCode == 44 )
		{
			setTimeout(function()
			{
				if( tmp.indexOf( '.' ) == -1 )
					e.target.value += '.';
			}, 4 );
			e.preventDefault();
		}
	});

Bu olay / hata / problem artık ne demek isterseniz sadece javascript / web ortamında değil aynı zamanda hemen hemen bütün programlama dilleri ve veritabanı kayıt işlemlerinde ondalıklı sayıların nokta ile gelmesi durumlarını kapsayabilir. Geliştirmekte olduğunuz projede sayısal işlemleriniz mevcut ise dikkat etmenizi öneririm. 🙂

PHP CodeIgniter İle İmage Cache Yapımı

Hemen hemen herkesin ihtiyacıdır diye düşünüyorum. İmage Cache. Genellikle bir tane PROXY URL oluşturup dosyaya ait cache hali varsa onu çekeriz yoksa cache’leyip cache halini çekeriz. Fakat bu durum sistemde dosyalarınızın gelmesini yavaşlatabilir.

Hali hazırsa orjinal dosyalarınızın bulunduğu bir klasör altında image dosyalarınız var ise aşağıdaki paylaşmış olduğum örnekteki gibi bir yöntem ile dosyaların boyutlandırılmasını orantılı bir şekilde yapabilirsiniz.

Bir önceki yazımda “get_dir_contents” fonksiyonunu paylaşmıştım. Bir dizin altındaki tüm dosyaları getirmek için kullanıyoruz.

$list = get_dir_contents( '/var/www/html/cron/orj_images' );

// hangi boyutlarda oluşturacağımızı belirtiyoruz.
$arr[] = array( 32, 32 );
$arr[] = array( 50, 50 );
$arr[] = array( 64, 64 );
$arr[] = array( 70, 70 );
$arr[] = array( 80, 80 );
$arr[] = array( 90, 90 );
$arr[] = array( 100, 100 );
$arr[] = array( 120, 120 );
$arr[] = array( 150, 150 );
$arr[] = array( 160, 200 );
$arr[] = array( 200, 200 );
$arr[] = array( 300, 300 );
$arr[] = array( 200, 256 );
$arr[] = array( 256, 256 );
$arr[] = array( 500, 500 );
$arr[] = array( 512, 512 );
$arr[] = array( 640, 640 );
$arr[] = array( 1024, 1024 );
$i = 0;
// listemizde döngüye girip image_lib kütüphanesi ile işlemleri başlatıyoruz.
foreach( $list as $key => $value )
{
	if( !file_exists( $value ) )
		continue;
	if( is_dir( $value ) )
		continue;
	
	$this->load->library( 'image_lib' );
	// her bir dosya için boyutlandırma dizisine göre ayrı ayrı işlem yaptırıyoruz.
	foreach ( $arr as $k => $v )
	{
		$ext = pathinfo( $value );

		$new_file = $ext[ 'dirname' ].'/'.$ext[ 'filename' ].'-'.$v[ 0 ].'x'.$v[ 1 ].'.'.$ext[ 'extension' ];				
		$old_file = str_replace( '/var/www/html/cron/orj_images', '/var/www/html/cron/chache_images', $new_file );			
		
		if( file_exists( $old_file ) )
			continue;
		// kaynak dosyamnız $value değişkenindedir.
		$config = array(
			'image_library' => 'gd2',
			'source_image' => $value,
			'new_image' => $old_file,
			'maintain_ratio' => TRUE,
			'create_thumb' => TRUE,
			'thumb_marker' => '',
			'width' => $v[ 0 ],
			'height' => $v[ 1 ]
		);

		$this->image_lib->initialize( $config );
		$this->image_lib->resize();
		$this->image_lib->clear();
		echo $old_file."\n";
	}
}

Yeni dosya ekleme işlemlerinde upload sırasında bu boyutlar otomatik olarak cachleniyor. Sistemde orjinal dosya direkt olarak kullanılmıyor.

Bu kod parçasını CRON üzerinden bağladığımız için dosyaları mümkün olduğunda güncel kalmasını sağlıyoruz.

Not : “Yapı Codeigniter framework’ü üzerinden örneklendirilmiştir. Sisteminize uygulamadan önce test etmenizi tavsiye ederim.”

 

PHP İle Dizindeki Tüm Dosya ve Klasörleri Listeleme

PHP ile bir projemizdeki tüm dosya ve klasörlerin listesi gerektiği için kullanmış olduğum fonksiyon aşağıdaki gibidir. Kendinize göre düzenleyip kullanabilirsiniz.

	function get_dir_contents($dir, &$results = array())
	{
		$files = scandir($dir);

		foreach($files as $key => $value){
			$path = realpath($dir.DIRECTORY_SEPARATOR.$value);
			if(!is_dir($path)) {
				$results[] = $path;
			} else if($value != "." && $value != "..") {
				get_dir_contents($path, $results);
				$results[] = $path;
			}
		}

		return $results;
	}

PHP Codeigniter İle HTML Çıktısı Sıkıştırma

Yenilenen teknolojilerde her zaman istediğimiz birşey vardır.  “HIZ”

Hep daha hızlı olmasını isteriz. Tıkladığımızda açılsın, hatta tıklayacağımızı hissedip öncesinden haberi varmış gibi hızlıca cevap vermesini bekleriz. Kimlerden bekleriz. Tabi ki yazılımlar, programlardan.

Codeigniter kullandığımız bir sistemde sayfa ( browser taraflı tabiki ) açılış, derleme hızını yükseltmek, bekleme süresini düşürebilmek için uğraşırken HTML çıktısının boşluklarının browserlarımızı ne kadar yorduğunu düşündük. Klasik hızlandırma senaryoları bir çoğumuzun bildiği gibi CSS ve Javascript dosyalarının minify ( küçültülmesi ) edilmesinden geçer. Bunlarda bir yere kadar yeterli olacaktır. Biz ekstra olarakda HTML çıktığımızı da azaltmak istedik.

Bu sayede sayfanın toplam boyutu düşüceği için ufakda olsa bir hız kazanmayı hedefledik. Başarılı olduğumuza inanıyorum. Sizlerde farklı yöntemler kullandıysanız paylaşabilirsiniz.

Codeigniter tarafında biz bu işlemi direkt olarak SYSTEM > CORE > LOADER sıfınının view fonksiyonuna uyguladık. Hem ajax requestlerimizde hemde standart HTML outputlarında oldukça başarılı sonuçlar verdi.

Aşağıdaki gibi düzenlemeniz yeterlidir. Replace fonksiyonu yerine daha hızlı bir metodda tercih edilebilir. Özel bir fonksiyon dahi yazılabilir fakat deneme sürecini preg_replace oldukça iyi atlattı.

	public function view($view, $vars = array(), $return = FALSE)
	{
		$buffer = $this->_ci_load(array('_ci_view' => $view, '_ci_vars' => $this->_ci_object_to_array($vars), '_ci_return' => $return));
		$search = array( '/\n/', '/\>[^\S ]+/s', '/[^\S ]+\</s', '/(\s)+/s' ); $replace = array( ' ', '>', '<', '\\1' );
		
		return preg_replace($search, $replace, $buffer);
	}

Genelde sistemlerin ve framework’lerin CORE’larında oynamak tehlikelidir. Bazen risk almak lazım.

Codeigniter frameworküne özel değildir. Fonksiyonu farklı yapılarda da yapınıza göre düzenleyip kullanabilirsiniz.

Hızlandırma tekniklerinden ileride bahsedeceğim. SQL sorgularınızdan tutunda sayfada kullanılan değişken temizleme olaylarından bahsedeğim. Bunu ilk adım olarak sayfabilirsiniz. 🙂

PHP ile Tarihe Tarih Ekleme ve Çıkarma

Çok basit bir şekilde tarihe tarih ekleme veya çıkarma işlemini göstereceğim. Oldukça basit çünkü genellikle uzun uzun satırlarla yapılan işlemler mevcut. Hatta bazı algoritmalarda bugünden başlayıp o tarihe gidip o tarih üzerine işlem yapanlarda mevcut.

Anlatmak istediğim aşağıdaki gibidir


// 2018-05-07 tarihine 90 gün eklemek.
date( 'Y-m-d', strtotime( '2018-05-07 +90 day' ) );

// 2018-05-07 tarihine 3 ay eklemek.
date( 'Y-m-d', strtotime( '2018-05-07 +3 month' ) );

// 2018-05-07 tarihine 5 yıl eklemek.
date( 'Y-m-d', strtotime( '2018-05-07 +5 year' ) );

// 2018-05-07 tarihine 90 gün çıkarmak
date( 'Y-m-d', strtotime( '2018-05-07 -90 day' ) );

// 2018-05-07 tarihine 3 ay çıkarmak
date( 'Y-m-d', strtotime( '2018-05-07 -3 month' ) );

// 2018-05-07 tarihine 5 yıl çıkarmak
date( 'Y-m-d', strtotime( '2018-05-07 -5 year' ) );

Harici fonksiyonlar kullanmadan hızlıca tarih işlemlerinde ekle ve çıkarma yapabilirsiniz. Tabi bu yöntem işinizi görüyor olmalı 🙂
Örneklerimde Yıl-Ay-Gün kullandım. Siz format değiştirip kullanabilirsiniz..

PHP Ufak Tefek Fonksiyonlar -3

PHP üzerinde ufak tefek fonksiyonlarımdan paylaşmaya devam ediyorum. Bir önceki yazıya buradan ve buradan ulaşabilirsiniz.

Web servis olarak JSON formatında karşılamakta olduğunuz bir sayfanız mevcut ise aşağıdaki fonksiyon tam olarak size göre.

Web servis tarafında geliştirme yaptığımızı düşünelim. Web servislerde her zaman klasik yöntemler yani GET, POST olarak bilgiler gelmeyebilir. XML, JSON gibi farklı formatlarda gelen istekleri karşılayıp dizi veya obje nesnesi olarak almamız gerekebilir. Aşağıdaki fonksiyon da dizi olarak geri döndürülmüştür. Ekstra olarak dizi içerisine client tarafın IP adresi de eklenmiştir.

	function input_post_json()
	{
		$data = json_decode(file_get_contents('php://input'), true);
		$data[ 'ip' ] = $_SERVER[ 'REMOTE_ADDR' ];
		return $data;
	}

Daha saf hali diyebiliriz;

	function input_post_json()
	{
		return json_decode(file_get_contents('php://input'), true);
	}

PHP de validasyonlar için çok farklı yöntemler mevcut bazıları ise tekrar tekrar yazmak yerine bu şekilde daha kullanışlı ve hızlıca erişebileceğimiz pozisyonda oluyor.

	function ip_control( $ip )
	{
		if( !$ip )
			return false;
		if (!filter_var($ip, FILTER_VALIDATE_IP) === false)
			return true;
		return false;
	}

Bir çok yerde kullandığım uzun yazıları kısaltmak amaçlı yazdığım bir fonksiyon. Kısaltmaktan kastım sonuna “. . .” üç nokta ile birlikte uzantı ekleyebilmek. Örn : Bir tablonuz var. Hücre içerisinde en fazla 50 karakter yazabiliyorsunuz. Yoksa alt satıra geçiyor veya tablo dağılıyor. Bunun için bu fonksiyona 47 değeri verdiğinizde elinizdeki metinden 0 ile 47 karakter arasını alıp sonuna üç nokta ekliyor.

	function three_point( $text, $par )
	{
		return mb_substr( $text, 0, $par ).( strlen( $text ) > $par ? '...' : null );
	}

 

Bir sonraki ufak tefek fonksiyonlarda görüşmek üzere.