Skip to content

Görülesi yerler

09-Aug-09

Yaz mevsiminde herkes tatilde güneşlenip ter dökerken biz de Mersin’in sıcağında proje peşinde ter dökmeye devam ediyoruz. Dolayısıyla benim görülecek yerler önerim meren ve düygü gibi gerçek hayattan değil ancak sanal dünyadan olabiliyor.

Eğer bugüne kadar denk gelip rss’ine abone olmadıysanız -ki gördüyseniz mutlaka rss’ine abone olmuşsunuzdur- mutlaka görmeniz gereken iki güzel blogu bugün hatmettim.

Birincisi siz hayatın akışına kapılmış sürüklenirken, memlekette olan biten, kimsenin elleşip göz önüne çıkarmadığı bazı detayları görmenize yardımcı olan ayrıca keyifli anılarıyla dakikalarınızı renklendiren Koray Löker’in bilöker‘i. Bolca okunası, üstüne düşünülesi yazılar barındırıyor. Sanatçı ruhunun hassasiyetiyle çoğu kişinin gözünden kaçan hassas noktalara temas ediyor, insanın ufkunu genişletiyor ve fakat normalde görmeyip duymadığınız için aklınıza takılmayan aksaklıkları sıkıntıları gösterip dertlerinize yeni dertler katıyor.

İkincisi de Doruk Fişek’in biraz yemek biraz iş az da serzeniş tadında, okurken karnınızı acıktıracak, olmadık şeyler canınız çektirecek seyir defteri. Eğer benim gibi geçmişe doğru kaptırıp okumayı düşünürseniz -ki başlayınca duramayacak bunu yapacaksınız- baştan uyarayım. Öncelikle güzel yemek yazılarıyla karnınızı acıktıracak, siz tam yiyecek almaya giderken size göstereceği ilginç bir ipucu ya da betikle sizi tekrar yerinize oturtacak, betik işlerken okumaya devam ettiğinizde birşeylere sinirlenmenize yol açıp iştahınızı kaçıracak sonuç olarak size muallakta dakikalar geçirtecek. Bence bu blogu her daim mevsiminde okumak lazım. :)

Bir yandan tweet’liyorum, bir yandan blog’a yazıyorum. 3 ay sonra laptop’uma mı kavuştum ne :D

WordPress RSS Yazım Hatası Sorunu

18-Jul-09

WordPress, blog yazarken ihtiyaç duyabileceğiniz neredeyse herşeyi öntanımlı olarak sağlıyor. Geniş eklenti yelpazesiyle de eksikler kolayca tamamlanabiliyor. Fakat zaman zaman bu eklentiler enteresan sorunlar da çıkarabiliyor.

Bugün wordpress kullanan bir siteyi feedburner’a kaydetmeye çalışırken feedburner RSS’nin geçersiz olduğundan dert yandı. Firefox yüksek bir zeka örneği ile geçersiz de olsa RSS’i görüntüleyebildiğinden ilk başta sorunu göremedik. Daha sonra Google’dan ulaştığım bir iki forumda bunun dosyanın başında oluşan bir boşluk karakterinden kaynaklanabildiğini okudum. Firefox ile kaynak koduna bakarak bu durumu göremediğimizden wget ile RSS’i indirip baktım. Gerçekten de yarım saatimizi çalan şey dosyanın en başında bir boşluk karakteriydi. -Evet sadece basit bir boşluk.-

Forumlarda sayfayı oluştururken kullanılan dosyalardan herhangi birindeki yazım hatasının bu duruma neden olabileceği yazıyordu. Çözümler de yazım hatasını bulup düzeltmek yönündeydi. Ama birçok dosya içinde fazladan yazılmış bir boşluğu bulmak pek kolay değildi.

Bir süre forumların gazıyla birkaç dosyada arama yaptıktan sonra aklıma daha pratik bir fikir. Çıktının başlaması gereken yeri biliyorduk. Buradan önceki belleğe aktarılan tüm çıktı da soruna neden olan o boşluk olduğundan sorunun çözümü çıktının başlaması gereken yerden hemen önce bellekteki herşeyi silmekti. Bunu da ob_clean() fonksiyonu ile sağladık.

Sonuç olarak RSS’yi oluşturan wp-includes/feed-rss2.php dosyasınında

11. echo ‘<?xml version=”1.0″ encoding=”‘.get_option(‘blog_charset’).’”?’.'>’; ?>

olan kısmı

11. ob_start();
12. echo ‘<?xml version=”1.0″ encoding=”‘.get_option(‘blog_charset’).’”?’.'>’; ?>

yapmak sorunu çözdü.

Çevrimdışı PiSi paketi yüklemek

18-Nov-08

İnternet bağlantısı olmayan makinelere PiSi paketi yüklemekle ilgili birçok betik yazıldı, sayfa yapıldı. Ben de geçmiş zamanda benzer bir betik yapıp tsdesign altına atmıştım. Yazın staj sırasında PiSi API’ye aşina olunca biraz üzerinden geçip betiği güncelledim.

Betik, kurulmak istenen paketin system.base bileşeni dışındaki tüm bağımlılıklarını listeliyor, isterseniz indiriyor.

Betiği kullanmak isterseniz,

http://tsdesign.info/pardus/tarballs/pisi_getter.py.tar adresinden indirip

python pisi_getter –query <paket_adı>

şeklinde kullanabilirsiniz.

## Bu yazıyı yazarken farkettim ki betiğin yaptığı işi pisi bir ufak hileyle yapabiliyor. Yalan oldu benim betik :)   ##

Pisi ile aynı işi yapmak için,

Bir dizin yaratın,

# mkdir pisi_getter

Bu dizini kararlı depoyu ekleyin,

# pisi ar -D pisi_getter/

Daha sonra system.base’i görmezden gelerek istediğiniz paketi kurun,

# pisi it konversation -D pisi_getter/ –ignore-safety

Böylece pisi, paket için gereken bağımlılıkları hesaplayıp indirecek.

Daha sonra önbellekten topladığınız paketleri başka bir sistemde afiyetle tüketebilirsiniz.

Svn geri alma

18-Nov-08

Zaman zaman karşılaştığım irili ufaklı sorunları çözmek için internette dolanıp bulduğum çözümleri not etmek niyetiyle açtığım blogumu, biraz üşengeçlikten biraz ihmalkarlıktan, maalesef ki bu iş için kullanmak henüz nasip olamadı. Draftta, yayınlananlardan çok yazı birikmiş olması da enteresan bir durum. Bolca yeni şeyler öğreneceğim bir döneme giriyorum. Umarım bundan sonra buraya yazacak bolca notum olacak.

Üzerinde uğraştığımız projelerde yeni kullanıcılar için öğrenmesi kolay olduğundan sürüm takip sistemi olarak subversion kullanıyoruz. Her ne kadar öğrenmesi kolay olsa da elbette arada ufak tefek sorunlar çıkıyor.

Geçtiğimiz günlerde kullanıcılardan biri yanlışlıkla neredeyse depomuzun yarısını silmiş. Her ne kadar svn kullandığımızdan bu durum çok sıkıntı olmasa da daha önce bu durumla karşılaşmamış olduğumdan irc’de konu hakkında biraz laflamak gerekti.

Sonuç olarak unutulmaması gereken komut şöyleymiş.

svn merge -r [Son Revision]:[Dönülecek Revision] URL

örn. svn merge -r 1216:1205 URL

Durup dururken durdurmak.

10-Sep-08

Youtube’un son durumunu kesin olarak bilen yok. Yetkililerin yaptığı açıklamalara göre yasal olarak henüz erişime açılmamış. Buna rağmen kimi kullanıcılar hiçbir hile hurda kullanmadan youtube’a erişebiliyor. Erişemeyenler de elbet erişmenin bir yolunu buluyor.

Ben youtube’a aracısız erişebilen kitledenim ve zaman zaman youtube’ta “related videos” marifetiyle -eskinin moda tabiriyle- sörf yapıyorum. Bu sırada da bu ve benzeri sitelerin neden “durup dururken” durdurulduklarını gitgide daha iyi anlıyorum.

Bugün dolanırken şimdiye kadar çokça duyduğum ama cevabını kimsenin ver(e)mediği bu memleketin politik durumu neden böyle sorusunun cevabını buldum. Üstad Attila İlhan gayet açık ve anlaşılır şekilde cevabını vermiş bu karmaşık ve anlatması zor görünen sorunun.

Tabii bu cevabı izlemek için bu cevabın önündeki engelleri aşmak, etrafı saran uyutucuların arasından sıyrılmak gerekiyor. Bunun için de hedefinizin bunları bulmak olması yani konularla bir miktar ilgili olmanız gerekiyor. Kısacası insanların bu bilgilere denk gelmesi ihtimali başarıyla ortadan kaldırılmış. İnce ince çalışıp bunu başaranları tebrik etmek gerekli.

Biraz daha açık yazmak gerekirse aşağıda -biri devletin resmi yayın organı olmak üzere ki özellikle bu kanalın yayın içeriği dikkat çekici- 3 ulusal TV kanalının yayın akışı var ve görülüyor ki yayınlar sadece akıp gitmesi geride bir iz bırakmaması için özel olarak hazırlanıyor. İnsanların iz bırakması muhtemel içeriklere ulaşmasının da önüne bir şekilde geçildi mi işlem tamam.

İnternete, herşeye rağmen insanlara doğruyu görebilmek adına bir şans daha tanıdığı için teşekkür ederek bahsettiğim videonun bağlantılarını ekleyeyim.

Attila İlhan’la Zaman İçinde Yolculuk, 3 Nisan 2004 (1)
Attila İlhan’la Zaman İçinde Yolculuk, 3 Nisan 2004 (2)
Attila İlhan’la Zaman İçinde Yolculuk, 3 Nisan 2004 (3)

Star TV ATV TRT 1
06:40 Mesut Yar’la Uyan Türkiye
08:00 Her Eve Lazım
08:30 Sabrina
09:10 Ramazan Sofrası
10:20 Arım Balım Peteğim
13:30 Gün Ortası
14:00 Esra Erol’la İzdivaç
17:30 İftara Doğru
19:00 Uğur Dündar’la Star Ana Haber
19:50 Star Spor
20:00 Pulsar
22:00 Mega Magazin
00:00 Baba Ocağı
02:00 Uğur Dündar’la Star Ana Haber
03:00 Nihat Hatipoğlu İle Sahur
05:00 Esra Erol’la İzdivaç
06:30 Kahvaltı Haberleri
08:30 Jetgiller
09:00 Kadının Gücü
10:45 Hepsi 1
13:00 Gün Ortası
13:20 Kadın Olmak
14:45 Selena
16:40 Avrupa Yakası
19:00 atv Ana Haber
19:50 Spor Haberleri
20:00 Sıla – Bölüm 67
22:00 Hatırla Sevgili – Bölüm 60
00:10 Öldüren Cazibe
02:30 Hüdaverdi
03:45 Köfteci Holding
05:00 atv Ana Haber
06:00 Çilek Kız
06:58 İstiklal Marşı ve Günün Program Akışı
07:00 Sabah Haberleri
09:00 Elma Kurdu Nam Nam
09:20 Çizgi Film “Pembe Panterin Maceraları”
09:40 Çizgi Film “Goof’un Takımı”
10:10 Hayal Fabrikası
10:30 Bir Ramazan Sabahı
12:00 Ötelerden Esintiler
13:00 Haber
13:20 Hava Durumu
13:25 Fragmanlar + Reklam
13:30 Ramazan Klipleri
13:35 Yaprak Dökümü
14:45 Türk Sineması “Rabia-İlk Kadın Evliya”
16:35 Gönlümüzde Yaşayan Peygamber
17:10 Manşettekiler
17:35 Ramazan Geldi Hoşgeldi
17:50 Ramazan Sevinci
19:50 Reklam
20:00 Ana Haber Bülteni
20:35 Spor
20:40 Hava Durumu
20:45 Milli Piyango Çekilişi
20:55 Reklam
21:00 Akşam Sefası
22:25 Reklam
22:30 Sürgün Hayatlar
23:45 Reklam
23:50 Ezberbozan
00:50 Reklam
00:55 Günün Ardından
01:15 Ramazan Geldi Hoşgeldi
01:30 Semavi Duyuşlar
02:30 Gönlümüzde Yaşayan Peygamber
03:00 Sahur Zamanı
05:00 Mukabele
06:00 Yaprak Dökümü

 

GSoC 2008

23-Apr-08

GSoC 2008Başvuruları kabul edilen öğrencilerin açıklanması ile GSoC 2008 sezonu, 98 ülkeden 1100 civarı öğrenci ve 175 akk yazılım projesinin katılımı ile başladı.

Geçen sene GSoC’a katılan Türk öğrenciler [1] ve bu sene Pardus’un GSoC’a katılan projeler arasında yer alması, Türkiye’de GSoC’a olan ilgiyi arttırmış olacak ki, GSoC başvurusu kabul edilen Türk öğrenci sayısı katlanarak 15′e çıkmış. [2]

Pardus ekibi de “Pardus CD/DVD/USB Dağıtım Sihirbazı” yapmak için yaptığım başvurumu kabul etmiş ve benim bu 15 öğrenciden biri olmamı sağlamış.

Bu yaz ÖSYM ve Google sayesinde oldukça yoğun ve keyifli  geçecek gibi duruyor. Umarım yaz sonunda projeyi başarı ile tamamlamış ve ortaya kullanılabilir bir ürün çıkarmış olacağım.

  1. http://nyucel.blogspot.com/2007/04/google-summer-of-code.html
  2. http://nyucel.blogspot.com/2008/04/google-summer-of-code-2008.html

Google henüz bu tarz bir bilgi (ülke/katılımcı) sunmamasına rağmen, sonuçların açıklanmasından sonra, 1 saat içinde bu bilgileri topladığı ve bizimle paylaştığı için Necdet hocaya teşekkürler.

Google App Engine üzerinde 13 basit adımda Django

11-Apr-08

Google, eposta hizmeti, dosya alanı, proje yönetim sistemi derken şimdi de web uygulamaları için altyapı ve barındırma desteği vermeye başladı. Artık Python ile hazırladığımız web uygulamalarımızı Google’ın altyapısından faydalanarak sunabileceğiz. Google App Engine, henüz önizleme sürümü aşamasında bir hizmet ama şimdiden ısınmaya başlamakta fayda var.
Thomas Brox Røst’un blogunda basit bir eğitsel buldum ve çevirebildim. Umarım konunun meraklılarına en azından fikir verir.

Not: Aşağıda yazanları deneyebilmeniz için Python 2.5 veya üzeri bir sürüm kullanmanız gerekiyor.

Pardus kullanıcıları “Pardus 2008″ ile Python 2.5 kullanıyor olacaklar. Az biraz daha beklemek gerekecek :)


11 Nisan 2008, Türker Sezer (Çeviri)
8 Nisan 2008, Thomas Brox Røst (Özgün metin)

Bu eğitselde arkaplanda datastore kullanan basit bir Django uygulamasının Google App Engine üzerinde nasıl çalıştırılacağını göstereceğim. Yazıyı yazarken, Django’ya aşina olduğunuzu varsayacağım.

Güncelleme: Tüm dosyaları buradan indirebilirsiniz. “main.py” içindeki “sys.path” değerini düzelttiğinize emin olun.


Adım 1: Bir uygulama adı kaydedin ve yönlendirmelere göre geliştirme setini kurun.


Adım 2: Uygulamanız için bir dizin yaratın. Bu eğitselde uygulamamın adı “mashname” olacak.

1. tmp$ mkdir mashname
2. tmp$ cd mashname

Adım 3: Yeni dizininize “main.py” adında bir dosya ekleyin:

main.py

1.  import os, sys
2.  os.environ["DJANGO_SETTING_MODULE"] = "mashname.settings"
3.  sys.path.append("/home/mew/tmp/mashname")
4.
5.  # Google App Engine kütüphaneleri
6.  from google.appengine.ext.webapp import util
7.
8.  # Djangoyu ayarlarını yeniden yüklemeye zorla
9.  from django.conf import settings
10. settings._target = None
11.
12. import django.core.handlers.wsgi
13. import django.core.signals
14. import django.db
15. import django.dispatch.dispatcher
16.
17. # Hataları kaydet.
18. #django.dispatch.dispatcher.connect(
19. #   log_exception, django.core.signals.got_request_exception)
20.
21. # Rollback olay yakalayıcısının kaydını sil
22. django.dispatch.dispatcher.disconnect(
23. django.db._rollback_on_exception,
24. django.core.signals.got_request_exception)
25.
26. def main():
27.     # WSGI için bir Django uygulaması yarat
28.     application = django.core.handlers.wsgi.WSGIHandler()
29.
30.     # WSGI CGI yakalayıcısını bu uygulama ile çalıştır
31.     util.run_wsgi_app(application)
32.
33. if __name__ == "__main__":
34.     main()

Bu yerelde test edebilmek için eklediğim Python yolu dışında temel olarak buradaki ile aynı dosya. Ayrıca DJANGO_SETTING_MODULE değerini de ayarladım-bu belki App Engine üzerinde çalışırken gerekli olmayabilir. Hata kaydını çalıştıramadığım için iptal etmek zorunda kaldım.


Adım 4: Aynı dizine app.yaml adında bir dosya ekleyin.

app.yaml

1. application: mashname
2. version: 1
3. runtime: python
4. api_version: 1
5.
6. handlers:
7. - url: /.*
8. script: main.py

Burada uygulama adının doğru yazıldığına emin olun.


Adım 5: “mashname” dizininizde, yeni bir django projesi yaratın

1. tmp/mashname$ django-admin.py startproject mashname

(Django’nuzun olması gerektiği gibi çalıştığını varsayıyorum)


Adım 6: Şu an uygulamanızı test edebiliyor olmalısınız:

1. tmp/mashname$ cd ..
2. tmp$ dev_appserver.py mashname
3. INFO     2008-04-08 19:08:10,023 appcfg.py] Checking for updates to the SDK.
4. INFO     2008-04-08 19:08:10,384 appcfg.py] The SDK is up to date.
5. INFO     2008-04-08 19:08:10,404 dev_appserver_main.py]Running application mash
6. name on port 8080: http://localhost:8080

Tarayıcınız ile http://127.0.0.1:8080/ adresine girin. Django’nun standart “It worked!” mesajını görüyor olmalısınız.


Adım 7: Proje içinde bir Django uygulaması yaratın:

1. tmp$ cd mashname
2. tmp/mashname$ python mashname/manage.py startapp main

Adım 8: Şimdi sıra bir model eklemeye geldi. Tüm ziyaretçilerin kaydını datastore’a yazan ve onların IP adresini ve ziyaret zamanını gösteren basit bir uygulama yaratacağız. “~/tmp/mashname/main/models.py” dosyasını düzenleyin. Dosya şöyle görünmeli:

models.py

1. from google.appengine.ext import db
2.
3. class Visitor(db.Model):
4.     ip = db.StringProperty()
5.     added_on = db.DateTimeProperty(auto_now_add=True)

Django modellerini kullanmadığımız için veri tabanını eşlemeye gerek yok.


Adım 9: Şimdi “Visitor” modeline veri eklemekten ve önceki ziyaretçilerin kayıtlarını göstermekle sorumlu görünümümüzü yaratacağız. views.py dosyasını aşağıdaki gibi düzenleyin (models.py ile aynı dizinde):

1.  from django.http import HttpResponse
2.
3.  from mashname.main.models import Visitor
4.
5.  def main(request):
6.      visitor = Visitor()
7.      visitor.ip = request.META["REMOTE_ADDR"]
8.      visitor.put()
9.
10.     result = ""
11.     visitors = Visitor.all()
12.     visitors.order("-added_on")
13.
14.     for visitor in visitors:
15.         result += visitor.ip + u" visited on " + unicode(visitor.added_on) + u"<br/>"
16.
17.     return HttpResponse(result)

Adım 10: Son olarak, urls.py dosyasını görünümümüzü gösterecek şekilde düzenleyelim.

urls.py

1. from django.conf.urls.defaults import *
2.
3. urlpatterns = patterns("",
4. (r"^$", "mashname.main.views.main"),
5. )

Adım 11: Uygulamanızı test edebilirsiniz. (6. adımdaki gibi) Herşey yolunda gidiyor olmalı. Her sayfa yenilendiğinde, “Visitor” modeline yeni bir kayıt ekleniyor ve ekrana basılıyor.


Adım 12: Uygulamanızı “Google App Engine”e yükleyin:

1. tmp$ appcfg.py update mashname

İlk yüklemede Google hesabınız için eposta adresinizi ve şifrenizi girmelisiniz.


Adım 13: İyi eğlenceler! Bu uygulamanın sonucunu görmek için, http://mashname.appspot.com/ adresine bakabilirsiniz.

Şeffaf eğitim sistemi

08-Apr-08

Son yıllarda bir "şeffaflık" furyasıdır gidiyor. Herkes birşeylerin şeffaf olmasını istiyor -genelde bu talepler sonuçsuz kalıyor-.

Türkiye’nin nadide(!) yazılım firmalarından biri hazırladığı eğitim sistemi ile bir ilke imza atmış. Oluşturduğu sanal fakültenin tüm odalarını ince bir camdan yapmış. Fakülteye giren herkes, bir topluluk olmanın bilinciyle hiçbirşeyini gizle(ye)miyor.

İşin doğrucasını söylemek gerekirse, bankaların, devlet kurumlarının, iletişim, endüstri, sağlık sektörlerinde önde gelen kuruluşların ve bir çok üniversitenin kullandığı bu sistem, kullanıcılarına yaşattığı türlü olumsuzluğun yanısıra güvensiz bir ortam sunuyor.

Dahası bu yazılım "bir grup hevesli insan" tarafından değil de, "ciddi bir kuruluş" tarafından geliştirildiği için lisansı için yüklüce paralar verip alınan yazılım sorun çıkardığında, size "destek" sağlayan firmaya bağımlı kalıyorsunuz. Firma da gelen her isteği itina ile gelecek "yamaya" sallıyor.

Maalesef bir kullanıcı olarak kurbanı olduğum bu durum, insanın aklındaki tüm şüpheleri silen referansların, süslü tanıtım faaliyetlerinin, iş yazılıma gelince kâr etmediğinin, kendinizi içeriğini bilmediğiniz yazılımlarla, birilerine bağımlı kılmanın ne derece saçma olduğunun açık bir göstergesi.

HFS+ dosya sistemi ve unicode dosya adları

20-Mar-08

Okulda* yenice başladığımız bir proje için SVN kullanmaya karar verdik. Onlarca kişinin ortaklaşa çalıştığı işlerde bize büyük kolaylıklar sağlayan SVN, işin içine unicode dosya isimleri ve HFS+ dosya sistemi girince bizi epey sıkıntıya soktu.

İlk başlarda gayet güzel giden dosya ekleme işlemleri, OS X kullanan kullanıcılar işin içine girince birden karıştı. Dizinlerin içinde aynı dosyalardan ikişer tane olmaya, updateler sırasında hatalar oluşmaya başladı.

Bir süre dosya sisteminin aynı dosya adında iki dosyayı nasıl yanyana tutabildiğine şaşırdıktan sonra Google sayesinde öğrendim ki HFS+ dosya sisteminde dosya isimleri decomposed (“e\314\200″, 3 byte) biçimde yazılıyormuş. Linux ve Windows’ta ise composed (“\303\250″, iki byte) biçimde. Dolayısı ile bize aynı görünen dosya isimleri sisteme göre gayet farklılarmış.

Oluşan bu durum ile ilgili SVN tracker’dan bulduğum yamalar da işe yaramayınca, OS X kullananların en azından sisteme dosya ekleyip çıkarabilmesi için MacFuse kullanarak çok pratik olmasa da bir yol buldum.

Öncelikle sisteme MacFuse ve ntfs-3g kurdum. “Disk Utility” ile 1 GB’lik bir dmg yaratıp FAT olarak formatladım. Daha sonra bu dmg’yi mount edip, NTFS-3G ile tekrar formatladım. (Direk ntfs-3g ile bir dmg yaratmaya kalkınca “The device doesn’t exist; did you specify it correctly?” diye bir hata veriyor.)

Şimdi bu disk imajı üzerinde SVN depomuzu kullanabiliyoruz. Dosya ekleyebiliyoruz, çıkarabiliyoruz.Fakat buradan bir dosyaya erişmeye çalıştığımızda OS X programları dosyanın orada olmadığını iddia ediyor. Dosyaları düzenlemek için Terminal’den disk üzerinde bir yere kopyalamak ve oradan açmak gerekiyor.

Şimdilik sadece veri girişi yapıldığından, dosyaları düzenleme kısmı pek canımızı yakmıyor. Ama verileri düzenlemeye başladığımızda SVN tarafından hala bir çözüm gelmemiş olursa, dosyaları oradan oraya savuran kirli çözümler kullanacağız veya istemeyerek de olsa dosya adlarını sisteme uyduracağız gibi duruyor. :/