* You are viewing the archive for the ‘bilgisayar’ Category

Numunelik adamlar

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!

Blogmani – Google ve Alexa verilerini çekmek

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.

PHP ve Regular Expressions (Düzenli ifadeler)

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.

Technorati API, Blograzzi ve PHP

Blogmani projemden daha önce bahsetmiştim.

İki gündür, projeyi kendi bilgisayarıma aldığım için hızlı ilerleyebiliyorum. Yaklaşık 20 gündür, sunucu üzerinde değişiklik yapıp, sonuçları bekleyerek boşu boşuna debelendim. Yarım saatlik bir emekten sonra, çok daha hızlı çalışabilmeye başladım. Her kodcunun bazı komik tembellikleri vardır; benimkisi de, çalışma hızı ve rahatlığını artıracak basit işlemlerden sürekli kaçınıyor olmak.

Şu an, basit bir komünite sistemi için “yeterli” olan bazı geliştirmeleri tamamladım. Umuyorum, gece server’a upload edeceğim. Şu haliyle site feci görünüyor ve bazı şeyler darmadağınık. Puanlama sistemini de halledince, Serhan’la birlikte tema gibi konulara da eğileceğiz ve biraz biraz kullanılabilir bir altyapı çıkacak ortaya.

Zamanımın çoğu, Wordpress’in bazı saçmalıklarıyla debelenmekle geçiyor. Bunlardan bir tanesi, usermeta isimli veritabanı tablosu. Nedense, bilinen tüm veritabanı tasarım kurallarına karşı gelerek, kullanıcı bilgilerinin tutulduğu tuhaf bir tablo hazırlamışlar. Wordpress, kullanıcı adı ve şifre gibi temel bilgileri users tablosunda tutarken, isim,soyad gibi bilgileri usersmeta isimli bir başka tabloda tutuyor. Bazı durumlarda, kullanıcı bilgilerini çekmek, deveye hendek atlatmaktan beter. Mümkün değil demiyorum; ama öylesine “çakma” çözümler geliştirmek zorundasınız ki, site büyüdüğünde (özellikle ziyaretçi sayısı arttığında) verdiğiniz yanlış kararların altında ezilmeniz işten bile değil. Bu yüzden, usersmeta’yı olduğu gibi bırakarak -çünkü bazı eklentiler ve iç fonksiyonlar onu kullanıyor ve hepsini değiştirmeye kalkmak, sistemi yeni baştan yazmaktan daha zor-, kritik alanları users tablosuna taşıdım.

Neyse ki, şu an için sorun yok. Aslında, kontrol panelinin tasarımı da ciddi zorlayıcı etkenlerden biri. Buna daha sonra geleceğim; sistem tamamlandıktan sonra, şayet kullanıcı sayısı artarsa, oraya da el atacağım.

Az önce, puanlama sistemine başladım.

Blograzzi’nin izinden gideceğim: Google, Technorati verilerini çekip, bunu başka parametrelerle birlikte kullanıp, puanlama sistemini yazacağım. Daha önce de bahsettiğim gibi, puanlama sır filan olmayacak. En sonunda algoritmayı açıklayacağım; bununla oturup kendi puanınızı kendiniz hesaplayabileceksiniz.

İlk olarak, Technorati verilerini çekmeye karar verdim…hatta çektim de. (Resmi büyütün).


Technorati API, Blograzzi ve PHP

Verileri çekerken izleyebileceğim birkaç metod vardı.

1.Kullanıcının sayfasını technorati içinden açıp, gelen HTML sayfayı parse ederek istediğim alanları çekmek. Bu daha önce yapmadığım iş değil. Hala birileri farkında olmasa da, PHP, RegEx (Regular Expressions – Düzenli İfadeler) konusunda neredeyse PERL kadar iyi; üstelik POSIX ya da PERL uyumlu Reg Ex kullanabiliyorsunuz.

Bunu yapmadım. Çünkü Technorati API’nin varlığından haberdarım ve daha önce bahsettiğim gibi, “uydurma” işleri sevmiyorum (mecbur değilsem, vaktim varsa)

2.Blograzzi’den verileri “çalabilirdim”. Bunu da doğal olarak yapmadım. Birincisi, özellikle veri, fikir ve bilgi hırsızlığına karşıyım. İkincisi, pragmatik bir çözüm olmasına rağmen, bu bir klon site değil. Aslında amacım bir yandan, daha önce Pozitif Linux’ta ve Pozitif PC’de yaptığım gibi, insanları teşvik etmek; birşeylerin sanıldığından çok daha kolay olduğunu göstermek.

3.Son olarak, Technorati API’yi kullanabilirdim ve bunu yaptım.

Gelgelelim, bunun bazı sakıncaları var.

Eğer para ödemezseniz, Technorati, API’si üzerinden, günde 500 query yapmanıza olanak tanıyor. Bunun anlamı şu: sonuçları günlük güncelleyeceksem, üye sayım 500′ü geçemez. Ya da para ödemem gerek, ama para kazanmadan doğal olarak Technorati’ye para verecek halim yok(!).

Birkaç API key almak da bir başka çözüm; kodda minik bir oynamaya bakar;)

Aslında API key’i limitsiz kullanabilsem, Blogmani içine çok çok daha kullanışlı bir dizi fonksiyon ilave edebilirdim. Öte yandan, buna zamanım ve isteğim de yok. Eminim, bir gün projeyi açarsam, birsürü insan bu tür siteler yapacaktır.

Technorati API’lerini kullanmak kolay olsa da, kod hamallığından kaçınmak için hazır bir kütüphane buldum. Duck Soup, bu işi hakkıyla yapıyor. Kodu inci gibi yazılmış. Gelgelelim, Technorati sunucuları pek hızlı sayılmaz; böylece Blograzzi’nin neden sonuçları anlık değilde günlük güncellediğini de keşfetmiş oldum.

Bundan sonra yapacağım şu: bir tablo açıp, Technorati’den çektiğim verileri günlük olarak buraya kaydedeceğim. Bunu da, günün “ölü saatlerinde” yapmam gerek ki, sunucum isyan etmesin. Bu arada, Linux tabanlı sunucumun Cron hakkında bana ne gibi haklar tanıdığını da öğrenmem gerek. Aslında, sunucu elimde olsa, yapacağım iş çok basit: cron.daily içine bir script atacağım; bu da PHP ile yazdığım, verileri toplayıp veritabanına giren PHP kodunu çalıştaracak (komut satırından, ya da shell script içinden, “php phpscriptim.php” şeklinde PHP kodu çalıştırabilirsiniz). Elbette, bu kadar hakkın, paylaşımlı bir sunucu içinde bana tanınmış olacağını sanmıyorum; ama birkaç saat içinde çözebileceğim, basit bir problem bu…

Soldier of Fortune Payback

Soldier of Fortune PaybackSoldier of Fortune, çıktığı zaman büyük yaygara koparmış bir oyundu. Zamanının oldukça ilerisindeki grafik kalitesi dışında, bunu şiddet düzeyine de bağlayabiliriz. SOF, yanlış hatırlamıyorsam, ateş ettiğinizde düşmanların kollarının,bacaklarının, kafalarının filan koptuğu ilk oyundu.

Modifiye Quake motorları kullanan Soldier of Fortune serisinin diğer oyunlarının aksine, Soldier of Fortune:Payback, Couldron tarafından geliştirilen CloakNT adında yepyeni bir oyun motoru kullanıyor.

Yeni oyun motorunun, daha gelişmiş bir oyun deneyiminden çok maliyet kaygısıyla kullanıldığı belli. Zira, Doom 3 motoru zamanında 2 milyon dolarlık acaip bir lisans etiketine sahipti. Üstelik, bu benim bizzat gördüğüm fiyat etiketi; rivayete göre -ki doğrudur- ilk çıktığında fiyat 10 milyon dolarmış. Parayı vermekle de kurtulamıyorsunuz; dağıtım bedeli üzerinden de, yanlış hatırlamıyorsam %30 alıyorlar.

Bilindik ve popüler oyun motorları, belli bir satış düzeyini garantilese de, küçük geliştiriciler için bu bedelleri ödemek son derece riskli. Soldier of Fortune Payback de de,Soldier of Fortune Payback son zamanlarda oynadığım oyunların çoğunda olduğu gibi, “doğu bloku” etkisi görüyoruz. Takımın neredeyse tamamı eski doğu bloku ülkeleri vatandaşları; isimlerden muhtemelen Sırp oldukları kanaatine vardım. Bu ülkelerde ücretler düşük ve çok kalifiye programcılar, grafik sanatçıları var. ABD ve Avrupalı yatırımcılar, tam bir beyin avındalar. Kısacası, oyun furyasını da ülke olarak kaçırdık.

Gelelim oyuna:

CloakNT, fizik motoru olarak Havok kullanıyor ve bence gayet başarılı. Kol-bacak koparma hadisesi, bütün seride olduğu gibi abartılmış. Yapay zeka oldukça zayıf; ancak oyun oldukça zor. Zorluğun nedeni, düşmanlarınızın çok iyi kamufle olmaları ve iyi yer tutmalarından; iyi dağılmış ve genelde aynı anda ateş etmeye başlayan ağır silahlı düşmanlar, oyun boyunca epey zorluyor. İkinci zorluk kademesinde, ortalama bir askeri öldürmek için -çelik yelek giyenler doğal olarak daha zor ölüyor- genelde bir şarjör mermi harcadım. Kafaya yapılan tek ve isabetli bir atış ölümü garantilese de, bahsettiğim nedenlerden ötürü bunu gerçekleştirmek neredeyse imkansız.

Soldier of Fortune PaybackSilahlar çok iyi. Yeni çıkan P99, 454 Casull mermi atan bir tabanca, Heckler & Koch’un PDW’si gibi silahlar oyunda yerini almışlar. Anladığım kadarıyla,Soldier of Fortune Payback lisans ödememek için gerçek görünümlü silahlara uyduruk isimler verilmiş. Herşeye rağmen, çoğu oyunda canımı sıkan silah meselesi, bu oyunda çözülmüş. Silahların davranışları, zorluk seviyesine göre değişmekle birlikte, en düşük zorluk seviyesinde bile, örneğin tepme gibi parametreler orantısal olarak doğru ayarlanmış. 40 değişik silah olduğu söylense de, bu doğru değil. İlerledikçe, örneğin tabancaları çift olarak taşıyabiliyorsunuz ki, bu seçeneği de sanki yeni bir silahmış gibi saymışlar. Gerçekte, 20-25 kadar silah var; ancak seçimlerden oldukça memnun kaldım.

Enerji, TimeShift, Crysis gibi yeni oyunlarda olduğu gibi. Vurulduğunuzda, enerjinin yükselmesi için bir parça beklemeniz gerekiyor.

Soldier of Fortune’da, ilk kez gördüğüm bir hoşluk daha var, silahı doldururken, ekran flulaşıyor ve düşmanın hareketlerini takip etmeniz biraz daha zorlaşarak taktik dezavantaj yaratıyor.

Grafikler konusunda karmaşık hislere sahibim!

Açık alanlar bayağı iyi çizlmiş; özellikle gökyüzü ve otlar. Silahlar da öyle. Gelgelelim, özellikle NPC’ler (düşmanlar diyelim) sanki 2-3 sene önceden fırlamış gibiler. Oyun ilerledikçe, grafik kalitesi bariz bir şekilde düşüyor. Cutscene’lerde çok vasat; hatta Deus Ex’in ilkinde bile çok daha etkileyici videolar vardı.

Soldier of Fortune PaybackPatlamalar hiç gerçekçi olmamasına rağmen, oldukça hoş canlandırılmış; bir nevi “soyut sanat” yapmışlar animasyonda!

SOF payback oldukça kısa; hatta Sin:Episodes kıvamında. Bu bence iyi bir şey; tadında kalıyor. İlk Soldier of Fortune oyunlarında olduğu gibi “boss”larla karşılaşıyoruz bölüm sonlarında. Bunlar, bizim gibi paralı askerler ya da terörist liderleri oluyor. Çoğunu öldürmek gayet kolay; tek yapmanız gereken iyi mevzilenip bolca mermi sallamak. Oyunu 6-7 saatte bitirdiğimi söyleyebilirim.

Oyunu oynayacaklar için bir hatırlatma: Ortalara doğru, bir Rus savaş helikopterinden asker indirip bize ateş ediyorlar. Bu helikopteri boşu boşuna elinizdeki silahlarla vurmaya, ya da adamları öldürüp tüketmeye çalışmayın. Gelen düşmanları öldürüp ilerleyin; biryerlerde RPG-7 bulacaksınız. Helikopteri ancak bununla düşürebilirsiniz.

Oyun siteleri çok düşük not vermiş olsa da, kötü bir oyun diyemem.

DirectX 9 uyumlu, kuvvetlice bir kartınız varsa oyunu çok düşük ayarlarda oynayabilirsiniz. (Oyun DirectX 10 destekli değil!) Minimum X800 ATI isteniyor olmasınaSoldier of Fortune Payback rağmen, X700 ile akıcı olarak oynayabildim. Çok daha güçlü olan, overclock edilmiş bir X800 kuş kondurmuyor açıkçası. Ayarları sonuna kadar açabilmeniz için çok kuvvetli bir kart gerek. Ancak, takılma olmadan oynanması büyük avantaj.

Minimum sistem gereksinimleri:

. Windows XP/Vista

. Pentium 4 2.5GHz

. 512 MB RAM

. DVD-ROM

. 256MB DirectX 9.0c uyumlu pixel/vertex shaders V.2.0 - ATI Radeon x800 veya Nvidia GeForce 6800

Tavsiye edilen:

. Windows XP

. Core 2 Duo 2.0GHz

. 1 GB RAM

. DVD-ROM Drive

. 512MB DirectX 9.0c - ATI Radeon x1900 veya Nvidia GeForce 7900

6, toplam 37 sayfa«123456789101112131415»...Last »