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.
Google Sets
Google Kümeler: verilen örneklerle (Google
aramaları bağlamında) ilişkili ögeleri içeren kümeyi, isteğe bağlı olarak kısa
veya uzun şekilde, listeleyen bir Google servisi. Komut satırından çabucak
denemek için bir betik yazdım:
gibi.
$ ./gibi "cüneyt arkın" "kadir inanır"
Querying for the terms: cüneyt arkın kadir inanır...
kadir inanır
cüneyt arkın
aytekin akkaya
kemal sunal
türkan şoray
hüseyin peyda
mehmet ali erbil
füsun uçar
kartal tibet
kadran
fatma girik
kenan pars
korhan abay
kenan çoban
kenan imirzalıoğlu
Listede tanımadığım isimler de var, ama sonuç fena değil. Daha uzun bir liste
de üretilebilir, betiği farklı bir isimde (gibigibi) çalıştırarak:
$ ln -s gibi gibigibi
$ ./gibigibi | wc -l
Querying for the terms: cüneyt arkın kadir inanır...
47
Böyle bir servisin çeşitli kullanımları olabilir. Mesela bir türlü hatırlayamadığınız bir isime ilgili alanda aklınıza gelen birkaç kelimeyi kullanarak erişebilirsiniz. “Buluş anları”nda zihni kışkırtıcı bir araç olarak da başvurulabilir.
Posted Cts 22 Kas 2008 16:39:30 EETSakin Pencere
Yeni tanıştığım bir pencere yöneticisi: calmwm veya kısaca
cwm. OpenBSD
taban sistemiyle birlikte gelen ve ilk olarak 4.2 sürümünün değişiklik
listesinde gözüme çarpan program fvwm
ve wm2‘den sonra şu an OpenBSD’nin öntanımlı X pencere yöneticisi konumunda.
Hafif ve basit programları seviyorum, hele bir de OpenBSD geliştiricilerinin
elinden çıkmışsa. BSD kitaplıklarını kullanan programın GNU/Linux altında
derlenememek gibi bir sorunu var. Hafta sonu oturup çabuk bir “taşıma”
çalışması yaptım[1]. Sonuç: programın CVS deposundan ihraç edilen git
deposu ve yakında resmi depoya
yükleyeceğim cwm Debian paketi
(sayfa sonundaki APT talimatlarını izleyin).
Programı Debian (ve türevleri) dışında kurmak isteyeceklere not. Kaynağı git deposundan indirdikten sonra derleme sırasında gerekli geliştirme kitaplıkları için paket bağımlılıklarına veya aşağıdaki çıktıya başvurabilirsiniz:
$ ldd /usr/bin/cwm
linux-gate.so.1 => (0xffffe000)
libXft.so.2 => /usr/lib/libXft.so.2 (0xb7fad000)
libX11.so.6 => /usr/lib/libX11.so.6 (0xb7ec1000)
libXext.so.6 => /usr/lib/libXext.so.6 (0xb7eb2000)
libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0xb7e88000)
libXinerama.so.1 => /usr/lib/libXinerama.so.1 (0xb7e85000)
libXrandr.so.2 => /usr/lib/libXrandr.so.2 (0xb7e7f000)
libbsd.so.0 => /lib/libbsd.so.0 (0xb7e78000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7d2b000)
libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0xb7cbb000)
libz.so.1 => /usr/lib/libz.so.1 (0xb7ca6000)
libXrender.so.1 => /usr/lib/libXrender.so.1 (0xb7c9d000)
libXau.so.6 => /usr/lib/libXau.so.6 (0xb7c9a000)
libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0xb7c95000)
libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb7c91000)
libexpat.so.1 => /usr/lib/libexpat.so.1 (0xb7c6a000)
/lib/ld-linux.so.2 (0xb7fe0000)
libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb7c52000)
Bu çıktıda X kitaplıklarının yanısıra bir kitaplık gözünüze çarpmış olabilir:
libbsd. BSD sistemlerinde sıkça kullanılan işlevleri içeren kitaplığı
buradan indirebilirsiniz (kitaplık
içinde sadece strtonum yoktu, onu kaynak kod ağacına ekledim).
Bu tür “yöneten” programları X altında denemek biraz sıkıntılı oluyor,
sisteminizin o sıradaki etkin yöneticisinden dolayı. Git deposunda
Xephyr kullanan bir
betik
bulacaksınız, mevcut X oturumunuzu sonlandırmadan cwm‘i deneyebilirsiniz.
[1] Bu konuda bir başkasının çalışmasından
da bahsedelim. Başlangıç olarak yararlı olmakla birlikte, bu arkadaşın
yazdığı Makefile‘da fazla tekrar vardı ve benim yaptığım gibi libbsd
kitaplığını kullanmamıştı.
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 Cum 18 Tem 2008 02:12:43 EESTGolf
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 Cum 18 Tem 2008 02:12:43 EESTDebian-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 Cum 18 Tem 2008 02:12:43 EESTÖ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 Cum 18 Tem 2008 02:12:43 EESTViayı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 Cum 18 Tem 2008 02:12:43 EESTBellek 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 Cum 18 Tem 2008 02:12:43 EESTOyun 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 Cum 18 Tem 2008 02:12:43 EEST
