Perfection

March 26th, 2009

“Perfection” veya Türkçe’de ki adıyla “Mükemmellik”. Mükemmellikten kısaca bahsetmek gerekirse; bir şeyi en geniş olacak şekilde, bir bütün olarak ve kusursuz yapmak demektir. Bu konudan bahsetmemin nedeni ise, yaptığım herhangi bir şeyde “Mükemmelik”e çok önem veriyorum.

Örneğin bir programcı olarak, genelde program yapan insanlar, programın çalışıp çalışmadığına bakmayla yetinirler. Benim için bu kesinlikle yeterli değildir. Programın kullandığı kaynaklardan, bunları nasıl kullandığına, yapacağı işi en kolay şekilde nasıl yapacağına ve kodlamasında bulunan standartlara bakarım.

Yazdığım programlar da bu şekildedir. Gerekse ’syntax’ının yapısı, gerekse yaptığı işi en kolay şekilde yapması mükemmel olmalıdır. Yazılımın kullandığı 1 bit bellek bile benim için çok önemlidir. Bu nedenle tam hakimiyet sağlamak için C programlama dilini tercih ediyorum. Yazılımın sözdizimi ise mutlaka bir standart üzerine kurulu olmalıdır. Gerekse mevcut kodlama standartları, gerekse kendi standartım olabilir bu.

Mükemmelci olduğum için ise gördüğüm en büyük sorunu dile getireyim. Bir yazılım üretirken bu kadar mükemmelci olmak; özellikle tek kişi iseniz yazılımın detayları arasında çok çabuk boğulmanıza neden oluyor. Çoğu zaman bir iş aldığımda gece gündüz kasmama rağmen zamanında yetiştirememe neden oldu. Buradan paldır küldür yazılım ürettiğim sonucunu çıkarmamalısınız. Bir yazılım üretirken önce kaynakları toplar, daha sonra uzun uzun düşünerek yazılımı tasarlarım, herşey mükemmel olana dek. Basit bir yazılım için bile UML kullanırım.

Bu yazıyı uzun zamandır yazmayı planlıyordum. İnternet üzerinde rastladığım, bir kişinin benim gibilere benzetmiş olduğu bir tabir üzerine yazıyı yazmaya başladım. Sitenin bağlantısını vermek istemiyorum, kısaca bizim gibilere “kontrol manyakları” deniliyordu. Evet kontrol manyağıyım. Kendi yaptığımın yanında, eğer başka biriyle bir iş yapıyorsam onunkinin de benim ki kadar mükemmel olmasını isterim. Eğer olmuyorsa burada sorunlarımız başlıyor demektir.

Bu durumdan memnun muyum sorusuna gelecek olursak; evet, sonuna kadar memnunum. Özellikle benim gibi bilgisayar üzerinde bu kadar kontrolcü olan birine, GNU/Linux gibi süper esnek bir işletim sistemi, tapılacak bir yazılım topluluğu anlamına geliyor. Tüm processlerin ne işe yaradığını bilmek, neyin ne yaptığını anlamak tüm sisteme benim hükmedebilmemi sağlıyor. Gerekse GNU/Linux’u tercih etmemin başlıca nedeni budur. Elbette buna en kolay ön ayak olan Debian dağıtımını tercih etmemin de. Bir çok Free Software Hacker’ının da benim gibi düşündüğünü sanıyorum. Öyle olmasaydı, ne bu sistemi kullanırken, ne de özgür yazılım üretirken bu kadar zevk almazdım.

lighttpd ne kadar ‘light’tır?

March 14th, 2009

Bir süredir bu sunucu da dahil olmak üzere Debian üzerinde lighttpd kullanmaktayım. lighttpd ismi gibi kendisi de gerçekten light bir web sunucusu. FastCGI uygulaması olarak çalışan PHP ile de, Apache’den kat kat ‘light’ olduğunu söyleyebilirim. Özellikle bellek kullanımı lighttpd’i eşsiz kılıyor. Eğer fazla belleği bulunmayan bir sunucunuz varsa hiç düşünmeden lighttpd kullanın.

lighttpd’nin özelliklerine gelecek olursak boyundan büyük bir çok özelliği bulunmakta. Proxy modülünden, Apache’de sıkça kullanılan rewrite modülüne kadar bir çok modül bulunmakta. Modül listesini ve ayarları bu linkteki sayfada görebilirsiniz.

Bunun yanında, Apache (apache-mpm-prefork) gibi her seferinde yeni bir process yaratmayıp threadler ile çalışıyor. Böylece yine bellekten tasarruf sağlanmış olunuyor.

lighttpd orijinal olarak c10k (bir sunucuda 10000 paralel bağlantıyı idare etmek) problemi üzerine yazılmış bir web sunucusu.

1 MB’dan küçük olan bu devin popularitesi gün geçtikçe artıyor. Netcraft Ocak 2009 raporuna göre, 3 milyon site tarafından kullanılan lighttpd, en çok kullanılan 5. web sunucusu özelliğini taşıyor.

lighttpd vazgeçilmezi FastCGI

Biraz da lighttpd’nin vazgeçilmezi FastCGI‘ye değinmek istiyorum.

Normalde CGI uygulamaları gelen isteğe göre çalışırlar. Örneğin siz bir CGI uygulamasına istek gördüğünüzde, bilgisayar onu yeni bir uygulama olarak başlatır ve sizin isteğiniz işlendikten sonra çıktılar size ulaştırılır. CGI uygulamalarının mantığı budur.

FastCGI ise programın bir kez çalıştırılıp belleğe yüklenmesini sağlıyor. Böylece program her seferinde çalışmak zorunda kalmıyor ve bu da performans ve kaynak kullanımı artışı sağlıyor. FastCGI orijinal olarak C dili ile yazılmış olsa da, bir çok dile implementasyonu bulunmakta. lighttpd FastCGI desteği sayesinde, fastcgi uygulamalarınızı çalıştırabilir.

Özellikle yüksek trafik gerektiren uygulamalar FastCGI ile programlanırsa, performans artışı yaşanmaması içten bile değildir.

Bunun yanında bir FastCGI uygulamasında en önemki faktör bellek kullanımıdır. Eğer FCGI uygulamanızda bellek açıkları (memory leak) var ise, bellek her istekte biraz daha şişecektir. Bu nedenle bir FCGI uygulamasında bellek kontrolü çok önemlidir.

Ak parti ve sansürcü zihniyeti yine iş başında

March 12th, 2009

Geçtiğimiz günlerde, özellikle de TÜBİTAK gibi, Türkiye’nin bilim ve teknolojik araştırma kurumunda patlak veren bir olay üstünde durmak istiyorum. TÜBİTAK’ın hazırlayıp yayına sürdüğü Bilim ve Teknik dergisi Mart 2009 sayısında, Darwin’in 200. yaş günü ve Evrim Teorisi’nin 150. yıl dönümü nedeniyle Charles Darwin’i kapak yapacaktı. İşte her ne olduysa bundan sonra oldu.

Kapak son anda değiştirildi ve Bilim ve Teknik yayın yönetmeni; Darwin’i kapak yapmak isteyen Dr. Çiğden Ataduman görevinden alındı.

Bu olayı ben ise Ak Parti’nin kurumsallaşmasını gösteren bir örnek olarak yorumladım. Harun Yahya’nın orayı burayı sansürlemesine izin veren sansürcü hükümet, şimdi ise kendi içerisinde ki yayınları sansürleme ile uğraşıyor. Hala yüz karamız olan youtube.com rezaleti (hiç yoktan ulaşmak isteyen anında ulaşabiliyor) ile ardı ardası kesilmeyen Harun Yahya sansürleri (Google Groups, Wordpress.com, Richard Dawkings), elbette Darwin’i kapak yapmak isteyen bilimcilere izin vermemeliydi. Olan da bu oldu.

Olay sonrası Tubitak’ın yaptığı açıklama ise tam bir “çevir kazı yanmasın” açıklaması.

Gidişatımız hiç iyi değil. Bu ülkede yaşanamaz olduğunu gösteren başka bir kanıt daha çıktı. Ama gelecek neyi gösterecek orası mechul.

Bir de Doğan‘ın tanımladığı angut insan modeli var. “Madem evrim teorisi var, günümüzdeki maymunlar neden insan olamıyor?” diye soruyorsanız, siz de evrim geçirip, önümüzde ki 50 milyon yıl içinde anguta dönüşebilirsiniz.

ext3 dosya sistemi imajı oluşturulması

February 8th, 2009

Öncelikle dd ile tamamı null bayt olan istediğimiz boyutta bir imaj oluşturuyoruz.

$ dd if=/dev/zero of=image.img bs=1M count=16

count değerini değiştirerek istediğiniz boyutta imaj oluşturabilirsiniz.
Oluşturduğumuz imaj dosyasını mke2fs ile ext3 dosya sistemi oluşturuyoruz.

# mke2fs image.img

Herşey bu kadar. Artık imaj dosyamızı mount edip kullanabiliriz.

# mount image.img /mnt/ -o loop

Diğerlerinin yapamadığını yapmak: FreeBSD

July 18th, 2008

Bir haftadır almış olduğum Edimax 7128G Wireless kartını AP (Access Point) olarak çalıştırmaya uğraşıyorum. Öğrendim ki, bu kartın ne Linux sürücüsü ne de Windows sürücüsü AP olarak çalıştırmayı desteklemiyormuş. RT61 özgür sürücü projesinin sayfasından edindiğim bilgiye göre, wireless kartım FreeBSD altında AP olarak çalışabiliyormuş. İşte FreeBSD ile tanışma fırsatım bu şekilde oldu.

Daha önce çok kısa bir süre denemiştim FreeBSD’yi. Bu kısa sürelik dilimde, kendisi adına bir şey öğrenmek gibi bir çaba sarfetmedim. Şimdi ise bir sunucu için vazgeçilmez olarak kullanabileceğim bir işletim sistemi olarak görüyorum. Çok katı olması kendini cezbeden özelliği.

FreeBSD yüklenirken sadece core olarak yükleniyor. Hiç bir paket kurulmuyor. Sadece Linux uyumluluğu isterseniz, Linux uyumluluğu paketi kuruluyor. Daha sonra FreeBSD protlarından istediğiniz yazılımı kurabiliyorsunuz.

FreeBSD’nin portları (paketler) ise baya esnek. İsterseniz hazır derlenmiş binary paketleri kurabiliyorsunuz, isterseniz paket CVS deposunu çekip, oradan istediğiniz paketi kurma talimatını verebiliyorsunuz. FreeBSD size paketi indiriyor ve gerekli yamaları uygulayıp kendine uygun halde derliyor. Tamamen Make tabanlı paket sistemi, istediğiniz ayarları da yapabilmenize olanak sağlıyor. Sistem aynı zamanda, istediğiniz zaman sonradan yüklediğiniz tüm paketleri silmenize izin veriyor.

FreeBSD network bazında da kendi kernelini kullanıyor. Tamamen kendisi için geliştirilmiş olan sshd, ftpd, natd gibi araçları kullanıyor. Network yapılandırması bir router için Linux’un iptables’inden çok daha kolay. Gateway özelliğini açmalı ve Nat’ı aktifleştirmeniz bir router yapmanız için yeterli.

Dökümantasyon konusunda ise yazılmış olan handbook, bilmek istediklerinizi fazlasıyla karşılıyor. Handbook FreeBSD’yi ilk defa kullanacaklardan ustalara hitap edecek seviyede. Bu kadar açık dil ile yazılmış bir tek PHP‘nin manuelini görmüştüm.

İnternet üzerinde biraz FreeBSD’yi araştırdığınızda ise Netcraft’ın uptime’ı en uzun süre olan makineler listesinde bir çok FreeBSD makina ile karşılaşıyorsunuz. Eğer linke tıklarsanız gerçekten bu sürenin hayli uzun olduğunu görebilirsiniz. 1735 gün (4 sene 10 ay) açık olan makineler söz konusu.

Programlama araçları olarak FreeBSD üzerinde, kendine göre modifiye edilmiş gcc mevcut. Kütüphaneler olarak glibc yerine kendi apileri var. İsterseniz glic’yi paket olarak kurabiliyorsunuz.

Gördüğüm bazı eksiklere değinmek gerekirse, malesef FreeBSD terminalinde UTF-8 karakter seti kullanmak mümkün değil. Terminal en fazla 255 karaktere kadar destekliyor. Bunun yanında herhangi bir sanal makina kurmak ta mümkün değil. Hostunuzda sanal makina kullanmak isterseniz sorun yaratabilir.

Uzun lafın kısası, gerek üretici tarafından, gerekse kullanıcı topluluğu tarafından AP modunda desteklenmeyen Wireless kartım FreeBSD sayesinde çok iyi bir şekilde hizmet veriyor. Bunun yanında katı Unix benzeri bir sistemi keşfetmek çok zevk verici.

Alien Numbers

July 8th, 2008

Google code.jam‘i keşfetmem üzerine hemen kolları sıvadım. Code Jam, Google tarafından düzenlenen bir programlama yarışması. Verilen problemleri istediğiniz bir programlama dili kullanarak çözmeye çalışıyorsunuz. Yarışmanın ilk ayağı 16 Temmuz Çarşamba günü başlayacak. Üyelik ücretsiz. Profesyonelinden öğrencisine herkes yarışmaya katılabilir. Birinciye $10.000 ödül verilen yarışmada derece yapmanın Google’da bir iş bulabilmeye yarayacağını düşünüyorum.

Şuan için code.jam’da örnek problemler mevcut. Bu problemler yarışanların code.jam hakkında fikir sahibi olmalarını sağlıyor. Pratikler alanında yer alan ilk problem Alien Numbers. Diğer problemlere göre kolay olan bu probleme bende bir çözüm üretmeyi başarabildim.

Nedir Bu Uzaylı Sayılar?
Pratiklerde yer alan ilk problem yeni bir sayı sistemi yaratmak ile ilgili. Problem sizden verilen karakterlere göre 2 değişik sayı sistemi yaratmanızı ve bu sistemde geçen bir sayıyı, ikinci sayı sisteminde yer alan karşılığını vermenizi istiyor. Diğer problemlere göre kolay olan bu problemi Perl ile yapmayı başardım. Size kısaca algoritmasından bahsedeyim.

Problemde yer alan açıklamaya bakacak olursak şu şekilde. Şuan kullandığımı sayı sistemi 0123456789 rakamlarından oluşmakta. Problem bize diyor ki size verdiğim karakterlerde bir sayı sistemi yarat ve alien sayısını, kaynak dil ile üretilmiş sayı sisteminden, hedef dil ile üretilmiş sayı sistemine tercüme et diyor. Problem programın yapmasını istediği 3 veri sunuyor.

alien_sayisi kaynak_dil hedef_dil

Problemin sayfasında yer alan örneklere bakacak olursak; alien sayısı olarak 9, kaynak dil olarak 0123456789 ve hedef dil olarak “oF8″ karakterleri verilmiş. Öncelikle kaynak dili ele alalım. Kaynak dil şuan kullandığımız sayı sistemidir ve oluşturulabilecek sayılar şu şekilde olmaktadır: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12… Görüdüğünüz gibi 0′ı kullanmadık. Sayma sayıları 1 den başlamaktadır. Hedef dilimizde de böyle olmalı. Verilen alien sayısı 9 bu sayı sisteminin 9. sayısını oluşturmaktadır. İkinci sayı sistemine bakacak olursak bize “oF8″ karakterleri verilmiş. Bu karakterler ile oluşturulacak sayılar şu şekilde olur: F, 8, Fo, FF, F8, 8o, 8F, 88, Foo, FoF… 9 sayısı kaynak dilimizde 9. sırada yer almaktaydı. Demekki 9 sayısının hedef dilimizde ki karşılı, hedef dilimizde 9. sıarada yer alan Foo.

Peki bunu programlama ile nasıl yapacağız?
Bu problemi programa dökmek için gerçek hayattaki gibi düşündüm (farklı çözümler üretenler de olmuş). Kullandığımız sayı sisteminde yer alan sayılar ile sonsuz miktarda sayı üretebiliyoruz. 0 1 2 3 4 5 6 7 8 9 ile saydıktan sonra 10 geliyor. Yani son sayıya geldiğimizde, eğer solunda bir sayı yoksa soluna bir ilk sayma sayımız ekleniyor ve ilk sayımız başa dönüyor. 17 18 19 20 şeklinde saydığımızda ise solda yer alan sayı, sayma sayılarımızın son sayısı olmadığından bir arttırılıyor. Yaptığım programın aynen bunu yapmasını sağladım. Öncelikle tüm sayıları bir array‘a bölüp, daha sonra 1. sayıdan başlayarak artmasını sağladım. Arttır fonksiyonunu inceleyecek olursak:

Teknik nedenlerden dolayı kaynak kod kaldırılmıştır. Lütfen aşağıdaki linkten kaynak kodu indiriniz.

Program üzerinde algoritmayı anlatmaya çalıştım. Programın tam halini:

http://onurs.googlecode.com/files/problema.zip

Adresinden indirebilirsiniz. Problem açıklaması ve girdi dosyası bulunmaktadır.

C ile Düzenli İfadeler

July 4th, 2008

Bu yazımda C programlama dili ile nasıl Düzenli İfadeler (Regular Expressions) kullanabileceğinizi anlatacağım. Yazı düzenli ifadeler’i bildiğinizi farz alarak hazırlanmıştır.

Öncelikle C dili için düzenli ifadeler kütüphanesini edinmelisiniz. GNU C Library ile gelen regex kütüphanesini kullanacağız. Eğer GNU tabanlı bir işletim sistemi kullanıyorsanız libc6-dev paketini yüklemeniz yeterli olacaktır. MS Windows tabanlı bir işletim sistemi kullanıyorsanız regex kütüphanesinin Windows portunu MinGW‘nin download sayfasından indirebilirsiniz.

Read the rest of this entry »

Vim ile işletim sistemi clipboardını kullanmak

June 23rd, 2008

Vim ile kendi bufferlerimizi kopyalayıp yapıştırmayı biliyoruz. Peki işletim sistemimizin (veya Linux için X) clipboardını nasıl kullanacaz. Bu işlem aslında çok basit. Tek yapmamız gereken "+y ve "+p kullanmak. Bu direk işletim sisteminin clipboardını kullanır.

Metal Gear Solid 4: Guns of the Patriots

June 12th, 2008

Bugün büyük gün. Solid Snake efsanesinin son oyunu Metal Gear Solid 4 bugün itibariyle üklemiz dahil olmak üzere tüm dünyada çıktı. Tabi ülkemizde diğer ülkelerde satıldığı fiyatın 3 misli daha pahalıya satılıyor. Şuan için bir PS3′üm yok ama bu oyun için almayı düşünmeden edemiyorum.

Japonya’dan bazı launch resimleri:

Resimler Famitsu‘dan alınmıştır.

JavaScript: The Definitive Guide

May 13th, 2008

Yeni Web 2.0 projemiz için kolları sıvadım. Şimdi yeni projenin adını söylemek istemiyorum ama baya kapsamlı olacağını belirtmek isterim. Proje için şimdiye kadar merak etmediğim JavaScript öğrenmem gerekli. Google’da kitap ararken bu kitaba rastladım ve benim gibi programlama bilen kişilere hitap ediyor. Programlama biliyorsanız ve JavaScript öğrenmek istiyorsanız, O’Reilly yayınevinden çıkmış JavaScript: The Definitive Guide tam sizlere göre.