21 Ocak 2014 Salı

Debian ve Türevi Linux Dağıtımlarında Java Kurulumu

Yakın zamanda iş yerindeki bilgisayarıma Debian kurulumu yaptım. Debian ve türevi Linux dağıtımları OpenJDK yüklü olarak gelirler, ama biz geliştiriciler bundan hazetmeyiz, ille de Oracle JDK yüklemek isteriz.
Bunun için Oracle'ın sitesinden son versiyon JDK'yı indirip sıkıştırılmış dosyayı açmanız yeterli aslında ama işletim sistemi ile tamamen entegre olması için bir seri linklerin oluşturulması gerekiyor, ister manual olarak ister update-alternatives komutlarını kullanarak.

Bunun yerine Bruce Ingalls tarafından oluşturulan bir script yardımıyla bütün bu işlerin otomatik olarak yapılmasını sağlayabiliyoruz. Bunun için gerekli adımlar şu şekilde:

  1. Oracle'ın sitesinden sistemimize uygun JDK versiyonunu indiriyoruz. Java SE 7 için http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html adresi olabilir mesela.
  2. İndirdiğimiz JDK'yı (.tar.gz dosyasını) /usr/lib/jvm dizini altında açıyoruz. Bunun için root haklarına ihtiyacımız var, komutlarınızın başına sudo eklemeyi unutmayın.
  3. Bruce Ingalls'in aşağıda yazının sonundaki scriptini bir dosyaya kaydedip root haklarıyla çalıştırıyoruz (sudo update-java.sh), şuna benzer bir ekran çıkması lazım:  
  4.  openjdk olmayan :) seçeneği seçip OK butonuna basıyoruz, işlemin tamamlanmış olması lazım. Hayırlı olsun. java -version komutunu çalıştırarak konsol içinde de yüklemenin yapılıp yapılmadığının teyidini alabilirsiniz.
Ubuntu ve Debian'ın güncel versiyonları üzerinde başarıyla çalıştırdığım bir yöntemdir, Pardus'un da son versiyonları Debian üzerine bina edildiği için Pardus'ta da çalışacağını tahmin ediyorum.

Yukarıda bahsettiğim Bruce Ingalls'ın scripti şu şekilde:


2 Ocak 2014 Perşembe

Java EE Dependency Injection

Yazdığım son projede Spring Framework ile DI (Dependency Injection) dünyasına adım attıktan sonra Java EE'nin kendi bünyesinde sağladığı DI özelliklerini kullanmayı düşünüyordum. Kısa bir deneme projesi yaparak GitHub'a ekledim, https://github.com/battal84/ExampleCDI adresinden bakabilirsiniz.
Kısaca bahsetmek gerekirse "inject" etmek istediğimiz sınıfın başına injection sonucu elde edeceğimiz nesnenin yaşam süresini belirten bir scope annotation'ı ekliyoruz, bu örneğin @Singleton, @RequestScoped, @SessionScoped olabilir. Daha sonra nesneyi inject edeceğimiz noktada basitçe @Inject annotation'ını kullanarak nesneyi tanımlıyoruz.
Eğer inject edeceğimiz sınıf Java bean kurallarına uygun değilse (veya belki üçüncü parti biri tarafından alınan bir JAR içinde bulunuyor olabilir) bu sınıftan nesne üreten "Producer" metotları kullanıyoruz. Spring Framework'te beans.xml içinde güzel güzel tanımlıyorduk ama Java EE'deki beans.xml Spring'tekiyle pek fazla benzeşmiyor. Producer metot yazmak çok basit, nesnenizi üreten metodun başına @Produces ekleyerek producer metodunu yazmış oluyorsunuz, tabi bir de bu metodun içinde bulunduğu nesnenin de yine CDI container'i tarafından yönetilen bir nesne olması lazım (yani sınıfın başında @Singleton gibi bir annotation bulunması gerek).
Buraya kadar anlattıklarımı zaten GitHub'daki kodu incelediğinizde kolayca görebileceksiniz. Bir de eğer projenizde bir injection için kullanılabilecek birden fazla kaynak bulunuyorsa (yani mesela hem sınıfınız container tarafından yönetiliyor hem de o sınıf için bir producer metot tanımlanmışsa) bu takdirde hangi kaynak kullanılarak injection yapılacağı anlaşılamıyor. Bunu aşmak için de quantifier annotationlar oluşturup kullanabiliyorsunuz. GitHub'a gönderdiğim kodda quantifier örneği yok, internette arayıp bulabilirsiniz. Ya da belki başka bir zaman onun da örneğini paylaşırım.
Kolay gelsin.

29 Şubat 2012 Çarşamba

HTML5 Canvas Örneği - Canvas Paint

Verdiğim HTML5 eğitiminde Canvas konusunu incelerken ufak çaplı bir paint uygulaması yaptık canvas üzerinde. Ders anlatımı burada paylaşmak için uzun geldi, ancak örneği incelemek isteyen olursa:

  1. html5reset-1.6.1.css dosyasını indirip,
  2. jquery-1.7.1.min.js dosyasını indirip,
  3. Son olarak benim yazdığım kodu  https://gist.github.com/1936942 adresindeki gist'ten alıp bir .html dosyasına yapıştırıp,
  4. hepsini bir klasörün içinde toplayıp
  5. Chrome tarayıcısında açarsa, canvas ile yapılmış paint uygulamasını görmüş olur.
Not: Chrome için çalışan demoyu şurada görebilirsiniz.

Derste sadece chrome için fare olaylarını yönettik, diğer tarayıcılara uyumlu olsun diye uğraşmadık, o da olmadı zaten :)
-- Düzenleme: derste yazdığım kodu buraya taşıyorum:

15 Şubat 2012 Çarşamba

SQL Server'dan MySQL'e Bağlanmak

Ben de mümkün olacağını zannetmezdim, ama iş başa düşünce küçük bir google araştırması sonucu mümkün olduğunu gördüm. Taylor Gerring isimli şahsiyetin yazısını özetliyorum.

SQL Server'dan MySQL (ve diğer RDBMS'lere) bağlanabilmemizde ODBC ve Linked Servers görev alıyor. Bu yüzden, MySQL'in ODBC sürücüsüne ihtiyacımız var, dolayısıyla Connector/ODBC'yi indirip SQL Server'ın kurulu olduğu bilgisayara kuruyoruz. Yine bu bilgisayar üzerinde MySQL bağlantımızı kolaylaştıracak bir DSN tanımlıyoruz. Bunun için Denetim Masası'ndan "Sistem ve Güvenlik" altında "Yönetim Araçları" bölümünde "Veri Kaynakları (ODBC)" bölümüne giriyoruz. Ya da daha kısayoldan Başlat menüsünde Çalıştır'a girip "odbcad32" yazmamız da yeterli. Burada Kullanıcı DSN bölümünde Ekle butonuna basarak yeni bir ODBC kaynağı oluşturmaya başlıyoruz.

İlk adımda bize ne tür bir driver kullanacağımız soruluyor. Burada daha önce yüklediğimiz MySQL ODBC Driver'ı bulup seçiyoruz. Tamamladıktan sonra ayarlama (configuration) ekranına geçiyoruz.

MySQL ODBC Ayarları

Burada "Data Source Name" (kısaca isim) ve "Description" (açıklama) alanları kendi keyfimize göre doldurabileceğimiz alanlar, yani daha sonra baktığımızda ne yaptığımızı kendimize hatırlatacak bir şeyler yazabiliriz. Alttaki bölümlerde ise MySQL bağlantısı için kullanılan değerleri girdiğimiz yerler var. MySQL'in öntanımlı portu 3306 otomatik geliyor yukarıdaki resimde gördüğünüz gibi.

Burada da işimiz bittikten (ve Test butonuna basıp bağlantı bilgilerimizi başarıyla sınadıktan) sonra artık SQL Server Manager'a geçip MySQL bağlantısını orada kaydedebiliriz. SQL Manager'da pata-küte "New Linked Server" demeden önce Providers altında bulunan MSDASQL öğesine bir ayar çekebiliriz.


Object Explorer
Buradaki ayarlara baktığımızda ODBC ile yaptığımız bağlantılarda ne gibi özelliklerin kullanılacağına karar verebildiğimizi görüyoruz. Örneğin bu bağlantı üzerinde "LIKE" sorgusu çekilip çekilemeyeceğini işaretleyebiliyoruz. Sanırım performansı büyük oranda etkileyebilecek ya da güvenlik sorunu oluşturabilecek bu tip sorguların bir ayar yeri olarak düşünülmüş. Burada işimiz bittikten sonra "Linked Servers"a sağ tıklayıp "New Linked Server..." diyerek bağlantıyı kuruyoruz, daha doğrusu bağlantı kurma ekranına geliyoruz.




New Linked Server...
İlk satırda verdiğimiz ad önemli, ileride sorgu oluştururken bu adı kullanacağız, o yüzden yazmaktan erinmeyeceğiniz kısa bir ad olsun, hele içinde benim yaptığım gibi boşluk karakteri kullanmayın derim. Product name ve Data source satırlarına da daha önce DSN tanımlarken verdiğiniz ismi aynen verin. Bu arada Provider bölümünü "Microsoft OLE DB Provider for ODBC Drivers" olarak seçmeyi unutmayın.



Artık sorgularınızda MySQL tablolarınızı kullanmaya başlayabilirsiniz. Sorgu kullanırken iki yöntemimiz var. Birincisi Openquery yöntemi (Diyelim ki Linked Server adı olarak "MysqlLinked" seçtiniz):


SELECT * FROM OPENQUERY(MysqlLinked, 'SELECT * FROM mysqlTablosu');

İkinci yöntem ise daha doğrudan bir yöntem, bu yöntemle MySQL tablolarınızı doğrudan bir SQL Server tablosuymuşçasına JOIN içine alma şansımız var:

SELECT * FROM MysqlLinked...mysqlTablosu';

Herkese kolay gelsin.

28 Ocak 2012 Cumartesi

Windows 7'de Trac Kurulumu



Bir süredir proje yönetimi & hata takip sistemlerini inceleyip, denemeyi arzu etmeme rağmen vakit bulup da bir türlü hiçbirini kurma şansım olmamıştı. Sadece özelliklerini internetten okuduğum kadarıyla Trac hoşuma gitmişti. Aradan öyle çok zaman geçmiş ki ne okuyup da bu kadar beğendiğimi hatırlamıyorum bile, ancak aklımda Windows 7 üzerinde kurulumunun nasıl yapıldığını internette aradığım ve bulamadığım kalmış.
Oysa ki o kadar da zor değilmiş, bugün kurdum ve gördüm. Trac'ın proje sitesindeki ilgili dökümantasyonu okuyarak devam ettiğimizde problemsiz kurabiliyoruz.

Trac 0.12'yi Windows 7 bilgisayarımıza kurmak için gereken adımların üzerinden kısaca geçmek gerekirse:

  1. Python kurmamız gerekiyor. Dökümantasyonuda 2.4 ile 3.0 arası versiyonlar önerilmiş. Gidip de "aa, en son versiyon Python 3.2 imiş, onu kurayım" demeyin, çalışmaz... Tamam, ben denemedim, ama en azından çalışmama ihtimali var. Python kurulumunu anlatmayacağım, oldukça basit. Sitesinden gidip işletim sisteminize uygun versiyonu (32 ya da 64 bit) indirip kuruyorsunuz. (Şu tarih itibariyle Python 2.7.2 bulunuyor Windows Installer şeklinde)
  2. setuptools adında bir araç kurmamız gerekiyor, bu araç python ile çalışan bir kurulum yardımcısı aslında. İleride çok faydasını görüyoruz, bu araçla birlikte gelen easy_install isimli betik işimizi çok kolaylaştırıyor gerçekten de. Bunun 0.6 veya daha ileri bir sürümünü kurmamız gerekiyor. Burada da yine işletim sistemimizin 32 yahut 64 bit olmasına göre ilgili dosyayı python'un sitesinden indirip kurulumu yapıyoruz.
  3. Genshi'nin 0.6 veya daha üst bir sürümünü yüklememiz lazım. Bunu çok basit şekilde, bir önceki adımda gelen  easy_install isimli aracı kullanarak yapabiliriz. Önceki adımlarda hep varsayılan konumlara kurulum yaptıysak, şu adreste  easy_install.exe isimli bir dosya olduğunu görmemiz gerekir: C:\Python27\Scripts İster bu adresi PATH değişkenine ekleyerek, isterse komut satırından bu klasöre giderek bu aracı kullanabiliriz. Bir adet Command Prompt açıp şu satırı yazıyoruz: C:\Python27\Scripts\easy_install.exe Genshi Bu kadar...
  4. Aslında bir de veritabanı göstermemiz lazım Trac'ın kayıtlarının tutulması için, ama eğer python 2.7 kurduysanız benim gibi, başka birşey yapmanıza gerek yok.
  5. Ön gereksinimleri bitirdik, şimdi önümüzde sadece Trac kurulumu kaldı. Trac'ın kendi dökümanında da görülebileceği üzere, kurulum easy_install ile çok basit:
    easy_install.exe Babel==0.9.5
    easy_install.exe Trac
Evet bu kadar. Kurulum sırasında veritabanı bilgisi soracak olursa boş verip Enter'e basarak geçebilirsiniz.

Kurduktan sonra "evet şimdi nereden göreceğim" diyebilirsiniz. Burada önce bir proje ortamı oluşturmanız gerekiyor. Bu ortam için bir klasör belirleyip, komut satırında: C:\Python27\Scripts\trac-admin C:\Proje\Ortami\ initenv komutunu veriyoruz. Sonrasında Trac ile gelen HTTP sunucusunu (varsayılan ayarlarla) çalıştırmak için C:\Python27\Scripts\tracd --port 8000 C:\Proje\Ortami komutunu veriyoruz. Artık birşeyler görmeye başlamak için tarayıcımızın adres satırına http://localhost:8000 yazıp Trac turuna başlayabiliriz.

28 Ekim 2011 Cuma

JavaFX ve FXML Hakkında


Boş zamanlarımda teknolojik gelişmeleri takip ediyorum, takip ettiklerim arasında çoğu kişinin burun kıvırdığı JavaFX de var. Bence JavaFX ve FXML, Java'da program yazanların tam aradığı ikili. Bu arada Microsoft'un XAML'ına oldukça benzetiyorum FXML'i, demek ki aklın yolu bir :) .

JavaFX çok geç kalmış bir atılım diyebilirim. Rakipler çok yol katetti, JavaFX belki büyük bir potansiyel sağlayabilecekken, şu an sadece varolan Java kodlarını başka dile çevirmek zorunda kalmadan yeni bir arayüz kazandırmak isteyen kitleye hitap ediyor.
Yine de Oracle'ın şimdiye dek bu işi sürdürmesi pes etmediği anlamına gelebilir. Her ne kadar Oracle'ın neyden ne zaman vazgeçeceği pek öngörülemese de, JavaFX'in geleceğinin şu ankinden parlak olacağını zannediyorum.

21 Ekim 2011 Cuma

Üzerimize Vazife: Türkçe

Türkçe kullanımı konusunda hassasiyet sahibiyim. Evet İngilizce biliyorum, severek de kullanıyorum. İngilizce bilmek bana zevk veriyor ve işim konusunda da beni ziyadesiyle avantajlı kılıyor. Belki kod yazdığımda da kafam Türkçeden çok İngilizce çalışıyor :) Ancak uydurma olmayan saf bir Türkçe kullanmayı da severim, özenirim.

İki dil bilen ve her iki dilin avantajlarından yararlanan bir yazılımcı olarak, özellikle İnternet üzerinde sunulan bilgi kaynaklarından edindiğim bilgileri Türkçe olarak yurdum yazılımcılarının hizmetine sunma konusunda kendimi sorumlu hissediyorum. Zaten bu blogu açma nedenlerimden biri de budur. Teknolojiyi ithal eden bir ülkenin evladı olarak bu becerimi ülkem hizmetine sunmaya elimden geldiğince devam etmeyi istiyorum.

Bu vesileyle benim durumumda olan diğer yazılımcı meslektaşlarıma da bir çağrı olarak buradan sesleniyorum; bilginizi Türkçe olarak paylaşın ki, memleketimiz gelişsin. Bu sizi eksiltmez, korkmayın.
İyi paylaşımlar...