27 Aralık 2010 Pazartesi

JDBC İLE VERİ TABANI BAĞLANTISI

        JDBC (Java Database Connectivity Api )java uygulamalarından çeşitli veri tabanı sistemlerine bağlanmak için kullanılan bir arayüzdür.Uygulamamızdan bir veri tabanına bağlanmak için o veri tabanının JDBC sürücüsünü projemize eklememiz gerekir.Bu kısa açıklamanın ardından şimdi isterseniz uygulamamızdan Java DB ye ( ben burada örnek olarak Java DB ye bağlandım siz ihtiyaca göre MYSQL,POSTGRESQL gibi diğer veri tabanı sistemlerine bağlanabilirsiniz ) nasıl bağlanabiliriz ona bakalım :


    import java.sql.*;      // veri tabanı işlemleri için gerekli sınıfları içeren paket
    public class Bağlantı {
  
    Connection con;       // bağlantı kurmak için gerekli interface
      
    public Bağlantı(String user,String pass)
    {
        try{
                      con=DriverManager.getConnection("jdbc:derby://localhost:1527/mydb;user="+user+";password="+pass+";");                                 // bağlantı url miz

            }
      
        catch(Exception ex)
        {
            System.out.println(ex);
        }
  
    }
    public void close()
    {
        try{
            con.close();
        }
        catch(Exception ex)
        {
            System.out.println(ex);
        }
    }
}

         Bağlantı sınıfımızı yazdıktan sonra kullanmadan önce  unutmamamız gereken bir şey var ki o da driverı yüklemek.Bunun için projemizin Libraries klasörüne sağ tıklayark add JAR/folder diyerek çıkan ekrandan C:\Program Files\Sun\JavaDB\lib\derbyclient.jar ı seçip driverı projemize ekliyoruz.

         Bu yazımda en basit haliyle javada veri tabanı bağlantısını nasıl yapabileceğimizi gösterdim.Veri tabanında sorgulama,veri tabanından veri çekme gibi konulara hiç girmedim.Bunlar için başka bir yazıda görüşmek üzere...


MEZUNLARIMIZLA BULUŞTUK

    
          
            Geçtiğimiz cumartesi günü BBTK (BİLGİSAYAR VE BİLİŞİM TEKNOLOJİLERİ KLÜBÜ) olarak Selçuk Hocamızın da değerli katkılarıyla mezunlarımızla biraraya geldik.Aklımızdaki tüm sorulara yanıt bulabildiğimiz, özellikle kendi adıma mezuniyete 1 dönem kala merak ettiğim pek çok konuda aydınlandığım bir söyleşi oldu.2 oturum şeklinde gerçekleşen etkinlikte okulumuzun en genç mezunlarıyla buluştuk.1.oturumda Avea ve  Ericssondan gelen arkadaşlarımıza 2.oturumda Koç Sistem , TAI , Roketsan ve Savronikten gelen mezunlarımız katıldı.Hepimizin merak ettiği staj ,işe alım ,mülakat ,proje yarışmaları gibi konular konuşuldu.Mezunlar iş hayatına atılma sürecinde yaşadıkları deneyimlerini bizimle paylaştılar.Birçok başarının ancak takım çalışmasıyla elde edilebildiği Bilişim Sektöründe, takım olmanın,grup çalışmasının öneminden;proje yarışmalarının ,staj programlarının kazandırdıklarından;bitirme tezinin ilerde çalışılacak alanda yapılması gerektiğinden bahsettiler.Gelemeyen arkadaşlarımıza nispet yapmak gibi olmasın , gelenin çok şey kazandığı,gelemeyenın ise çok şey kaçırdığı bir söyleşi oldu.Bu nedenle isteğimizi kırmayıp gelen arkadaşlarımıza ve bize verdiği destekten ötürü Hocamıza çok teşekkür ediyorum.

24 Kasım 2010 Çarşamba

Java Remote Method Invocation (RMI) Nedir?

      RMI dağıtık sistemlerdeki RPC (Remote Procedure Call) mantığına benzeyen ancak sadece Javaya özgü olan bir sistemdir.Bir makine üzerinde çalışan bir java nesnesinin başka bir makinede çalışan java nesnesine ait bir metodu çağırabilmesini sağlar.Bu da dağıtık uygulama geliştirmemizi sağlar.
      Peki RMI kullanmanın geliştirici ve son kullanıcıya ne gibi getirileri vardır.Geliştirici açısından bakarsak uygulama geliştirme sırasında ağ işlemlerinin alt düzey ayrıntıları ile uğraşmasına gerek kalmamaktadır.Son kullanıcı açısından bakarsak da, kullanıcıya üst düzey bir arayüz sunmaktadır.
      İsterseniz konunun daha iyi anlaşılması açısından basit bir uygulama yapalım :

server.java
package rmi;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.rmi.AccessException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;

public class server extends UnicastRemoteObject implements arayüz {
  
    Registry kayit;
    String adres;
    int port;

    public server() throws RemoteException
    {
        super();

        try{
            adres=(InetAddress.getLocalHost().toString());
        }
        catch(UnknownHostException ex)
        {
            System.out.println(ex);
        }
        port=1316;

        try
        {
            kayit=LocateRegistry.createRegistry(port);
        }
        catch(RemoteException ex)
        {
            System.out.println(ex);
        }

        try {

            kayit.rebind("Local Interface", this);

} catch (AccessException e) {

e.printStackTrace();

} catch (RemoteException e) {

e.printStackTrace();

}

    }
    public void mesajAl(String mesaj) throws RemoteException
    {

       System.out.println(mesaj);

}

    public static void main(String[] args) {

         try {

             server obj=new server();
          
} catch (RemoteException e) {

    e.printStackTrace();

}
}
}

client.java
package rmi;

import java.rmi.AccessException;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import javax.swing.JOptionPane;

public class client {

    Registry kayit=null;
    arayüz objArayüz=null;

       public client()
        {
        String mesajgir=JOptionPane.showInputDialog("Bir mesaj girin");

        try
        {
            kayit=LocateRegistry.getRegistry("127.0.0.1",1316);
        }

        catch(RemoteException ex)
        {
            System.out.println(ex);

        }

        try{
            objArayüz=(arayüz)(kayit.lookup("Local Interface"));

        }
        catch(AccessException ex)
        {
            System.out.println(ex);
        }

        catch(RemoteException ex)
        {
            System.out.println(ex);
        }

        catch(NotBoundException ex)
        {
            System.out.println(ex);
        }

        try
        {
            objArayüz.mesajAl(mesajgir);

        }
        catch(RemoteException ex)
        {
                   System.out.println(ex);
        }

    }
        public static void main(String[] args) {

            client objClient=new client();
        }
}

arayüz.java
package rmi;
import java.rmi.RemoteException;
import java.rmi.Remote;

public interface arayüz extends Remote {

    public void mesajAl(String mesaj) throws RemoteException;

}

Uygulamada client nesnesi server sınıfınının mesajAl() metodunu  "arayüz" arayüzü aracılığıyla çağırmaktadır.

       Gördüğünüz gibi kullanımı oldukça kolay.Kullanımının kolaylığı,taşınabilir olması,güvenilir olması RMI ın dağıtık uygulamalarda tercih edilme sebepleri arasında geliyor.

9 Kasım 2010 Salı

J2ME - RMS ( RECORD MANAGEMENT SYSTEM )

       J2ME uygulamalarımızda verimizi depolamak ve sonra gerektiğinde yeniden ulaşmak istediğimizde MIDP nin bize sunduğu  RMS adı verilen paketi kullanırız.

       RMS verileri Record Store adı verilen alanlarda saklar.Daha anlaşılır olabilmesi için bu alanları veritabanı uygulamalarındaki tablolar gibi düşünebiliriz.Bu alanlar kayıtlardan oluşmaktadır.Kayıtlar ise veri alanlarından.Az önceki veri tabanı tablosu örneğini düşünürsek kayıtları satırlara ,bu kayıtlardaki veri alanlarını ise sütunlara benzetebiliriz.Şimdi isterseniz kayıt alanları nasıl oluşturulur,veri nasıl yazılır,nasıl okunur bunlara bakalım :

       Kayıt Alanı Açmak
            Kayıt alanı açmak için openRecordStore() metodu kullanılır.Bu metod ile yeni bir kayıt alanı oluşturabilir ya da var olan bir alanı açabiliriz.
            RecordStore openRecordStore(String recordStoreName , boolean createIfNecessary)
            String recordStoreName : kayıt alanının ismi
            boolean createIfNecessary : true ise kayıt alanı mevcutsa açar , yoksa yeni alan açar.
                                                      false ise kayıt alanı mevcutsa açar değilse yenisini yaratmaz.

       Kayıt Alanını Kapatmak
            Bunun için ise closeRecordStore() metodu kullanılır.Bu metod herhangi bir parametre almaz.
            void closeRecordStore()

       Kayıt Alanına Veri Yazmak
            Veri yazmak için addRecord() metodu kullanılır.
            int addRecord(byte [] data , int offset , int numBytes)
            byte [] data : yazılacak verinin byte dizisi
            int offset : byte dizisinin ilk bytenın indeksi
            int numBytes : yazılacak toplam byte değeri

            Int türünde olan Return değeri ise kaydın id sidir. (Burada kaydın id si olarak kastettiğim şey yaratılan her bir kayıt için oluşturulan id değeridir.Bu değer kaydımızın primary keyidir.)

       Kayıt Alanından Veri Okumak
            Bunun için ise getRecord() metodu kullanılmaktadır.
            byte getRecord(int recordId)
            int recordId : okunacak kaydın idsi.

            Metod kaydı byte dizisi şeklinde geri döndürür.

            int getRecord(int recordİd , byte [] buffer , int offset)
            byte [] buffer : kaydın yazılacağı buffer dizisi
            int offset : kayıt alanındaki byte dizisinin kaçıncı byteından itibaren okunacağı bilgisi

       Şimdi isterseniz gelin bu anlattıklarımızı bir uygulama üzerinde görelim :


package hello;

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.rms.*;
import java.io.*;

/**
 * @author aycan
 */
public class HelloMIDlet extends MIDlet implements CommandListener {

    private boolean midletPaused = false;                    
    private Command exitCommand;
    private Form form;
    private StringItem stringItem;                    
    private Command process;
    private Alert alert;
    private RecordStore recordStore = null;
    /**
     * The HelloMIDlet constructor.
     */
    public HelloMIDlet() {
    }

 private void createRecordStore() {
        try {
            recordStore = javax.microedition.rms.RecordStore.openRecordStore("myRecordStore",
                    true);
        } catch (Exception e) {

            alert = new Alert("Kayıt Yaratılırken Hata Oluştu", e.toString(), null, AlertType.WARNING);
            alert.setTimeout(Alert.FOREVER);
            getDisplay().setCurrent(alert);
        }
    }

    private void writeRecordStore() {
        try {
            byte[] byteArray;
            String name = "Ayşe Çalışkan";
            int number = 20061001;
            boolean outputBoolean = true;
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            DataOutputStream outputDataStream = new DataOutputStream(outputStream);
            outputDataStream.writeUTF(name);
            outputDataStream.writeInt(number);
            outputDataStream.writeBoolean(outputBoolean);
            outputDataStream.flush();
            byteArray = outputStream.toByteArray();
            recordStore.addRecord(byteArray, 0, byteArray.length);
            outputStream.reset();
            outputStream.close();
            outputDataStream.close();
        } catch (Exception e) {
            alert = new Alert("Kayit Yazarken Hata Olustu", e.toString(), null, AlertType.WARNING);
            alert.setTimeout(Alert.FOREVER);
            getDisplay().setCurrent(alert);
        }
    }

    private void readRecordStore() {
        try {
            String name = null;
            int number = 0;
            boolean inputBoolean = false;
            byte[] byteInputData = new byte[200];
            ByteArrayInputStream inputStream = new ByteArrayInputStream(byteInputData);
            DataInputStream inputDataStream = new DataInputStream(inputStream);
            for (int x = 1; x <= recordStore.getNumRecords(); x++) {
                recordStore.getRecord(x, byteInputData, 0);
                name = inputDataStream.readUTF();
                number = inputDataStream.readInt();
                inputBoolean = inputDataStream.readBoolean();
                inputStream.reset();
            }

            inputStream.close();
            inputDataStream.close();
            alert = new Alert("Reading", "Adı : " + name + "\nNumarası : " + number + "\n" +
                    inputBoolean, null, AlertType.WARNING);
            alert.setTimeout(Alert.FOREVER);
            getDisplay().setCurrent(alert);
        } catch (Exception e) {
            alert = new Alert("Kayıt Okurken Hata Oluştu", e.toString(), null, AlertType.WARNING);
            alert.setTimeout(Alert.FOREVER);
            getDisplay().setCurrent(alert);
        }
    }

    private void closingRecordStore() {
        try {
            recordStore.closeRecordStore();
        } catch (Exception error) {
            alert = new Alert("Kayıt Alanı Kapatılırken Hata Oluştu", error.toString(), null,
                    AlertType.WARNING);
            alert.setTimeout(Alert.FOREVER);
            getDisplay().setCurrent(alert);
        }
    }

    private void deleteRecord() {
        if (javax.microedition.rms.RecordStore.listRecordStores() != null) {
            try {
                javax.microedition.rms.RecordStore.deleteRecordStore("myRecordStore");
            } catch (Exception error) {
                alert = new Alert("Kayıt Alanı Silinirken Hata Oluştu",
                        error.toString(), null, AlertType.WARNING);
                alert.setTimeout(Alert.FOREVER);
                getDisplay().setCurrent(alert);
            }
        }
    }

                                      
       private void initialize() {                                      
        getForm().addCommand(getProcess());
        getForm().addCommand(getExitCommand());
        getForm().setCommandListener(this);
    
    }                          
                                     
    /**
     * Performs an action assigned to the Mobile Device - MIDlet Started point.
     */
    public void startMIDlet() {                                    
        // write pre-action user code here
        switchDisplayable(null, getForm());                                      
        // write post-action user code here
    }                          
                                        
    /**
     * Performs an action assigned to the Mobile Device - MIDlet Resumed point.
     */
    public void resumeMIDlet() {                                    
    
    }                            
                                              
    /**
     * Switches a current displayable in a display. The display instance is taken from getDisplay method. This method is used by all actions in the design for switching displayable.
     * @param alert the Alert which is temporarily set to the display; if null, then nextDisplayable is set immediately
     * @param nextDisplayable the Displayable to be set
     */
    public void switchDisplayable(Alert alert, Displayable nextDisplayable) {                                          
        // write pre-switch user code here
        Display display = getDisplay();                                            
        if (alert == null) {
            display.setCurrent(nextDisplayable);
        } else {
            display.setCurrent(alert, nextDisplayable);
        }                                          
        // write post-switch user code here
    }                                
                                                
    /**
     * Called by a system to indicated that a command has been invoked on a particular displayable.
     * @param command the Command that was invoked
     * @param displayable the Displayable where the command was invoked
     */
    public void commandAction(Command command, Displayable displayable) {                                            
        // write pre-action user code here
        if (displayable == form) {                                        
            if (command == exitCommand) {                                      
                // write pre-action user code here
                exitMIDlet();                                        
                // write post-action user code here
            }                                                
        }                                              
        if (command == getProcess()) {
            createRecordStore();
            writeRecordStore();
            readRecordStore();
            closingRecordStore();
            deleteRecord();
        } else if (command == getExitCommand()) {
            destroyApp(false);
            notifyDestroyed();
        }

    }                            
    //                          
    public Command getProcess() {
        if (process == null) {
            process = new Command("Process", Command.OK, 4);
        }
        return process;
    }
                                  
    /**
     * Returns an initiliazed instance of exitCommand component.
     * @return the initialized component instance
     */
    public Command getExitCommand() {
        if (exitCommand == null) {
            exitCommand = new Command("Exit", Command.EXIT, 0);                                
          
        }                      
        return exitCommand;
    }
                                    
    /**
     * Returns an initiliazed instance of form component.
     * @return the initialized component instance
     */
    public Form getForm() {
        if (form == null) {                              
            // write pre-init user code here
            form = new Form("Welcome", new Item[] { getStringItem() });                                  
            form.addCommand(getExitCommand());
            form.setCommandListener(this);                                
            // write post-init user code here
        }                      
        return form;
    }
                                    
    /**
     * Returns an initiliazed instance of stringItem component.
     * @return the initialized component instance
     */
    public StringItem getStringItem() {
        if (stringItem == null) {                              
            // write pre-init user code here
            stringItem = new StringItem("Hello", "Hello, World!");                                
            // write post-init user code here
            stringItem.setLabel("Rms Çalışması");
            stringItem.setText("");
        }                      
        return stringItem;
    }                      

    /**
     * Returns a display instance.
     * @return the display instance.
     */
    public Display getDisplay() {
        return Display.getDisplay(this);
    }

    /**
     * Exits MIDlet.
     */
    public void exitMIDlet() {
        switchDisplayable(null, null);
        destroyApp(true);
        notifyDestroyed();
    }

    /**
     * Called when MIDlet is started.
     * Checks whether the MIDlet have been already started and initialize/starts or resumes the MIDlet.
     */
    public void startApp() {
        if (midletPaused) {
            resumeMIDlet();
        } else {
            initialize();
            startMIDlet();
        }
        midletPaused = false;
    }

    /**
     * Called when MIDlet is paused.
     */
    public void pauseApp() {
        midletPaused = true;
    }

    /**
     * Called to signal the MIDlet to terminate.
     * @param unconditional if true, then the MIDlet has to be unconditionally terminated and all resources has to be released.
     */
    public void destroyApp(boolean unconditional) {
    }

 
}
    
       Kodu çalıştırıp Process Commandına bastığımızda ekranımız şu şekilde olacaktır :


Kaynaklar : 
oracle.com
tutorials.jenkov.com

4 Ekim 2010 Pazartesi

BULANIK MANTIK ( FUZZY LOGIC )

             Bulanık Mantık kuramı 1965 yılında Lotfy A. Zadeh tarafından geliştirilmiştir.Ancak Zadeh Bulanık Mantık kavramını ortaya attığında "Bulanık Mantık mı olurmuş canım?" şeklinde alaycı bi tavırla karşılaşmıştır.Amerikalılar böyle alay ede dursun Japonya bu fikri alıp başarılı bi şekılde kullanmıştır.Peki nedir bu Bulanık Mantık? Kuramın geliştricisine göre "Bulanık Mantık herşeyin ,doğrunun da ,bir derece meselesi olduğu insani akıl yönetme için bir modeldir.Temelde sözcükle hesaplama anlamı sunmaktadır.".Yani Bulanık Mantıkta Klasik Boolean Mantığı gibi herşey kesin 1 (doğru) ya da 0 (yanlış) değildir.Belirsizlikleri ifade edebilmek için  0 ile 1 arasındaki değerler kullanılarak doğruluk/yanlışlık derecelendirilir.Çünkü gerçek hayatta kesin doğru ya da kesin yanlış yoktur.Bu nedenle 0 ya da 1 lerden oluşan önermeleri kullanan bilgisayarların insanların kullandığı belirsizlik ve yargı içeren önermeleri,"biraz kalabalık","az pişmiş","çok yaşlı" gibi kesin olmayan değerler içeren cümleleri değerlendirebilmesi için Bulanık Mantıktan yararlanılır. Bu sayede daha zeki makineler,sistemler geliştirilebilir.
        Örneğin bu konuda en ileri çalışmaları yapan Japonya'daki Sendai metrosunda tren o kadar sarsıntısız hareket etmektedir kı yolcuların tutunmalarına gerek kalmamaktadır.Bu Bulanık Mantık ile sağlanmaktadır.Trendeki  etki-tepki süresi insanlarınkinden üç kat daha kısadır.Ayrıca bu sistem ile %10 yakıt tasarrufu sağlanmaktadır.Bir diğer örnek yine Japonya'da bir enstitüde yapılan çalışmada fırtınada denizde mahsur kalan denizcileri kurtarma amacıyla kullanılan helikopterin Bulanık Mantıkla programlanan bir simulatörü yapılmıştır.Bu simulatörün ardından helikopterin maketi yapılarak denendiğinde havada helikopterde hiçbir sarsıntı  gözlemlenmemiştir.
        Bulanık Mantık sanayinin bütün alanlarında kullanılmaktadır.Televizyonlar,fotoğraf makineleri,kameralar,fırınlar,çamaşır makineleri,elektirikli süpürgeler bu mantıkla dizgilendirilir.Mühendislik ve bilgisayar bilimleri,yönetim ve karar destekleri,güvenilirlik ve kalite kontrolü,ekonomi ve finans,biyoloji ve tıp,çevre bilimi,psikoloji...gibi birçok alanda kullanılmaktadır.

Bulanık Mantık ve Bulanık Teknolojiler,Şevki Işıklı

5 Ağustos 2010 Perşembe

J2ME İLE FILE BROWSER

          J2ME ile  mobil aygıtlar için bir dosya tarayıcısı yapalım. Bu sayede cihazımızın belleğindeki dosyaları görüntüleyebileceğiz.

          Uygulamamızı adım adım yapalım:

          Netbeanste yeni bir proje açıyoruz.

          * Proje türünü Java ME -> Mobile Application seçiyoruz.
        
          * Uygulamamıza isim verirken "Create HelloMIDlet" checkbox ın checkini kaldırıyoruz ve projemizi oluşturuyoruz.

          * Sol taraftaki Projects kısmında projemizin üzerine gelip New->Java Package diyoruz.

          * Projemizle aynı isimli paketimizi oluşturuyoruz.

          * Paketimizin üzerine gelip New->Visual Mıdlet diyoruz.

          * Projemizle aynı ismi verip Midletimizi olşturuyoruz.

         * Midletimizi açtığımızda karşımıza Flow Designerı çıkıyor.Bu ekranda sağdaki Paletimizden bileşenleri sürükleyip bırakıyoruz.

         * 1 tane File Browser,1 tane Splash Screen,1 tane de Textbox sürükleyip bırakıyoruz.

         * Şimdi de Commandlarımızı ekleyelim.Exit commandını File Browsera,Back commandını Textbox a sürükleyip bırakıyoruz.

        * Her şey iyi hoş,bileşenleri ekledik ancak bunların şu anda birbiriyle bir bağlantısı yok.Bunu da şu şekilde yapıyoruz :



          * Şimdi sırada kodumuza dosyaları okuyacak metodu eklemek var.Source sekmesinden kodumuzu açtıktan sonra aşağıdaki kodu ekliyoruz :

private void readFile() {
        try {
            FileConnection textFile = fileBrowser.getSelectedFile();
            getTextBox().setString("");
            InputStream fis = textFile.openInputStream();
            byte[] b = new byte[1024];
            int length = fis.read(b, 0, 1024);
            fis.close();
            if (length > 0) {
                textBox.setString(new String(b, 0, length));
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

          * Son olarak da bu metodu çağırmamız gerekiyor.commandAction metodumuzun içinde readFile() diyerek metodumuzu çağırıyoruz.


public void commandAction(Command command, Displayable displayable) {
    
        if (displayable == fileBrowser) {
            if (command == FileBrowser.SELECT_FILE_COMMAND) {
               readFile();
               switchDisplayable(null, getTextBox());
              
            } else if (command == exitCommand) {
            
                exitMIDlet();
              
            }
        } else if (displayable == splashScreen) {
            if (command == SplashScreen.DISMISS_COMMAND) {
              
                switchDisplayable(null, getFileBrowser());
              
            }
        } else if (displayable == textBox) {
            if (command == backCommand1) {
              
                switchDisplayable(null, getFileBrowser());
              
            }
        }
      
    }

            Vee artık projemizi çalıştırabilir,telefonumuzun içindeki dosyalara göz atabilir,istediğimiz dosyanın içeriğini görüntüleyebiliriz.

http://netbeans.org/


1 Ağustos 2010 Pazar

J2ME KULLANICI ARAYÜZÜ ( USER INTERFACE ) BİLEŞENLERİ

     Bu yazımda J2ME uygulamalarının kullanıcı tarafında sunulmasını sağlayan kullanıcı arayüz bileşenlerinden kısaca bahsedip basit bir uygulama yapacağım.
     J2ME de arayüz bileşenleri ikiye ayrılır.Bunlar düşük seviye ve yüksek seviye bileşenlerdir.Düşük seviye bileşenler çalıştığı sisteme bağlı olmayıp bütün cihazlarda aynı görünüme sahiptirler.Bu bileşenleri Canvas sınıfı oluşturur.Canvaslar grafik çizmek için kullanılırlar.Yüksek seviye bileşenler ise çalıştıkları sisteme bağlıdırlar.Yani çalıştıkları cihazın kütüphanelerini kullanırlar.Dolayısıyla görünümleri cihazdan cihaza farklılık gösterebilir.Bu bileşenler ise Screen sınıfından türemişlerdir.


Burada bir şeyi belirtmek gerekiyor ki yukarıda gördüğümüz ,Screen sınıfından türeyen Alert,List,Textbox gibi bileşenlerden ekranda bir seferde  yalnızca bir tanesi gösterilebiliyor.Ekranda birden fazla bileşen göstermek istiyorsak Form sınıfını kullanmamız gerekiyor ve form sınıfından türeyen Choice Group,DateField gibi bileşenleri forma ekleyip formumuzu da ekrana eklememiz gerekiyor.Bir diğer önemli nokta ise dokunmatik ekrana sahip ceptelefonları dışında,ceptelefonlarında butonların kullanılmayışıdır.Bunun yerine Command kullanırız.Şimdi isterseniz bu bileşenleri kullandığımız basit bir uygulama yapalım:

package hello;

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class HelloMIDlet extends MIDlet implements CommandListener {

    private boolean midletPaused = false;

    Display ekran;
    Command karsılastir;
   
    TextField cumle;
    TextField cumle2;                     
    private Command exitCommand;
    private Form form;
    private StringItem stringItem;
   
    public HelloMIDlet() {

        form=new Form("Formumuz");
          
            cumle=new TextField("Cümle:","bu cümleyi yaz",40,TextField.ANY);
            cumle2=new TextField("Senin Cümlen:",null,40,TextField.ANY);

            karsılastir=new Command("Karsılastir",Command.OK,1);
            exitCommand=new Command("Çıkış",Command.EXIT,2);

            form.append(cumle);
            form.append(cumle2);

            ekran=Display.getDisplay(this);
            form.addCommand(karsılastir);
            form.addCommand(exitCommand);

            form.setCommandListener(this);

    }

  
    private void initialize() {                                        
        // write pre-initialize user code here
                                          
        // write post-initialize user code here
    }                           
    
    public void startMIDlet() {                                     
        // write pre-action user code here
        switchDisplayable(null, getForm());                                       
        // write post-action user code here
    }                            
    
    public void resumeMIDlet() {                                      
        // write pre-action user code here
                                        
        // write post-action user code here
    }                             
   
    public void switchDisplayable(Alert alert, Displayable nextDisplayable) {                                            
        // write pre-switch user code here
        Display display = getDisplay();                                              
        if (alert == null) {
            display.setCurrent(nextDisplayable);
        } else {
            display.setCurrent(alert, nextDisplayable);
        }                                            
        // write post-switch user code here
    }                                  
  
    public void commandAction(Command command, Displayable displayable) {                                              
       
        if (displayable == form) {                                          
            if (command == exitCommand) {                                        

               
                exitMIDlet();                                          
                // write post-action user code here
            }                                                 
        }                                               
        if(command==karsılastir)
       {
          
         int snc=cumle2.getString().compareTo(cumle.getString());
           if(snc!=0)
           {
               Alert uyarı=new Alert("HATA!!!","yanlıs giris",null,AlertType.ERROR);
               ekran.setCurrent(uyarı);
           
           }
          
 else
           {
               Alert uyarı=new Alert("TEBRİKLER","dogru giris",null,AlertType.CONFIRMATION);
               ekran.setCurrent(uyarı);

 }

       }

    }                              
   
    public Command getExitCommand() {
        if (exitCommand == null) {                                
            // write pre-init user code here
            exitCommand = new Command("Exit", Command.EXIT, 0);                                  
            // write post-init user code here
        }                        
        return exitCommand;
    }
    
    public Form getForm() {
        if (form == null) {                                
            // write pre-init user code here
            form = new Form("Welcome", new Item[] { getStringItem() });                                   
            form.addCommand(getExitCommand());
            form.setCommandListener(this);                                 
            // write post-init user code here
        }                        
        return form;
    }
   
    public StringItem getStringItem() {
        if (stringItem == null) {                                
            // write pre-init user code here
            stringItem = new StringItem("Hello", "Hello, World!");                                  
            // write post-init user code here
        }                        
        return stringItem;
    }
    
    public Display getDisplay () {
        return Display.getDisplay(this);
    }

    /**
     * Exits MIDlet.
     */
    public void exitMIDlet() {
        switchDisplayable (null, null);
        destroyApp(true);
        notifyDestroyed();
    }

  
    public void startApp() {
        if (midletPaused) {
            resumeMIDlet ();
        } else {
            initialize ();
            startMIDlet ();
            ekran.setCurrent(form);

        }
        midletPaused = false;
    }

  
    public void pauseApp() {
        midletPaused = true;
    }

  
    public void destroyApp(boolean unconditional) {
    }
 }      

Bu kadar koda bakıpta çok bişey yaptığını düşünmeyin:) Yaptığı şey şu: 1.textFielddeki cümle ile 2. textFielddeki yani kullanıcının girdiği cümleyi karşılaştırıp doğru yada yanlış şeklinde geri bildirimde bulunuyor.
Koda baktığımızda bizim için önemli olan kısımlar kalın harflerle yazılmış kısımlardır.Birinci kısım ,HelloMIDlet metodu Constructor metodumuz.Burada bileşenleri oluşturup forma ekledik formu da ekrana ekledık.İkinci kısımda ise yani commandAction metodumuzda Commandlarımızdan biri uyarıldığıı takdirde yapılacak işlemleri belirttik.

7 Temmuz 2010 Çarşamba

ÜÇ ÇİNGENE KADININ HIDIRELLEZ DUASI

        Bu yeni zamanda sevdiğim kim varsa, kendim de dahil, sevebileceğim herkes de dahil...

        Sağlığı iyi olsun.

        Kalbi ritmini çalsın.Yanakları kiraz pembesi,dudakları bal olsun.Teni sıcak kalsın,enerjisi dışına taşsın.Ciğerlerinden nefes,midesinden gurultu,bacaklarından güç eksik olmasın.

        Kanı bol olsun,damarlarında dönüp dönüp dolaşsın.

        Sevdikleriyle bir arada olsun.Kolu kollarına değsin,gözü gözlerinin içine baksın.Lafları birbiriyle başlasın.Nesi varsa, bölüşecek biri olsun;.nesi yoksa bulup getirecek biri olsun.Bu birileri az ama öz olsun.Bazıları dünyada tek olsun.Sevgisinin tamamını harcasın.Harcasın ki,ona büyük bir miras kalsın.

        Sevmekten bıkıp usanmayacağı biri olsun.Onun yeri ayrı olsun.Onu soysun,başucuna koysun ama yalan uydurmasın.O herşeyine her haline ,tek tanık olsun.

        Bir hareketiyle güldüren ,bir hareketiyle ağlatan olsun.Duyguların hepsi onda olsun.Kalbi buna teslim olsun.Bütün şarkılar onu anlatsın.Aşık olsun,sırılsıklam olsun.Kurumasın.

       Yapmaktan bıkıp usanmayacağı bir işi olsun.Başarının gerçek adının bu olduğunu unutmasın.İbadet eder gibi,bu keşfini her gün yeniden kutlar gibi,onu yapıp dursun.Yaptıkça daha iyi yaptığını görsün.Daha iyi yaptıkça bunu başkaları da görsün.O başkalarının bunu gördüğünü,dış gözüyle görsün,iç gözüyle işine baksın.

        Neşesi bol olsun...

        Kendini mutlu etsin,durduk yere neşelenmek nedir bilsin.İçinde bir şey durup durup zıplasın.Duydukları,gördükleri onu gıdıklasın,kahkaha attırsın.Gürültü çıkarsın.Saçma şeyler söylesin.Çocuklukta en şımardığı ana,sık sık gidip gelsin.Nereye gidip geldiği bilinmesin.

         Değiştirmek istedikleri değişsin.

         İçte ve dışta ,iyi günde ve kötü günde tadilat yapsın.Eskilerini atsın,ruhunu havalandırsın.Kapıda hep kamyonu dursun.Dilediği yere taşınsın.Kendinden taşınmak isterse,içindeki güç dışındaki sevgi ona yardımcı olsun.Bileği,bütün alışkanlıklarıyla,bağımlılıklarıyla güreşsin.

         Bir şey ona sürpriz olsun.Günlerinden bir günü bir pakete sarılı olsun.Açılınca ,içinden hiç beklemediği güzel bir haber çıksın.Bugün üç yüz altmış beşten herhangi biri olsun.Öylesine bir pazartesi,arkaya kavuşturduğu ellerinde ,unutulmaz bir salı saklasın.Öyle tahmini mümkün olmayan bir şey olsun ki bu,hayatın zekasını anlatsın.

        Bir hayali gerçek olsun.Bir hayale gözünü yumsun.Peşinden koşup,onu sobelesin.Hayalini kendinden saklamasın.Bir çizgi filmde olduğunu,her şeyin mümkün olduğunu unutmasın.

        Bu duayı okusun.Kendi sesiyle duysun.Duası gerçek olsun.

        Her kelimesine şükretsin.Tek satırına nazar değmesin.

        Amin.

        http://www.hurriyet.com.tr/magazin/yazarlar/14752717.asp?yazarid=113&gid=225

6 Temmuz 2010 Salı

Holografik TV Teknolojisi

Biz javayla falan uğraşaduralım, teknoloji aldı başını gidiyor:)

http://cnetturkiye.com/haberler/tuketici-elektronigi/4483-holografik-tvde-turk-parmagi-var

4 Temmuz 2010 Pazar

HELLO J2ME WORLD

         
             Bu yazımda J2ME ' e giriş yapmaya çalışacağım.J2ME ,  javanın cep telefonları , PDA lar , gömülü cihazlar gibi mobil cihazlar için geliştirilmiş versiyonudur.Birtakım profiller içerir.Bu profillerde belirli bir tipteki cihaz için gerekli minumum sınıf kütüphanesi ve cihazı destekleyen java sanal makinesi tanımlanır.Şimdi gelin bu profillere bir göz atalım:

             Foundation Profile : CDC tabanlı ve grafiksel arayüze sahip olmayan cihazlar için tanımlanmış bir profildir.

             Mobile Information Device Profile (MIDP) : CLDC tabanlıdır ve mobil bilgi cihazları için tanımlanmış bir profildir.

             Personal Basis ,Personal and RMI Profile : CDC ve Foundation Profile tabanlı cihazlar için grafik  ve RMI desteği sunar.

             Profiller aslında bir iş yapmazlar , sadece tanımlamaları içerirler.Profillerin tanımladıkları belirtimleri konfigürasyonlar gerçekleştirir.

             Connected Device Configuration (CDC) : Yeni nesil gömülü ve elektronik cihazlar için Foundation Profile ' ın gerçekleştirimidir.

             Connected Limited Device Configuration (CLDC) : Kaynak kısıtlı cihazların  gerçekleştirimidir.

         


             Biz bu yazıda "Mobile phones & entry-level PDAs" kısmıyla ilgilenıcez.Bu alanda gördüğünüz üzere KVM diye bir kavram var.Peki ne demektir KVM önce onu açıklayalım.KVM ; açılımı  Kuali VM olup,küçük cihazlar için optimize edilmiş java sanal makinesine verilen isimdir.
            Bu tanımlamalardan sonra yavaş yavaş uygulama kısmına geçelim.Öncelikle bir kavramdan daha bahsetmek istiyorum : Midlet. Midlet ; mobil cihazlar için yazılmış java uygulamalarına verilen isimdir. Midlet oluşturmak için  Netbeans  gibi bir IDE kullanabileceğimiz gibi  Java Wireless Toolkit gibi bir araç da kullanabiliriz.Yalnız burada dikkat etmemiz gereken JWTK nın bir IDE olmayışıdır.Yani Netbeans le otomatik yapılan işlemler JWTK de elle komut satırından yapılır.Tabi bir midletin nasıl yaratıldığını ve çalıştırıldığını aşama aşama görmek istiyorsanız bu araçla çalışabilirsiniz.http://www.mobilpro.com/makaleler/JAD_JAR_files/JAD_JAR_files.html adresinde bu aşamalar çok güzel bir şekilde anlatılmış.Ben buradaki uygulamada Netbeans'in son sürümü olan Netbeans 6.9 u kullandım.Uygulamamızın amacı Midlet yaratmayı öğrenmek olduğu için örneği oldukça basit tutmayı tercih ettim.Şimdi uygulamamıza geçelim:

             1.Programımızı açtıktan sonra File -> New Project diyerek proje türümüzü seçiyoruz.




2.Projemizin ismini ve konumunu belirliyoruz.                                                                 





3.Platform ve Device seçimlerimizi yapıyoruz.





4.Daha ayrıntılı şablon seçimimizi yapabiliyoruz.Ve Finish diyerek projemizi oluşturuyoruz.





5.Bu uygulamada amacımız (her dilde ilk uygulamamızda yaptığımız gibi:))ekrana "Hello J2ME World" yazdırmak olduğu için default olarak gelen text imizi değiştirmek için aşağıdaki ekranda "Screen" sekmesine tıklayarak cihazımızın ekran görüntüsünü açıyoruz.








6.Bu ekranda stringimizin textini sağ tarafta Properties'den "J2ME World :)" olarak değiştiriyoruz.





7.Artık projemizi derleyebiliriz.Çıktımız şu şekilde olacaktır:





Gördüğünüz gibi oldukça basit bi uyulama,zaten biz bişey yapmadık Netbeans saolsun bizim yerimize herşeyi otomatik yapıyor:) Peki  uygulamamızı bir de telefonumuz da çalıştırmak istersek ne yapmamız gerekiyor?Öncelikle çalştırılabilir dosyanın yani ".jar" dosyasının ve onun tanımlayıcı dosyası olan ".jad "dosyasının oluşturulması  gerekiyor.Netbeans bunu da oluşturuyor:)Ama bundan önce ".jar" ve ".jad" dosyaları tam olarak ne demek buna bi bakalım:

JAR :  Bir java uygulamasının sınıf dosyalarının ve uygulamanın çalışması için gerekli bütün dosyaların paketlenmesi ile oluşan çalıştırılabilir dosyadır.Bunların dışında JAR paketinde bir de "manifest.mf" isimli bir dosya vardır.Bu dosya JAR dosyasının içeriğini tanımlar.Yani içinde MIDlet-Name,MIDlet-Version,MIDlet-Vendor gibi değişkenler vardır.

    JAD : Bir java uygulamasının cihaza yüklenmeden önce cihazla uyumlu olup olmadığı,hafıza gereksinimi gibi kontrollerin yapılması gerekir.Aslında bu kontroller manifest dosyasıyla da yapılabilir ancak bunun için JAR dosyasının cihaza yüklenmesi ve açılması gerekir.Bu nedenle bu kontrolleri gerçekleştirmek için JAD dosyası oluşturulur.İçeriği manifest dosyasıyla aynıdır ancak manifest dosyası gibi JAR dosyasının içinde yer almaz.

 Jar dosyası projemizin klasörünün içinde "dist" klasörünün içinde bulunuyor.Bu dosyayı telefonumuza atıp uygulamayı yüklüyoruz.Daha sonra uygulamaya çift tıklayarak çalıştırdığımızda textimiz telefon ekranında gözüküyor. İşte bu kadaar:) Yalnız burada birşeyi hatırlatmam da yarar var projenizi eğer telefonda çalıştırmak istiyorsanız oluştururken telefonunuzla uyumlu olan Device Configuration ve Device Profile ı seçmeniz gerekiyor aksi takdirde uygulama telefonunuzda çalışmaz.Teefonunuzun desteklediği versiyonları öğrenmek için üstad Google'a "(telefonunuzun modeli) spec" yani Nokia N73 ise "Nokia N73 spec " diye sormanız yeterli oluyor.Son olarak Midletin çalışma mantığını daha iyi anlamak için aşağıdaki şekli inceleyelim :





Umarım faydalı bir yazı olmuştur.Bir başka yazıda görüşmek üzere...

Kaynaklar:
www.mobilpro.com
J2ME & M3G Sunusu - Oğuz Dönmez

 
Copyright © AYCAN GÖKDEMİR | Theme by BloggerThemes & frostpress | Sponsored by BB Blogging