Bu sayfa “teknik” girdileri içeriyor.
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!
Debian-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 EEST