Transcript
Page 1: Mutant Web Applications

Mutant Web UygulamalarıAzer Koçulu

http://azer.kodfabrik.com

Page 2: Mutant Web Applications

Sunum İçeriği• Teknik İnceleme

o Cloudo ve Firebug Lite nasıl geliştirildi?o DOM Tekniklerio Veri taşıma yöntemleri

Page 3: Mutant Web Applications

• Python ve Cometo Comet isteği nasıl oluşturulur?o Server nasıl yanıt vermeli?o CherryPy ile Stream örneği

Page 4: Mutant Web Applications

• Geleceğin Browser Teknolojilerio HTML5o Javascript 2o Tamari, IronPython&IronRuby ve ScreamingMonkey

Page 5: Mutant Web Applications

Cloudo

Page 6: Mutant Web Applications

Cloudo• Web tabanlı DDE (Distributed

Desktop Environment) uygulamasıdır.

• İsveç'te yaşayan Hakan Bilgin ve Selim Çotal geliştiriyor.

• Geçtiğimiz hafta ikinci Alpha sürümü yayınlandı.

Page 7: Mutant Web Applications

• Cloudo, daha verimli kod yazmayı sağlayan extend.js adlı bir javascript kütüphanesinin üzerine kuruludur.

• Bu kütüphanenin temel özelliklerinden biri, browser'ın native class'ları üzerinde düzenlemeler yaparak eksikleri gidermektir.

Page 8: Mutant Web Applications

• Cloudo'nun veri transferlerini xdbc.js adlı ikinci kütüphane sağlıyor.

• xdbc.js server'dan gelen XML veriyle XSL belgesinin önyüzde işlenmesini sağlar.

• Bu yöntemle arayüz oluşturmak, klasik DOM ağacı oluşturma tekniğine oranla birkaç kat hızlıdır.

Page 9: Mutant Web Applications

Firebug Lite

Page 10: Mutant Web Applications

• Firebug Lite 1.2, geçen nisan ayında çıkan pi.debugger'ın geliştirilmiş ve görsel olarak Firebug'a benzetilmiş yeni halidir.

• 25 Temmuzda Steve Souders'ın OSCON'da tanıtmasıyla release edildi.

• Bookmarklet olarak kullanılabiliyor.

Page 11: Mutant Web Applications

• IPhone'da çalışıyor.• Konsol,Inspector,HTML/CSS/

Script/DOM Explorer ve bir XHR Monitor aracını içeriyor.

• Browserlar kodun yürütüldüğü thread'e müdahale edilmesine izin verdiğinde, breakpoint, error indicator vb. araçları da içerecek.

Page 12: Mutant Web Applications

• Firebug Lite, pi.js adlı kütüphanenin üzerinde geliştirildi.

• Bu kütüphanenin temel niteliği, web tabanlı yazılım geliştirmek için tasarlanmasıdır.

• Şu an tamamlanmamış ta olsa, pi.kodfabrik.com adresinde dökümanları bulunuyor.

Page 13: Mutant Web Applications

• FBLite 1.2'nin Dojo kütüphanesine eklenmesi için Mike Wilcox Firebug takımına katıldı.

• FBLite'ın eklendiği kütüphaneler, doğal olarak Pi kütüphanesini de içerecek.

Page 14: Mutant Web Applications

• FBLite "firebug" adında bir hash'in içinde çalışır:

var firebug = { version:[1.2,20080725] };

• Arayüz pi.element ile oluşturulur: var myButton = new pi.element("button"). attribute.addClass("MyButton"). environment.addStyle({ "color":"#000", "background":"green" }). update("Click Me"). event.addListener("click",function(){ alert("Hello World!"); }). insert(document.body)

gh

Page 15: Mutant Web Applications

• Arayüzü stilize eden CSS dosyası da pi.element ile açılır:

document.getElementsByTagName("head")[0].appendChild( new pi.element("link"). attribute.set("rel","stylesheet"). attribute.set("href","http://foo.bar.css"). element )

• CSS ve Script bölümlerinde, dosya kaynaklarını çağırmak için pi.xhr kullanılır:

>>> trace(pi.xhr.get("firebug.js").responseText) "var firebug....."

Page 16: Mutant Web Applications

• Firebug Lite'ın yeni versiyonu önümüzdeki hafta çıkacak.

• Bu versiyonda CSS ve DOM property'lerinin arayüz üzerinde düzenlenmesi, pencere yüksekliğinin arayüzde veya komut satırında değiştirilmesi mümkün olacak.

Page 17: Mutant Web Applications

Python ve Comet

Page 18: Mutant Web Applications

• Server'ın gelen isteği bekletmesi ve parça parça cevap vermesi zaman aralığı kısa periyodik veri transferleri yapmayı sağlar. Bu tekniğe Comet adı verilir.

• Neredeyse tüm browserlar farklı yöntemlerle bu tekniği destekler.

Gecko/Webkit: Multipart XMLHttpRequest Trident(MSIE,Maxthon vb): HTMLFile&Iframe Opera: Serverside Event Listener

Page 19: Mutant Web Applications

• SSEL ideal comet tekniğidir. event-source elementiyle stream yapılır:

JAVASCRIPTvar el = document.createElement("event-source");el.setAttribute("src","/read");document.body.appendChild(el);el.addEventListener("NewStream",function(_eventArgs){ trace(_eventArgs.servertime);},false);

PSEUDOCODE (Response)header "application/x-dom-event-stream"for i from 0 to 15 write "Event: NewStream\n" write "servertime: %i"%server_time flush sleep 1000

Page 20: Mutant Web Applications

• XHR yönteminde klasik XMLHttpRequest isteği gönderilir.

• Server isteği bekletirken readyState 3'tür, responseText değiştiğinde callback çalışır.

• IFrame tekniği tüm browserlarda çalışır ama throbber hareketli görünür.

Page 21: Mutant Web Applications

• Bu problemi aşmak için IFrame, HTMLFile adlı ActiveX objesiyle açılan sanal pencereye yerleştirilir.

JAVASCRIPTvar win = new ActiveX("HTMLFile");win.open();win.write("<html><body></body></html>");win.close();win.body.innerHTML="<iframe src='/read' />"function read(_serverTime){ trace(_serverTime) }

PSEUDOCODE (Response) header "text/html" for i from 0 to 15 write "<script>parent.parentWindow.read(%i)</script>"%server_time flush sleep 1000

Page 22: Mutant Web Applications

• Browserların bugünkü imkanlarıyla comet tekniği biraz karmaşık ve sorunlu.

• Bu yüzden pek çok kütüphane ve framework türedi, dwr, Orbited, dojo.cometd gibi.

• pi.comet bunlardan biri, ilk sürümü mart ayında çıkmıştı.

* http://ajaxian.com/archives/picomet-simple-comet-library

Page 23: Mutant Web Applications

• Basitçe, cross browser comet kanalı açmayı ve bu kanala veri göndermeyi sağlıyor;

JAVASCRIPTpi.comet.get('/read',function(_response){ trace(_response);})

PSEUDOCODE (Response)import PICometresponse = PIComet(parameter("PICometMethod"),parameter("PICometName"))header "Content-type: %s"%response.contentTypefor i from 0 to 15 response.push(""%server_time) flush sleep 1000

Page 24: Mutant Web Applications

CherryPy• CherryPy Python'la yazılmış bir

HTTP framework'üdür.• Basit ve güçlü uygulama sunucusu

arayanlar için iyi bir seçenek.• Hello World;

import cherrypyclass HelloWorld(object): # @cherrypy.expose def index(self): return "Hello World!" index.exposed = True

cherrypy.quickstart(HelloWorld())

Page 25: Mutant Web Applications

import cherrypy,sys,timeclass helloWorld(object): @cherrypy.expose def index: def content(): for i in range(10): yield "<h1>%i</h1>"%i sys.stdout.flush() time.sleep(1) return content() expose._cp_config = { 'response.stream':True } cherrypy.quickstart(helloWorld())

• "yield" operatörüyle de çıktı verilebildiği için kolayca stream yapmayı sağlar;

Page 26: Mutant Web Applications

• Multi-threaded serverlar comet için sağlıklı altyapı sağlayamıyor.

• CherryPy, Orbited, Twisted, Cogen gibi asenkron IO sağlayan yazılımlarla uyumludur.

• Bu sayede comet uygula artırdığı trafik yükünün altından kalkılabilinir.

Page 27: Mutant Web Applications

Geleceğin Browser Teknolojileri

Page 28: Mutant Web Applications

HTML5• Yeni elementler arasında

canvas,video, audio gibi elementler var.

• Canvas elementi browserda grafik programlama yapmayı sağlıyor.

• Canvas tabanlı birkaç uygulama:

http://www.nihilogic.dk/labs/wolf/ http://www.nihilogic.dk/labs/chess/

Page 29: Mutant Web Applications

• Web uygulamalarının kullanıcının makinesinde veri saklamasını sağlayan storage ve database api'leri geliştiriliyor.

• globalStorage ve sessionStorage Obje'leri kalıcı veri tutmayı sağlar.

>>> sessionStorage.foo = "hello world">>> globalStorage[document.domain].foo = 'hello world'kapat/ac>>> sessionStorage.foo==undefinedtrue>>> globalStorage[document.domain].foo'hello world'

Page 30: Mutant Web Applications

• DOM Storage tekniğini Firefox ve Internet Explorer 8 destekliyor.

• Internet Explorer'ın daha eski versiyonlarında kalıcı veri tutmak için pi.storage veya persist.js kullanılabilir.

Page 31: Mutant Web Applications

• Safari ve Opera'nın bugünkü sürümleri DOM storage'ı desteklemiyor ama ileride destekleyecekleri kesin.

• Database api'sini henüz sadece Webkit destekliyor;

var database = openDatabase("foo");database.transaction(function(connection){ connection.executeSql("create table ?",["foo"],callback,onerror); });

Page 32: Mutant Web Applications

• HTML5'e yeni eklenen özelliklerden biri de WebSocket.

• Browserların çeşitli sunucu-istemcilerle real-time veri gönderip almasını sağlayacak.

• Henüz herhangi bir browser desteklemiyor.

Page 33: Mutant Web Applications

Javascript 2• Javascript 2 ile Ecmascript 4'e geçiş

yapılacak.Bazı önemli yenilikler;• Class:

class Layer { var name, _x, _y; function get x(){ return _x; } function set x(value){ _x = value+"px"; }};

var foo = new Layer;foo.x=10;trace(foo.x) // "10px"

Page 34: Mutant Web Applications

• Tür tanımlama:

• Paket yönetimi:

• Namespace:

var x:int = 10, name:String = "Azer";{ "x":int, "y":string }function(x:int, y:string){// ...};

>>> import pi.util.*>>> pi.util.Random(0,255)123

>>> import pi.util.*>>> use namespace pi.util>>> Random(0,255)213

Page 35: Mutant Web Applications

• Javascript 2, 2009'da Mozilla 2'nin çıkmasıyla kullanılmaya başlanacak.

• Mozilla Javascript 2 için Tamarin VM üzerinde çalışmaya başladı.

• Mozilla'nın IronPython ve IronRubyadlı iki projesi daha var.• Python ve Ruby dilleriyle DHTML

programlama mümkün olacak.

Page 36: Mutant Web Applications

Problem; hızlı gelişen teknolojinin karşısında Internet Explorer'ın çok

geriden gelmesi.

Page 37: Mutant Web Applications

Çözüm!

Page 38: Mutant Web Applications

ScreamingMonkeyhttp://wiki.mozilla.org/Tamarin:ScreamingMonkey

Page 39: Mutant Web Applications

Mozilla, Internet Explorer'ın Javascript 2 yorumlamasını

sağlayacak.

Page 40: Mutant Web Applications

Sorular?


Top Related