dojo etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
dojo etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

28 Mayıs 2013 Salı

Websocket soyutlama mümkün mü?

Geçen yıl zaten çok az ilgilenebildiğim yazılım hobimi sadece Web geliştirme üzerine yoğunlaştırmaya karar vermiştim, önceki yıllarda Python ile masaüstü uygulamaları falan yapıyordum.

HTML5 Uygulamaları mobil cihazlarda falan her yerde çalışabiliyor, yani tek bir kod ile tarayıcı çalıştıran her türlü cihaza uygulama sunma imkanı var. Doğal kod çalıştırmanın avantajları elbette var ama bence Dünya yavaş yavaş HTML5 çevresinde dönmeye başlıyor, zamanla tarayıcılar donanım kaynaklarına  ulaşabilecek API'lere kavuşacak. Bunun son örneği Google'ın başını çektiği bir organizasyonun geliştirdiği WebRTC API.

HTML5'te neler yeni diye bakınca Websocket'i gördüm, bir W3C standardı. Klasik HTTPRequest işleminin aksine istemci ve sunucu arasında kalıcı bir bağlantı kuruluyor ve bağımsız olarak karşılıklı mesaj gönderilebiliyor. Bir nevi e-posta sistemi gibi. Bu, long polling gibi zorlama yöntemlerin yerine geçecek bir teknoloji. Bağlantı ws:// adresine basit bir HTTP 1.1 çağrısı ile başlıyor, sunucu bağlantıyı kabul ederse HTTP protokolü terk ediliyor ve sabit bir bağlantı açılıyor.

HTTPRequest ile RPC çağrıları yapmaya devam ederken Websocket ile sunucudaki olaylar anlık olarak istemciye iletilebiliyor. Bu konu oldukça ilgimi çektiğinden en azından basit bir chat uygulaması yaparak pratik yapmaya karar vermiştim. Ama bir sorun vardı hiç JS bilmiyordum, çünkü en sevmediğim dildir :)

JS Sorununu CoffeeScript ile aştım, Coffee ile gerçekten okunası kodlar yazılabiliyor. Diğer sorun da arayüz yazmak, tarayıcılar arası uyumsuzluklar vs. ile uğraşmak. Bunları da Dojo Framework ile hallettim, Dojo kütüphanesi tam teşekküllü bir araç takımı sunuyor, mobil cihazlar için kütüphaneleri de var, ayrıca  kodu doğal DOM nesnelerden de soyutluyor, declare, hitch gibi bazı fonksiyonları ve evented gibi sınıfları doğal JS'ten de uzaklaştırıyor, iyi yani. Tarayıcı uyumunu da dert etmiyorsun. En önemlisi iyi belgelenmiş.

Sunucu tarafında fazla zorlanmamak için zaten bildiğim Python kullanmak istedim, tabii ki Tornado Server. Basit, hızlı, belgesi bol, kütüphane olarak hemen her şey var. Tornado'yu Nginx'in arkasına aldım, çok gerekli miydi bilmiyorum açıkcası ama ileride bir şeyler yapıp deploy etmek istediğimde veya bir VPS kiralamaya kalkarsam diye Nginx'i tecrübe etmiş olayım dedim.

Dojo ve Tornado'da emekleme aşamasını geçmem bayağı zaman aldı, zira bazen 15-20 gün tek satır kod yazmadım ve her seferinde yav ne yazmıştım diyerek yeni baştan öğreniyormuşum gibi oldum. Neyse ki artık temel bazı kütüphaneler yazmaya başladım.

Sunucuda yazdığım chat/main.py uygulamasındaki nesneleri;

@rpchook
class login(object):


 def run(self, data):
  ...




@sockethook
class chat(object):


 
 def message(self, msg):
            ...

İstemcide;


login = new chat.main.login()
login.on("loaded", lang.hitch(this, this.loaded))
login.send(data)

chat = new chat.main.chat()
chat.on("message", lang.hitch(this, this.message))
chat.send(msg)

gibi kullanabilmek için bir şeyler yazdım, RPC tarafı kolaydı ama Socket konusu farklı, sunucuda her bir socket için bir loop çalışıyor, ben istemcide soyutlama yapmak istediğimden tek bir loop kullanacak bir tasarım yaptım, iyi mi kötü mü henüz bilmiyorum, kodlama bitip çalışan bir şeyler ortaya çıkarsa belli olacak. 

Eli yüzü düzgün bir şey olana kadar kod yayınlamayacağım. Kod vermeyeceksen ne diye bu kadar dil döktün demeyin, sıkıntıdan öylesine yazdım, zaten hiç bağlantı falan uğraşamayacağım, hızlı hızlı yazdım geçtim, adı üstünde günlük değil mi bu?

27 Ağustos 2012 Pazartesi

Dojo (CoffeeScript) projesini MVC yapısına uygun geliştirmek

Önceki yazıda aşağıdaki uygulamayı Nginx+Tornado Server ile sunmak için kullandığım dosyaları paylaşmıştım. Daha önce de basit bir panele bir açılır düğme yerleştirmiştim. Şimdi işi biraz büyütüp MVC havası katıyorum ve bir form oluşturuyorum.


Dojo (CoffeeScript) projesini Nginx ve Tornado Server ile sunmak

Önceki yazıda basit bir panele bir açılır düğme yerleştirmiştim. Artık projeyi Nginx+Tornado Server sunucusundan çalıştırıyorum.

10 Haziran 2012 Pazar

Dojo ( ve CoffeeScript ) ile basit bir panel oluşturma ve yerleşim örneği

Önceki yazıda Merhaba dojo demiştim, şimdi temel yerleşim nesnelerini kullanarak küçük bir şeyler yapıyorum.

Yapmak istediğim sayfanın en üstünde Gnome3 paneline benzer bir panel oluşturup panelin soluna uygulama menülerini sağına da kullanıcı girişi için açılır bir düğme eklemek, hepsi bu.

2 Haziran 2012 Cumartesi

Dojo ve CoffeeScript ile Merhaba Dünya

DojoDojo Vakfı tarafından geliştirilen ve pek çok açık kaynaklı projenin en temel taşı olan güçlü bir Javascript (JS) araç takımı. Coffescript (CS) ise benim gibi JS'nin iğrenç söz diziminden nefret edenlerin kolay anlaşılır JS yazmasını sağlayan minik bir derleyici.

21 Mart 2009 Cumartesi

Django sunucusunda statik dosyalar ve Dojo



Biliyorsunuz django'nun "manage.py runserver" komutuyla çalıştırdığımız basit bir Http sunucusu var, bu sunucu ile test ettiğim küçük uygulamama bir CSS dosyası yüklemek istedim. Css dosyasını proje dizinine kaydettim her zamanki gibi yüklenmesini bekledim;


< style type="text/css">
@import "style.css";
</style>


Ancak django sunucusunun root dizini projenin olduğu dizin değilmiş. Yani Css icin HTTP 400 kodu aldım :) Bu CSS'yi ancak şöyle yükleyebildim;

Önce projenin settings.py dosyasına şunu ekledim;


STATIC_DOC_ROOT = '/home/user/django/projectname'


Sonra urls.py dosyasını açıp settings'i import edip, sunucudan /root adında sanal bir dizini servis etmesini ve bunu STATIC_DOC_ROOT değişkenindeki adrese bağlamasını istedim.


from django.conf import settings
.
.
.
urlpatterns = patterns('',
(r'^root/(?P.*)$', 'django.views.static.serve',
{'document_root': settings.STATIC_DOC_ROOT}),
.
.
.


Sonra da css dosyasını @import "/root/style.css" ile yükleyebildim.

Aslında derdim Css dosyası değil Dojo idi. Dojo javascript ile yazılmış bir Web araç takımı. Dojo'yu projenin dizinine açıp önce içindeki css temasına bir bakayım demiştim sadece. Css'yi yukarıdaki gibi halledince zaten Dojo'yu da aynı şekilde yükleyebildim.


<script type="text/javascript"
src="/root/js/dojo-release-1.2.3/dojo/dojo.js"
djConfig="parseOnLoad:true, isDebug:true"></script>


Dojo AFL ve BSD lisansı ile geliştirilen hafif ve hızlı bir araç takımı, henüz tam olarak inceleyemedim ama sitesindeki örneklere bakılırsa çok basit, şık ve kullanışlı görünüyor.

Ancak günün sürprizi şu oldu; "Nalet olsun içimdeki daldan dala atlayıp durma hevesine" diye söylenip bunlar için gogıllama yaparken bir de karşıma dojango diye bir şey çıkmasın mı! Allahım bu dünyanın çivisi çıkmış demek geldi içimden :)