Umuyorum Cuma akşamına kadar Blogmani’nin “deneysel” sürümünün kodlaması bitecek.
Deneysel’den kastım; bunun bir Proof of Concept (“işte böyle çalışıyor” mukabili bir söz) çalışma olması. Temel fonksiyonlar çalışacak. Yani en basit haliyle. Bundan sonra, motivasyona bağlı olarak(!) projede tasarladığımız pek çok yenilik var. Motivasyon ise, elbette projenin sağlayacağı başarı ile doğru orantılı. Ne kadar çok katılım olursa, bu bizi o kadar çok motive eder. Açıkçası, ilk haliyle göreceğiniz blogmani, oldukça basit olacak. Bunun nedeni, elbette ki zaman kıtlığı. Bu tip projeler para getirmediği için, kendinizi böylesine yoğun bir çabaya tamamen adamanız mümkün değil.
Blograzzi deneyiminden en azından ben, ders aldım. Blograzzi, hergün biraz daha iyiye giden bir proje, üstelik insanları dinleyen birileri tarafından sürdürülüyor. Şu an Blograzzi’de tek yanlış bulduğum şey, puanlama algoritmasının “gizemini koruması”.
Bunu neden gizlediklerini bilmiyorum; ne de olsa ne Blograzzi’de Leibniz çalışıyor, ne de diferansiyel denklemlerin bile bilinmediği dönemlerde yaşıyoruz. Üstelik, kalıbımı basarım gayet basit bir matematiksel formülü var (diferansiyel denklem filan kullanmadıklarına yemin edebilirim!)
Bu konu daima şaibe kaynağı oldu ve açıklanmadıkça da olmaya devam edecek.
Onun için, blogmani’nin puan hesaplama sistemi şeffaf ve öyle de kalacak.
Abartıp, bunu hesaplayan PHP kodunu da sayfaya koyuyorum.
Hemen ekleyeyim; herşey doğru çalışıyor ama sistemin ne kadar adil olduğu üzerinde düşünme fırsatım olmadı. Ivır zıvırlar, zorunlu sıkıcı işler -Technorati API’si kullanmak, Alexa ve Google sayfalarını Reg Ex ile parse etmek, veritabanı işlemleri vs..- yüzünden, maalesef hesaplamalarımın ne kadar adil ve gerçeği yansıttığını zamana yayıp, bu süre içinde daha akılcı bir algoritma geliştireceğim. Bu süreçte, fikirlerinizi almak çok faydalı olacak.
Bu arada, potansiyel puanınızı test edebileceğiniz sayfa şurada:
Bir ekleme yapayım: Blogmani içinde blog girdisi yazıp, diğer girdilere yorum yapabileceksiniz. Bu da, puanlarınıza ciddi bir katkı yapacak. Burada amaç, sayısal olarak nerede olduğunuzu değil, ne kadar “yazar” olduğunuzu ölçmek. Aradaki fark, Akademi ödülleri ile Sundance gibi; biz popülariteyi değil, yazarlığınızı ölçmek niyetindeyiz.
Birisi, “blograzzi varken neden uğraşıyorsun?” dedi.
Güzel soru; itiraf edeyim, Serhan fikri ortaya attığında aynısını söylemiş ve ilgilenmemiştim.
Gelgelelim; bu sistem Blograzzi’den farklı çalışıyor. Blogmani, ratingden çok, yazı ve yazar merkezli bir sistem.
Bu birinci neden; bir yenilik getiriyoruz.
İkinci neden, WordPress’in komünite sistemi olmamasını farkedip, bundan rahatsız olmuş olmam. İleride projeyi belli bir noktaya getirip, GPL lisansıyla dağıtabilirim.
Üçüncü neden, “gizli” puanlama sisteminden rahatsız olmam. Blogmani, belli bir yere gelirse, Blograzzi’yi bu konuda açık olmaya itebilir. Açıkçası, Blograzzi’yi önemli buluyorum; ama gizli bir puan sistemiyle desteklemiyorum.
Dördüncü neden, rekabet yaratmak. Bunu daha önce Pozitif PC e-dergi ile yaptık. O zamanlar yeterince farkında değildik ama, zaman içinde Pozitif PC’nin birçok taşı yerinden oynattığını, e-dergi furyası başlatıp olanlarında kalitesini yükselttiğini farkettik. Blogmani ile de böyle bir etki yaratmak istiyoruz. Umuyorum başarılı oluruz; kendi açımdan değil. Zira, ben rating başarılarına prim veren biri değilim. Benim için Blogmani’nin başarısı, daha fazla kişisel yayıncı kazanmak, olanları da teşvik etmektir.
Az önce bir mail aldım..
“Arkadaş”, blogmani projesini okumuş blogda. MSN’e de eklemiş. (Hanidir MSN’i açmadığım için farkında değilim).
Derdi şu: Technorati, Google ve Alexa bilgilerini çeken PHP scriptini istiyor. Şark kurnazının hallicesi ama, direk ver dememiş, “ben uğraştım yapamadım” diyor.
Birincisi, daha ortaya çıkmamış bir projenin kodunu “alın kullanın” diyecek değilim. Bu tip adamlar olmasa, belki yapardım; ama biliyorum sağda solda “ben yaptım” diye anlatacak.
İkincisi, bir konu hakkında herhangi bir bilgin, çaban yoksa, o konuda iş yapmaya soyunmayacaksın. Zaten Türkiye’nin temel sorunu bu. 20 sene pastırma satan adam, “abi webde acaip para dönüyor” gazıyla bu işleri yapmaya soyunuyor.
Birsüre önce, bildiğim konularda çok az insana yardımcı olma kararı aldım. Nedeni de basit:
Çoğu insan anormal derecede saygısız, hatta terbiyesiz. Örneğin, birine kalkıp “Bende ATI ekran kartı var, Pozitif Linux’a kuramadım ne yapacağım?” diye sorulmaz. Neler yaptığını, aldığın hata mesajlarını, “olmadı” derken, ne tip sorunlarla karşılaştığını anlatacaksın. Bu tip bir soruyla karşılaştığınızda bilin ki, karşıdaki adam hiçbirşey yapmamıştır, canı bir şey yapmak istiyordur ve sizi paralı elemanı gibi kullanmaya kalkmaktadır.
Bu tip adamlara yardım etmeyin. Tembellik ve aptallığa prim verirsiniz çünkü. Üstelik, o tembel ve aptal adamların sizinle “enayi” diye dalga geçmesine neden olursunuz.
Bir de bunların MSN versiyonları var. Uluorta sormuyorlar sorularını; mail ya da MSN ile cevap istiyorlar. Aldığı bilgiyle avantaj sağlayacak, aman başkaları öğrenmesin!
Daha önce, Technorati verilerini, Technorati API’si kullanarak çektiğimi söylemiştim.
Aynı şeyi, Alexa için yapamadım-miktar ne olursa olsun, Alexa API’lerini kullanmak için para ödemek zorundasınız.
Bu durumda, geriye iki seçenek kalıyordu: PHP’nin CURL fonksiyonları, ya da sayfaya soket açıp, sayfa içeriğini işlemek.
CURL kullanmanızı tavsiye etmem: aslında harika çalışıyor; ancak makinaya minimal bir Apache kurduktan sonra, CURL fonksiyonlarının çalışmadığını farkettim. Standart Apache kurulumu ile gelmeyen çoğu kütüphaneyi kullanmak risklidir – sunucunuzda da o fonksiyonlar olamayabileceğinden, bilgisayarınızdaki web sunucusunda güzel güzel çalışan projeniz, hostunuz üzerinde patlayabilir.
O zaman, ben de soket açarım dedim ve fsockopen’ı bol bol kullandım!
fsockopen ile açtığınız sayfalardan spesifik bir bilgiyi alabilmek için, Regular Expressions’ın kucağına düşüyorsunuz. Eğer çok iyi düzeyde Reg Ex bilginiz yoksa -benim gibi!- ve problemi hızlı çözmek zorundaysanız, bildiğiniz kadar Reg Ex ile, sprintf (ve türevleri) ile birlikte, PHP’nin katar işleme fonksiyonlarını kombine kullanın. 15 sene önce olsa farklı konuşurdum; artık yazılım geliştirmek kolay ama zaman çok kısıtlı. Günümüzde en kıymetli kodcu, hızlı olan. Bilgisayarlarda çok hızlı olduğundan, genelde yazabileceğiniz en kötü kod bile, aletlere ter attıramıyor. (Simulatör, 3D oyun, ya da genetik alanında kullanılan tarzda karmaşık programlar yazmadığınızı varsayıyorum!)
Alexa sorununu nispeten kolay çözdüm; zira verilerin düzenli bir XML formatında geldiği bir sayfaya çengel atmayı başarabildim!
Google API’leri günde 1000 sorguya izin verdiği ve sonuçları hala parse etmeniz gerektiği için, yine API kullanmama kararı aldım.
Google ile işim, kolay görünmesine rağmen, biraz maceralı geçti. Pagerank’i alan kodu Internet’ten 10 dakika içinde çalıp(!) neredeyse aynen kullandım. Gelgelelim, arama sonuçlarını veren bir kod bulamadım. Bulduğum üç örneğin ikisi CURL’e dayandığı için, daha ilk anda çalışmadılar. Üçüncü, soket kullanan örnek ise, yazılan yanlış Reg Ex ifadeleri yüzünden çalışmıyordu.
Kolları sıvayarak 2-3 saat içinde, link sayısını veren Google kodunu yazdım. Aslında, uzamanın nedeni, yine bir Reg Ex-PHP azizliğiydi…
Benim kullandığım Apache+PHP sunucusunda, Unicode’dan (UTF-8), ISO tabanlı dil kodlamalarına çeviri yapan fonksiyonlar çalışmıyor. (Açıkcası, hala geliştirilme aşamasında ve PHP’yi ICU desteği ile derlemeniz gerek). Sorun şu; sayfadan Türkçe karakterler geliyor ve Reg Ex, Unicode anlıyor olması gerektiği halde, anlamıyor ve unicode karakterleri bulamıyor. Çözüm? Unicode harfler yerine, Reg Ex’in (.) -nokta- güzelliğini kullanmak! Böylece, katarınız içindeki unicode karakterlerini “her ne gelirse” diye geçiştiriyorsunuz. Harika bir çözüm değil ama her koşulda işe yarıyor. En azından, insanlar php.net’te ve forumlarda “reg ex ile unicode işleyemiyoruz” diye ağlaşırken, siz geminizi yürütüyorsunuz.
Sonuç olarak, Google Pagerank, link sayısı ve Alexa verileri gibi bilgileri de çekmeyi başardım. Technorati işini de dün çözdüğüm için, geriye birkaç iş kaldı.
Bunlardan biri, çektiğim verileri veritabanına yazmak. Bu, en kolay iş.
İkincisi, bu sitelere ulaşılamadığında, scriptimin neler yapacağına karar verecek ek fonksiyonları yazmak. Örneğin, Technorati’den veri gelmezse, tekrar deneme yapılacak mı? Kaç kere denenecek?
Bu tip detaylar…
Üçüncüsü, bu modülü ne zaman ve nasıl çalıştıracağıma karar vermek. Bunun içinde sunucu üzerinde bazı denemeler yapmak gerekiyor. Örneğin, bana üzerinde cron çalıştırmak için izin veriyor mu? Şayet cron iznim yoksa, scripti manuel çalıştırmak gerek.
Son olarak, iş puanlama algoritmasını çıkarmaya kalıyor. Bu iş aslında son derece basit. Tek bir zorluğu var; o da adil ama rekabetçi bir algoritma çıkarmak.
Umuyorum, bir ve iki numaralı maddeleri Pazar ve Pazartesi günü hallederim.
Regular Expressions, benim söylemeyi sevdiğim şekliyle RegEx, Türkçe’si ile “düzenli ifadeler”; eğer program yazıyorsanız ya da UNIX tabanlı sistemlerle haşır neşirseniz, kaçınılmaz olarak karşı karşıya geleceğiniz, muhtemelen de canınıza okuyacak bir konu.
PERL’in bu kadar çok sevilmesinin (kimilerince!) muhtemeldir ki, en iyi nedeni, barındırdığı güçlü RegEx desteği. Aslına bakarsanız, PHP, hem POSIX uyumlu, hem de (kısmen) PERL (PHP’de PCRE olarak geçer; Perl Compatible Regular Expressions) uyumlu RegEx desteği içeriyor. Dolayısıyla, artık Webmin gibi programların bile, PERL üzerinde diretmesinde bir anlam yok. PERL; öğrenmesi, program geliştirmesi uzun zaman alan, zahmetli bir dil. Geliştiricisinin de adını koyarken dediği gibi, “pathetically eclectic”. Eğer PERL öğrenme niyetinde iseniz, direk pas geçip PHP öğrenin derim. (Yeni programcı adayları için). Bu sayede, yazım ve çalışma biçimi hemen hemen aynı olan C ve JAVA gibi dilleri de öğrenmeniz daha kolay olacaktır.
Reg Ex konusu ise, farklı bir alan. Kaçınılmaz olarak karşınıza çıkacak. Size tavsiyem, programlama dilinden bağımsız olarak, Reg Ex’i ayrı bir “dilmiş gibi” öğrenmeye başlamanız. Çünkü, şimdiye kadar karşılaştığım en zor “dil”. Yüzde onunu bile bilmediğimi düşünüyorum (ben çok iyi bilirim diye sallayanı da gördük; bilgisayar dünyası palavra üzerinde dönüyor).
POSIX mi, PERL mi?
POSIX, daha evrensel gibi görünmesine karşın, maalesef GNU/Linux dünyası PERL’i pompalıyor gibi. POSIX standardı Reg Ex, bana daha kullanışlı, mantıksal geliyor. Aslında, PERL daha kuvvetli; ama Reg Ex’i daha da karmaşık hale getiriyor. Ben minimalizmi seviyorum; tek satırlık destan gibi Reg Ex yerine, işimi iki satırda, anlaşılır, bilgisayarın da “anlayıp”, kısa sürede işleyebileceği şekilde yapmak tercihim.
Reg Ex, Blogmani projesinde yine başıma bela oldu; öyleki, 1 saat içinde cümleyi tek satırda işleyemeyince, işi üç parçaya bölmeye karar verdim.
Reg Ex’i öğrenmek için en iyi kaynaklardan biri, GNU/Linux tabanlı bir sistemde çalışıyorsanız, bol bol SED & Gawk & vi kullanmak. Eğer Windows tabanlı bir sisteminiz varsa, EditPad Pro isimli, küçük ama herşeyi yapabilen metin editörünü tavsiye ederim.
Maalesef konuyla ilgili sistematik, iyi yazılmış belgelere, hatta kitaplara ulaşmanız pek mümkün değil. Bildiğim kadarıyla, sadece düzenli ifadeler üzerine yazılmış, Türkçe bir kitap yok.