Chicago da gerçekleştirilen SpringOne2GX etkinliği kapsamında epey ilginç ve de güzel seyler gördüm. Etkinliğin son gunü, paralel giden konferanslardan sonuncusunda herhangi bir bilgimin olmadigi ve diğer konuları beğenmediğinden dolayı Griffon a katılmayı tercih ettim. Hakkında çok az şey biliyordum. Ancak sunu soylemeliyim ki etkinlik kapsamında bu kadar beni şaşırtan konu olmamıştı. Bu nedenle hakkında bazı bilgileri paylaşma gereği duyuyorum.

Eğer Groovy ile program yazdıysanız, hele de grails ile proje geliştirdiyseniz, griffon size çok kolay gelecektir. Continue reading “Griffon Başlangıç” »
Posts Tagged ‘java’
Griffon Başlangıç
SpringOne 2GX – KeyNote
Uzun süredir beklediğim SpringOne 2GX ilk gunü geride kaldı. Katılımın yüksek olacağı bir etkinliğe benziyor. Bugün gerçekleştirilen “Keynote” çok kalabalıktı .Bu kadar kalabalık olacağını tahmin etmemiştim.
“Keynote” bir hosgeldiniz ve etkinlik kapsamında hangi konuların islenecegi bilgisinin verildiği bir toplantiydi.

SpringOne ilk süprizini Keynote da öğrendik. Rod Johnson kolunu kırmış olması ve doktorunun uçma yasağı nedeniyle etkinliğe katılamamasiydi. Ben SpringOne ilk kez katılıyorum ama ben bile etkinliğin Rod olmadan başladığını hatırlamıyorum. Bu Rod un katılmadığı ilk etkinlik olacak. Bunun yaninda Graeme Rocher soğuk algınlığı almış herhalde, sesi çok kötüydü.
Etkinlik kapsamında başlıca islenilecek konular: Spring data, grails, bulut mimariler. Özellikle bulut mimariler bu etkinliğin en önemli konularını içeriyor. Heroku, cloudfoundry, appfog etkinliğe sponsor olmuşlar.
Groovy Programlamaya Giriş
Daha önceki yazımda groovy ve grails’in nasıl kurulacağı bilgisini vermiştim. Bu yazımda ise groovy programlamaya başlayacağız.
Groovy java programlama diline alışkın kişilerin, Python, Ruby, Smalltalk yer alan özellikleri kullanabilmesine olanak sunan agile bir programlama dili olarak tanımlanıyor.
Groovy JVM üzerinde çalışır ve tüm groovy nesneleri java.lang.Object ten türemiştir. Groovy ile yazılan bir nesne derlendikten sonra bytecode a cevrilir. Oluşan *.class dosyasını classpath’inize eklenerek java tarafından kullamabilirsiniz. Yani java’dan groovy’ye, groovy den ise java’ya erişmek cok kolaydır.
Groovy’ de “;” kullanma zorunluğu yoktur.
Groovy mevcut dilin kütüphanelerin dışında, diğer kütüphaneler ve JDK yer alan özelliklerin yer aldığı GDK’den oluşmaktadır

Groovy javada yer alan List, Map ‘ e yeni özellikler katar. örneğin şu satır nesnelerin paketlerini ekrana basar.
package com.rayyildiz
class ListMapTest {
static main(args) {
def classes = [String, Date, Long, Boolean]
println(classes.'package'.name);
}
}
Bir siteye erişip içeriğini okumak için aşağıda bir code yer almakta, görebileceğiniz gibi groovy de bir rss’i almak cok kolay.Groovy de closure code yazmak çok kolaşmakta.
package com.rayyildiz
import java.net.URL
class HelloWorld {
static main(args) {
def url = new URL("http://rayyildiz.com/feed");
url.eachLine { ln ->
println(ln);
}
}
}
Özellikle java programcılarının çok kolay alışabileceği bir dil olan groovy yi incelemenizi tafsiye ederim. Size farklı bir bakış açışı kazandıracaktır.
Java’da Vector ve ArrayList Performans Karşılaştırması
javada, Vector ve ArrayList arasındaki farkın ne olduğunu sorulduğunda, genel olarak şunları söyleriz
- Vector’un thread-safe‘dir.
- Vector kapasitesi 2 kat artacak şekildedir (eğer capacityIncrement değeri verilmediyse).
- ArrayList her seferinde kapasitesinin yarısı kadar ( %50) kapasitesini artırır.
- Herikisi de öntanımlı olarak 10 element saklayabilecek şekilde ilklenir.
Burada¬† en çok Vector’un thread-safe özelliği öne çıkar. Yani Vector; ArrayList e göre, içindeki verinin doğruluğunu garanti eder. Hız olarak nasıl bir etkisi olduğuna ise inceleyelim.
Continue reading “Java’da Vector ve ArrayList Performans Karşılaştırması” »
Oyun Geliştirmek için Hangi Programlama Dili
√úniversitedeyken hazırladığım, oyun geliştirmek için hangi programlama dili tercih etmek, avantaj ve dezavantajları gibi başlıca konularda fikir veriebilmesi amacıyla yayınlıyorum.
https://docs.google.com/present/embed?id=dr9fd4p_58gtqskfcg&interval=5
Aradan epey bir zaman geçtiği için teknolojilerde değişiklikler oldu ama genel anlamda size bilgi verebilir.
JDK6 da Dependency Injection (ServiceLoader)
DI ne olduğuna dair bir yazıyı buradan ulaşabilirsiniz. JDK6 da ise ServiceLoader gelmektedir. ServiceLoader sayesinde bir nevi DI sağlamış olmaktayız. Bunun nasıl yapacağımızı bir örnekle gösterelim.
Uygulamanın örnek test kodlarını github üzerinden bulabilmeniz mümkündür.
Bu örneği yapabilmek için 3 tane proje oluşturalım. Bu 3 proje ve açıklaması şu şekildedir:
UserAuth : Arayüzün yer aldığı proje.IUserAuthService diye bir arayüz yer almakta ve bu arayüz login diye bir metot tanımı içermektedir.
UserAuthImpl: Uygulamanın gerçekleştirildiği sınıf yer alır.
UserAuthTest: Main sınıfının yer aldığı örnek uygulamadır.
Arayüzün yer aldığı UserAuth projesinde farklı olarak META-INF/services klasörü- ve bu klasör içinde com.rayyildiz.userauth.IUserAuthService dosyası yer almaktadır. Bu dosya içine bakarsanız sadece bir satır yer almaktadır.
com.rayyildiz.userauth.impl.UserAuthService
ServiceLoader bu dosyalara bakarak hangi implemantosyunu yüklemesi gerektiğini anlar. UserAuth.jar implementasyonun yer aldığı UserAuthImpl.jar referans olarak bilmez. SericeLoader load sırasında bu implementasyonu arayacaktır.
Burada asıl önemli test projemize bakalım:
package com.rayyildiz.userauth;
import java.util.Iterator;
import java.util.ServiceLoader;
public class Main {
public static void main(String[] args) {
ServiceLoader<IUserAuthService> serviceLoader = ServiceLoader.load(IUserAuthService.class);
Iterator<IUserAuthService> iterator = serviceLoader.iterator();-
while(iterator!= null && iterator.hasNext()){
IUserAuthService userAuthService = iterator.next();
boolean login = userAuthService.login("demo", "password");
System.out.println("Login for username: demo and password:password is " + login);
}
}
Gördüğünüz gibi test uygulaması implementasyon nesnesini görmez. ServiceLoader META-INF/services içinde yer alan dosyalara bakarak implementasyon nesnelerini örnek projenin olduğu klasörde ve CLASSPATH de arar.
Android Platformunda Tablı Ekranlar
Android ekranları tasarlarken Tab kullanmak güzel bir artı katmakta, Activity ler arasında dolaşmaktan daha avantajlı bir yapı sunmaktadır. Android de tab kullanmak için “TabActivity” yararlanacağız. Bunun için ihtiyacımız olan layout xml şu şekilde bir yapıda olmalı.
Göreceğiniz gibi ana layout TabHost’dur. Gördüğünüz bir tane FrameLayout yer almaktadır. Biz code içinde Tab ları ekleyeceğimiz için layout base bir yapıdadır. Tüm Activity leri “AndroidManifest.xml” içinde tanımlamalısınız.
Tabları host edecek olan nesnemiz ise şu şekildedir:
public class ApplicationActivity extends TabActivity {
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
Resources res = getResources();
TabHost tabHost = getTabHost();
TabHost.TabSpec spec;
Intent intent;
intent = new Intent().setClass(this, DashboardActivity.class);
spec = tabHost.newTabSpec("home").setIndicator("Home",
res.getDrawable (R.drawable.ic_tab_dashboard)).setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, CreditCardActivity.class);
spec = tabHost.newTabSpec("sample1").setIndicator("Sample Tab",
res.getDrawable (R.drawable.ic_tab_sample1)).setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, SettingActivity.class);
spec = tabHost.newTabSpec("sample2").setIndicator("Sample Tab 2",
res.getDrawable (R.drawable.ic_tab_sample2)).setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, AboutActivity.class);
spec = tabHost.newTabSpec("about").setIndicator("Sample Tab 3",
res.getDrawable (R.drawable.ic_tab_about)).setContent(intent);
tabHost.addTab(spec);
tabHost.setCurrentTab(0);
}
}
Ben burada daha şık olması amacıyla Tab seçili iken farklı bir ikon görünmesi amacıyla “ic_tab_xxx” dosyalarını kullandım. Bunlar şuna benzer bir yapıdadır:
Uygulamamızı çalıştırdığımızda ekran görünütüsü buna benzer olmaktadır.
Daha sonra daha detaylı bilgi paylaşıyor olacağım, şimdilik hoşcakalın.
Android Uygulamalarında Veritabanı İşlemleri
Bir uygulama geliştirirken verilerin saklanması ihtiyacı doğmakta ve verilerin uygulamadan ayrı bir yapı olarak durması maksadıyla veritabını kullanılmaktadır. Android bir uygulama geliştirirken, aynı nedenden dolayı verilerin saklanması ihtiyacınız olacaktır. Micro device için uygulama geliştirmek, desktop bir bilgisayar için uygulama geliştirmekten daha zordur. Memory ve harddisk’inizin kısıtlı olması, işlemcinin gücü, multitask uygulama geliştirme sıkıntısı başlıcalarındandır. Android de ise yerleşik sqlite veritabanının yer alması ise Android’e önemli bir artı sunmaktadır.
Sqlite, oldukça önemli projelerde kullanılmış (Firefox,Skype, Mcfee, iPhone,…) ve de oldukçe iyi test edilmiş bir veritabanıdır. 4K stack ve 100K ise heap için yeterlidir. Android içinde ise gelen sqlite, bir android uygulamasının ihtiyac duyduğu veritabanı işlemlerini karşılayacak düzeydedir.
Bu giriş bilgilerinden sonra örnek bir uygulama geliştirelim. Uygulamamız, ad, soyad ve telefon numarası kayıt edeceğimiz bir “customer” tablosu olsun. Linux ‘ta sqliteman gibi bir uygulama ile veritabanınızı oluştururun. Örneğimizde kullanacağımız tablonun scripti şu şekildedir:
Continue reading “Android Uygulamalarında Veritabanı İşlemleri” »
Android için Uygulama Geliştirme
Android ile uygulama geliştirmeye başlamak için Android SDK indirmeniz gerekiyor. İşletim sisteminize göre bir sürümü indirip açtıktan sonra , windows için Setup.exe kullanadarak linux için ise tools klasörü altında yer alan ./android komutuyla android platform indirmeniz gerekiyor.
Şu anda en son sürüm 2.2 (Android
dilerseniz tüm platformları dilerseniz sadece ihtiyacınız olan platformu indirebilirsiniz. Platformu indirmek biraz zaman alabilir.
Bu sırada size tafsiyem UI tasarlayabileniz için droiddraw adındaki bir uygulamayı indirmenizdir. Her ne kadar da eclipse için ADT paketi yer alsa da ben droiddraw ı daha çok beğendim. Ayrıca biz örneği netbeans ile geliştireceğiz. Bu yüzden droiddraw ı indirmenizde yarar var. Ayrıca netbeans için geliştirilmiş NBAndroid eklentisini- bu adresten yardım alarak veya ÔªøÔªø http://kenai.com/downloads/nbandroid/updates.xml update adresiyle kurabilirsiniz. Yapmanız gereken netbeans de Tools->Plugins oradan da Settings de “Add” butonuna tıklayarak bu plugini eklemek ve Available Plugins tabında Android diye aratıp bu plugin i kurmaktır.
Daha sonra linux için terminalden aşağıdaki komutu- çalıştırıp DroidDraw ı açın. Windows da eğer Java6 kuruluysa, droiddraw ın içindeki droiddraw.jar ı tıklamanız yeterlidir.
rayyildiz@iceface:~/Downloads/developer/droiddraw-r1b14$ sh droiddraw.sh &
Droiddraw ile widgets tab ındaki Button u sürükleyip yandaki alana bırakınız. Daha sonra Button’a tıklayıp Properties tabı na tıklayınız.Burada şu bilgileri değiştirin:
id——– : @+id/btnSample
Width : 100px
Text—- : Hi
Bunları değiştirip Apply düğmensine basın. Sizde diğer özellikleri bakabilirsiniz. Burada sadece şu aklınızda olsun; Width, height, left margin değerleri gibi yerlerde mutlaka px ekleyin. Yani 100 değil 100px olmalı. Bu işlemleri tamamlayıp Generete tıklanız. Output ekranında aşağıdakine benzer bir xml üretecek. Bu xml sizin UI nı oluşturacaktır.
<?xml version="1.0" encoding="utf-8"?> <AbsoluteLayout android:id="@+id/widget0" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" > <Button android:id="@+id/btnSample" android:layout_width="100px" android:layout_height="wrap_content" android:text="Hi" android:layout_x="90px" android:layout_y="32px" > </Button> </AbsoluteLayout>
Netbeans de yeni bir proje açalım. NBAdroid eklentisini kurduysanız, yeni bir proje eklerken Android diye bir kısım yer alacaktır. Daha sorna yandaki gibi proje adı, paket adı, activity adı gibi alanları doldurmanız gerekiyor. İlk kez acıyosanız, Manageplatformu tıklayarak kurulum yaptığınız android klasörünü göstermeniz gerekiyor.
İlk kez projeyi actığınızda, Shift + F10 ile projeyi çalıştırabilirsiniz. Burada android emulator acılıp projenizi yükleyecektir ve ekrana klasik “Hello World” yazacaktır.
Şimdi uygulamaya geri dönüp Resources/layouts altında yer alan main.xml- i droiddraw ile üretttiğimiz xml i kopyalayıp yağıştıralım. Bunu yaptıktan sonra uygulamayı bir kere build etmenizde yarar var. Bu işlem sonuda otomatik üretilen R.java dosyasında aşağıaki gibi değişiklikler olacaktır.
public final class R {
public static final class attr { }
public static final class id {
public static final int btnSample=0x7f040001;
public static final int widget0=0x7f040000;
}
public static final class layout {
public static final int main=0x7f020000;
}
public static final class string {
public static final int app_name=0x7f030000;
}
}
Daha sonra aşağıdaki kodu MainActivity.java içine yazınız.
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
final Button button = (Button) findViewById(R.id.btnSample);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
alert("Hello world");
}
});
}
private void alert(String message){
new AlertDialog.Builder(this).setTitle("rayyildiz.com").setMessage(message).setNeutralButton("Ok",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int which) { }
}).show();
}
Uygulamayı çalıştırdığınızda şöylşe çalışacaktır:

Uygulamanın kaynak kodunu şu adresten indirebilirsiniz.http://github.com/downloads/rayyildiz/TestProject/AndroidSample1-v1_0.tar.gz
Netbeans 6.9
Netbeans 6.9 beta sürümü yayınlandı. Netbeans 6.9 adresinden detaylarına bakabilir ve indirebilirsiniz.
Netbeans 6.9 da benim uzun süredir beklediğim Spring 3.0 desteği en sonunda gelmiş oldu. Daha önceki sürümlerinde netbeans Spring 2.5 desteği sunuyordu. Özellikle spring 3.0 ile gelen özellikleri kullanabileceğiz. Netbeans 6.9, 9 haziranda release olacak.
Google App Engine için geliştirilmiş plugin de mevcuttur.
Continue reading “Netbeans 6.9” »



