Dosya Parçalayıcı (File Splitter)


İki-üç gündür uğraştığım projeyi sonunda tamamladım. Hatalar-Buglar olabilir ama test ettiğim kadarıyla bir sorun yok. Bu gerçekleştirdiğim programda dosyaları belirtilen boyutta farklı parçalara ayırıp uzantısı 000,001,002,... gibi olan dosyaları birleştirme işlemi yapılıyor. Kodun geliştirilmesinde katkısı dilin menu üzerinden değiştirilmesine ve Java IO yerine Java Native IO kullanılması oldu. (Çalıştırılabilir JAR)

İlk başta standart IO komutlarıyla aşağıdaki şekilde parçaya dosya kopyalamayı yaparken daha hızlı çalıştığı söylenen nio (Native IO) konusuyla karşılaştım. İyi dedim, ben de bu yöntemi kullanayım o zaman. Biraz uğraştan sonra parçalara ayırmayı ve parçaları birleştirmeyi başarıyla tamamladım.

Normal IO ile kopyalama:

 // Kaynak dosyayi hedef dosyaya kopyalar
// Eger hedef dosya yoksa yaratir
void copy(File kaynak, File hedef) throws IOException {
    InputStream in = new FileInputStream(kaynak);
    OutputStream out = new FileOutputStream(hedef);

    // in'den out'a transfer bytelarini tutacak olan veri yapisi
    byte[] buf = new byte[1024];
    int len;
    while ((len = in.read(buf)) > 0) {
        out.write(buf, 0, len);
    }
    in.close();
    out.close();
}

Native IO ile kopyalama:
 try {
    // Kaynak uzerinde bir kanal aciyoruz
    FileChannel srcChannel = new FileInputStream("kaynakDosyaIsmi").getChannel();

    // Hedef uzerinde bir kanal aciyoruz
    FileChannel dstChannel = new FileOutputStream("hedefDosyaIsmi").getChannel();

    // Kaynaktan boyutu kadar byte'i hedefe yaziyoruz
    dstChannel.transferFrom(srcChannel, 0, srcChannel.size());

    // Kanallari kapatalim
    srcChannel.close();
    dstChannel.close();
} catch (IOException e) {
}

Gördüğünüz gibi dosya kopyalamada döngülerle değişkenlerle fazla uğraşmadan ve daha hızlı bir şekilde gerçekleştirim yapabiliyorsunuz. İşi ilerletmişler. Böylece her ortamın kendi hızlı dosya kopyalama işlemi çağrılıyor.

Projenin kodunu inceleyip daha ayrıntılı bilgi alabilirsiniz.

Eclipse'e Visual Editor kurulumu

Eclipse kurduktan sonra yaptığım ilk işlemlerden biri Visual Editor kurmak oluyor. Ben Eclipse projesi olan Visual Editor'u tercih ediyorum. Farklı GUI geliştirme araçları için şurayı inceleyebilirsiniz.

Ben daha önce Jigloo kullanmıştım. Non Commercial projelerde ücretsiz kullanılabiliyor. Ancak şu an Visual Editor kullanıyorum. Gayet memnunum. Visual Editor'un en beğendiğim yanları kod içerisine direkt müdaheleye izin vermesi, kendi yazdığınız kodlarıda onunla açabilmemiz ve fazla kod kirliliği yaratmaması. Örneğin jigloo'da kodun belli yerlerine yazdığımız kodlar siliniyordu.

Gelelim VE nasıl rahatlıkla kurulabilir konusuna, gerçekten bazıları VE kurduktan sonra çalıştıramayabiliyor, ben de kaç kere aynı sorunla karşılaştım.

Kurulum için benim tercih ve tavsiye ettigim yol VE'nin update sitesi üzerinden otomatik kurulum yapmak. İkinci yöntem indirme sitesinden indirip elle kurmak.

Update linkini kullanmak
  1. Eclipse'i açıyoruz, Help-->Software Updates-->Find And Install' e tıklıyoruz.
  2. Açılan pencerede Search for new features to install'ı seçip next diyoruz
  3. Bu ekranda New Remote Site seçiyoruz, Name kismina Visual Editor (ya da ne isterseniz) URL kısmına http://update.eclipse.org/tools/ve/updates/1.0 yazıyoruz
  4. Bir de EMF gerekiyor onun içinde New Remote Site Name kısmına EMF URL kısmına http://update.eclipse.org/tools/emf/updates yazıp ekliyoruz
  5. Bir de GEF gerekiyor, onun içinde New Remote Site name kısmına GEF URL kısmına http://update.eclipse.org/updates/3.0 yazıp ekleyelim.
  6. Bu eklediğimiz 3 siteyi seçelim ve Finish diyelim
  7. Mirror sorarsa seçelim
  8. Bir süre uygun sürümü arayacaktır. Bekleyelim.
  9. Aşağıdaki Filter features included in other features on the list seçeneğini seçili hale getirelim. Daha sonra Visual Editor içerisinden Visual Editor 1.1.0.1 (Sizde sürüm numarası farklı olabilir SDK olmayan en uygun sürümü)seçiyoruz. Sağ tarafta Select Required seçeneğini tıklarsak işimiz kolaylaşır ve gereken diğer tüm paketler seçilir.
  10. Next'e tıklıyoruz karşımıza lisans bilgisi gelecektir, I accept the term in the license agreement seçeneğini tıklayıp nexte tıklıyoruz.
  11. Ve gelen ekranda gereken alan bilgisini görebiliyoruz. Finish'e tıklayıp indirmeyi başlatıyoruz.
  12. Dosyaların indirilmesi tamamlanana kadar Eclipse'teki işlerimize devam etmek için Run in Background seçeneğini tıklayabiliriz.
  13. İndirme tamamlanınca açılan pencerede install all seçeneğini seçiyoruz.
  14. Eclipse yeniden başlatılınca bir sorun yoksa VE rahatlıkla çalışacaktır.
Elle Kurmak

İkinci yöntem uygun sürümleri siteden indirmektir. Bu indirmeleri yapmadan önce Eclipse sürümünüzü iyice bilmeniz gerekiyor. Eclipse 3.1 için şuradan indirmeniz gerekiyor:
Sırasıyla EMF build 2.1.0, GEF Build 3.1 ve VE-runtime-1.1.0.1.zip dosyalarını indirip kuruyorsunuz. Ve başka bir sorun yoksa VE yeniden başlattığınızda çalışacaktır.

Hangi yöntem kolayınıza gelirse onu kullanarak kurulumu gerçekleştirebilirsiniz.

Kaynak: http://www.eclipse.org/vep/WebContent/faq.html

Önemli Not: GNU/Linux ortamlarında (deneyimlerim Debian tabanlı sistemler için geçerlidir) varsayılan Java olarak GCJ tanımlı ise Visual Editor çalışmayabilir. NullPointerException vererek boş bir ekran görünmesine neden olur. Bu nedenle sistemde varsayılan olarak OpenJDK veya Sun tarafından sağlanan JDK'lar kurulu olmalıdır.

Önemli Not 2: Eclipse 3.4 için Visual Editor kurulumu ile ilgili olarak şu adresi inceleyebilirsiniz.

Ubuntu'da Sun Java Nasıl?

Diz üstü bilgisayara ubuntu kurmaya karar verdim. Elbette sürekli java ile çalıştığımdan ve Eclipse kurmadan önce Javanın kurulmuş olması gerektiğinden ilk önce Sun'ın son sürüm JDK paketini kurmam gerekti. Bu iş aslında kolay bir iş. Ancak en azından bu işle uğraşanlara kolaylık olsun diye başarıyla tamamladığım bu işi aşama aşama yazmak istedim.

  1. İlk önce şuradan son sürüm Linux JDK sürümünü indirelim. İndirdiğiniz JDK makinenize özgü olmalı. Ve mutlaka bin uzantılı çalıştırılabilir sürümü indirin. Benim makinem 32 bit olduğu için standart Linux self-extracting file (jdk-1_5_0_06-linux-i586.bin) adlı sürümü indirdim.
  2. Daha sonra fakeroot, java-package ve java-common paketlerine ihtiyacımız olacağı için kuruyoruz.

    sudo apt-get install fakeroot java-package java-common
    Bu komut java-package paketini bulamayabilir. Bunun nedeni bu paketin normal kaynaklarda değilde Ubuntu'nun multiverse adı verilen kaynaklarında olmasındandır. Bu kaynağı /etc/apt/sources.list dosyasının en altına aşağıdaki şekilde ekliyoruz:

    deb http://archive.ubuntu.com/ubuntu hoary multiverse
    deb-src http://archive.ubuntu.com/ubuntu hoary multiverse


    Ve önce kaynakları güncellemek için apt-get update ve daha sonra apt-get install java-package komutunu çalıştırdığımız zaman eğer paket kurulu değilse başarılı bir şekilde kuracaktır.
  3. Daha sonra debian paketi oluşturmak için aşağıdaki komutu çalıştırıyoruz:
    fakeroot make-jpkg jdk-1_5_0_06-linux-i586.bin (Buraya indirdiğiniz dosyanın adını yazmayı unutmayın) (Not: Eğer kurulumda " No matching plugin was found." veya "dpkg-architecture: warning: Couldn't determine gcc system type, falling back to default (native compilation)" şeklinde hatalar oluşuyorsa yukarıdaki komutun başına "DEB_BUILD_GNU_TYPE=i386-linux" eklemeniz gerekecektir. Komut: DEB_BUILD_GNU_TYPE=i386-linux fakeroot make-jpkg jdk-1_5_0_06-linux-i586.bin olacaktır. Elbette burada i386-linux yerine sizin mimariye uygun olanı yapmanız gerekiyor. )
  4. Oluşturduğumuz debian paketini kurmak için aşağıdaki komutu yazarak kurulumu tamamlıyoruz:
    dpkg -i sun-j2re1.5_1.5.0+update05_i386.deb (oluşan paket ismini yazmayı unutmayın)
  5. Ve son olarak kurulum başarısını kontrol etmek için java -version yazıp çalıştırıyoruz. Eğer kurmak istediğimiz sürüm ekranda listeleniyorsa kurulum başarılı olmuş demektir. Rahatça java geliştirebiliriz.
  6. Ancak kurduğumuzdan farklı bir java sürüm bilgisiyle karşılaştık, bu durumda aşağıdaki komutu kullanarak java'nın farklı kurulu sürümlerini inceleyip default olarak hangisini kullanmak istiyorsak seçeriz:

    update-alternatives --config java
    Bu komut ekrandan bizden bir girdi bekleyecektir. O girdi bizim varsayılan java'mız olacaktır. Bu komutu javac için de kullanabilirsiniz. Orada da birden fazla alternatif varsa kullanmak istediğinizi seçebilirsiniz.
  7. Eğer yukarıda kaldırmak istediğiniz java sürümleri ile karşılaşırsanız onları kaldırmak için apt-get remove sun-jre1.4 (Burada kaldırmak istediğiniz paket adı gelecek) komutunu kullanabilirsiniz.
  8. Unutmadan bunları yapmak için root olmalısınız. 
Evet java kurulumu başarıyla tamamlandı. Şimdi geliştirme ortamının diğer elemanlarını kurmaya. Benim ilk işim Eclipse indirip kurmak olacak.

Ubuntu Debian üzerine geliştirilmiş bir dağıtım olduğundan bu komutlar Debian'da da çalışabilir.

Kaynak:http://wiki.serios.net/wiki/Ubuntu_Java_JRE/JDK_installation_with_java-package
http://ubuntuforums.org/showthread.php?t=76702
Daha kolay bir yöntem ve faklı alternatifler için:
https://help.ubuntu.com/community/Java

Veritabanlarında birincil anahtarlar ve float veri tipi

Veritabanlarında tablolar oluştururken birincil anahtar belirleme gereği duyarız. Bu pek çok defa işimize yarayacak, hataları azaltacak ve veriye olan erişimimizi hızlandıracaktır.

Birincil anahtar tanımlarken, veritabanı size artışsal tekil anahtarlar(incremental unique key) tanımlayabilme, böylece kod içerisinde anahtarlarla hiç uğraşmama şansı tanıyor. Bu yaklaşım işi oldukça kolaylaştırsa da; ileride yapılacak olan veritabanı yedeklemesi, veritabanının veya belli tabloların kurtarılmaya çalışılması, verilerin taşınması gibi işlemleri büyük ölçüde zorlaştırıyor.

Bu nedenle artışsal birincil anahtar tanımlarını sadece olaylar, tarihçe veya değişmez verileri içeren, çok da önemli olmayan tablolarda kullanmaya çalışıyorum. Yüksek öneme sahip tablolarımda ise, gelen verilerden bir veya birkaçını referans kabul ederek, gerekiyorsa bunlrı birleştirip, örneğin hex değerlerini alıp kendim bir tekil anahtar oluşturma yoluna gidiyorum. Böylece aynı anahtarı, tablomdaki veri tamamen silinse bile yeniden oluşturabiliyorum ve diğer tablolarla veri bütünlüğünü kaybetmemiş oluyorum. Veri yedekleme, taşıma ve kurtarma sırasında da çok işime yarıyor.

Yine bir projede bu mantıkla hareket edip, kendi tekil anahtarlarımı yaratmaya başladım, ama oluşan anahtarlar, referans aldığım verilerin uzun olması nedeniyle 15 hanelik sayılar olarak ortaya çıktı. Daha önce hiç float birincil anahtar denememiştim, bir deneyelim bakalım dedim ve float olarak tanımlarımı yaptım.

Proje bitti, iki ay kullanıldı. Sonra bir gün bilgiler yarım geliyor dediler. Kodu açtık ve hatayı bulduk: tekil anahtarlar artışsal bir referansa da bağlı olduklarından, veri artışı olunca 15 hane olarak öngördüğüm anahtar uzunluğu 16 haneye çıkmış, float veri tipi 15 haneden sonrasında bilimsel gösterim (scientific notation) e geçtiği ve "E+" şeklinde bir gösterim uyguladığı için benim sorgular çalışmaz hale gelmişti. Kod içerinde yaptığım "toString", veri tipi dönüştürme (casting) gibi işlemler de sorunu çözemedi. İşin acil bitmesi gereklili ile en son bulduğum çözüm yolu veri tipini "decimal" olarak değiştirmek oldu. Neyseki proje çok büyük değildi bir kaç saatte bitirdim.

Xj3D Kurulumu ve Projelerde kullanımı

Xj3D Web3D konsorsiyumunun X3D içeriği yaratmak için kullanılan araç kutusu projesidir. Tamamen java ile yazılmıştır. Bu araç kutusu kullanılarak X3D içeriği kendi uygulamamıza yükleyebileceğimiz gibi, tam bir tarayıcı yaratmak için de kullanabiliriz. Xj3D'nin temel kullanım alanı SAI ("Scene Access Interface" Sahne Erişim Arayüzü)'yi kullanarak programlarımızda kendimize ait bir tarayıcı kullanmak ve X3D ve VRML sahnelerimizi kullanıcıya göstermektir. Xj3D 3B özelliklerinin programlara eklenmesini kolaylaştırmak için üretilmiştir. Xj3D'yi Java'da kullanarak farklı platformlarda çalışabilen 3B uygulamaları geliştirilebilir.

Geliştirme yapabilmek için Xj3D'yi kurmak ve projemizin classpath'ine gerekli jar dosyalarını eklemek gerekmektedir. Kurulum (Windows) ve Eclipse projelerinde classpath ekleme işi aşağıdaki adımlardan oluşmaktadır:

  1. Şuradan en son sürümü indiriyoruz.
  2. Çift tıklayarak çalıştırıyoruz (Eğer jar dosyasını indirdiniz ve çift tıklayınca çalışmazsa komut satırında java -jar DosyaninIsmi.jar şeklinde çalıştırabilirsiniz)
  3. Next-Next diyerek kurulumu tamamlamasını sağlıyoruz.
  4. Eclipse'te yarattığımız projeye sağ tıklayıp Properties->Java Build Path->Libraries sekmesini açıyoruz.
  5. Bu sekmede Add External Jars diyerek j3D kurulum dizini altındaki jars dizinindeki tüm jar dosyalarını ekliyoruz. (Kurulum dizini c:\Program Files\Xj3D ise C:\Program Files\Xj3D\jars\ altındaki tüm jar dosyalarını)
  6. Artık projemizde Xj3D SAI kullanabiliriz.
Dünyayı Yüklemek
Bu örnekte basit bir dosya yükleyicisinin nasıl yazılacağını öğreneceksiniz. X3D tarayıcısının yaratılma temellerinden başlayıp dosyanın nasıl yükleneceği anlatılacaktır.
3B Penceresini Eklemek
3B Penceresini uygulamanıza eklemek kolaydır. SAI BrowserFactory sınıfını kullanarak X3D bileşenini yaratırsınız. Daha sonra bu bileşeni uygulamanıza eklersiniz. Aşağıdaki kod bu adımları göstermektedir:
import org.web3d.x3d.sai.*;
public class SimpleSAIDemo extends JFrame {
 public SimpleSAIDemo() {
 Container contentPane = getContentPane();
 // SAI bilesenini yaratalim
 X3DComponent x3dComp = BrowserFactory.createX3DComponent(null);
 // UI’ye bu bileseni ekleyelim
 JComponent x3dPanel = (JComponent)x3dComp.getImplementation();
 contentPane.add(x3dPanel, BorderLayout.CENTER);

SAI erişimi için gereken tüm sınıflar org.web3d.x3d.sai paketinde bulunmaktadır. Xj3D javadoc’u SAI kodu yazarken kullanışlı bir kaynaktır. 3B penceresini uygulamanıza eklemek için gerekenler bunlardır. Bir sonraki kısım dosya yüklemeyi gösterecektir.
Dosya Yükleme
Dosya yüklemeden önce tarayıcı kavramını anlatmak gerekiyor. SAI’de tarayıcı sistemle etkileşim için gereken basit bir arayüzdür. Dosya yükleme, düğüm yaratma ve çerçeve oranını getirme gibi işler yapmanıza olanak sağlar. Browser sınıfı dışsal ve içsel SAI programları için mevcuttur.
ExternalBrowser arayüzü dışsal SAI programlarının imgelemeyi duraklatma ve tarayıcı dinleyicisi ekleme gibi daha fazla işlevselliğe erişmelerini sağlar. Bu işlemleri sadece dışsal kodtan yapabilirsiniz. Dosya yükleyebilmek için yarattığımız X3DComponent bileşeninden tarayıcı (Browser) referansını alırız.
// Dissal tarayici alalim
ExternalBrowser x3dBrowser = x3dComp.getBrowser();
Tarayıcı referansını elde ettikten sonra bu referansı dosya yüklemek için kullanabiliriz. Bu işi yapmak için bir kaç yöntem vardır. Bu ilk örnek için en kolayını kullanacağız. Bu dosya indirilip gösterilmeye hazırlanana kadar bloklanmış createX3DFromURL çağrısıdır. Bu metod X3D sahnesini kapsayan X3DScene nesnesini döndürür. Daha sonra biz şu an için boş olan güncel sahneyi bu yeni sahne ile değiştiririz.
// Dosya yukleyerek bir X3D sahnesi olustur
X3DScene mainScene = x3dBrowser.createX3DFromURL(new String[] { "moving_box.x3dv" });
// Varolan dunyayi yenisiyle degistir
x3dBrowser.replaceWorld(mainScene); 
Bu örneğin tam kodunu şurada bulabilirsiniz : SimleSAIDemo
Eğer bu kodu başarılı bir şekilde çalıştırabilirseniz Xj3D kurulumunu tamamladınız demektir.
Daha gelişmiş örnekler için şu adresi inceleyebilirsiniz.

URL İşleme Tarzı


Bu noktada anlaşılması gereken kavram URL’lerin nasıl ele alındığıdır. createX3DFromURL girdi olarak URL katarı almaktadır. Bu katardaki URL’lerden birine ulaşıp başarıyla indirene kadar arama gerçekleşir. URL internet üzerindeki veya kendi yerel makinemizdeki nesnenin konumunu belirtme yöntemi sağlar. Eğer sadece dosya adı veya kısmi dizin ve dosya yolu (örneğin “examples/foo.xd3v”) verirsek göreceli URL sağlanmıştır. X3D belirtimi bu URL’lerin o an çalışılan dizinden başlaması gerektiğini söylemektedir. Daha ayrıntılı bilgi için X3D Java binding specification(ISO/IEC 19777-2:2005) 3.3.4.2 maddesini inceleyin.

RFID Standartları

ISO Standartları

Standart

Açıklama

Aşama

Aşama Tarihi

10536

Tanımlama kartları – İletişimsiz bütünleşik devre(ler) kartları.

10 cm ye kadar.

İnceleme

2004-12-31

11784

Hayvanların Radyo frekans tanımlama ile tanımlanması – Kod yapısı

İnceleme

2003-11-07

11785

Hayvanların Radyo frekans tanımlama ile tanımlanması – Teknik kapsam

İnceleme

2001-09-19

14443-1

Tanımlama kartları – İletişimsiz bütünleşik devre(ler) kartları – “Proximity” kartları – Bölüm 1 : Fiziksel özellikleri

İnceleme

2003-10-13

14443-2

Tanımlama kartları – İletişimsiz bütünleşik devre(ler) kartları – “Proximity” kartları – Bölüm 2 : Radyo frekans gücü ve sinyal arayüzü

Yayımlandı

2001-06-28

14443-3

Tanımlama kartları – İletişimsiz bütünleşik devre(ler) kartları – “Proximity” kartları – Bölüm 2 : İlkleme ve kalabalıklık önleme

Yayımlandı

2001-02-01

15693-1

Tanımlama kartları – İletişimsiz bütünleşik devre(ler) kartları – “Vicinity” kartları -- Bölüm 1 : Fiziksel özellikleri

1998’de, Philips ve Texas Instruments firmaları ISO 15693 ile uygulamalar geliştirdiler. Amaçları tek antenli bir okuyucu ile 50 - 70 cm ye kadar başarılı okuma yapabilmekti.

İnceleme

2003-10-14

15693-2

Tanımlama kartları – İletişimsiz bütünleşik devre(ler) kartları – “Vicinity” kartları -- Bölüm 2 : Hava arayüzü ve ilkleme

İnceleme

2003-10-14

15693-3

Tanımlama kartları – İletişimsiz bütünleşik devre(ler) kartları – “Vicinity” kartları -- Bölüm 3 : Kalabalıklık önleme ve iletim protokolü

Yayımlandı

2001-03-29

15961

Ürün yönetimi için Radyo frekans tanımlama (RFID) – Veri protokolü: uygulama arayüzü

Yayımlandı

2004-10-18

15962

Ürün yönetimi için Radyo frekans tanımlama (RFID) – Veri protokolü: Veri kodlama kuralları ve mantıksal hafıza fonksiyonları

Yayımlandı

2004-10-18

15963

Ürün yönetimi için Radyo frekans tanımlama (RFID) – RF tagları için tekil tanımlama

Yayımlandı

2004-09-08

18000-1

Ürün yönetimi için Radyo frekans tanımlama (RFID) – Bölüm 1: Referans mimarisi ve standartlaştırılacak parametrelerin tanımlanması

Yayımlandı

2004-09-13

18000-2

Ürün yönetimi için Radyo frekans tanımlama (RFID) – Bölüm 2: 135 kHz altı hava arayüzü haberleşmesi için parametreler

Yayımlandı

2004-09-13

18000-3

Ürün yönetimi için Radyo frekans tanımlama (RFID) – Bölüm 3: 13,56 MHz’de hava arayüzü haberleşmesi için parametreler

Yayımlandı

2004-09-13

18000-4

Ürün yönetimi için Radyo frekans tanımlama (RFID) – Bölüm 4: 2,45 GHz’de hava arayüzü haberleşmesi için parametreler

Yayımlandı

2004-08-31

18000-6

Ürün yönetimi için Radyo frekans tanımlama (RFID) – Bölüm 6: 860 MHz - 960 MHz arası hava arayüzü haberleşmesi için parametreler

Yayımlandı

2004-08-31

18000-7

Ürün yönetimi için Radyo frekans tanımlama (RFID) – Bölüm 7: 433 MHz’de etkin hava arayüzü haberleşmesi için parametreler

Yayımlandı

2004-08-31

ISO RFID Standartları (03.02.2005)

Standart

Açıklama

Aşama

17358

RFID için tedarik zinciri uygulaması – Uygulama gereksinimleri

20 - Hazırlık

17363

RFID için tedarik zinciri uygulaması – Taşıma konteynerleri

20 – Hazırlık

17364

RFID için tedarik zinciri uygulaması – Nakil birimleri

20 – Hazırlık

17365

RFID için tedarik zinciri uygulaması – Geri dönüşümlü nakil ürünleri

20 – Hazırlık

17366

RFID için tedarik zinciri uygulaması – Ürün paketleme

20 - Hazırlık

17367

RFID için tedarik zinciri uygulaması – Ürün etiketleme

20 - Hazırlık

18047-7

Otomatik tanımlama ve veri yakalama teknikleri – RFID cihazı uyumluluk test yöntemleri – Bölüm 7: 433 MHz’de hava arayüzü haberleşme sınama yöntemleri

30 - Komite

19762-3

Otomatik tanımlama ve veri yakalama teknikleri – Ortaklaştırılmış terimler – Bölüm 3: Radyo frekans tanımlama (RFID) (sadece Ingilizce)

50 - Onama

24710

Otomatik tanımlama ve veri yakalama teknikleri – Ürün yönetimi için Radyo frekans tanımlama

40 - Araştırma

ISO RFID Standart taslakları (03.02.2005)

EPC Standartları

EPC Global’in tanımladığı standartlar şöyle özetlenebilir:

· EPC Tags ları için mantıksal veri formatı

· Aşağıdaki tag frekans aralıkları için Tag haberleşme protokolü

· 900 MHz Sınıf 0

· 13.56 MHz Sınıf 1

· 860 MHz den 930 MHz’ye Sınıf 1

· “Savant” adlı standartlaşmış EPC ara katmanı için tanımlamalar

· How EPC middleware, including Savant, communicates with tag readers.

· Physical Markup Language (PML) Tanımlaması. Bu XML tabanlı dil, bir EPC ağındaki bileşenler arasında aktarılan bilginin formatını tanımlar.

· Object Name Service (ONS) Tanımlaması. Dünyadaki herhangi bir EPC tagına sahip ürün hakkındaki bilgiyi getiren küresel ağ tanımlaması.

EPC tagları farklı sınıflarla nitelendirilirler. Tablo bu sınıfları açıklamaktadır.

EPC Global ‘Sınıfları’

EPC Sınıfı

Açıklama

Programlama

Sınıf 0

“Yalnız okuma” pasif taglar

Yarı iletken üretim işleminin bir parçası olarak programlanır

* Sınıf 0+

EPC Sınıf 0 ‘ın “Bir defa yazma, çoklu okuma” versiyonu

Müşteri tarafından 1 defa programlanır sonra kilitlenir

Sınıf 1

“Bir defa yazma, çoklu okuma” pasif tagları

Müşteri tarafından 1 defa programlanır sonra kilitlenir

Sınıf 1 – Nesil 2

Küresel birlikte çalışabilirlik, çoklu okuma/yazma ve arttırılmış veri iletim hızı sağlar

Bir çok defa programlanabilir

Sınıf 2

Tekrar yazılabilir pasif taglar

Bir çok defa programlanabilir

Sınıf 3

Yarı pasif taglar

Sınıf 4

Aktif taglar

Sınıf 5

Okuyucular

Mümkün değil

* EPC Global tanımlı bir sınıf değil

.net C# ile Test Driven Development (TDD) nasıl uygulanır?

.net C# kullanacağım birkaç projede TDD yöntemini kullanmayı düşünüyorum. Bu yüzden .net ortamında TDD nin nasıl yapılacağıyla ilgili biraz araştırma yaptım ve işime yarayabilecek, bu alanda yaygın olarak kullanılan, iki tane açık kaynak kodlu test uygulaması buldum: csunit ve nunit.

Dokumanlar ve makaleleri karıştırınca nunit daha iyi anlatılmış gibi geldi, bu nedenle nunit ile çalışmaya karar verdim.TDD daha çok java dünyasında ve Junit egemenliğinde kullanıldığından .net için çok fazla Türkçe döküman bulunamıyor.

Nunit Test Ortamı

Nunit test ortamı .net dillerinin tümü ile kullanılabiliyor. Test sınıfında yapılan "test fixture", "test" metodları, "setup" metodu ve "teardown" metodu gibi özel tanımlar yoluyla test edilecek yapının belirlenmesi sağlanıyor.

TestFixture Tanımı

Kullanıldığı sınıfın içerisinde test metodları olduğunu belirtir.

namespace UnitTestingExamples
{
using System;
using NUnit.Framework;

[TestFixture]
public class SomeTests
{
}
}
TestFixture tanımı kullanan sınıfların erişilebilir(public) bir oluşturucu(constructor)
metodları olmalıdır(yada varsayılanı zaten erişilebilir olduğundan, oluşturucu metodları
olmamalıdır)

Test Tanımı

Test sınıfında, üzerinde tanımlandığı metodun Test Çalıştırıcısı(TestRunner) tarafından çalıştırılacağını belirtir. Metod erişilebilir olmalı(public), geriye parametre döndürmemeli(void) ve parametre almamalıdır.

namespace UnitTestingExamples
{
using System;
using NUnit.Framework;

[TestFixture]
public class SomeTests
{

[Test]
public void TestOne()
{
// // Do something...
}
}
}

SetUp ve Teardown Tanımları


Testler yapılırken, öncesinde ve sonrasında bazı işlemlerin yapılması gerekebilir. Bunun için özel(private) bir metod yaratılıp her metoddan önce/sonra çağrılabilir yada bunun yerine test ortamının sunduğu Setup ve Teardown tanımları kullanılır. Bu metodlar Textfixture içerisinde test edilemsi gereken her metoddan önce ve sonra çalıştırılır.En genel kullanımları bağımsız nesneler yaratılacağı zaman kullanılmalarıdır.


namespace UnitTestingExamples
{
using System;
using NUnit.Framework;

[TestFixture]
public class SomeTests
{
private int _someValue;

[SetUp]
public void Setup()
{
_someValue = 5;
}

[TearDown]
public void TearDown()
{
_someValue = 0;
}

[Test]
public void TestOne()
{
// Do something...
}
}
}

ExpectedException Tanımı


Testiniz çalışırken bir hata fırlatmasını bekliyorsanız bu tanımı kullanabilirsiniz.


namespace UnitTestingExamples
{
using System;
using NUnit.Framework;

[TestFixture]

public class SomeTests
{

[Test]
[ExpectedException(typeof(InvalidOperationException))]
public void TestOne()
{
// Do something that throws an InvalidOperationException
}
}
}

Bu kod çalıştığında, yalnız InvalidOperationException nın fırlatılması halinde test başarılı olacaktır. Burada dikkat edilmesi gereken bir nokta bu tanımın kalıtım özelliğini desteklememesi; yani test metodunuz, InvalidOperationException sınıfından kalıtımla yaratılmış bir hata fırlatırsa testiniz çökecektir.

Ignore Tanımı

Yazdığınız testlerden herhangi birinin o an gözardı edilmesini ve çalıştırılmamasını istiyorsanız bu tanımlayıcıyı kullanabilirsiniz. Yorum satırına almaktansa bunu kullanmanız, bu testin size hatırlatılmasını ve daha sonra bunu unutmanızı engelleyecektir.

namespace UnitTestingExamples
{
using System;
using NUnit.Framework;

[TestFixture]
public class SomeTests
{

[Test]
[Ignore("We're skipping this one for now.")]
public void TestOne()
{
// Do something...
}
}
}

NUnit Assertion Sınıfı

Metodları test ederken kullanılacak en iyi yöntemlerden bir diğeri de nunit in "assertion" sınıfı ve bu sınıfın sağladığı kontrol metodlarıdır.

namespace UnitTestingExamples
{
using System;
using NUnit.Framework;

[TestFixture]
public class SomeTests
{

[Test]
public void TestOne()
{
int i = 4;
Assertion.AssertEquals( 4, i );
}
}
}

Kaynaklar:
http://www.codeproject.com/dotnet/tdd_in_dotnet.asp
http://www.csunit.org/tutorials/tutorial7/index.html
http://www.nunit.org/




Java Web Start'ta uygulama

Java web start (JWS)’ı mutlaka duymuş olmalısınız. Evet ben de duydum ve bir projemde kullanmaya karar verdim. İşin içine girince basit bir projede bunu yapayım insanlarla aşama aşama nasıl yapıldığını paylaşayım dedim. Basit projemiz tamamen kendimin yazdığı bir Not Defteri olacak. Bu linkten kaynak kodu indirip Eclipse projesi şeklinde açabilirsiniz.

Daha sonra bu projenin çalıştırılabilir jarını oluşturuyoruz. (Jar Oluşturma)

Daha sonra bu jar dosyasını imzalıyoruz. (Jar İmzalama)

Jar dosyasını imzalamayı başardıktan sonra bu jar dosyasını web sunucumuzda JWS kullanarak yayınlamaya başlayabiliriz. Bunun için oluşan imzalı jar'ımızı ve aşağıda içeriği verilen jnlp dosyamızı hostumuza yüklüyoruz. jnlp dosyasının adresini tarayıcımızda yazıp girince eğer hostumuz jnlp dosyasının uygulama mime tipine sahip olduğunu biliyorsa o dosyayı direkt olarak JWS ile açacaktır. Eğer buraya kadar sorunsuz bir şekilde programımızı yükleyebildiysek o adresi tıklayan kişiler JWS sayesinde bizim not defterimizi kullanabilecektir. Bu projenin çalışan bir örneğine şuradan ulaşabilirsiniz.

notdefter.jnlp dosyası:
<?xml version="1.0" encoding="utf-8"?>
<!--Bu jnlp dosyasinin bulundugu host ve adi-->
<jnlp spec="1.0+"
codebase="http://localhost/notdefteri"
href="notdefteri.jnlp">
<!-- Programla ilgili bilgiler-->
<information>
<title>Not Defteri</title>
<vendor>Kod ve Us</vendor>
<homepage href="http://kodveus.blogspot.com/"/>
<description>Basit Not Defteri</description>
<description kind="short">Basit Bir Not Defteri</description>
<offline-allowed/>
</information>
<!-- Imzalamamizin sebebi bu not defterinin dosya islemleri yapmasi burada bu yuzden tam izin vermemiz-->
<security>
<all-permissions/>
</security>
<!-- Programin ana sinifi-->
<application-desc main-class="net.kodveus.jws.NotDefteri">
</application-desc>
<!-- Programin kullandigi kaynaklar (jar dosyalari)-->
<resources>
<!--Biz kodumuzu j2se 1.5 e gore gelistirdik-->
<j2se version="1.5+"/>
<jar href="notdefteri.jar" main="true"/>
</resources>
</jnlp>