25/02/2011
Tüm dünyadaki etkinliklerden kolayca haberdar olabileceğiniz ücretsiz bir servis olan
4biryanda benim de kurucularından olduğum
4Primes tarafından geliştiriliyor. Kendi ihtiyaçlarımızdan yola çıkarak geliştirdiğimiz bu servise vakit buldukça yeni özellikler de ekliyoruz. Son eklediğimiz özellik ise etkinlikler ve yorumlar içerisinde verilen bağlantıların önizlemelerinin o bağlantının üzerine gelindiğinde gösterilmesi oldu. Böylece 4biryanda kullanıcıları bağlantıya tıklamadan gidilecek sayfa hakkında fikir edinebiliyorlar. Aşağıda bazı sitelerin önizlemeleri bulunuyor. Özelliği test etmek isterseniz
4biryanda.com'a üye girişi yaptıktan sonra bir etkinliğe tıklayıp etkinlik ayrıntıları sayfasında yer alan herhangi bir bağlantının üzerine gelmeniz yeterli. Bu yazımda söz konusu özelliğin altında yatan teknolojiyi paylaşmak istiyorum.
Bu hizmetin aslan payı
Björn Höhrmann tarafından geliştirilen
CutyCapt uygulamasına ait.
Qt ve WebKit gibi dev kütüphanelere bağımlılığı olan bu küçücük uygulama platform bağımsız olarak web sayfalarının ekran görüntülerinin çeşitli vektör ve bitmap formatlarda(SVG, PDF, PS, PNG, JPEG, TIFF, GIF ve BMP) kaydedilebilmesini sağlıyor.
Ben uygulamayı kaynak koddan derleyerek Ubuntu 10.10 64bit üzerinde çalıştırdım. Flash animasyonlar da dahil olmak üzere çok başarılı sonuçlar aldım. Ubuntu üzerinde kaynak kodu indirip derleyebilmek için yalnızca aşağıdaki komutlar yeterli oluyor.
[code]
% sudo apt-get install subversion libqt4-webkit libqt4-dev g++
% svn co https://cutycapt.svn.sourceforge.net/svnroot/cutycapt
% cd cutycapt/CutyCapt
% qmake
% make
% ./CutyCapt --url=http://www.4biryanda.com --out=4biryanda.png
[/code]
Orijinal halinde CutyCapt, istenen sayfanın tamamının ekran görüntüsünü gerçek boyutunda oluşturuyor. 4biryanda içerisinde bizim kullanmak istediğimiz önizleme boyutu 202x152 olduğundan uygulamanın kaynak kodunda küçük bir değişiklik yapmam gerekti. Yaptığım küçük değişiklik ile oluşturulan önizlemeler önce eni 202 pixel olacak ve en boy oranı korunacak şekilde ölçekleniyor. Oluşan resim, boyu 152 pixel olacak şekilde kesiliyor. Elde edilen ekran görüntüsü, kalitesi 80 olacak şekilde JPEG formatında kaydediliyor. Tüm bunlar için CutyCapt.cpp dosyasının 287. satırını aşağıda olduğu gibi değiştirmek yeterli oldu. Değerlerin uygulamaya parametre olarak verilmesi daha güzel olurdu ancak bu değişiklik benim için yeterli olduğu için daha fazla uğraşmaya gerek duymadım.
[cc lang="c"]
image.scaledToWidth(202, Qt::SmoothTransformation).copy(0, 0, 202, 152).save(mOutput, "jpeg", 80);
[/cc]
CutyCapt önizleme oluşturabilmek için Xserver'a ihtiyaç duyuyor. Siz de bizim gibi sunucularınızda Xserver çalıştırmıyorsanız CutyCapt'i aşağıdaki gibi
Xvfb ile kullanabilirsiniz. Yukarıda verdiğim başarılı önizlemeleri oluşturabilmek için gerekli olan CutyCapt parametrelerini de bu komutta görebilirsiniz.
[code]
% xvfb-run --server-args="-screen 0, 1024x768x24" ./CutyCapt --url=http://www.4biryanda.com --out=4biryanda.jpg --plugins=on --min-height=768 --min-width=1024 --delay=4000
[/code]
Son olarak şunu da belirtmek istiyorum: önizleme kodunu 4biryanda.com içerisine gömmedik.
SOA mimarisine uygun şekilde
Play! framework ile ayrı bir RESTful servis yazarak tüm uygulamalarımızda kullanabileceğimiz bir bağlantı önizleme servisi elde ettik. Örneğin gelecekte
profil.im servisimize de aynı özelliği eklemek istersek bu iş için 5 dakika yeterli olacaktır.
Follow me on Twitter