{Yazılım notlarım}
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.
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.
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.
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
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 ;)
terminalden;
sudo apt-cache search openjdk
komutunu girdiğinizde openjdk ile ilgili olan tüm paketleri görüntüleyebilirsiniz.
- 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:
Kaydol:
Kayıtlar (Atom)