Archive for the ‘yazılım geliştirme’ Category

mysql’de prepared statement’la dinamik sql çağırma

Tuesday, September 28th, 2010

Projelerden bir tanesinde loglar aylık isimlendirilen tablolarda tutuluyor. Bir stored procedure yardımı ile logdaki hataların sayısını almak istediğim zaman tablo ismi dinamik olduğu için dinamik sql yazmak gerekti. Mysql ile dinamik sql oluşturmak için prepared statement’lar kullanılıyormuş.

Son 1 saat içerisinde Fail olmuş logların sayısını alan procedure şöyle birşey oluyor bu durumda:


DELIMITER $$

DROP PROCEDURE IF EXISTS `project`.`proc_error_logs`$$
CREATE DEFINER=`project`@`%` PROCEDURE `proc_error_logs`()
BEGIN
set @dyn_sql=concat('select count(*) from project_log_', date_format(now(), '%Y%m'), ' where LOG_STATUS=\'Failed\' and LOG_TIME > date_sub(now(), interval 1 hour)');
prepare s1 from @dyn_sql;
execute s1;
deallocate prepare s1;
END$$

DELIMITER ;

Prepared statement’lara parametre de geçebiliyorsunuz, sql cümlesi içerisinde ? deyip execute ifadesinde using deyip ard arda verebiliyorsunuz, şöyle:

EXECUTE s1 USING @min_val;

işinize yaraması dileğiyle…

Web tabanlı kullanışlı bir dosya yükleme aracı File Thinge

Tuesday, September 7th, 2010

Hali hazırda kendinize ait bir sunucunuz varsa bu sunucuya dosya transferinde değişik protokoller kullanıyorsunuzdur. En klasik olarak FTP, SFTP gibi. Ama her zaman elinizin altında bir sftp client’ı olmayabilir, ya da başka birisinin sunucunuza dosya transfer etmesi gerekiyordur ama ftp kullanıcısı açmakla uğraşmak istemezsiniz ya da şifrenizi paylaşmak istemezsiniz, türlü türlü ihtimaller.

Bu durumda çok basit bir dosya yükleme arayüzüne ihtiyacınız var, ben biraz aradım File Thingie’yi buldum. File Thingie tek bir php dosyası üzerinden her türlü dosya yaratma silme ve yükleme işlemini gerçekleştirebiliyor. Dosya üzerinde değişiklik de yapıyormuş ancak ben biraz uğraştım bu özelliğini aktif hale getiremedim, ihtiyaç da duymadığım için fazla kurcalamadım.

File Thingie’nin en kötü özelliği ayarların da php dosyasını değiştirerek yapılması. Bu aslında biraz PHP bilen birisi için çok sorun değil, ayarları bir array’e eleman ekleyerek yapıyorsunuz.

Bence basit ve kullanışlı bir aparat olmuş.

http://www.solitude.dk/filethingie/

Sunucularınızı öldürmek için yapılması gereken 6 madde

Saturday, August 28th, 2010

Ölçeklenebilirlik (Scalability) konusunu zor yollardan öğrenmiş Steffen Konerow isimli şahsın yazdığı güzel bir yazı buldum. Yazıda 1 milyon kullanıcının ziyaret ettiği bir web uygulamasının nasıl çöktüğü, çöküşe engel olabilmek için neler yaptıkları ve hatalarını çok güzel anlatmış. Ben de elimin altında bulunsun diye bu 6 maddeyi yazayım dedim. (Bize soraydı biz de yardım ederdik heheh)

1. Dosyaları ağ üzerindeki bir alanda tutun ve sunucunuz ölsün. (Lokal diskte tutun ya da çok erişilen dosyaları hafızada (ramdisk) tutun.)

2. Web sunucunuzun ayarlarıyla oynamayın direkt kurup kullanın ve sunucunuz ölsün. (Sunucusu ayarlarında optimizasyon yapın, daha performanslı web sunucuları (ngix gibi) tercih edin.)

3. Tek bir veritabanı sizi sonsuza kadar idare eder diye düşünün ve sunucunuz ölsün. (En güçlü veritabanı sunucunun bile bir limiti vardır. Limitlere ulaşmadan master-slave yapısı ya da cluster yapısına geçin.)

4. Sunucu yavaşlayınca daha iyisini alırım diyin ve sunucunuz ölsün. (Daha fazla donanıma para harcamak yerine açık kaynaklı yazılımları araştırın, mesela memcached gibi. Doğru cache’leme ile veritabanınızı rahatlatabilirsiniz.)

5. Bütün dosyaları tek bir dizinde tutun ve sunucunuz ölsün. (Çok sayıda dosyayı tek bir dizinde tutmayın, dosyaları farklı klasörlere yayın ya da farklı dosya sistemleri (ReiserFS vs) deneyin.)

6. Tamam artık süper çalışıyor daha fazla geliştirmeye gerek yok diyin ve sunucunuz ölsün (Geliştirmeyi hiç bırakmayın, sürekli öğrenin, araştırın.)

Yazının tamamı şurda: http://highscalability.com/blog/2010/8/23/6-ways-to-kill-your-servers-learning-how-to-scale-the-hard-w.html

ateşten duvar üzerinden havuz sefası

Monday, April 26th, 2010

Efendim diyelim ki bir pool’unuz ve bunun içinde sunucularınız var ve siz bir sunucuyu bu pool’dan çıkartmak istiyorsunuz. Fakat sistem erişiminiz olmadığı için istekleri dağıtan mekanizmaya erişemiyorsunuz. Bunun için ben pool dışında bırakmak istediğim sunucudaki tomcat’i durdurup port’unu değiştirip tekrar açmıştım. Gayet güzel çalıştı fakat tomcat değil de misal jboss kullanıyo olsaydım bu işi afedersiniz bok yapardım. Çünkü jboss’un çalıştığı port’u değiştirmek için 88 tane yerde değişiklik yapılması gerekiyor.

Velhasıl ip değiştirmeden de bu işi sunucunun üzerindeki firewall’u kullanarak yapabiliyormuşuz. Bu yöntem ip değiştirmekten çok daha güzel. Şöyle oluyormuş:

iptables -t filter -I INPUT 1 -p tcp -s ! 192.168.1.0/24 --dport 8080 -j DROP

Buradaki 192.168.1.0/24 kısmı olmaz ise siz de o porttan erişemiyor oluyorsunuz. Dolayısı ile buraya kendi ip bloğunuzu girdiğiniz zaman siz hariç kimse bu port’tan bu sunucuya erişemiyor oluyor. Haliyle dağıtıcı uygulama da sunucu kapalı zannedip pool’dan çıkartıyor. Siz güzel güzel işinizi yapıyorsunuz. İşiniz bitince de

iptables -F

diyerek yaptığınız filtrelemeyi kaldırıyorsunuz.

(Serhat’a teşekkürler…)

RegEx mi, o ne, yenir mi?

Thursday, April 22nd, 2010

Siz de benim gibi Regular Expression özürlüyseniz yapacağınız çok fazla birşey yok.

1) Şahane regex yazabilen bir arkadaş (bizim Sarp gibi)
2) Bir tool

İşte bir tool buldum bayağı kullanışlı ve şık bir flex uygulaması, onu buraya yazayım da unutmayayım dedim. Ümit’e teşekkür ederim…

http://gskinner.com/RegExr/