"bir yazılımcının not defteri.."

2 Aralık 2011 Cuma

WebGL, Bulut ve Web in Geleceği

WebGL ile ilk tanışmam google maps te bazı büyük yapıların realtime render edilerek ekrana çizildiği haberi üzerine oldu. Ziyaret ettiğimde şok olmuştum. Yapılar yaklaşıyor, uzaklaşıyor, her seferinde 3D çiziliyor ama arka tarafta flash ya da benzeri başka birşey kullanılmıyordu. Peki Google bunu nasıl yapıyor? sorusu uzun süre kafamı meşgul etmişti; ki bugünkü makalemizin konusu da budur.

WebGL i ve nereden geldiğini,, ona neden ihtiyaç duyulduğunu anlamamız için sanırım biraz maziye gözatmamız gerek. Hatırlar mısınız,, bilenleriniz bilir, eskiden PC lere “IBM Bilgisayar” denilirdi :) Sonraları bu tabir “IBM uyumlu bilgisayar” şekline dönüştü ise de platform çeşitliliği daha o yıllarda bile (neredeyse icadından beri) söz konusu olmuştur. Ki bu çeşitlilik giderek azalmadığı gibi artmıştır da.. Günümüzde bilgisayarlar IBM ve MAC uyumlu diye ikiye ayrılmıyor; çünkü şu an en az 5 temel uyumluluk platformu sayabilirim. Kaldıki IBM uyumlu windows lar bile :) versiyon farklılıklarına göre kendi aralarında farklılıklar göster miyor mu? Mesela Windows 7 uyumlu bir program Windows Server da çalışmayabilir? ya da XP de; örnekleri artırmak mümkün.. Sonuç? Platform çeşitliliği.. Temel Sorun da bu platfornlar arasında ortak bir iletişim dili üretmek olagelmiştir. Ve bunun için de ortaya web (www) (world wide web) çıkmıştır. Web tüm dünyayı kapsayacak bir global ağ olduğuna göre tüm bilgisayarların anlayacağı ortak bir iletişim dili olmalıydı. Öyle birşey olmalıydı ki platformu ne olursa olsun sorun çıkmamalıydı.

İşte bu yüzden web in dili düz metindir ör : Html, Css, Javascript gibi scriptler hangi platform olursa olsun istemciye aynı formatta yollanır. Ve aynı kurallar çerçevesinde tarayıcılar tarafından görüntülenir. Bu, web in global yapısının bir zorunluluğudur.

Bu zaten bildiğiniz anı tazelemeyi yaptım ki web deki her zaman olagelen “görsellik” sorununa vurgu yapabilmek için. Evet her zaman görsellik web de sorun olmuştur. Çünkü yollanan sadece düz metin olduğundan html standardı belli kalıpların dışındaki bir görselliği ifade etmede yeterli olmamıştır!. Html nin her yeni versiyonunda hep daha fazla görsellik sunmak, varolan sınırları biraz daha yıkabilmek için bir çaba görülmüşse de...bana sorarsanız hep birşeyler eksik kalmış; ve en basit görsel numaraların dahi yapımı çok zor (karmaşık scriptlerle) olmuştur. Yine de günümüzde herşeyin giderek daha çok web ortamına kaydığını ve desktop uygulamaların pabucunun dama atıldığını görüyoruz. Ve bu tirendin güçlenerek sürmeye devam edeceği kesin. Bunun tek nedeni web sayfalarının görsel ifade yeteneklerinin normal desktop yazılımların arayüzlerini ikinci sırada bırakacak kadar gelişmesi değildir. Aynı zamanda web,, bilgisayar kullanımını ve kullanıcı eğilimlerini de değiştirmeye başlamıştır. Yani insanlar sadece masasının başında değil,, 7x24 bu global ağa bağlı kalmak istemektedirler. Dahası olay artık bildiğimiz klasik web sayfaları olayını çoktan aşmış her türlü günlük iş, bilgi, otomasyon, en önemlisi de İLETİŞİM webden karşılanır duruma gelmiştir. Ekranda ille de bir web sayfasının olup olmaması hiç önemli değil; geleceğin dünyası web sunucuları ve onlara bağlı istemcilerden ibaret olacaktır.

Konuyu tekrar görselliğe ve görselliğin gerektiği arayüz içeren web sayfalarına getirelim. Standart metinlerin yorumlanışı görselliği ifade etmede hep güç olduğundan bu konuda ilk farklı girişimi flash yapmıştır. Daha doğrusu denemiştir. Flash aslında ikinci deneme idi; ilki adını hatırlamadığım başka bir firmanın başarısız girişimi idi. Macromedia buradaki ışlığı görüp web de görsel çığır açan teknolojiyi yaygınlaştırmayı başaran ilk firmadır. Peki flash bunu nasıl yapmıştı?? Bütün istemcilere o istemciye özel bir oynatıcı motor, bir “plugin” programı yükleyerek.... Evet bu mantığın arkasında her istemciye o istemcinin sistemine özel bir oynatıcı motor program kurdurmak vardı. Bu eklentiyi kurmayan flash oynatamıyordu. Ancak sorun oydu ki : Bu motor browser in normal HTML yorumlayıcısından tamamen bağımsız,, bu yüzden de flash uygulamaları sayfanın in bir kısmında kendine ayrı hükümet olarak çalışan ve çalıştığı kutunun dışını hiçbir şekilde umursamayan,, görüntüsü güzel ancak “SINIRLI” web idi. Yani webdeki diğer herşey ile tamamen alakasız sınırlı bir görsel şov idi sadece. İsteseniz de içeriye müdahale edemezsiniz. İlk başlarda hiç dinamik değil iken Adobe un olağan üstü çabası ile XML desteği eklenmesi ile bir miktar dinamik hale geldi ise de bana göre şizorfenik hasta gibi içinde çalıştığı web kutusunun dışına hala kayıtsız ve umarsızdır. Bu yönü ile aslında web in doğasına uygun değildi. En kötüsünü en sona sakladım : Steve Jobs flash desteğini iPhone ları kilitlediği için istemiyordu ama flash motoru aslında (sık olmasa bile) windows ları da kilitlemektedir. Bu motorun her yeni versiyonda sık sık güncellenmesi gerektiğini ise zaten biliyorsunuz...

Üslubumdan da anlaşılacağı üzere en parlak günlerinde dahi flash ı sevmedim. Web e uygun da görmedim. Geleceğin web sayfalarında bir yeri olmadığını da düşünüyorum ayrıca. Birazdan olayı bağlayınca daha net anlayacaksınız.

İlerleyen yıllarda flash gibi bir girişim de microsoft dan gelmiştir : silverlight!! Flash ın parlak günlerine bakıp daha iyisini yapabileceğini düşünmesinden midir bilinmez,, microsoft silverlight ı üretti. Mantık gene aynı: Tüm istemcilere onu oynatacak bir motor program yüklenmesi gerekiyordu. Windows ların yaygunlığını düşündüğünüzde bu MS için pek de sorun olmadı... Üstelik flash tan farkı: çevresi ile daha fazla bağlantılı, etkileşimli, daha dinamik ve programlanabilir bir teknoloji üretilmişti. (Teknik detaya fazla girmeyeceğim. İstemediğiniz kadar silverlight dökümanı her tarafta mevcut.)

Ancak HTML 5 in çıkışı ile her ikisi de (flash, silverlight) hüsrana uğramıştır. Çünkü HTML 5 ile küçümsenen script in görsel gücü artık o kadar arttı ki artık bu tür oynatıcı plug in lere hiç gerek kalmamıştır...

SilverLight şu sıralarda daha çok normal desktop ve Windows Phone uygulamalara arabirim yapmak için kullanılıyor. Aslında MS bunu HTML 5 ile de yapabilir. Ama ben de olsam koca projeyi çöpe atmazdım. Silverlight in da (flash a göre üstünlükleri olsa da) yine web ortamında bir geleceği olmadığını düşünüyorum.

Aynı şekilde Java başka her yerde istediği kadar marifetli olsun,, konu web sayfaları olduğunda benzer bir kaderi paylaşmıştır. Yani bir kutucuğun içinde kendi başına buyruk ve ayrık işler yapmıştır. Kısacası Java nın da yıldızı hiçbir zaman web ile barışmamıştır.

Yukarıda bahsettiğim girişimlerin web de ortaya çıkış nedeni az önce bahsettiğim gibi basit görsel numaraların dahi metinsel scrtiplerle zor yapılması idi. Ancak üstün gelen her zaman web in doğal yapısı oldu. Yani insanlar içi kuru bir görselliktense dinamik interaktif içeriği tercih etti.



Günümüzde ise zaten HTML 5 , CSS 3 ve JavaScript ile artık bu tür ek oynatıcı pluginlere hiç gerek kalmadan onların yapabildiği bütün görsellikler sunulmaktadır. Üstelik web in doğal yapısı bozulmadan interaktif etkileşimli bir ortamda bu görsellik olabilmektedir. Web deki bu gelişim gerçektende heycan verici değil mi?













Tam da bu noktada konu ile alakalı bir başka olayı gündeme getirmekte fayda var. Ne alakası var demeyin bağlayınca anlayacaksınız : BULUT....!! Son günlerde adını sıkça duymaya başladınız, ve sizi temin ederim giderek daha sık duyacaksınız. Bulut bulut bulut...nedir bu bulut? Bulut,, bilgisayar kullanım şeklindeki yeni ve modern bir yaklaşımdır. Klasik sistemlerde dosyalarınız bilgisayarlarınızda durur. Web, sadece gezinmek ve bilgi alıp vermek içindir. Bulutta ise Web Sunucusu zaten işletim sisteminin kendisidir! Tarayıcılarınız ise bu işletim sisteminin  arayüzüdür. Daha doğrusu web in dışında hiçbirşey yoktur!! Bütün dosyalarınız Sunucular üzerinde durur ve tüm işletim ortamı web ortamında gerçekleşir. Hiç şüpe yokki bunun en güzel ve en kapsamlı örneği Google in ChromeOS işletim sistemidir. %100 Bulut esasına dayalı bu sistemin gördükten sonra ve bugüne kadar yazılımlara ödediğimiz paralar için pişmanlıktan öte öfke bile  hissedebilirsiniz :) Web tabanlı bu araç setinde ihtiyacınız olan (Ofis paketi dahil) hemen her araç bulunmaktadır. Ve sürekli de geliştirilmektedir. Bu güzel girişim, Dünyanın bilgisayar kullanım eğilimlerinin kaydığı yönü çok iyi analiz etmiş Google in çok başarılı ve ilerigörüşlü bir çalışmasıdır. Gerçektende gelecekte tüm bilgisayar kullanım şeklinin tümüyle web tabanlı olacağını ve tümüyle Bulut sistemi esasına dayanacağına kuvvetli bir şekilde inanıyorum. Öyle bir zaman gelecek ki dosyaların her bilgisayarın kendi diskinde sakladığı dönemler şaka gibi anlatılabilir :) Bir düşünün... herşey sunucularda. Ve her zaman her yerde bu sunucularla (web ile) bağlısınız; ama telefonunuzla, ama saatinizle, ama gözlüğünüzdeki görüntüyü cama yansıtan bir mikro bilgisayar ile vs... Bilgiler gittiğiniz her yerde. Dosya taşıma derdi yok, virüs yok, windows göçtü / windows yavaşladı yok, formatlama yok... her zaman şahsi bilgileriniz dahası tüm WEB (!) yanınızda.... (bu arada windows yavaşlaması ya da göçmesi konusunda bir de “Apple Lion” u denemenizi öneririm :) )

Hazır buluttan konu açmışken bir anti parantez belirtelim : Apple özellikle de iPhone ve iPad kullanıcıları için kendi Bulut yazılımını üretti. Senkronizasyon yazılımı sayesinde tüm sistem Apple sunucularına aktarılabilmekte ve geri restore edilebilmektedir. Benzer ve şekilde Google da Android telefonlarında da bulut a dosya eşleştirme mevcuttur. Tüm bu olaylar arasında Microsoft nerededir ? bana sorarsanız MS in mayası Bulut yapısına pek uymuyor ve bence kendileri de bunun farkında. Ancak dünyanın değiştiğinin / değişeceğinin de farkındalar; ve bence istemeyerek (!) de olsa bazı girişimlerde bulunuyorlar: Windows Azure ya da Office 365 gibi çıkışlar bunun örneğidir. Hadi bir düzine teknik sebebi bir kenara bıraktım,, ücretsizi varken neden para ödeyesiniz ??? Bu yüzden sizlere Google Docs ve diğer Google servislerini şiddetle öneriyorum. Bu servisleri de detaylı olarak başka yazılarda incelemeyi düşünüyorum.

Şimdi konumuza dönelim:

Özetle : Bulut sistemlerin özü herşeyin tümüyle WEB ortamından çalışmasıdır. Dünya Bulut a hemen geçmeyecek elbette,, ben dahil hiçkimse klasik alışkanlıklarımızı öyle bir gecede bırakamayız. Ama bu konuya girdim ki gelecekte Web in kendisinin bir işletim sistemi olacağını,, yani neredeyse herşeyin web den işler hale geleceğini söylüyorum. Ve nihayetinde daha DA görsel ve marifetli web arabirimlerin ihtiyacı doğuyor buradan...


Peki web siteleri HTML 5 marifetlerinin dışında başka ne yapabilir? ne yapamaz? Bir bilgisayarda sadece bir web browser i olsa idi başka hiçbir program olmasa idi (ki ChromeBook böyle bir bilgisayardır) o bilgisayarın sadece neyi yapamayacağını söyleyebilrdik?? Evet... 3D oyunlar oynayamaz derdik değil mi ? :) daha doğrusu teknik bir dille : “3D uygulamalar çalışmaz” derdik. Şimdi içinizden biri çıkıp diyecekki ama ben her gün "internetten" QuakeLive oynuyorumm...  Evet ben de oynuyorum! Hem de her gün oynuyorum. Ve her seferinde önce browser içinden login oluyor ve browser içinden oyunu başlatıyorum. Ama lütfen artık anlayın ki QuakeLive ve onun gibi oyunlar BROWSER dan çalışmıyor!! Normal işletim sistemi programı olarak çalışıyor. İlk kurulum esnasında bigisayarımıza kurduğu ve sürekli de güncellemesini yaptığı program normal işletim sistemi programıdır. Sadece QuakeLive mi?  Unity3D ye ne demeli??  Bazı temiz kalpli arkadaşlar Unity3D nin doğrudan web sayfalarında çalıştığını idda ediyor :)) kendilerini temiz kalplerinden dolayı tebrik etmekle beraber Unity deki durumun da tıpkı QuakeLive deki gibi olduğunu söylüyorum. Yani işletim sisteminize özel bir program vasıtası ile oluyor tüm bunlar. Ve inanın bana siz Unity3D ile birşeyler yaptınız diye herkez makinesine o programı kurmak zorunda değil. Hele ki bu saatten sonra HİÇ DEĞİL...

Ve dahası,, bu tür plug in ile çalışan oyunlarda da sabahtan beri anlattığım aynı sorun vardır. Bir kutunun içinde çalışan  (tam ekran da çalışabilmeleri sizi yanıtmasın) sayfanın diğer kalanını umursamayan zombidirler. Kısaca bunlar da doğal web yapısını destekleyemezler...

Nihayet burada asıl konumuza gelmiş oluyoruz ki browserlara eklenen yeni teknoloji olan WebGL tam da bu sorunlara tümden çözüm olmaktadır. Yani gerçek 3D içerikli WEB SAYFALARI,, evet bildiğiniz normal web sayfaları, ama arkada hiçbir plugin ya da yardımcı program yok; ve tüm platformlarda geçerli olacak şekilde.. Tıpkı sıradan bir web sayfasını açar gibi,, basit bir Html - JavaScript içeriği ile gibi 3D görsellik!!  :) İşte WebGL bunu vermektedir....

Yani web sayfalarımızda tümüyle GERÇEK 3D grafikler oluşturulmakta ve bu grafikler hiçbir plugin ya da kurulan yama programla olmayıp DOĞAL HTML - JavaScript kodu ile olmaktadır. Peki bu doğallık üzerinde neden bu kadar ısrarla duruyorum sizce? Çünkü doğal web kodu ile çalışırsa web in tüm unsurları ile de tümleşik, etkileşimli hale gelir de ondan. Örneğin 3D uygulamanızın verileri bir web servisinden gelebilir, doğrudan veritabanlarına erişebilir ve her iki yönlü veri akışı real-time yapılabilir. Kısaca web her ne yapabiliyorsa 3D uygulama da tüm bu interaktif yeteneklere sahip olacak demektir! ve bu gerçekten de önemlidir...

WebGL 3D grafikleri üzerinde çalıştığı bilgisayarın ekran kartından faydalanarak oluşturmaktadır. eskiden elbette ki bu mümkün değildi. Yani Web browseri hiçbir şekilde kodların donanıma müdahale etmesine izin vermezdi. Bu yüzden web her zaman 2D olarak kalmıştı. Ama artık WebGL desteği olan bworserlar (Internet Explorer hariç hepsi) doğrudan bilgisayarın 3D kartını kullanarak 3D içerikleri üretiyorlar. Buna da “donanım hızlandırmalı 3D Web” diyoruz.

Yani WebGL aslında browserlara eklenen 3D kullanma yeteneğidir. Bu 3D yeteneğinin kazandırılması için browserlara OpenGL desteği eklenmiştir. Yani WebGL kodlarınız aslında OpenGL temeli üzerinde çalışmakta ve tüm bunlar browser in üzerinde doğal web ortamında olmaktadır.

Bu standardı oturtmak elbette ki kolay olmamıştır. 100 ün üzerindeki (Google, Apple, Mozilla, Opera, Sony, AMD, Ericsson, Nokia, Nvidia, Autodesk Adobe vs...) bilişim devi firma bu standardı yaratmak için bir araya gelmiş ve adına “Khronos Group” dedikleri bir toplulukta birlikte çalışmışlardır. Ve şu anki WebGL standardı böylelikle ortaya çıkımıştır. 

Microsoft ise bu birlikte yer almadığı gibi güvenlik ihlali gerekçesi ile başından beri bu olaya destek vermemektedir. Bunun bir anlamı da odur ki , webGL, InternetExplorer (IE) tarayıcılarında çalışmayacaktır. Ben microsoft un buradaki gerekçesinin güvenlik değil,, aslında çok daha farklı şeyler olduğunu düşünüyorum. Bence microsoft tamamiyle 3D destekli web sayfalarını istemiyor ! Çünkü böyle bir ortamda artık web sayfalarının yapamadığı hiçbirşey kalmayacak,, ve böylesine görsel web ortamında platform bağımlısı işletim sistemlerine ve de dolayısı ile windows lara olan bağımlılık ortadan tamamiyle kalkacaktır. Güvenlik ihlali bence sadece işin bahanesi idi yani.

Peki gerçekten güvenlik ihlali olabilir mi? Ya da en kötü ne olabilir biraz buna kafa yoralım. Microsoft diyor ki : oradaki JavaScript kodları doğrudan OpenGL katmanına erişiyor, o da doğruca ekran kartına erişiyor. Peki ekran kartına erişen hacker ne yapacak Allah aşkına?? kredi kartı bilgilerini mi çalacak? OpenGL ile çok çok makineyi kilitlemeye kalkabilir ve Khronos grup emin olun bu kilitlenmelere de önlem alıyor. Yani bir uygulama ekran kartını devre dışı bırakacak kadar yoğun erişim yapıyorsa browser o uygulamayı durdurabilir. Ben pek çok örnek denedim ekran donmasına rağmen browser penceresinden rahatlıkla sayfayı kapatabildim. Başka? daha ne yapılabilir bi müslüman çıksın bana izah etsin...... bitmedi...!! Sevgili microsoftumun ActiveX denen teknolojisi ile sorarım kaç sayısız makineye virüs bulaşmıştır? kaç sayısız makine bilgilerini çaldırmış hatta format yemiştir??  Zamanında IE den neden o kadar çok virüs bulaşıyordu sanıyorsunuz? Masum zannettiğiniz web sayfalarından gelen ActiveX kodları makinenin altından girip üstünden çıkıyordu. Öyle sadece ekran kartına falan da değil,, bu kodlar doğruca makinenin tamamına hakim oluyordu....

IE desteklemiyormuş.... Eskiden IE dünya genelinde %75 lik kullanım oranına sahipti ve eğer bir uygulama IE de çalışmıyorsa o proje doğrudan çöpe atılırdı. IE çoğu zaman web standartlarını ihlal etmesine rağmen tüm dünya onun kaprislerine katlanmak zorunda kalmıştır. Microsoft bu yaygınlık gücünü ne yazıkki başka firmalar ve onların yenilikçi teknolojileri ile “uğraşmak”, “rekabet etmek”, “yayılmasını engellemek” için kullanmıştır. Ama şimdi kimin umrunda?? :) MS yöneticilerinin istatistiklerden haberi yok galiba..? IE kullanım oranları aydan aya düşüş gösteriyor. Şimdilerde %45 oranında kullanıma sahip olsada bu rakama nerelerden düştüğünü düşünürseniz artık bu tür bir taktiğin işe yaramayacağı aşikardır. Zaman artık IE de çalışmıyorsa projeyi çöpe at zamanı değildir. Kullanıcılar artık bilinçlenmiştir. IE esareti yerine daha hızlı, tamamen özgür ve yenilikçi tarayıcıları tercih etmektedirler. Günümüzde böyle bir karar olsa olsa IE nin sonunu getirir.

Sözü çok uzattık,
şimdi biraz da teknik detay verip birkaç örnekle makalemizi tamamlayalım. WebGL, browserdaki OpenGL katmanına destek veriyor demiştik. Dolayısı ile webGL aslında openGL nin biraz daha sade halidir. Ve yazımı JavaScript ile yapılmaktadır. Eğer içinizde daha önceden openGL ile uğraşmış olanlarınız var ise çok kolaylıkla bu teknolojiye aşina olacaktır. Ya da benim gibi uğraşmamış olanlarınıza ise karışık gelebilir. Biraz içine girdim ve ciddi kavram kargaşasına kapıldım... :) Ama üzülmeyin onunda kolayı bulunmuş. webGL konusunun kısa zamanda çok ciddi popüler olması ile birlikte çok sayıda grup işleri daha da kolaylaştırıcı kütüphaneler üretmeye başlamışlar. Bunlar daha üst düzeyli ve sonuçta gene aynı webGL in daha da toparlanmış hali diyebiliriz. Ama bu konuda da şunu belirtmek lazım ki bir kütüphane ne kadar basite indirgenmiş ise o kadar sınırlayıcıdır. Ne kadar düşük seviyeli yani karmaşık, yani sisteme yakın ise o kadar zor ama o kadar da sizi özgür bırakıcıdır.

Yaptığım ilk aşamada gözüme iki kütüphane çarptı :

Bunlardan biri Three.js, diğeri de GLGE kütüphaneleri. Diğer bütün kütüphanelere gözatmak için : http://www.khronos.org/webgl/wiki/User_Contributions#Frameworks linkine gözatabilirsiniz. Bu linkte çok sayıda eylenceli örneklere de rastlayabilirsiniz.

Yakında buradan webGL kod örneklerimi ve de iPhone - Android gibi mobil sistemlere uygulanışı ile ilgili örnekleri paylaşacağım. O zamana dek şimdilik hoşçakalın :)

2 yorum:

Adsız dedi ki...

hocam mükemmel ötesi bir makale ellerine sağlık

Gökhan ZER dedi ki...

:)) teşekkürler beğenmenize çok sevindim..