Backup MySQL

Posted on June 2nd, 2009

Sebelumnya, saya telah membahas script backup untuk Trac maupun Subversion. Kali ini, kita akan bahas backup script untuk MySQL.

Sama seperti backup script sebelumnya, script ini akan membuat folder sesuai dengan tanggal dan jam backup. Selanjutnya, script akan melakukan backup terhadap database MySQL sesuai dengan nama database yang ditentukan. Backup ini akan disimpan di folder yang kita tentukan.

Berikut backup scriptnya.

[Update - 7 Des 2009] Sudah ditambahkan perintah untuk kompresi hasil backupnya.

Read more »

SSH dengan JSch

Posted on May 2nd, 2009

Mengakses Remote Server dengan Java

Kita sudah biasa mengakses komputer lain menggunakan SSH.
Cukup ketikkan ssh username@namaserver, tekan enter, dan lakukan apa yang kita mau.
Nah, bagaimana kalau kita ingin membuat aplikasi yang butuh mengakses komputer lain?
Misalnya, kita ingin membuat aplikasi sederhana yang menampilkan input IP Address, Username, Password serta tombol Shutdown.
Begitu input field kita isi dan tombol Shutdown ditekan, aplikasi kita akan melakukan ssh ke komputer tersebut dan menjalankan perintah shutdown -h now.

Di Java, hal ini dapat dengan mudah dilakukan menggunakan pustaka JSch. Berikut langkah-langkah untuk menggunakan JSch.

Read more »

Upgrade Ubuntu

Posted on April 22nd, 2009

Sebentar lagi Ubuntu terbaru akan rilis. Seperti biasanya, saya akan menjalankan ritual 6 bulanan yang terdiri dari kegiatan sbb:

  • Unduh ISO Ubuntu terbaru
  • Bakar ke CD
  • Backup isi home folder
  • Backup mailbox Thunderbird
  • Remove semua hidden file di home folder
  • Reinstall Ubuntu dengan memformat partisi sistem

Saya tidak terlalu suka upgrade, karena banyak menyisakan sampah dan jebakan. Lebih nyaman dan cepat memformat partisi sistem daripada troubleshoot hasil upgrade.

Karena ritual ini akan terus dilakukan di masa depan, ada baiknya kita optimasi workflownya agar lebih efisien.

Read more »

Intro jQuery

Posted on March 17th, 2009

Jaman sekarang, membuat tampilan menarik di aplikasi web sudah tidak sulit lagi.
Banyak pustaka JavaScript yang siap digunakan dengan mudah.
Tidak perlu lagi kita memusingkan keragaman browser dengan keanehannya masing-masing.

Salah satu pustaka JavaScript yang populer adalah jQuery.
Berbeda dengan pustaka JavaScript lainnya, jQuery tidak menawarkan komponen UI yang aneh-aneh.
Demikian juga dengan efek visual, hanya tersedia sekenanya saja.
Dengan demikian, jQuery berukuran relatif kecil dan mudah dipelajari.

Akan tetapi, di balik kesederhanaan tersebut tersimpan kecanggihan arsitekturnya.
Dengan arsitektur yang rapi ini, orang mudah membuat plugin untuk menambah kemampuan jQuery.
Hasilnya, ada jQuery UI dengan koleksi komponen UI yang kaya.
Ada juga jqGrid dengan komponen tabelnya yang canggih.

Pada tutorial ini, kita akan mempelajari dasar-dasar pemrograman JavaScript menggunakan jQuery.
Setelah menguasai dasar-dasarnya,
kita akan mampu menggunakan berbagai teknik tingkat tinggi seperti AJAX dan efek visual.
Kita juga akan mudah mempelajari dan menggunakan berbagai komponen dan plugin yang tersedia.

Pada intinya, penggunaan jQuery terdiri dari dua langkah sederhana :
1. Mendapatkan elemen HTML yang ingin kita gunakan
2. Menambahkan behavior pada elemen HTML yang sudah didapatkan.

Sebagai contoh kasus, kita akan membuat kalkulator sederhana yang tampilannya seperti ini:
kalkulator-jquery

Read more »

Spring Build

Posted on March 4th, 2009

Martinus dan Ifnu kalo baca ini pasti merasa familiar dengan struktur folder dan prosesnya.

Saya gak nyontek lho … :p

Null Date di MySQL

Posted on March 4th, 2009

Null Date di MySQL

Bila memiliki tipe data DATE di database MySQL, format standarnya adalah yyyy-MM-dd.
Jadi, bila kita mau mengisi 17 Agustus 1945, kita lakukan seperti ini

INSERT INTO hari_besar_nasional (tanggal, keterangan)
VALUES ('1945-08-17', 'Hari Kemerdekaan RI');

Bila kita tidak mengisikan tanggal alias NULL, maka MySQL akan mengisi kolom tersebut dengan nilai 0000-00-00. Sayangnya, nilai ini tidak diterima dengan baik oleh driver JDBC MySQL.

Berikut contoh kode program dalam Java

String sql = "select * from hari_besar_nasional";
ResultSet rs = connection.createStatement().executeQuery(sql);

while(rs.next()){
  System.out.println("Tanggal : "+rs.getDate("tanggal");
  System.out.println("Keterangan : "+rs.getString("keterangan");
}

rs.close();

Jika ada data yang berisi 0000-00-00, maka akan terjadi exception sebagai berikut:

java.sql.SQLException: Cannot convert value ‘0000-00-00 00:00:00′

Masalah ini dijelaskan di dokumentasi MySQL ini.

Solusinya adalah mengganti parameter koneksi database, yang tadinya seperti ini :

jdbc:mysql://localhost/nama_database

menjadi seperti ini

jdbc:mysql://localhost/nama_database?zeroDateTimeBehavior=convertToNull

Network Device menghilang di VMWare

Posted on March 3rd, 2009

Saya menggunakan VMWare secara intensif dalam proses development.
Salah satu penggunaannya adalah untuk menginstal aplikasi atau database milik client. Beberapa merek database seperti Oracle relatif invasif terhadap sistem, misalnya mendikte jumlah swap ataupun mengharuskan mengedit kernel parameter. Tentunya ini membuat kotor sistem operasi saya.

Selain itu, kadangkala client menggunakan sistem operasi yang berbeda dengan yang saya gunakan. Ini juga dapat diselesaikan dengan menggunakan VMWare.

Saya menyimpan file-file VM di harddisk eksternal, untuk meningkatkan performance. Menurut Jeff Atwood, kinerja VM akan meningkat bila dia berada di harddisk yang berbeda dengan hostnya.

Penyimpanan di harddisk eksternal ini ternyata mengundang sedikit masalah. Kadangkala network interface VM saya menghilang. Masalah ini terjadi pada kombinasi host Ubuntu dan guest Ubuntu.

Setelah googling kesana kemari, ternyata ini disebabkan oleh beberapa hal :

  1. Ubuntu me-mount partisi harddisk eksternal secara acak. Kadang partisi 1 dimount ke /media/disk-1, kadang ke /media-disk-2
  2. Bila posisi mount berubah, VMWare akan menggenerate UUID (ID unik untuk guest VM) baru
  3. Setiap kali UUID berubah, MAC Address network interface guest VM juga berubah.
  4. Ubuntu di guest VM meng-cache MAC address, sehingga kalau MAC yang dia cache tidak ada, network interface tersebut tidak akan diload
  5. Solusinya mudah, yaitu menghapus cache MAC address di guest Ubuntu, dan merestartnya. Caranya, login ke guest OS, lalu hapus file /etc/udev/rules.d/70-persistent-net.rules. Setelah itu restart.

    sudo rm /etc/udev/rules.d/70-persistent-net.rules
    sudo reboot
    

    Setelah restart, guest VM akan kembali memiliki ethernet card.

Enkripsi JDBC Properties

Posted on January 16th, 2009

Enkripsi Password Database dengan Jasypt

Bila kita membuat aplikasi Java yang menggunakan database, pasti kita akan membuat satu file untuk konfigurasi koneksi database, biasanya diberi nama jdbc.properties. Isinya kira-kira sebagai berikut:

jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost/belajar
jdbc.username = belajar
jdbc.password = java

Cepat atau lambat, kita akan menemui kebutuhan untuk menyembunyikan nilai yang diisikan ke dalam file tersebut untuk alasan keamanan. Tentunya kita tidak ingin orang yang bisa membaca file tersebut login ke database dan melihat berbagai data rahasia dalam database.

Kita ingin mengenkripsi minimal variabel jdbc.password, supaya tidak bisa dibaca sembarang orang. Bila kita menggunakan Spring Framework untuk membaca file tersebut, kita bisa menggunakan Jasypt yang mampu menangani masalah enkripsi file tersebut.

Read more »

SVN Externals

Posted on November 10th, 2008

Dalam membuat aplikasi, seringkali kita membutuhkan source-code dari aplikasi lainnya. Misalnya, jika kita sudah membuat cukup banyak aplikasi, maka fitur login dan logout pasti sudah sering kita buat.

Daripada menulis ulang fitur tersebut, alangkah lebih baiknya jika kita reuse kode programnya dalam aplikasi yang akan dibuat. Dengan demikian, setelah melewati beberapa project, kode program yang direuse tersebut akan bertambah kemampuannya dan semakin canggih.

Kita dapat melakukan hal ini dengan menggunakan fitur svn external. Misalnya struktur kode program kita terdiri dari modul berikut:

  • Master Data
  • Transaksi
  • Report
  • Security

Kita ingin me-reuse kode program security yang ada di aplikasi lain. Dengan demikian, kita perlu menambahkan folder tersebut ke dalam source-tree kita.

Untuk melakukan hal tersebut, kita mengedit property Subversion yang bernama svn:externals. Berikut cara menambah property tersebut :

1. Checkout dulu seluruh trunk.

svn co http://repo.server.com/svn/nama-project/trunk project-saya

2. Tambahkan property svn:externals ke project yang sudah ada.

svn propset svn:externals "modul-security http://repo.server.com/svn/project-lain/trunk/modul-security" project-saya

3. Commit deh

cd project-saya
svn ci -m "tambahkan property svn:external"

4. Untuk mengambil source code modul-security, lakukan svn update

svn update

Kode program modul-security siap digunakan. Ingat, kalau kita melakukan perubahan di dalamnya dan melakukan commit, maka perubahan akan dikirim ke repository asalnya, yaitu http://repo.server.com/svn/project-lain/trunk/modul-security

Lalu bagaimana kalau kita tidak ingin mengikuti perkembangan modul-security? Bisa saja ada programmer lain yang mengubah modul-security dan menyebabkan kode kita rusak.

Caranya, referensikan modul-security ke tags, jangan ke trunk.

Demikian cara berbagi kode program lintas project. Semoga bermanfaat.

Membuat Mirror Repository Ivy

Posted on October 5th, 2008

Pada rangkaian artikel sebelumnya, kita telah membahas tentang:

  1. Instalasi Ivy
  2. Build Management dengan Ivy
  3. Otomasi Build Process dengan Ant
  4. Publish Modul ke Repository
  5. Deklarasi internal dependency
  6. Deklarasi external dependency
  7. Ivy Configuration

Semua konsep dan pengetahuan di atas memungkinkan kita untuk menggunakan Ivy secara efektif untuk mengelola pembuatan aplikasi. Tetapi ada sedikit hal yang masih mengganjal, yaitu borosnya bandwidth yang digunakan selama build process dilakukan.

Pada artikel kali ini, kita akan membahas cara membuat mirror repository, sehingga pengambilan artifak dapat dilakukan dari server internal maupun harddisk lokal, sehingga tidak memboroskan bandwidth.

Read more »