05 October 2011

Nodejs & Coffeescript Ile Yazılmış Bir Web Çatısı: Juju

İlk kez bir programlama dilini web çatısı yazarak öğrenmeyi denedim, gerçekten eğlenceli olduğunu gördüm. Planladığım şey, çok sık kullandığım bir web çatısı olan Django'yu, öğrenmek istediğim dilde bir benzerini yazmaktı. Elbette Django gibi devasa bir çatıyı hemencecik yazmak mümkün değil; ama bir prototipini yazmayı denedim, pişman da olmadım. Hatta devamını bile getirebilirim.

Yalnız işe girişirken Django'da anlam veremediğim birtakım şeyler yok değil, mesela:

  • Neden proje oluşturmak için django-admin.py, proje oluşturduktan sonraki komutlar içinse ./manage.py kullanıyoruz? İkisi için de django diye bir komut olamaz mı?
  • Uygulama dizinleri ile diğer dizinleri neden birbirinden ayırmıyoruz?
  • Neden view'ları fonksiyon yerine class kullanarak yazmıyoruz? (Bu konuyla ilgili yazılan makaleye göre, seçimini fonksiyonlardan yana yapan insanlar da varmış.)
  • Neden statik dosyaların bulunduğu dizinin yapılandırmasını sabit tutmuyoruz? Statik dosyalar static/ dizininde tutulur diye bir kural koysak, ayar işini tamamen web çatısına bıraksak? (Hemen hazır cevap: staticfiles Django'da eskiden üçüncü parti bir uygulamaydı, şimdi contrib modülü içinde olmasına rağmen geriye uyumluluk ilkesi nedeniyle durum böyle.)

Bunlar cevabı bilinen, tahmin edilebilen sorular ve hem bu tip soruların cevaplarını dikkate alarak, hem de Nodejs ve CoffeeScript'in kendine has özelliklerini, avantajlarını ve o dille yazılmış altyapıları, kitaplıkları araştırarak küçük bir başlangıç yapmak istedim. Zevkine de olsa, potansiyel bir proje olarak düşünmekte fayda var. Şimdi Django'da proje oluşturma, proje dizinine girme ve geliştirme sunucusunu çalıştırma işlemlerini gösterelim:

$ django-admin.py startproject hello_django
$ cd hello_django/
$ python manage.py runserver
Validating models...

0 errors found
Django version 1.3.1, using settings 'hello_django.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

CoffeeScript ile yazmaya başladığım mini web çatımızın adı, juju. Juju'da henüz MVT altyapısı tamamlanmış değil; ama en azından runserver dediğimiz zaman bir sayfayla karşılaşabiliyoruz:

$ juju startproject hello_juju
$ cd hello_juju/
$ juju runserver
Server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Sayfaların ekran görüntülerini de paylaşalım:

http://static.gokmengorgen.net/blog/django-juju-runserver.png

Evet, başlangıç sayfaları neredeyse birebir aynı. Altyapısal olarak farklılıkların en başında, Juju'da tüm işlemler juju komutuyla yapılıyor. Uygulamalar apps dizininde tutuluyor ve ihtiyaç duyulabilecek tüm dizinler en başta oluşturuluyor:

$ ls hello_django/
__init__.py    manage.py    settings.py    urls.py

$ ls hello_juju/
apps/    logs/    pids/    settings.coffee    static/    urls.coffee

Güzel bir başlangıç yapmış olduk. Bir sonraki yazımda, örnek bir uygulama oluşturmayı göstereceğim. Umarım bu eğlencenin devamı gelir.