Linux Admin

Showing posts with label firebug. Show all posts
Showing posts with label firebug. Show all posts

Friday, May 11, 2012

IETT'nin sagladigi otobus konum bilgisi

Mobil cihazlar için 2 gencin geliştirdiği gayet güzel çalışan Nerde bu Otobüs adlı bir uygulama var, istanbulda otobüs bekleyen bir çok insanın en büyük yardımcısı, harita üzerinde otobüslerin konumlarını gösteriyor ve bu sayede beklediğim otobüsün bulunduğum durağa ne zaman otobüs geleceğini tahmin edebiliyorum. Aşağıdaki testleri ve denemeleri yapana kadar otobüs konum bilgilerinin sık sık güncellendiğini düşünüyordum, Nerde bu Otobüs uyglamasının internet'teki sss sayfasında da hat bilgilerinin 4 dakikada bir güncellendiği'ne dair bir ibare var. Uygulamanın sağladığı otobüs konumlarının güncellenip güncellenmediğini heniz tam test etmedim ama bu güncelleme sadece İETT'nin sağladığı verileri sorgulama sıklığı olabilir ki İETT zaten en sık yarım saatte bir kez güncelleme yapıyor gibi.

Verileri nereden alıyor bu amcalar, bunun daha düzgünü de yapılabilir diyerek kayınçoyla oturup biraz (2 saatten uzun sürdü hepsi) inceledik. önce http://mobil.iett.gov.tr/ sayfasındaki otobüsüm nerede bağlantısını farkettik, herhalde buralardan alıyorlar verileri diye düşündük. Ama ayrıştırması çok zor bir veri gibi görünüyordu.

Sonra asıl uygulamanın veriyi nasıl çektiğine bakalım dedik ve nasıl yapsak, nasıl yapsak diye düşünürken şöyle bir yöntem bulduk: Benim android telefonumu SSHTunnel ile bilgisayarım üzerinden proxy'ledik ve bilgisayarda wireshark ile trafiği izlerken "nerde bu otobüs"ü açtık hat listesi aldık, otobüs konumlarını aldık, şöyle bir gezindik. Uygulamanın arka tarafındaki servis düz HTTP olduğu için güzelce eriştiği bütün URL'leri alabildik.

Nerde bu Otobüs uygulamasının arka tarafı ASP ile yazılmış, zaten gelistiren cocuklar da Microsoft Student Partner'lar falan, benim tabirimle microsoft'çu çocuklar (maalesef M$ bu yetenekli gençleri daha okulları bitmeden kazanmış bile). Baktık uygulama verileri kendi sitelerinden http://nerdebuotobus.com/getLineBusses.aspx?line=19Z&points=1, http://nerdebuotobus.com/getLineStopSchedules.aspx?line=19B&stop=A1871&output=json gibi URL'ler ile çekiyor.

Sonra bu verilerin iett'nin mobil sitesinde bulduğumuzdan çok daha düzgün yapıya sahip olduğu sonucuna varıp başladık fikir yürütmeye. Kendi çapında uygulama geliştiren iki gencin İETT ile anlaşması olamaz, demek ki bu verileri İETT açıktan bir yerlerden sağlıyor dedik. Nedense çok sonra İETT'nin sitesinden de otobüs konumlarının sorgulanabildiğini hatırlayıp bir baktık ki İETT harita sayfalarını gezerken bir yandan firebug açıp izleyince İETT'nin harita arayüzünde gösterdiği verileri zaten javascript/ajax ile xml olarak çektiğini ve Nerde bu Otobüs'çü gençlerin de dolaylı olarak bu XML'i döndüğünü anladık. Hat kodları, duraklar, otobüs konumları falan İETT baştan beri bize sunmuş zaten XML olarak. Nerde bu Otobüs için bunu json'a dönüştüren bir şey yazmışlar anlaşılan, çünkü gelen veri yapısı aynı idi.

İETT'nin XML'leri ortadaydı ve kolayca erişilebilirdi: http://harita.iett.gov.tr/XML/34otog.xml

Benzer şekilde hat kodları, otobüs saatleri ve diğer veriler de başından beri elimizde varmış, boşuna kasmışız Nerde bu Otobüs ile uğraşarak.

İstediğimiz verilere erişebildiğimizi anladıktan sonra bu verilerin ne kadar güvenilir olduğuna geldi sıra, önce iki otobüs hattı için (metrobüs olan 34 ve karşıya sık giden 112'yi seçtim) cron'a bir şey yazayım bir gün sonra bakayım ne sıklıkta güncelleniyor diye biraz izleyeyim diyordum ama dün farkettim ki iki haftadır o cron'ları unutmuşum. Bu sayede sık seferi olan iki otobüs hattı için iki haftalık güncelleme verisi toplamış oldum.

Geçtiğimiz 13 günde 112 ve 34 hatları için 10 dakikaya bir ilgili xml'leri şöyle topladım:

bekir@hede:~$ crontab -e

*/10 * * * * cd /free/iett; wget --header='Referer: http://harita.iett.gov.tr/' http://harita.iett.gov.tr/XML/112otog.xml
5,15,25,35,45,55 * * * * cd /free/iett; wget --header='Referer: http://harita.iett.gov.tr/' http://harita.iett.gov.tr/XML/34otog.xml

Toplanan dosyalar şu şekilde biriktiler:

bekir@hede:/free/iett$ ls -lrt
toplam 54328
-rw-r--r-- 1 bekir bekir   886 Nis 29 02:15 112otog.xml.9
-rw-r--r-- 1 bekir bekir   886 Nis 29 02:15 112otog.xml.8
-rw-r--r-- 1 bekir bekir   886 Nis 29 02:15 112otog.xml.7
-rw-r--r-- 1 bekir bekir   886 Nis 29 02:15 112otog.xml.6
-rw-r--r-- 1 bekir bekir   886 Nis 29 02:15 112otog.xml.5
-rw-r--r-- 1 bekir bekir   886 Nis 29 02:15 112otog.xml.4
-rw-r--r-- 1 bekir bekir   886 Nis 29 02:15 112otog.xml.3
-rw-r--r-- 1 bekir bekir   886 Nis 29 02:15 112otog.xml.2
-rw-r--r-- 1 bekir bekir   886 Nis 29 02:15 112otog.xml.15
-rw-r--r-- 1 bekir bekir   886 Nis 29 02:15 112otog.xml.14
-rw-r--r-- 1 bekir bekir   886 Nis 29 02:15 112otog.xml.13
-rw-r--r-- 1 bekir bekir   886 Nis 29 02:15 112otog.xml.12
-rw-r--r-- 1 bekir bekir   886 Nis 29 02:15 112otog.xml.11
-rw-r--r-- 1 bekir bekir   886 Nis 29 02:15 112otog.xml.10
-rw-r--r-- 1 bekir bekir   886 Nis 29 02:15 112otog.xml.1
...
-rw-r--r-- 1 bekir bekir   673 May 11 02:19 112otog.xml.1662
-rw-r--r-- 1 bekir bekir   673 May 11 02:19 112otog.xml.1661
-rw-r--r-- 1 bekir bekir   673 May 11 02:19 112otog.xml.1660
-rw-r--r-- 1 bekir bekir   673 May 11 02:19 112otog.xml.1659
-rw-r--r-- 1 bekir bekir   673 May 11 02:19 112otog.xml.1658
-rw-r--r-- 1 bekir bekir   673 May 11 02:19 112otog.xml.1657
-rw-r--r-- 1 bekir bekir   673 May 11 02:19 112otog.xml.1656
-rw-r--r-- 1 bekir bekir   673 May 11 02:19 112otog.xml.1655
-rw-r--r-- 1 bekir bekir   673 May 11 02:19 112otog.xml.1654
-rw-r--r-- 1 bekir bekir  1303 May 11 05:41 112otog.xml.1681
-rw-r--r-- 1 bekir bekir  1303 May 11 05:41 112otog.xml.1680
-rw-r--r-- 1 bekir bekir  1303 May 11 05:41 112otog.xml.1679
-rw-r--r-- 1 bekir bekir  1303 May 11 05:41 112otog.xml.1678
-rw-r--r-- 1 bekir bekir  1303 May 11 05:41 112otog.xml.1677
-rw-r--r-- 1 bekir bekir  1303 May 11 05:41 112otog.xml.1676
-rw-r--r-- 1 bekir bekir  1303 May 11 05:41 112otog.xml.1675
-rw-r--r-- 1 bekir bekir 16710 May 11 06:36 34otog.xml.1673
-rw-r--r-- 1 bekir bekir 16710 May 11 06:36 34otog.xml.1672
-rw-r--r-- 1 bekir bekir 16710 May 11 06:36 34otog.xml.1671
bekir@hede:/free/iett$ 


Sonra bu verileri inceleme faslına gelince farkettim ki 10 dakikaya bir durmadan aynı dosyaları almışım, örneğin yukarıda ilk 15 kadar istek sürekli aynı veriyi almış. Bunun anlamı o dosyanın 15*10=150 dakikadır güncellenmediği. Sonra ben de otobüs konumlarını içeren bu XML'lerin ne sıklıkta güncellendiğine bakmak için şunları yaptım, aşağıdaki çıktılar 34 ve 112 hatları için hangi saatte kaç GPS güncellemesi geldiğini gösteriyor.

bekir@hede:/free/iett$ ls 112* | wc -l
1682
bekir@hede:/free/iett$ ls -lrt 112* | cut -d. -f1,2 | sort -u  | awk '{print $8" "$9}' | cut -d: -f1 | sort |uniq -c | sort -n | awk '{print $2, $1/13}' | sort 
00 1.53846
01 1.46154
02 0.230769
05 0.384615
06 0.230769
07 1.07692
08 0.769231
09 1.38462
10 1.84615
11 2.07692
12 1.69231
13 1.23077
14 1.92308
15 2.15385
16 1.84615
17 2.07692
18 1.61538
19 2
2011 0.0769231
20 2
21 1.69231
22 2.23077
23 2

bekir@hede:/free/iett$ ls 34* | wc -l
1674
bekir@hede:/free/iett$ ls -lrt 34* | cut -d. -f1,2 | sort -u  | awk '{print $8" "$9}' | cut -d: -f1 | sort |uniq -c | sort -n | awk '{print $2, $1/13}' | sort 
00 3.92308
01 2.69231
02 1.07692
05 0.692308
06 0.615385
07 1.15385
08 2.23077
09 3.69231
10 3.53846
11 3.53846
12 3.30769
13 3.84615
14 3.53846
15 2.84615
16 3.69231
17 3.46154
18 2.92308
19 3.61538
20 3.23077
21 3.15385
22 3.92308
23 4.30769
bekir@hede:/free/iett$ 

Otobüs konum verileri en yoğun saatlerde ancak 2-3 kez güncelleniyor, gece de 02:00-05:00 arasında servisi de kapatıyorlar gibi, yani her şey yalanmış. İnanmadım bir de IETT'nin harita sayfasında da denedim, maalesef sonuçlar doğru çıktı. Öyle otobüs beklerken falan otobüs konumlarına bakmak çok anlamsızmış.

Bu arada yukarıda bahsettiğim "otobüsüm nerede" bağlantısı sık sık güncelleniyor gibi, doğruluğunu test etmedim ama belki oradaki veri gerçekten daha sık güncelleniyordur.

Wednesday, October 31, 2007

Tercih ettigimiz araclar

Az önce Serdar ile konuşurken birlikte çalıştığımız şirketlerdeki çalışanların bize göre ne kadar farklı araçlar kullandığından bahsediyorduk. "Abi HTTP başlıklarını gezginden değiştirebileceklerini bile bilmiyorlar" diye söze girmişti Serdar, sonrasında da bizim IE özürlü olduğumuzdan devam ettik. Şirkette pek windows makinalarla uğraşmayı tercih etmediğimiz için ürünlerimizi bazen IE ile test etmekte zorlanıyoruz.

Yazdığımız uygulamalar UNIX türevi sunucularda koştuğu için arkauçlarda genellikle pek sorunumuz olmuyor. Ama web üzerinden erişilen kısımlar için IE ve Safari testleri yapmak zorunda kalıyoruz. Bu tür testeri genellikle şirket içerisinden bağlandığımız Windows ve Maç sunucular üzerinden yapıyoruz, sağolsunlar.

Parkyeri'nde çalışan profilimizden dolayı genellikle özgür olan araçlar kullanmayı tercih ediyoruz. Bu aslında pek de bilinçli bir tercih değil; ama para verip uygulama satın alıp, üzerinde geliştirme yapmaya alışmış insanlardan oluşan bir kadroya sahip değiliz.

Şu anda ilk geldiğimden oldukça farklı ve daha iyi bir konumdayız, biraz kalabalıklaştık, ve kendi adıma birlikte çalışmaktan daha çok zevk alacağım insanlar geliyor Parkyeri'ne. Zamanla değişimimizin kullandığımız araçlara yansıyan bir kısmını aşağıda görebilirsiniz.

Parkyeri'ne ilk geldiğimde benim için çok yeni olan ama hayatımı değiştiren bir çok aracı tanımak zorunda kalmıştım, hayatımı etkileyenlerden aklıma gelenler sırası ile şunlar:

- debian ve gnome: Şirketteki tüm masaüslerinde debian çalışıyordu ve herkes gnome kullanıyordu ve ben o güne kadar hep KDE kullanagelmiştim. İnsanların neden Gnome tercih ettiğini Gürkan Aslan'dan "masaüstü eğitimi" alıncaya kadar pek de anlamamıştım. Gürkan daha sonra Debbie ve Ian'ı, RMS'ın kim olduğunu, GNU'nun ne demek olduğunu başka bir eğitimde anlatmıştı. Güzel günlerdi.

- ssh: Ürünlerin yönetimi ile ilgilendiğim ve müşterilere destek verdiğim günlerde benim için sadece sunuculara açılan kapıydı. Yerelimde nasıl çalışabiliyorsam uzakta da aynen çalışmamı sağlayabiliyordu, ama gene de telnet'ten sonra tüm dünyam aydınlanmış gibiydi. Kimi sunuculara bir kaç makina üzerinden hoplayarak gitmem gerektiğinde de sorun çıkmıyordu, bir süre sonra uzaktaki makinaların portlarını yakınlara taşımayı da öğrendiğimde henüz bu bilginin, katı erişim kısıtlama politikaları olan müşteriler için kod geliştirirken ne kadar işe yarayabileceğine dair fikrim dahi yoktu.

- firefox: zaten kullanageldiğim süper araç, neresini anlatayım ki!

- firebug: 20$ bağış yaptığım firefox eklentisi. IE de debug yapabilmek için koskoca script debugger kurduğum ve her çalıştırmamda IE'yi donduran hımbıl programlar ile uğraştıktan sonra dünyayı yeniden keşfetmemi sağlayan nane.

- livehttpheaders: HTTP başlıklarında gelen giden verilere erişip üzerinde oynama yapabildiğiniz süper eklenti. Özellikle bizim gibi cep telefonu modeline göre farklı wap sayfaları getirecek sistemler gibi bin bir farklı başlık bilgisinin olduğu sistemler ile sık uğraşmanız gerekiyorsa HTTP başlığında telefonu ya da başka bir uygulamayı taklit edebilmenin gücünu bilyorsunuz demektir.

- tamperdata: bir sitenin açılışında hangi dosyaların yüklendiğini görebildiğiniz bir grafik de sunabiliyor. Ürettiği grafiği biraz daha derin şekilde incelerseniz hangi JS dosyalarının firefox tarafından ne kadar sürede ayrıştırıldığını (parse edildiğini) da çıkartabiliyorsunuz. Bizim gibi masaüstü uygulaması tadında web uygulaması (JS kodu) geliştirmeniz gerekiyorsa eklentinin çıktısı olan grafiklerin derinlemesine incelemesi sizi güzel çözümlere götürebilir.

- emacs: Parkyeri'ne geldikten sonra Haldun'un (Parkyeri mezunudur kendisi) ve Erhan'in gazı ile öğrendiğim, genellikle içinde yaşadığım, bu blog girdisini yazdığım şey! Bilgisayarımda sırasıyla XFÇE, firefox ve sonra emacs açılır her ne hikmetse :) psvn gibi uzantıları (vc) ve içerisinde lisp kodlayarak özelleştirilebilir olması vim'den emacs'e geçmemin nedenidir. bir kez açarsınız, içinde yaşarsınız.

- vim: programcı dostu, emacs'e göre çok hızlı yüklenen geliştirme ortamı. (Gerçe Emacs'ı sadece bir kez açıyoruz.)

- etags: vim ve emacs kullanıyorsanız projenizdeki dosyalarda yer alan işlevleri (fonksiyonları) tag'ledikten:

"fınd . -print | etags -"

sonra, kod içerisinde gezinirken vim'de C-], emacs'de M-. tus bileşenleri ile o fonksiyonların tanımlandığı dosya ve satıra erişebilirsiniz. "E, eclipse bunu zaten yapıyor" deyebilirsiniz ama bellekte kapladığı yeri de düşünüyorsunuz değil mi? Bu yöntemde hangi dili kullandığınızın pek önemi yok.

- screen: tüm geliştirme ortamlarınız bizim gibi tamamen uzakta ise ve arkadaşlarınızın tümü uygulama geliştirme sunucularına erişmek için ssh üzerinden uzaktaki vim, emacs gibi araçları kullanıyorlarsa türkiyenin altyapısına olan güvenden haberdarsınızdır. Uzaktaki bir bilgisayarda kod yazarken bağlantı her gittiğinde küfretmek istemiyorsanız screen kullanın. Uzaktaki makinelerde ~/.bashrc içerisine koyduğum aşağıdaki satırlar kişisel olarak çok işime yarıyor doğrusu. Konsol için windows'daki "duraklat" (hibernate) özelliğini çağrıştırıyor.

if [ "x${TERM/-w/}" == "xscreen" ]; then #sometimes it sould have screen-w
echo You are inside a screen.;
else
screen -Rd;
fi

- rcs, cvs: eskiden versiyon takibi için bu meretleri kullanırdık. Parkyeri içerisinde cvs'imiz pek kısa ömürlü oldu, rcs zamanından gelen değişiklik bilgilerini kaybetmeden cvs geçişi yaptıktan kısa bir süre sonra da svn'e geçtik. ama sistem yönetimi için kimi yapılandırma dosyalarının takibinde hala RCS kullandığımız yerler de var.

- svn: Enver'in çabaları ile eski sistemleri bırakıp svn'e ilk geçtiğimizde biraz garip gelmişti, her yeni teslimde tüm projenin revizyon numarasının yükselmesi gibi gariplikler vardı. SVN'in inceliklerini öğrenmek biraz vakit aldı. Ama ne olursa olsun şirkete ait bir projede kendi dalınızı açmak gibi bir lükse sahip olmanın anlamını ancak yaşayan bilir sanırım. svn teslim epostaları ile geliştiriciler kod deposuna yaptıklarını teslim ettiğinde projedeki ilgili herkes değişiklikleri anında görebiliyor.

- dcl: Bilet takip sistemimiz. Zamanında üzerinde değişiklik yaptığımız bir sürümünü kullanıyoruz. Müşterilerin ilettiği her sorun için bilet (iş havalesi) açıyoruz... Bir çok firmada bir şekilde vücut bulan bildiğiniz iş takip sistemi.

- webcalendar: Şirket içerisinde toplantı yönetimini ve kimin ne zaman hangi ofisimizde olacağını bu uygulama ile takip ediyoruz.

- trac: Kimi projelerin işlerini takip ederken dcl yerine trac kullanamyi tercih ediyoruz. svn depolarımızla birlikte çalışabilmesi "proje maddeleri" (biletler) ve "geliştirilen kod" arasındaki ilişkiyi çok net kurabilmemizi sağlıyor.

- jmeter: Uygulamanızı çok çeşitli şekillerde test edebilmenizi sağlayan pek eşi olmayan nane. Birim testlerimizi web üzerinden tetikleyen ve servislerinize ait istatistiki bilgi üretebilmenizi sağlayan bir araç. Yaptığı isteklerin sonuçlarını sizin belirlediğiniz kriterlere göre denetleyebilen, yeri gelince çıktıdaki xml'i ayrıştırabilen, yeri gelince aldığı cevabın doğruluğunu veritabanından deneteyebilen ölçen süper araç. Türkiye'nin hatırı sayılır kesiminin kullandığı uygulamalar gelişiriyorsanız yük testleri yaparken bir çok makina üzerinden paralel (dağıtık) çalışabilmesi de çok işe yarıyor.

- apaçhebench: HTTP üzerinden çalışan servisleriniz için oldukça ağır yük testlerini yapabileceğiniz araç. jmeter gibi çıktı üzerinde doğrulama yapamasa da basit bir kaç betik ile birlikte kullandığınızda sisteminizde aşırı yük yaratmak ve etkilerini ölçmek açısıdan oldukça faydalı.

- postgresql: Yalan atmama gerek yok sanırım, oracle gördüğümüz yere postgresql koymak için çaba harcıyoruz. Oracle kullanmaya mecbur kalmadıkça kullanmıyoruz. Postgresql zaten yük dengeleme, yedekli çalışabilme gibi kritik uygulamalarda şart olan özelliklere sahip. Oracle'da protokollerin, işletim sisteminin ya da sitemin kendisinden kaynaklanan sınırlara dayandığınızda işin içinden çıkmak için bir oracle uzmanı bulmadan edemiyorsunuz.

- mysql: mysql üzerinde çok zamandır koşan servislerimizin milyonlarca kayda rağmen tökezlemediğini bilmek iç ferahlatıyor.

- memcached: uyulamanız yükleri paylaştırmak için n tane makina üzerinde koşuyorsa size gelen her isteğin farklı bir fiziksel makinaya iletilmesi session kullanımınızı etkileyebilir veya ağır yük altında veritabanı işlemlerinizi cache'lemeniz gerekebilir, bir sürü makinada paralel çalışabilen bu küçük programcık hayat kurtarabiliyor.

Kullandığımız araçlardan ilk çırpıda aklıma gelenler şimdilik bu kadar. Bir çok kişi için bunlar pek bir şey ifade etmese de belki bir gün birilerinin işine yarayabilir.

Blögged with Flock