Showing posts with label Java. Show all posts
Showing posts with label Java. Show all posts

Tuesday, March 20, 2012

Aplikasi Lan Chat yang Mudah dengan Java

Aplikasi Lan Chat Free dan Open Source

Saya sedang memantau beberapa operator data entry dalam mengoperasikan aplikasi National Forest Inventory milik Kementrian Kehutanan, Indonesia. Kadang-kadang ada pertanyaan yang mereka ajukan, dan mereka harus jalan ke meja saya. Berputar-putar sebentar ke beberapa tempat di Internet, saya putuskan untuk mencari yang menggunakan Java. Karena, aplikasi Lan Chat ini sangat menarik untuk dipergunakan sebagai aplikasi sample dalam menunjukkan kemampuan program. So, saya dapat ini di CodeProject : Java Chat With Customizable GUI. Saya hanya pergunakan sebagai aplikasi bantuan sehari-hari dalam mengelola urusan komunikasi. Namun jika Anda tertarik, silahkan mempelajari source code-nya yang tentu akan sangat menyenangkan untuk dilakukan!

Tuesday, December 21, 2010

[Recite18th] Pengembangan Java Web Framework Sendiri – Part 1 : Konsep Dasar Java Web Framework

Konsep Dasar Java Web Framework


Di Akhir Seri Artikel ini Anda akan bisa menggunakan dan juga memahami pengembangan framewok Java Web yang saya kembangkan sendiri (dengan bantuan masukan dari banyak teman-teman JUG Indonesia), Recite18th.


Sudah lama saya tidak menambah artikel baru di situs saya ini. Oke, ini selanjutnya, dan saya sedang tertarik u/ membahas mengenai konsep-konsep dasar.  Segera setelah Anda menyelesaikan artikel ini, Anda akan memahami maksud saya :)

Pertama-tama, apakah Anda membaca artikel ini sebagai salah satu result gugling dengan keyword tutorial web java? atau belajar web java? Jika iya, maka kemungkinan Anda menyadari, bahwa framework Java luar biasa luasnya. Untuk memulai belajarnya, bisa merupakan tantangan tersendiri. Begitu banyak pilihan tersedia, mulai dari yang sudah mature di Industri IT semisal Spring Framework atau justru yang mengawali pertama kali, Struts. Kebanyakan, Anda akan mulai belajar salah satu framework tersebut jika Anda diterima bekerja di salah satu Perusahaan IT, di Jakarta misalnya. Salah seorang teman katakan, referensi penguasaan terhadap salah satu Framework, bisa menjadi nilai penting pada sesi wawancara saat rekrutmen pegawai baru.

Seri artikel ini tidak akan mengajak Anda mempelajari framework yang sudah ada. Justru, artikel ini akan mengajak Anda untuk mengembangkan Java Web Framework sendiri. Dari referensi ini : Integrating Servlets and JSP: The Model View Controller (MVC) Architecture, Anda akan dapati pemahaman bahwa :
Frameworks are sometimes useful, namun They are not required!. OK? :)


Arsitektur Model 1

Mengembangkan aplikasi Web dengan Java, pada awalnya hanya membutuhkan Servlet dan/atau JSP. Tanpa strategi perancangan tertentu,  arsitektur aplikasi Web Java Anda akan menjadi seperti berikut ini :
image
Gambar diambil dari artikel : Servlets, JSP, Struts and MVC (Part I).

Pada arsitektur ini, setiap request dari pemakai via browser, dilayani oleh file JSP tertentu, atau satu servlet tertentu. Keuntungannya? Cepat. Tidak susah-susah memikirkan pembagian-pembagian peran. Misal, file daftar_pemakai.jsp. Maka segala operasi ubah, hapus dan tambah data pemakai dilakukan oleh file ini. Kerugiannya? Sangat Banyak! Hehe. Inilah arsitektur yang saya pakai dari dulu jika ada  bantuan pemrograman dengan Web Java. It feels so fast at that time… Namun begitu ada sedikit saja kompleksitas ditambahkan, dan lagi waktu penambahan sudah lewat 1 bulan, aduh, bisa-bisa saya berpusing-pusing dulu, cuman sekedar u/ menambahkan sintaks : session.setAttribute (penyimpanan data session). Boleh pelajari arsitektur ini, tapi cukup hanya untuk sekedar tahu. Jangan dijadikan arsitektur untuk aplikasi skala produksi. :)

Arsitektur Model 2 / MVC

Awalnya saya tidak mau bersusah payah mempelajari framework Web Java (dan pada akhirnya memang saya tidak juga mempelajari framework Web Java. Saya membuatnya). Namun, karena suatu kebutuhan aplikasi PHP suatu bantuan Tugas Akhir harus dikembangkan dengan menggunakan Framework MVC PHP CodeIgniter, maka terpaksa saya pelajar : dan segera amaze… Betapa mudahnya namun powerful. Dan saya berpikir, kenapa tidak ada framework Web Java yang selugas CI ??? Berikut ini adalah arsitektur MVC atau disebut juga Model 2 :

image

Perhatikan bahwa user tidak langsung mengakses file JSP, namun berinteraksi dengan suatu Servlet yang akan bertindak untuk melakukan segala persiapan, termasuk membuka basis data jika diperlukan, sebelum file JSP yang berfungsi untuk menampilkan data dimunculkan. Disini diperkenalkan suatu lapisan baru, yaitu Model. Mengambil contoh file daftar_pemakai.jsp sebelumnya, maka model yang dikembangkan adalah model Pemakai, yang hanya berisikan semua atribut Pemakai, semisal :
  • idpemakai
  • nama
  • alamat
  • usia
  • jenis_kelamin


OK?
Insya Allah cukup sampai disini dulu
Semoga bermanfaat!

NB:
  • Framework saya sudah dicoba ke dua aplikasi, insya Allah cara kerjanya seperti Anda memprogram dengan CodeIgniter. Mudah
  • Namun untuk saya rilis, belum. Saya persiapakn tutorial bawaan dulu. Sehingga, akan membuat Anda bisa langsung menggunakannya, tanpa berputar-putar mencari tutorialnya.

Saturday, October 24, 2009

Unit Testing : Merasakan Manfaat dari Yang Terabaikan

 

image

Green Bar!!! Pengujian berhasil…

Meski skripsi saya dulu tentang Extreme Programming, tidak sering saya menggunakan konsep2 XP dalam pengembangan software (pun, karena umumnya saya membantu pembelajaran dan pengembangan software untuk Tugas Akhir ya, yg menurut hemat saya, tidak perlu membutuhkan Unit Testing). Akibatnya, saat benar2 ada pengembangan software dalam skala komersial/produksi, saya lupa dengan Unit testing. Wah, pelajaran berharga. Begini kasusnya.

Aplikasi harus mendeteksi file2 baru pada suatu folder, dan jika ada yang baru, ia akan mengindeksnya dan memasukkan ke database. Oke, fitur ini rampung. Namun, saat pengetesan, saya benar2 mensimulasikan hal tersebut : saya kopi2 file baru ke folder tersebut. Setelah cek indexing berhasil, saya hapus. Dan diulang lagi.

Ini benar? ya tidak noh. Lah, kalau perlu mengetest … sampai 20 kali???. Kan ga praktis kalau paste dan undo via Windows Explorer ?

Solusinya ini : method pengindeks-an yang sedang dikerjakan dan diverifikasi, ditest tidak dengan mencoba kopi paste ke folder tersebut, namun di test dengan menggunakan Unit Testing via JUnit pada IntelliJ IDEA (Netbeans atau apapun sama saja). Perhatikan kode ini :

 

public void testSimilarity(){
       String file1 = "D:\\_SWDEV\\GO\\8.PLA\\work\\repos\\s1.txt";
       String file2 = "D:\\_SWDEV\\GO\\8.PLA\\work\\repos\\s2.txt";
       try {
           Indexer.getInstance().indexDocument(new File(file1));
           Indexer.getInstance().indexDocument(new File(file2));
        } catch (DocumentAlreadyExistException e) {
           e.printStackTrace();  }

   }

Nah, kode itu bisa dipanggil berulang via RUN biasa (jadi sekali tekan tombol RUN aja, sudah ketest). Tekan berapa kali pun, hasilnya akan sama. Ga perlu kopi paste kan?

Semoga bermanfaat!

NB:

  • Nanti saya share terus tentang JUnit terus… manfaat sekali lho…
  • Insya Allah… :)

Monday, July 27, 2009

Sistem Informasi Skripsi : Aplikasi Pertama Platform

Coba, bisa tidak bedakan itu dibuat dengan Delphi/VB/Java?

Mungkin, saya harus meralat kata2 saya, bahwa aplikasi Java dengan Swing akan terlihat berbeda dengan yang sekelasnya yang dibuat dengan VB atau Delphi. Coba lihat gambar tersebut, itu Java Swing. Tidak terlihat berbeda kan? Pun, ada icon pada system tray-nya.

Saya buat aplikasi ini cepat2 saja. Awalnya, masih dalam arahan ke satu modul SMS server dulu. Kemudian, saya ingin tunjukkan aplikasi ini pada yang meminta. Wah, saya pikir, bagus juga! Tepat, modular dan pluginnya bisa d-upload sambil jalan. Semuanya mudah.

Aplikasi di atas menggunakan MS SQL Server sebagai databasenya. Awalnya, saya kecewa karena proses menampilkan data skripsi (kasus ini), tidak cepat. Ada jeda antara saya menekan tombol Skripsi dan kemunculannya. Namun, beberapa saat kemudian, saya pikir, ini mudah! Load saja semua instance dari form dan buka koneksi serta load data yang dibutuhkan di awal loading aplikasi. Pemakai tidak akan merasakan perbedaan startup yang signifikan, namun yang jelas User Experience dengan aplikasi ini bisa meningkat

Dan itulah yang saya imlpementasikan dari aplikasi ini. Response terhadap aksi pemakai sangat baik. Selain itu, keberhasilan proses ini, karena saya menggunakan Design Pattern Singleton. Detail ttg Design Pattern sedang saya siapkan...

Semoga bermanfaat!
NB:
  • Kasus rancangan Platform ini seperti Spring Dependency Injection. Jadi, keterkaitan aplikasi dengan plugin bisa ditentukan dari luar, yaitu dari file XML konfigurasi
  • Di lain kesempatan,saya punya ide untuk menambahkan daftar file konfigurasi XML pada icon system tray, sehingga nantinya jenis aplikasi bisa dijalankan secara run time view Klik Kanan Icon Tray itu saja.

Friday, July 24, 2009

POC Lebih Baik Tentang Arsitektur Aplikasi ERP Pluggable



Ini Proof of Concept yg lebih baik : penggunaan Jar Class Loader, view yg terintegrasi dan kontribusi plugin pada toolbar (kontribusi pada menu, juga mudah dilakukan). sert penggunaan Apache Configurations. Berikut adalah method yg memulai aplikasi (lupa di kelas mana) :

private void start() {
try {
config = new XMLConfiguration(pluginDir + "\\Platform.xml");
config.setAutoSave(true);
Platform.getInstance().setMainWindow(MainSDI.getInstance());
loadPlugin();
Platform.getInstance().getMainWindow().setVisible(true);
} catch (ConfigurationException ex) {
Logger.getLogger(Startup.class.getName()).log(Level.SEVERE, null, ex);
}
}


Semua isi konfigurasi aplikasi terdapat di Platform.xml yang dibaca oleh kelas milik Apache Configurations. Isi file Platform.xml merupakan petunjuk tentang bagaimana kustomisasi aplikasi yg akan dilakukan. Bayangkan 2 klien yg mirip dalam kebutuhan, maka mereka akan memiliki dua Platform.xml yang berbeda. Adapun kontributor yg berupa plugin, bisa berbagi. Isi dari file Platform.xml, bisa seperti berikut :



SMS Server
startup.PluginSmsServer





Payroll
startup.PluginPayroll



General Ledger
startup.PluginGeneralLedger




Adapun untuk mekanisme load pluginnya ada di kode berikut :

private void loadPlugin() {

JarClassLoader jcl = new JarClassLoader();
jcl.add(pluginDir + "/");
JclObjectFactory factory = JclObjectFactory.getInstance();

Plugin p;
List l = config.configurationsAt("modules.module");
for (int i = 0; i <>
p = (Plugin) factory.create(jcl, l.get(i).getString("class"));
p.contributeToToolbar(Platform.getInstance().getMainWindow().getToolMain());
}
}


Perhatikan bagaimana JCL dipanggil, dan juga perhatikan bagaimana isi konfigurasi pada node modules.module dikelola. Selai itu, pemanggilan contributeToToolbar, merupakan cara ringkas untuk memberi kesempatan bagi plugin untuk berkontribusi. Berikut detail kode contributeToToolbar :

public void contributeToToolbar(JToolBar toolMain) {
btnPenjualan = new JButton("Plugin Penjualan");
btnPenjualan.setIcon(new javax.swing.ImageIcon("D:\\My Pictures\\icon-eclipse\\complete_status.png")); // NOI18N
btnPenjualan.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
btnPenjualan.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
btnPenjualan.setFocusable(false);
btnPenjualan.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Platform.getInstance().getMainWindow().getMainContainer().setViewportView(PenjualanPanel.getInstance());
}
});
toolMain.add(btnPenjualan);
}

Semoga bermanfaat!

NB:
  • Tingkat fleksibilitas bisa ditambah dengan membuat definisi menu via file Platform.xml itu juga (jadi mrip konsepnya dengan file Plugins.xml pada Eclipse RCP).
  • Saya akan sangat tertarik, jika aplikasi yang akan dikembangkan benar2 besar dan luas secara arsitektur. Maka merancang hirarki kelas dan segala kerumitannya sangat menggairahkan

Friday, July 03, 2009

Bangunan Utama untuk Aplikasi ERP Impian


Bangunan utama Aplikasi ERP saya adalah Java, yang dibangun di atas Springframework. Keberhasilan dengan Eclipse RCP, membuat komponen Rich Client aplikasi ERP saya dapat diserahkan ke teknologi Eclipse RCP ini. Namun, aplikasi ini harus siap untuk dionlinekan, sehingga saya akan buat Core dari teknologinya berbasis HTTP, dan pilihan secara alami jatuh pada Springframework. Anda dapat download tiga project Netbeans 6.5 yang merupakan keberhasilan awal pembangunan komponen Server, Klien dan Data Objectnya.

Aplikasi ini akan saya buat modular, sehingga pengguna dapat menggunakan modul yang dia rasa perlu saja. Waktu di jlan tadi saya mikir (ini di warnet), modul pertama yang saya kembangkan haruslan Modul Akuntansi. Beberapa modul yang dapat dikembangkan :
  • CRM
  • Sms Gateway
  • Stok
  • Penjualan Voucher Elektronik
  • dsb dsb
Modul plugin ini berbasiskan Eclipse RCP. Untuk persiapan skalabilitas yang lebih tinggi, yang jelas semua core dari aplikasi disimpan di dalam Core Springframework. Adapun untuk UI, mungkin Eclipse RAP dapat dipergunakan untuk dua kebutuhan desktop dan server ini. Hm.. baru terpikir. Namun tetap, Spring framework adalah inti yang tidak tergantikan meskipun apliksi bergerak dari desktop ke server, atau sebaliknya. Banyak aplikasi yang dibangun seperti ini : di dalamnya ada Tomcat Web Server (Mungkin saya akan pakai Jetty saja, lebih ringan. , namun di atasnya user bekerja dengan menggunakan aplikasi Rich Client. Contohnya adalah Project Cards, yang merupakan aplikasi Manajemen Proyek Extreme Programming.

Sepertinya impian saya di blog ini mulai terwujud. Di artikel Mengenal SAP Lebih Jauh : Pemilihan Database, saya akhirnya menemukan bahwa esensi ERP SAP ternyata masih RDBMS, jadi arah penelitian dan pengembangan aplikasi ERP sy akan ke arah ini. Sebelum itu di artikel Ide Mengembangkan Solusi ERP Sendiri, saya utarakan (selatankan juga masuk akal) kalau saya ingin punya produk ERP sendiri. Semua itu berawal dari pembelajaran SAP yang saya utarakan di artikel Melangkah untuk pembelajaran SAP : Data Mining. Adapun kontak pertama dengan aplikasi ERP adalah dengan Open Bravo.

Semoga bermanfaat!
NB:
  • Basis pekerjaan saya yang membantu Tugas Akhir sangat membantu. Misalnya, saat bantuan suatu Tugas Akhir, tidak ada requirement harus dengan Eclipse RCP, maka karena saya tahu ada potensi di Eclipse RCP, maka saya jadikan bantuan tersebut menggunakan Eclipse RCP. Nah, itu menjadi modal knowledge untuk pembangunan aplikasi selanjutnya.
  • Ada yg lain?

Thursday, June 04, 2009

Konsep OOP

Spesial untuk salah seorang mantan siswa bimbingan, tentang Pemrograman Berorientasi Objek. Konsep OOP cuman ada tiga thok, ga lebih ga kurang, yaitu :
  1. Encapsulation : bs ngerti kenapa harus buat kelas
  2. Inheritance : bs ngerti bs buat kelas baru dr kelas yg udah ada
  3. Polymorphism : bs ngerti cukup manggil satu nama aja, aksi sudah berbeda (ini mungkin yg paling abstrak)
Tanpa banyak ngetik (soalnya jatah di warnet dah mau abiz. hehe) kesini aja : Java Tutorial What is an Object.



Itu Object...



Semoga bermanfaat!


NB:
  • Mudah kok.
  • Tapi jangan cuman dibaca artikel ini. Koding2 aja langsung buat kelas2, turunannya dan terapin Polymorphism. Seru!