26 Oct 2007
Maraknya akses internet 3G rupanya berimbas pada turunnya harga layanan GPRS. Salah satu yang sudah turun harga adalah Mentari, dari Rp. 5/kB menjadi Rp. 1/kB, setidaknya sampai Januari 2008.
Dengan adanya perkembangan yang menggembirakan ini, saya segera mengaktifkan koneksi GPRS tersebut agar bisa digunakan dari laptop. Caranya tidak terlalu sulit, seperti akan kita lihat segera.
Hardware
Laptop saya NEC Versa E3100, tepatnya seri E3100-1800DR. Handphone yang saya gunakan adalah LG KG300, seperti yang diiklankan Agnes Monica di TV. Jadi kalau kapan-kapan Agnes mau setting GPRS juga, bisa lihat artikel ini :D
Koneksi handphone ke laptop menggunakan kabel data, karena laptop saya tidak ada blututnya.
Software
Saya menggunakan Ubuntu Gutsy Gibbon 7.10, yang sudah dilengkapi dengan wvdialconf dan wvdial untuk melakukan koneksi. Tidak perlu ada instalasi software tambahan, karena kedua aplikasi ini sudah terinstal dari sananya.
Provider
Saya pakai Mentari. Sebelum mencoba koneksi melalui komputer, pastikan dulu kita bisa browsing langsung dari HP. Ini untuk memastikan bahwa dari HP ke Provider sudah OK. Jangan sampai sudah pusing-pusing utak-atik Ubuntu, ternyata masalahnya ada di HP.
Untuk LG KG300, kita bisa konfigurasi otomatis melalui OTA. Cukup kirim SMS ke 3000 dengan isi sebagai berikut:
Nanti kita akan terima SMS, yang bila dibuka akan ada konfirmasi apakah kita ingin mengkonfigurasi GPRS. Tentu saja jawab Yes.
Silahkan browsing ke Yahoo di http://m.yahoo.com atau Gmail di http://gmail.com/app.
Bila Anda punya akun YM, bisa dicoba chatting di sana.
LG KG300 punya fasilitas Java dengan versi MIDP 2.0. Bila malas chat melalui antarmuka Yahoo, bisa gunakan aplikasi shMessenger.
Konfigurasi
Setelah lancar browsing dan chatting di handphone, kini tiba saatnya kita browsing di laptop. Hubungkan handphone ke laptop melalui kabel data yang disediakan. Nanti di handphone akan muncul pertanyaan, apakah kita ingin terhubung sebagai Storage Media atau COM2. Pilih COM2. Storage Media dipilih bila ingin melakukan transfer file.
Oh iya, untuk memudahkan troubleshooting, selama melakukan konfigurasi, tampilkan kernel log dengan perintah tail -f /var/log/messages
di konsol. Biarkan window ini tetap terbuka selama konfigurasi.
Di kernel log akan muncul laporan deteksi modem seperti ini:
Oct 26 09:19:28 sweetdreams kernel: [ 507.608000] usb 1-2: new full speed USB device using uhci_hcd and address 2
Oct 26 09:19:29 sweetdreams kernel: [ 507.792000] usb 1-2: configuration #1 chosen from 1 choice
Oct 26 09:19:29 sweetdreams kernel: [ 508.100000] cdc_acm 1-2:1.1: ttyACM0: USB ACM device
Oct 26 09:19:29 sweetdreams kernel: [ 508.104000] usbcore: registered new interface driver cdc_acm
Oct 26 09:19:29 sweetdreams kernel: [ 508.104000] /build/buildd/linux-source-2.6.22-2.6.22/drivers/usb/class/cdc-acm.c: v0.25:USB Abstract Control Model driver for USB modems and ISDN adapters
Setelah itu, jalankan wvdialconf sebagai root.
sudo wvdialconf
Editing `/etc/wvdial.conf'.
Scanning your serial ports for a modem.
Modem Port Scan: S0 S1 S2 S3 SL0
WvModem: Cannot get information for serial port.
ttyACM0: ATQ0 V1 E1 -- OK
ttyACM0: ATQ0 V1 E1 Z -- OK
ttyACM0: ATQ0 V1 E1 S0=0 -- OK
ttyACM0: ATQ0 V1 E1 S0=0 &C1 -- OK
ttyACM0: ATQ0 V1 E1 S0=0 &C1 &D2 -- OK
ttyACM0: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK
ttyACM0: Modem Identifier: ATI -- MTK2
ttyACM0: Speed 4800: AT -- OK
ttyACM0: Speed 9600: AT -- OK
ttyACM0: Speed 19200: AT -- OK
ttyACM0: Speed 38400: AT -- OK
ttyACM0: Speed 57600: AT -- OK
ttyACM0: Speed 115200: AT -- OK
ttyACM0: Speed 230400: AT -- OK
ttyACM0: Speed 460800: AT -- OK
ttyACM0: Max speed is 460800; that should be safe.
ttyACM0: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK
Found an USB modem on /dev/ttyACM0.
/etc/wvdial.conf: Can't open '/etc/wvdial.conf' for reading: No such file or directory
/etc/wvdial.conf: ...starting with blank configuration.
Modem configuration written to /etc/wvdial.conf.
ttyACM0: Speed 460800; init "ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0"
Hasilnya adalah sebuah file /etc/wvdial.conf
sebagai berikut:
[Dialer Defaults]
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Modem Type = USB Modem
; Phone =
ISDN = 0
; Username =
Init1 = ATZ
; Password =
Modem = /dev/ttyACM0
Baud = 460800
Edit menjadi seperti ini:
[Dialer Defaults]
Modem = /dev/ttyACM0
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init3 = AT+CGDCONT=1,"IP","indosatgprs"
Stupid Mode = on
Modem Type = USB Modem
Phone = *99***1#
ISDN = 0
Username = indosat
Password = indosat
Baud = 460800
Go Online
Kalau sudah, saatnya kita online. Gunakan perintah wvdial untuk melakukan dial-up.
sudo wvdial
WvDial<*1>: WvDial: Internet dialer version 1.56
WvModem<*1>: Cannot get information for serial port.
WvDial<*1>: Initializing modem.
WvDial<*1>: Sending: ATZ
WvDial Modem<*1>: ATZ
WvDial Modem<*1>: OK
WvDial<*1>: Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
WvDial Modem<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
WvDial Modem<*1>: OK
WvDial<*1>: Sending: AT+CGDCONT=1,"IP","indosatgprs"
WvDial Modem<*1>: AT+CGDCONT=1,"IP","indosatgprs"
WvDial Modem<*1>: OK
WvDial<*1>: Modem initialized.
WvDial<*1>: Sending: ATDT*99***1#
WvDial<*1>: Waiting for carrier.
WvDial Modem<*1>: ATDT*99***1#
WvDial Modem<*1>: CONNECT
WvDial Modem<*1>: ~[7f]}#@!}!} } }2}"}&} } } } }#}$@#}'}"}(}"R[04]~
WvDial<*1>: Carrier detected. Starting PPP immediately.
WvDial<Notice>: Starting pppd at Fri Oct 26 09:25:58 2007
WvDial<Notice>: Pid of pppd: 6028
WvDial<*1>: Using interface ppp0
WvDial<*1>: local IP address 10.33.41.205
WvDial<*1>: remote IP address 10.64.64.64
WvDial<*1>: primary DNS address 202.155.0.10
WvDial<*1>: secondary DNS address 202.155.46.77
Setelah itu, silahkan coba browsing. Jangan tutup window wvdial supaya tidak disconnect.
Untuk menghentikan koneksi, cukup ketik Ctrl-C di window wvdial.
Caught signal 2: Attempting to exit gracefully...
WvDial<*1>: Terminating on signal 15
WvDial<*1>: Connect time 1.2 minutes.
WvDial<*1>: Disconnecting at Fri Oct 26 09:27:20 2007
Kita dapat melihat keseluruhan sesi internet, berikut jumlah trafik yang kita gunakan di kernel log, sebagai berikut.
Oct 26 09:25:58 sweetdreams pppd[6028]: pppd 2.4.4 started by root, uid 0
Oct 26 09:25:58 sweetdreams pppd[6028]: Using interface ppp0
Oct 26 09:25:58 sweetdreams pppd[6028]: Connect: ppp0 <--> /dev/ttyACM0
Oct 26 09:26:00 sweetdreams pppd[6028]: PAP authentication succeeded
Oct 26 09:26:12 sweetdreams pppd[6028]: Could not determine remote IP address: defaulting to 10.64.64.64
Oct 26 09:26:12 sweetdreams pppd[6028]: local IP address 10.33.41.205
Oct 26 09:26:12 sweetdreams pppd[6028]: remote IP address 10.64.64.64
Oct 26 09:26:12 sweetdreams pppd[6028]: primary DNS address 202.155.0.10
Oct 26 09:26:12 sweetdreams pppd[6028]: secondary DNS address 202.155.46.77
Oct 26 09:27:19 sweetdreams pppd[6028]: Terminating on signal 15
Oct 26 09:27:19 sweetdreams pppd[6028]: Connect time 1.2 minutes.
Oct 26 09:27:19 sweetdreams pppd[6028]: Sent 0 bytes, received 0 bytes.
Oct 26 09:27:19 sweetdreams pppd[6028]: Connection terminated.
Oct 26 09:27:19 sweetdreams pppd[6028]: Exit.
Demikianlah cara konfigurasi modem LG KG300 di Ubuntu. Mudah-mudahan dengan adanya artikel ini, Agnes Monica bisa segera online.
09 Oct 2007
Pada artikel sebelumnya, kita sudah membahas penggunaan Luntbuild dan CruiseControl untuk menerapkan Continuous Integration (CI). Kali ini, kita akan mencoba Hudson, aplikasi CI lain yang tersedia.
Hudson dapat diunduh dari websitenya. Setelah mengunduh, kita akan mendapatkan satu file *war. File ini dapat langsung dijalankan standalone dengan perintah:
java -jar hudson.war
Ataupun dideploy ke servlet engine favorit Anda, seperti Tomcat atau sejenisnya.
Setelah dideploy, kita bisa melihat tampilan awalnya melalui browser ke alamat http://localhost:8080 (untuk standalone) atau http://localhost:8080/hudson (bila dideploy ke servlet engine)
Keunggulan pertama Hudson adalah kemudahan setupnya. Segera setelah dijalankan (baik standalone maupun dideploy), kita bisa segera mengunjungi halaman depannya.

Hal pertama yang saya lakukan adalah konfigurasi email. Bila ini tidak dilakukan, Hudson akan gagal mengirim email laporan hasil build.
Klik Manage Hudson di sebelah kiri atas. Layar konfigurasi akan muncul.

Selanjutnya, pilih System Configuration, lalu scroll ke bagian bawah untuk mengatur email.

Setelah selesai, klik OK.
Bila Ant belum ada di PATH komputer Anda, jangan lupa untuk menyebutkan folder instalasi Ant di halaman ini.
Setelah selesai, kita bisa langsung mendaftarkan job. Klik tombol New Job di kiri atas.

Project saya menggunakan Ant biasa, tanpa Maven. Jadi saya pilih free-style. Klik OK.
Selanjutnya, kita konfigurasi repository project. Isikan nilai yang sesuai di bagian Source Code Management.

Segera setelah kursor meninggalkan field Repository URL (on blur), Hudson akan memeriksa URL yang kita berikan. Bila URL tersebut membutuhkan otentikasi, Hudson akan mengeluarkan pesan error dengan link untuk mengkonfigurasi username dan password.

Isikan nilai yang sesuai. Seperti kita lihat, Hudson mendukung beberapa modus otentikasi.
Bagian selanjutnya adalah jadwal build atau trigger. Hudson menggunakan format yang mirip dengan Cron.

Bila kita ingin melakukan build setiap jam, hanya pada hari kerja, entrinya adalah sebagai berikut:
1 * * * 1-5
Agar build berjalan setiap jam 1 dini hari, hari Senin dan Rabu, entrinya sebagai berikut:
0 * 1 * 1,3
Setelah jadwal, kita mengkonfigurasi proses build itu sendiri. Di project saya, build dilakukan oleh Ant. Kita bisa mendaftarkan target yang akan dieksekusi.

Terakhir, kita mengkonfigurasi post build. Ini adalah kegiatan yang dilakukan setelah build sukses dijalankan. Pada tahap ini, saya ingin Hudson mempublikasikan *.jar atau *.war yang dihasilkan agar siap didonlod.

Selain itu, saya juga bisa menyuruh Hudson untuk memproses hasil unit test JUnit. Hudson mengerti file XML yang dihasilkan JUnit dan TestNG.
Hudson juga bisa disuruh mengirim email apabila terjadi kegagalan build. Di sini biasanya saya isi dengan alamat mailing list developer.
Setelah selesai, klik Save.
Selanjutnya, kita tinggal melihat-lihat hasilnya.
Di halaman depan, kita bisa lihat rangkuman status tiap project.

Klik salah satu project, dan lihat detailnya

Di situ kita bisa lihat artifact yang sudah dipublish. Dari semua build yang sudah dilakukan, kita bisa lihat trendnya.

Selain itu, kita juga bisa lihat hasil JUnit test.

Kesimpulan akhir, berikut adalah perbandingan ketiga tools ini.
Tools Setup Tampilan Aksesoris Tag Otomatis
CruiseControl
Sulit, semua harus pakai XML
Kurang bagus, terlihat kuno
Lengkap
Bisa, menggunakan publisher
Luntbuild
Mudah, setup melalui web
Rumit dan kurang intuitif
Sangat sedikit
Bisa, dikonfigurasi melalui web
Hudson
Sangat Mudah
Bagus, intuitif, Web 2.0, AJAX
Eclipse plugin, Netbeans Plugin, Trac Plugin
Tidak bisa, harus manual
Demikianlah, semoga bermanfaat.
25 Sep 2007
Pada tahap implementasi, fitur dump-restore database sangat penting. Dengan fitur ini, kita bisa melakukan migrasi data di mesin development, melakukan troubleshoot, data cleansing, dan sebagainya dengan tenang. Begitu sudah selesai, kita dump struktur tabel berikut datanya dari mesin development, kemudian buat database baru di mesin production, lalu restore.
Agar tidak lupa, berikut saya tulis rangkaian langkah-langkahnya. Diasumsikan kita sudah memiliki database development dengan parameter sebagai berikut:
Untuk melakukan dump, berikut adalah perintahnya:
pg_dump -CdD -Fp -U belajar buku_tamu_devel > buku_tamu-dump.sql
Penjelasannya sebagai berikut:
-
pg_dump : adalah aplikasi command line untuk melakukan import
-
C : opsi untuk create semua tabel. Selain opsi C, kita juga bisa menggunakan opsi c, yaitu DROP dulu tabelnya baru kemudian CREATE. Pada skenario ini, file dump akan diaplikasikan ke database baru, jadi tidak perlu DROP dulu tabel-tabel yang sudah ada.
-
d : opsi untuk mengisi data. Bila ada opsi ini, pg_dump akan menghasilkan statement INSERT dari data yang sudah ada.
-
D : opsi untuk menulis nama kolom. Dengan opsi ini, di statement INSERT akan ada nama kolom.
-
Fp : format hasilnya adalah plain text
-
U : username untuk koneksi ke database
Selanjutnya, tiba saat melakukan restore. Parameternya sama dengan database development, kecuali nama databasenya adalah buku_tamu_prod
. Bila database belum ada, buat dulu dengan user postgres.
$ sudo su - postgres
$ createdb buku_tamu_prod
CREATE DATABASE
$ exit
Baru setelah itu kita lakukan restore.
psql -d buku_tamu_prod -U belajar -f buku_tamu-dump.sql
Penjelasan opsinya adalah sebagai berikut:
Bila tidak ada pesan error, struktur tabel dan data seharusnya sudah masuk ke database baru.
25 Sep 2007
Kemarin ada mbak-mbak yang kirim email ke saya, namanya mbak Hanna dari Experd, minta tolong dipostingkan lowongan. Entah kenapa, waktu saya cek websitenya, tulisannya Service Unavailable. Sedangkan www.experd.com bisa diakses. Entahlah, mungkin yang .org sedang bermasalah.
Begini katanya,
Sekedar share informasi lowongan, bahwa saat ini kami ada klien, sebuah konsultan IT yang berpusat di New Jersey, sedang membutuhkan JAVA/J2EE programmer. Nantinya kandidat yang dihired ini akan ditugaskan untuk proyek salah satu top bank di Malaysia. Status pekerjaan yang ditawarkan permanent employee. (selengkapnya di bawah ini).
Berikut detail lowongannya.
-
Has 2-7 years experience in Java/J2EE Development
-
Experience in DB2/Oracle and Unix is an advantage
-
Preferably with Banking Project Experience
-
Can join in 2-6 weeks
-
Willing to work in Kuala Lumpur, Malaysia
Mbak Hanna juga memberikan alamat kantornya, yaitu di:
Plaza 3 Pondok Indah Blok C2, Jl. T.B. Simatupang, Jakarta 12310
Telp. 62-21-75906448, Fax. 62-21-75906442
Email. hanna [at] experd [dot] org, http://www.experd.com
Jangan kirim lamaran ke saya, menurut mbak Hanna, kirimkan ke databank [at] experd [dot] org.
Disclaimer: Saya tidak kenal sama mbak Hanna. Artikel ini juga bukan anjuran kepada pembaca untuk mengirim lamaran
Saya juga sudah membaca bukunya Kevin Mitnick yang berjudul The Art of Deception, yang berisi tentang Social Engineering. Jadi, saran saya bagi pembaca yang berminat, luangkan waktu beberapa menit untuk melakukan cross-check ke alamat dan nomer telepon yang ada di atas untuk memastikan kesahihan info lowongan ini sebelum mengirim resume Anda.
Sekedar smoke-test, saya sudah lookup ke layanan whois, dan hasilnya experd.com dan experd.org diregistrasi oleh orang yang sama, dan alamatnya sama dengan alamat kantornya di atas.
Untuk mbak Hanna, mohon maaf ya … bukannya tidak percaya. Tapi baca sendiri deh The Art of Deception, nanti Anda akan mengerti kenapa saya terkesan paranoid. Anyway … terima kasih atas info lowongannya. Mudah-mudahan mendapatkan kandidat yang sesuai.
Kalau ada orang Experd yang membaca artikel ini, mohon konfirmasi atau sanggahannya.
24 Sep 2007
Saya baru saja memporting project yang sedang saya kerjakan, dari menggunakan ikan lumba-lumba menjadi gajah. Sebetulnya saya pernah menggunakan database gajah ini pada tahun 2005, tapi setelah itu jarang digunakan sehingga butuh waktu agak lama untuk melakukan porting ini.
Agar lain kali tidak lupa lagi, baiklah saya tulis di sini saja. Mudah-mudahan bermanfaat juga untuk pembaca :D
Instalasi
Saya menggunakan Ubuntu, jadi instalasi tidak sulit. Cukup lakukan:
sudo apt-get install postgresql
Beres .. :D
Konfigurasi Akses Jaringan
Selanjutnya, konfigurasi Postgre agar meminta password setiap ada koneksi masuk, termasuk dari localhost. Ini dilakukan agar konfigurasi JDBCnya tidak terlalu berbeda dengan konfigurasi sebelumnya yang menggunakan MySQL.
Ganti otentikasi dalam pg_hba.conf
menjadi
local all all password
host all all 127.0.0.1/32 password
host all all ::1/128 password
Konfigurasi di atas artinya, koneksi ke semua database, dari local maupun remote, mintalah password. File pg_hba.conf
ini lokasinya tergantung distro yang digunakan. Di tempat saya, ada di folder /etc/postgresql/9.3/main
. Jangan lupa merestart PostgreSQL setelah memodifikasi file ini.
sudo /etc/init.d/postgresql restart
Menambahkan User
Untuk menambahkan user, kita perlu menyamar sebagai user postgres
. Gunakan su
.
sudo su - postgres
Selanjutnya, jalankan perintah createuser
dengan argumen --interactive
agar diberikan form isian dan argumen -P
agar kita bisa mengisi password.
createuser --interactive -P
Enter name of role to add: belajar
Enter password for new role:
Enter it again:
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) n
Perintah di atas menambahkan user dengan username belajar
yang memiliki ijin untuk membuat database baru.
Selanjutnya, keluar dari user postgres dengan menggunakan perintah exit
.
Membuat Database
Agar bisa menyimpan data, kita harus punya database. Mari kita buat database yang namanya buku_tamu
. Gunakan perintah createdb
dengan argumen U untuk menyebutkan username.
createdb -U belajar buku_tamu
Password:
CREATE DATABASE
Setelah selesai, coba koneksi ke database tersebut.
psql -U belajar -d buku_tamu
Konfigurasi JDBC
Kalau sudah OK, berikut adalah konfigurasi JDBC untuk mengakses database tersebut.
jdbc.driver = org.postgresql.Driver
jdbc.url = jdbc:postgresql://localhost/buku_tamu
jdbc.username = belajar
jdbc.password = java
Saya menggunakan Hibernate, sehingga butuh satu parameter lagi, yaitu dialek SQL yang digunakan.
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
Dengan menggunakan Hibernate, maka porting database hanyalah perkara mengganti lima baris konfigurasi (bukan source code), dari seperti ini:
jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost/buku_tamu
jdbc.username = belajar
jdbc.password = java
hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
Menjadi seperti ini:
jdbc.driver = org.postgresql.Driver
jdbc.url = jdbc:postgresql://localhost/buku_tamu
jdbc.username = belajar
jdbc.password = java
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
Demikian setup PostgreSQL agar bisa diakses dari Java.