Genel bir iki not

Askerlik ile ilgili yazım uzuyor. Çünkü bu önemli bir konu ve elimden geldiğince kendi deneyimim doğrultusunda iyi bir şeyler çıkarmaya çalışıyorum.

Ama bu arada bahsedilecek bir şey var ki… Bu sabah normal rutinimin dışına çıkıp Yeşilköy -> Mecidiyeköy yolunu yaptım. Aman Allah ım, inanılmaz gereksiz bir trafik. Ne bir kaza ne bir çalışma.. Anladım ki bu istanbul trafiği bizlerin ruhunu ve enerjisini emmek için yapılmış özel bir tasarım. Cem kişisinin bu konuda çok şahane bir tviti oldu bugun paylaşmak istiyorum :

I am capitalism and you spend 3 hours a day to make oil companies bigger and richer. (Türkçe meali : Ben kapitalizmim ve sizler her gün 3 saatinizi petrol şirketlerini büyütmek ve zenginleştirmek için harcıyorsunuz.)

Ayrıca sonbahar geldi lan, artık böyle leş gibi terlemeyeceğiz sokaklarda, mis gibi pazar günlerinde istanbul sahillerine akın edip güneş banyosu yapacağız ve yine terlemeyeceğiz.

Neyse yakında görüşmek üzere.

PhoneGap ve Mobil Geliştirme

Herkese merhaba,

Geçenlerde bir projenin analizini yaparken ne kadar çok farklı mobil client desteklemek zorunda olduğumuzu fark ettim. Buna çözüm olarak da XHTML kullanmaya karar verdik. Fakat daha sonra XHTML in bile hangi mobil cihaz browserı kadar desteklediğinden emin olamadığımızın farkına vardık.

Sonrasında aslında uzun zamandan beri geliştirmelerine devam eden bir gruptan haberimiz oldu. Bu grup (Nitobi Software adında www.nitobi.com) PhoneGap isimli bir proje üzerinde çalışıyor. Peki nedir bu PhoneGap?

HTML 5 ve CSS3 ün ortama salınması ve über gelişmiş Javascript kütüphaneleri ile herkes biraz çalıştıktan sonra çok güzel görünen web uygulamaları yazabilir. Bunlar neredeyse dünyada en çok uyulan standartlar bildiğiniz üzere. Fikir basit: Biz oturuyoruz güzelce bir HTML/CSS/Javascript uygulaması (diğer bir deyişle web sitesi) yazıyoruz. Sonrasında adamların wrapper fonksiyonlarını kullanıyoruz ve bu yardımcı sınıf ve metodlar sayesinde uygulamamız istediğimiz (istediğimiz dediğim şimdilik IOS/Android/Symbian/Blackberry vs ile sınırlı) mobil ortamda çalışabilecek özellikleri kazanıyor.

Esasında çok temiz olan mevzu şu ki, adamlar native uygulama çalıştırıyorlar. Amaa, bu büyük bir ama, bu native uygulama esasen sadece cihazın native browser ını çağırıyor ve sonrasında orada sizin hazırladığınız HTML uygulamasını çalıştırıyor.

İşin enteresan kısmı başlamak  oldukça kolay olmasına rağmen, adamlar parayı support kısmından bulma fikrinde olduklarından, kaynak bulmakta oldukça zorlanıyorsunuz. Ben de bu yüzden Android kısmında bir Hello World nasıl çıkartılıyor, kısaca bahsedeyim..

İlk olarak projemizi normal bir şekilde oluşturuyoruz :

Daha sonra projenin kok dizininde /libs ve /assets/www klasörlerini oluşturuyoruz. Bu klasörlere phonegap ile ilgili kütüphane ve dosyaları atacağız. phonegap.js dosyası /assets/www klasörüne, phonegap.jar dosyası da /libs klasörünün altına atılıyor. Ayrıca xml klasörünü de res klasörünün altına kopyalamanız gerekiyor.

Sonraki adımlarınızda ilk olarak activity sınıfını extend etmistik, oradaki Activity sınıfı DroidGap sınıfı ile değiştirmeniz,

setContentView metod çağrısını “super.loadUrl(“file:///android_asset/www/index.html”);” ile değiştirmeniz,

import.com.phonegap.*; cümlesini eklemeniz ve karşılığında Activity sınıfı ile ilgili import cümlesini çıkarmanız gerekiyor. Son görüntünün şuna benzer bir şey olmuş olması gerekiyor :

javaSrc

Bundan sonrası biraz daha düz gideceğiniz bir kısım, AndroidManifest.xml dosyamızı açıyoruz ve aşağıdaki bilgileri versionName kısmından sonra giriyoruz :

 

manifest

 

Şimdi gerçekten kodumuzu yazacağımız yere geldik, demin oluşturduğumuz assets/www dizininde index.html dosyamızı oluşturuyoruz. HTML dosyasında istediğiniz herşeyi koymakta serbestsiniz ama üstünde çalıştığınız telefonun özelliklerine erişmek istiyorsanız phonegap in javascript kütüphanesini şu satırla eklemeniz gerekiyor :

<script type=”text/javascript” charset=”utf-8″ src=”phonegap.js”>

Bunu da tamamladıktan sonra geriye sadece Android uygulamasını emülatörde çalıştırmak kalıyor. İyi kodlamalar! (Bu blog girdisini yazmaya başladıktan hemen sonra Titanium framework ünü keşfettik. Bu elemanların kodlarını öğrenmek başta ne kadar da zor olsa, hem tüm görseller native nesnelere çeviriliyor ve hem sadece javascript kodlayarak geliştirme yapıyoruz, tek dezavantajımız şimdilik sadece İOS ve Android desteği mevcut. Kim sallar zaten Blackberry i : p)

İz Mermileri ve Yazılım Projeleri

Herkese merhaba,

Andrew Hunt ve David Thomas’ın ibretlik çalışması The Pragmatic Programmer kitabında enfes bir bölüm okudum geçenlerde. Bu bölümün en azından Türkçe yorumunu sizlerle paylaşmam gerektiğini düşünüyorum.

Askerlikte, gece çatışmaları ayrı bir önem taşır çünkü genelde hedefinizi işler son raddeye gelinceye kadar göremezsiniz. Çatışma çıktığında işler karışır ve özellikle makinalı tüfek kullanan tim elemanlarının azami dikkat etmesi gereken bir kaç dakika yaşanır. Makinalı tüfek erinin, ateş etmeye başlamadan önce karşı tarafın ateşinin en azından yönünü tespit etmesi gerekir ki kendi elemanlarını vurmasın. Peki bu nasıl yapılır, ses ve iz mermileri ile yapılır. Sesin geldiği yöne bakarsınız ve sonra iz mermilerinin çıktığı yere hedef alırsınız.

Fakat burada Hazır Ol, Nişan Al ve Ateş! emrinden farklı olaylar gelişir. Karanlıkta nişan alabilmeniz çok uzun sürer bir kere, tüfeğin gezinden baktığınızda zaten karanlık olan dünya iyice karanlıklaşır ve herşey görünmez olur. Bu yüzden burada sırayı değiştirmek gerekir, Hazır Ol, Ateş Et, Nişan Al ve Tekrar Ateş Et! emrini uygularsınız. İz mermileri her 10 yada 20 mermide bir fosfor taşıyan mermilerdir ve tüfekten çıktığı andan itibaren arkasında iz bırakarak hedefe ilerler. Siz de bu iz mermileri sayesinde nereyi vurduğunuzu bilir ve gerekirse nişanınızı ona göre yeniden düzenlersiniz. Ve eninde sonunda hedefi vurursunuz, tabii o sizi daha önce vurmadıysa :). Bu arada denizci olarak askerlik yaptım, bunları da sadece teorik olarak dinledim komutanlarımdan :).

Yazılım projelerinde de benzer bir yaklaşım uygulayabiliriz(hayat fazla derecede askerliğe benziyor ya ona da ayrıca bitiyorum 🙂 ). Diyelim ki yeni bir projeye başlıyorsunuz. Ve ilk deneyeceğiniz işler olacak. Bu durumda, herşeyi baştan tasarlayıp, inciğine kadar detaylandırıp, uzun uğraşlardan sonra tasarımın tamamını ortaya koyabilirsiniz. Bu en temel yazılım mühendisliği çalışma şeklidir ve herkesin aklına ilk bu çözüm gelir.

Fakat bu kadar tasarımda ya hata yaptıysanız? Başa dönmeniz için yeterli vaktiniz kaldı mı? Takımın morali ne durumda? Hali hazırda müşterileriniz varsa onlara ne söyleyeceksiniz? Patronunuza da açıklama yapmanız gerektiğini unutmayın. Sonuç olarak bayağı bir stresse gireceğiniz kesin gibi görünüyor :). Peki bunun yerine ne yapabilirdik?

Bunun yerine, bizi zorlayacak sistemin tek başına çalışabilecek en küçük iskeletini ortaya çıkarabilirdik. Bakın burada prototiplerden bahsetmiyorum çünkü prototip kodlar kullanılmaz, atılır. Burada sistemin en küçük ve basit mimarisinin çıkarılmasından söz ediyorum. Diyelim ki akıllı bir telefondan uzaktaki bir sunucuya bağlanıp, çalışanlarınıza işler atayıp, onlara e-posta yoluyla haber verebilen ve geri besleme alabilen bir çözüm hazırlamanız gerekiyor. Burada ilk olarak, akıllı telefondan uzak sunucuya bağlanıp, oradaki veritabanına veri girip, sonuç olarak boş bir mail gönderen bir iskelet yazılım hazırlamalısınız. Görebileceğiniz gibi bu bir prototip değil, esas sisteminizin en temel parçasını çıkarmış oluyorsunuz. Bunun üzerine diğer akıllı telefonları desteklemeyi, iş tipleri girmeyi, değişik mail adreslerine zamanlı olarak mail atmayı, alınan cevabı işlemeyi de yapabilirsiniz.

Yani sistemin en temel halini en çabuk şekilde hazırlarsanız, projeniz büyük ihtimalle başarıya ulaşacaktır.

Sistemin diğer özelliklerini uygulamayı da kolaylıkla yaparsınız çünkü elinizde en basit işlemin hazır örneği bulunmaktadır. Kolaylıkla yaparsınız çünkü moraller yüksektir, her adımda hedefe yaklaşırsınız.

Aynı izli mermiler gibi…