Jumat, 18 Desember 2020

Generate Java Classes from XSD File

Hello, guys. This is my first time using English in my tutorial. Hope you guys do not miss any important stuff here hahahaha. Let's do it!

In this chance I'm gonna show you how to generate Java classes from XSD file with very detail steps. As we know, XSD is XML Schema Definition which is used to describes the structure of an XML document. For example, I have very simple XSD file that represents of the data of Employee as shown below.

 

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11 
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" >
  <xs:element name="Employee">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Name" type="xs:string"/>
        <xs:element name="Phone" type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

 

So, as I know, there are two ways to generate Java classes from XSD which are JAXB and Castor. JAXB is the Java Architecture XML Binding which is the part of Java itself. When you install JDK you have it all. While Castor is an open source data binding framework. That's it. Maybe if you know the other methods for XML Binding, you can put your comment below. Okay, don't take it too long. Let's start it! 

JAXB 

  • Prepare your XML Schema (XSD file). You can use my example as yours
  • Open the Command Prompt and point to the directory of your XSD file. In this demonstration, I put my XSD file at C:/Documents
  • Use the command below and press Enter. Notes: please command "xjc" to see all the xjc parameter options. -p option is to define the package of your java project.
    C:\Documents>xjc -p test.java.generation Employee.xs
  • Then the Java class of Employee is generated including ObjectFactory.java. ObjectFactory contains factory methods for each Java content interface and Java element interface generated in the com.test.xml package. An ObjectFactory allows you to programatically construct new instances of the Java representation for XML content
 
  • Now your Java classes are ready to use for your next development. Please refer to your defined package above to see the result of the generated java classes.
  • Simply copy and paste those classes to your Java project

 Castor

There's not much difference steps between JAXB and Castor. Just follow the steps above and change the command line below: 

C:\Documents>java -cp castor-0.9.5.3p3-xml.jar;xercesImpl-2.9.1.jar; org.exolab.castor.builder.SourceGenerator -i ../files/Employee.xsd -package com.xmlinclude.castor
Make sure that the castor-0.9.5.3p3-xml.jar and xercesImpl-2.9.1.jar are in the location where you execute that command line.

There's no results print out in our console. If your execution return no errors, it means your java classes generated successfully and your java classes are ready to use.

 Notes:

-i: option to define your file path

-package: option to define your class package


Hope this article helps you :)

In the next article I will give you a tutorial how to generate Java classes if your XSD file has include tag (xi:include)

Rabu, 25 Oktober 2017

Tutorial Sederhana Menambahkan Logger pada Java

Objek logger digunakan untuk men-log (menulis) pesan dari proses yang saat ini sedang dieksekusi oleh program menjadi sebuah log file. Logger sangat berguna untuk memberikan informasi tentang proses yang berlangsung pada program, sehingga kita dapat mengetahui bagian mana (ditampilkan dalam urutan line ke-n) yang berhasil di eksekusi dan yang gagal dieksekusi. Dengan begitu, kita akan lebih mudah memperbaiki kode program jika terjadi  error pada program kita. Logger memiliki 8 level hirarki antara lain:
ALL
TRACE
DEBUG
INFO
WARN
ERROR
FATAL
OFF

Java sendiri sudah memiliki paket Logger, tetapi yang paling umum digunakan yaitu Logger dari apache. Kalian bisa download Logger apache . jar (versi 1.2.17) di sini. Kemudian kalian bisa extract dan simpan di directory yang kalian inginkan.

Untuk implementasi ke program, silakan simak langkah-langkah di bawah ini:

1. Membuat Project Baru
*Di sini saya menggunakan Eclipse untuk demo contohnya.
Seperti biasa, untuk membuat project baru di eclipse pastikan kalian sudah menginstall eclipse dan membukanya. Kemudia arahkan kursor ke menu File -> New -> Java Project. Atau menggunakan keyboard shortcut ALT+SHIFT+N.

Kemudian isi pada bagian kolom Project Name sesuai keinginan kalian. Lalu klik tombol "Finish".

2. Membuat Class Baru
Setelah project LoggerDemo berhasil dibuat, langkah selanjutnya yaitu membuat Class baru. Klik kanan pada src > New >  Class.

Kemudian akan muncul dialog baru seperti di bawah ini. Isi Nama class yang akan dibuat dan centang "public static void main(String[] args)" pada bagian "Which method stubs would you like to create?". Setelah itu klik tombol "Finish".

3. Konfigurasi Build Path
Masukkan log4j.jar ke dalam library project kalian dengan cara klik kanan pada bagian JRE System Library -> Build Path -> Configure Build Path. Maka akan muncul dialog baru seperti di bawah ini.

Klik tombol "Add Externl JARs...". Cari lokasi log4j.jar yang sudah kalian extract. Kemudian klik tombol "Open". Lalu klik tombol "OK".

4. Membuat log4j.properties
File properties ini diperlukan untuk mendefinisikan setup Logger yang akan digunakan sehingga output bisa sesuai dengan keinginan.
Klik kanan pada project (ingat, project. bukan src :D). Pilih New -> Folder. Lalu akan muncul dialog seperti di bawah ini. 

Isi kolom Folder Name dengan "properties" (misal). Kemudian klik tombol "OK". Folder ini digunakan untuk menyimpan file properties sehingga terlihat lebih rapi dan tidak jadi 1 dengan package Class file. Setelah berhasil membuat folder properties, langkah selanjutnya yaitu klik kanan pada folder tersebut, pilih New -> Other -> File.


Pada bagian File Name isi dengan "log4j.properties". Kemudian klik tombol "Finish".



File log4j.properties secara otomatis akan terbuka di halaman kerja Eclipse. Setelah itu masukkan kode seperti di bawah ini.

log4j.rootCategory = ALL,GUIDE
log4j.appender.GUIDE=org.apache.log4j.ConsoleAppender
log4j.appender.GUIDE.layout=org.apache.log4j.PatternLayout
log4j.appender.GUIDE.layout.ConversionPattern=%d [%t] %-5p %c{1} %m%n

kode tersebut dipakai jika kalian ingin menampilkan Logger di dalam console, fungsinya mirip dengan System.out.println();. Namun, jika kalian ingin menampilkannya dalam bentuk file.log, kalian gunakan kode di bawah ini.

log4j.rootCategory = ALL,GUIDE
log4j.appender.GUIDE=org.apache.log4j.RollingFileAppender
log4j.appender.GUIDE.File=./log/demologger.log
log4j.appender.GUIDE.MaxFileSize=1MB
log4j.appender.GUIDE.MaxBackupIndex=5
log4j.appender.GUIDE.layout=org.apache.log4j.PatternLayout
log4j.appender.GUIDE.layout.ConversionPattern=%d [%t] %-5p %c{1} %m%n

Pada bagian ini log4j.appender.GUIDE.File=./log/demologger.log merupakan definisi direktori untuk menyimpan file.log serta nama file .log yang akan digunakan untuk menuliskan sederetan logger. Sehingga kalian harus membuat folder yang bernama "log" terlebih dahulu di project kalian dengan langkah-langkah yang sama seperti membuat folder "properties". Kemudian tambahkan juga file baru yang bernama "demologger.log" dengan cara yang sama seperti membuat file "log4j.properties". Jika kalian menambahkan dua properties di atas (pertama dan kedua) maka properties yang org.apache.log4j.ConsoleAppender (pertama) diabaikan oleh program dan mengeksekusi properties yang org.apache.log4j.RollingFileAppender (kedua). Sehingga file "demologger.log" akan menyetak Logger yang kalian definisikan pada program. Agar kalian tidak bingung, sebagai demo, saya gunakan properties yang pertama pada file "log4j.properties". Sehingga Logger akan ditulis di console.

5. Menulis Kode untuk Logger
Sebagai contoh, tuliskan kode program pada file LoggerTest.java seperti di bawah ini:
import org.apache.log4j.Logger;

public class LoggerTest {

 private static final Logger logger = Logger.getLogger(LoggerTest.class);

 public static void main(String[] args) {
  logger.info("**********Program Start**********");
  try {
   String word = "Hello World!";
   logger.debug("Value of word: " + word);
   // cast the variable Sting word into int number
   int number = Integer.parseInt(word);
  } catch (Exception e) {
   logger.error(e.getMessage(), e);
   logger.error(""); //$NON-NLS-1$
  }
  logger.info("**********Program Finish**********");
 }
}

6. Run Configuration
Sebelum program dieksekusi (di-run), kalian harus mengonfigurasi run terlebih dahulu seperti pada gambar di bawah ini:

Masukkan kode ini "-Dlog4j.configuration=file:\" pada Tab Arguments - Kolom VM Arguments seperti pada gambar di bawah ini:

Isi VM Arguments: -Dlog4j.configuration=file:.\properties\log4j.properties.

7. Run Program
Setelah semua konfigurasi selesai, klin tombol Run. Maka Logger akan muncul pada console dan menghasilkan Log seperti di bawah ini:

Dari Log tersebut kita ketahui bahwa terjadi error saat mengonversi variabel String ke variabel Integer (java.lang.NumberFormatException: For input string: "Hello world!"). Pada baris ke-8 dari Log juga ditunjukkan bahwa error terjadi di class LoggerTest.java baris ke-13.

Jika kalian ingin mempraktikkan properties Logger yang ke dua, kalian buka file log4j.properties lagi. Hapus properties yang lama, kemudian ganti dengan properties yang ke dua. Setelah itu run ulang programnya. Maka file demologger.log yang ada di folder log akan berisi hasil Log.
Jumat, 11 Agustus 2017

Metode Pengembangan Perangkat Lunak (Software Development)

Dalam dunia pengembangan perangkat lunak atau istilah asingnya Software Development, tidak lepas dari tahapan-tahapan yang harus dilalui agar software yang dikembangkan dapat diselesaikan sesuai harapan. Ada banyak metode software development yang saya temukan di berbagai sumber di internet. Namun yang paling sering diimplementasikan di perusahaan-perusahan besar yaitu metode Waterfall, Agile, Scrum, dan RAD. Masing-masing perusahaan perangkat lunak memiliki alasan dan pertimbangan mengapa mereka memilih metode software development yang saat ini mereka gunakan.

Ada 12 metode Softwate Development yang saya rangkum dari beberapa sumber di internet, antara lain:
1. Waterfall Model
2. Agile Methodology
3. Scrum Development Methodology
4. RAD (Rapid Application Development)
5. Prototype Methodology
6. Dynamic Systems Development Model (DSDM)
7. Spiral Model
8. Extreme programming
9. Feature Driven Development
10. Joint Application Development
11. Lean Development
12. Rational Unified Process

Selain 12 metode di atas, masih ada metode lain yang tidak saya sebutkan. Saya hanya mengambil top 12 metode Software Development berdasarkan sumber www.tatvasoft.com. Berikut ini penjelasan dari masing-masing metode.

1. Waterfall Model
waterfall_model_software_development_methodologies

Waterfall juga sering disebut sebagi metode tradisional dan merupakan metode yang paling sering digunakan dalam pengembangan perangkat lunak. Siklus dalam metode ini sering dainggap sebagai metode pengembangan perangkat lunak klasik. Tahap pada metode waterfall digambarkan dengan urutan aliran proses dimana setiap tahap akan dimulai/dilakukan jika tahap sebelumnya sudah 100% diselesaikan. Sehingga tidak memungkinkan untuk kembali ke tahap sebelumnya untuk melakukan beberapa perubahan. 

Kelebihan:
  • Waterfall sangat sederhana, mudah dipahami dan digunakan untuk para pengembang pemula.
  • Mudah dimanage, karena setiap tahap memiliki tugas-tugas spesifik.
  • Sangat menghemat waktu karena setiap tahap diproses dan diselesaikan sekaligus.
  • Waterfall sangat efektif untuk mengembangkan perangkat lunak dalam skala kecil dengan beberapa kebutuhan perangkat lunak yang mudah dipahami.
  • Testing (pengujian) mudah dilakukan karena mengacu pada skenario pengujian yang sudah didefinisikan dalam spesifikasi fungsional sebelumnya.

Kekurangan:
  • Model ini hanya dapat digunakan ketika tersedia requirement (kebutuhan) yang sangat tepat.
  • Model ini tidak dapat diterapkan untuk pemeliharaan sistem (hanya untuk pengembangan sistem baru).
  • kelemahan utama model ini adalah sekalinya berada di tahap pengujian, tidak ada kemungkinan untuk kembali ke tahap sebelumnya untuk melakukan suatu perubahan.
  • Tidak ada kemungkinan untuk menghasilkan beberapa perangkat lunak lain sampai dengan tahap terakhir dari siklus terselesaikan.
  • Tidak ada pilihan untuk mengetahui hasil akhir dari proyek secara keseluruhan.
  •  Model ini cocok digunakan untuk proyek kecil tetapi tidak cocok untuk proyek lama dan berkelanjutan.
  • Kurang ideal untuk proyek yang requirement-nya sangat moderat dan ada ruang lingkup yang besar untuk modifikasi.

2. Agile Methodology
 agile_software_development_software_development_methodologies

Metode Agile merupakan pendekatan yang digunakan untuk merancang sebuah disiplin proses manajemen perangkat lunak yang juga memungkinkan beberapa perubahan dalam pengembangan proyek. Metode ini merupakan suatu kerangka kerja konseptual untuk melakukan berbagai proyek rekayasa perangkat lunak yang digunakan untuk meminimalkan risiko dengan mengembarangkan perangkat lunak dalam waktu yang singkat yang disebut iterasi yang umumnya berlangsung selama satu minggu sampai satu bulan.

Kelebihan :

  • Memiliki pendekatan adaptif yang dapat merespon perubahan kebutuhan-kebutuhan dari klien.
  • Komunikasi secara langsung dan umpan balik konstan dari klien yang tidak meninggalkan celah untuk beberapa dugaan dalam sistem.
Kelemahan:
  • Hanya fokus pada perangkat lunak yang dikembangan daripada dokumentasi, sehingga dapat menyebabkan kurangnya dokumentasi.
  • Proyek yang sedang dikembangkan dapat keluar dari jalur (tidak sesuai rencana) jika klien tidak menjelaskan secara rinci tentang hasil akhir dari proyek yang diinginkan.

3. SCRUM Development Methodology
scrum_development_methodology

Metode SCRUM dapat diterapkan ke berbagai macam proyek yang memiliki perubahan yang sangat cepat atau memiliki kebutuhan yang mendesak. Metode SCRUM dimulai dengan perencanaan singkat, meeting, dan diakhiri dengan review akhir. Metode ini digunakan untuk pengembangan perangkat lunak secara cepat yang didalamnya terdapat sekumpulan iterasi untuk membuat perangkat lunak yang dibutuhkan. Metode ini merupakan metode yang ideal karena mudah dibawa ke dalam jalur proyek yang memiliki progress yang lambat.

Kelebihan:
  • Semua keputusan berada di tangan tim.
  • Dapat digunakan untuk proyek yang tidak mempertimbangkan dokumentasi kebutuhan bisnis.
  • Meeting yang dilakukan setiap hari secara mudah dapat membantu pengembang untuk membuat kemungkinan untuk mengukur produktivitas individu. Hal ini dapat menyebabkan peningkatan produktivitas masing-masing anggota tim.
Kekurangan:


  • Metode ini akan memakan biaya dan waktu lebih jika tidak diperkirakan secara akurat.
  • Tidak cocok untuk proyek dalam lingkup besar, tetapi cocok untuk proyek kecil dan proyek yang bergerak cepat.
  • Setiap anggota tim harus memiliki pengalaman. Jika tim terdiri dari orang-orang pemula, proyek tidak dapat diselesaikan dalam waktu yang sudah ditentukan.

4. RAD (Rapid Application Development)
rapid_application_development_software_development_methodologies

RAD merupakan metode yang efektif untuk memberikan pengembangan yang lebih cepat dan kualitas yang dihasilkan lebih tinggi daripada metode lain. Tujuan utama dari metode ini adalah untuk mengakselerasikan seluruh proses pengembangan perangkat lunak. Tujuan dapat mudah dicapai karena metode ini memungkinkan user untuk berpartisipasi dalam pengembangan perangkat lunak.

Kelebihan:
  • Membantu mengurangi risiko dan tenaga yang dibutuhkan pada bagian pengembangan perangkat lunak.
  • Membantu klien untuk mengambil review singkat untuk proyek.
  • Mendorong umpan balik customer yang selalu memberikan ruang lingkup perbaikan untuk berbagai proyek pengembangan perangkat lunak.
Kekurangan:
  • Bergantung pada tim yang kuat dan kinerja individu untuk mengidentifikasi secara jelas kebutuhan bisnis yang tepat.
  • Hanya akan berhasil pada sistem yang dapat dimodularisasi.
  • Pendekatan ini membutuhkan pengembang dan tim desainer yang berskil tinggi yang bisa jadi tidak memungkinkan untuk setiap organisasi.
  • Tidak dapat diterapkan untuk pengembang yang menggunakan budget rendah karena biaya pemodelan dan pembuatan kode sangat tinggi.

5. Prototype Methodology
prototype_methodology_software_development_methodologies

Metode prototype merupakan metode pengembangan perangkat lunak yang memungkinkan developer untuk hanya membuat prototype dari solusi yang ditawarkan untuk mendemonstrasikan fungsi-fungsi perangkat lunak pada klien dan membuat modifikasi yang dibutuhkan sebelum dikembangkan pada aplikasi yang sesungguhnya. Fitur terbaik dari metode ini adalah dapat menyelesaikan beberapa isu yang mungkin terjadi pada model waterfall.

Kelebihan:
  • Ketika prototype ditunjukkan pada klien, mereka dapat memahami secara jelas fungsi-fungsi dari perangkat lunak.
  • Mengurangi risiko kegagalan secara signifikan, karena risiko potensial dapat diindentifikasi pada tahap awal dan tahap moderasi dapat dilakukan dengan cepat.
  • Komunikasi antara tim pengembang perangkat lunak dan klien dapat menjadikan lingkungan yang sangat baik dan kondusif selama pengembangan.
  • Membantu dalam mengumpulkan kebutuhan dan analisis kebutuhan ketika kurangnya dokumentasi tentang kebutuhan sistem.
Kekurangan:
  • Metode prototype biasanya menggunakan biaya pengembang, sehingga sebaiknya dilakukan dengan menggunakan sumber daya minimal jika biaya pengembangan organisasi terlalu tinggi.
  • Terlalu banyak keterlibatan klien biasanya tidak disukai oleh pengembang.
  • Terlalu banyak modifikasi mungkin tidak bagus untuk proyek, karena hal ini dapat mengganggu aliran kerja dari seluruh tim pengembangan perangkat lunak.

6. Dynamic Systems Development Model (DSDM)
dynamic_systems_development_model_methodology

DSDM merupakan metode pengembangan perangkaat lunak yang didasarkan metode RAD dengan pendekatan iteratif dan inkremental yang menekan keterlibatan pengguna secara terus-menerus. Tujuan utamanya adalah untuk menyerahkan sistem dengan tepat waktu dan sesuai budget. Metode ini bekerja sesuai dengan filosofi "tak ada yang dikembangkan secara sempurna pada percobaan pertama dan dianggap sebagai proses yang selalu berubah".

Kelebihan:

  • Pengguna sangat terlibat dalam pengembangan sistem, sehingga mereka lebih cenderung mendapatkan pegangan pada proyek pengembangan perangkat lunak.
  • Fungsionalitas dasarnya adalah sistem  diserahkan dengan cepat, dengan lebih banyak fungsi yang disampaikan secara sering.
  • Meberikan kemudahan akses oleh pengembang ke end-user.
  • Proyek diserahkan tepat waktu dengan budget yang spesifik.
Kekurangan:
  • DSDM mahal untuk diimplementasikan, karena mengharuskan user dan pengembang dilatih untuk menerapkannya secara efektif. Tidak cocok untuk organisasi kecil atau one-time project.
  • Merupakan model relatif baru, oleh karena itu tidak umum dan tidak mudah dimengerti.

7. Spiral Model
spiral_model_software_development_methodologies

Model Spiral merupakan model mutakhir yang berfokus pada identifikasi awal dan pengurangan risiko terhadap proyek.

Kelebihan:


Kekurangan:

8. Extreme Programming Methodology
extreme_programming_methodology


Minggu, 11 Mei 2014

Rocchio Classification


Rocchio Relevance Feedback


Metode Rocchio Relevance Feedback adalah strategi reformulasi query paling populer karena sering digunakan untuk membantu user pemula suatu information retrieval system. Dalam siklus relevance feedback user disajikan hasil pencarian dokumen, setelah itu user dapat memeriksa dan memnadai dokumen yang benar-benar relevan.

Teknik relevance feedback ditemukan pertama kali oleh Rocchio. Rocchio memandang feedback sebagai permasalah dalam mencari sebuah query optimal, yaitu query yang memaksimalkan selisih antara dokumen relevan dengan dokumen tak relevan. Relevance feedback berguna untuk mendekatkan query ke rataan dokumen relevan dan menjauhkan ke rataan dokumen tak relevan. Ini bisa dilakukan melalui penambahan istilah query dan penyesuaian bobot istilah query sehingga sesuai dengan kegunaan istilah tersebut dalam fungsinya membedakan dokumen relevan dan tak relevan.



Proses Perhitungan Rocchio Relevance Feedback


1.      Tokenizing

Tokenizing adalah tahap pemrosesan sebuah kata kunci menjadi unit kecil yang disebut token, yang berupa suatu kata, angka, atau tanda baca.


2.      Filtering

Filtering adalah pengambilan kata-kata penting hasil dari tokenizing. Misalnya yang, awalan (di-, me-, pe-,…), dan, dari, akhiran (-kan, -I, -lah,…), dll.


3.      Stemming

Stemming adalah pencarian akhir kata dari tiap kata hasil filtering. Pada tahap ini dilakukan proses pengembalian berbagai bentukan kata ke dalam suatu representasi yang sama. Misalnya kata “menghasilkan” akan menjadi “hasil”.


4.      Term Weighting

Term Weighting merupakan proses penghitungan bobot tiap term yang dicari pada setiap dokumen sehingga dapat diketahui ketersediaan dan kemiripan suatu term di dalam dokumen. Pada dokumen yang besar, skema yang paling sukses dan secara luas digunakan untuk pemberian bobot adalah skema pembobotan “ term frequency * inverse document frequency ” disebut sebagai nilai bobot term atau β. Term frequency (tf) adalah frekuensi dari kemunculan sebuah term dalam dokumen yang bersangkutan. Idf merupakan sebuah perhitungan dari bagaimana term didistribusikan secara luas pada koleksi dokumen yang bersangkutan. Inverse document frequency menunjukkan hubungan ketersediaan sebuah term dalam seluruh dokumen. Semakin sedikit jumlah dokumen yang mengandung term yang dimaksud, maka nilai idf semakin besar. Nilai idf sebuah term dirumuskan dalam persamaan berikut :

 

Penghitungan bobot dari term tertentu dalam sebuah dokumen dengan menggunakan perkalian nilai tf dan idf menunjukkan bahwa deskripsi terbaik dari dokumen adalah term yang banyak muncul dalam dokumen tersebut dan sangat sedikit muncul pada dokumen yang lain. Perhitungan bobot term adalah sebagai berikut :
 
Tingkat kemiripan term pada dokumen yang dicari dapat dituliskan pada persamaan Rocchio Relevance Feedback berikut ini :



Kesimpulan dari perhitungan dengan menggunakan rumus di atas yaitu dokumen yang memiliki nilai R terbesar  adalah dokumen yang paling sesuai dengan input term (query) dari user.