Kişisel güncem dışında bu sayfalarda fazla bir şey yok. Son günce girdileri aşağıda, günce konuları ise yan tarafta bir yerlerde görülüyor olmalı. Bugüne değin yazılan bütün günceleri görmek için bir arşiv mevcut.
Günce girdilerine ilgili girdinin altında görünen “discussion” (tartışma) bağına tıklayarak (girdiyle ilgili olmasını umduğumuz) yorumlar yazabilirsiniz. Bu özellikten yararlanabilmeniz için bir openid (açık kimlik) hesabı edinmeniz gerekiyor.
Unutmadan… Halen üzerinde çalıştığım irili ufaklı yazılım projelerinin bir listesine code.00101010.info bağından, şahsımla ilgili irtibat bilgilerine de şuradan ulaşabiliyor olmanız lazım.
Vimperator
Bu bir eklenti değil, bir devrim! Ağlamak istiyorum…
:set guioptions=bS
:o 00101010.info
Emacsen’ler mahzun olmayın, sizin için de var birşeyler.
Posted Thu 17 Jul 2008 11:12:43 PM UTCGolf
Ukalalığımı mazur görürseniz…
Burada
kestirmesi tabiatıyle awk veya sed:
awk -F'=' '/^PROJECT_ROOT=/ { gsub("\"","", $2); print $2 }' gitweb
sed -ne 's/^PROJECT_ROOT="\([^"]\+\)"/\1/p' gitweb
Filhakika perl‘de de bu bir “tek satırlık”tır:
perl -nle 'print $1 if /^PROJECT_ROOT="([^"]+)"/' <gitweb
Yok “ama bu bir betiğin bir şeysi sadece” ise, lafı uzatmadan dilin “selika”sına uygun bir golf atışı yapılır:
...
open CONF, 'gitweb' or die "yok açılmıyor: $!";
my $projectroot;
while (<CONF>) {
do { $projectroot = $1; last } if /^PROJECT_ROOT="([^"]+)"/;
}
...
Yok eğer “ben OOP manzarası isterim”se CPAN’da tura çıkılır, “sıtriim itereyt” eden OOP soslu bir modül bakılır.
Aynı kalbe hem Python hem Perl biraz zor girer; birini seven diğerini
terkeder.
Perl benim ilk aşkım; terkeden olmadım hiç bir zaman, Perl de
bu kaidenin dışında değil.
Frobozz
Bir süredir, elimdeki bazı C tabanlı yazılım projelerinde kullanabileceğim ve
öğrencilere de önerebileceğim basit bir Birim
Test kitaplığı
arıyordum. Birim Test konusunu (ve daha genel düzeyde XP’yi) önemsiyorum;
disiplinle icra edilen her işi önemsediğim gibi. Nedense bu disiplin ve
hackerlık sözcükleri kulağa çok da uyumlu gelen bir terkip oluşturmuyor. Eğer
bu uyumsuzluğu gidermek hacker sözcüğünü lugatten silmemi gerektirseydi bu
durumu sanıyorum ben de Thomas Dickey gibi
gerekçelendirirdim… ve evet
Linus Torvalds’ın bu tip konulardaki olumsuz etkisinden haberdarım 
Önce hazır Debian paketleri sonra da Google üzerinde yaptığım aramalarda
check dışında tatminkâr birşey bulamadım;
tâ ki en cutest olanıyla karşılaşıncaya
kadar… Doğrusu check‘in de hakkını vermek lâzım, autoconf araçlarıyla
uyumlu çalışıyor. Fakat ben biraz daha basit birşeyler peşindeydim. Aslında
basitlik sözü beklentimi tam ifade etmiyor. Tekerleği yeniden icat için
önemli bir gerekçem olmadığı sürece kullanmaktan kaçınmadığım Glib’le tümleşik
bir birim test kitaplığı hemen tercih edebileceğim bir şey olurdu ve bunu
yaparken kitaplığın karmaşıklığına değil karmaşıklığı Glib içinde nasıl
gizlediğine bakardım. Ama böyle bir kitaplık yok (ben bulamadım en azından).
Bu durumda Glib dışına çıkıyorum; bulacağım kitaplığın Glib’in rengi içinde
kaybolacak kadar basit olmasını istememin nedeni bu.
Sadece GNOME için değil genel amaçlı bir kitaplık olmak iddiasındaki Glib’de
eksikliğini hissettiğim birkaç şeyden biri bu birim test, bir diğeri de “komut
satırı ayrıştırıcısı”. GNOME uygulamaları yaygın şekilde popt‘u kullanıyor.
Eminim ki bana malum olmayan çeşitli gerekçeleri vardır, fakat neden argp
değil? Madem Glib dışında bir çözüm aranacak ve komut satırı bir GUI programı
için çok da kritik bir alan değil, bağımlılıkları azaltmak adına argp daha
uygun olmaz mıydı? Komut satırı ayrıştırıcısının Glib içinde olmaması benim
de zor yoldan öğrendiğim bir yerelleştirme kusuruna yol açıyor. Glib
üzerinden g_print ailesi ile görüntülenen yerelleştirilmiş iletilerin doğru
şekilde görüntülenmesi için bind_textdomain_codeset(PACKAGE, "UTF-8") gibi
reçetelendirilmiş bir çağrı gerekiyor. Sorun şu ki, bu çağrıyı argp‘nin
faaliyetlerinden önce yaparsanız komut satırı iletileri Türkçe olarak doğru
basılmıyor. Eğer komut satırı ayrıştırıcısı Glib’e tümleşik, yani ileti
trafiği için aynı alt yapıyı kullanıyor olsaydı böyle bir sorun da
olmayacaktı. popt‘un bu meseleyi erkanına uygun şekilde çözdüğünü de
sanmıyorum, fakat aşağı yukarı her GNOME uygulamasında gördüğüm şu libpopt
bağımlılığından dolayı hazzetmediğim bu kitaplığı da denemek istemiyorum.
Birim test meselesi… CuTest basit iki dosyadan oluşuyor: CuTest.c ve
CuTest.h. CuTest’i kullanan bir gerçek hayat örneği aradım ve izini
APR‘de buldum, üstelik tam da benim arzuladığım bazı
zenginleştirmelerle. Apache geliştiricileri de basitliğinden dolayı CuTest’i
kullanmış. Glib’e alternatif olarak öne sürülebilecek genel amaçlı bir C
kitaplığı önermem gerekseydi bu basitçe APR olurdu. Bellek havuzu ve
kanallama (threading) özellikleri harika. Apache grubunun yazılım misyonuna
da uyuyor, yani taşınabilirliği üst seviyede. Pratik sonuçları itibarıyla bir
karşılaştırma yapmam mümkün değil, ama taşınabilirliği Glib’den daha iyi
olmalı. APR, Glib bağlamında önemli pratik sonuçlara yol açacak bir
farklılık var mamafih. APR, özgür fakat GPL uyumlu olmayan Apache lisansıyla
geliyor. Yani projenizde GPL bir bileşen varsa APR’den mahrum kalacaksınız;
ufak tefek kod parçaları için benim de sığındığım fair use hali veya kişisel
kullanım dışında tabii.
CuTest‘i APR’deki değiştirilmiş haliyle alarak
autoconfiscate
etmeye çalıştım. Amacım make check ile icra edilen check hedefini
gerçeklemekti. Bu tip muhayyer makamlarda kullandığım bir isimlendirmeyle
frobozz dizininde
başlayan denemeler olumlu sonuçlar verince bu test sürecini daha da otomatize
etmek için birkaç betik yazarak tests/Makefile.am‘e ekledim. Fakat
automake‘in keder verici kısıtlarından dolayı normalde sıradan bir
Makefile’da çalışan birçok numara automake‘de çalışmıyor (ör. *_SOURCES
değişkenlerinde dosyaları açık halde vermek gerekiyor, joker karakterler
sapıtıyor vb.). Kod üreten betikleri oldum olası sevmemişimdir. Doğru çözüm
CuTest’de yani kitaplık düzeyinde değişiklikler yapmaktı ki şu anda kaçındığım
bir şey bu. Bu yüzden autoconfiscate sürecini basit tuttum. Böylesi
anlaşılırlık adına daha iyi oldu.
Çalışmaların bir noktasında bu işin bir tür şablona dönüştüğünü görerek Glib,
debug, profile ve gettext desteği gibi fazladan bir kaç özellik daha ekleyerek
frobozz’u genelleştirdim ve son aşamada umumun menfaatini düşünerek frobozz’da
şahsıma ait kalıntıları da bul/değiştir yaparak özelleştiren bir frob
betiğiyle meseleyi nihayetlendirdim
Aslında kalıntılar tamamen kalkmadı;
frobozz hâlâ var, bu şablonu bir tar
paketi halinde
indirebilirsiniz. Bunu yaparken
frob betiğini de (son
haliyle) depodan almayı unutmayın. Çalışma prensibini ayrıntılı olarak
anlatmaya eriniyorum. Kaynak koddaki her foo.c dosyasına bir test suiti
muamelesi gösterek buna ait bir tests/test-foo.c dosyası oluşturuyor ve
birim test rutinlerini yazıyorum. Test rutinlerini ana kaynak koddan ayırarak
kendi başına bir tests dizinine koymak autoconfiscation‘ın bir gereği ve
ortalığın düzenli görünmesine de yarıyor. Tabii bunu sağlamak için bir dizi
derleme numarası gerekiyordu. Şu erken safhada çok kusuru olduğuna eminim.
Denemek isteyeceklere iyi froblamalar!
Küre
6 (yazıyla “altı”) dersle boğuşuyorum; sabah ders, gece ders… Öğretim görevliliği tuhaf iş… Şöyle çayımı, kahvemi alıp gönlüme göre bir kaç satır kodlamayı, bir kaç paketi kurcalamayı özledim. Gönlüme uymayan her işte yaptığım gibi, “ceketini alıp terk-i diyar” eden adama ne kadar yakınım, bakacağız… En son Ankara’ya yaptım bunu galiba…
Dersler çoğu noktada doğaçlama gidiyor. Tezgahı kuruyorum kürsüde, heybemdekileri boşaltıyorum. İşte elma, portakal; tatlı, çürük, bayat ne dökülürse. Müşterilerin (öğrenciler) ilgi veya ilgisizliğini umursamadan… Mal ortada; beğenen alıyor.
Kürsü, çevresinde binbir kirpiğin kırpıştığı cam bir kürenin merkezi gibi, “nazar değmesin” sözünün ayıp kaçacağı bir yer….
Merkezden dışarı bakmazsanız içine hapsolursunuz. Ben de öyle yapıyorum, üstelik hiçbir şekilde denetleyemediğim bir dikkatle; “bak bu çocuk çok uykusuz”, “bu moralsiz”, “hmmm, anlamadılar, hay Allah!”, “bu benzetme uymadı”, “şunun bir sorunu var, ikide bir telefonuna bakıyor”. Arada bir beyinlerinin hangi noktasının veya benim hangi açıklamamın tetiklediğini bir türlü bilemediğim tuhaf soru veya gülüşmeleri bir yana bu arkadaşları seviyorum. Yorulmak kötü de değil hani! Ama işte, yoruluyorum…
Gürol Ağırbaş, “Köprüler / İki Dünya”… “Dört Mevsim” veya “Carmina Burana”yı Savni Sami Özer‘den dinlemek iyi gidiyor.
Posted Thu 17 Jul 2008 11:12:43 PM UTCDebian-installer hakkında karalamalar
Debian-installer rüştünü ispatlamış Debian tekniklerinin etkin şekilde kullanıldığı bir proje. Nedir bu teknikler?
Kurulum modüllerinin birer mikro Debian paketi olması (
udeb)Aslında hikayenin başladığı yer burası. Herşey bir paket olunca aşağıda sıralanan olumluluklar kendiliğinden geliyor. Mikro Debian paketlerini normal paketlerden ayıran husus, paket boyutunu küçültecek her türlü imkanın bu paketler üzerinde uygulanması. Normal paketler için geçerli “Debian şartnamesi” (Policy) bu paketler için geçerli değil mesela.
Hata takibi için BTS’in (Debian Hata Takip Sistemi) kullanılması
Kanaatimce BTS’i önemli yapan husus Debian iş akışının ana dilini oluşturan bir “jargon” sunması. Bu jargon bir kere benimsendiğinde öylesine zengin olanaklar sunuyor ki bazen çok farklı bir dil konuşuyormuş izlenimine de kapılıyorsunuz. Geliştirici cephesinden bakıldığında BTS’in kullanımı çok kolay ve galiba gücünü de basitliğinden alıyor.
Sadece debian-installer hatalarını takip etmeye yönelik olarak eklenen bir ‘
d-i’ etiketi ve kurulum raporları için kurgulanmış bir ‘installation-reports’ sanal paketiyle BTS’in projeyle entegrasyonu etkin şekilde gerçekleştiriyor.Debconf altyapısının kullanılması
Debconf ESR’ın ayrıntılı şekilde belgelediği Un*x Zen‘iyle uyumlu bir yapılandırma sistemi. Paket yapılandırma betikleri Debconf protokolü denilen, SMTP’ye benzer tek satırlık komutlarla Debconf ile haberleşiyor. Bu haberleşme sonucunda kullanıcıyla etkileşime giren önyüz pakete ilişkin ayarları kullanıcıdan alıyor ve paketi yapılandırıyor.
İlk tasarımı takip eden dönemde Perl tabanlı Debconf kitaplığı yazılmıştı. Debconf’un d-i’a entegrasyonunda ilk adım bu kitaplığın C ile baştan yazılmasıydı. Bu çalışmaların sonucunda ‘
cdebconf’ doğdu. D-i’ın iskeletini oluşturan birkaç modülden birisi de budur. Debian-installer esas itibarıyla alt yapıda Debconf’un kullanıldığı, merkezinde kurulum modüllerini çalıştıran ana menü (main-menu) modülünün bulunduğu bir modüller bütünüdür.D-i bugün itibarıyla ‘
newt’ kitaplığına dayalı metin tabanlı bir GUI olan ‘dialog’ önyüzünü kullanıyor. Son kullanıcı veya eye candy düşkünleri için GNOME tabanlı bir önyüz kullanılması da planlanıyor. Bu gerçekleştiğinde sanıyorum şuna benzer bir şeyler çıkacaktır ortaya:

Po-debconf
Debconf’un ilk tasarımında i18n desteğinin dikkate alınmadığını söyleyemeyiz. Fakat bu destek ‘GNU gettext’ tabanlı değildi. Neyseki yerelleştirme konularında yüksek hassasiyete sahip bir kısım Fransız geliştirici sayesinde[1] bu özellik ‘po-debconf’ adıyla sisteme eklendi. Po-debconf’un Debian yerelleştirme çalışmalarında patlama oluşturduğunu söylemek abartı olmaz. Debian-installer şu satırların yazıldığı tarih itibarıyla 40 dilde konuşabiliyorsa bunun birinci nedeni po-debconf’dur. (İkinci nedeni de Christian Perrier

Projenin sürülebilirlik kararı için Debian arşiv kurallarının uygulanması
Birer Debian paketi olduğunu söylediğimiz modüller sürüldüğünde
unstable‘a giriyor ve Debian arşiv kuralları çerçevesindetesting‘e ilerliyor. Bunun sonucunda ‘testing’ havuzundan inşa edilen günlük d-i CD’leri ortaya çıkıyor. Yani ‘testing’de (ki bir sonraki kararlı sürüme taban teşkil edeceğinden bu arşivin diğer adısarge) toplanan paketler bir dizi kriteri de sağlamış olduğundan günlük d-i CD’lerinin göreceli olarak kararlı olduğunu söyleyebiliyoruz.Çoklu platform
Debian’ın 11 farklı platformda çalışmasının arkasında ‘
buildd’ dediğimiz otomatik inşa betikleri yatıyor. Aynı betikler d-i paketlerini de işlediğinden kurulum programınıi386platformu dışında da çalıştırabiliyoruz. Modüllerin bir platformda derlenmesi d-i’ın o platformda çalışması için yeterli değil tabii. (Özelliklesparcves390RC1’e kadar çok sorun çıkarıyordu.)APT entegrasyonu:
“Anna’s not nearly apt”. D-i’ın çok sayıda kurulum senaryosunu desteklemesinin arkasında ‘
anna’ modülü yatıyor. Bu modül sayesinde udeb’ler bir dizi ‘alıcı’ betikle çeşitli kaynaklardan alınarak APT tarzı kurulabiliyor.Debootstrap entegrasyonu:
‘Boot-floppies’ günlerinden kalan bu klasik Debian aracıyla bir hedef kafes ortamına Debian iskeleti kurulabiliyor. Debootstrap’ın d-i’a entegrasyonu, olgunluğunu ispatlamış Debian mirasının yeni birşeyler keşfetmeye lüzum bırakmadan kullanılabileceğine güzel bir örnek.
[1] Dillerini korumak için yasa çıkaran, Cemil Meriç’in ifadesiyle Dünya Edebiyatının sekreteryalığını yapan bir ulus olarak Fransızların i18n duyarlılıklarını anlamak mümkün. GNU gettext’in şef geliştiricisi Francois Pinard’ı anmak isterim hemen. Debian kapsamında po ve po-debconf çevirilerinde eriştikleri yüksek yüzdeyi de belirtmeden geçemeyeceğim. (po-debconf çevirilerinde 50’ye yakın dil arasında Türkçe 10’uncu geliyor. Büyük ölçüde d-i çevirileriyle yakalanan ve tabii daha da yukarılara çekmemiz gereken bir oran bu.)
Posted Thu 17 Jul 2008 11:12:43 PM UTCÖzgür yazılım projelerinde yönetim sorunları
Ubuntu’nun patronu, emekli kozmonot Mark Shuttleworth, özgür yazılım
projelerinde para desteği (finansman) ve yönetim sorunlarıyla ilgili olarak
günlüğünde önemli
değerlendirmelerde bulunmuş. Çeşmenin başında işlerin nasıl göründüğünü
anlamak açısından da önemli 
Dpkgolf: debhelper’dan veya herşeyden sıkıldığım anlar
Kabul etmeliyim ki bendeki bu Perl ve Golf takıntısı hayra alâmet değil. İster istemez bir miktar (yoksa daha mı fazla?) “smarty pants” oluyorum. Sunucu tarafında bu girdiyi alır almaz “çift tırnakları” tashih etmeye girişen SmartyPants gibiyim. Bak yine geliyor fevç fevç: “Perl”, “Golf”, “SmartyPants”…
Birşeyler anlatacağım anlatmasına da bu girizgâh emekli bir başçavuşun muharebe hatıralarını anlatmaya bir türlü fırsat bulamadığı bir sohbetin orta yerine dalışına pek bir benzedi. Hikâye o ki emekli başçavuş askerlik hatıraları dışında her mevzudan dem vurulan bu sohbetten çok sıkılmış: “Yahu birisi de askerlikle alakalı bir çift laf etse de biz de konuşsak” diye dört dönüyor. Dakikalar geçiyor, tık yok, (kendince) hep yavan konular… Bakmış olmuyor; sohbetin duraksadığı kısa bir sessizlik anında, o sessizliği yaran bir patlamayla kükremiş: “Booooommm!’”… Ve sonra devam etmiş: “Boom denildi de aklıma geldi. Hiç unutmam bir gün cephedeyiz…”
Hadi bakalım, “Perl, Golf, SmartyPants” denildi de aklıma geldi şimdi.
Efendim, hiç unutmuyorum böyle IkiWiki’yle boğuştuğumuz demler, yeni eklenti
adayları taraştırıyoruz.
SmartyPants bunlardan biri.
Markdown kullanılır da
SmartyPants olmaz mı yanında hiç? Yakışır kardeşime! Tabii eklentiden önce
bunu paketlemek gerekiyor. CPAN’de
Text-Typography
adıyla mevcut.
Sıra paketlemeye gelince bir fenalık bastırdı üzerime ki deymeyin gitsin. Önce
Debian Perl Polisi
ne diyor onu incelemek lâzım, sonra debhelper… Hani “adventure oyun
çözümü gibi” derler ya öyle bir hâl! Sıkıntının doruklarında şeytana uydum.
Debian Polütbüro sekreteri Manoj baba tarafından lanetlenmeyi göze alarak
CDBS‘e yöneldim. Koşarak
uzaklaştığım noktada geleneklerin çağrısını duymam imkansızdı artık. Viayımda
seken parmaklarıma hükmedemiyordum. Şu üç satırlık debian/rules (evet,
“Debian rulez!”) ne kadar da tahrik ediciydi! Üç vuruşluk bir oyuna sahne
bir golf sahasında dolaşan develer, viayım kemılım! Hayır bu bir sanrı
olmalıydı!
#!/usr/bin/make -f
include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/class/perlmodule.mk
Sonuç? Debian
paketi ve
IkiWiki tipografi eklentisi.
Pişman mıyım? Hmm, hayır. “Cdbs-Fu” gerektirmeyen bu paket için değil.
Neredeyse bütün Debian (ve -son baktığımda- Ubuntu) GNOME paketlerinde
kullanılan bir alt sistem olarak cdbs için bu paket leblebi mesabesindedir.
Bir daha yapar mıyım? Uygun şartlar oluştuğunda, evet. “Uygunluk”
sorgulamasında yararlanabilecek mütalaalar hakkında buyurun:
Enteresan karışımları tatmaya devam… Dolapdere Big Gang‘den “Local Strangers“… “Enjoy the silence” ne güzel, “Shut up” da öyle… Şadapma zamanı geldi. Türkçe’nin “smarty pants”leri! Sıkıysa yakalayın beni, size inat şadapıyorum!
Posted Thu 17 Jul 2008 11:12:43 PM UTCViayım, Kemılım
Mualla üstadımız Bram Moolenaar‘ın Stephen Covey’in “Etkili İnsanların 7 Alışkanlığı”ndan aldığı ilhamla irad ettiği o eşsiz “Metin Düzenlemede 7 Etkili Alışkanlık” hutbesinin ikinci sürümü çoktan duyurulmuş da haberimiz olmamış. Google vidyo kayıtları ve metni, ne güzel!
Bir de Boran söylemişti, kısa Camel’in yeni şeysi çıkmış. Samsun’a düşmedi daha… Böyle kahverengi bir paket, içimi hoş. Nereden mi biliyorum? Onur Ankara’dan gelirken sağolsun bir paket getirdi.
Telefon açacaktım Boran’a bu akşam, unutmuşum. Neyse “aydınlık şafaklar” görüşmesini sonra yaparız artık. Sahra Sıhhıye kurrasını bekliyoruz heyecanla…
Posted Thu 17 Jul 2008 11:12:43 PM UTCBellek kaçaklarının peşinde koşuşturmacalar
Glib’le uğraşmaya devam ediyorum [1]. 2.6 sürümünde kitaplık arayüzüne bir komut satırı ayrıştırıcısı eklendiğini Enver’in bilgilendirmesiyle öğrenmiştim. O konuyla bilâhare ilgileneceğim. Ondan önce bellek kaçaklarını yakalamak için kitaplığın ne tür imkanlar sağladığını veya kaynağı yeniden derlemeyi gerektirmeyen Valgrind ile Glib’in arasının nasıl olduğunu anlamak istedim. Basit bir deneme:
$ cat >foo.c <<EOF
#include <glib.h>
int
main()
{
GList *foo = NULL;
foo = g_list_append(foo, "foo");
g_list_free(foo);
exit(0);
}
EOF
$ gcc -o foo foo.c -I/usr/include/glib-2.0 \
-I/usr/lib/glib-2.0/include \
-lglib-2.0
$ valgrind ./foo
...
==15671== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 15 from 1)
==15671== malloc/free: in use at exit: 2149 bytes in 4 blocks.
==15671== malloc/free: 4 allocs, 0 frees, 2149 bytes allocated.
==15671== For counts of detected errors, rerun with: -v
==15671== searching for pointers to 4 not-freed blocks.
==15671== checked 84068 bytes.
==15671==
==15671== LEAK SUMMARY:
==15671== definitely lost: 0 bytes in 0 blocks.
==15671== possibly lost: 0 bytes in 0 blocks.
==15671== still reachable: 2149 bytes in 4 blocks.
==15671== suppressed: 0 bytes in 0 blocks.
==15671== Reachable blocks (those to which a pointer was found) are not shown.
==15671== To see them, rerun with: --show-reachable=yes
Hmm… Ayrılan bütün belleği serbest bıraktığımız halde “ulaşılabilir
durumda” olduğu bildirilen birkaç blok görülüyor. Tahmin edilebileceği gibi
zararsız bir durum söz konusu. Kitaplık kendi içinde bazı işler çeviriyor.
Glib’in mem-pool özelliği bu. Kendisine başvurulduğu anda Glib, bellek
havuzundan hazır birkaç parça koparıyor ve nasıl olsa süreç sona erdiğinde
sisteme iade edilecek belleği serbest bırakmaya çalışmıyor. Tablo basitçe bu
sanıyorum. Doğru mu anladım?
Zaten yeterince kirli durumda olan Valgrind çıktısında en azından şu özet
kısımlarını temiz görmek isterdim. Google aramalarında bu hususta açık
öneriler bulamadım. Belki kitaplığın hata ayıklama sürümünde bu işin icabına
bakmışlardır düşüncesiyle -dbg paketini kurdum: sonuç yok. Hata ayıklama
sürümü sadece kitaplık simgelerini içeriyor, yani unstripped bir sürüm.
Program çökmeleri için faydalı olabilir.
Kaynağı yakından inceleyelim:
$ apt-get source libglib2.0-0
Glib’in inşa seçeneklerini incelediğimde çözümün ne olduğunu farkettim.
Seçenekler arasında disable-mem-pools gibi bir şey var. Bu seçeneği
kullanan -full-dbg gibi bir paket hazırlamak isterdim doğrusu. Fakat
kitaplık paketleri hazırlamak her zaman müşkildir. Üstelik DBS kullanan bu
paket yeterince de karmaşık. Bunun yerine debian/rules‘da inşa
seçeneklerine şunları ekledim:
--disable-mem-pools --disable-threads
İkinci seçenek full-dbg hatırına… Paketi yeniden derlediğimizde
(devscripts/debuild) oluşan yeni libglib2.0-0‘daki /usr/lib/* içeriğini
mesela /usr/local/lib/debug gibi bir dizine koyuyoruz ve klasik bir
numarayla sonuç:
$ LD_LIBRARY_PATH=/usr/local/lib/debug valgrind ./foo
...
==16035== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 15 from 1)
==16035== malloc/free: in use at exit: 0 bytes in 0 blocks.
==16035== malloc/free: 1 allocs, 1 frees, 12 bytes allocated.
==16035== For counts of detected errors, rerun with: -v
==16035== No malloc'd blocks -- no leaks are possible.
KDE ekosisteminden çıkan Valgrind çok yararlı bir araç. Hararetle öneriyorum.
Bunların dışında araçlar da var: mesela memprof. Fakat motor tamirini böyle
grafik ortamda icra etmeyi pek sevmiyorum. Valgrind için de bir grafik arayüz
var: alleyoop. Lütfen bu tür arayüzlerden uzak duralım
Belirtmeden
geçmeyeyim, Glib’in kendi araçları da gayet güzel. Mesela şu:
extern GMemVTable *glib_mem_profiler_table;
g_mem_set_vtable(glib_mem_profiler_table);
...
g_mem_profile();
Ama Glib’in bulaştığı bir davanın salâhiyeti için soruşturma tamamlanıncaya
kadar kendisini açığa almamızda fayda var 
Larry Wall ve Türkçe
Linux’da genel olarak u18a ve özellikle de UTF-8 kullanımıyla ilgili benim
de takip ettiğim güzel bir eposta
listesi mevcut. Listede birkaç gün
önce UTF-8’de karakter dönüşümleri hakkında gelen bir soru üzerine ilginç bir
tartışma döndü. Tartışmayı
ilginç yapan husus taraflar arasında Perl’ün babası büyük üstad Larry Wall ve
(eğer bu bir isim benzerliği olmayacaksa) düzenli ifadelerin mucidi Henry
Spencer’in olması, ve konunun Türkçenin karakter dönüşümlerindeki oyun bozancı
tekilliği etrafında dönmesiydi. Acaba bu ileti zincirini daha önceden
önerdiğim (ve hâlâ vakit
ayırıp da üzerinde çalışamadığım) Wikipedia belgesine “Hangi şöhretler ne
dedi?” türünde bir magazin kısmı olarak eklesek mi? 
Bayram
Efendim, bir bayram daha geldi çattı ve, adet olduğu üzre, kendimizi bayram arefesindeki prokrastinasyonal, yani nasıl derler, “yapılmasa da olur, ama yapacağım” nev’inden meşgaleler arar hâlde bulduk. Bu jurnal cümlelerine hasbel kader gözü takılan cümle cemaatin Ramazan bayramını kutlayalım evveliyetle.
Kuşların getirdiği kimi haberler sayesinde, memleketin muhtelif medreselerinde
verilmekte olan C derslerinde bizce “konayo” olarak bilinen, ecnebicesi
conio.h olan taşınamazların, dersleri deruhte eden muallimler indinde
musallat bir fikri sabite inkılâp ettiğini esefle öğrenmiş bulunmaktayım.
Tabii ki bu mezalimde, inançları hilafında bir makama râm olmak durumunda
kalan istiklâl ve istikbal sahibi talebelerin haykırışlarına (ki cihan şümul
bir mahiyet arz ettiği kat’i olan bu çığlıkları sizin de
duymanız
pek mümkün) kulaklarımı tıkayamazdım. Ez-cümle işte o “bayram arefesi
eğlencelik demler”e konumlandırdığımız mütevazı bir çalışmanın neticesi olarak
course-goodies
yaşca bendenizden küçük bu kardeşlerime bir bayram hediyesi olsun bakalım.
Package: course-goodies
Architecture: all
Description: Course goodies for C/C++ language courses
Nothing interesting here; only a few source files, notably 'conio.h',
to allow FLOSS-minded students to 'getch' or 'kbhit' while studying
some examples dictated by some lecturers.
Marifetlerini ifade etmeye birkaç satırın kâfi geleceğini de düşünmekteyim:
$ cat >t.c <<'EOF'
#include <stdio.h>
#include <conio.h>
int main()
{
/* falan filan */
printf("Bastırın herhangi bir tuşa devam etmek için...\n");
getch();
return 0;
}
EOF
$ gcc -o t t.c
In file included from t.c:2:
/usr/include/conio.h:4:2: ... "using 'conio.h' is using a non-standard or vendor"
/usr/include/conio.h:5:2: ... "spesific or non-portable feature (whatever you prefer),"
/usr/include/conio.h:6:2: ... "please do use a more portable lib (e.g. ncurses)"
/usr/include/conio.h:7:2: ... "this is only a partial implementation of 'conio.h'"
$ ./t
Bastırın herhangi bir tuşa devam etmek için...
Bir zamandır tercüme vesair işlerle de üstünüze afiyet pek uğraşamıyorum, binaenaleyh yukarıda iktibas ettiğim tercümelerin kalite murakabesini de işbu satırları buraya kadar okuma zahmetinde bulunmuş muazzez kaarilerime bırakıyorum. Hayırlı bayramlar!
Posted Thu 17 Jul 2008 11:12:43 PM UTCOyun havası
Bu oyun havası Chavez, Kastro ve bendenizin de naçizane gayretleriyle tahta oturan adamım Sam Hocevar‘a gider. Dunc Bank operasyonu unutulur mu hiç? Hmm, sıradaki?

Hamiş: Tamam Hüsnücüğüm! Oyun havasını bilâhare lastfm’e geçireceğim…
Posted Thu 17 Jul 2008 11:12:43 PM UTCJavaBetiği
Aşağıdaki kod:
document.write(new Date().toLocaleString() + '<br/>');
document.write('IİĞÜŞÖÇ'.toLocaleLowerCase() + '<br/>');
document.write('ıiğüşöç'.toLocaleUpperCase() + '<br/>');
Wine üzerinde IE6+SP1’de şunu yazıyor:
24 Nisan 2007 Salı 01:00:28
iiğüşöç
IIĞÜŞÖÇ
Doğal ortamında IE6+SP2’de şöyle:
24 Nisan 2007 Salı 01:00:28
iİğüşöç
ıIĞÜŞÖÇ
Firefox (Iceweasel) sürüm 2.0.0.2’de ise şöyle:
Sal 24 Nis 2007 01:07:08 EEST
iiğüşöç
IIĞÜŞÖÇ
Üstad Brian Kernighan’ın Princeton’da verdiği bir ders var: “Computers in Our
World”. Bu
derste sunulan “Toy Machine
Simulator”
isimli JavaScript’le yazılmış basit benzeticiyi Türkçe’ye uyarlayalım dedik
(sağolsun Nurettin büyük ölçüde halletti).
Fakat yükle (load), çıkar (subtract) buyrukları falan derken işlerin
beklenildiği gibi seyretmediğini görünce yukarıdaki denemeleri yapmak
durumunda kaldım. Bu ECMAScript nanesini yanlış anlamıyorum değil mi?
‘toLowerCase’ var, bir de yerel duyarlı olması umulan ‘toLocaleLowerCase’
var; ne âlâ! “Yereli doğru mu algılıyor bu?’ kaygısıyla new
Date().toLocaleString()’ şeysini özellikle bastırıyorum, orada sorun yok
gözüküyor. ‘toLocale{Lower,Upper}Case’ işlevlerinin semantiğinden emin
olmak için David Flanagan’ın “JavaScript The Definitive
Guide”
kitabına da baktım. Buyurun ‘String.toLocaleLowerCase’ maddesini okuyalım
(vurgular bana ait):
A copy of string, converted to lowercase letters in a locale-spesific way. Only a few languages, such as Turkish, have locale-spesific case mappings, so this method usually returns the same value as
toLowerCase().
İşin içinde başka bir bit yeniği yoksa şayet (ilgilenenler benimle irtibata geçebilirler) nurtopu gibi bir Türkçe böceği var ortada, en alışıldık türden…
Şimdi bu böceği ezseniz n’olur ezmeseniz n’olur (şüphesiz ki raporlanması
gerekiyor; en azından Mozilla Seamonkey grubuna)? JavaScript hataları
“erörlü pul” gibidir;
kıymetlidir, bir kere ortaya çıkmışsa sittin sene (sittin: Arapça’da 60)
başbaşa yaşarsınız!
(Daha iyisini buluncaya kadar) aşağıdaki gibi bir
geçici çözüm uydurdum buna. Google’dan böyle bir şey aratan olursa ağa
takılsın diye buraya koyuyorum:
var TURKISH_CODEPOINTS = '\u00e2\u00e7\u011f\u0131\u00f6\u00fb\u00fc\u015f' +
'\u00c2\u00c7\u011e\u0130\u00d6\u00db\u00dc\u015e';
var TURKISH_LETTERS = 'a-zA-Z' + TURKISH_CODEPOINTS;
var _turkish_hack = { lower:[], upper:[] };
if ('I'.toLocaleLowerCase != '\u0131')
_turkish_hack.lower.push({ se:new RegExp('I', 'g'), re:'\u0131' });
if ('\u0130'.toLocaleLowerCase != 'i')
_turkish_hack.lower.push({ se:new RegExp('\\u0130', 'g'), re:'i' });
if ('\u0131'.toLocaleUpperCase != 'I')
_turkish_hack.upper.push({ se:new RegExp('\\u0131', 'g'), re:'I' });
if ('i'.toLocaleUpperCase != '\u0130')
_turkish_hack.upper.push({ se:new RegExp('i', 'g'), re:'\u0130' });
if (_turkish_hack.lower.length)
String.prototype.toTurkishLowerCase = function () {
var fixed = this;
for (var i in _turkish_hack.lower)
fixed = fixed.replace(
_turkish_hack.lower[i].se,
_turkish_hack.lower[i].re
);
return fixed.toLocaleLowerCase();
}
else String.prototype.toTurkishLowerCase = String.prototype.toLocaleLowerCase;
if (_turkish_hack.upper.length)
String.prototype.toTurkishUpperCase = function () {
var fixed = this;
for (var i in _turkish_hack.upper)
fixed = fixed.replace(
_turkish_hack.upper[i].se,
_turkish_hack.upper[i].re
);
return fixed.toLocaleUpperCase();
}
else String.prototype.toTurkishUpperCase = String.prototype.toLocaleUpperCase;
Problem ‘ıİ’ harflerinde olduğundan sadece onlar için kendinden ayarlı bir
şeyler kodladım. ‘toLocale{Lower,Upper}Case’ yerine
‘toTurkish{Lower,Upper}Case’ kullanılması yeterli olmalı (fazla deneme
yapmadım, hataları olabilir). Bir de ‘TURKISH_LETTERS’ adında bir karakter
aralığı tanımladım. Düzenli ifadelerde faydalı olabilir. Şunun gibi
(‘toysim.js‘den alıntı):
op = s.replace(new RegExp('^[_' + TURKISH_LETTERS + ']\\S*'), "") // zap label if present
Posted Thu 17 Jul 2008 11:12:43 PM UTC
Orhanımtrak saatler
Her gece tek doz halinde alınır, fazlası fazlasıyla berhudâr eder.
Yanlış mı kalmış aklımda acaba
Muhabbet sokağı numara doksan
Boşa mı gidecek bu kadar çaba
İçim ürperiyor ya evde yoksan
Bir de Mehmet abi var. Boran‘ın hediyesi…
Posted Thu 17 Jul 2008 11:12:43 PM UTC