Skip to main content

Posts

Showing posts from November, 2012

Java | Method Validate dan Repaint

Beberapa waktu yang lalu saya membuat sebuah komponen yang berupa panel dengan pagination yang berisi button-button. Ketika terjadi pergantian page saya menggunakan method repaint untuk menggambar ulang panel. SwingUtilities.invokeLater(new Runnable() {                 @Override                 public void run() {                     panelPaging.repaint();                     panelContent.repaint();                 }             }); Komponen ini berjalan dengan baik saat saya letakkan pada JFrame , namun ketika saya letakkan pada JDialog , hasilnya tidak seperti yang diharapkan, dimana pada page selain 1, button tidak muncul. Setelah googling saya menemukan petunjuk bahwa jika kita menggunakan method remove maupun removeAll dari JPanel , maka kita harus memanggil method validate dan repaint . SwingUtilities.invokeLater(new Runnable() {                 @Override                 public void run() {                     panelPaging.validate();                     panelPaging.rep

PostgreSQL | Create Language PLPGSQL ke Database

Untuk sahabat yang sudah bekerja dan familiar dengan Stored Procedure  pada PostgreSQL , tentunya mengetahui salah satu bahasa pemrograman yang mendukung stored procedure adalah PLPGSQL  (biasa ditulis dengan huruf kecil, plpgsql), yakni bahasa pemrogaman SQL yang mirip dengan PLSQL milik Oracle Database. Secara default, baik pada Wind*ws maupun Linux/Ubuntu plpgsql ini akan diinstall kecuali jika kita menonaktifkan checkbox instalasi plpgsql pada database template1 . FYI: PostgreSQL menggunakan database template1  ini sebagai template ketika membuat database baru, sehingga baik metadata maupun bahasa pemrograman yang terinstall pada template1  akan tersedia pula pada database baru, sehingga kita tidak perlu menginstall/create lagi pada database baru. Untuk memeriksa apakah pada database template1 sudah terinstall plpgsql kita bisa menjalankan perintah berikut pada terminal: createlang -Upostgres -l template1 Jika sudah pada template1 sudah terinstall, maka output yang dihasi

PostgreSQL | Membuat Nomor Urut dengan Window Function ROW_NUMBER()

Pengguna Oracle Database mungkin sudah sangat familiar dengan clausa ROWNUM. Bagi yang belum tahu apa itu ROWNUM,  ROWNUM  adalah  pseudo column  (kolom bayangan) yang berisi nomor urut dari hasil eksekusi query. Sayangnya fitur ini belum tersedia pada PostgreSQL . Namun ada kabar gembira bagi kita pengguna  PostgreSQL , dimana sejak versi 8.4, PostgreSQL telah menyediakan 1 window function  yang mengakomodasi masalah ROWNUM, yakni ROW_NUMBER() . Sesuai dengan dokumentasi yang disediakan, cara menggunakan fungsi ini adalah dengan menggabungkannya dengan clausa OVER  yang didalamnya berisi clausa ORDER BY . Supaya lebih jelas dan lebih mudah dipahami, lebih baik langsung kita praktekkan saja. Saya membuat sebuah table dengan struktur sebagai berikut CREATE TABLE name ( code CHAR(1) ); yang kemudian saya isi kolom code dengan alfabet mulai dari a s/d z  dan angka 0 (nol). Sebelumnya kita lakukan query ke table name tanpa clausa ORDER BY : SELECT code FROM name; Outputny

Ubuntu | Problem Wifi Switch Dell Inspiron 14R

Saya pengguna Ubuntu 12.04, sebenarnya sudah lama saya mengalami problem ini di Dell Inspiron 14R saya. Sekedar informasi, Dell menggunakan kombinasi keyboard Fn + F2 untuk mengaktifkan maupun menonaktifkan wireless dan bluetooth. Switch ini berfungsi dengan baik untuk bluetooth, namun tidak berlaku pada wireless. Karena kadang berfungsi kadang tidak. Puncaknya pada hari ini, switch wireless sama sekali tidak berfungsi. Setelah googling, saya menemukan solusi sebagai berikut: 1. Install package firmware-b43-installer  dengan menjalankan perintah berikut sudo apt-get install firmware-b43-installer 2. Pastikan pada Ubuntu sahabat sudah terinstall package jockey-gtk, jika belum ada jalankan perintah berikut untuk menginstall sudo apt-get install jockey-gtk 3. Restart system dan tekan [F2]  pada saat booting untuk masuk ke BIOS , kemudian pilih opsi load default setting  dan jangan lupa menyimpan perubahan. 4. Sekarang seharusnya switch untuk wireless sudah berfungsi denga

Ubuntu | Menonaktifkan Popup Notifikasi Rhythmbox

Sahabat merasa terganggu dengan popup notifikasi dari Rhythmbox ketika pergantian lagu? Jika jawaban sahabat adalah iya, maka berikut ini adalah cara untuk menonaktifkannya : 1. Akses menu Edit -> Plugins 2. Pada dialog Plugins , cari plugins dengan nama Notification , dan kemudian uncheck Configure Plugins 3. Close dialog plugin, dan sekarang seharusnya popup notification pergantian lagu sudah tidak muncul.

JasperReports | Membuat Drill Down Report Untuk Memanggil Report Lain

Sabtu kemarin, di kantor saya menyibukkan diri untuk meriset JasperReports untuk mendukung fitur drill down report, itu tuh, report yang bisa manggil report/form lain. Dalam kasus saya, saya ingin menampilkan report detail atas chart yang saya klik. Sebagai studi kasus saya ingin membuat pie chart untuk menampilkan data 5 customer dengan total penjualan terbesar, kemudian ketika bagian pie saya klik maka akan ditampilkan daftar penjualan atas customer tersebut. Saya teringat bahwa JasperReports memiliki fitur Hyperlink , sehingga saya pun melakukan ujicoba dengan mengikuti tutorial dari hasil googling. Namun tidak ada tutorial yang memuaskan dan memenuhi kebutuhan saya, karena kebanyakan tutorial yang ada hanya menggunakan hyperlink untuk mengakses url ataupun mengarahkan report ke halaman tertentu pada report itu sendiri (misalkan hyperlink untuk mengarahkan ke halaman x). Sedikit frustasi karena riset saya gagal, saya kembali membaca dokumentasi JasperReports pada halaman ini .

Maven | Install Library ke Lokal Repository Secara Manual

Sahabat pengguna maven tentunya pernah mengalami ketika library yang kita pakai tidak tersedia pada repository central maven. Sehingga kita tidak bisa menambahkan dependency pada konfigurasi pom.xml kita. Untuk itu maven sudah menyediakan fasilitas untuk menginstall manual ke local repository. Sebagai studi kasus saya menggunakan library bsaf (Better Swing Application Framework, fork dari Swing Application Framework) versi 1.9, *sesuaikan groupId dan artifactId dengan library yang akan diinstall*. 1. Install binary jar mvn install:install-file -Dfile=bsaf-1.9.jar -DgroupId=org.jdesktop.application -DartifactId=bsaf -Dversion=1.9 -Dpackaging=jar 2. Install source code jar mvn install:install-file -Dfile=bsaf-1.9-sources.jar -DgroupId=org.jdesktop.application -DartifactId=bsaf -Dversion=1.9 -Dpackaging=jar -Dclassifier=sources 3. Install javadoc jar mvn install:install-file -Dfile=bsaf-1.9-javadoc.jar -DgroupId=org.jdesktop.application -DartifactId=bsaf -Dversion=1.9 -Dpac

Java | Inisialisasi HashMap

Sahabat sudah kenal pada HashMap? Udah ya?! Betul, HashMap merupakan sebuah class struktur data yang menyimpan data berupa key dan value , mirip sistem kerja kamus dimana kita mencari arti sebuah kata melalui kata kuncinya. Deklarasi HashMap biasanya berbentuk seperti ini HashMap<T, O>, dimana T adalah class object yang menjadi key dan O adalah class object yang menjadi value. Perhatikan contoh berikut: private HashMap<String, Image> imageMap = new HashMap<String, Image>(); //di sini saya mendeklarasikan sebuah HashMap yang memiliki key berupa String dan value berupa Image Untuk mengakses HashMap perintah yang digunakan adalah sebagai berikut: imageMap.put("Eko", new ImageIcon(getClass().getResource("/images/eko.jpg")).getImage()); // statement di atas berfungsi untuk memasukkan data ke dalam HashMap dengan key "Eko" dan value Image // sedangkan statement berikut ini berfungsi untuk mengambil value dari HashMap dengan key &q

Maven | Menambahkan Main Class pada Manifest dan Membuat Folder lib

Bagi sahabat yang sudah terbiasa menggunakan Netbeans untuk mendevelop aplikasi, khususnya aplikasi desktop berbasis Swing, tentunya sudah tidak asing dengan Apache Ant . Yaitu build tool default (yang konfigurasinya terletak pada file build.xml) yang digunakan Netbeans untuk membuat file distribusi dari aplikasi yang kita buat (folder dist yang berisi jar project dan folder lib yang berisikan semua file library yang dibutuhkan jar project kita). Apabila kita lihat isi file jar project tersebut dan membuka file MANIFEST.MF, maka sahabat akan mendapati entri Main-Class dan Class-Path . Dimana Main-Class berisi class utama yang akan dijalankan apabila jika menjalankan aplikasi dengan perintah java -jar [project.jar] Sedangkan Class-Path berisi file-file yang ada pada folder lib. Seperti halnya dengan Ant, Apache Maven pun juga mendukung fitur ini, sehingga ketika proses build aplikasi dijalankan Maven akan menambahkan Main-Class dan Class-Path pada manifest, serta akan mem

Java | Setting Report Default Language di iReport 4.8

Saya termasuk orang yang jarang mengupgrade iReport terbaru, dikarenakan kantor saya masih menggunakan JasperReports  versi 2.0, sehingga iReport yang saya gunakan juga masih pada versi 2.0. Namun hari ini saya mencoba untuk menggunakan iReport terbaru, yakni versi 4.8. Meskipun iReport sudah lama menggunakan Netbeans Platform sebagai pondasinya, tidak diperlukan waktu adaptasi yang terlalu lama bagi user pengguna versi 2.0 untuk menguasai penggunaan iReport terbaru. Setelah mendesain template report, saya pun mencoba mengeksekusi laporan via java swing. Namun ternyata saya mendapatkan exception sebagai berikut: Caused by: java.lang.ClassNotFoundException: org.codehaus.groovy.control.CompilationFailedException Anehnya hal ini tidak terjadi pada saat eksekusi laporan via iReport sendiri. Setelah memeriksa file .jrxml saya menemukan ternyata language yang digunakan adalah Groovy, padahal seharusnya yang digunakan secara default adalah Java. Untuk mengatasi hal ini kita tin

Ubuntu | Gagal Update Glassfish dengan Updatetool di Ubuntu 64bit

Hari ini saya ingin melakukan update glassfish 3.1.2 ke edisi glassfish terbaru yakni 3.1.2.2 dengan menjalankan perintah berikut : root@code-impact:/opt/servers/glassfish3/bin# ./updatetool namun muncul pesan error sebagai berikut "/BUILD_AREA/workspace/updatecenter2.3-sustaining/uc2/build/dist/linux-i386/updatetool/vendor-packages/updatetool/common/boot.py", line 283, in init_app_locale File "wx/__init__.py", line 45, in ? File "wx/_core.py", line 4, in ? ImportError: libjpeg.so.62: cannot open shared object file: No such file or directory --------------------------------------------------------------- There was an error running /usr/local/glassfish3/updatetool/bin/../../pkg/python2.4-minimal/bin/python You are running on a 64 bit Linux distribution and the 32 bit Linux compatibility libraries do not appear to be installed. In order to use the Update Center tools you must install the 32 bit compatibility libraries. On Ubunt

Ubuntu | Perbedaan Perintah adduser dan useradd

Sebagai "senior" dalam perusahaan, saya terkadang merangkap sebagai administrator user pada komputer server (kami menggunakan pc station dengan Ubuntu 7.04 sebagai OS *jadul ya :D*) Untuk menambahkan user baru pada linux, khususnya pada  Ubuntu , sahabat tentunya sudah mengetahui ada dua opsi perintah yang bisa digunakan yakni  adduser dan useradd . Lalu apa sih perbedaan kedua perintah tersebut? Ok, untuk mencari tahu mari kita lakukan ujicoba secara langsung: 1. Jalan perintah useradd  melalui terminal sudo useradd [nama_user] Perintah tersebut tidak menghasilkan output apapun 2. Jalankan perintah adduser sudo adduser [nama_user] Perintah tersebut menghasilkan output dan entrian yang harus kita isi, sebagai berikut Adding user `eko2' ... Adding new group `eko2' (1001) ... Adding new user `eko2' (1001) with group `eko2' ... Creating home directory `/home/eko2' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retyp

Ubuntu | Membuat PDF Dari Buku Git Berformat Pandoc

Pada posting sebelumnya saya menuliskan tentang cara instalasi git pada Ubuntu. Namun alasan klasik programmer kita yang tidak mau belajar git ataupun teknologi baru lainnya adalah, tidak tersedianya buku maupun resource yang berbahasa Indonesia. Namun untuk belajar git kali ini sahabat tidak perlu khawatir, karena sudah ada buku git berbahasa indonesia yang dibuat oleh Pak Endy Muhardin . Bagi sahabat yang sudah lama mengikuti milist yahoo JUG (Java User Group) Indonesia maupun NUG (Netbeans User Group) Indonesia, tentunya sudah mengetahui bahwa beliau adalah sosok yang sudah banyak berkontribusi bagi developer java baik melalui milist, blog, training, maupun buku-buku beliau. Kali ini beliau juga ingin kembali berkontribusi dengan membagi buku buah tangan beliau yang membahas git, buku ini ditulis dalam format markdown dan dihost pada akun github Pak Endy Muhardin. Untuk mengkonversi format markdown ini ke dalam format PDF agar lebih mudah dibaca maupun dicetak, sahabat bisa

Ubuntu | Install Git Version Control

Bagi sahabat yang sudah lama berkecimpung di bidang software development profesional tentunya sudah tidak asing dengan version control , yakni sebuah sistem yang biasa digunakan untuk mengontrol perubahan dan version dari source code program kita. Meskipun begitu, version control ini tidak hanya dapat digunakan pada source code saja, bahkan bisa digunakan pada dokumen pribadi . Salah satu contoh version control yang banyak digunakan adalah Subversion , kantor saya pun menggunakan Subversion tersebut. Namun kelemahan yang dimiliki Subversion adalah sistem koneksinya yang berupa client server, sehingga jika server down ataupun koneksi internet mati, kita tidak dapat melakukan proses version control seperti commit, update dan sebagainya. Untuk itu datang salah satu version control yang sedang naik daun saat ini, yaitu Git . Terlebih lagi dengan munculnya penyedia layanan host repository source code dengan menggunakan version control git ini. Yap benar, github.com  yang sedang popule

PostgreSQL | Menampilkan Lokasi Data via PSQL Prompt

Bagi sahabat yang menggunakan database PostgreSQL , tentunya sudah mengetahui bahwa PostgreSQL menyimpan seluruh data dalam folder tersendiri. Pada Windows kita bisa dengan mudah mencari folder data, karena letaknya menjadi satu lokasi dengan lokasi instalasi PostgreSQL (biasanya adalah folder [data]). Namun bagi pengguna Ubuntu yang menginstall PostgreSQL dari repository maka bisa jadi akan sedikit kesulitan, karena lokasi folder datanya berbeda dengan lokasi instalasi PostgreSQL. Berikut tips untuk mengetahui folder data dari PostgreSQL yang kita install: 1. login ke psql prompt sebagai superuser (user postgres) psql -Upostgres [mydb] ganti [mydb]  sesuai dengan nama database yang ada pada komputer, bisa database dengan nama apa saja. 2. ketikkan perintah berikut pada psql prompt SHOW data_directory; Pada komputer saya, output perintah SHOW data_directory adalah sebagai berikut:         data_directory       ------------------------------  /var/lib/postgresql/9.1

Ubuntu | Gagal Mounting Hardisk (HDD) Eksternal

Pernahkah sahabat mengalami gagal mounting (automount) Harddisk eksternal pada Ubuntu? Saya pernah mengalaminya, yakni ketika pertama kali memasang HDD eksternal baru pada Ubuntu 12.04. Pesan error yang muncul adalah sebagai berikut : $MFTMirr does not match $MFT (record 0).Failed to mount '/dev/sdb1': Input/output errorNTFS is either inconsistent, or there is a hardware fault, or it's aSoftRAID/FakeRAID hardware. In the first case run chkdsk /f on Windowsthen reboot into Windows twice. The usage of the /f parameter is veryimportant! If the device is a SoftRAID/FakeRAID then first activateit and mount a different device under the /dev/mapper/ directory, (e.g./dev/mapper/nvidia_eahaabcc1). Please see the 'dmraid' documentation Setelah googling saya menemukan solusi dengan menjalankan perintah berikut: sudo ntfsfix /dev/sdb1 atau sudo ntfsfix /dev/[path-to-hdd] Silahkan ganti [path-to-hdd] dengan lokasi mount HDD eksternal kita, yang bisa dilihat dengan

Ubuntu | Problem Instalasi Netbeans 7.1.2 di Ubuntu 12.04

Sepanjang pengalaman saya, saya belum pernah mengalami problem dalam instalasi Netbeans di Ubuntu. Namun hari ini saya mengalami problem yang cukup mengganggu, yakni installer Netbeans tidak berjalan dengan baik. Perlu diketahui, saya sudah menginstall Oracle JDK 7u4 dan JDK 6u32, dengan JDK 7 sebagai default. Namun saya juga sudah mengedit file .bashrc untuk me- export  lokasi JDK 6u32 ke dalam ${PATH}. Berikut perintah yang saya jalankan sewaktu menginstall netbeans: eko@code-impact:~$ chmod +x netbeans-7.1.2-ml-linux.sh eko@code-impact:~$ ./netbeans-7.1.2-ml-linux.sh Configuring the installer... Searching for JVM on the system... Extracting installation data... Running the installer wizard... eko@code-impact:~$ Seperti yang sahabat lihat, installer berhenti dan kembali ke bash prompt. Setelah googling problem tersebut, saya menemukan link berikut  askubuntu.com . Dari link tersebut saya menemukan petunjuk tentang symbolic link dari java yang terinstall. Oleh kare

Ubuntu | Memeriksa Versi Ubuntu via Terminal

Untuk sahabat pengguna Ubuntu  kali ini saya ingin berbagi tips untuk memeriksa versi Ubuntu yang terinstall via terminal. Berikut ini perintahnya: lsb_release -a pada komputer saya (Ubuntu 12.04 Precise Pangolin), perintah tersebut menghasilkan output berikut: No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 12.04.1 LTS Release: 12.04 Codename: precise referensi:  https://help.ubuntu.com/community/CheckingYourUbuntuVersion

Ubuntu | Install Meld Diff Tool

Sebagai programmer yang bekerja secara tim, tentunya sahabat sudah familiar dengan aktifitas diff . Yakni membandingkan perbedaan ( differences ) dari dua file atau lebih, terutama apabila terjadi conflict  atas file coding kita. Ataupun untuk membandingkan perbedaan file di workspace dengan file di server source code repository  *saya menggunakan subversion . Tentunya hal ini sangat merepotkan jika dilakukan secara manual atau tanpa bantuan tool. Bagi sahabat pengguna Ubuntu , kita dapat menggunakan GUI diff tool yang tersedia, yakni Meld. Fitur-fitur yang tersedia pada Meld antara lain: Membandingkan dua buah file, bisa juga membandingkan 3 file secara bersamaan. Membandingkan dua buah folder Untuk menginstall Meld pada Ubuntu, silahkan jalankan perintah berikut ini: sudo apt-get install meld Berikut beberapa snapshot dari Meld: Window utama File diff selection File diff window Folder diff selection Folder diff window

Netbeans | Menonaktifkan Fitur Automatic Internationalization pada Netbeans 7.2

Bagi sahabat yang menggunakan Netbeans (terutama versi 7.2) tentunya sudah tahu bahwa GUI Builder Netbeans secara otomatis akan menggenerate Bundle.properties untuk menyimpan resource berupa text. File ini merupakan fitur yang dimiliki Netbeans untuk meng internationalisasikan aplikasi kita secara otomatis. Sebagai contoh ketika kita mengganti property text dari sebuah JButton maka text tersebut akan digenerate ke dalam Bundle.properties dan code hasil generate (method initComponents) akan menjadi sebagai berikut:  jButton1.setText(org.openide.util.NbBundle.getMessage(FrmTest.class, "FrmTest.jButton1.text")); Fitur ini secara default sudah aktif pada Netbeans 7.2. Bagi yang kurang menyukai fitur ini, kita dapat menonaktifnya dengan cara sebagai berikut: Akses menu Tools -> Options . Kemudian pilih button bar Java   dan pilih tab GUI Builder pada Options dialog. Ganti opsi combobox Automatic Internationalization menjadi Off .  

Netbeans | Mendisable Scan for External Changes pada Netbeans 7.2

Bagi sahabat pengguna Netbeans  tentu sudah mengetahui bahwa secara default Netbeans akan melakukan scanning terhadap perubahan eksternal Projects. Proses ini dilakukan ketika kita mengembalikan fokus pada window Netbeans setelah membuka window aplikasi lain. Proses ini berfungsi untuk merefresh Projects untuk mengupdate IDE jika terjadi perubahan source yang dilakukan di luar IDE. Proses ini memang menguntungkan karena kita tidak perlu melakukan refresh project secara manual, apalagi sejak Netbeans 7.2 proses ini berlangsung pada background sehingga tidak akan mengganggu. Namun bagi sistem dengan resources rendah, tentu hal ini menjadi cukup mengganggu karena membuat sistem menjadi lebih lambat. Untuk itu kita bisa mendisable fitur ini dengan cara sebagai berikut: Buka menu Tools -> Option . Kemudian pilih button bar Miscellaneous   dan pilih tab Files  pada Options dialog. Lalu uncheck  opsi Enable auto-scanning of sources seperti pada gambar berikut ini Se

PostgreSQL | Set Default Output Data Binary/ByteA PostgreSQL 9.x

Hari ini saya sedang melakukan pengecekan salah satu modul pekerjaan saya, yakni penyimpanan data image (binary/bytea) ke dalam database PostgreSQL (saya menggunakan PostgreSQL 9.1.6 pada Ubuntu 12.04). Ternyata setelah dilakukan pengujian retrieval data gambar menjadi kacau, file image hasil generate dari database tidak sesuai dengan image asli yang datanya disimpan ke dalam database. Setelah googling, saya menemukan petunjuk bahwa hal ini terjadi karena default output data binary pada PostgreSQL 9.1.6 mempunyai format hex. Untuk mengatasi hal tersebut kita bisa melakukan alter pada database yang bersangkutan dengan perintah sebagai berikut (perintah dilakukan pada psql prompt bukan bash prompt linux/Ubuntu): database=> ALTER DATABASE database SET bytea_output TO 'escape'; Namun kekurangan perintah tersebut adalah kita harus melakukan alter pada semua database yang kita miliki. Hal ini tentu sangat merepotkan bila database yang ada jumlahnya cukup banyak. Unt