3 Ocak 2017 Salı

Android Kütüphanesinde Initialization ve Context'e Ulaşım


Android geliştirme ortamında basit bir işlem(resource'lara ulaşım vs) yapmak için bile context instance'ına ihtiyaç duyarız. Yazdığımız sınıflarda context'e ulaşmak için context'i oradan oraya sürekli parametre olarak aktarmaktan sıkılıyor/üşeniyorsanız aşağıdaki gibi bir Application sınıfı yazarak bu külfetten bir nebze de olsa kurtulabilirsiniz:

28 Nisan 2016 Perşembe

Anotasyon İşleme İle Kod Oluşturma


Java 5 sürümüyle hayatımıza giren anotasyonlar (annotations) bugün pek çok modern framework tarafından -konfigrasyon ağırlıkta olmak üzere- kullanılmakta; spring tarafında bean tanımlamalarında, bağımlılık enjektesinde, mvc routing'de, orm kütüphanelerinde tablo, kolon vs tanımlamalarında, AOP'de vs. Bu çözümlerde anotasyonlar genelde yansıma (reflection) ile çalışma zamanında kullanılıyor. Oysa anotasyonlar derleme zamanında da kullanılabiliyor. Bunu sağlayan yapı java derleyicisi(javac) ile entegre calisan Annotation Processor Tool (APT). APT ile cok kolay biçimde derleme zamanında kod üretimi (Code Generation) yapılabiliyor.

29 Ocak 2016 Cuma

Android Üzerinde Basit MVP Uyarlaması


Merhaba Arkadaşlar,

Bu blog yazısında android uygulama geliştirirken MVP kalıbı nasıl uygulanır temel haliyle anlatmaya çalışacağım. MVP MVC, MVVM gibi MV* (mv-whatever) kalıplarının farklılaşmış bir şekli olup Model View Presenter kelimelerinin kısaltmasıdır. Temel mantığı kullanıcı arayüzü (ui) ile iş kurallarını (business logic) birbirinden ayırmak (bkz. separation of concerns). MVP kendi içinde supervising presenter ve passive view olarak ikiye ayrılır, ben passive view üzerinde duracağım.

10 Temmuz 2015 Cuma

Java Kütüphanesini Maven Reposunda Gönderme



Merhaba Arkadaşlar,

Android Studio ile geliştirme yaparken ister istemez, kendimce gradle ile epey haşır neşir oldum. Bu süreç içerisinde bir çok farklı plugin ile çalıştım. Bu yazıda sizlere çok faydalı bulduğum ve kullanmaktan keyif aldığım bir gradle plugin'inden bahsedeceğim: The Maven Plugin.

29 Haziran 2015 Pazartesi

Android Dinamik Sınıf Yükleme



Merhaba Arkadaşlar,

Yazılım geliştirirken bazen classpath'e dinamik sınıf yüklememizi gerektirecek bir durum oluşabilir; plugin tabanlı, esnek ve genişletilebilir mimari kurmak veya uygulama konfigrasyonuna bağlı olarak runtime'da *.jar yükleme gibi. Neyse ki bu gibi durumları kotarmak için jvm tarafında Class Loader yapısı bize bu olanağı sunuyor.

22 Temmuz 2014 Salı

Android İçin Dependency Injection Çözümü: Dagger


Selam,

Yazılım pattern'leriyle ilgileniyorsanız mutlaka duymuşsunuzdur dependency injection kavramını. Özünde bu desenin amacı; yazılım birimlerinin birbiriyle gevşek bağlı(loosely coopled) olmasını sağlamaktır ki bu sayede birimlerin birinde meydana gelen değişim diğer birim(ler)in de değiştirilmesini gerektirmez ve değişime daha açık bir yapı kurgulamış olursunuz. (bkz. SOLID Open-Closed ve Inversion of Control)

17 Temmuz 2014 Perşembe

Android Eventbus(Otto) Kullanımı


Geliştirme yaparken yazdığınız sınıfların bağımlılıklarının düşük olması önemli bir kriter, bu sayede kurduğunuz yapı kolay genişletilebilir, test edilebilir ve yeniden kullanımı kolay bir hal alır. Sınıflar arasında  bağımlık genelde interface'ler kullanılarak düşük tutulur. Ancak bu yaklaşımın olumsuz yanı callback'ler vs.'den kaynaklanan boilerplate code. Fakat biz publisher-subscriber(observer) mekanizmasını kullanarak hem gevşek bağlı(loose coupling) birimler oluşturup hem de boilerplate code problemini kotarabiliriz. Bu noktada piyasadaki eventbus kütüphanelerinden faydalanabilirz.

11 Temmuz 2014 Cuma

Android DatePickerDialog'daki DayPicker'i Gizleme


Merhabalar,

Android'de ekranda fazla yer kaplamadan kullanıcıdan tarih bilgisi almanın yolu, içerisinde tarih seçicisi bulunduran DatePickerDialog'dan geçer. Bu dialog tipi içerisinde DatePicker komponentini barındırarak gün, ay ve yıl spinner'larıyla tarih seçme işlemini kolaylaştırır.

25 Nisan 2014 Cuma

Daha Okunabilir Kod ve Yaşanabilir Dünya İçin Enum'lar

Selamlar,

Enum(Enumaration) tanımlamaları programlama dillerinde belirli değerlere karşılık gelen sabit değerlerin temsili için kullanılırlar, haftanın günleri, yönler vs gibi. Geliştiriciye sağladığı faydalar ise kod okunabilirliğini arttırması, muhtemel değer kümesinin daraltılması ve tip güvenliğini sağlaması dolayısıyla hata payını en aza indirmesi. Ben enumları java dili üzerinden ele alacağım; enum sabiltleri java'ya jdk 1.5 sürümü ile eklenmiştir, ayrıntılar için buraya tıklayınız. Daha öncesinde enum'un üstelendiği görev constant'lar ile kotarılıyordu. "Peki o zaman ne gerek vardı dile enum tipini eklemeye?" diye sorabilirsiniz, ilerleyen bölümlerde sebeplerini açıklıyor olacağım, şimdilik okunabilirlik tarafıyla devam edelim.

17 Nisan 2014 Perşembe

Çok Parametre Alan Metotlar ve Builder Pattern


Merhaba Arkadaşlar,

Bildiğiniz üzere java'da optional parameter ve named arguments desteği yok dolayısıyla bazen çalıştığımız sınıflar içerisinde çok parametre alan constructor ve metotlarla karşılabiliyoruz, bu da ilgili sınıfın kullanımını ve okunabilirliğini zorlaştıran bir durum. Özellikle nesne inşası sırasında istenen parametrelerden çoğu kez 2-3 tanesi bizi ilgilendiriyor fakat ihtiyaç duyduğumuz parametreler için uygun overload olmaması yüksek ihtimal, üstelik ilgi parametrelerin çeşitli kombinasyonları için overlaod'lar yazmak başlı başına bir yük.

24 Mart 2014 Pazartesi

Widget'i AlarmManager'la Yenileme


Herkese Selam,

Bildiğiniz gibi android widget yenileme sıklığı(updatePeriodMillis), batarya ömrünü uzun tutmak adına minimum 30 dk ile sınırlı. Fakat gün geldi bir sebepten daha düşük periyotta widgeti yenileme ihtiyacınız oldu, nasıl bir çözüm giderdiniz? Bu durumda biraz düşününce eminim aklınıza AlarmManager sınıfını bu iş için kullanmak gelecektir.

12 Mart 2014 Çarşamba

Android Service'den Activity'e Deger Dondurme (Haberlesme)


Merhaba Arkadaşlar,

Android komponentleri arasında haberleşme genellikle intent'ler üzerinden gerçekleşir. Intent tipinin bol overload'lu putExtra() metoduyla, primitive tipler veya kendi oluşturduğunuz sınfların serilize edilebilir(parcelable, serializable) nesne örnekleri, iki android komponenti arasında taşınmasıyla haberleşme sağlanmış olur. Misal activity içerisinden service başlatırken intent ile service'e bir takım veriler aktarılabilir. Ne var ki aksi yönde bir iletişim bu denli basit değildir, zira service'ler genelde artalanda takılan ve önyüzle mümkün mertebe muhattap olmayan gizli kahramanlardır.

10 Aralık 2013 Salı

Distinct İslemi Yapmanin 4 Yolu


Merhaba Arkadaşlar,

Yazılım geliştirirken zaman zaman eldeki koleksiyon tipindeki veriler üzerinde kolon(lar) bazında distinct(farklı, ayrı) işlemiyle benzer kayıtları filtrelememiz gerekebilir. Sql tarafında bu işlem için "distinct" komutu vardır; .net tarafında Enumerable sınıfı içerisindeki Distinct() genişletme metoduyla veya çeşitli linq sorgularıyla bu işlem kotarılabilir. İşin özünde nesnelerin farklılığını saptama olduğundan, eldeki çözümler artalanda nesnelerin kimlik niteliği olan hasCode'a dayanır. Tüm sınıflar örtülü olarak Object sınıfından kalıtıldıkları için de her nesnenin Object sınıfı üzerinden gelen GetHashCode() metoduyla nesnenin hash koduna ulaşılıp eş(it)lik kontrolü yapılabilir.

30 Ekim 2013 Çarşamba

Farkli Bir Assembly'deki Internal Metodu Reflection Ile Cagirma


Merhaba Arkadaşlar,

Bildiğiniz üzere nesne yönelimli programlamada, bir sınıfın private erişim belirleyecisi(access modifiers) ile tanımlanmış öğelerine(class, struct, method, property, field) kapsülleme mantığı gereği o sınıf dışında ulaşamıyoruz. Yine hatırlarsanız internal erişim belirleyicisi ile tanımlanmış öğeler ise bulunduğu assembly’nin dışında erişime kapalıdır. Fakat gün geldi erişime kapalı bir öğeyi kullanmaya ihtiyacınız oldu ya da sırf gıcıklığına buna yeltendiniz; o zaman okumaya devam edin :]

15 Ağustos 2013 Perşembe

Asp.net MVC CheckBoxList(Helper) Kullanimi


Merhaba,

Bildiğiniz gibi asp.net mvc'nin etkili ve geliştirme sürecini kısaltan özelliklerinden birisi de, textbox, label, dropdownlist vs gibi html komponentlerini kolayca oluşturmamızı sağlayan geniş html helper kütüphanesi. Fakat çoklu seçim işlevselliğini sağlayan "CheckBoxList" komponenti için, html helper kütüphanesinde herhangi yardımcı genişletme metodunun varlığı söz konusu değil. Bu problemi çözmek için yazılımcılar olarak kolları sıvayıp view üzeride razor'un da yardımıyla döngüye girip istenen html çıktısını elde edebiliriz:

1 Ağustos 2013 Perşembe

Kendi AutoMapper'ımızı Yapalım


Merhaba Arkadaşlar,

Veri merkezli uygulamalarda, katmanlar arasında veri alışverişi yarparken kullanıcı katmana veriler çoğu kez aracı tipler(DataTransferObject) vasıtasıyla taşınır. Özellikle veri katmanında orm teknolojilerinin kullanıldığı projelerde aracı servis katmanında, transfer objesi(dto) ve veritabanı objesi(entity) arasında kolonsal(properties) eşleştirmeyi tek tek yapmak yazılımcı için sıkıcı bir süreç. Konuyu koda dökerek somutlaştırılam:

29 Temmuz 2013 Pazartesi

Asp.net MVC Birim Testleri Yazarken Session’ı Taklitleme(Mocking)


Merhaba,

Bu blog girdisinde aspnet mvc projelerinde controller’a birim testleri yazarken karşımıza çıkan bir probleme çözüm getirmeye çalışacağım: Session’ın taklit edilmesi.

Aspnet MVC Framework’ü günümüz yazılım gerekliliklerinden biri olan”test edilme” özelliği gözetilerek geliştirildiği için controller, model vs üzerine kolayca birim testleri yazılabilir. Fakat HttpSession, QueryString, HttpContext gibi temel tiplerin kullanıldığı senaryolara yönelik test yazarken, bu tiplerin taklit edilmesi başlı başına bir iş olabiliyor. Çünkü test ortamında controller’ın nesnesini oluşturduğunuzda maalesef HttpContext, Request vs gibi web ortamından doğan bağımlılıkların değeri atanmamıştır:

Android Emülatörünü Hızlandırma


Android yazılım geliştirmenin en çekilmez taraflarından biri kuşkusuz hantal emülatörüdür. Bu problemi android telefonunuzla aşmanız mümkün fakat developer olarak küçük uygulamaları bile test etmek için telefonumuzun usb kablosunu pc'mize takmak bile bazen çok meşakkatli görünebiliyor gözümüze :]. Tabii bunun yanında telefonumuzla test yaparken göremediğimiz, uygulama dizininindeki dosya ve veritabanlarını görüntülemek gibi işlevsellikler de var.

AsyncTask'den Değer Döndürmek


Merhabalar,

Android uygulaması geliştirirken bir kaynak tüketimi(internetten dosya çekmek vs.) söz konusu olduğunda bildiğiniz üzere, işlem sırasında grafik arayüzünün(ui) donmaması için bu tarz uzun süreli işlemleri ui thread yerine ayrı bir thread'de ele almak gerekir. Bu işlemi ayrı thread'de koştururken kullanıcıya da işlemin tamamlanma süreci progressbar ile gösterilirse hoş bir deneyim sağlanmış olur.