42/ konu/ teknik

Bu sayfa “teknik” girdileri içeriyor.

google sets

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 EET Tags: teknik
sakin pencere

Sakin 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ı.

Posted Pzt 17 Kas 2008 12:46:18 EET Tags: teknik
vimperator

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 EEST Tags: teknik
golf

Golf

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.

Posted Cum 18 Tem 2008 02:12:43 EEST Tags: teknik
etch

Etch a Sketch

Etch

Posted Cum 18 Tem 2008 02:12:43 EEST Tags: teknik
frobozz

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!

Posted Cum 18 Tem 2008 02:12:43 EEST Tags: teknik
debian installer

Debian-installer hakkında karalamalar

Debian-installer rüştünü ispatlamış Debian tekniklerinin etkin şekilde kullanıldığı bir proje. Nedir bu teknikler?

[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 Tags: teknik
shuttleworth

Ö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 :-)

Posted Cum 18 Tem 2008 02:12:43 EEST Tags: teknik
dpkgolf

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:

debian/rules: Moving to debhelper or cdbs

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 EEST Tags: teknik
viay kemıl

Viayı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 EEST Tags: teknik