4 Mayıs 2015 Pazartesi

İstanbulun insanlıktan nasibini almamış park vakaları....

Türkiye'de park sorunu malum. Bunun en kolay çözümü telefon numaranı arabanın bir yerine tutturman. 

Oradan aranırsın. Ancak sürekli apartman zillerini çalma bu araba kimin abii muhabbetleri ise zamanla, hele gece yarısına doğru ve sonrası çekilmez oluyor.

Benim zilimi çalma cesaretini acil bir vakadan dolayı değil de bu araba kimin buraya girmemesi gerekiyor gibi salak, aptal ve bencilce düşüncelerin eseri olarak yorumladığımda daha da çekilmez bir hal alıyor.

Acil bir durum yok iken hangi haklı sebep ile bir kaç apartmandaki tüm daireleri gece 00:00 da ayağa kaldırıyorsun: "Şu plakalı araba veya şu renk şu marka araba sizin mi? Tanıyor musunuz?"
Doğal olarak evdeki herkesi ayağa kaldırıyorlar. Uyuyan çocuğunuz, hastanız olup olmadığını umursamadan bu yapıyor. 

Buna biraz aksi cevap verildiğinde ise haksız olmasına ve bunu bilmesine rağmen dayılanıp kavga çıkarmak ise olmazsa olmazlardan.


Dün akşam çıkan böyle bir salak olaydan dolayı bu Ülkeden insan tiksiniyor. Evet ülke diyorum. Hepimiz bu gemideyiz. Öyle ya da böyle bunun benzeri bir takım salakça bencillikleri bir şekilde içimizde taşıyoruz ne yazık ki. Kimi zaman istemesiniz de seçeneksizlikten bunu yapmak zorunda kalıyoruz. Ama bu yine de tiksinti duyumama engel olamıyor.

22 Şubat 2014 Cumartesi

Wowza (v 3.5.2) + HLS + wowzasessionid ile alakalı bir bug...

Siz ilginç bir bug dan bahsetmek isterim. Belki duymuşsunuzdur WozaMediaServer adında bir media server ı. Wowza son zamanların popüler sunucusu. Java tabanlı ve clear bir api dokümantasyonu ile istenilen modülleri yazabilmeniz kolay. Aktif bir forumu olduğundan oradan destek veya istediğiniz modül veya ayarları bulmanız bile mümkün.

Evet bug ımız wowza server 3.5.2 sürümü ile alakalı. Wowza’ya “uçanı kaçanı yakala” modülü yazıyorsunuz. Bu modül her isteği reject ediyor olsun. Siz de müşterilerinize bu uçanı kaçanı yakala modülünü överek işi almış olun.

Bir gün müşteriniz diyor ki; “uçanı kaçanı yakalayacaktınız ancak HLS’te http://xxxxx/playlist.m3u8?wowzasessionid=xxxxxxx ile gelince yayın izleniyor”. Allah allah diyorsunuz bu olmamalı diyorsunuz ve modülünüzü tekrardan gözden geçiriyorsunuz. Bir türlü sorunu çözmiyorsunuz… :)

Size Bug ile ilgili detayları vereyim; Application.xml’de, StreamType “liverepeater-edge”, HLS üzerinden yapılan isteklerde “http://xxxxxx/playlist.m3u8?wowzasessionid=xxxx” şeklinde olunca uçanı kaçanı yakalayan modül yakalamıyor ve yayın izleniyor…

Neyse detaylı bir analiz sonucunda şu durum ortaya çıkıyor: HLS isteğinde, daha önce uçanı kaçanı yakala modülünden geçip accept olmuş , yayını izleyen clientın id si ile , uçanı kaçanı yakala modülünün yakalaması gereken yerde http://xxxx/playlist.m3u8?wowzasessionid=yayınıizleyenwowzaclientid   ile giderseniz yayınız izleyebiliyorsunuz. :)

Bunun sebebi aslında wowza da bulunun listenerlar. Session create olunca wowza onHttpSessionCreate gibi bir listenerın fonksiyonunu çağırır. Ve o listener sizin için aslında modül çalışması demektir. Bir kere create olmuş client id ile giderseniz ne yazık ki bu fonksiyon bir daha tetiklenmiyor. Yani sadece uçanı kaçanı yakala modülü değil, hiçbir sizin yazdığınız modül çalışmıyor diyebiliriz. :)

Güzel haber 3.6.4 de bu giderilmiş…

Kaynaklar:
————————
1- http://wowza.com
2- http://www.wowza.com/forums/showthread.php?22807-onHTTPSessionCreate-does-not-trigger 

9 Şubat 2014 Pazar

Git ve maven üzerine...

İlk başlarda, alışıncaya kadar mavenin kullanılması zor gelebilir. Ancak alışıldıktan sonra, size kazandırdıklarına alışınca git gide beğeninizi kazanmaya başlıyor. Git gide derken bunun üzerine de git kullanıldığında ise demeyin keyfinize…

Git, gerçekten kullanışlı bir kod deposu yönetimi sunuyor. Ne yazık ki ona da alışırsanız svn hele ki cvs ye dönmek istemeyeceksiniz.

Mavenin en çok standart proje yapısı ve IDE’ye bağımlı olmayışı beni etkiledi. Bir maven projesini ister netbeansde ister eclipsede isterseniz notepadde açabilir ve yazmaya devam edebilirsiniz. Debug işlemi için bir IDE kullanmanızı şiddetle tavisye etsem de, kodları yazarken güçlü bir IDE’ye ihtiyacınız yok.

Maven ayrıca tüm bağımlılıkları yönettiğinden sadece kaynak kodunuza yoğunlaşabilirsiniz… 

Şimdilerde eğer bir proje geliştiriyorsanız ve birden çok geliştirici iseniz git-flow gerçekten güzel bir mantık size sunabilir. git-flow’un arkasındaki mantığı biraz maven’in hazır proje yapısına benzettim. Hoşuma gitti. Bence repolarda da bir standart ile çalışmak ve otomatize etmek alıştıktan sonra kolaylık sağlaycaktır.



git-flow için kaynaklar:
——————————————
1- http://nvie.com/posts/a-successful-git-branching-model/

2- https://www.atlassian.com/git/workflows#!workflow-gitflow

24 Ocak 2014 Cuma

Steve Jobs, uzmanlar ve ilerleme hakkında alakasız şeyler...

Steve Jobs gerçekten ne düşünüyordu bilemiyorum. Ama şu an okuduklarım arasında bazı hoşuma giden şeyler buldum.

Eskiden, hatta ara ara hala, bir şey istendiğinde teknik zorluklar dahilinde değerlendirip, olup olmayacağına karar veriyor, karar vermesem dahi bir bilgi paylaşımında bulunuyordum. İşte buna uzmanlık, tecrübe deniyor. Ancak bunun dezavantajları ise, o zaman ki teknolojik gelişmelerden, daha doğrusu bildiğin kadarıyla, bulduğun kadarıyla olan teknolojik gelişmelerden faydandığından, teknolojik olarak buna ulaşmak zor veya uzak görünüyorsa, böyle olmaz gibi fikirler beyan edebilirdim. Hala ederim … 

Sorun şu ki; eğer bu şekilde bulunduğu zamana ve teknolojiye takılıp kalınır ve onun savunucusu konumuna geçerseniz, bir uzman olarak, ilerleme nasıl olabilir?

Tabii bu tavırların avantaj ve dezavanjları, sebepleri var. Mesela üretimi yapabilecek o kudret yoksa doğal olarak yapılan örneklere geçmek, örnekler yok ise o anki yeteneklerim ile çözebilecek çözümüm var mı diye bakınmam gayet doğal.

Fakat beni cezbedense, bir hayal, bir istek bu müşterinin istediği de olabilir, onu gerçekleştirmek, o anki teknolojik durumda çözüm örneği olmasa bile çözmeye çalışmak, sonunda para kazanılırsa gayet iyi olur, ilerlemeyi getirebilecek bir şeydir. Ve beni heyecanlandırıyor nedendir bilinmez.

Steve amcanın yaptığı bu olsa gerek. Önce müşteri ve kendisinin istediği şeyleri, o anki teknolojik imkanlar ile zor veya olanaksız görünse de yapmak… Başarının getirisi ise sonunda bundan epey bir para kazanabilmek.


Alakasız olacak ama, kendime işçi olarka ünvan ararken; veri bilimcisi ya da uygulamalı matematikçi arasından hangisini seçsem diye düşünüyordum. Aslında hangisinin olduğunun bir önemi yok. Ancak son bir kaç fanatik veri bilimci tanımları ile bu kavramdan soğuduğumu söylemeliyim, tabii biraz da eğlencenin sınırlarını çizdiklerinden olabilir belki :) . Galiba uygulamalı matematik veya combiatronics bana daha cazip gelmeye başladı. Tabii epey bi emek gerekecek… her neyse…





Sır paylaşımı konusu hakkında


Şifreleme işlemeri bir süredir ilgimi çeksede, sır paylaşımı (secret sharing) olaylarına ilgimi çeken matamatik dünyası dergisi 2013-4 ocak sayısındaki “Sır Bölüştürmek” başlıklı bir kaç sayfalık yazı oldu.

Burada ilk önce basitçe şu soru soruluyordu: “Elimizde değerli bir nesne olsun ve bunu bir kasa içine yerleştirelim. Ancak taraflar birbirine güvenmiyor. Bu yüzden kasanın şifresini tarafların bilmemesi ve orada bulunmadıkları anda ise kasanın açılmamasının temin edilmesini istiyorlar” tabii biraz yorumlanmış hali bu diyelim.

Burada parçaların kasa şifresi hakkında bilgi vermeyecek şekilde parçalara ayrılmış olmasının temin edilmesi önemli.

Yazının devamını ve esas şeklini buradan okuyabilirsiniz. Bazı denklemleri HTML olarak yazmak, uğraşmak zor geldi...

Matematik dergisindeki orijinal yazı buradan okunabilir.

22 Ocak 2014 Çarşamba

Seçilen bir metriğin hızlı ve kolay olarak distinct count değerini alma


Elimizde bir örnek ile başlamak daha anlaşılır olacaktır. Problemimiz log dosyalarından okunan IP verilerinin distinct count işleminin yapılması, diğer bir tabir ile unique ip’lerin sayılması olsun.

Bu problem oluşturur mu diye sorabilirsiniz. Eğer onlarca sunucunuz var ve onların loglarından bu değeri olmaya kalkarsanız, burada yüz milyonlarca satır logdan bahsediyorum, her bir IP değerini tek tek elinizdeki distinct olarak tutuğunuz IP listeniz ile karşılaştıracaksınız demektir. Bu unique ip listesinin bir üst sınırı var mıdır? Varsa ne kadardır? 

Şimdi elimizde olan unique ip listesinin üst sınırını bulamasak da ne kadar hafızaya mal olabileceğini tahmin etmeye çalışalım. Örneğin 100M unique ip listesi oluşturabiliyoruz diyelim günde. Ve iki durumda bu ip değerini sakladığımı varsayalım; birincisi ip değerlerini STRING olsun, diğeri ise INTEGER olsun. Eğer STRING olarak saklayacak ise her ip değeri için “4x3 + 3” maximum karakter , “4x1 + 3” ise alabileceği minimum karakter sayısı olacaktır. Biz maximum değer üzerinden gidersek, bize her ip değeri için 15 karakter yani 15 byte değerinde hafızada yere mal olacaktır. 

100.000.000 x 15 = 1.5 x 10^9 byte edecektir. Bu da yaklaşık 1,40 GB hafıza alnına denk gelecektir.

Tabii bunların arasında bir ip değeri için 100M luk liste içinde var mıdır diye her defasında kontrol etmek ise ek olarak bir CPU maliyeti olarak karşınıza çıkacaktır.


Şimdi bir de her ip değerinin INTEGER olarak karşılığını bulduğumuzu ve onu kıyaslamak için sakladığımızı varsayalım. Burada integer 32-bit değerden oluşuyor ise 4 bytelık bir yer kaplayacaktır.
Buna göre bir ip adresi mininum veya maximumu gözetmeye gerek kalmadan 4 bytelık bir alanı kaplayacağını da söyleyebiliriz. String olarak saklamaktan daha iyi olduğu aşikar.

100.000.000 x 4 = 4 x 10^8  byte edecektir. Bu da 372 MB yer kaplayacak demek olacaktır. Şimdiden 3/4 oranında yerden kazandık. Ve CPU maliyetine de String değerine göre azalmış varsayabiliriz. 

Şimdi bunlar ilk akla gelen çözümler ve bu çözümlerin problemi üst sınırlarının kestirilememesi. Bu şu an bizim için bir problem oluşturmayabilir. Ama yinede işin içine daha zarif bir çözüm sokmak güzel olacaktır.

Üçüncü olarak ise BITMAP çözümüyle yapmaya çalışalım. Önce bunu nasıl yapacağız açıklayayım; elimizde hafıza alanı olsun ve bu hafıza alanına yalnızca 0 veya 1 değerleri yazabilelim. Yani sadece bir bit yazma hakkımız olsun. Ve bu hafıza alanını istediğimiz gibi genişletebilelim de. Şimdi ip lerin integer değerlerini hafıza alanındaki dizide sıra numarası gibi kullanalım. Ve o sıranumarasına denk gelen alanı 1 yapalım. Hepsi bu kadar. Elimizde her unique ip değeri için 1 bit artan bir şey olacaktır artık. 





Şimdi eğer aynı ip adresi elimizde var mı diye kontrol etmek de basitleşecektir. Eğer ip nin integer değeri sıra noyu (offset) gösteriyorsa, o sıra nodaki bit 1 ise var demektir. Yok ise 1 yapmamız yeterlidir. Ancak bunu kontrol etmemize bile gerek yok. Direk ve her seferinde 1 yapmak yeterli olacaktır. Bu CPU maliyetini de en aza indirecektir. 




Sonrasında ise unique ip sayısı elimizde 1 olan bitlerin sayısı kadar olacaktır. Hepsi bu kadar.

Burada sınır integer değeri olacaktır. en büyük ip değeri “255.255.255.255” olacaktır. Onun integer değeri ise 4294967295 dir ve 4294967295 adet bit demektir. Bu yaklaşık 500 MB hafıza demektir. Bundan daha fazla hafıza alanına ihtiyacınız olmayacaktır. 

Yani sitenizin trafiğinden bağımsız olarak, distinct count almak için 500MB bir ortak hafıza alanından 
daha büyük bir yere ihtiyaç olmadan böyle bir sayımı gerçekleştirebileceğiz.



Detaylar yine kullanıma göre değişecektir. Mesela bu değeri günlük tutarsanız, 500 MB / gün  şeklinde bir yere ihtiyacınız olacaktır. Bu öngörülebilir bir değerdir.


Java’da bu konuda yardım edebilecek bir sınıf ise mevcut. Adı ise Bitset . Burada bitset nesnesinde bir offset değerini yani sıranolu alanı 1 ya da 0 yapabilirsiniz. Sonrasonda ise cardinality() fonsiyonunu çağırdığınızda ise size 1 olan alanların sayısını yani istediğiniz sayıyı verecektir.


Burada ip değeri değilde herhangi bir metriği ölçebilirdik. Peki nasıl yapabilirdik bunu? Bir nesneye atadığımız bu değerin unique hashcode üretmesini ve her aynı değer için aynı hashcode değerini vermesini sağlayabilirsek, herhangi bir metriği distinct count yapabiliriz en az zahmet ve maliyetle…


NOT:
-------
Ayrıca doküman olarak da buradan görüntüleyebilir veya indirebilirsiniz.

Kaynaklar:
———————
1- http://highscalability.com/blog/2012/4/5/big-data-counting-how-to-count-a-billion-distinct-objects-us.html 
2- http://blog.getspool.com/2011/11/29/fast-easy-realtime-metrics-using-redis-bitmaps/ 
3- http://docs.oracle.com/javase/7/docs/api/java/util/BitSet.html

30 Mayıs 2013 Perşembe

Herkesin ağzında sakız: Girişimci olmak!

Evet son zamanlarda çok sık duymaya başladığımız girişimci olmak, girişimcilik...

Şu anki ortam, gerekli şarlar müsait olduğundan ve geneleksel üretim metodları haricinde yeni üretimlerinde pazarda değer oluşturabilmesiyle revaçta olsa gerek...

Doğal olarak ben de girişimci olmak istiyorum. Ancak kendi işimin kölesi durumunda kalmak istemediğim aşikar.

Hayatta kalmak için bir şeyler yapmak lazım. Şu anki düzende bunun için değişim araçlarına ya da aracına ihtiyaç duyduğum ise su götürmez. Ama bunu kazanırken hep ince bir çizgiyi kaçırıyorum galiba. Ne mi bu çizgi bilmiyorum. Belki de herkesin ayrı çizgileri vardır :P

Kodcu.com'dan Altuğ'un dediği gibi : "Ne kanban ne scrum; önemli olan disiplin ve tutkudur" ( biraz değiştirdim orijinali aşağıdadır. :) )


"Hiç bir metodoloji, tutku ve disiplinden daha etkili değildir" 
Altuğ Altıntaş

Eclipse, netbeans derken SublimeText 2 editör...

SublimeText 2 editörünü kullanmaya başladım. Daha bir hafta oldu ama php ile geliştirme yaparken pek problemler ile boğuştuğumu söyleyemem.

Debug konusu sıkıntılı şu an. Ancak buna henüz ihtiyacım olmadı. Olunca bakacağım.

Şu ana kadar çok az RAM yemesi, CPU yu neredeyse koklaması hasebiyle, ayrıca GIT pluginiyle tam bir geliştirme ortamı sunduğunu söyleyebilirim. Tavsiye ederim de...

Python dilinde de geliştirme yapmak o kadar zor değil SublimeText 2 editör ile...


29 Mayıs 2013 Çarşamba

Laravel'e övgü...

Evet yine PHP dili ile bazı denemelere devam ediyorum. Paslanmayalım desem de inanmayın.
Daha fazla PHP ile çalışmak istediğimi sanmıyorum. Ancak Laravel adlı bir frameworkten bahsetmek istedim.

Laravel bilindiği üzere bir sürü PHP framework camiası içinden sadece biri. Tabii uğraştığım bir framework. Çok fazla framework tecrübem olmasa da beğendiğim taraflarını yazmak istedim.

Mesela "migration" olayına bayıldım. "Artisan" komut islemlerinden "migration"'ı aktif ederseniz "application" dizini altında "migrations" adlı bir dizin oluşturuyor. Ve veritabanında da bir tablo.
Siz bu dizin altında migration için dosyalar var ediyorsunuz komut ile. Ve "Schema" yani şema create edebilecek şekilde php kodları yazıyorsunuz. Tabii rollback yapılabilsin diye rollback yapıtığınızda şema drop olaylarını da ekliyorsunuz uygun yerlere...

Sonra eğer tabloda değişiklikler varsa yeni bir migration dosyası ve şema daki değişiklikleri php kodlarıyla yapıyorsunuz. Böylece bir yazılım güncellemesinde yeni tabloları otomatik yönetmiş oluyorsunuz. Ve problem olursa geriye dönmelerini de sağlayabiliyorsunuz.

Ben bu özelliğini çok sevdim :)

Ayrıca ORM sini kullanmak çok kolay. Çok karışık sorgularda ham SQL i de kabul ediyor.

Bence kullanmaya değer. Ben sevdim. Python Django framework e çok benzetiyorum...


6 Ağustos 2012 Pazartesi

TrueCrypt Denemesi

Eve bir güvenlik manyaklığı oluşması, tabii olarak güvenli olduğuna göstermez, ama bir deneme ve tecrübe olması açısından fena olmadı diyebilirim şimdilik.

truecrypt yazılımıyla bir dosyada sanal hdd oluşturarak, tabii kriptolu, burayı mount edip kullanabiliyorsunuz. Şifreniz bilinmez ise doğal olarak mount edemiyorsunuz.

Peki APPLE ile gelen şifreleme sistemi yerine neden truecrypt? Bununla mac os x e en az bağımlılığımın olması için seçtim :) Böylece linux ya da windows da bu dosyalarıma erişeceğimi umuyorum. :)

Şu an için kendimce özel olduğunu düşündüğüm şeyleri bunların içinde saklıyorum.

Bakalım....

14 Haziran 2012 Perşembe

Skype, pidgin ve secure chat denemesi...

Bu sefer de skype'de de şifreli muhabbet olayına taktım. Skype sunucularına direk erişemiyorsunuz. Standart bir protokol yok. Ancak skype client kurup bunun üzerinden apisini kullanarak client üzerinden vekaleten bu işlemi yapabiliyorsunuz.

Pidgin meşhur IM istemcisi. Zaten OTN denilen şifreli muhabbeti desteklemekte.
Pidgin-skype ise Pidgin'in skype istemcisi üzerinden Pidgin'e yetki tanıyan bir eklenti. Bunu kullanarak skype istemcisini değil de Pidgin'i kullanarak skype muhabbetlerini ( sadece yazılı olanları demek istiyorum ) kontrol edebiliyorsunuz.

Bunlar tamam ise Pidgin'i açıyor ve karşıda da aynı ayarları yapmış arkadaşınız ile gönül rahatlıhıyla şifreli muhabbet ediyorsunuz. Sunucuda bir yedekleri tutulsa dahi fark etmez. Şifreli yazışma olacak ve çözmek için anahtarlara ihtiyaçları olacaktır. :)

Evet bir meceranın daha sonu...

Thunderbird ve enigmail mecerası...

Evet ileti istemcisi olarak Thunderbird kullanıyorum. Ve şifreli haberleşme, güvenlik az biraz çok aklımı kurcalıyordu. Sonunda Enigmail eklentisini bir deneyeyim dedim.

Eklentiyi indirdim. Ardından GNUPGP kurdum. Enigmail PGP anahtar üretimini GNUPGP ile yapacak çünkü.

Ardından bir kişiye daha ihtiyaç olacaktır. 2048 bitlik şifrelenmiş MERHABA iletisi göndermek şart eğlenmek için. Birini de ayarttım ve sonrasında açık anahtarlarımızı paylaştık karşılıklı olarak. Kapalı anahtarla özel. Kimseyle paylaşılmamalı. Ve sonra  gelsin şifreli ileti, gitsin şifreli ileti. :)

Ayrıca iletiyi şifrelemeden imzalayabiliyorsunuz da. Bunu karşıdaki açık anahtarınızı biliyorsa teyid edebiliyor. :)

bakalım ne olacak....

10 Haziran 2012 Pazar

Bir kitap: İstanbul Lezzetleri , Mehmet YAŞİN...



Gurme olmak değil niyetimiz, ama hayattan da keyif almak adına, olanaklar mertebesinde belkide denemek lazım bir şeyleri.

Bunun için bir yerden başlamalı, eğer alt yapınız yoksa. Nereden başlamalı diye sordum kendime ve dedim ki "Mehmet Yaşin'nin İstanbul'un Lezzetleri" kitabı neden olmasın? Ve gittim aldım.

Bakalım görelim neler olacak. En kötüsü zaten hiç kitabı almamış gibi olacağım :)

Apache pig macerası...


Evet bir log parçalama macerası... Özellikle apache HTTP web sunucusu veya commonlog biçemindeki loglarını parçalama işlemleri, onları işleme birer yük, hele log dosyalarının boyları GB ler mertebesinde sayıları ise yüzleri geçiyorsa...

Bunun için ellerimle bu logları parçalayıp işleyecek ve sonrasında veritabanına yazacak kodlar yazdım. Sonra bu sistemin kararlı çalışması için gözlemleme, hata ayıklama işleriyle uğraştım... Hem eğlenceli hem de sıkıntıların bitmemesi can sıkıcı...

Şu an kendi yazdığım sistemi çalıştığım şirkette kullanıyoruz. Kararlı olarak çalışıyor, fakat komple bir sistem olduğundan arada hatalar çıkınca eksiklikleri durmadan takip edip düzeltiyorum. Hala ...

Sonra dedim ki Apache PIG'i bir deneyeyim. Denedim ama local olarak.  cluster modunda denemedim. Basitçe bir pig dosyası var ettim. Sonrasında üretilmiş log dosyamı parçalattırdım. Gün bazında hit ve toplam tüketimi hesaplattırdım. Sonrasında ise kendi yazdığım kodla aynı log dosyasında gün bazında aynı raporları ladım.

Ve şaşırdım :) ikisi de aynı sonuçları vermişti... Ben yüzlerce satır ( belki binlerce ) kod yazmıştım benze bir işi yapmak için. PIG ile aynı raporu veren betik:




REGISTER '$PATH/pig-0.10.0/contrib/piggybank/java/piggybank.jar';

DEFINE LogLoader org.apache.pig.piggybank.storage.apachelog.CombinedLogLoader();
DEFINE DayExtractor org.apache.pig.piggybank.evaluation.util.apachelogparser.DateExtractor('yyyy-MM-dd');
DEFINE CSVExcelStorage org.apache.pig.piggybank.storage.CSVExcelStorage();

logs = LOAD 'test.access.log' USING LogLoader as (remoteAddr, remoteLogname, user, time, method,
uri, proto, status, bytes, referer, userAgent);

logs = FILTER logs BY status  == '200' OR status  == '206' OR status == '304' parallel 10;

-- project just the columns we will need
logs = FOREACH logs GENERATE remoteAddr, DayExtractor(time) as day, bytes parallel 10;

logs = GROUP logs BY day parallel 10;

logs = FOREACH logs GENERATE  group, COUNT(logs.remoteAddr) as hit, SUM(logs.bytes) as total_bytes parallel 10;
--logs = GROUP logs BY DayExtractor(time) as day;

--STORE logs INTO 'result.csv' ;

DUMP logs;




evet yukarıdaki kod benim logu parçalama ve işlemem sonucunda çıkan toplamı verdi. Biraz daha uzun süre çalışıyordu ama PIG bu kadar esnek ve kolay yapısıyla beni cezbetti.

Daha cluster olarak nasıl kullanacağım, anlık olarak logları nasıl pig ile işleyeceğimi bilgmiyorum. Şu an PIG ile log dosyalarıni bir gün geriden istediğim gibi, local modda , parçalayabileceğimi yani istediğim raporu çıkarabileceğimi biliyorum...

Denemelere devam...

Şifreler ve Şifre yöneticis macerasi...


Bir sabaha uyandım ntvmsnbc.com sayfasında kocaman Linkedin.com'un milyonlarca kullanıcısının kriptolu halde şifrelerinin çalındığını okudum.

Bunun üzerine hemen şifremi değiştirmeliyim aklıma geldi. Tabii arkadaşlarıma da olaydan söz etmeliydim. Daha sonra ise aklıma daha kötü seneryolar geldi. Mesela en çok kullandığım e-posta v.s gibi hesapların şifreleri ne olacaktı? Onların çoğunda birbirinin aynısı şifre kullanıyordum.

Her yerde açtığım değil ama en önemlileri için önlemler almam gerektiğini düşündüm.Şifre çözme olayında ise kelimer var ve bunlar anlamlı ise çözülme ihtimali bir o kadar da artıyordu. Hepsine değişik şifreleri verirsem hem nasıl hatırlayacaktım, hem de şifrelerimi nasıl güvenli saklayacaktım?

Sonunda bir password manager dedikleri program kullanmaya karar verdim. Linux ortamında KEEPASS denilen open source bir şifre yöneticisini şu an kullanıyorum. Tabii olarak onunda zayıflıkları ve şifre yöneticisi kullanmanında dezavantajları mevcut. Bu riski göze alıp şifrelerimi bu yöneticiye rastgele ürettirerek, benim hatırlamamın mümkün olmadığı şifreleri ürettirdim. Kilit noktadaki tüm yerlerdeki şifrelerimi de değiştirdim.

Şu an bir sıkıntı yaşamıyorum ama bakalım ilerde göreceğiz...

12 Aralık 2011 Pazartesi

Linux 64bit altında J2ME neden derlenmez?

Eğer JVM 64 bit ise mobil cihaz emulatorünü çalıtıramazsınız. WTK nın 64 sürümü henüz yok. ancak 32 bit JDK indirip bir yere kurarsanız ve bunun yolunu

WTK/bin/emulator -- içinde javapathtowtk değişkenini bu yeni JVM yolunu belirterek çalıştırabilirsiniz.

15 Kasım 2011 Salı

Fedora 16 güncelleme yapılınca ekran parlaklığının ayarlanamaması

Fedora 16 kurduktan sonra güncellemesini yapınca ne yazık ki ekran parlaklığı ayarı bir türlü çalışmıyordu.
Forumlarda denilenleri denedim olmadı.

Cevap: 'sudo yum reinstall bash' . Evet bu komuttan sonra yeniden doğru bir şekilde çalıştı.
artık sorun yok :)


Fedora 16 X64 - GNOME 3 sürümü. SONY VAIO FW serisi...

Kaynaklar:
-------------
http://ask.fedoraproject.org/question/271/brightness-breaking-after-f16-update

29 Aralık 2010 Çarşamba

Karinca ile Aslan ...

Karinca ile Aslan ...

Kucuk bir Karinca her sabah erkenden isine gelir ve nese icinde calismaya
baslardi…..
Çok calisir… Çok uretir... Ve bunlari keyif icinde yapardi.

Patronu Aslan, Karinca’nin basinda yoneticisi olmadan kendiliginden bu
kadar hevesle calismasina cok sasirirdi. Bir gun kari ve verimliligi
arttirmak icin aklina parlak bir fikir geldi. Eger Karinca, basinda bir
yonetici bile olmadan bu kadar uretken olabiliyorsa, bir de basarili bir
yoneticisi olsa neler yapardi.

Bunun uzerine, muthis bir yoneticilik kariyeri olan ve yazdigi raporlarla
unlu Hamambocegi’ni ise aldi. Hamambocegi ise oncelikle bir saat alarak
basladi. Boylece Karinca’nin calistigi saatleri tam olarak olcebilecekti.
İs saatlerinde gevseklige musaade etmeyecekti. Elbette raporlarini
duzenleyecek bir sekretere de ihtiyaci olacakti. Bu nedenle hem telefon
trafigini yonetmek ve hem de arsiv isleri icin Örumcek’i ise aldi.


Aslan, gelismelerden cok memnundu. Hamambocegi’nin hazirladigi raporlar
gercekten harikaydi. Hatta ondan uretim hizini olcen ve karliligi analiz
eden renkli grafikler de hazirlamasini istedi. Boylece bu raporlari
ortaklarina sunum yaparken kullanabilecekti.

Hamambocegi, bu raporlari uretebilmek icin yeni bir bilgisayara ve donanima
ihtiyac duydu. Artik artan ekipmanlar icin de artik bir bilgi islem
departmani olusturmanin zamani gelmisti. Bu isleri idare etmek icin Sinek’i
ise aldi.

Bir zamanlar mutlu, uretken ve rahat olan Karinca bu yeni toplanti
duzeninden ve evrak islerinden yilmisti. Zamanin buyuk bir kismini sorulan
sorulari cevaplamak ve evrak isleri yapmakla geciyordu.


Aslan, Karinca’nin bolumunun giderek buyumesinden memnundu. Bolumu daha da
buyutmek uzere bir ustyoneticiye ihtiyac oldugunu dusundu. Ve bolum baskani
olarak basarilari ile unlu Agustosbocegi’ni ise aldi.
  

Kendi rahatina ve keyfine duskun Agustosbocegi’nin ilk icraati ofisi rahat
edebilecegi yeni mobilyalarla dosemek oldu. Tabi ki kendisinin yeni bir
bilgisayara, butce kontrol ve stratejik verimlilik plani hazirlanmasi icin
kisisel bir yardimciya ihtiyaci vardi. Bunun uzerine eski isyerindeki
yardimcisini ise aldi.

Karinca’nin calistigi yer giderek kimsenin gulmedigi, nesesiz ve mutsuz bir
mekana donusmustu. Agustosbocegi, patronu Aslan’i ortamin ruh halini
degistirecek bir calisma yapilmasi gerektigine ikna etti.
  
Bunu uzerine, Karinca’nin bolumunde olup bitenleri gozden geciren Aslan,
uretimin ve karliligin dramatik bir sekilde dustugunu farketti. Hemen, son
derece itibarli ve iyi taninmis bir Danisman olan Baykus’u sorunu cozmesi
icin ise aldi.

Baykus, Karinca’nin departmaninda 3 ay gecirdi. Bu hummali calismanin
ardindan ciltlerce suren muhtesem bir rapor yazdi.
  
Raporun sonucu suydu: “Departmanda asiri istihdam vardi”.

Aslan, raporu inceledikten sonra dramatik bir karar verdi. Ve, elbette, ilk
olarak negatif tavirlariyla dikkat ceken, mutsuz ve calisma istegini
kaybetmis olan Karinca’yi isten cikardi.


Alıntı: KARINCA

23 Aralık 2010 Perşembe

AS400'de SQLException[7008] hatası...

Her ne kadar AS400 denilen veritabanını bilmesemde SQL7008 tipinde bir hata ile karşılaştım. Bu hata bir taploda bir alanı "update" yani güncelleme işlemi yapmak isterken karşıma çıkageldi.

Sonrasında bunun AS400'de journaling diye tabir edilen bir hata olduğunu öğrendim. Tam anlamasamda bu journaling işlemi bir tür replication diye tabir edilen yansı alma işlemi gibi ya da onunla alakalı bir durum olduğunu düşünmeye başladım.


Hata biçemi : java.sql.SQLException: [SQL7008] tablo_adı  in  veritabanı_adı not valid for operation.

11 Ekim 2010 Pazartesi

SCJP çalışmaları

Sonunda SCJP için çalışmaya başladım. Biraz daha sıkı çalışsam iyi olacak. Sınava da az bir zaman kaldı. İşin güzel tarafı hakikaten yıllarca yazdığınız kodlara bu sefer biraz daha dataylı baktığınızı söyleyebilirim.

Public, private, protected ve default erişiim düzenleyici ( access modifier ) anahtar kelimelerde dahi bazı püf noktaları bilmediğinizi görünce insan biraz heyecanlanıyor.

Detayları bilmek güzel. Yeni bakış açısı ve elinizdeki alet ile neler yapabileceğinizi daha iyi görebiliyorsunuz.

:)