7 Ekim 2012 Pazar

Java JAR Dosyası Yaratma

Daha önceki yazımda, JAR dosyası hakkında kısaca bilgi vermeye çalışmıştım. Bu yazıda, komut satırından, java uygulaması için nasıl jar dosyası yaratılacağını anlatmaya çalışacağım.İlerleyen yazılarda da jar dosyası ile ilgili gelişmiş özelliklerden bahsetmeyi düşünüyorum. Öncelikle jar olarak oluşturacağımız sınıfı tanımlayalım:
  // JARClass.java  public class JARClass {      public static void main(String [ ] args) {          System.out.println("Java JAR Dosyası Yaratma");      }  }
Ve tabii ki derleme komutu:
javac JARClass.java

JAR Dosyası Komutu ve Parametreleri

Şimdi basitçe, çok detaya girmeden, jar dosyası yaratmak için gerekli komutu görelim:
jar cf JARClass.jar *
Burada jar komutundan sonraki parametreler sırasıyla şu anlamlara geliyor:
  • c; jar dosyası yaratacağımızı belirtir ifade (create)
  • f; jar dosyasını bir dosyaya yaratacağımızı belirten ifade (f yazmayıp, dosya ismi belirtmez isek, konsola jar içeriğini basıyor).
  • JARClass.jar; yaratmak istediğimiz jar dosyasının adı
  • *; ifadesi şuan bulunduğumuz klasör ve tüm alt klasördeki dosya ve klasörleri jar dosyasına eklemeye yarıyor. Ve tabii ki bu parametre yerine dosya isimleri yazılarak, sadece istenilen dosyalar eklenebilir.
jar cf JARClass.jar JARClass.class JARClass.java

Diğer Parametreler

Kullanılabilecek belli başlı diğer parametrelerden de bahsetmeye çalışayım:
  • t; belirtilen jar dosyasının (f parametresi ile kullanıldığında) içerisinde bulunan dosyaları belirtir.
jar tf JARClass.jar
  • v; jar dosyası yaratılırken, konsola dosya içeriği ve sıkıştırılma oranları gibi bilgileri basar.
jar cfv JARClass.jar *
  • 0 (sıfır); jar dosyası yaratılırken, dosyaların sıkıştırılmamasını sağlar.
jar cf0 JARClass.jar *
  • M; manifest dosyasının yaratılmamasını sağlar (bu dosyadan birazdan kısaca bahsedeceğim).
jar cfM JARClass.jar *
  • m; harici olarak manifest dosyasının içeriğinin belirtilmesini sağlar (normalde otomatik olarak oluşuyor).
jar cfm manifest.mf JARClass.jar *
  • -C; istenilen klasöre gidilebilmesini sağlar. Örneğin, class dosyasının yanında audio diye klasör olduğunu ve onun içinde de main.wav dosyası bulunduğunu varsayalım. Bu komut sayesinde, main.wav dosyasını jar dosyasına audio klasörü içinde değil de, doğrudan ana dizine eklemesini sağlamış oluyoruz. Aşağıdaki örnekte, ana dizindeki JARClass.class dosyasını ve audio dizini içindeki tüm dosyaları (. ile sağlıyoruz) jar dosyasına eklemiş oluyoruz.
jar cf JARClass.jar JARClass.class -C audio .

JAR Dosyası Nasıl Çalıştırılır?

Şimdi JARClass uygulamamızı nasıl çalıştıracağımızı görelim.
java -jar JARClass.jar
Komutu çalıştırdığımızda bize ana sınıfın ne olduğunu bilmediğinden bahsedecek. Yani, uygulama hangi sınıfın main metodundan başlayacağını bilmiyor. Hemen basitçe bir manifest dosyası yaratıyoruz.
  // manifest.mf  Main-Class: JARClass
Dosya uzantısının bir önemi yok. Uzantısız da yaratabilirsiniz. Şimdi, jar dosyasını manifest dosyasıyla tekrar yaratalım.
jar cmf manifest.mf JARClass.jar JARClass.class
Bu komutta m parametresinin f parametresinden önce gelmesine dikkat edilmeli. Komut, sonraki parametreleri ona göre işliyor. Uygulamayı,
java -jar JARClass.jar
komutuyla tekrar çalıştırmak istediğimizde, artık düzgün bir şekilde çalışmış oluyor. Manifest dosyası ile ilgili detay bilgileri başka bir yazımda detaylı bir şekilde vermek istiyorum. Şimdilik konu burada kalsın. Herkese iyi çalışmalar. Devamı için : Java JAR Dosyası Yaratma

Java JAR Dosyası Yaratma

Daha önceki yazımda, JAR dosyası hakkında kısaca bilgi vermeye çalışmıştım. Bu yazıda, komut satırından, java uygulaması için nasıl jar dosyası yaratılacağını anlatmaya çalışacağım. Öncelikle jar olarak sıkıştıracağımız sınıfı tanımlayalım:
  // JARClass.java  public class JARClass {      public static void main(String [ ] args) {          System.out.println("Java JAR Dosyası Yaratma");      }  }
Ve tabii ki derleme komutu:
javac JARClass.java

JAR Dosyası Komutu ve Parametreleri

Şimdi basitçe, çok detaya girmeden, jar dosyası yaratmak için gerekli komutu görelim:
jar cf JARClass.jar *
Burada jar komutundan sonraki parametreler sırasıyla şu anlamlara geliyor:
  • c; jar dosyası yaratacağımızı belirtir ifade (create)
  • f; jar dosyasını bir dosyaya yaratacağımızı belirten ifade (f yazmayıp, dosya ismi belirtmez isek, konsola jar içeriğini basıyor).
  • JARClass.jar; yaratmak istediğimiz jar dosyasının adı
  • *; ifadesi şuan bulunduğumuz klasör ve tüm alt klasördeki dosya ve klasörleri jar dosyasına eklemeye yarıyor. Ve tabii ki bu parametre yerine dosya isimleri yazılarak, sadece istenilen dosyalar eklenebilir.
jar cf JARClass.jar JARClass.class JARClass.java

Diğer Parametreler

Kullanılabilecek belli başlı diğer parametrelerden de bahsetmeye çalışayım:
  • t; belirtilen jar dosyasının (f parametresi ile kullanıldığında) içerisinde bulunan dosyaları belirtir.
jar tf JARClass.jar
  • v; jar dosyası yaratılırken, konsola dosya içeriği ve sıkıştırılma oranları gibi bilgileri basar.
jar cfv JARClass.jar *
  • 0 (sıfır); jar dosyası yaratılırken, dosyaların sıkıştırılmamasını sağlar.
jar cf0 JARClass.jar *
  • M; manifest dosyasının yaratılmamasını sağlar (bu dosyadan birazdan kısaca bahsedeceğim).
jar cfM JARClass.jar *
  • m; harici olarak manifest dosyasının içeriğinin belirtilmesini sağlar (normalde otomatik olarak oluşuyor).
jar cfm manifest.mf JARClass.jar *
  • -C; istenilen klasöre gidilebilmesini sağlar. Örneğin, class dosyasının yanında audio diye klasör olduğunu ve onun içinde de main.wav dosyası bulunduğunu varsayalım. Bu komut sayesinde, main.wav dosyasını jar dosyasına audio klasörü içinde değil de, doğrudan ana dizine eklemesini sağlamış oluyoruz. Aşağıdaki örnekte, ana dizindeki JARClass.class dosyasını ve audio dizini içindeki tüm dosyaları (. ile sağlıyoruz) jar dosyasına eklemiş oluyoruz.
jar cf JARClass.jar JARClass.class -C audio .

JAR Dosyası Nasıl Çalıştırılır?

Şimdi JARClass uygulamamızı nasıl çalıştıracağımızı görelim.
java -jar JARClass.jar
Komutu çalıştırdığımızda bize ana sınıfın ne olduğunu bilmediğinden bahsedecek. Yani, uygulama hangi sınıfın main metodundan başlayacağını bilmiyor. Hemen basitçe bir manifest dosyası yaratıyoruz.
  // manifest.mf  Main-Class: JARClass
Dosya uzantısının bir önemi yok. Uzantısız da yaratabilirsiniz. Şimdi, jar dosyasını manifest dosyasıyla tekrar yaratalım.
jar cmf manifest.mf JARClass.jar JARClass.class
Bu komutta m parametresinin f parametresinden önce gelmesine dikkat edilmeli. Komut, sonraki parametreleri ona göre işliyor. Uygulamayı,
java -jar JARClass.jar
komutuyla tekrar çalıştırmak istediğimizde, artık düzgün bir şekilde çalışmış oluyor. Manifest dosyası ile ilgili detay bilgileri başka bir yazımda detaylı bir şekilde vermek istiyorum. Şimdilik konu burada kalsın. Herkese iyi çalışmalar. Devamı için : Java JAR Dosyası Yaratma

6 Ekim 2012 Cumartesi

Siasto - proje-gorev yonetimi sistemi

Daha önceden asana.com ile ilgili bu yazıyı paylaşmıştım. Şimdi de Tam bir benzerini buldum diyebilirim : Siasto! Nedir Siasto ? Siasto da şık tasarımıyla Asana gibi proje yönetim ve görev listesi ihtiyaçlarınızı gidermek için tasarlanmış bir proje yönetim aracı. https://www.siasto.com/ adresinden erişebileceğiniz bu sitenin hizmetleri hakkında detaylı bilgi almak için ise, bloglarını ziyaret edebilirsiniz. Bu iki sistemin de tek dezavantajı bir versiyon kontrol sistemine dahil olmaması. Ancak yine de kendini kullandırtıyorlar. Asana mı Siasto mu? Ben kendi ufak çaplı projelerim için asana.com'u tercih ediyorum ancak, bunun sebebi belki de siastoyu henüz yeni keşfettiğim için onu aktif kullanma fırsatı bulamamam olabilir. (deneme kullanıcısı ile bir kaç farkını tespit ettim tabi ..) Şu anki bilgi seviyem ile kararı 15 dakikalık inceleme tavsiyem ile sizlere bırakıyorum. Devamı için : Siasto - proje-gorev yonetimi sistemi

5 Ekim 2012 Cuma

isimsiz fonksiyonlar (anonymous functions - closures) (php 5.3 ve sonrasi)

İsimsiz fonksiyonlar php'nin 5.3 ve sonraki sürümlerinde yer alan güzel bir özelliktir. Nedir isimsiz fonksiyon?  Bir mantığa veya algoritmaya ihtiyacınız var ancak bunun dünyanızda o kadar da önemli bir yeri yok. Belki sadece kodunuzu düzgün yazmak istiyorsunuz, veya yapacağınız şeyi daha temiz yapmak istiyorsunuz. Bu noktada, isimsiz fonksiyonların kullanımı tercih edilebilir.  
$selam = function($isim){      printf("Merhaba %s\r\n", $isim);  };//şeklinde tanımlayıp
echo $selam('Emre');//şeklinde kullanabiliriz. Yani anlayacağımız şekilde söylersek, bir değişkene bir fonksiyon atamış gibi bir şey oluruz.
  
php 5.4 ten itibaren de bu isimsiz fonksiyonların içinde "$this" kelimesi de kullanılabiliyor oldu. Bir Class içerisindeki bir metodun içinde kullanıldığında, $this->fonksiyon_ismi() diyerek ilgili classtaki fonksiyonu da çalıştırabiliyor artık.
  
http://www.php.net/manual/en/functions.anonymous.php#106046 linkinde ise ilginç(güzel) bir kullanımı var. Bir göz atmanızı tavsiye ederim. (kullanmanızı tavsiye etmem ama :), php içinde html'e karşıyım. )
  
  
 Devamı için : isimsiz fonksiyonlar (anonymous functions - closures) (php 5.3 ve sonrasi)   

4 Ekim 2012 Perşembe

Subversion (SVN) Kurulumu ve Kullanımı

Merhaba, Yeni bir projeye başlarken, kod yazma aşamasına gelmeden önce projenin modellenmesi, veritabanı mimarisinin oluşturulması gibi öne çıkan konuların ele alındığını birçoğumuz biliyoruz. Ama yine bunlardan da önce çalışma ortamımızın hazırlanması gerekiyor. Profesyonel bir şekilde proje yönetebilmek ve süreçleri ilerletebilmek versiyon kontrol yapısının oluşturulması ölümcüldür. Nedir bu versiyon kontrol? Versiyon kontrol basitçe bir dosya veya dokümandaki değişiklikleri takip edebileceğimiz sistemlerdir. Bir projede birden fazla çalışan olabilir ve kimin ne zaman hangi değişikliği yaptığı bilgisine erişmeye ihtiyaç duyabiliriz. Yeni geliştirmeler ile karşılaştığımız çeşitli problemlerde geçmişe dönebilir ve projenin o zamanki halini inceleyebiliriz. Versiyon kontrol sistemini basitçe açıklamaya çalıştım. Tanımlar çoğaltılabilir. Şimdi Linux üzerinde SVN kurulumunu ve kullanımını anlatmaya çalışacağım (İşletim sisteminizede Apache kurulu olduğu varsayılmıştır). sudo apt-get install subversion libapache2-svn Yukarıdaki komutu çalıştırarak SVN kurulumunu başlatıyoruz ve kolayca tamamlanıyor. An itibari ile artık SVN kurulumu tamamlandı. Her proje için ayrı bir repository oluşturmak en mantıklısıdır. Bu bağlamda tüm repository projelerini tutacağımız bir dizin belirlememiz gerekiyor. Ben /var/svn dizinini kullanmaya karar verdim.
cd /var
mkdir svn
Yukarıdaki komutları çalıştırarak /var dizini altına "svn" isimli bir klasör oluşturmuş olduk. Şimdi projemiz için bir repository oluşturalım.
svnadmin create /var/svn/project
Yukarıdaki komutu çalıştırdıktan sonra "project" isimli yeni bir repository oluşturmuş oluyoruz. Şimdi boş projemizi checkout ederek çalışma ortamımızı yaratmak adına son adımımızı atıyoruz. Benim işletim sistemimde projelerimi barındırdığım dizin
/var/www/sites
cd /var/www/sites
svn co file:///var/svn/project
Yukarıdaki komutları çalıştırdığınızda /var/www/sites dizini altına "project" isimli bir klasörün oluştuğunu göreceksiniz. Yine bu klasörün içine girip bakacak olursanız "svn" isimli gizli bir klasör oluştuğunu göreceksiniz. Standar "hello word" mesajımızı vermek üzere index.php mizi oluşturacağız :D
cd /var/www/sites
touch index.php
nano index.php
(Ben nano editor kullanıyorum. Siz ister konsol editorlarinden isterseniz Zend Studio,NetBeans gibi editorlerle index.php oluşturabilir ve düzenleyebilirsiniz) "Hello word" yazıp kaydediyoruz ve çıkıyoruz. An itibari ile ekrana "Hello Word" yazdıran bir php dosyamız oldu. Yeni eklediğimiz dosyanın SVN'ye eklenmesi
svn add index.php
svn commit -m 'index.php eklendi'
Yukarıda index.php yi eklemek üzere SVN'yi uyardık ve commit ettik. İlk commitimizi yapmış olduk. Dosyanızda yeni bir değişiklik yaparsanız bunu görmek için aşağıdaki yönergeyi izleyelim.
svn status
Değişiklik bulunan tüm dosyalar gelecek. Değişiklik yaptıysanız dosyanın başına "M" harfi gelmiş olacak. Bu dosyanın modified edildiğini belirdir. Bir dosyanın silinmesi
svn delete index.php
Projenin güncellenmesi
svn update
  SVN ile ilgili anlatılabilecek çok şey var :D Zamanla eklemeye çalışacağım. Selamlar.   Devamı için : Subversion (SVN) Kurulumu ve Kullanımı

3 Ekim 2012 Çarşamba

Subversion (SVN) vs Git

Bu konu sizin aslında, "hangi versiyon kontrol sistemini kullanmalıyım?" sorunuza da yanıt olabilecek bir niteliktedir.

Subversion (Svn) ve Git Versiyon Kontrol Sistemleri Karşılaştırması

Takımınız için en iyi yazılım deposunu (repository) seçerken, bir takım önemli faktörler vardır. SVN (Subversion) geçtiğimiz yıllarda üretimde fiili olarak bir standart haline geldi ve kullanıldı. Ancak, daha sonradan hayatımıza Git diye bir şey girdi. Git, Linus Torvalds tarafından Linux çekirdek geliştirilmesi amacıyla geliştirilmiş versiyon kontrol sisteminin dağıtılmış versiyonudur. Yıllar içerisinde, yazılım geliştirme amacıyla kullanılmış ve özellikle Open Source projelerin oluşturulmasında rol alarak da çok büyümüştür. Git, çoğu takım için daha iyi bir çözüm olmasına rağmen, SVN ile kıyaslandığında azıcık daha öğrenmesi zor olarak nitelendirilebilir.

Svn & Git farklarının objektif olarak özeti

  • Git Svn den epeyce hızlıdır.
  • SVN ile bir alt ağacı(subtree) indirip çalışabilirsiniz, ancak Git'te tüm projeyi klonlamanız gerekir. Bu klonlama ile kendinize geçmişi dahil bir kopya üretmiş olursunuz.
  • Git depoları, SVN ye kıyasla epeyce daha küçüktür. Örneğin Mozilla projesi için 30 kat daha küçüktür)
  • Git, baştan itibaren dağıtma amaçlı tasarlandığından, her geliştiriceye olabildiğince yerel kontrol imkanı sağlar. (örneğin bir şeyi yapıp kendinize commit edebilirsiniz. )
  • Git branch'ları (yan dalları) , SVN'e göre basit ve daha az kaynak harcarlar.
  • Git branch'lar kendi geçmişini tutarlar.
  • Git branchlar üzerinde daha çok denetim ve karıştırma (merge) imkanı sağlar.
  • Git depo dosyaları basittir. Tamir etme vb işlemlerinde ihtimaliz daha yüksektir.
  • SVN depolarını merkezi olarak yedeklemek daha basittir.
  • Git depo klonları, full bir klondur. Yani onun üzerinden yeni bir repo yapabilirsiniz.
  • SVN nin kullanıcı arayüzü, Git'inkinden daha gelişmiştir.
  • SVN nin versiyonlarında (revisions) dolaşmak 1,2,3,... şeklinde isim verdiğinden çok daha basittir. Git, ne idüğü belirsiz SHA-1 hash'ler kullanıyor.
Kaynaklar : GitSvnComparison, subversion_git_comparison   Devamı için : Subversion (SVN) vs Git

2 Ekim 2012 Salı

google dokumanlari ubuntu masaustunden kullanma (Google docs - GWOffice)

Google Docs, her daim gerekli olan office programlarını bize browser üzerinden online olarak sunan, bildiğimiz tüm özellikleriyle office programı :D Kendi adıma konuşacak olursam, office denilince ilk olarak microsoft office bilirdim. Hatta bir tek onu bilirdim. Ardından Open Office ve Libre Office gibi diğerleriyle çalıştım. Kullanıma açıldığından beri ise sadece Google Docs kullanıyorum ve çok memnunum. Yapamayacağınız şeyler belki vardır (zaten halen geliştiriliyor) ancak şu aşamada gayet yeterli. Gelelim asıl konumuza. Linuxta (Ubuntu) Google dökümanlarıyla kendi bilgisayarımızda çalışma imkanımız da var, GWOffice. Browser üzerinden değil de, bilgisayarınızdaki app üzerinden kullanıyor olacaksınız. Şu an stabil değil, halen geliştiriliyor. Önümüzdeki haftalarda Ubuntu Software Center'da yayınlanacakmış. Ancak manuel olarak kurmak isteyenler için yapılması gerekenleri anlatayım... İki satır kod gerekiyor :)  
sudo add-apt-repository ppa:tombeckmann/ppa  sudo apt-get update && sudo apt-get install gwoffice
Bunların ardından GWOffice uygulamasını rahatlıkla kullanabilirsiniz. Uygulamayı açtığınızda şöyle bir ekranla karşılaşacaksınız:

Eğer google hesabınıza girişlerinizde SMS ile doğrulatma kullanıyorsanız

Öncelikle https://accounts.google.com/b/0/IssuedAuthSubTokens adresine gidip, uygulamaya özel şifre oluşturmanız gerekmekte. Diğer türlü giriş yapamayıp hata alırsınız. Burada da o şifreyi kullanacaksınız. Eğer hatırlama seçeneğini işaretlerseniz kullandığınız bilgisayarda sürekli yeni şifre oluşturmanıza gerek kalmaz :) Uygulamayı kullanım esnasında Google arada bir size gerçek şifrenizi girmenizi isteyecek, sakin olun. Giriş yaptığınızda ise şöyle bir ekranla karşılaşacaksınız; Sol üst köşedeki Files seçeneğinden tüm dökümanlarınıza ulaşabilirsiniz. Aslında şu anda http://docs.google.com üzerinde çalışıyorsunuz :) İyi çalışmalar! Devamı için : google dokumanlari ubuntu masaustunden kullanma (Google docs - GWOffice)