Haftalık Bülten | 19-25 Ocak 2015

Bu hafta geçen haftaya oranla daha yavaş geçti. Hastalıktan dolayı iki tam günümü yatakta geçirdim. Kalan zamanımını da işte her hafta olduğu gibi biraz development biraz da başka tooları inceleyerek geçirdim. Bu sebepten geçen haftaya nazaran daha az şey öğrendiğim ve yaptığım bir hafta oldu.

Development

SpringMVC ve AngularJS

Bu hafta androidden ziyade daha çok REST mimarileri ile vakit geçirdim. Bir kaç ay önce seyretmeye başladığım bir tutorial’ı anca bitirmeye fırsatım oldu. Tutorial genel olarak JPA+Spring+SpringMVC+AngularJS üzerineydi. Güzel yanı SpringMVC ve diğer sunucu katmanları TDD ile geliştiriliyordu. Böylelikle hem SpringMVC kullanılarak REST uygulamarının nasıl geliştirilebileceğine hem de bunu TDD kullanılarak nasıl yapılabileceğine bakmış oldum. Kullanılan sunucu teknolojilerinden kısaca bahsetmek gerekirse

  • Spring MVC: Spring ailesinin REST tabalnlı uygulama geliştirmekte kullanabilecek kütüphanesi. JAX-RS ya da başka REST teknolojileri varken neden bunu kullanalım gibi bir soru gelebilir aklınıza, açıkçası spring ve spring security entegrasyonunun çok rahat olması haricinde bir neden gelmiyor aklıma. Ama piyasaya baktığınızda genel olarak AngularJS tabanlı uygulama geliştirenlerin ilk tercihi oluyor.
  • Spring Security: Authentication ve Autherization konularında en çok kullanılan kütüphanelerden biri. Tutorail içerisinde de bunu Srping MVC ile nasıl entegre edileceği anlatılıyor.
  • Mockito: Tutorialın TDD ile ilerlediğinden bahsetmiştim. Uygulama aynı zamanda katmanlı yapıda geliştiriliyor. DAO ve service katmanları bulunuyor. En sonunda da SpringMVC üzerinden rest olarak yayınlanıyor. Tüm bu katmanlar test edilirken, katmanı desteklen alt katman mockito ile “mock”lanıyor.
  • JsonPath: Yine test kısmında kullanılıyor. REST servisleri JSON dönecek şekilde ayarlanıyor. Testlerde bu Json nesnelerinin assert edilmesi gerekiyor. İşte bu noktada JsonPath kullanılıyor. XPath’in JSon versiyonu olarak düşünebilirsiniz.

AngularJS tarafında ise, ngBoilerplate projesi template olarak kullanılıyor. Her modern JavaScript uygulamasında olduğu gibi bunda da NodeJs kullanılıyor. NodeJs bildiğiniz gibi sunucu tarafında JavaScript çalıştırmak için kullanılıyor. Tutorial çerçevesinde ise sadece çeşitli javascript araçlarının kullanılması için kullanılıyor. Yani sadece development ortamında kullanıyoruz. Client ve Server tarafını geliştiren ekipleriniz farklı ise hiç bir sorun yaşamayacaksınız. Her ekip kendini rahat hissettiği ortamda çalışabilecek. ngBoilerplate gerçekten çok modern bir client katmanı kullanıyor. Tutorial’ı seyretmeye zamanınız olmasa bile, ngBoilerplate projesini incelemenizi tavsiye ederim. Şimdi ise kullanılan teknolojilerden bahsedelim.

  • NPM: NodeJS in paket yöneticisi. NodeJS yüklediğinizde kendisi de otomatik olarak yüklenecektir. Web kısmındaki package.json dosyasını okuyarak gerekli paketleri yükleyecektir. Bu yüklenen paketler sadece development ortamında kullanılacak paketlerdir. Angularjs yüklemesi NPM yapmayacaktır. Grunt ve Bower’in zaten yüklenmiş olacağını düşündüğümüzden, NPM sadece grunt’ın kullanacağı tasklara ilişkin modülleri yükleyecektir.
  • Grunt: JavaScript dünyasının Ant uygulaması gibi düşünebiliriz. Bizim için JavaScript dosyalarını, derleyip, küçültüp production’a hazır hale getirecek. Ek olarak Saas ya da LESS gibi CSS dosyalarınında derlenmesinde rol alacaktır. Hatta isterseniz CoffeeScript kullanıp, bunun JavaScript olarak derlenmesini de sağlayabilirsiniz.
  • Bower: JavaScript dünyasının client tarafının paketlerini yönetmekte kullanılıyor. Jquery, Angular JS, Bootstrap ya da benzeri client tarafı kütüphanelerini Bower bizim için yüklüyor. Bower, bunlara ek olarak, eğer kullandığınız kütüphanenin başka bir JavaScript kütüphanesine bağımlılığı varsa bu bağımlılıkları da indiriyor. Daha sonra Grunt bu indirilen paketleri sizin için derleyip minified hale getirebildiği gibi, tek bir vendor.js dosyası haline de getirebiliyor.

Grunt kullanarak LiveReload tarzı şeyler yapıp istemci tarafındaki geliştirmelerinizi hızlandırabiliyorsunuz. Bunun nasıl yapılacağı ngBoilerplate sitesinde ve Tutorialda ayrıntılı olarak anlatılıyor. Geliştirmede kullandığımız teknolojilerden bahsettik, birazda istemci tarafındaki teknolojilerden bahsedeyim.

  • AngularJS: Tutorialın asıl amacı. Hem çok beğenilen hem de çok eleştirilen JavaScript kütüphanesi. Hem beğenilip hem eleştirilmesinden anladığımız üzere oldukça popüler. Benim de radarımda olan iki kütüphaneden biri. Diğeri ise polymer, yine google tarafından geliştirilen başka bir javascript kütüphanesi.
  • Bootstrap: Hemen hemen tüm sitelerde kullanılan kütüphane. Fazla detaya gerek olduğunu sanmıyorum.
  • UI Router: AngularJS ailesinde routing işlemi için farklı kütüphaneler var. Benim daha öncesinde ngRoute ile uygulama geliştirmiştim. Bu kütüphaneyi ngBoilerplate ile gördüm. Fakat bana çok daha kolay ve rahat kullanılabilecek bir kütüphane gibi geldi. En kısa zamanda bu kütüphaneyi kullanarak bir iki deneme yapacağım.

Tutoril kısaca bu şekilde. Size de seyretmenizi tavsiye ederim.

Yanlız bir iki de eleştirim olacak tutorial ve kullanılan araçlarla ilgili olarak;

  • Eğer çok büyük bir uygulama geliştirmiyorsanız, ngBoilerplate biraz fazla gelebiliyor. Sunucuda Java yazan ekibiniz gidip Client tarafında da kod geliştirecekse nodejs, grunt ya da bower ile uğraşmak istemeyeceklerdir. Bunun yerine kullanılan herbir istemci kütüphanesini indirip projeye eklemek daha güzel olabilir.
  • ngBoilerplate kullanmak paket çıkarken, CI ya da CD yaparken sorun çıkarabilir. Maven ile projeyi derleyip paketlemeden önce, kalkıp önce grunt ile taskları çalıştırmak, bower ile bağımlılıkları çekmek gerekebilir. Bu da işinizi zorlaştırabilir.
  • Eğer büyük bir proje geliştiriyorsanız, sunucu ve istemci tarafınızı farklı ekipler geliştiriyorsa da projelerinizi bölmeniz daha mantıklı olabilir. Böylelikle iç içe iki farklı proje yapısından kurtulmuş olursunuz.

Rest Mimarileri ve Hateoas

Bu tutorialı izlerken, Hateoas isiminde bir Spring kütüphanesinin kullanıldığını gördüm. Açıkçası ilk başta çok umursamadım. Detay gibi hatta biraz da gereksiz gibi geldi. Fakat sonradan internette, rest mimarileri ile ilgili yazıları okurken yine aynı terimi görünce biraz araştırma yapmam gerektiğini anladım.

Hateoas, bir rest mimarisi. Rest ile uygulama geliştirmeye çoğu geliştirici, SOAP gibi yaklaşır. Yani bir endpoint belirler, sonra bunun nesne dönesini sağlar. Bu nesne de tasarıma göre JSON ya da XML formatında döner. Bu yaklaşım hemen hemen SOAP’la aynıdır. Soap’ın bundan farkı, nesnelerini bir Envelope içerisine almasıdır. Fakat böyle bir geliştirme de ne HTTP statuslerine (2xx, 3xx ya da 4xx) dair bir geliştirme yapılır, ne de servislerinizi kullanan kişi bir sonraki adımda ne yapacağını bilir.

Hateoas miramirisi işte burada bir çözüm üretiyor. Hem HTTP statüslerine bağlı kalmayı hemde, gönderdiği ek link alanlarıyla bir sonraki adımda ne yapılabileceğini belirtiyor. Tutorial’da da göreceğiniz gibi, siz bir link üzerinden blog’ları çektiğinizde (/blog/1) size blog bilgisinin yanı sıra ek linkler de dönüyor. Bu linklerde siz blog’un entry’lerine nasıl ulaşabileceğinizi (blog/1/blog-entries) görüyorsunuz. Bu linklerinde bir adları olduğundan siz aslında bu ada ilişkin olan linki çalıştırıyorsunuz. Böylelikle Rest API’ındaki değişikliklerden de çok az etkileniyorsunuz. Bu özet yazısında mimariyi anlatmak biraz zor ve açıkçası birazda havada kalıyor. Bunun için aşağıdaki yazıyı okumanızı tavsiye ederim.

Tazeler

Bu hafta çok fazla, ProductHunt ya da benzeri sitelerde gezmeye fırsatım olmadı. Ondan yeni gördüğüm uygulama ya da servis sayısı geçen haftaya nazaran az.

Adaptive Images: Yeni bir kütüphane. Bu kütüphanenin amacı sitenizde kullandığınız fotoğrafları küçültülmüş olarak kullanmak. Yani sitenizde 1900×1069 px lik bir fotoğraf kullanıyorsanız, siteniz mobil cihazlarda bu boyuttaki fotoğrafı küçük bir alanda gösteriyoruz. Aslında inen fotoğrafın boyutu aynı. Bu kütüphane bunun yerine her ekran boyutu için fotoğrafın boyutunu küçültüyor. Böylelikle siteniz mobil cihazlar da daha hızlı açılıyor.

TryTheWorld: Yeni bir servis. Bu servis size dünyanın her yerinden yiyecek paketleri getiriyor. Her iki ayda bir kapınızda dünyanın bir yöresinden yiyecek paketi buluyorsunuz. Örneğin, Istanbuldan bir paket gönderildiğinde, içinden türk kahvesinden lokuma  kadar yiyecekler çıkıyor. Korgolama da tamamen ücretsiz.

Luxafor: Yeni bir kickstarter projesi. Fikir çok hoşuma gitti. Uygulaması nasıl olur bilmiyorum ama fikir güzel. Şöyle düşünün, development yaparken insanlar gelip sizi bölebiliyor. Kulaklıkta taksanız buna engel olamıyorsunuz. Bu cihaz bunu engellemeyi hedefliyor. Sizin durumunuza göre, bayrak görevi yapıyor. Doluysanız kırmızı, boş ise yeşil yanıyor.

Elevator Saga: Bu oyun size asansör sistemi tasarlatıyor. Hani çok beklediğinizde yazılımına giydirdiğiniz, saçma çalıştığını düşündüğünüz asansörler var ya, heh işte onlardan tasarlamınızı sağlayan bir asansör emülatörü. JavaScript tabanlı yazdığınız kodlarla bölümleri geçmeye çalışıyorsunuz. Bir iki bölümünü en azından deneyin.

End Of Line