MySQL'den PostgreSQL'e Geçme Planları @ 26-05-2011 06:43
Doğrusunu söylemek gerekirse hala bu meseleyi anlayabilmiş değilim. Ortada böyle bir sorun var ve herkesin bundan haberi var, bir benim gözümden kaçmış. Ama neden bir insan MySQL seçer ki böyle bir durumda?
Önce durumu anlatayım: Bir modele ManyToManyField'in eklendiği bir veritabanı göçü girişiminde bulunayım dedim; ama şurada Brad Montgomery'nin yazdığı gibi, MySQL'de ForeignKey Constraint kullanmak için InnoDB depolama motoruna ihtiyaç duyulduğunu öğrendim. Öğrenmekle yetinmedim, MySQL'den tamamıyla soğudum.
MySQL'in kullanımının diğer SQL veritabanlarına göre çok daha kolay olduğunu ve sırf bu yüzden yaygın olabileceğini düşünüyorum. Ama benim karşılaştığım sorunun çözümü için MySQL'i InnoDB depolama motoruyla kullanmam gerekiyordu. Tabi bunu kesin bir çözüm olarak bakmamak gerekiyor; çünkü çevreden gelen eleştiriler ve araştırmalarıma göre InnoDB'nin Oracle tarafından satın alınmış olması ve Oracle'in InnoDB'yi ne yapacağı konusunda bir şey bilinmemesi gibi önemli bir sorun var. MySQL'in de Oracle'a geçtiğini zaten biliyorsunuz.
Bu tür şeylerden endişelenmemek gerekiyor, nasıl olsa özgür yazılımcılar bir sıkıntı olduğunda illa ki bir çözümünü bulurlar, belki de forklarlar, hatta çoktan forklamış bile olabilirler. Ama diğer taraftan, neden PostgreSQL denemeyelim? Bu kadar öve öve bitiremedikleri; performansıyla, kararlılığıyla, komünitesiyle, Oracle'a kafa tutuşuyla hep bahsedilen PostgreSQL denesem ne kaybederim? Birkaç kişiye sordum bu soruyu, hala olumsuz bir cevap alabilmiş değilim. Şimdilik mongodb, couchdb gibi nosql veritabanı sistemlerine göre daha güven verici gözüküyor.


Neden Emacs? @ 19-05-2011 07:49
Birçok geliştirici gibi ben de rahat edebileceğim bir editör arama süreci yaşadım. Programlama dilleriyle haşır neşir olduğum ilk zamanlarda, çevrenin de etkisiyle Vim kullanıyordum. O zamanlar Pardus'a katkı vermek için can atıyordum ve sensei olarak nitelediğimiz tecrübeli Pardus geliştiricilerinin, "bir bildiği olsa gerek" mantığıyla alışkanlıklarını taklit ediyorduk. TAB yerine dört boşluk kullanmak, grafik arayüz yerine konsola alışmak, commitleri atomik olarak yapmak; hatta bazı kodlama standartlarını da bu 'geliştirici abilerin' alışkanlıklarına göre şekillendirmek buna birkaç örnek.
Ama bir noktadan sonra, diğer geliştiricilerin bazı kullanım alışkanlıklarını itici bulmaya başlıyor ve kendi tercihlerinizi belirlemeye başlıyorsunuz. Ortak geliştirme için standartları bozmadan (4 boşluk yerine tab kullanmaya karar vermemek gibi) bireysel alışkanlıkları değiştirmek söz konusu olabiliyor. Grafik arayüzün mümkün olmadığı veya basitçe bir düzenleme yapmak gerektiği zaman hala Vim kullanmama rağmen, Emacs'i bir IDE olarak kullanmayı tercih ediyorum. Peki neden Emacs?
- Bir kere açıyorum ve hep kullanıyorum. Kendi dosya yöneticisini kullanmak çok zor değil, C-x C-f yaptıktan sonra dosya yolunu hatırlayamadığında iki defa TAB tuşuna basarak dizin içeriğini görüntülemek mümkün. Ayrıca yazı yazmaya başlamadan önce Vim'deki gibi bir tuşa basarak yazım moduna geçmek gibi olayı yok. Tam tersi, öntanımlı modun yazım modu olması gerektiğini savunanlardanım.
- Emacs'ın kısayolları evrensel. Örneğin ben şuan Chromium'dan bu makaleyi yazarken Emacs yön tuşlarını kullanarak yazı içinde imlecin konumunu değiştirebiliyorum. Aynı şekilde, Bash üzerinde de Emacs kısayollarını kullanmak mümkün; kesmek, yapıştırmak, hatta geriye doğru arama yapmak bile emacs kısayollarıyla aynı. Mac'te (ve yanlış bilmiyorsam GNOME'da) Emacs yön tuşlarını tüm uygulamalarda kullanabilecek şekilde ayarlayabiliyorsunuz.
- Girintileme konusunda belirlenen kuralların dışına çıkmaması, katı olması benim bir diğer tercih sebeplerimden. Eğer Javascript için if'ten sonra dört boşluk içeri girinti kuralı belirlemişseniz, ne kadar TAB basarsanız basın, if'ten sonra her zaman sadece dört boşluk içeri girinti yapar. TAB'ı daha fazla boşluk bırakmak amacıyla kullanmak için ona göre ayarlamanız gerekir. Bence Emacs'in TAB tercihini değiştirmesek daha iyi. Bir diğer örnek, Python'da da aynı kural işler; ama daha fazla TAB basmanız durumunda dışa doğru girintilemeye başlar. Çünkü Python'da süslü parantezler yerine girintileme, syntax'ın bir parçasıdır.
- Çok güzel bir wiki'si var ve sıkı çalışan komüniteleri mevcut. Github hesabınız varsa emacsmirror kullanıcısını takip edin, oldukça kullanışlı eklentiler bulabilirsiniz. Ben ne zaman, "X editör bunu yapabiliyor, Emacs neden yapamıyor" diye düşündüğümde, ilk önce emacsmirror kullanıcısın profilindeki proje listesine bakarım. Textmate'deki snippets özelliğini Emacs'ta kullanmanıza yaraya yasnippet eklentisini bu şekilde buldum mesela.
- Konfigürasyonu Emacs Lisp adında bir Lisp şivesiyle yazıyorsunuz. Bu bana bir süre çok itici gelmişti, hatta bir süre Pymacs ile konfigürasyonları hazırlamaya yönelmiştim. Ama bir düşünün, bir dil daha öğrenmekten ne kaybedersiniz? Üstelik fonksiyonel programlama dilinin nasıl bir şey olduğu hakkında az biraz fikir sahibi olursunuz, kendi Emacs'inizi kişiselleştirirken. Bunu kesinlikle zaman kaybı olarak değerlendirmemelisiniz.
- Bash'i birebir Emacs içinden kullanmak için 'M-x term' mutlaka deneyin. Eğer alışabilirseniz, ayrıca kabuk açma derdinden kurtarabiliyor.
- Bunların dışında, iki dosya arasındaki farkı gösteren ediff, dosya yöneticisi dired, gnu project debugger için gdb, email ve rss için gnus gibi bir çok ihtiyacı karşılayacak uygulamayı Emacs'in içinde bulabilirsiniz. Hatta birkaç oyun da içinde mevcut, benim gibi sigara içme alışkanlığı olmayanlar için sıkıntıyı Tetris giderebilir :P
- Emacs'i grafik arayüzü olmayan sistemlerde de kullanmak mümkün, hatta dilerseniz konsolda 'emacs -nw' ile çalıştırıp konsol üzerinden de Emacs'i kullanabilirsiniz.
Aklıma geldikçe bu maddeleri çoğaltacağım. Ama şöyle bir gerçek var, birçok güzel editör bir özelliği öyle ya da böyle bir şekilde destekliyor. Yani bu saydığım özellikleri Vim'de de yapabilmenin illa ki bir yolu vardır; ama önemli olan elinizin alışması, içinizin sinmesidir. Bir de ne editör seçerseniz seçin, illa ki sıkıcı bir alışma evresi ve sıkıcı bir yapılandırma sürecinden geçiyorsunuz. Zaten bu yüzden internette birbirinden farklı onlarca .emacs konfigürasyon dosyalarıyla karşılaşıyorsunuz. Benimkini de buradan bulabilirsiniz: https://github.com/gkmngrgn/config Ama Emacs kullanmaya karar verdiyseniz, bence mutlaka şununla birlikte deneyiniz: https://github.com/technomancy/emacs-starter-kit


Mac OS X'te PostgreSQL Hatası @ 08-01-2011 04:46
Mac OS X'te paket yöneticisi olarak Homebrew kullanıyorum ve PostgreSQL kurduktan sonra servisi başlatmada sıkıntı yaşadım. server.log dosyasında bu durumla ilgili birkaç satır okudum:
FATAL: could not create shared memory segment: Invalid argument DETAIL: Failed system call was shmget(key=5432001, size=6651904, 03600).
Anladığım kadarıyla PostgreSQL servisinin kendisine ayırdığı paylaşımlı hafıza miktarı, Mac OS X çekirdeğinin izin verdiği miktardan daha fazla olduğu için servis başlatılamıyordu. İnternette bununla ilgili araştırmalar yaptığımda, Mac OS X kerneli için sysctl değerlerinin öntanımlı olarak az ayarlandığını görmüştüm ve çözüm olarak PostgreSQL'in önerdiği paylaşımlı hafıza miktarından daha fazlasını sunabilecek kapasiteye çıkarmayı öneriyorlardı. Örneğin, 4gb belleği olan bir iMac'iniz varsa ve Snow Leopard kullanıyorsanız, /etc/sysctl.conf dosyasına (dosya yoksa oluşturuyorsunuz) aşağıdaki satırları yapıştırıyorsunuz:
kern.sysv.shmmax=4194304 kern.sysv.shmmin=1 kern.sysv.shmmni=32 kern.sysv.shmseg=8 kern.sysv.shmall=1024
Burada verilen değerler öntanımlı değerler ve bu bilgileri PostgreSQL'in destekleyebileceği seviyeye çekmek için şuradaki belgede yer alan hesap tablosuna göre değerleri hesaplayıp, /etc/sysctl.conf dosyasını yeni değerlerle güncellemeniz gerekiyor: Table 17-1. System V IPC parameters
Bir başka çözümse, eğer benim gibi sadece yerelinizde web projelerinizi denemek veya benzeri amaçla PostgreSQL'i kullanıyorsanız, /usr/local/var/postgres/postgresql.conf dosyasındaki shared_buffers değerini düşürmek. shared_buffers değerini 2MB olarak ayarlamam benim için sorunu çözdü.
PostgreSQL yapılandırma konusunda çok detaylı bir bilgim olmadığı için verilen değerlerin kesin ve doğru bir çözüm olmayabilir, bu konudaki deneyimlerinizi yorum olarak paylaşabilirseniz sevinirim. Bir de PostgreSQL sitesinin Sıkça Sorulan Sorular sayfasında yer alan bu soru SHMMAX parametresi hakkında az da olsa bilgilendirici nitelikte:
3.8) Bağlanmaya çalışırken, neden "Sorry, too many clients" hatasını alıyorum?
Postmaster'ın eşzamanlı olarak başlatabileceği backend süreçleri sınırlarını arttırmanız gerekmektedir. Ön tanımlı değer 32 süreçtir. Bunu, postmaster'ı uygun -N değeri ile ya da postgresql.conf dosyasını düzenleyerek yeniden başlatmakla arttırabilirsiniz. Eğer -N değerini 32'den büyük yapacaksanız, aynı zamanda -B değerini de değiştirmeniz gerektiğini unutmayın. -B, -N'nin en az 2 katı kadar olmalıdır; daha iyi başarım için bu sayıyı daha da arttırmalısınız. Yüksek sayıdaki backend süreçleri için, çeşitli çekirdek yapılandırma parametrelerini arttırmanız gerekecektir. Yapılması gerekenler, SHMMAX, SEMMNS, SEMMNI, NPROC, MAXUPRC ve açılabilecek dosyaların maksimum sayısı olan NFILE ve NINODE değerlerini karıştırmaktır. Bunun nedeni, PostgreSQL'in izin verilen backend süreçlerinin sayısı üzerinde bir sınırı olmasıdır. Böylelikle sistem kaynaklarının dışına çıkılmayacaktır. PostgreSQL'in 6.5 sürümüne kadar, en fazla backend sayısı 64 idi ve bunu değiştirmek için include/storage/sinvaladt.h dosyası içindeki MaxBAckendid sabitini değiştirdek sonra yazılımı yeniden derlemek gerekiyordu.


Ahlak ve Seküler Düşünce @ 19-10-2010 23:45
Geçen gün Mecidiyeköy metro çıkışına yakın, tanımadığım bir insanın cüzdanından kimlik çıkarırken farkında olmadan parasını düşürdüğünü gördüm. Az para değil, iki adet yüz lira.. Ne olduysa, hızla parayı yerden aldım, mağdura yetiştim ve "Parayı düşürdünüz" diyerek uyardım. Parayı uzattım ve mağdur teşekkür etmeye hazırlanırken ben çoktan uzaklaşmıştım. Sonra bu iyiliği neden yaptığımı düşündüm:
- Bir Müslüman olarak sevap kazanmak için yapmış olabilirim.
- Çevredeki insanların tepkilerinden korkmuş olabilirim.
- Vatandaşlık borcum veya benzeri bir kuralın zorunluluğuyla yapmış olabilirim
- Dünyada gerçekten iyi insanlar olabileceği umudu ve arzusuyla yapmış olabilirim.
Ben parasını düşüren bir arkadaşa iyilik yaparken, bu iyiliği kesinlikle dinden edinmediğimi düşünüyorum. Bu ahlak benim dinimden gelmedi, benim dinim bana iyinin ne olduğunu öğretmedi. Ateistler de iyinin ne olduğunu bilebilir. Yalan söylemenin doğru olduğu bir dünya düzeni veya topluluk düşünebilir misiniz? Öğrendiğiniz bilgilerin yalan olduğunu öğrendiğinizde sevinebilecek misiniz? İnsanlık adına zerre bir ilerleme olmayacağı için bir süre sonra insanlar yalan söylemenin gerçekten iyi bir şey olduğu konusunda endişe edecekler.
Seküler düşünme yapısına sahip insanların, insan yaşamına daha fazla değer verdiklerine inanıyorum ve yazının başında anlattığım gibi ortak bir arzuyla iyilik yaparak iyiliğe neden ihtiyacımız olduğunu öğrenebilirler. "Tanrının verdiği canı ancak tanrı alır" sözünü benimseyen bir dine göre yönetilen herhangi bir devlette idamın yasak olmaması bana tamamen çelişki gibi geliyor. Bence laik devlet düzeni, daha doğru bir iyilik ve daha özgür dini yaşam için bir şanstır ve Türkiye belki de sırf bu yüzden şanslı ülkelerden biridir.
Düzeltme: Yetiştiriliş tarzımın da iyiliğe bir etkisi olabilir.


Yaşamı Optimize Etmek @ 16-10-2010 23:45
Yaşamı optimize etmek isteseydiniz verilerinizi nasıl temizlerdiniz veya daha fazla veri tutmak iyi midir? Eğer hızlı düşünme yetiniz varsa, hafızanız iyi demektir, yapmanız gerekenleri not etmeye ihtiyaç duymazsınız, ulaşmak istediğiniz sonuç için gerekli en temel veriler zaten aklınızın bir köşesinde yer alıyordur. Böylece birkaç hesaplama yapmak esas veriye ulaşmanızda size yardımcı olacaktır, işlemleriniz basittir, minimalistik bir yaşama sahipsinizdir ve sürekli neden sonuç ilişkisi içinde günleriniz geçer. Acıkınca yemek yemek, uyku bastırınca yatağa atlamak, sıkıldığımızda hobilerimizle uğraşmak, tüm bunlar basit birer neden sonuç ilişkisi örnekleridir. Yemek yemenizin çok basit bir nedeni vardır, acıkmışsınızdır mesela. Eh biri de zorluyor olabilir, bu da bir neden.
Mesele şu ki, -şartlar elverdiği halde- acıkınca yemek yemeyen, uykusu gelince uyumayan insanlar da var bu dünyada. Eskiden böyleydim ve aynen şöyle derdim: "Bizler enteresan bir kişiliğiz. Aklımız tamamen karmaşadan ibaret, nedenlerin sonuç oluşturacağı noktada daha fazla nedenlerin oluşmasını tetikleriz ve bundan da pekala zevk duyarız." Öyle garip bir zevk ki, acıkınca yemeğin vereceği zevki verir, bir huzur verici uykunun yerini bile tutabilir. Tek sorun, tamamen sanal bir zevk olmasıdır, sadece duygulara işler.
Sanal duygulardan kurtulmak için bir önerim var: Sorgulayın. Mesela, dört yaşındaki bir Müslüman çocuğu sorgulayın. Ah bu yaşta Müslüman olmak, tüm gerçekliğin farkına varmak ve daha o yaşta doğru yolda olmak vardı, o çocuk ne şanslı aileden doğmuş falan. Ama bir dakika! Bu çocuğun huri sevdalısı veya cennet tapusu derdinde olması mı bizi duygulandırıyor? Daha ne istediğini bile bilmiyordur. Dört yaşında kapitalizm karşıtı komünist bir çocuk niye etkilemiyor bizi? Bir komünist dört yaşında bir insanın kapitalizmi yorumlayabilecek deneyim ve bilgi birikimine sahip olacağına pek ihtimal vermez.
Bir başka sorgulama; motorsikletin frenleri patlar ve genç arkadaki kız arkadaşına kaskını almasını söyler. Kaza olur ve sadece kız kurtulur. Yazılanı okuyunca pek bir duygusal hikaye olduğunu düşünüyoruz; ama gencin kız arkadaşına kaskını almasını söylemesi, kız arkadaşının bunu yapmış olması, gencin defalarca kıza seni seviyorum demesi ve kızın hala olayın ne olduğunu kavrayamaması, en sonunda kaçınılmaz kazanın gerçekleşmesi ve buradan bir anlam çıkarmak... Bunun kurgu olduğu ne kadar açık. Ben gencin yerinde olsam, açık söylüyorum, "S.ki tuttuk hatunum, iyi sarıl bana. Bişiler denicem şimdi dikkatimi dağıtma." derdim. Niye kaskı vereyim ki? Ben de öleceğim sonuçta.
Geçmişi, öğrenilenleri, terimleri ve benzeri her türlü veriyi sorgulayınca o kadar anlamsız şeyler çıkıyor ki ortaya, geriye gerçekten anlamlı ve sanal olmayan hayat kalıyor. Optimize olmuş, minimalistik bir hayat. Hayat boyu sorgulamak dileğiyle.


Referandum @ 11-10-2010 23:45
Demokrasinin en çok hissedildiği ve en güzel zamanları, seçim ve oylama zamanlarıdır. Partiler oy kazanmak için kampanyalar yürütür, vatandaşların onayını almak için her türlü iştahı kabartır. Bu zamanlarda bazı demokrasi savunucularının oy kullanmayarak gösterdikleri protestoları anlamsız bulurum. Her ne kadar oyların bir fayda etmeyeceğine inansanız da, gidip bir oy kullanmak gerekiyor. "Ben oy kullanmayacağım, protesto edeceğim" demek, ancak kendinizi kandırmaya ve avutmaya yarar.
Yaklaşık 3 saat sonra oy kullanmak amaçlı tren yolculuğu yapıp öğlen Eskişehir'de olacağım (ikametgahımı Tekirdağ'a aldırmama karşın, sanırım kayıtlara çok geç düştü). Eskişehir'i özlemedim değil elbet; ama yolculuklar bünyemi mahvediyor ve sırf daha fazla yolculuğu kaldıramayacağım endişesiyle bu bayram Tekirdağ'a gitmekten vazgeçtim.
Tekirdağ'dakiler de beni arayıp sormuyorlar pek. Telefon kullanmaktan nefret ettiğimi bilen pek sevgili arkadaşlarım, durduk yere vefasız demeyin de bana. İyi bayramlar.


Django'da Türkçe Destekli Slugify @ 10-10-2010 23:45
Wordpress'te "Tanrı Yanılgısı" diye bir başlık attığınızda, WordPress'in sizin için ürettiği URL'e bakalım:
http://blog.gokmengorgen.net/2010/09/09/tanri-yanilgisi/
Tam istediğimiz gibi. Django ile bir blog uygulaması yazıyor olsaydım, sanırım biraz sıkıntı çekecektim:
In [1]: from django.template.defaultfilters import slugify In [2]: slugify('Tanrı Yanılgısı') Out[2]: u'tanr-yanlgs'
Gitti ı'lar... Türkçe karakterler arasından Django'nun slugify'sinde çalışmayan tek karakter küçük harfle yazılmış 'ı'. Baştan slugify fonksiyonuna bir yama yapıp Django ekibine göndermeyi düşündüm; fakat sadece Türkçe'yi dikkate aldığım için büyük ihtimalle yamam reddedilecekti. Ben de bir utils.py dosyası açıp şöyle bir slugify fonksiyonu yazdım:
def slugify_unicode(value): value = value.replace(u'\u0131', 'i') value = unicodedata.normalize('NFKD', value).encode('ascii', 'ignore') value = unicode(re.sub('[^\w\s-]', '', value).strip().lower()) return mark_safe(re.sub('[-\s]+', '-', value))
Bu fonksiyonu iPython'da denediğinizde patlıyor; ama sitede kullandığınızda herhangi bir sorunla karşılaşılmıyor. Bunun sebebi, 'ı' harfinin iPython konsolunda u0131 olarak dönmemesinden kaynaklanıyor:
In [5]: u"Tanrı Yanılgısı" Out[5]: u'Tanr\xc4\xb1 Yan\xc4\xb1lg\xc4\xb1s\xc4\xb1'
Bu bana Python'un garipliği gibi geliyor ve Python3'te sorunun düzeltildiğini söylüyorlar (Python3'te unicode default olacak). Henüz denemedim. Emin olmamakla birlikte, slugify fonksiyonu için değer olarak verdiğim başlığın Django'dan "Tanrı Yanılgısı" olarak değil de, "Tanru0131 Yanu0131lgu0131su0131" çekilmesinden kaynaklanıyor:
In [24]: x = u"Tanr\u0131 Yan\u0131lg\u0131s\u0131" In [25]: x Out[25]: u'Tanr\u0131 Yan\u0131lg\u0131s\u0131' In [26]: slugify_unicode(x) Out[26]: u'tanri-yanilgisi'


Tanrı Yanılgısı @ 09-10-2010 23:45
Richard Dawkins’i çalışmalarından ötürü gerçekten seviyorum ve ayrıca kendisini dünyanın en önemli insanlarından biri olarak görüyorum. Kör Saatçi isimli kitabından sonra, Gen Bencildir kitabını okumaya başlayacaktım ki (evet tam tersi sırayla okumam gerekirdi; ama önemli değil.) elime Tanrı Yanılgısı kitabı düştü. Kitaptan, en sevdiğim birkaç alıntıyı paylaşmak istiyorum:
Gerçekten iyi olmaya çalışmaktaki tek sebebin Tanrı’nın onayını ve ödülü almak veya kınaması ve cezalandırmasından sakınmak mıdır? Bunun ahlaklı olmakla hiçbir ilgisi yoktur, bu yalnızca yağcılık etmektir, dalkavukluktur. Her hareketini hatta derin düşüncelerini gözleyen gökyüzündeki kontrol kamerası ya da kafanın içindeki çelik küçük ileti cihazını gizliden gizliye kollamaktır.
Einstein’in de benzer bir sözü var:
Eğer insanlar sadece cezalandırılmaktan korktukları ya da ödüllendirileceğini umut ettikleri için iyi kalplilerse, o halde gerçekten çok acınacak haldeyiz.
Richard Dawkins, kitabının önsözünde, kitabı bitirdiğimizde bir ateist olmamızı umuyor. Bu umut benim için geçerli olmadıysa da, her inançlı bir insanın mutlaka bu kitabı edinmesi ve kendi inancını sorgulaması taraftarıyım.


Sil Baştan @ 09-10-2010 23:45
“Hayatım bir garip, yıllardır sevdiğim ve birliktelik teklifimi kabul etmeyen arkadaşımla, yıllar sonra aynı fakültede kayıt olurken karşılaşıyoruz.” diyen bir arkadaşıma ithafen: “Benim de hayatım bir garip, arşiv yapmayı sevmeyen ben yine de en önemli verileri nerede tutsam, orada kaybediyorum!”
Elimde olmayan sebeplerden ötürü arkadaşımın sunucusunda bana ait ne varsa kaybettim. Arkadaşıma hiç kızgın değilim, ayrıca kendisinden bir şey de istemiyorum. Üstüne üstlük, bana sunucusunda bunca zamandır yer ayırttığı için kendisine teşekkür ediyorum. Nasıl ki FreeBSD kurarken tüm verilerimi kaybettiysem, Pardus’ta “sudo rm -rf /” ile acıklı bir an yaşadıysam ilk zamanlarımda, şimdi de -bu sefer- farklı bir tepkiyle (mesela tebessüm), “Hmm verileri yedekleme konusunda daha fazla ekmek yemeliyim.” diye düşünüyorum.
Arkadaşım Samed, umarım seni arayıp sormadığım için vefasız yaftası yememişimdir. Bundan sonraki hayatının seni daha fazla mutlu etmesi dileğiyle, kendine çok iyi bak.

