Tekerleği yeniden keşfetmek yada mevcut olanları sormak
Sinelist adına büyük dosyaların efektif biçimde kullanıcılara sunulabilmesi için
bir dosya sistemine ihtiyacım var ve bu dosya sisteminin ölçeklenebilir ve hata tölaranslı olması gerekiyor.
mogileFS vb. benzeri dosya sistemleri genel olarak küçük dosyalarda oldukça başarılılar ancak büyük dosyalarda talepte bulunan kullanıcı sayısı da göz ününe alındığında disk vb. fiziksel sınırlarımızıda düşünürsek aynı başarıyı
gösteremiyorlar.
Bu neden ile kullanıcı düzeyinde (kernel ile iletişime direk olarak ihtiyaç duymadan) bir dosya sistemi düşünmekteyim. Temellerini mogileFS'den alan sistem, mogileFS'den biraz farklı olarak kullanıcının erişmek istediği dosyayı disk üzerinde tek bir dosya olarak değil, 10 Mb'lik parçalar halinde pek çok farklı fiziksel disk üzerine
dağıtarak aynı dosyaya farklı zamanlarda erişmek isteyen kişiler için daha yüksek başarım sağlamayı hedefliyor.
mogileFS'in aksine dosya tek bir parçadan oluşmadığı halde dosyayı belirten işaretçin karşılığında her bir parçanın hangi fiziksel makinelerde olduğu, parça büyüklüğü mutlaka SIRALI bir şekilde dosya hakkında bilgi isteyen izleyiciye döndürülmesinin ardından, izleyici her bir parça için sıra ile ilgili node'lardan ilgili dosyayı HTTP ile istekde bulunacak ve network üzerinden edinilen dosya parçası istemciye gönderilmeye başlanacak her bir parça bittikden sonra bir diğer parça için bir başka node'a gidilerek bu süreç ilgili dosya için tüm parçaları kullanıcıya iletilene kadar devam edecek.
Yukarıda tarif etmeye çalıştığım gibi bir dosya sistemi geliştirmeyi denemeden önce hali hazırda mevcut dosya sistemleri ile büyük dosyalar (1GB ve üzeri) için haşır neşir olmuş, bilgisi ve tecrübesi olanlar yol gösterebilirse sevinirim.
Solr ile rastgele sonuçlar
Eğer arama motoru olarak solr kullanıyor ve mevcut veri index'iniz üzerinde rastgele sıralı sonuç getirmek isterseniz iki yönteminiz var, birincisi schema.xml içerisinde bir random sort field'i tanımlamak diğeri uygulamanız üzerinde bu işlemi çözmek, (her ikisinide yapabilirsiniz elbette) random sort alanı sadece verinizi index'lerken veya index'den çıkartırken oluşturulur ve iki veri güncellemesi arasında aynı sıralamayı alırsınız. Bu sizin için yeterli değilse izleyebileceğiniz bir diğer yol, arama kriterleriniz ile sadece 1 satır sonuç dönecek şekilde gerçekleştirmek ve arama kriterlerlerinize uygun olan sonuç sayısını öğrenip bu sayı içerisinden bir başlangıç noktasını rastgele belirledikten sonra tekrar istediğiniz satır sayısı ile aramayı gerçekleştirmek.
1 = Arama kriterlerine göre arama yap ve kaç sonuç olduğunu öğren (100)
2 = istediğim sonuç sayısını toplam sonuç sayısından çıkart, (100-90)
3 = geriye kalan sonuç sayısından rastgele bir başlangıç noktası seç (start = random.intchoice
4 = aramayı tekrarla
Kolay gelsin.
sineapi
Sinelist projesini bir türlü tamamlayamamış ve henüz yapmak istediklerimin %10'nu bile yapamamış olmama rağmen bir süredir bilmemkaçıncı versiyonunu yazmaya başladım, bu sefer kullandığım teknik ise veri tabanı yapısını schemaless bir yapıya çevirmek, herşeyi json objeleri olarak saklamak ve kullanmak. Bununla birlikte daha ölçeklenebilir bir yapı için proje içerisinde yer alan işlevlerin tamamını web arabiriminden çıkartarak sineapi ismini verdiğim bir api'ya geçirdim. projenin tüm ihtiyaçlarını arka tarafta bu api ile hazırlayarak web arabiriminden kullanıcılara sunmayı planlıyorum. Her ne kadar api açık kaynaklı olsada zamanla tüm ihtiyaçlar için api'ı kullanacağımdan projenin şimdilik belirsiz bir noktasında geliştirmelerin tamamını dışarıya açmayabilirim, ancak mevcut kısmı incelendiğinde schemaless bir projenin nasıl olabileceği görülebilinir. Eğer bir servis geliştirmeyi düşünüyor, bu servisi mobil cihazlar, masaüstü ve diğer web uygulamalarının yazılabilmesi için bir api ile verinizi erişime açmak istiyorsanız mevcut halini şu an itibari ile api yetkilendirme için kullanabilirsiniz.
Not: Her türlü kod gözden geçirmeyi başımın üstünde tutarım.
validpie
ValidPie hem yeni iş yerinde, sinelist'in api kısmında kullanmak üzere geliştirdiğim bir veri doğrulama kütüphanesidir, basitçe symfony'nin validator serisinin python versiyonudur diyebiliriz ancak bir form kütüphanesi taşımamaktadır. amaç sadece input validation yapabilmekdir. elbette hali hazırda python için bir çok araç bulunmakta incelediklerim arasında formEncode vb. kütüphanelerde var ancak hiç birisi bir türlü tatmin etmedi, yazıverdim bende.
from validpie.base import ValidPieBasicSchema from validpie.base import ValidPieString class UserValidatorSchema(ValidPieBasicSchema): def setUp(self, options={}, messages={}): self.setValidPies({ 'username': ValidPieString({'required': True, 'min_length': 7 }, {'required': 'boş bırakamazsınız', 'min_length': 'kullanıcı adınız çok kısa'}) }) validatorSchema = UserValidatorSchema({'username': 'aaa'}) if not validatorSchema.isValid(): for error in validatorSchema.getErrors(): print error.getMessage()
Kullanmak isterseniz kendisi http://code.google.com/p/validpie adresinde ikamet etmektedir.
Özgür yazılım, özgür toplum
Richard stallman'ın yazılarından hazırlanan bu kitabı fazlamesai'de haberini gördüğüm gün siparişini vermiştim ve bu gün elime ulaştı. mutluyum heyecanlıyım. Yazılım'ın sadece bir "iş" ve bu işin etrafındaki yönelimler olmadığını zaman zaman hatırlama ihtiyacı hissediyordum, benim gibi zaman zaman "ne yapıyoruz" diye düşünenler için göz attığım kadarı ile iyi bir kitap olduğu kanaatindeyim.
Bankalar ve yanlış bilgilendirmeleri
Çok sinirleniyorum bu tür basit şeylere ama hak ediyorlar sanki,
Daha önce Akbank'a ait banka hesabımın ATM kartını kaybetmiş ve yenisini istemiştim, yenisi elime ulaştığında kartın içerisinde bulunduğu zarfın içerisinden çıkan tanıtım broşüründe istersem şifremi telefon bankacılığı ile yapabileceğimi yazıyordu bende doğal olarak aradım ve tam 14 dakika boyunca telefonda bekledim, sonunda telefona yanıt veren görevli bu işlemi telefon aracılığı ile yapılamadığını şubeye gitmem gerektiğini söyledi. 14 dakika boyunca bir telefonun ucunda beklemektense şubeye daha kısa zamanda gidebilirdim tabii beni yanlış bilgilendirmeseydiler, saygılarımı sundum tabii o ayrı.
Bu gün ise yapı kredi bankasına bir süredir zarfında beklemekte olan ait kredi kartımın şifresini tanımlamak istedim, zarfı açtığımda yine katrın yapışık olduğu kağıt üzerinde şu ibare yer alıyordu
"Tele24'lerden, yurt dışında Visa ve/veya MasterCard sistemine bağlı ATM'lerden yararlanmak ve alışverişlerinizi onaylamak için gereken kredi kartı şifrenizi Yapı Kredi İnternet Bankacılığı'nı kullanarak ya da 444 0 444 Yapı Kredi Telefon Bankacılığı'ndan önce 3'ü sonra 1' tuşlayarak belirleyebilirsiniz"
Tabii ki internet bankacılığı kullanarak şifre belirlemek mümkün değildi, ve telefon ile şifremi belirledim.
Kızdığım şey ise, madem yapmıyorsun neden yazıyorsun, madem yazıyorsun neden yapmıyorsun? acaba bu tür ufak ve tefek bilgilendirme hataları ne kadar nakit'e mal oluyor. sadece benim gibi bir müşteri için değil banka için de yapmadığı şeyi yaptığını söyleyen satırları yazmak için mürekkep'den tutun da zaman kaybına ve bu kaybın yol açtığı maddi zarar'a kadar hesaplayabilirmiyiz veya bunun hesabını sorabilirmiyiz? Ha tabii ki hesabı sorulması gereken daha pek çok şey var, birileri bizim hesabımızı sormadan.
Dikkat edilmesi gereken projeler
Son zamanlarda ilgilenmeye başladığım uygulama/projelerden bazılarını yazayım dedim, özellikle cometd projesine göz atmanızda fayda var, malum html5 ile gelen web socket'leri ve cometd birleşince realtime web için oldukça iyi bir adım atmış olacağız.
cometd - bayeux (http://cometdproject.dojotoolkit.org/)
tornadoweb (www.tornadoweb.org)
sinelist için içerik
Merhabalar, tahmin ediyorum ki bu günlüğü takip edenler açısından pek ilgili bir duyuru değil ancak belki etrafınızdaki diğer kişiler arasından ilgilenebilecek olanlar vardır. Sinelist projesi için içerik oluşturmaya hazırlanıyoruz bunun anlamı özgün içerik üretebilecek olan kişilere ihtiyacımız var. Bu kişilere ürettikleri içerikler için içerik türüne 10 ila 20 kuruş arasında ücret ödenecektir. Türk filmlerine öncelik verilecektir. Duyurunun ilgilenecek kişilere ulaşmasını sağlarsanız sevinirim.
gazetede haberler
Uzun zamandır gazete almıyor, tv seyretmiyordum. İnternet ile yaşayan biri olmama rağmen tv yada gazetelerin sitelerinden bile haberleri takip etmiyor, her türlü "bilgilendirici" yayından uzak duruyorum. Bu gün nereden esti ise bir ek$i'ye dalayım neler olmuş bitmiş bakınayım dedim ki demez olaydım, cinnet geçirenlermi istersiniz, bir milyon için birini öldürenlermi, aile katliamı yapanlarmı. Ülkece hep beraber cinnet geçiriyoruz. Sanki yakın zaman içinde "komşu bizde hiç cinnet kalmamış sizden biraz taze cinnet alabilirmiyiz" diye kapımı çalacaklarmış gibi hissediyorum. Garip geliyor bunlar bana. Hiç bir şey adil değil, dürüst değil, gerçek ve samimi değil, kabul ediyorum ama neden yenilmiş hissedip, teslim olunuyor? Kanının son damlasına kadar savaşan, kafası kopsa dahi yerden alıp koltuk altında savaşan ataları olan (tamam, bu bana biraz komik geliyor) bir ülkenin insanları, savaşmaktan vazgeçip, boktan şeylere teslim oluyor. Anlamıyorum ve umarım hiç bir zaman anlamam. Merak ediyorum, hiç mi iyi bir şeyler kalmadı? Samimi olan tek şey kedim mi?
google, javascript ve ajax
Bu seo işlerinden çok fazla anladığımı söyleyemem ve çözemediğim bir derdim var, sinelist projesi içerisinde bol miktarda javascript, ajax çağrısı ve istemci kimi yerlerde html kimi yerlerde json türünden veri alıyor, bu çağrıları gerçekleştiren bağlantıların çoğu ise bildimiz a etiketi ile gerçekleştiriliyor. bu linklerin üzerine bind edilmiş javascript ler linklere tıklanıldığında çalışıp veriyi sunucu üzerinden yükledikten sonra yapmaları gereken işleri yapıyorlar, buraya kadar sorun yok. Ancak google amcamız bu veriler içerisinden json olanlarıda indexliyor ve ben bunların indexlenmesini istemiyorum, tabii birde indexlenen redirection'lar var onlarda ayrı bir dert. Bu dertden nasıl kurtulabilir ve arama motorlarının böceklerine nasıl bu verileri indexleme arkadaşım alma cache'e falan diyebilirim? her hangi bir fikri bilgisi olan var mı? son olarak robots.txt içerisinde Disallow: /bir/link/*/*/indexleme gibi bir kural yazdığımızda işer yarıyormu acaba?