Archive for the ‘yazılım geliştirme’ Category

Ebay ql.io projesini yayınladı

Tuesday, December 13th, 2011

Çok fazla açık kaynaklı projesi bulunmayan Ebay (https://www.ebayopensource.org/) ql.io projesi ile teknik anlamda beni etkileyen bir projeye imza atmış. ql.io nedir derseniz özetle istemci tarafından tek bir istek ile sunucu tarafında birden çok web servis isteğini birleştirilip dönebilme özelliği sunan bir yazılım. Arkaplanda nodejs (http://nodejs.org/) kullanıyor.

Daha kolay anlamak için örnek yapabiliriz. Web console (http://ql.io/console) açtıktan sonra rest servislerinizi bir veritabanı tablosu gibi tanıtıyoruz. Örnek olarak


-- A table to find products
create table eBay.FindProducts
on select get from "http://open.api.ebay.com/shopping?callname=FindProducts&appid={^apikey}&responseencoding=JSON&version=725&QueryKeywords={^QueryKeywords}&MaxEntries={max}&ProductSort=Popularity&AvailableItemsOnly=true&siteid={siteid}"
using defaults max = "5", apikey = "{config.eBay.apikey}", sideid = 0
resultset 'Product';

-- A table to get product details
create table eBay.ProductDetails
on select get from "http://open.api.ebay.com/shopping?callname=FindProducts&appid={^apikey}&responseencoding=JSON&version=725&siteid={siteid}&ProductID.type={^ProductType}&ProductID.Value={^ProductID}"
using defaults apikey = "{config.eBay.apikey}", sideid = 0
resultset 'Product';

-- A table to get product reviews
create table eBay.ProductReviews
on select get from "http://open.api.ebay.com/shopping?callname=FindReviewsAndGuides&ProductID.Value={#^ProductID}&ProductID.type={^ProductType}&appid={^apikey}&responseencoding=JSON&version=745&siteid={siteid}"
using defaults apikey = "{config.eBay.apikey}", sideid = 0;

Run ettiğimiz zaman bu servisler tablo olarak oluşuyor. (show tables diyerek görebilirsiniz). Daha sonra örnek bir istek yapıyoruz:

prodid = select ProductID[0].Value from eBay.FindProducts where
QueryKeywords = 'macbook pro';
details = select * from eBay.ProductDetails where
ProductID in ('{prodid}') and ProductType = 'Reference';
reviews = select * from eBay.ProductReviews where
ProductID in ('{prodid}') and ProductType = 'Reference';

return select d.ProductID[0].Value as id, d.Title as title,
d.ReviewCount as reviewCount, r.ReviewDetails.AverageRating as rating
from details as d, reviews as r
where d.ProductID[0].Value = r.ProductID.Value;

Çalıştırdığınız zaman arka planda servisler birbirini beklemeden çağırılıyor ve sonuç birleştirilerek size dönüyor.

Bence mutlaka incelenmesi gereken çok başarılı bir proje.

Detaylı bilgi:
http://ql.io/
http://www.ebaytechblog.com/2011/11/30/announcing-ql-io/

Apache Pig ile Veri İşleme

Monday, September 12th, 2011
Hadoop üzerindeki verileri işlemek amacıyla SQL syntax’ına benzer bir dil olan Apache Pig projesini inceliyorum. Örnek olarak log dosyalarındaki ip adreslerini gruplayarak gösteren bir Pig scripti yazdım, şöyle:

/**
* @author haqen
*/
register pig-utils.jar;
A = LOAD ‘error.log’ using com.haqen.pig.MyCustomLoader() AS (in: map[]);
B = FILTER A by in#’_ip’ is not null;
C = GROUP B by in#’_ip’;
D = FOREACH C GENERATE group, COUNT($1) as ip_count;
E = FILTER D BY ip_count > 1;
F = ORDER E BY ip_count DESC;
G = LIMIT F 30;
DUMP G;

Log’u parse etmek için kendi Loader’ımı yazdım. Bu yaştan sonra SQL öğreniyormuş gibi, öğrenmesi sıkıcı ama sonuç alınca keyifli oluyor. Buna alternatif olarak Hive projesi var, onu da kullanıyorum ancak Hive daha ziyade işlenmiş veri üzerinde analiz yapmaya yarıyor diye düşünüyorum. Pig ile ise Map Reduce yazamadan, Java ile uğraşmadan analiz yapabiliyorsunuz. İncelemeye devam edeceğim.

apache üzerinden statik dosyaları sunmak

Thursday, August 18th, 2011

Siteniz üzerindeki javascript, css ve imajlar gibi statik dosyaları daha hızlı sunmak için apache üzerinde çok kullanışlı modlar mevcut. Geliştirdiğim java uygulamasının tüm statik dosyalarını apache üzerinden ayrı bir subdomain üzerinden sunuyorum. Bu subdomainin altındaki .htaccess dosyasına aşağıdaki blogdaki ayarları girerek hem bu dosyaların sıkıştırılmasını sağlıyorum, hem de header expire parametresi girerek bunların uzun süre tekrar çekilmemesini sağlıyorum. .htaccess üzerinden bu ayarların yapabilmesi büyük nimet.

http://www.samaxes.com/2008/04/htaccess-gzip-and-cache-your-site-for-faster-loading-and-bandwidth-saving/

Bu sayede sayfanın yüklenmesinde inanılmaz bir hızlanma oluyor. Aslında statik dosyaları sunmak için apache’den daha hızlı web sunucular da var, ngnix veya lighttp gibi.

Jersey maven repository

Wednesday, June 29th, 2011
Uzun zamandır Jersey projesinin hangi maven reposunda olduğunu arar dururdum. Nihayet allahın belası repoyu buldum:
<repository>
<id>sonatype</id>
<url>http://repository.sonatype.org/content/groups/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
Ek: Allahın belası Jersey’in spring entegrasyonunun paket ismi de değişip com.sun.jersey.contribs olmuş. Vay arkadaş sürekli değiştirip durmayın şunu ya!

Kendi kendine, Git!

Tuesday, May 24th, 2011

Bilahare oturup bir Git reposu kuracağım, şuna bakmakta fayda var:

http://alexsotob.blogspot.com/2011/05/this-is-flash-of-pure-inspiration-mes-i.html