GSoC 2008

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

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

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ı

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. :/

Pardus... Özgürlük İçin... Özgürlük için Pardus... Vi The Editor Google Summer of Code