5 Aralık 2013 Perşembe

Scala ile Fonksiyonel Programlama


Scala, yaklaşık 2 sene önce youtbe'da gezinirken videosunu izlediğim ve o andan itibaren bağlandığım bir programlama dili (https://www.youtube.com/watch?v=LH75sJAR0hc). Scala yaygın olarak kullanılan imperative sitil programlamanın dışında size fonksiyonel programlamada yapabilmenize olanak sağlayan bir dil. Scala dilini Martin Odersky (http://en.wikipedia.org/wiki/Martin_Odersky) geliştirmiş ve coursera sitesinde online olarak dili ve fonksiyonel programlamayı anlattığı "Functional Programming Principles in Scala" ve "Principles of Reactive Programming" mükemmel online dersler var. Scala dili jvm üzerinde çaılışyor ve java ile beraber çalıabiliyor. Yani java ile yazılmış kütüphaneleri scala içerisinden çaığırıp kullanabiliyoruz.

Scala, syntax olarak çok sade ve javaya göre daha expressive (anlamlı) bir yapıya sahip. Fonksiyonel programlama ile abstract fonksiyonlar yazabiliyor, var olan fonksiyonları beraber kullanarak komplike işlemleri gerçekleştiren fonksiyonlar oluşturabiliyorsunuz. Fonksiyonel programlamayı daha önce görmemiş bir programcı için bu başta karışık gelsede, birkez fonksiyonel programlamayı kavrayınca çok sade, anlamlı ve yeniden kullanılabilir kod blokları oluşturmak scala ile mümkün oluyor. Örneğin bir fonksiyonun sonunda başka bir fonksiyon döndürebiliyor, fonksiyon paremetre olarak başka bir fonksiyon alabiliyor. Bu kullanımı kavrandığında programcıya imperative sitilin sağlayamadığı bir güç sağlıyor.

Scala dilinin adı anladığım kadarıyla "scalable" kelimesinden geliyor. Çünkü dilin geliştiricisi Martin Odersky scala ile javaya göre, fonksiyonel programlama özelliklerinden dolayı, genişleyebilen sistemlerin geliştirilmesinin daha kolay olduğunu söylüyor. Bu doğru, çünkü scala fonksiyonel programlamanın yanında kolay genişlemeyi sağlayacak bileşenlere ve frameworklere sahip. Örneğin Akka (http://akka.io/) ile son derece eşzamanlı (concurrent) ve dağınık(distributed) sistemler geliştimek mümkün.

Scala ile ilgili daha fazla bilgiye http://www.scala-lang.org/ adresinden erişebilirsiniz.

25 Ekim 2013 Cuma

Gradle - ERROR: JAVA_HOME is set to an invalid directory

Gradle'ı terminalden "sudo apt-get install gradle" komutuyla kurduktan sonra test için "gradle -v" komutunu çalıştırdım ve aşağıdaki hatayı aldım.


JAVA_HOME değişkeni sistemimde sembolik olarak tanımlanmış bir link, ve gradle bu sembolik linkle çalışırken sorun çıkartıyor sanırım. Düzeltmek için gradle'ı çalıştıran scripte bulunan JAVA_HOME=/usr/lib/jvm/default-java değişkenini


 JAVA_HOME=/usr/lib/jvm/java-7-oracle olarak değiştirdim.


Artık düzgün çalışıyor.


17 Ekim 2013 Perşembe

Exception in thread "main" org.hibernate.HibernateException: No Session found for current thread hatası

Spring ve Hibernate i kullandığımda spring beanlerin konfigürasyonunu yaptığım dosyada eklemeyi unuttuğum "transactionManager" bean'i ve "<tx:annotation-driven/>" tagı sonucunda aldığım hata.


Sonuç olarak "transactionManager" bean'ini

     bean id="transactionManager"
          class="org.springframework.orm.hibernate4.HibernateTransactionManager"
          p:sessionFactory-ref="sessionFactory">
    </bean>

ve "<tx:annotation-driven/>" tagını

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">

    <context:component-scan base-package="com.springapp.mvc"/>

    <tx:annotation-driven/>
   .
   .
   .

ekledikten sonra hata almadan programımı çalıştırdım.



10 Ekim 2013 Perşembe

The matching wildcard is strict, but no declaration can be found for element 'aop:aspectj-autoproxy' Hatası


Çözüm için spring bean'leri konfigüre ettiğiniz dosyaya gerekli namespace i ve scheme location'larını belirtmeniz gerekir.

Spring-config.xml

30 Eylül 2013 Pazartesi

Spring tool suite STS Roo projesi [Publishing failed with multiple errors Resource is out of sync with the file system] hatası

Bugün STS içerisindeki roo konsolunu kullanarak yeni proje oluşturtum, projeyi oluşturduktan sonra yine sts içerisinde gelen "VMware vFabric tc Server Developer Edition v2.9" uygulama serverını kullanarak uygulamayı çalıştırmayı denedim yanlız "Publishing failed with multiple errors Resource is out of sync with the file system" gibi bir hata aldım. Araştırmam sonunda eclipse'in çalıştığı proje dosyaları dışarıdan yazıldığında böyle bir hata alınıyormuş. Hatayı çözmek için proje/workspace i refresh edin yada bunun her dışarıdan değişim olduğunda otamatik olarak refresh edilmesini istiyorsanız
windows - prefrences - Workspace menusünden "Refresh on access" seçeneğini işaretleyin. Ben workspace i refresh ettikten sonra uygulamayı çalıştırdım.

25 Eylül 2013 Çarşamba

Spring-Roo Kurulumu



Bugün birkaç gündür merak ettiğim ve denemek istediğim Spring-Roo nun kurulumunu yaptım. Spring-Roo, Spring uygulamalarını hızlı ve kolay bir şekilde oluşturmamızı sağlayan bir geliştirme aracı. Sanki maven'in spring için olan versiyonu gibi ama çok daha gelişmiş özellikleri var. Kurulumuyla ilgili çok kaynak bulamadım. Burada https://github.com/spring-projects/spring-roo  kurulumun nasıl yapılacağından adım adım bahsediyor, ama açıkçası biraz zahmetli. Kurulumu kaydettim işte buyrun;
Spring-Roo ile konsoldan projeleri çok hızlı bir şekilde oluşturabiliyoruz. Açıkçası çok fazla incelemedim ama iyi bir araç gibi duruyor.

15 Eylül 2013 Pazar

Xubuntu 12.04 LTS Java için Gerekli Olan Programların Kurulumu

Bu yazıda yeni kurduğum Xubuntu 12.04 sistemimde java uygulamaları geliştirebilmek için gerekli olan programların nasıl kurduğumu anlatacağım. Aşamalar şöyle



  • JDK (java Development Kit) kurulumu
  • Maven Kurulumu
  • IDE (eclipse) kurulumu
  • Database (postgreSQL) kurlumu


Başlamadan önce belirtmeliyimki, Ubuntu(Linux) işletim sistemini ilk defa bu kadar uzun zamandır (2 ay) kullanıyorum ve şu an daha önceden başlamadığıma pişmanım. Sebebi ise Ubuntuda java uygulamaları geliştirmek için gerekli olan uygulamaların hemen hepsinin ubuntunun kendi uygulama deposunda(Repository) bulunması ve kurulumunun gayet basit olması. Ayrıca birçoğu program yine aynı şekilde ücretsiz ve yine kurulumu gayet kolay. Ubuntunun kendi uygulama deposunda bulunan yazılımları indirmek için ayrıca kullanabileceğimiz görsel arayüze sahip bir uygulama indirme merkezi de var. Terminali kullanmak istemeyenler için ayrı bir seçenek oluşturuyor. Neyse sanurım bu kadar ubuntu reklamı yeterli biz kurulumlara geçelim ;)



JDK Kurulumu

Ubuntu kendi uygulama deposunda, "openjdk" adı altında açık kaynak bir jdk seçeneği sunuyor.
terminalden;

  sudo apt-cache search openjdk


komutunu girdiğinizde openjdk ile ilgili olan tüm paketleri görüntüleyebilirsiniz.




Bunun dışında oracle-jdk'yı da istersek sistemimize kurabiliriz. Ben kendi sistemimde oracle-jdk'yı tercih ettim. Okuduğum birkaç yazıda daha hızlı çalıştığı söyleniyordu ve açıkçası resmi(official) olması tercih sebebim oldu. Yanlız oracle-jdk ubuntunun uygulama deposunda bulunmuyor. Bunun yerine oracle'ın kendi sitesinden linux için olan kurulum paketini yada skıştırılmış dosyayı indirip biraz daha uğraştırıcı bir kurulum yapılması gerekiyor. Uğraştırmasının sebebi oracle'ın sağladığı kurulum paketinin .rpm uzantılı olması. Bu kurulum pakedi RedHat linux dağıtımlarında kullanılan kurulum pakedi. Benim sistemim, Ubuntu, ise Debian tabanli ve .deb kurulum için deb uzantılı bir paket gerekli. Tabi rpm paketini "alien" programıyla deb paketine dönüştürüp oradan bir kurulum yapmak mümkün ama ben bundan da farklı olarak oracle-jdk nın debian tabanlı sistemlere kurulum paketini sağlayan başka bir uyulama deposunu sistemime ekledim ve kurulumu buradan gerçekleştirdim. Uygulama deposunu terminalden

   sudo add-apt-repository ppa:webupd8team/java


komutunu vererek sistemime ekliyorum. Ekledikten sonra sistem cache'ini güncellemem gerekiyor

  sudo apt-get update

sonrasında sistemimde arama yaptığımda 

  sudo apt-cache search oracle

oracle-jdk7 nin eklendiğini görüyorum


şimdi kurulumu yapabilirim

sudo apt-get install oracle-jdk7-installer

bu komutu verdikten sonra oracle'ın jdk için lisans sözleşmesi çıkıyor, kabul edip ilerliyorum.




bu aşamadan sonra program jdk'yı indirip kuruyor ve sistemimden 

  java -version



şeklinde komutu girdiğimde jdk nın kurulmuş olduğunu görüyorum. Son olarak yapmamız gereken bir şey var JAVA_HOME değişkenini sistemimize girmek. Eklediğimiz uygulama deposunda bu işlemi yine kolay bir şekilde gerçekleştirmemizi sağlayan bir kurulum paketi mevcut hemen onuda çalıştırıyorum.

  sudo apt-get install oracle-java7-set-default

bu komut ayrıca java7 yi default olarak ayarlıyor.

MAVEN Kurulumu

Maven benimde yeni öğrendiğim bir build aracı. Java uygulamaları geliştrirken gerekli olan kütüphaneleri maven sayesinde kolayca ekleyebilir, projenizi istediğiniz compiler versiyonuyla derleyip testlerinin yapıp paketleyebilirsiniz. Tabi mavenin marifetleri saymakla bitmiyor gerçekten çok gerekli ve proje geliştirmeyi ve paylaşmayı çok kolaylaştıran bir araç, hemde bedava ;).

Maveni kurmak için terminalden 

   sudo apt-get install maven

komutunu girmemiz yeterli.

Maven benimde yeni olduğum bir araç. Umarım ayrıntılı bir şekilde aracın özelliklerini başka bir yazıda açıklarım .

IDE Kurulumu

Ide olarak eclipse'i tercih ettim. Tabi başka seçeneklerde mevcut Netbeans ve Intellj IDEA gibi. Intellij hernekadar süper bir ide olsada lisanslı bir yazılım, ücretsiz bir versiyonu mevcut ama özellikleri kısıtlı. Netbeans oracle'ın resmi olarak desteklediği bir ide ve gerçekten son derece iyi. Beraberinde GlassFish Application serverla geliyor. Ama ben eclipse tercih ettim. Çok fazla eklentisi var ve genişletilebilirlik seçenekleri fazla. Linux tabanlı bir sistemde açıkçası eclipse kullanmadım umarım windows'dakine oranla daha performanslı çalışıyordur. Bide ben uzun süre Adobe Flash builder kullandım aşınayım arayüze ondan :).

Eclipside istersek terminalden kurabiliriz. Bunun yerine ben eclipsin sitesinden "Eclipse IDE for Java EE Developers," olan versiyonunu indirdim. Eclipsi indirdiğinizde sıkıştırılmış dosyayı açıp eclipse klasörünü Home klasörüme taşıdım. Eclips zaten eclipse klasörünün içindeki "eclipse" dosyasını çalıştırdığınızda çalışıyor. 

Database Kurlumu

Database olarak postgreSQL i tercih ettim. Açıkçası burdaki amacım postgres'i biraz daha öğrenmek. Daha önce bir kaç projede kullandım ama çok fazla tanımıyorum kendisini en azından MySQL kadar bilmiyorum. Bazı yönlerden daha iyi olduğu söyleniyor mesela kurumsal yazılım tarafında daha çok tercih edilirmiş, bilmiyorum bakıcaz.

PostgreSQL'i kurmak için yine terminalden

    sudo apt-get install postgresql

komutunu veriyoruz. Kurulum bittikten sonra PostgreSQL'in yönetici hesabının şifresini vermemiz gerekiyor. Yönetici hesabının adı "postgres" şifreyi vermek için aşağıdaki komutu giriyorum


sudo -u postgres psql postgres



Bu komut postgres'in consolunu açıyor ve burdan

\password postgres

komutunu girerek postgres kullanıcısının şifresini veriyorum.

Son olarak Database'in yönetimi için pgadmin aracını kuruyorum.

sudo apt-get install pgadmin3 

Bu araç görsel bir arayüze sahip, database'in yönetimini kolayca yapabileceğiniz bir araç. İlk olarak çalıştırıp bağlantı (fiş) butonuna tıkladığınızda şöyle bir ekran geliyor.


daha önceden belirlediğiniz şifreyi ve diğer parametreleri girin


bağlantı sağlanacaktır.

Sanırım java uygulamaları geliştirmek için gerekli olan programları kurduk (Application Server hariç). Bu başlangıç için yeterli olacaktır sanırım.

İyi çalışmalar..

referanslar: