Sunday, January 6, 2013

Android APK dosyası inceleme (reverse engineering)

Android'e bir şekilde bulaştıysanız AppBrain'i duymuşsunuzdur. Google'ın Android Market'ine alternatif olan ve size uygulama tavsiye edebilen bir site. AppBrain'in bir de istatistik hizmeti var. Bu istatistikler içinde benim en çok ilgimi çeken Developer tools istatistikleri. Örneğin ACRA kütüphnesini kullanan top 10 uygulamayı görebiliyorsunuz. AppBrain'in bu istatistikleri nasıl topladığını merak ediyorsanız okumaya devam edin.

Bu yazıda apk dosylarının, reverse engineering ile nasıl inceleneceğini adım adım anlatacağım.

1. Apk dosyasını indirme

Android projelerinin emulatörde ya da cihazda çalışabilmesi için projenin paketlenmesi ve imzalanması gerekiyor. Proje paketlendiğinde '.apk' uzantılı bir dosya oluşur. Apk dosyalarının oluşturulması ile ilgili detaylı bilgi almak isteyenler resmi android geliştirici sayfalarındaki Building and Running bölümüne bakabilir.

Apk dosyasını indirebilmek için apk downloader adında bir araç kullanacağız. Apk-downloader bir Chrome eklentisi. Android Market'te uygulamanın sayfasına girdiğinizde adres barında apk indirmek için bir düğme çıkartıyor. Apk-downloader, Google hesap bilgilerinize (şifreniz dahil) ve Google'a kayıtlı Android cihaz'ınızın Google Service Framework ID'sine ihtiyaç duyuyor. Google hesap bilgileriniz bizi hiç ilgilendirmiyor dese de işim bittikten sonra Google şifremi değiştirdim, size de aynısını tavsiye ediyorum. İncelemek istediğimiz uygulamayı Android Markette bulduktan sonra apk'yı indiriyoruz.

Instagram'ın popüler Android uygulamasının apk dosyasını aşağıdaki şekildeki gibi apk-downloader'ın apk indirme düğmesini kullanarak indirdim.

2. dex2jar

İkinci aracımız dex2jar. Dex2Jar sayesinde dex formatındaki dosyalari java class dosyalarına çevireceğiz ve java decompiler ile class dosyalarını java dosyalarına çevireceğiz. dex dosyasının açılımı "Dalvik executable". Android uygulamarını çalıştıran virtual machine (Dalvik), java class dosyalarını değil dex formatındaki dosyaları okuyabiliyor.

dex2jar ile apk dosyasını aşağıdaki gibi jar (java archive) dosyasına çeviriyoruz.

tututil:TEMP ilkinulas$ ~/Development/tools/dex2jar-0.0.9.12/d2j-dex2jar.sh com.instagram.android.apk
dex2jar com.instagram.android.apk -> com.instagram.android-dex2jar.jar

Oluşan jar dosyasını okumak incelemek için Java Decompiler kullanacağız.

Java decompiler'ın arayüzü ile bakarsak Instagram'ın Android uygulamasınin aşağıdaki kütüphaneleri kullandıgını görebiliriz: (Aşağıdaki resim java decompiler'in arayüzünü gösteriyor.)

3. apktool

apk dosyasının içinde sadece derlenmiş dex dosyaları bulunmuyor. Uygulamayı meydana getiren AndroidManifest.xml dosyasi, res, assets, lib dizinleri de apk dosyası içinde bulunmakta. Bu dosyalara erişmek için apktool aracını kullanacağız.

Aşağıdaki komut ile apk dosyasını INSTAGRAM dizinine açıyoruz.

tututil:TEMP ilkinulas$ apktool decode com.instagram.android.apk INSTAGRAM
I: Baksmaling...
I: Loading resource table...
I: Loaded.
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: /Users/ilkinulas/Library/apktool/framework/1.apk
I: Loaded.
I: Regular manifest package...
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Done.
I: Copying assets and libs...
tututil:TEMP ilkinulas$ ls -ltr INSTAGRAM/
total 32
drwxr-xr-x   8 ilkinulas  staff   272 Jan  6 16:32 smali
-rw-r--r--   1 ilkinulas  staff  8248 Jan  6 16:32 AndroidManifest.xml
drwxr-xr-x  46 ilkinulas  staff  1564 Jan  6 16:32 res
drwxr-xr-x   4 ilkinulas  staff   136 Jan  6 16:32 lib
drwxr-xr-x   8 ilkinulas  staff   272 Jan  6 16:32 assets
-rw-r--r--   1 ilkinulas  staff   247 Jan  6 16:32 apktool.yml
tututil:TEMP ilkinulas$

apk-downloader, dex2jar, java decompiler ve apktool ile siz de seçtiğiniz bir uygulamayı decompile edip inceleyebilirsiniz. Happy hacking :)

Sunday, December 30, 2012

Okey Oyunu İçin Açık kaynak kodlu AI

Okey Mini kodlarını parça parça Github'a taşımaya başladım. Bluetooth multiplayer altyapısını daha önce P2P4Android projesi ile paylaşmıştım. Şimdi de oyundaki botların kodlarını (AI) OkeyBot projesi altında toparladım. User Interface (UI) kodlarını da elden geçirdikten sonra onları da paylaşacağım.

Yazdığınız koda 1 yıl sonra dönüp baktığınızda beğendiğiniz oluyor mu hiç? Ne güzel yazmışım diyor musunuz? Benim çok nadir oluyor. Okey Mini'nin kodlarına da yaklaşık bir yıldır bakmıyordum. Kaynak kodlarını paylaşmadan önce bir bakayım dedim ve kendi yazdığım koda bakınca kendimden utandım. Sağda solda OO yazılım prensipleri, tasarım kalıpları hakkında atıp tuttarken yazdığım koda bunları pek yansıtmamışım. Kaynak kodlarını paylaşıp görücüye çıkarmadan önce bir elden geçirme icap etti. Geniş kapsamlı bir ref.cktoring'ten sonra içime sinen bir hale geldi. Hala eksik testleri var. Zamanla testlerini tamamlayıp test coverage'ı artırmayı düşünüyorum.

Okey Mini'de botlar hile yapıyor diyenlere de kapak olsun bu paylaşım :)

Friday, September 9, 2011

Android için Okey

6 Haziran'daki yazımda Okey Mini'nin 10 bin Android cihazda kurulu olduğunu yazmıştım. Aradan geçen 3 ay boyunca Okey Mini 45 bin kullanıcıya ulaştı. Bu yazıyı 50 binde yazmayı düşünüyordum ama sabredemedim :)

Android Markette uygulaması olanlar bilirler Developer Console'da çeşitli istatistikler yer alıyor. Bu istatistikleri paylaşmak istiyorum. Türkiye'deki Android kullanıcılarının bir kısmı hakkında (en azından okey sevenler hakkında) ilginizi çekebilecek veriler var.

İlk olarak Okey Mini'nin Nisan 2011'den bugüne kullanıcı sayısı grafiğini görüyorsunuz. 78 bin download olmasına rağmen 45 bin cihazda kurulu. Bu da demek oluyor ki her 100 kişiden 57'si uygulamayı beğenmiş ve kurduktan sonra kaldırmamış. Bu yüzde 57 değerini gerçekten çok az buluyorum keşke diğer uygulama geliştiricileri de bu şekilde raporlar paylaşsa da genel olarak active installation yüzdesi hakkında fikir sahibi olabilsek.

Aşağıdaki resim kullanıcıların 5 üzerinden verdiği puanları gösteriyor. Yeni versiyonu 1.2.x markete gönderdikten sonra 4.6 olan ortalama 4.5'e düştü. Android Market'teki tüm uygulamaları değerlendirdiğinizde genel olarak 4 ve üzeri puandaki uygulamalar iyi uygulamalar olarak kabul edilebilir (bana göre).

Okey Mini'nin kullanıcılarının büyük bir çoğunluğunun Türk kullanıcılar olduğunu tahmin ediyorum. Okey'i bizim oynadığımız kurallarla oynayan başka bir ülke yoktur heralde. İlk istatistiğimiz Android versiyonları ile ilgili. Android 2.3.3 burada başı çekiyor. Android 3.0 ve 3.1'in olması tabletlerde de oyunun oynanabildiğini gösteriyor.Bu istatistikten çıkartılabilecek en sinir bozucu sonuç ise piyasada bulunan Android cihazlarda 10 farklı Android versiyonu bulunması.

Sıradaki istatistik Okey Mini'yi oynayan Android kullanıcılarının cihazları ile ilgili. En fazla kullanılan ilk iki cihaz Samsung Galaxy S ve S2. HTC Desire HD de 3. sırada yer alıyor. Okey Mini için konuşacak olursak Samsung cihazların ezici bir üstünlüğü var.

Olur da Okey Mİni kullanıcı sayısı 100 bin'e ulaşırsa istatistikleri tekrar paylaşırım. Bu rakamlar son zamanlarda operator kampanyaları ile ne kadar çok android cihaz satıldığını da göstermiş oluyor bence. Son olarak Android candır diyerek sözlerime nokta koyuyorum.

Saturday, June 11, 2011

Yunan Adaları Turu - Atina - Haziran 2011

Az önce Çanakkele Boğazı'ndan geçtik. Akşamüstü saat beşte Karaköy'de olacağız. Dün Atina'yı görme fırsatımız oldu. Gemi sabah 9'da Lavrion limanına yanaştı. Atina'ya gelen cruise'lar genelde Pire'deki limanda konaklıyor, fakat Pire limanı çok kalabalık olduğu için bizim gemi daha tenha ve Atina'ya daha uzak olan (70 km) Lavrion limanına yanaştı.

Saat 10'da gemiden ayrıldık. Geç kaldığımız için kiralık araç bulamadık. Biz gözümüzü açana kadar tüm araçlar diğer yolcular tarafından kiralanmış. Lavrion'dan Atina'ya gitmek için 3 alternatif var.

  • 40 avroya araç kiralayabilirsiniz (20 avroluk benzin yeterli olacaktır.)
  • Taksiler Atina'ya 80 avroya götürüyorlar. (Tabi bunun bir de dönüşü var.)
  • En yakın tren istasyonuna (Koropi) 40 avroya gidip, oradan 1.60 avroya Atina merkeze gidebilirsiniz.
Biz üçüncü seçeneği seçtik. Lavrion'dan Atina'ya 1 saat 20 dakika'da gidebildik. Atina'ya vardığımızda saat 12'ydi.

Atina'da ilk görülmesi gereken yer Atina Akropolisi. Akropolis "yukarıdaki şehir" anlamına geliyormuş. Yüksek kayaların üzerine 2500 yıl önce kurulmuş tapınaklar Atina'nın simgesi olmuş. Bu tapınakların en görkemlisi Partenon tapınağı. (Fotoğraflarda gözüken büyük sütunlu yapı). Bu tapınak Atina'yı koruyan tanrıça Athena için yapılmış. Atina'nın adı da bu tanrıçadan geliyormuş.

Tapınaklar'ın bulunduğu yere çıkmak 12 avro ve yürüyerek çıkmak zorundasınız. Nurten hamile olduğu için tepeye çıkmadı aşağıda beni bekledi. 150-200 metrelik bir tırmıştan sonra manzarayı izleyip ve bir kaç fotoğraf çekip aşağıya indim. Akropolis'ten Atina manzarasını aşağıdaki fotoğraflarda görebilirsiniz.

Gemi'ye dönüş için 3 saatimiz kalmıştı. 1 saat etraftaki mağazalarda takılıp dönüş için taksi aramaya başladık.

Burada taksiler çok lüks, çoğu Mercedes. Taksimetre açanına da rastlamdım hiç. Herşey pazarlık usulü. İngilizce bilen bir taksi şoförü bulabilirseniz şanslısınız. Geminin kalkmasına 2 saat kala bir taksi ile 65 avroya anlaşıp Atina'dan limana doğru yola çıktık.

Bu bizim ilk cruise seyahatimizdi. Bizim tatil anlayışımıza ters olduğu için bir daha böyle bir tatil yapmayı düşünmüyoruz. 500 kişi ile beraber seyahat etmek, yemek yemek, müzik dinlemek, güneşlenmek gerçekten zor. Açık büfede biten yemekler, herşey dahil olmasına rağmen biten içecekler, her gece "aynı" dans şovları turun kötü yanlarıydı. Öte yandan denizin ortasında geceleri yıldızları izlemek çok güzeldi. Ayın denizdeki ışıltısının gemiyi takip etmesi de görülmesi gereken bir manzaraydı. Ayrıca Casino'lara merakınız varsa cruise seyahatleri tam size göre.

Tatil bitti :( Gezdiğimiz gördüğümüz yerleri kısa kısa anlatmaya çalıştım. Umarım bu yazı dizisi ileride Yunan Adaları turuna katılmak isteyenlere tur ile ilgili bir fikir verebilir.

Thursday, June 9, 2011

Yunan Adaları Turu - Girit - Haziran 2011

Tatilin sonunu düşünmeye başladım yine. Bugün Girit, yarın Atina, cumartesi sabah da İstanbul'dayız. Girit çok büyük bir ada. Kuzeyi Ege Denizi'ne güneyi Akdeniz'e bakıyor. Böyle büyük bir adayı bir günde gezmek imkansız. Gemi sabah 8'de Girit'in en büyük şehri Heraklion'daki limana yanaştı. Bugün tura katılmadığımıza pişman olduk. Rodos'u kendimiz gezebilirdik fakat Girit'i gezmek için burayı iyi bilen birisi şart.

Kahvaltıdan sonra çantamızı hazırlayıp gemiden ayrıldık. Liman çok büyük olduğu için limanın girişine transfer otobüsleri ile gittik. Limandan çıkınca sora sora otobüs garını bulduk, atladık en yakın plajdan geçen otobüse. Arina Sand Beach'in önünde otobüsten indik. Bugün hava kapalı, hatta biz plajdayken ufak ufak da yağmur atıştırdı. Denize girmeden gerisin geri otobüs garına geri geldik. Aşağıdaki fotoğrafta güneş olmadığı için plajın boş kaldığını görebilirsiniz.


Otogardan taksi ile 5 Avro'ya şehir merkezindeki Aslanlı Çeşme'nin bulunduğu meydana gittik. Burası kafeler ve restoranlarla dolu bir meydan. Öğle yemeğini aşağıdaki resimde gözüken İzmir Kebap'ta yedik. Eşim (Nurten) hamile olduğu için Girit'in meşhur deniz ürünleri restoranlarında yemek yiyemedik.




Dinlene dinlene Girit sokaklarında dolaşırken arada serpiştiren yağmur ile serinliyorduk. Adada Venedikliler bıraktığı izler çoğunlukta. Aşağıdaki fotoğrafta Adayı denizden gelen baskınlara karşı koruyan kale duvarları (Fortress) gözüküyor. Osmanlı İmparatorluğu'nun bu duvarları aşıp Heraklion'u (diğer adıyla Kandiye) alması 24 yıl sürmüş.





Girit'ten beklediğim randımanı alamadık. Gezilecek çok yer var fakat zaman çok kısıtlı. Şu anda limandan ayrılmak üzereyiz. 3 yolcu henüz geri dönmemiş. Eğer 15 dakika içinde gelmezlerse gemi yolcuları almadan Atina'ya hareket edecek. Gemiyi kaçırma korkusu ile Girit'i doya doya gezememenin bir eksikliği var şu an içimde.

Wednesday, June 8, 2011

Yunan Adaları Turu - Rodos - Haziran 2011

Ben bu satırları yazarken gemimiz Alexander Von Humboldt Rodos'tan Girit'e doğru ağır ağır ilerlemekte. Bugün ilk defa geminin neden bu kadar yavaş ilerlediğini anladım. Jeton 4. günde ancak düştü. Gemi limandan ayrılır ayrılmaz bir sonraki limana kadar Casino açılıyor. Gemi uluslararası sularda hareket halinde olduğu sürece kumar devam ediyor. İşletmeciler, kumarhane ne kadar çok açık kalırsa o kadar çok para kazanacakları için aksamları 4-5 saatlik yolu 9-10 saatte alıyoruz.

Gemimiz güneye inmeye devam ediyor. Bugün Rodos'u gezme fırsatı bulduk. Yıllarca elden ele geçmiş bu ada Osmanlı'nın da elinden geçmiş. Adayı yıllarca korumayı başarmış Rodos Şövalyeleri Kanuni Sultan Süleyman'ın ordularına direnememiş ve ada 1522 yılında Osmanlı İmparatorluğu'nun eline geçmiş. 1912 yılında Trablusgarp Savaşı sırasında İtalyanlar tarafından işgal edilmiş ve 1948 yılında Oniki adalar'ın diğer adaları ile beraber Yunanistan'ın eline geçmiş. Rodos ile ilgili çarpıcı bir bilgi daha : Türkiye ile Rodos arasındaki en kısa mesafe 18 km.

Limana girer girmez Şövalyeler zamanında yapılan kale ve surları göze çarpıyor. Adada Osmanlı zamanından kalma binalar ve camiler de var. Halen Rodos'ta yaşan 3000 civarında Türk varmış. Aşağıdaki fotoğraf limandan çekildi. Surlar, arkasındaki cami ve kilise Rodos'un geçmişinin küçük bir özeti gibi.




Rodos ziyaretimiz ile Dünyanın Yedi Harikası'ndan birisi olan Rodos Heykeli'ni de gömüş olduk. Gördük dediysem yanlış anlaşılmasın turistik eşyalar satan dükkanların vitrinlerinde görebildik. M.Ö. 280 yılında yapılmış ve yapıldığı yıldan 96 yıl sonra yaşanan deprem ile yıkılmış (Bkz. İskenderiye Feneri) 30 metreyi aşkın bronzdan yapılmış Rodos Heykeli'nin yerine (limanın girişi) aşağıdaki fotoğrafta gözüken iki tane geyiği koymuşlar. Geyik heykellerinin oraya kimin zamanında dikildiğini öğrenemedim. Ne amaçla dikildiğinin mantıklı bir açıklaması vardır elbet.




Rodos'a Şövalyeler adası da diyorlar. Kudüs'ü koruyan Tapınak Şövalyeleri Kudüs düşünce Rodos'a geliyorlar ve 200 yıldan fazla adayı muhafaza ediyorlar. Rodos Şövalyeleri o zamanın güvenlik görevlileri, meslekleri savaşmak olan bir topluluk. Kuşatmalara karşı yaptıkları kale ve surları da görülmeye değer. Surlar lahana yaprakları gibi. Birisinin kapısından girince kalenin içine girdiniz sanıyorsunuz ama başka bir sur çıkıyor karşınıza. O suru geçiyorsunuz başka bir köprü ve başka bir sur ile karşılaşıyorsunuz. Fakat Sultan Süleyman'a dayanamamış bu surlar. Aşağıdaki fotoğrafta kalenin girişi sandığım bir kapıyı görebilirsiniz.




Kalenin içi restoranlar, kafeler ve hediyelik eşya satan dükkanlar ile dolu. Aynı bizim Kapalıçarşı'mız gibi. Aşağıdaki fotoğrafta Kanuni Sultan Süleyman tarafından yaptırılmış camiyi ve minarenin başında nöbet tutan şövalyeyi görebilirsiniz :)




Öğleden sonra Rodos'un meşhur plajlarından birisi olan Falaraki Plajı'na gittik. Mykonos'taki Paradise Beach'ten sonra burası gözüme Kilyos Halk Plajı gibi geldi doğrusu. Hiç bir özelliği olmayan bir plaj bence. Rodos'a günübirlik giderseniz plajda vakit öldürmeyin, kaleyi, çarşıyı ve müzeleri gezin derim. Aşağıdaki foto'da plajdan bir görüntü var.




Yolculuğumuzu kısa kısa anlatmaya çalışıyorum, çünkü biz de kısa kısa gezebiliyoruz. Gezdiğimiz adaların hiçbiri bir günde gezilebilecek adalar değil. Herbir ada için bir hafta ayırmaya değer. Emekli olduğumuzda bastonumuz ile gelir gezeriz artık :)

Tuesday, June 7, 2011

Yunan Adaları Turu - Santorini - Haziran 2011

Gece eğlencesine akan yolcular da geldikten sonra, sabaha karşı saat 4'te gemimiz Mykonos'tan ayrıldı. Sıradaki durak Santorini. Mykonos eğlencenin merkezi ise Santorini de romantizmin merkezi imiş.

Aşağıdaki fotoğrafta gemi Santorini'ye doğru yol alırken Ege Denizi'nde bıraktığımız iz gözüküyor.




Santorini Adası, aslında bir krater. Ortasındaki volkan patladıktan sonra oluşan krater aşağıdaki resimdeki gibi bir görünüm oluşturmuş. Ada, su ve yeşillik fakiri bir ada. Mykonos gibi burada da yeraltı kaynak suyu olmadığı için adaya su anakaradan tankerler ile taşınıyormuş.



Gemi en soldaki adanın sol tarafından kraterin içine girdi. Bu tarafta geminin yanaşabileceği büyüklükte bir liman olmadığı için kraterin içinde demir attı. Adayı gezmek isteyen yolcuları filikalarla adaya taşıdılar. Biz de öğle yemeğinden sonra atladık bir filikaya doğru romantizmin merkezine.




Filikalar ile adaya indikten sonra iş bitmiyor. Yerleşim yerlerini adamlar manzanın en güzel olduğu ve ulaşımın en zor olduğu dağın tepesine yapmışlar. Tepeye çıkmak için üç seçenek var. Birincisi kişi başı 4 avro vererek teleferik kullanmak, ikincisi yukarıya doğru çıkan merdivenleri kullanmak, üçüncüsü de eşeklere binmek. Biz eşeklere acıdığımız için teleferikle çıktık.




Tepeye çıktığınız zaman buraya neden romantizm adası dediklerini anlıyorsunuz. Manzara çok güzel, bakmaya doyamıyor insan. Diğer adalarda olduğu gibi adaya tek bir renk hakim, beyaz. Gemiye dönüşte geç kalarız korkusuyla siyah kumları olan plaja inemedik, böylece bugünü denize girmeden kapatmış olduk. Yarın Rodos'ta bugünün acısını çıkartırız.


Santorini dünya üzerinde en çok fotoğrafı çekilen yerlerden birisiymiş dedi rehber. Aşağıdaki fotoğraflar da benim makinemden çıkanlar.









Monday, June 6, 2011

Yunan Adaları Turu - Mykonos - Haziran 2011

Sabah uyandığımızda gemi Mykonos'a yanaşmıştı. Bugün için sabah kasaba turuna katılmadık. Öğle yemeğinden sonra yapılacak olan Paradise Beach turu için bilet aldık. Kahvaltıdan sonra aşağıdaki fotoğrafta gözüken plajda denize girdik. Bu fotoğrafı geminin terasından çektim.




12:30'da öğle yemeği için restorana gittik. Açık büfe serviste yemeklere saldıran insanların açlıklarının geçmesi için oturduğumuz yerde bir yarım saat yemeklerin başının tenhalaşması bekledik. Denizde olmanın verdiği pisikoloji yüzünden midir nedir insanlar bir daha yemek bulamayacaklarmış gibi tabaklarını doldurup, daha sonra da tabaklarının yarısını yemeden kalkıp gidiyorlardı. Sanırım bu bütün "herşey dahil" tatil paketlerinde böyle oluyor. (Bu bizim ilk herşey dahil tatilimiz)
Saat 2'de Paradise Beach'e gitmek için otobüslere bindik. Aşağıdaki fotoğrafı limandan ayrılırken çektim. Vodafone'da çalıştığım için ufak bir Vodafone reklamı yapayım dedim. Şaka bir yana burada en çok tercih edilen operator Vodafone GR imiş.





Paradise Beach, adı gibi cennetten bir köşe bir yer değil. Çok daha güzel plajlar gördüm (Mesela Fethiye-Ölüdeniz). Burasının cennetliğinin doğal güzelliğinden değil eğlencesinin sınırsız olmasından olduğunu daha sonra rehberlerden öğrendik. Dum-Tıs'lı müziklerden hoşlanıyorsanız ve kokteyl seviyorsanız bu plaj tam size göre. Saat 17'de müziği hafiften vermeye başlıyor DJ'ler. Saat ilerledikçe müziğin ritmi ve sesi artıyor.





Aşağıdaki fotoğrafta tüm kumsal gözüküyor. Deniz çok temiz. Şnorkel ile küçük bir tarama yaptım ve durum Midilli'dekinden farksız : bol ve büyük balıklar...





Plaj beklediğim kadar pahalı değil. Bir şemsiye iki şezlong fiyatı 12 Avro, bira 3-4 Avro, kokteyler 6-10 Avro arası fiyatlardaydı. Bu fotoğrafı da Dum-Tıs'lı eğlencenin hafiften başladığı saatlerde çektim.



Gemideki odamızın Mykonos manzarasını gösteren bir fotoğraf. Odamız 4. katta ve beklediğimden daha güzel. Otel odasını aratmıyor diyebilirim.



Bu da bu yazının bonus fotosu olsun. Okuyan herkese şans getirsin :D

Okey Mini 10 bini gördü

17 Nisan 2011'de Android Market'te yayınladığım okey oyunum Okey Mini 10.000 android işletim sistemli cihaz üzerinde çalışıyor. Reklam istatistiklerine göre Internet bağlantısı kapalı cihazlar haricinde günde 40 bin tane el bitiyor.

Market istatistikleri aşağıdaki resimdeki gibi.
  • 5 puan üzerinden yapılan oylamada ortalama puan 4,6 (466 kişi puan vermiş)
  • 17.800 defa indirilmiş, 7800 kişi beğenmemiş oyunu kaldırmış, active installation sayısı 10 bin.

Android telefonu olup da oyunu merak edenler için market linki https://market.android.com/details?id=com.appsonfire.okey

Doğrusunu söylemek gerekirse oyunun bu kadar populer olmasına çok şaşırdım. Markette yapılan yorumlardan çıkardığım sonuç, kullanıcıların telefona karşı değil arkadaşlarına karşı oynamak istedikleri oldu. Grafik işlerinden anlayan bir arkadaşım ile çalışıp grafikleri düzelttikten sonra multiplayer versiyonu da birkaç ay içinde çıkartmayı düşünüyorum.

Sunday, June 5, 2011

Yunan Adaları Turu - Midilli - Haziran 2011

Bugün ilk güne göre daha güzel geçti. Sabah kahvaltısının ardından acil durum tatbikatı anonsu yapıldı ve odamızdaki can yeleklerini giyip krokide işaretlenen toplanma yerine gittik. 500 kişilik yolcu taşıyan gemide tatbikata sadece 50 yolcunun katılması, bize birşey olmaz mantığından başka birşey değildi bence.

Saat 11 gibi gemi Midilli Adası limanına yanaştı. Yunanistan'ın en büyük 3. adası olan Midilli Ayvalık'a Yunanistan ana karasından daha yakın. Geminin terasından Türkiye kıyıları çok net görülebiliyor. Türkiye'ye o kadar yakınız ki Vodafone Midilli'de full çekiyor.




Kaptan cruise gemisini adeta şehir hatları vapurunu iskeleye yanaştırır gibi Midilli Limanına park etti. Gemiden iniş de resimde görüleceği gibi İstanbul'un güzelim vapurlarını aratmadı. Tek fark gemi henüz yanaşmadan karaya atlayan tipler yoktu :)


Bugün rehberler eşliğinde yapılan Midilli adası turuna katılmadık. Adayı kendimiz gezelim istedik. (Aslında iki kişi 120 Avro veresim gelmedi 4 saatlik ada turu için) Gemiyi saat 3'te terkedebildik. 7 buçuğa kadar vaktimiz vardı. Bir karar vermemiz gerekiyordu: Antik tiyatro, tarihi kilise mi yoksa plaj mı? "Bu sıcakta kim gidecek antik tiyatroya" diye içimden söyleniyordum ki Nurten "Plaja gidelim mi?" diye sordu. "Sen nasıl istersen bir tanem..." derken içimden de "ohhh be" diyordum.



Bu yıl deniz sezonunu Midilli adasında açmış olduk. Henüz denize girememiş arkadaşların gücüne gitmesin ama deniz çok güzeldi. Ege Denizi'nin bizim kıyılarımızda bir çok yerinde denize girdim, daldım fakat Midilli'de deniz altı bizim oradakinden farklıydı. Deniz daha temiz, balıklar daha çok ve daha büyüktü. Bu mevsimde kolum kadar kefalleri, kafam kadar karagözleri görünce bizde niye yok bunlar diye düşünüyor insan. (Neden olmadığı belli aslında, aç gözlü ve bilinçsiz avcılar...)

Aşağıdaki fotoğraftaki heykel biraz tanıdık, gemiye döndükten sonra ufak bir google araştırmasının ardından NewYork'taki Özgürlük Heykeli'nin minyatürü olduğunu öğrendim. Amerika'da çalışmış bir vatandaş memleketine döndükten sonra orada görüp beğendiği heykelin küçük bir kopyasını adanın kıyısına yaptırmış.



Deniz sefasının ardından gemiye döndük. Biz akşam yemeğimizi yerken gemimiz Santorini Adası'na gitmek için Midilli'den ayrılıyordu. Saat 23:00'te Seda Sayan konseri varmış, biraz bakalım sarmazsa casino'ya gider zar atarız :)


Yunan Adaları Turu - İstanbul'dan ayrılış - Haziran 2011

Geçtiğimiz kurban bayramında Bamtur ile Mısır'a gitmiştik. Yarıda kesilen Mısır tatilimizi ve Sharm-el Sheikh havaalanında geçen 1 günümüzü Kasım 2010 Mısır Turu yazısında anlatmıştım.Bu tatsız olayları tatlıya bağlamak için Bamtur tur paramızı iade etti ve bize bir tur hediye etti. Biz de (ben ve eşim Nurten) beleş tur baldan tatlıdır diyerek bindik Bamtur'un Yunan Adalarına giden gemisine.

Bugün gemide ilk günümüz. Saat 18'de Karaköy'deki Denizcilik İşletmeleri Limanındaydık. Bamtur'un klasikleşen organizasyon eksikliği yüzünden gemiye binmemiz 21:00'i buldu. Resimde görüldüğü gibi insanları saatlerce beklettiler.


Gemi limandan saat 23:00'da ancak ayrılabildi. Geminin restoranına saat 21'de oturduk.
21:15'te çay fincanı içinde bir mercimek çorbası içebildik. Saat 22:30'da hala ana yemek gelmemişti. Kepek ekmeği ve bira ile karnımı doyurmak üzereydim ki 22:45'te soğuk ızgara köfteler geldi. Neyse ki yatmadan önce karnımızı doyurabildik.Gemiye bindik yemeğimizi yedik dedim ama yanlış anlaşılmasın odamıza yerleşemedik. Bizim tur hediye tur olduğu için midir bilmem, ikinci sınıf vatandaş gibi hissetmemiz için elinden geleni yapan Bamtur görevlileri koca gemide bizi saat 00:00'a kadar bir odaya yerleştiremedi.

Ben bu satırları yazarken gemi Midilli adasına doğru yol alıyor. Yarın Midilli adası maceralarımızı yazmaya çalışacağım. Bol bol fotoğraf çekip paylaşmayı düşünüyorum. Umarım tatilin kalan kısmı başlangıcından daha iyi olur. Tekrar Bamturzede olmak istemiyoruz.

Sunday, March 20, 2011

Android Uygulama Kaynakları

Android'in kaynakları yönetimi, uygulama geliştirmeye yeni başlayanlar için karmaşık olabilir. Android platformu üzerinde başarılı uygulamalar geliştirmeyi hedefliyorsak aşağıdaki nedenlerden dolayı Android'in kaynak yönetim yapısını iyi bilmemiz gerekiyor.

  • Uygulama, farklı ekran çözünürlüklerindeki cihazları destekleyebilirse, potansiyel kullanıcı sayısı artmış olur.
  • Türkçe uygulama geliştirmek çok güzel fakat, kullanıcı sayısını binlerden yüzbinlere çıkartmak için farklı dilleri desteklemek şart.
  • Uygulama bileşenlerinin (View) ekrandaki dizilimini (layout) zaten karmaşık olan java kodundan ayırmak kodun okunabilirliğini arttırır.
  • Telefonun dikey ve yatay duruşu (screen orientation) için farklı bileşen dizilimleri kullanmak isteyebiliriz.
  • Kullanıcıların uygulumayı özelleştirebilmesi için farklı stiller (renkler, ikonlar) desteklememiz gerekebilir.

Eclipse ile bir Android uygulamasını oluşturduğumuzda resimdeki gibi 4 ana klasör görürüz.


  • src dizininden bahsetmeye gerek yok. Yazdığımız tüm java kodları bu dizin altında paketler içerisinde bulunuyor.
  • gen dizininde aapt (Android Asset Packaging Tool) tarafından oluşturulan ve uygulama kaynaklarına src altındaki java kodundan erişimi sağlayan meşhur R.java sınıfı yer alır. Eclipse ile uygulama geliştirenlerin aapt'yi kullanmalarına gerek yok. Eclipse yeni tanımlanan kaynakları algılayıp R.java sınıfını otomatik güncelleyecektir.
  • assets dizini başka bir yazının konusu olabilir ama kısaca ne amaçla kullanıldığından bahsedelim. Bu dizin altındaki dosyalara sadece java.io.InputStream aracılığı ile erişilebiliyor. mp3 dosyaları, pdf'ler, csv formatındaki data dosyalarını bu dizin altına atıp InputStream aracılığı ile okuyabiliriz.
  • res dizini bu yazının konusu olan dizinimiz. Tüm uygulama kaynaklarımız bu dizin altına koyuluyor.
res dizini altında yer alan kaynak dosyalarından bahsetmeye en kolayından ve en çok kullanılanından başlayalım.

strings.xml

res/values dizini altında tanımlayabileceğimiz kaynaklar arasında en fazla kullanılanı strings.xml'dir. Uygulama içerisinde geçen tüm metinleri strings.xml dosyasına kaydedip java kodu içinden R sınıfı aracılığı ile erişebiliriz. Aşağıda örnek bir strings.xml dosyası ve buradaki metinlere java kodundan nasıl erişildiği gösteriliyor. strings.xml dosyasında sabit metinler dışında değişkenler de tanımlanabilir. Değişken tanımlarken java.util.Formatter sayfasında anlatılan kurallara uyulması bekleniyor.
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="karsilama_mesaji">Merhaba dünyalı. Biz dostuz.</string>
    <string name="karsilama_mesaji_ozel">Merhaba %1$s. Biz dostuz.</string>
</resources>
public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);
   TextView ozelMesaj = (TextView)findViewById(R.id.textView_karsilama_ozel);
   ozelMesaj.setText(getString(R.string.karsilama_mesaji_ozel, "ilkin"));
}
Telefonlarının yerel dil ayarı "FR" olan kullanıcılar için uygulamaya fransızca desteği eklemek istersek, strings.xml dosyasının bir kopyasını olusturup Türkçe metinleri Fransızca karşılıkları ile değiştirmemiz gerekir. Örnek fransızca strings.xml dosyası aşağıdaki gibidir. (google translate sağolsun)
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="karsilama_mesaji">Bonjour terriens. Nous sommes des amis.</string>
    <string name="karsilama_mesaji_ozel">Bonjour %1$s. Nous sommes des amis.</string>
</resources>

Metinlerin fransızca karşılıklarını içeren strings.xml dosyasını aşağıdaki şekildeki gibi res/values-fr dizini altına koymamız gerekiyor. Dili Fransızca olan telefonlarda metinlerin Fransızca karşılıklarını gösterme işini Android platformu bizim için yapacaktır.

Vakit bulursam bir sonraki yazının konusu drawable kaynaklar (renkler, resimler, ikonlar) olacak. Bol Android'li günler :)

Sunday, November 21, 2010

Kasım 2010 Mısır Turu

Last week I've been to Egypt. This post is about what I've seen there. 
It's in Turkish, english readers can enjoy the photos.

9 günlük Kurban Bayramı tatilini fırsat bilip "boyu devrilesice" Bamtur'dan Mısır turu satın aldık. Tur paketinde 2 gün Kahire, 1 gün İskenderiye ve 4 gün de Sharm El Sheikh vardı. Kahire'de piramitleri, İskenderiye'de büyük kütüphaneyi görüp, tatili Sharm'da denizin ve mercanların keyfini çıkartarak sonlandıracaktık. Tatilimizin nasıl sona erdiğini merak ediyorsanız okumaya devam edin.



Mısır'ın başketi Kahire'ye EgyptAir ile uçtuk. Yaklaşık 20 milyon kişinin yaşadığı Kahire'ye, Nil çevresindeki ufak tefek yeşillikleri saymazsak, tek bir renk hakimdi, kum rengi. Unutmadan yazayım, Mısır ile Türkiye arasında saat farkı yokmuş.



14 Kasım 2010 Pazar günü öğleden sonra 3'te otele yerleştik. Piramitlere giden caddenin üzerindeki 4 yıldızlı otelin balkonundan çektiğim bu resim Kahire'deki trafiği gösteriyor. İki gün şehirde gezmemize rağmen bir tane trafik ışığı göremedik. Trafiği kontrol etmek için her kavşağa trafik polisi koymuşlar. İstanbul'un trafiğinden şikayet edenlerin gidip Kahire'yi bir görmeleri lazım, tam bir kaos. Tüm taksiler vuruk içinde, sanki çarpışan araba. Şehirde taksimetreli (beyaz) ve taksimetresiz (Siyah) olmak üzere iki tip taksi var. Taksimetreliler biraz daha konforlu gözüküyor fakat çok pahalı. Taksimetresizlere binmeden once pazarlık yapıyorsunuz, çatpat ingilizce bilen bir şoföre rastlarsanız şanslısınız yoksa anlaşana kadar akla karayı seçersiniz.



Bu resim bayramdan bir gün önce Kahire caddelerinden birinde çekildi. Kasaplar resimde görüldüğü gibi açık hava kasabı şeklinde.



Kahire'de turist olmak gerçekten çok zor. Halk sürekli kazıklama modunda. Ne alırsan al pazarlık şart. 3 Mısır pound'u değerindeki Nil nehri üzerindeki tekne gezintisini 60 pound'a satan Mısır'lı elemana buradan selamlarımı gönderiyorum. (Bu yazının yazıldığı tarihte 1 TL yaklaşık olarak 4 Mısır Pound'u değerindedir). Nil olmasaydı Mısır da olmazdı, %94'ü çöl olan bu memlekete adeta hayat veriyor Nil.









Mısır'a gidip de piramitleri görmemek olmaz. 4600 yıl önce yapılmış bu dev yapıları dimdik ayakta görmek çok heyecan vericiydi. Mısır'lı satıcıların ve dilencilerin yoğun markajı altında piramitleri gezmeye çalıştık. Piramitlerin yapımında halkın firavun tarafından köle gibi çalıştırıldığını düşünürdüm hep. Gerçeği öğrenebilmem için taaa Mısır'lara gitmek gerekiyormuş. (Ne derler bilirsiniz, gitmeden, görmeden bilemezsin...) Gelelim piramitler ile ilgili gerçeğe. Piramitlerin yapımında Mısır halkının çalıştığı doğru fakat halk bunu bir iş olarak yapmış. Bugün çoğumuzun yaptığı gibi sabah 8 akşam 5 çalışıp maaşlarını almışlar. Firavun bu sayede tüm halkına iş imkanı vermiş. Herkesin işi gücü olduğu için de suç oranı yüzde sıfır imiş.

Piramitler ile ilgili aklımda kalan diğer ilginç bilgiler ise şöyle:

  • Piramitler kralların mezarları olarak yapılmış. Ana karnından dünyaya gelip tekrar toprak ananın karnına girişi anlatmaya çalışan bu dev yapılar, ana karnının dünya üzerindeki temsiliymiş.
  • Yapımı 20 yıl süren en büyük piramit tam 140 metre yüksekliğinde. Fransızlar 1889 yılında Eiffel kulesini yapana kadar dünya üzerindeki en yüksek bina ünvanı Büyük Piramit'teymiş.
  • Piramitleri koruması! için firavun Sphinx'i yaptırmış. Aslan vücudu üzerindeki insan kafası kralın halkına karşı olan merhametini ve mantığını, aslan vücudu ise düşmanlara ve hırsızlara karşı kralın vahşiliğini gösteriyormuş.
  • Büyük Piramit yaklaşık 1 milyon 300 bin tane, ağırlığı 2.5 tonla 15 ton arasında değişen taş bloklardan oluşuyor.
  • Piramitler ilk yapıldıklarında şimdi göründükleri gibi basamak basamak değillermiş. Hırsızların tırmanmalarını önlemek için dümdüz sıvalı dış duvarları varmış. Zamanla düşen ve alınan taşlar yüzünden bugünkü basamaklı halini almış.
  • Piramitlerin içine girmek isterseniz görebileceğiniz pek bir şey yok. Mezarlardaki tüm eşyalar ve mumyalar Kahire ve İngiltere'deki müzelerde olduğu için piramitlerin içi (en azından ziyarete açık kısımları) bomboş. 1 metre eninde ve 1 metre yüksekliğindeki tünellerden 20 metre aşağı inerek mezara ulaştık. Sadettin Teksoy'un piramitlerdeki kanter içinde kalarak yaptığı çekimi hatirlarsınız. Aynen o şekilde 20 metre inip çıkıyorsunuz. Görebileceğiniz tek şey boş mezar odaları.

Piramitlerin içinde göremediğimiz tüm tarihi eserleri Kahire Müzesi'nde görme şansımız oldu. Müzeye kamera, fotoğraf makinası ve telefon sokmak yasak. Çok sıkı bir şekilde denetim var. Müzeye girdikten sonra mumyaları da görmek isterseniz ayrıca para verip bilet almanız gerekiyor. (Kişi başı 20 liraydı galiba) Her eserin başında 1 saniye kalarak müzeyi dolaşırsanız müze geziniz yaklaşık 2 gün sürüyor. 200 bin civarında eser sergileniyor.



İki gün Kahire'de kaldıktan sonra, bayramın birinci günü İskenderiye'ye doğru yola çıktık. Kahire-İskenderiye arası 260 kilometre. 3 buçuk saatlik bir otobüs yolculuğunun ardından İskenderiye'ye geldik. Adını Büyük İskender'den (Alexander the Great) alan Mısır'ın ikinci büyük şehri olan İskenderiye Kahire'ye göre çok daha temiz gözüküyordu. İskenderiye, feneri ve kütüphanesi ile meşhur bir kent. Ama ortada fener mener yok. Zamanının ve günümüzün en büyük feneri olarak anılan İskenderiye feneri 1300'lü yıllarda depremlere dayanamayarak yıkılmış. Bugün fenerin olduğu yerde İskenderiye kalesi var.

İskenderiye'deki kütüphane 2002 yılında yeni binasına taşınmış. Yukarıda sağdaki resimde gözüken kütüphanenin dış duvarları. MÖ 282 yılında yapılan kütüphane birileri tarafından yakılmış. Kimin yaktığı kesin olarak blinmiyor, kimin yaktığına dair 3 teori var. Birincisi Julius Caesar, Mısır donanmasını topa tutarken arada kütüphaneyi de yakmış. İkinci bir teoriye göre İskenderiye'de çıkan din çatışmaları ve ayaklanmalar sırasında kütüphane de ateşe verilmiş. Üçüncü bir teoriye göre de, kütüphane İskenderiye Müslümanlar tarafından alındıktan sonra yakılmış. Kim yaktıysa çok ayıp etmiş. 150 bin tane el yazması kitabı yakmak aklı başında birisinin yapacağı iş değil.





Tatilimizin 4. günü (17 Kasım 2010) sabah Kahire havaalanından Sharm El Sheikh'e doğru yola çıktık. 45 dakikalık bir uçuştan sonra Sharm'a ulaştık. Uçağın pencerelerinden Sharm'ın güzel plajlarını, denizinin güzelliğini gördükçe bir an önce otele yerleşip kendimizi denize atmak için sabırsızlanıyorduk. Ama Sharm'ı sadece havadan görebildik. Mükemmel!!! tur şirketi Bamtur otel rezervasyonlarını yaptırmadığı için (Bamtur yetkilileri dolandırıldıklarını söylüyorlar) havaalanında geçen 10 saatin ardından tıpış tıpış İstanbul'a geri dönmek zorunda kaldık. 10 saat boyunca Sharm'da bir tek boş oda bile bulamayan Bamtur görevlilerine karşı olan hislerimi burada yazmaya kalkarsam Google'ın Blogger servisinin de yasaklı siteler arasında girmesinden korkuyorum.

İşte böyle dostlar. Mısır'ı da görmüş olduk şu hayatta. Tüm aksiliklere rağmen Kahire-İskenderiye gezilerimiz ve tur sırasında tanıştığımız güzel insanlar tesellimiz oldu. Uzun lafın kısası siz siz olun Bamtur ile tatil planı yapmayın.