04 May 2012 Friday

Android ile uğraşmaya başlamadan önce sürekli ultrasonik telefonlar kullanan bir kişi değildim. Sıradan bir telefon işimi fazlasıyla görüyordu. Hatta mobil proje olduğu zamanlar mobil projenin ihtiyaç duyduğu cihazı, projeyi talep eden şirketten istiyordum.
Android cihazlarım olmaya başladığı zaman bile uzun süre telefon ihtiyacımı Nokia 6300 ile gördüm.
Bunun tek nedeni yok, pek çok nedeni var:
1) Android cihazlarımın çoğu 1000 TL üzeri cihazlar olduğundan her telefona bakışta düşme ihtimalini göze alamıyordum
2) Nokia’ya çok alışmıştım ve telefona bakmak, SMS göndermek çok daha kolay geliyordu
3) Akıllı telefonları “telefon” olarak kullanmak onlara hakaret gibi geliyordu ve bu cihazları daha çok el terminali olarak kullanıyordum, email, sosyal ağların neredeyse hepsi Android cihazlarımdaydı
4) Avea hattımın internet pakedi yoktu ve zaten mevcut hattımla hiç konuşmasam bile her ay 50 TL ödüyordum (nasıl oluyorsa)
Ama sonra Android’deki rehber ve telefon özelliklerini yeterince bilmediğimi anladım ve Avea’nın Galaxy Nexus kampanyası başladı. 4 GB internet pakedi ile birlikte Android’in yeni geliştirici telefonuna sahip oldum. Nokia 6300’ı emekli ettim ve artık Galaxy Nexus kullanıyorum.
Bu durum çok hoşuma gitti. Çünkü teorisini bildiğim kontak listesinin Google’da durması, diğer 2 hattımın (Vodafone ve Turkcell) da aynı kontaklara anında erişebilmesini kullanmaya başlamak inanılmaz bir konfor olarak karşıma çıktı.
Aynı anda kulaklıktan müzik dinlerken çağrı geldiği zaman yanıt verebilmek gibi özellikleri de kullanmak çok harika oldu.
Fakat halen bir çağrı geldiğinde telefonu düşüreceğim diye ödüm kopuyor,
Telefona bakmak, SMS göndermek gibi konlarda Nokia’nın menülerini arıyorum,
Şu anda 4 adet Android telefonum ve 2 adet Android tabletim var.
Telefonlar:
1) Galaxy Nexus
2) Nexus S
3) HTC Evo 3D
4) Galaxy i7500
Tabletler:
1) Motorola Xoom MZ601
2) Vodafone ZTE Smart Tab 10 (bir blogda bundan bahsedeceğim)
Şimdi bu manzaraya bakınca ipin ucunu kaçırmışım gibi görünebilir ancak bu cihazların hepsi birbirinden farkı özelliklere sahip ve bana proje testlerinde çok büyük bir hareket imkanı sağlıyor.
1) Galaxy Nexus 1280 x 720 çözünürlükte ve pek çok uygulamanın bu cihaz ile uyumlu olmadığını görmüş oldum.(Android 4 uyumundan bahsetmiyorum)
2) HTC Evo 3D ise ekran ve ağırlık hariç şu ana kadar kullandığım en iyi cihaz ve Android 2.3 testlerimde bu cihazı kullanıyorum ama ekran çözünürlüğü QHD yani 960 x 540
3) Nexus S sol tarafındaki algılama problemine rağmen şu an Android 4.0.4 çalıştıran tek cihaz. Üzerinde her türlü test yaptığım hatta ROM derleyip yüklediğim tek cihaz. Sol tarafındaki takılma problemi bir ekranı kere kilitleyip tekrar açınca düzeliyor bu arada
4) Galaxy i7500 ise Android 1.6 çalıştıran ve en küçük ekrana sahip cihaz.
Bu cihazlarla çalışırken biraz fazla sayıda olduklarını düşündüm. Aslında bana Galaxy Nexus ve Galaxy i7500 yeterli.
Yani HTC Evo 3D ve Nexus S’i satıyorum efendim (evet bu kadar yazının altından ticari bir iş çıkacağını tahmin etmemiştiniz sanırım hehe)
HTC Evo 3D’yi biraz da HTC One X alabilmek için mi satıyorum emin değilim. Ama cihaz sağlam ve çiziksiz olup garantisi ile birlikte fiyatı 900 TL’dir.
Nexus S’e ise istediğim fiyat: 700 TL (sol tarafında ekranı kapatıp açarak düzelen bir dokunmatik problemi var, kulaklık ve şarj aleti yok ama USB kablosu var, garantisi de yok)
Neyse efendim umarım sıkılmamışsınızdır.
Özetle iletişimi birleştirdim ve mutluyum :)
Java'da JTA (Java Transaction API) ile transaction yapmak mümkün.
Hibernate'te şöyle yapılıyor:
Pseudocode:
method(){
try{
tranasction.begin();
islem();
tranasction.commit();
}catch(exception){
transction.rollback();
}
}
Spring ise AOP ile pattern vererek şu isimde olan bütün sınıfların içindeki şu methodları transactional yap diyebiliyoruz. Bu durumda Spring AOP ile sınıflara hiç dokunmadan transaction methodlarını ekliyor. Örnek bir konfigürasyon:
<aop:config>
<aop:pointcut id="txManager" expression="execution(* org.btdeneyim.mblog.service.*Service.*(..))"/>
<aop:advisor id="advPerf" pointcut-ref="txManager" advice-ref="performanceMonitorInterceptor" order="0"/>
<aop:advisor id="advTx" pointcut-ref="txManager" advice-ref="txAdvice" order="1"/>
</aop:config>
Spring MVC 3 ile hiç request nesnesine bakmadan doğrudan obje gönderip almak mümkün. Örnek:
@RequestMapping(value = "/login")
@ResponseBody
public User user(@RequestBody User user) {
işlemler...
return user;
}
Fakat bu metoda düşecek talebin marshalling olarak ne tipte olacağını Spring servlet contexte söylemek gerekiyor. Mesela burada JSON ile veri göndereceksek GSON veya Jackson message converter ayarlaması yapmamız lazım:
Örnek:
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
</list>
</property>
</bean>