Skip to content
Jul 12 10

JDK6 da Dependency Injection (ServiceLoader)

by rayyildiz

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.

Jun 12 10

Android Platformunda Tablı Ekranlar

by rayyildiz

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.

Jun 12 10

Android Uygulamalarında Veritabanı İşlemleri

by rayyildiz

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:
read more…

Jun 5 10

Android için Uygulama Geliştirme

by rayyildiz

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 8) 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

May 8 10

NoSQL Giriş ve MongoDB

by rayyildiz

NoSQL, isminden de anlaşılabileceği gibi SQL kullanılmadığı veritabanlarına verilen genel bir isimdir. Genelde ORM ile karıştırılmaktadır. NoSQL, işişkisel veritabanlarına (RDMS) alternatif bir tekniktir.

ilişkisel bir veritabanında (RDMS), tablolar oluşturur, tabloları birbirleriyle ilişki kurarak, join, kartezyen gibi SQL cümlecikleriyle kullanırız. Bunun birçok faydası vardır. Hatta yazılım geliştirirken, SQL den kaçınmak maksadıyla, ORM aracları geliştirilmiştir. Bu sayede, veritabanında yer alan tablolara, nesne gözüyle bakılabilmiş, OOP mantığıyla üzerinde işlem yapılabilmiştir.

NoSQL ise böyle birşey değildir. ORM araçları, sizin bir nesneye set ettiğiniz değerleri, SQL cevirerek, sizin SQL ile uğraşmanızı engellemiş olurlar. NoSQL veritabanları dağıtık bir mimari ile oluşturulmuş olup, yarının teknolojisi olarak görülmektedirler. Google’ın BigTable, Amazon’un Dynamo, Facebook’un Cassandra bu tür birer veritabanlarıdır.Bu üç veritabanı da PB boyutunda veri tutmak için geliştirilmiştir. Ben bunlardan konfigurasyon acısından daha kolay yapılan döküman tabanlı bir veritabanı hakkında bilgi vereceğim: MongoDB.

read more…

May 4 10

Git-scm ve GitHub

by rayyildiz

Github, git-scm ile opensource veya kendi projelerinizin kaynak kodlarını yönetmek için bir uygulama. SVN üzerinde yer alan kaynak kodları çok kolay bir şekilde, import edebiliyorsunuz. Ücretsiz sürümü private proje açmanıza izin vermezken, sayısız public proje açabilirsiniz.

Twitter, facebook başta olmak üzere birçok önemli proje şu anda github üzerinde durmakta. Twitter’ın scala ile geliştirdiği gizzard projesi github üzerinden erişmeniz mümkün.

Git-Scm

Linux Torwalds tarafından geliştirilen kaynak kod paylaşım aracıdır. Özellikle dağıtım kod yönetim sistemi olmasından ve hızlı çalışmasından dolayı gün geçtikçe populer bir hale gelmeye başladı. SVN den farklı olarak merkezi değil, dağıtık bir kod yönetimine sahiptir. Bu ise linux kernel’ın geliştirilmesi sürecinde ihtiyac haline gelen ve gene Linux Torwalds tarafından yazılan bir araç.

read more…

May 3 10

Netbeans 6.9

by rayyildiz

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.

read more…

May 2 10

VPS Sunucu olarak Linux, Windows?

by rayyildiz

2 yıldan fazla bir sürede, kendi blogumu barındırmak ve değişik testler yapabilmek amacıyla linux tabanlı VPS hizmetinden yararlanmıştım. Linode üzerinden aldığım bu hizmeti 2 yıl boyunca neredeyse hiç sorun yaşamadan kullandım. Bu sürenin parelelinde ise gerek windows host, gerekse windows VPS de kullanmak durumunda kaldım. Ama söyleyebilirim ki, linux sunucu tarafında büyük işler başarıyordu. Ayarları windows a göre daha karışık olsa bile, arada cok büyük performans farkları göze carpıyordu.

read more…

Apr 9 10

Ayrılık ve Buluşma

by rayyildiz

12 Ağustos 2009 tarihinde vatan-i görevimi yapmak üzere, ayrılmak zorunda kaldığım birçok şey artık geride kaldı. 18 Ocak 2010 tarihi ile bu ayrılık son bulmuş oldu. Artık yeni heyecanlara, yeni yaşamlara yelken açmanın zamanı da gelmiş oldu.
Bi rçoğunun aksine, askerliğin faydalı olduğu inancındayım. Evet alışkın olduğumuz kurallara, mantıklara çok ters bir düzen var orada; ancak askerlik kendi içinde tutarlı bir mantık ve düzen içermektedir. Ben de herkes gibi askerlik boyunca her an “bu çok saçma, bu yanlış” dedim durdum. Ancak bittikten sonra anlıyorsun faydasını.
Hayatta bazı şeylerin kıymetini bilemeyiz. En son çıkan telefonun peşinde koşarken, en ilkelin bile asıl görevi olan konuşma özelliğinin ne kadar kıymetli olduğuna anlayamayız. Hayatımızını kıymetini bilmez, gece çok gec saatlerde yatar ve sabah da günün en verimli zamanlarını uyuyarak geçiririz. Sürekli İstanbul trafiğini şikayet eder, çok kalabalık olduğunu söyleriz. İşte askerlik görevi boyunca bunların kıymetini anlarsınız. Telefon “çok önemli bir iletişim aletidir” dersiniz. Aslında İstanbul o kadar da kalabalık değilmiş dersiniz. Ve bunun gibi sayabileceğim birçok şeyin kıymetini anlarsınız. Her askerlik görevini tamamlayan kişi, ne demek istediğimi anlayacaktır.
Bunları yazdığımda kimse askerlik göreviminin kötü geçtiğini düşünmesin. Ben çok iyi bir yerde görevimi yaptım. Hiç küfür etmeyen komutanların tanında bulundum. Neredeyse “Ramazan bey şu yazıyı yazabilir misiniz?” gibi bir yerde görev yaptım. Gerçekten askerlik görevinin kutsal saymış kişilerle tanıştım. Sıkıntılarım da oldu ama çok az.
Bu zaman ayrılığında en çok ayrılığın ne demek olduğunu anladım. Ben 16-17 senedir, gerek eğitim gerekse iş amacıyla ailemden ayrı bir şehirde yaşıyorum ama bu farklı bir durum oldu benim için.
Sonucta bitti ayrılıklar ve başladı beraberlikler.
Uzun bir dönemin ardından böyle bir yazı ile başlamak istedim, hoşçakal dediklerime merhabalar olsun demek istedim.

Apr 20 09

Cloud Computing Yapmak İstiyorum:Stax.net

by rayyildiz

Cloud Computing yabancı olanlar için ne olduğu hakkında bilgi vermekle başlayayım. Cloud computing ( kümesel işlemler diye Türkçe’de kullanılıyor)  hesap duyulan birçok işlemin uzaktaki bir veya birden fazla bilgisayar üzerinde yapılabilmesine olanak sunan bir mimari.  Bu konuda başta google ile duymaya başladığımız bu mimari, amazon ws ile cok daha gün yüzüen cıktı. Özellikle Amazon Web Servisleri bu konuda cok yol katetti. Gectiğimiz günlerde, twitter‘ın Amazon WS gecmesi ve hemen arkasından google app engine‘in java desteği sunması, cloud computing kavramını bir anda öne cıkardı.

Özellikle google app engine java desteği, cok önemli bir gelişme oldu. Daha öncesinde sadece python desteği sunan google engine, daha geniş kitleye hitap eden java desteği ile ciddi bir talep almış görünüyor. read more…