Archive for the 'software development' category

Kredi Kartı Sahteciliğini Belirleme Teknikleri

Jan 04 2016 Published by under fraud, security

“Kredi Kartı Sahteciliğini Belirleme Teknikleri” ile ilgili yazım Bilgisayar Mühendisleri Odası dergisinde yayınlandı:

Yazıya aşağıdaki bağlantıdan ulaşabilirsiniz:

http://dergi.bimo.org.tr/sayi05/#/64

Comments are off for this post

Scala Test ile Behavior-Driven-Development

Nov 11 2015 Published by under bdd, java, scala, software development

ScalaTest (http://www.scalatest.org) Scala veya Java kodlarını test etmek için kullanılan TDD ve BDD (http://dannorth.net/introducing-bdd/) kütüphanesidir. Bu alandaki alternatiflerine (JBehave & JUnit, Groovy Spock..vs.) göre daha esnektir zira hem Java’daki tüm test kütüphaneleriyle (JUnit, TestNG, Ant, Maven, sbt, ScalaCheck, JMock, EasyMock, Mockito, ScalaMock, Selenium, Eclipse, NetBeans, IntelliJ) entegre çalışabilir hem de istediğiniz isimlendirme standardını kullanabilirsiniz. (Flat Spec, Word Spec..vs.)

ScalaTest’i bir java projesinde kullanabilmek için:

  • IntelliJ IDEA kullanılıyorsa Scala plugin kurulur: http://www.scalatest.org/user_guide/using_scalatest_with_intellij
  • Maven ile testleri çalıştırmak için iki alternatif vardır.
    • Birincisi Maven ScalaTest plugin’ini kurmak:
    • İkincisi ise testlerin üzerine aşağıdaki ifadeyi eklemek. Eğer hem JUnit hem de ScalaTest kullanmak istiyorsak bu yöntem ikisini birlikte çalıştırmaya izin verir.
  • Son olarak Scala ile yazdığımız test kodlarını derleyebilmek için maven scala plugin’i kurmamız gerekiyor. Bunun için aşağıdaki plugin’i projenizdeki pom.xml dosyasına eklemeniz gerekiyor:

Artık ScalaTest yazmaya başlayabiliriz. İlk olarak kullanmak istediğimiz temayı (Spec) belirlememiz gerekiyor. (FlatSpec, WordSpec, FeatureSpec..vs.) İç içe senaryolara daha kullanışlı test yazmak için WordSpec, kullanıcı kabul testlerini (acceptance test) yazmak için ise FeatureSpec tercih edilir.

Ardından eğer Mock yapacaksak bir Mock kütüphanesi seçilir ve pom.xml’e bağımlılık eklenir. (Mockito, ScalaMock, JMock, PowerMock..vs.)

Artık ScalaTest ile test geliştirmeye başlayabiliriz. WordSpec örneği:

FlatSpec örneği:

Detaylı bilgi için:

http://www.scalatest.org

https://github.com/s4nk/scalatest-maven-template

Comments are off for this post

JDK Timezone Nasıl Güncellenir?

Oct 26 2015 Published by under java, software development

Saatlerin geri alınamama probleminin JDK tarafındaki çözümünü paylaştığı için Sabri Onur Tüzün’e teşekkürler. 🙂

Çok derde deva oldu:

http://sotuzun.xyz/2015/10/25/jdk-timezone-nasil-guncellenir/

Comments are off for this post

Appium Essentials

Mar 22 2015 Published by under mobile, software development

B03801_MockupCover_Normal

Gözden geçirmesini (review) ve danışmanlığını yaptığım “Appium Essentials” kitabı yayınlandı:

http://www.amazon.com/Appium-Essentials-Manoj-Hans/dp/1784392480/ref=sr_1_1?ie=UTF8&qid=1429093755&sr=8-1&keywords=appium+essentials#reader_1784392480

İyi okumalar. 😉

Comments are off for this post

Asynchronous Servlet

Jan 07 2015 Published by under java, software development

Servlet 3.0 ile birlikte asenkron servlet desteği geldi ve artık geliştirdiğimiz Servlet’leri asenkron olarak da çağırabiliyoruz. Bunun için @WebServlet notasyonuna asynSupported=true parametresi ekliyoruz.

Ardundan request.startAsync() ile AsynContext‘e erişiyoruz. Context’e bir dinleyici ekliyoruz. Dinleyici sınıfımızın AsyncListener arayüzünü implement etmesi gerekiyor.

Son olarak asenkron yapmak istediğimiz uzun süren işlemi çalıştırması için bir Thread‘e verebiliriz. Aşağıda ThreadPool kullanarak gerçeklenmiş bir örneği bulabilirsiniz.

 

Comments are off for this post

“GWT Plugin Desteklenmiyor” (Not Supported) hatası

Jan 04 2015 Published by under java

Chrome’a veya Firefox’a Google Web Toolkit plugini yüklemeye çalıştığımızda “GWT plugin desteklenmiyor” hatası alabiliriz. Bu durumda uygulanacak adımlar:

1. Chrome kısayoluna sağ tıklayıp Özellikler->Kısayol tıklanır.

2. Hedef kısmına aşağıdaki eklenir. Bu sayede Chrome eklentilerini sürükle bırak yaparak da yükleyebiliriz.

3. Chrome açılır ve extensions adresi açılır. Bunun için tarayıcıya aşağıdaki adres yazılır:

4. Aşağıdaki linkten gwt dev plugin indirilir:

https://groups.google.com/group/google-web-toolkit/attach/d1c909bf4c5cbfb4/gwt-dev-plugin.crx?part=4&authuser=0

5. Son olarak indirilen plugin Chrome’a sürüklenir.

Comments are off for this post

Spring 4’le Gelen Yenilikler

Sep 19 2014 Published by under java

İlk sürümü 2004 yılında çıkan Spring Framework’ün şu ana kadar çok kez büyük sürümü çıktı. Spring 2.0 ile XML ve AspectJ desteği, Spring 2.5 ile notasyon (annotation) konfigürasyonu ve Spring 3.0 ile de Java tabanlı konfigürasyon modeli geldi.

Spring’in en son büyük (major) sürümü olan Spring 4.0 ile gelen en büyük yenilik ise Java 8 desteği. Spring 4.0 ile gelen tüm yenilikler :

1. Spring’e Başlangıç deneyiminin iyileştirilmesi

Spring’in yeni web sitesine (http://spring.io/)  Spring’e başlangıç ve Spring’i öğrenme dokümanlarının tamamı eklendi:  http://docs.spring.io/spring/docs/current/spring-framework-reference/html/overview.html

 2. Son kullanma tarihi geçmiş (deprecated) paketlerin ve metodların silinmesi

Versiyon 4 ile birlikte son kullanma tarihi geçmiş (deprecated) birçok metot ve sınıf kaldırıldı. Eğer projelerinizdeki Spring versiyonunuzu Spring 4’e yükseltmek istiyorsanız Java’nın son kullanma tarihi geçmiş metod, sınıf ve arayüzlerini kaldırdığınızdan emin olmanız gerekiyor. Kaldırılan tüm işlevleri görmek için şu doküman kullanılabilir: http://docs.spring.io/spring-framework/docs/3.2.4.RELEASE_to_4.0.0.RELEASE/

3. Java 8 (Java 6 ve Java 7 ile birlikte)

Spring 4 ile birlikte gelen en önemli yenilik Java 8’in bazı özelliklerini desteklemesi. Spring’in callback arayüzleri ile Lambda ifadelerinin kullanımı sağlandı. Halihazırdaki bazı notasyonların (ör: @Repeatable) java.time (JSR-310) paketini desteklemesi sağlandı. Geriye uyumlu olan versiyon 4 Java 6 ve Java 7 ile de kullanılabilir.

4. Java EE 6 ve 7

Spring 4 JPA 2.0 ve Servlet 3.0 versiyonları ile birlikte Java EE 6 ve üstü için temel versiyon haline geldi. Aynı zamanda JMS 2.0, JTA 1.2, JPA 2.1, Bean Validation 1.1 ve JSR-236 Concurrency kütüphaneleri gibi temel Java EE 7 standartlarını destekler duruma geldi.

5. Groovy Bean Tanımlamaları (Groovy DSL)

Spring Framework 4.0 ile birlikte Groovy DSL kullanarak bean konfigürasyonu yapılabilir hale geldi. Yazım olarak XML konfigürasyonuna benzese de konfigürasyon yazımı XML’e göre kısaldı. Örnek:

6. Container iyileştirmeleri

Bean’leri enjekte ederken “generic” tiplerin de kullanılabilmesi sağlandı.

7. Genel Web İyileştirmeleri

Spring MVC uygulamalarında @RestController notasyonunun kullanılması sağlandı.

8. WebSocket Mesajlaşma

Spring’in yeni spring-websocket modülü ile client-server web uygulamalarında çift yönlü iletişim sağlandı.

9. Test İyileştirmeleri

Yeni SocketUtils sınıfı sayesinde TCP/UDP soketleriyle entegrasyon testleri yapılabilir hale geldi.

Comments are off for this post

Gömülü yazılımdan bulut bilişime : Java 8

May 13 2014 Published by under java, software development

Java SE 8 ve Java ME 8‘i içerisinde barındıran Java 8 Java’nın şu ana kadar çıkardığı sürümler içerisinde en belirleyici sürümlerden bir tanesi olarak kendini gösteriyor. Lambda ifadeleri ve yeni Stream API’si hem platformun ifade gücünü arttırıyor hem de yazılımcıların modern, çift çekirdekli işlemcilerin avantajlarını kullanabilmelerine imkan sağlıyor. Java ME (Micro Edition) 8  en güncel JVM’i (Java Virtual Machine), programlama dilini ve kütüphaneleri içerisinde barındıracak şekilde güncellendi ve  küçük gömülü  (embedded) cihazlara odaklanıldı. Java 8 ile birlikte yazılımcılar aynı platformu kullanarak en küçük cihazlardan (Internet of Things) en büyük bulut (cloud) kurumsal servislere kadar geniş bir alana ulaşabilecekler.

Java 8 ile birlikte 8 temel özellik geliyor:

1. Lambda İfadeleri (closures) : Lambda ifadeleri davranışları veri şeklinde göstermeye yarayan basit ifadelerdir. Listeleri (collections) işlemek çok daha kolay ve etkili hale gelecektir. Örneğin 8 şarkıdan daha az şarkı barındıran albümlere sahip olan sanatçıları sorgulamak istiyoruz. Lambda ifadelerinden önce bunu standart for döngüsüyle geliştirebiliyorken Java 8’den itibaren tek bir satırda geliştirebileceğiz :

2. Nashorn ve Javascript : Nashorn Java 8 ile birlikte gelen ve JVM’in bir parçası olarak çalışan modern bir Javascript kütüphanesidir. JDK’nın içerisinde javax.script paketi içerisinde bulunur. Bu sayede geliştiriciler Java kodlarının içerisine Javascript bileşenleri ekleyebileceklerdir. Aynı zamanda içerisinde Nashorn’u script dili olarak komut satırından çalıştırabilmek için jjs komutu da bulunmaktadır.

3. Compact Profiller : Bu profiller Java Standard Edition ile Java Mobile Edition’ı birbirine yakınlaştıran 3 adet temel Java API gruplarıdır. Yıllardır gömülü yazılım geliştiriciler küçük cihazlara küçük Java binary’ler yükleyebilmek istiyorlardı. Compact profiller sayesinde tüm platformu yüklemeden sadece ilgili binary’yi küçük cihazlara yükleyebilme olanağı sağlandı. Bu sayede kısıtlı kaynağı olan cihazlara da küçük JVM’ler yüklenebilecek.

4. Date ve Time Kütüphaneleri : Yeni java.time kütüphaneleri sayesinde geliştirilmesi ve okunması daha kolay uluslararası zaman standartları kullanılabilir. Bu paketteki her bir Java sınıfı ilgili işe özgü sınıflardır ve aynı zamanda aynı anda erişim (concurrency) problemlerini çözmek için değeri değiştirilemeyen (immutable) sınıflar olacaklar.

5. Java FX 8 : Java FX’in 8. sürümü Lambda ifadelerini destekleyen bileşenleri içerisinde barındırıyor. Bu sayede kullanıcı davranışlarını yakalama (event handling) gibi kodlar çok daha kısa hale geliyor. Aynı zamanda dışarıdan (3rd party) bileşen kullanımı kolaylaşıyor. Performans tarafında da birçok geliştirme yapılmış bu sayede Raspberry Pi gibi cihazlarda gömülü JavaFX kullanılabilir.

6. Topluluğun İyileştirilmesi : Java 8 ile birlikte Java geliştiren topluluğun yapısında ve süreçlerde iyileştirme yapıldı. JUG (Java User Groups) toplulukları Java topluluğunun öğrenim ve katılım konularında birleştirici yerel merkezler oldu. Dünyanın her yerindeki bu Java grupları Java’nın geliştirilmesinde ve öneriler toplamada yeni bir anlayış getirdi. “Adopt a JSR” programı sayesinde yeni katılımcılar ve organizasyonlar Java’nın gelişmesinde katkıda bulundular. 26’dan fazla JUG JAva 8’in gelişiminde pay sahibi oldu.

7. Java ME 8 (Java Micro Edition) : Java ME 8 ile birlikte Java SE ve Java ME birbirine yaklaşmış oldu. Bu sayede aynı yetkinliğe sahip yazılımcılar hem büyük ölçekli kurumsal uygulamalarda hem de küçük gömülü sistemlerde uygulama geliştirebilecekler.

8. Java SE 8 (Java Standart Edition)  ve JVM : Java SE 8 ile birlikte çöp toplayıcı (garbage collection) altyapısı iyileştirildi. Yeni geliştirmelerle birlikte kullanıcılar bir GC (garbage collection) türünden diğerine kolaylıkla atlayabilecek. Aynı zamanda Java SE 8 ile birlikte yazılımcıların PermGEN alanını iyileştirmelerine (tuning) ihtiyaç kalmadı. PermGEN bölümündeki sınıfların meta verileri kuyruğa (heap) taşındı. Bu sayede yazılımcıların bu alanın boyutunun ne olması gerektiği konusunda fikir sahibi olmalarına ihtiyaç kalmadı. Son olarak Java ME 8 güncellenerek Java SE 8’deki kütüphanelerin bir kısmını kullanabilmesi sağlandı.

Sonuç olarak Java 8 yazılımcılara aynı yetkinlikleri kullanarak küçük cihazlara gömülü yazılımlardan bulut bilişim (cloud) üzerinde çalışan büyük ölçekli kurumsal uygulamalara kadar geniş bir oyun alanı sunuyor. Lambda ifadeleriyle de kodun satır sayısını azaltıp fonksiyonel programlama dillerinin avantajlarını kullanarak yazılımcıların verimliliğini arttırmayı hedefliyor.

Comments are off for this post

Native, Mobil veya Hibrid : Mobil uygulama geliştirme teknolojisi seçerken nelere dikkat etmeliyiz ?

Apr 04 2014 Published by under mobile, software development

2015 yılında dünyadaki akıllı telefon kullanıcı sayısının 2 milyar olacağı tahmin edilirken (eMarketer) firmaların mobil uygulamalara olan ilgisi artarak devam edecek gibi görünüyor. Bu ilgi karşısında bilgi teknolojileri firmaları platform bağımsız mobil uygulama geliştirmek için vizyonlarını, kullanacakları araçları ve metodolojileri belirlemeye çalışıyorlar.

Acil markete çıkma gerekliliği olan ve kısa sürede geliştirilebilen uygulamaların (ör: Etkinlik Rehberi uygulamaları..vs.) yanı sıra karmaşıklığı fazla ve mobil cihazın tüm özelliklerini (Konum belirleme, hareket sensörü..vs.) kullanan uygulamalar (ör: Arttırılmış gerçeklik uygulamaları) da pazarın önemli bir payını oluşturuyor. Tüm bu uygulamaların ortak yanı ise firmaların bilgi teknolojileri firmalarından en ucuz, en hızlı ve tüm mobil cihazları destekleyen (IPhone, Android, Windows Phone..vs.) uygulamalar istemeleri. Haliyle bu konu hakkında bir çok araç ve kütüphane var ve fakat hiçbir araç veya kütüphane kendiliğinden ucuz, hızlı ve tüm cihazlarda çalışan çözümler sunmuyorlar. Mobil araçları, kütüphaneleri veya teknolojileri kullanırken çok dikkatli olmak gerekiyor zira Facebook gibi IPhone uygulaması için HTML5’e yatırım yapıp başarısız olma şansımız yüksek.

Mobil uygulama geliştirmek istediğimizde önümüze 3 tane uzun ve ince yol çıkıyor: Native, Web veya Hibrid. Native uygulamalar ilgili mobil işletim sistemine özgü ve marketten yüklenen uygulamalardır. Sadece tek bir platforma özel olarak geliştirilir ve ilgili cihazın tüm özelliklerini (kamera, GPS, ivmeölçer..vs.) kullanabilir. Mobil web uygulamaları ise Native uygulama görünümü olan web siteleridir. Kullanıcılar bu tür uygulamalara tarayıcı üzerinden erişirler. Hibrid mobil uygulamalar ise yarı web yarı native uygulamalardır. Native uygulamalar gibi marketler (Google Play Store, Apple App Store..vs.) aracılığıyla cihaza yüklenebilirler. HTML5 destekli tarayıcı ise uygulama içerisine gömülü durumdadır. Peki mobil uygulama geliştiren kişiler veya kurumlar olarak hangi yolu ne zaman tercih etmeliyiz ? Bu konudaki ölçü birimleri şu şekilde sıralanabilir:

  • Cihaz Özellikleri:  GPS, Kamera, Hareket Sensörü..vs. gibi cihazın temel özelliklerine erişim – Native > Hibrid
  • Çevrimdışı (offline) Çalışma: İnternete bağlı olmadan da çalışabilme – Native
  • Hız: Native uygulamalar diğerlerine göre en hızlı tercihtir. Mark Zuckerberg’in (Facebook CEO) “HTML5’e yatırım yapmamız en büyük hataydı”  deyip Facebook uygulamasını HTML5’ten Native uygulamaya çevirmesinin en büyük nedeni HTML5’teki performans problemleridir.
  • Güncelleme: Native uygulamayı güncellemek ve yeni sürüme geçmek hem kullanıcı için hem geliştirici için daha zordur. En kolay güncellenen uygulamalar mobil web uygulamalarıdır.
  • Platform Bağımsızlık: Hibrid veya mobil web uygulaması tercih edildiğinde platform bağımsızlık en güçlü argüman olarak ortaya çıkmaktadır. Aynı uygulama tüm platformlarda kullanılabilir.
  • İçerik kısıtlamaları, Onaylar ve Ücretler: Hibrid ve Native uygulamalarda uygulama marketler içeriği kısıtlayabilir. Bu marketler ücretlidir. Mobil web uygulamalarında herhangi bir kısıt yoktur ve ücret ödenmez.
  • Geliştirme Maliyeti: Geliştirme maliyeti Hibrid ve Mobil web uygulamalarında görece daha azdır.
  • Kullanıcı Arayüzü: Çok güçlü grafiksel ihtiyaçlar varsa (3D oyun..vs. ) Native tercih edilmelidir.

Sonuç olarak Hibrid, Mobil web veya Native tercih ederken ihtiyaçlar göz önünde bulundurulmalıdır. İhtiyaçtan bağımsız olarak herhangi birini diğerinden daha iyi olarak göremeyiz. Her birini seçerken firmanın ihtiyaçlarına göre tercih yapılmalıdır.

Comments are off for this post

Rescheduling Job in Quartz

Jan 21 2014 Published by under java

Quartz kütüphanesi kullanan Job‘larımız varsa ve o Job’ları tekrar zamanlamak (rescheduling) istiyorsak ilk olarak varolan Cron‘u alıp ardından yeni bir CronTrigger oluşturmamız gerekmektedir.

 

Örnek kod aşağıdaki gibidir:

Comments are off for this post

« Newer posts Older posts »