16.05.2010

Programla ya da Programlan, 2010, Douglas Rushkoff


Programla ya da Programlan, 2010, Douglas Rushkoff

Videodan notlar (YouTube izleyemiyorsanız alıcınızın ayarıyla oynayın):

Dünyaya baktığımda, ekonomiye baktığımda, dine baktığımda, devlete baktığımda, şirketlere baktığımda toplumun mutlak kod ile yazılım ile yürütülmeye çalışıldığını görüyorum.

Yazılım ile bilgisayar yazılımından değil sosyal yazılımdan bahsediyorum. Bu yazılımlar geçmişten kalan artık hatırlamadığımız düzenin yazılımlarıdır. Bugünkü şartlarla hiçbir alakaları yoktur.

Eğer bugünkü kullandığımız bilgisayar programlarının nasıl çalıştığını anlayamazsak, bu geçmişten gelen yazılımların nasıl çalıştığını anlamak için bir şansımız da olamaz. Bugün kullandığımız programlar geçmişin yazılımları üzerine kurulmuştur: merkez bankasının üzerine kurulmuştur, ekonominin üzerine kurulmuştur, mevcut devlet yapısının üzerine kurulmuştur. Bugünkü programlar o eski sistemlerin hala ayakta kalmasına yardımcı olur.

Bu yazının geri kalanını okuyun »

27.04.2010

Tomato, Joshua Davis, Karsten Schmidt (toxi) Atölyeleri

Kurye Uluslararası Video Festivali kapsamında ilginizi çekebilecek 3 isim 3 atölye:

Joshua Davis

Flash web tasarımcısı ve grafik sanatçısı Joshua Davis 9 Mayıs tarihinde Bahçeşehir Üniversitesi Beşiktaş Kampüsü’nde gerçekleştireceği workshop kapsamında kendi geliştirdiği Hype programıyla kısa sürelerde flash tasarım yapmayı öğretecek.
Atölye sayfası: HYPE: Accelerating Creativity in ActionScript3

TOMATO

Elektronik müzik grubu Underworld’den Rick Smith ve Karl Hyde’ın 1990’ların başında kurduğu sanat ve tasarım topluluğu TOMATO 14-16 Mayıs tarihleri arasında Bahçeşehir Ünivesitesi’nde üç tam gün boyunca workshop gerçekleştirecek. TOMATO ekibinden Simon Taylor ve Dylan Kendle, uygulamalı olarak kısa film çekimi üzerine eğitim verecek.
Atölye sayfası: Kısa Film Çekimi ve Kurgusu

Karsten Schmidt (toxi)

Londra’da Postspectacular stüdyosunu açtığından beri MoMA’dan (“Design and Elastic Mind“) Victoria and Albert Museum’a (“DECODE“) pek çok klasik ve modern sanat ortamında işlerini gösteren ve Avrupa’da son dönemlerin en yaratıcı tasarımcılarından biri olarak gösterilen Karsten Schmidt (aka. toxi) 15 Mayıs‘da Bahçeşehir Üniversitesi Beşiktaş Kampüsü’nde gerçekleştireceği workshop dahilinde motion graphics, tasarım ve kodun yaratıcı bir araç olarak kullanımı konularında eğitim verecektir.
Atölye sayfası: KOD Yaratıcı bir araç

İşlemsel sanat ve tasarımla ilgileniyorsanız toxi’nin çalışmasına özellikle katılmanızı tavsiye ederim.

Başvuru: Yer sayısı kısıtlı olduğundan atölyelere erken katılım gerekmektedir. İlgililerin info@kuryevideo.org adresinden kayıt yaptırmalarını rica ediyorlar.

* Görsel Karsten Schmidt’in DECODE sergisi için yaptığı Recode isimli işinden bir görüntü.

23.08.2009

Dokunmatik Web

Firefox’ın yeni multitouch özelliği dokunmatik ekranlarda web tarayıcı kullanılabilmesini sağlıyor. Mozilla programcılarından Felipe Gomes‘un geliştirdiği Firefox multitouch’un demosunda tarayıcı içinde çalışan uygulamalarla çok noktadan dokunarak etkileşim kurulabildiğini görüyoruz. Böylece web artık sadece tıklanabilir bir “sayfa” değil parmaklanabilir bir medyum’a dönüşüyor.

Bu yazının geri kalanını okuyun »

24.03.2009

24 Mart Ada Lovelace Günü Kutlu Olsun!

24 Mart günü tüm dünyada ama özellikle blogosferde Lovelace kontesi, Augusta Ada King’in onuruna Ada Lovelace günü olarak kutlanıyor. Bu gün sayesinde kadınların teknolojiye erişimini sergileyen ve teşvik eden yazılar, kutlamalar örgütlenerek teknoloji alanında cinsiyetçi bir tablonun önüne geçilmeye çalışılıyor.
Ada Lovelace
Siyasette temsiliyet için kota, iş olanaklarında eşitlik için pozitif ayrımcılık gibi önlemler gerektiren cinsiyetçilik konusunda, teknoloji dünyasında düşünülen çözümlerden biri de bu kutlama olmuş.

Organizasyonu düzenleyenler, kadınların, erkeklere göre hemcinslerinin başarılarından ve rol modellerinden daha çok etkilenebildikleri sonucunu gösteren bir psikoloji araştırmasından yola çıkmışlar. Böylece her 24 Mart Ada Lovelace gününde, teknolojiyle ilişkili sektörlerde başarılı olan kadınların öyküleri anlatılarak daha çok kadının “erkek işi” deyip geçmek yerine kendine güvenmesi hedefleniyor.

Ada’nın hikayesi

1815 yılında Londra’da doğan Ada Lovelace 19. yüzyılın ortalarında yaptığı çalışmaları nedeniyle, bugün dünyanın ilk programcısı olarak kabul ediliyor. O günlerde dokuma için kullanılan bir analitik hesap makinesini geliştiren Babbage ve makineye dair çalışmalar yayınlayan İtalyan matematikçi Menabrea’nın yazılarını İngilizce’ye çeviren Ada, çevirilerine ek olarak, tartışmaya konu olan yöntemleri geliştirerek makine ile Bernoulli sayılarını hesaplamayı başarıyor.

Buna ek olarak, makinenin gerçek sınırlarını başarıyla öngörerek, bilgisayarların hesaplanabilir yöntemlerle müzik bestelemek için kullanılabileceğini 1850′lerde iddia etmiş bir kuramcı olarak da hatırlanıyor.

Teknoloji dünyasında kadınlar

Bugün, http://findingada.com adresinden tanıtılan Ada Lovelace Günü kampanyasıyla ilgili haberler, twitter‘dan da takip edilebiliyor.

Binbeşyüzden fazla blog yazarı, kutlamalara katılarak kadınların teknoloji alanında var olmalarını özendirmeyi, kutlamayı planlıyor. Biz de kutlamalara aynı şekilde katılmak için listeye kimleri ekleyebiliriz?

Benim, özellikle Ada Gününe daha yakışır şekilde programcılık alanından vermek istediğim örnekler var.

Tam iki yıl önce, görev aldığım bir özgür yazılım projesinin ürünü olan Pardus‘un, kız çocuklar için pozitif ayrımcılık olanağı sağlamayı hedefleyen bir projeye nasıl güç verdiğini anlatan bir yazı yazmıştım.

LinuxChix.org

İki yıl sonrayrı bir topluluk çalışması yürütüldüğüne tanık olmasak da, Türkiye’deki özgür yazılım ekosisteminde de artık seslerini yükselten ve varlıklarını duyuran kadın programcıların sayısının arttığını görebiliyoruz… Pınar Yanardağ, Seval Ünver gibi insanlar çoğalıyorlar.

Dünya ölçeğinde baktığımızda, özgür yazılım dünyasındaki kadınların sekiz yıldır örgütlendiği ve Ada Günü ile paralel amaçlarla çalışmalar yürüttüğü bir topluluk göze çarpıyor: Linuxchix.

Örnekler çoğaltılabilir, belki böylece bilgisayara ürkek şekilde bakan, teknolojiye erkek kardeşinden fırsat bulup erişmekte geç kalmış tüm kız çocukları ilham alabilecekleri “ablaları” ile tanışıp bir adım daha atarlar… Çünkü bugün 24 Mart, yaşasın Ada Lovelace günü!

28.02.2009

Bilgi Görselleştirmesi Nedir?

Her yıl bir önceki yıla göre daha çok bilgi ortaya çıkıyor. Bilişim teknolojilerinin gelişimi ile bu bilgileri toparlamak, depolamak, ve işlemek giderek kolaylaşıyor ve yaygınlaşıyor. Bilgi görselleştirmesi bu karmaşayı anlamlandıracak tekniklerin çalışması olarak bilgisayar bilimleri ve grafik tasarımı alanlarının birleşiminden oluşuyor.

Bilgi görselleştirmesi alanında doktora yapmış ender tasarımcılardan Ben Fry MIT’de “İşlemsel Bilgi Görselleştirmesi” başlığıyla tezini tamamladı 2006 yazında (PDF).  Başındaki işlemsel eki klasik sayıları gösteren chart, graph, veya Tufte benzeri ele emeği vb. grafik işlerden yolunu ayırıyor. Bu konulardan tarih ve altyapı kısmında bahsediyor ve sadece bilgisayar programlayarak bilgi görselleştirme işine odaklanıyor. Fry bilgi görselleştirme işini belli adımlara böler ve bu adımlar arasındaki ilişkileri anlatır:

  1. topla (“acquire”)
  2. ayrıştır (“parse”)
  3. süz (“filter”)
  4. incele (“mine”)
  5. göster (“represent”)
  6. düzelt (“refine”)
  7. etkileş (“interact”)

benfry-visualizing-data-bookBilgi görselleştirmesi yaparken sık sık bu adımlar arasında gidip geliniyor, yemek yapar gibi belli bir lezzete anlayışa kıvama ulaşmaya çalışıyoruz. Bilgi görselleştirmesi sonucunda bir anda anlaşılamaycak kadar karmaşık sistemler görünür ve dolayısıyla tartışılabilir hale geliyor.

Bu kısa yazıyı da yaklaşık iki yıl sonra taslaklarda buldum ve tekrar düzenledim. Bu arada Fry’ın tezi O’Reilly’den “Visualizating Data” adıyla kitap olarak yayınlandı.

28.02.2009

Internet'in Üç Platformu

Internet üzerinde 3 çeşit platform vardır” diye yazmıştı ilk web tarayıcısının mimarlarından Marc Andreessen bir buçuk yıl kadar önce. Aktif bir girişimci yatırımcı programcı olan Andreessen beyaz yaka sosyal ağ platformu Ning.com’u büyütmekle meşguldü. Bununla uğraşırken ortaya koyduğu Internet platformları gözlemi günümüzün üretim biçimlerini anlamak için önemli çatı oluşturuyor.

Günümüzde bir web servisi sadece servis değil, aynı zamanda üzerinde dışarıdan uygulamaların çalışabildiği bir platform. Programlanabilir bir sistem. Servisin belirli özellikleri API (“Application Programming Interface”) yoluyla açık tutuluyor. Ayrıntılarına burada girmiycem, basitçe API bir web servisine programatik, yani başka programlardan erişim sağlıyor. Web servisinin sahipleri dışında birileri servisi kullanan başka uygulamalar geliştirebiliyor. Mesela Facebook’da bir zombie oyunu, bir gelişmiş poke uygulaması, veya profilinize bakanları görme kutusu bunlara örnek. Bu uygulamları Facebook değil mesela Kaliforniya’da bir lise öğrencisi, Filipinler’de bir memur, veya Türkiye’de bir web ajansı geliştiriyor.

Internet’de bulunan platformların 3 çeşit olduğunu söylüyor Andreessen, özetle şöyle:

1. Erişim API

Uygulama platformdan veri okur platforma veri yazar, ve sadece kendi web adresinde yaşar. Tüm işletme geliştiriciye ait. Örnek: Flickr, Delicious, Twitter ve bunları dışardan kullanan uygulamalar.

2. Eklenti API

Uygulama veri okuma yazma yanında, platformdan erişilebilir. Uygulama kendi web adresinde değil platform içinde gömülü kullanılablir. Yine tüm işletme geliştiriciye ait. Gösterim kontrolü platforma ait. Örnek Facebook ve üzerinde çalışan uygulamalar.

3. Canlı ortam

Uygulama tamamiyle platformda çalışıyor. Geliştirici uygulamayı geliştirdikten sonra kodu platforma yüklüyor ve hemen hiç bir işletme kaynağı harcamıyor.  Örnek: Ning, Salesforce, SecondLife, Amazon EC2 S3, Google App Engine, Akamai Edge.

İlkinden sonuncusuna doğru platfom sahibinin hem sorumlulukları artıyor hem geliştiricinin emeklerini sömürme kapasitesi artıyor.

Bu yazıyı bir buçuk yıl kadar önce yazmaya başlamış bırakmıştım, şimdi rafdan alıp toparladım. Bugün artık bu üç platform tipinden ayrılmış yeni yaklaşımlar var. Serbest pazar ve rekabet bu son saydığımız canlı platform türünün DNA’sını değiştirerek paralı servis olmaya zorladı. Artık parayla alınıp satılan “cloud computing” servisleri kullanır olduk.

20.11.2008

Open Sound Control ile Processing – Pure Data Haberleşmesi

Yeni Formlar: Reaktif Müzik yazısında konu Pure Data‘dan (PD) açılmışken, işlemsel ses ve müzik konusunda oldukça kuvvetli olan bu gerçek-zamanlı grafiksel programlama ortamını, şahsen grafik ve video işleme konusunda daha doğrudan kontrol sağladığını düşündüğüm Processing ile haberleştirmenin ve bu iki alemin güçlerini birleştirmenin yolunu gösteren bir yazı yazmaya karar verdim. Burada vereceğim örneği elbette sadece Processing veya sadece Pure Data (pd-extended paketinin içinde gelen veya PD’ye ayrıca ekleyebileceğiniz OSCx ve GEM kütüphanelerini kullanmak suretiyle) ile yapmak da mümkün ama daha karmaşık uygulamalar için (mesela ağ üzerinden, değişik platformlarda yazılmış programların entegrasyonu) bir örnek olma amacı taşıyor.

Hem PD hem de Processing (Python, Ruby, Java, Microsoft.Net, vvvvMaxMSPLiveAPI, OSCulator vb. sayısız ortam gibi) Open Sound Control – OSC protokolünü destekliyor. OSC, bilgisayarlar, synthesizer’lar ve bilimum çeşit multimedya cihazını birbirine bağlamayı kolaylaştırmak için geliştirilmiş, modern ağ teknolojileri ile hatasız, birlikte çalışan, esnek sistemler kurmak için birebir bir protokol. Bunun yanında ağlar üzerinde çalıştığı icin MIDI’nin sunamadığı yeni türden etkileşimlere de (İnternet üzerinden gerçek-zamanlı etkileşim, değişik veri tiplerini ve donanımları birbirine bağlamak gibi) imkan sağlıyor.

İşin Processing ayağından başlayalım:

Önce oscP5 kütüphanesini indirmek gerekiyor. Normalde yapılanın aksine, sıkıştırılmış dosyaları açtıktan sonra libraries klasörüne değil, sketches klasörü içine atıyoruz. Bu kütüphane birçok örnekle gelse de, buradaki amacımız için aşağıdaki gibi sade bir kod yazabiliriz:

import oscP5.*;
import netP5.*;

OscP5 oscP5;
NetAddress myRemoteLocation;

void setup() {
size(400,200);
frameRate(25);
stroke(255);
oscP5 = new OscP5(this,12000);
myRemoteLocation = new NetAddress("127.0.0.1",9999);
}

void draw() {
background(0);
}

void mouseDragged() {
line(mouseX, 0, mouseX, height);

OscMessage msg1 = new OscMessage("/msg1");
OscMessage msg2 = new OscMessage("/msg2");

msg1.add(map(mouseX, 0, width, 69, 100));
msg2.add(50);

oscP5.send(msg2, myRemoteLocation);
oscP5.send(msg1, myRemoteLocation);
}

void mouseReleased(){
OscMessage msg2 = new OscMessage("/msg2");
msg2.add(0);
oscP5.send(msg2, myRemoteLocation);
}

Bu örnek tek bilgisayarda lokal olarak çalışıyor ama IP adresini değiştirerek ağ üzerinde çalışır hale getirmek de olası. Burada 9999 numaralı porta iki mesaj yolluyoruz. Birincisi mouse’un x koordinatını okuyarak 69 ile 100 arasında bir değer ile eşleştiriyor. Daha sonra PD, bu değerleri MIDI girişi olarak alıp frekansa çevirecek.

Bu program çalışırken PD’yi açıp oynamaya başlayabiliriz. Herşeyin düzgün çalışabilmesi için PD_extended–>Preferences–>Startup içinde “oscx”in olması gerekiyor. Pure Data ile haşır neşir olmamış ama bu vesileyle girişmeye niyetlenmiş olan varsa buradan ve buradan başlayabilirler. Temel nesneler dışında dumpOSC ve OSCroute nesnelerini kullanıyoruz ve 9999 no’lu portu dinleyip Processing’den gelen mouse değerine göre frekansı değişen bir kosinüs dalgası yaratıyoruz:

PD kodunu da aşağıya ekleyip ilk eğitsel-öğretsel yazımı burada noktalıyorum:

Diğer yönde, PD’den Processing’e mesaj göndererek, Processing ekranına daire veya kare çizdiren örnek kod:

Düğümküme’de yayımlanan ilgili yazılar:

03.11.2008

Dijital Kebap

Matt Pyke, Dijital Kebap (2005)

Herkes için sonsuza kadar” sergisinin tanıtımı için Londra’lı tasarımcı Matt Pyke bu kısa animasyonu yapmıştı. Maxalot Galerisi tarafından 2005 yılında Barcelona’da düzenlenen sergide Pyke’ın son dört yıldır sürdürdüğü Universal Everything stüdyosundan işler gösterilmişti. Eski Designers Republic üyesi Pyke programlama ve animasyon tekniklerini birleştirerek dijital ve kinetik kolaj çalışıyor. Bu yukarıda gördüğünüz Dijital Kebap animasyonu benim en tuttuğum işlerinden. Video’nun sesi Freefarm 3 boyutlu modelleme Design-OS tarafından yapılmış.

16.10.2008

Küresel Krizde Reklam Kazancına Alternatif Premium Gelir

Küresel krizde son kurtarılacaklar listesinin sonunda tanıtım, yani reklam var. Internet reklamları da bundan payını alıyor. Reklam gelirlerinin düşmesi üzerine web servisleri ellerini çabuk tutup premium iş modellerine geçmeye başladılar. Premium (ya da Freemium) normalde kullandığın bedava bir ürünün daha iyisini bir miktar ücret karşılığı satmak / kullanmak oluyor. Genelde verimlilik arttırıcı web araçları böyle satılıyor. Yapılacaklar listesi, proje yönetimi, kişisel müşteri hizmetleri gibi araçlar bunlara bariz örnekler. Sadece genel iş hayatı programları değil müzik veya programlama gibi daha niş alanlarda da premium ürünler görüyoruz.

Berlin merkezli web servisi SoundCloud üç gün önce Pro hesap sistemine geçerek premium satışlara başladı (yukarıda görülen paketler). SoundCloud elektronik müzik yapanların parçalarını paylaştığı bir ortam. Fiyatlandırma müzik tutma kapasitesine göre belirleniyor. Müzik dosyalarınızı yükleyip arkadaşlarınızla özel veya açık olarak paylaşabiliyorsunuz. Kim ne kadar dinlemiş, beğenmiş beğenmemiş, ne demiş istatistiklerden görebiliyorsunuz. SoundCloud kendi yaptığınız müzik için hem dağıtım kanalı hem de detaylı istatistikler sağlıyor. Ayrıca SoundCloud Flash müzik çalıcısında bloglarda sık sık kullanılan örneklerinden farklı olarak dinlediğiniz bir parçanın içine –girişine, ortasına, 35inci saniyesine– yorum yazabiliyor ve başkalarının yazdıklarını görebiliyorsunuz. Facebook app olarak da kullanılan bu oynatıcı özellikle kendi müziğini yapan DJler için çok detaylı yorum almaya ve yorum yazmaya yarıyor.

Github kod deposu servisi programcılar için adeta bir cennet 2.0. Linus Torvalds’ın bizzat kendi geliştirdiği dağıtık kod sürüm sistemi Git üzerine kurulu bu web servisi kolaylaştırırken sevindirir, eğlendirirken düşündürür özelliklere sahip. Açık kaynaklı projeleri bedava barındırırken özel projeleri para karşılığı barındırıyorlar. Projelerin büyüklüklerine göre de gizlilik ve yer kapasitesine göre premium fiyatlar değişiyor.

Premium iş modeli iyi tasarlanmış ürünler için geçerli bir model. Sıradan özellikli ürünlerde çalışmayacaktır. Şu anda yaşadığımız küresel ekonomik kriz sırasında reklam gibi bağımlı bir düzene bağımsız bir alternatif olabilir.

İlgili yazılar

10.08.2008

Google App Engine Üzerinden YouTube'a Nasıl Erişilir?

Bu yazıda Google App Engine kullanarak Türkiye’den erişilebilen YouTube proxy uygulaması nasıl oluşturulur, onu öğreneceğiz. Bu, ucuz reklamlar ve ‘ninja hakaretlerinin’ yer almadığı, sıfır maliyetli ve Google engellenmediği sürece varlığını sürdürecek basit bir uygulama olacak. İki tane çalışan YouTube uygulamasını şuradan (evet Türkiye’den de) görebilirsiniz:

Yazıya “Meet the Sniper” videosu eşliğinde devam ediyoruz :). App Engine YouTube uygulamanın nasıl çalıştığını merak ediyorsanız, okumaya devam edin.

Google App Engine Nedir?

Bildiğiniz gibi Google bir süre önce çok şık bir hareket yaptı, ve muhteşem altyapısının bazı parçalarını Google App Engine adıyla paketleyerek kamuoyuna sundu.

Google App Engine, Google mimarisinden faydalanarak web uygulamaları geliştirmenizi ve yayınlamanızı sağlayan bir platform. Üstelik bedava.

Bu sayede mesela kullanıcı zaten Google üyesi ise, bu kişiye ait kullanıcı adı, email gibi bilgileri kullanabiliyorsunuz, hatta Google Query Language (GQL) ile de erişebildiğiniz bir veritabanınız, imaj işlemleri yapabilmenizi sağlayan Images API‘ınız ve üstüne mail falan da yollamanızı sağlayan Mail API cabası.

Google App Engine sayesinde Google’ın hem CPU gücünden, hem depolama gücünden, etinden sütünden herşeyinden faydalanabilirsiniz. Bu henüz ilk sürüm, ileride bunu bir çeşit iş modeli haline getireceklerine kuşku yok. Hatta Users API ile uğraşırken, Google’ın internetin “kullanıcı veritabanı” olması gerektiğine bile karar verdim. Kesinlikle kullanıcı işini bu adamlar halletmeli. Bırakalım e-mailleri falan Google toplasın.

Google App Engine, arkasında Guido Von Rossum gibi bir idolün de bulunduğu, ‘internetin framework’ü olabilecek potansiyelde, Google ile birlikte nefes alan bir platform :).

Daha detaylı bilgi ve dökümantasyon için, http://code.google.com/appengine/docs/ adresine gözatın.

Hangi programlama dilleri destekleniyor

App Engine servisi şimdilik sadece Python ile kodlayabiliyorsunuz, ama Ruby, PHP gibi dilleri de implemente etmeleri an meselesi. (Bunun gibi bir Ruby on Rails servisine de heroku.com adresinden ulaşabilirsiniz.)

Görülen o ki, bir takım limitler koymuşlar. Mesela boyutu 1mb den fazla olan HTTP responselar bloklanıyor, günlük 2GB trafik limitiniz ve toplam 500MB dosya depolama izniniz var. Yine de appengine küçük ve orta ölçekli işler için uygun. Hatta büyük ölçekli işlerde de yardımcı bir backend olabilir.

App Engine YouTube uygulamsına başlamadan önce

Bu yazı zaten ‘derdinizi anlatacak kadar’ Python bildiğinizi ve bir appengine uygulaması kurmuş ve çalıştırmış olduğunuzu varsayarak yazıldı. Eğer bu konularda hiç bir fikriniz yoksa, önce Google App Engine indirin. Sonra 10 adımda nasıl appengine uygulaması çalıştırılır öğrenin ve buraya dönün. Bu işlem yaklaşık 20 dakikanızı alacak.

Python’a bir kaç saat içinde güzel bir başlangıç yapmak isterseniz, bedava dağıtılan “A Byte of Python” kitabına göz atabilirsiniz.

Başlıyoruz…

Öncelikle uygulamanıza ait dosyaları koyacağınız klasörü oluşturun, benimkinin adı “itube” olacak.

Başlangıç için bu itube klasörü altında “app.yaml” adinda bir dosya oluşturuyorum, bu dosya içerisinde uygulamam ile ilgili bir takım önemli bilgileri ve URL Handler ları tanımlıyorum.

app.yaml

application: itube
version: 1
runtime: python
api_version: 1

handlers:
- url: /assets
  static_dir: assets
- url: /.*
  script: itube.py

application kismini kendi uygulamanızın ID si ile değiştirin. /assets klasörü altındaki dosyalar statik dosyalar, geri kalan herşey itube.py dosyasının kontrolünde olacak.

Bakalım itube.py ne yapıyor.

itube.py

from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.api import urlfetch
from urlparse import urlparse
import re

class MainPage(webapp.RequestHandler):

    def get(self):

        self.response.headers['Content-Type'] = 'text/html'

        baseurl = "http://www.youtube.com"
        requrl = urlparse(self.request.url)
        url = baseurl + requrl.path + "?" + requrl.query

        result = urlfetch.fetch(url, allow_truncated=True)

        if result.status_code == 200:
            s = result.content

            # regex işlemlerini şimdilik sadece video izleme sayfasında yapıyoruz
            if requrl.path == '/watch':

                # Video dosyasının gerçek adresini bulabilmek için uygulanan işlem
                yt_video_id = re.search("\"video_id\": \"((.*))\", \"l\"", result.content).group(1)
                yt_t = re.search("\"t\": \"((.*))\", \"hl\"", result.content).group(1)
                # Bu bilgi "assets/base.js" dosyasında, flashVars olarak atanmak üzere JS olarak da tanımlanıyor
                # swfArgs tanımlanmazsa SWF Object hata veriyor
                s = re.sub("swfArgs(.*)", "swfArgs = {};\nvar ytVideoId = '"+yt_video_id+"';\nvar ytT = '"+yt_t+"';\n", s)

                # YouTube'un kendi playerına harici FLV dosyalarını oynattıramayacağımız için,
                # YouTube playerı yerine kendi playerımızı yüklüyoruz
                s = re.sub("swfUrl(.*)", "swfUrl = 'http://itube.appspot.com/assets/player.swf';", s)

                # Aynı işlemi JS dosyası için de yapıyoruz ki, bu dosya üzerinde rahatlıkla hareket edebilelim
                # YouTube çoğu işlemi Ajax numaralar ile yapıyor, login falan yapılabilmesi için Javascript'e ince ayar çekmek gerekecek
                s = re.sub("type=\"text/javascript\" src=\"(.*)\"></","type=\"text/javascript\" src=\"http://itube.appspot.com/assets/base.js\"></", s)

            # Sonucu göster
            self.response.out.write(s)
        else:
            print 'ofmg'

application = webapp.WSGIApplication([('/', MainPage), ('/.*', MainPage)], debug=True)

def main():
    run_wsgi_app(application)

if __name__ == "__main__":
    main()

Önemli detayları kod üzerinde yorumlarla yazdım, itube.py dosyası kısaca, kendisine gelen tüm GET requestlerini aynı şekilde YouTube’a sorgulatıp sonucu dönüyor. Bu sırada eğer video izleme sayfasındaysak, gelen sonuç biraz değişiyor.

Buraya kadar yaptığımız işlem sonucunda, text/html dosyaları appengine üzerinden nasıl proksifiye edeceğimizi gördük. Eğer uygulamayı appengine üzerinde çalıştırırsanız, videoları izleyemediğinizi göreceksiniz :( Bunun sebebi YouTube’un video playerının dosyaları youtube.com üzerinden açmaya çalışması. Elimizde bu flash playerın açık kodu olmadığı için gerekli kısımları değiştiremiyoruz. O halde yeni bir player yazmak durumundayız. İşimizi görecek kadar özelliği olan bir flex video player kodunu itube kaynak kodunda assets klasörü altında bulabilirsiniz (assets/player.mxml)

Flash Video Oynatıcı nasıl çalışıyor?

Bu dosyayı incelerseniz FLV dosyalarının başka bir proxy sitesinden çekildiğini göreceksiniz. Bu aşamada böyle bir proxy sitesi desteği almak gerekiyordu. Zira appengine’ın limitlerinden bahsetmiştik. Appengine üzerinden video/flv dosyalar da indirmek mümkün, ama bu dosyaları YouTube’dan request edecek methodun çalışma süresi 10 sn olarak kısıtlanmış, eğer 10 sn içinde dosyayı alamazsa hata veriyor. 10 sn içinde alsa bile response limit 1048kb. Yani 1Mb ın üstünde videoları bu şekilde indirmek mümkün değil. Belki bir takım yöntemleri var, ama uygulamanın da en azından biraz kalıcı olmasını istediğimden video dosyalarının yükünü bir proxye aktaracağım.

Proxy nasıl dağıtık çalışıyor?

Bunun için tek bir proxy sitesini hedef almak yerine, genel olarak kullanılan bir “Proxy sitesi oluşturma sistemi” ni kurban seçmek daha akıllıca olurdu. Bu günlerde Glype adında PHP ile yazılmış sevimli bir proxy sitesi yapma uygulamasıyla tanıştım. Glype ile oluşturulmuş hakkaten çok-çok fazla proxy sitesi var mı bilemiyorum, ama bunların bir listesi var.

player.mxml dosyasında görecekleriniz bunlardan ibaret. Bu dosya aynı zamanda SWF derlenmiş olarak kaynak kod içerisinde bulunabilir (assets/player.swf)

Yeni video oynatıcımızı derledikten sonra, sıra bunu doğru değerlerle sayfaya yerleştirmeye geldi. Bunun için YouTube’un base javascript dosyasında bazı değişiklikler yapmak gerekiyor. Bu dosyayı daha iyi kontrol edebilmek için, daha önce kaydettim ve kaynak kod da “assets/base.js” altında bulunabilir. Orjinal dosya ile tek farkı 1575. satırdan başlayan writeMoviePlayer() fonksiyonu. Bu fonksiyonu, video player ile uyumlu olsun ve FLV dosyasını bulabilmek için gerekli bilgileri sağlasın diye şu şekilde değiştirdim:

function writeMoviePlayer(player_div,force){
var fo = new SWFObject(swfUrl,”movie_player”,”480″,”385″,”7″,”#000000″);
fo.addParam(‘flashvars’,'ytVideoId=’+ytVideoId+’&ytT=’+ytT);
fo.addParam(“allowfullscreen”, “true”);
player_written=fo.write(player_div);
return fo;
}

Gördüğünüz gibi bu işlemi de yaparken, YouTube’un SWFObject‘ inden faydalanmış olduk.

Uygulamayı nasıl çalıştıracaksınız?

Tüm bu aşamaları atlattıysanız, uygulamanızı appengine’e yüklediğinizde YouTube izleyebileceksiniz.

Henüz oldukça eksiği var, mesela POST requestlerine hiç yanıt vermiyor, bu yüzden Login falan olunamıyor. Ama Users API ile de login olma olasılığı var gibi. Hatta sırf YouTube’a özel bir API çıkarırlar diye düşünüyorum. Ajax fonksiyonların adam akıllı çalışabilmesi bir takım düzenlemeler yapılması gerekiyor. Bazı videolarda HTML yapısı da değişiyor, ona bakmak gerek.

Bana sadece “videoları aratayım bulayım ve izleyeyim” yettiği için, bir süre bu kadarıyla yetineceğim.

App Engine YouTube uygulaması kaynak kodu

Geliştirmek isterseniz kaynak koda http://code.google.com/p/itube-appengine/ adresinden ulaşabilirsiniz.

Eğer böyle bir işe kalkışırsanız bu başlığa bir yorum sallayarak, beni de gelişmelerden, isteklerden haberdar ederseniz sevinirim.

http://sansursensin.com/watch?v=hkb3r9filcM

İyi seyirler :)

Konuyla ilgili önceden düğümküme’de yazılanları hatırlayalım: