Skip to main content

Posts

XP | Pair Programming di Mata Dummy

Tak terasa 2018 sudah memasuki hari ke-2, resolusi tahun lalu nampaknya masih belum bisa terpenuhi karena hanya sebatas tertulis di ingatan, yang alangkah lebih baik jika di tulis secara visual. Tapi kali ini saya tidak akan membahas mengenai resolusi tahun 2018. Di posting kali ini saya ingin berbagi pengalaman saya menjalankan Pair Programming selama lebih kurang 7 bulan di perusahaan tempat saya bekerja sekarang. Saya sudah mengetahui Pair Programming ini saat masih di perusahaan lama, namun di perusahaan baru inilah saya langsung mengalaminya sendiri. Jika diterjemahkan secara praktek, Pair Programming  adalah dua orang programmer bekerja secara bersamaan dengan 1 workspace saja (1 komputer, 2 programmer, 2 mouse dan 2 keyboard ^_^). Bersamaan di sini bukan berarti 2 programmer tersebut "mengetik kode secara bersamaan", melainkan mereka bekerja sama dalam menyelesaikan suatu story . Secara istilah 2 programmer tersebut dibagi menjadi dua role Driver , progra...

Hisashiburi - Long time no see

Dear all, Sudah lama sekali saya tidak memposting "artikel" di blog ini :P Btw, melalui post ini saya ingin menginformasikan bahwa berikutnya blog ini akan beralih fungsi menjadi blog mengenai pengalaman yang saya alami di dunia kerja. Untuk post technical  akan saya pindahkan ke https://medium.com/@ekosuhariyadi Sampai bertemu di post selanjutnya. Terima kasih :)  

Bash | Learning Bash/Shell Scripting The Hard Way

Meskipun saya sudah menggunakan Sistem Operasi berbasis Linux sejak lebih dari 8 tahun lalu. Cukup jarang saya harus berkutat dengan bash/shell scripting/programming, saya hanya sekedar tahu dan tidak pernah belajar lebih dalam. Tapi karena tuntutan profesi (*haha profesi jare), mau tidak mau saya harus sedikit belajar, dengan bekal script warisan dari SysAdmin sebelumnya. Langsung saja studi kasusnya adalah membuat bash script untuk melakukan proses backup database sistem (kami menggunakan PostgreSQL)  ke layanan Google Drive (berikutnya kita sebut gdrive ). Kami mempunyai beberapa database server dan beberapa diantaranya dibatasi hanya bisa diakses dan mengakses via jaringan lokal (private network). Untuk keperluan komunikasi dengan Google Drive via terminal, saya menggunakan tool bernama drive yang merupakan project open source dan bisa diakses via  https://github.com/odeke-em/drive . Gambaran untuk prosesnya adalah seperti ini: Di node backup masih ada file ...

PostgreSQL | Query Select Dengan Tuple Sebagai Kondisi di Where Clause

Salam SQL ^_^)! Kali ini saya mau berbagi pengalaman untuk menggunakan tuple dalam query (kondisi di WHERE  clause ). Beberapa minggu yang lalu saya harus melakukan cek data, dimana saya membuat query yang membutuhkan beberapa kombinasi kondisi yang harus dipenuhi. Jika menggunakan operator logical biasa, eg: WHERE column1=value1 AND column2=value2 AND column3=value3 saya mengalami kesulitan apabila value1..3 tersebut terdiri dari beberapa row yang merupakan hasil subquery dalam clause IN . Setelah googling ternyata clause WHERE   sudah mendukung penggunaan tuple, jadi query yang saya buat menjadi WHERE (column1, column2, column3) IN (SELECT value1, value2, value3 FROM ...) Wah, saya baru tahu hahaha ^_^)!

Bash | Solusi "Warning: remote port forwarding failed for listen port 9000"

Halo Sobat, mohon maaf saya cukup lama hiatus di blog ini. *sok pakai kata hiatus :P Langsung saja saya mau share pengalaman melakukan remote debugging PHP melalui ssh tunnel di port 9000 (standar port xdebug, yap saya menggunakan xdebug untuk debugging aplikasi PHP). Dengan ssh tunnel kita bisa menforward port 9000 dari server yang ada di cloud ke port 9000 di komputer lokal kita, sehingga kita bisa mendebug aplikasi di server melalui IDE/tool debug di komputer lokal. (Saya penyuka PHPStorm, please no IDE war here haha). Namun karena internet yang saya pakai tidak stabil sehingga seringkali ssh tunnel ini freeze di bash window, sehingga saya harus menutup paksa window tersebut. Akibatnya di sisi server, port forwarding masih aktif, jadi ketika saya melakukan tunneling lagi maka akan muncul warning  remote port forwarding failed for listen port 9000. Solusinya adalah kita harus meng-kill proses port forwarding tsb via ssh ke server dengan menjalankan perintah lsof |...

Hardware | Banyak Bersyukur dengan SSD

Seperti yang sudah saya sampaikan pada post sebelumnya, kali ini saya mau membahas upgrade laptop saya ke SSD sebagai "main" hard drive . Saya sudah cukup banyak mendengar mengenai hebatnya kecepatan yang ditawarkan SSD, namun belum mempunyai keinginan untuk upgrade karena ketidaktahuan saya bahwa ada cara untuk memasang SSD ke laptop secara mandiri (*Saya beralih dari PC ke laptop karena adik saya membutuhkan PC saya). Beruntung saya mengikuti feed dari blog Mas Vatih dan menemukan satu artikel menarik mengenai cara memasang SSD di Macbook miliknya. Berbekal info dari post tersebut dan uang tabungan yang cukup, saya memutuskan untuk mencobanya. Saya membeli SSD Crucial MX200 250GB dan HDD Caddy SATA 12.7mm dari JakartaNotebook.com *bukan iklan. Bagi yang belum tahu, HDD Caddy adalah suatu alat yang digunakan untuk memasang hard drive pada slot DVD ROM. Berikut penampakan HDD Caddy HDD Caddy 12.7mm *mirip DVD ROM kan ^^ Perlu diketahui juga bahwa HDD Caddy ...

Kotlin | kotlin.String steroid untuk java.lang.String

Sama seperti String di Java, Kotlin String adalah obyek immutable yang berarti sekali diinisialisasi, valuenya tidak akan bisa diubah. Jika dilakukan assignment value baru, yang sebenarnya terjadi adalah JVM akan membuat obyek String baru dengan value yang diassign. String kode = "Sebenarnya hubungan kita ini apa sih?" ; // misalkan object di memory adalah ABC kode = "Oke, besok aku datang ke Ayah kamu" ; // object yang ada di memory saat ini adalah XYZ Seperti halnya dengan Java, String literal di Kotlin juga dimulai dengan tanda petik ganda ("). Hanya saja class String di Kotlin memeliki beberapa kelebihan dibanding String di Java. Diantaranya: Setiap element character dari string bisa diakses dengan array syntax eg: kode[index], sedangkan di Java kode.charAt(index) Untuk iterasi tiap element Java for ( char c : kode.toCharArray()) { System. out .println(c); } Kotlin for (c in kode) { println (c) } String template, yakni dalam string l...

I'm not that fanatic anymore ^^!

Haiiii * impersonate cara Takeru Satoh mengucapkan hai (iya dalam bahasa Jepang) di dorama Emperor's Cook :P Yak, sesuai judul post kali ini, saya sudah tidak sefanatik dulu terhadap bahasa pemrograman yang saya gunakan, yakni Java. Semua berawal ketika saya mengenal JVM language  lain (bahasa pemrograman yang berjalan di Java Virtual Machine ) seperti : Groovy yang mengusung Dynamic Typing Bagi programmer dynamic type seperti PHP mungkin akan merasa familiar dengan Groovy, karena kita tidak perlu mendeklarasikan tipe data pada variable. Saya sempat jatuh cinta pada bahasa ini, namun saya masih merasakan keamanan "bermain" OOP dengan static type. Scala dengan konsep Functional OOP (Object Oriented Programming) Bahasa ini membuka wawasan saya bahwa diluar pemrograman struktural dan berbasis object (imperative), pernah ada bahasa yang mengusung konsep functional  dan belakangan ini mulai muncul lagi ke permukaan dan bahkan banyak menyedot perhatian para developer...

Java | Retrolambda, Coding dengan Java 8 untuk Java 5, 6, 7

Seperti yang kita ketahui bahwa versi paling akhir untuk saat ini dari Java adalah Java 8. Pada Java (sebagai bahasa pemrograman) 8 terdapat cukup banyak fitur baru yang memudahkan hidup kita sebagai programmer, terutama untuk mengurangi verbosity / boilerplate dari code yang kita tulis. Fitur-fitur tersebut antara lain adalah lambda expressions , method reference , dan try with resources . Lambda expressions (fitur ini dirilis mulai java 8) Sebagai contoh di swing, apabila kita menambahkan actionlistener pada button adalah sebagai berikut clickButton.addActionListener(new ActionListener() {     @Override     public void actionPerformed(ActionEvent event) {         System.out.println(event);     } }); terlihat bahwa koding yang kita tulis cukup banyak ( verbose ), namun dengan lambda expressions  kita cukup menuliskan clickButton.addActionListener((ActionEvent event) -> {     System.out.println(event); })...

What i don't like about Mac OS X

Bagi pengguna "fanatik" Mac OSX mungkin judul post kali ini agak mengganggu, tapi ini pengalaman yang saya rasakan sebagai "pengguna baru". Jadi 2 hari kemarin saya sudah mulai aktif kembali di kantor, yang mana sebelumnya saya bekerja secara remote dikarenakan alasan kesehatan. Namun ujian datang ketika saya ingin mulai aktif di kantor. Pagi hari sebelum berangkat, laptop saya tidak bisa booting, yang ternyata penyebabnya adalah harddisk utama tidak terbaca oleh sistem, alhasil laptop yang sudah menemani saya selama hampir 4 tahun ini harus "dirumah sakitkan". Saya kontak rekan kantor untuk mengabarkan bahwa saya harus ke service center terlebih dahulu sebelum "ngantor". Di kantor tidak ada lagi komputer/laptop yang bisa saya gunakan, sehingga saya pun "terpaksa" memakai MacMini second hand yang dimiliki kantor. Perjuangan dimulai dari sini, karena saya harus mensetup environment yang sama dengan yang saya gunakan di laptop...

MySQL | Catatan Pengingat

Saya sangat jarang menggunakan MySQL, karena saya lebih menyukai PostgreSQL untuk development. Saya intensif menggunakan MySQL di semester ke-2, karena ada mata kuliah database (database model design dan querying) yang mana saat itu menggunakan Oracle. Dikarenakan komputer saya saat itu speknya minim (komputer bekas yang saya beli dari teman kuliah seharga 350ribu rupiah, lengkap), maka saya hanya bisa menginstall MySQL untuk belajar, yang mana saat itu versinya belum mensupport subquery, sehingga saya harus banyak membuat view sebagai alternatif subquery. Belakangan saya mulai melirik lagi MySQL, namun hanya untuk tujuan belajar. Berikut catatan atas problem yang saya hadapi, sebagai catatan pengingat jika nanti saya lupa Lupa password user root Hari ini saya kelupaan password user root dari MySQL, karena sudah cukup lama tidak tersentuh. Hasil googling mengarahkan saya ke laman ini (workstation saya adalah Ubuntu 14.04) Langkah pertama adalah stop mysql service sudo service...

Raspberry Pi | Problem Monitor Out of Range 60Hz

Halo apa kabar sahabat sekalian? Semoga sahabat semua senantiasa dalam limpahan kebaikan dari Allah SWT, aamiin. Sudah lama saya tidak posting di blog ini, hehehe maklum orang sok sibuk :D. Kali ini saya ingin berbagi mengenai Raspberry Pi , lebih tepatnya saya menggunakan varian Banana Pi. Karena ada tugas kantor, saya harus mencoba komputer mungil  ini di rumah (sekalian ngoprek). Berbekal konverter HDMI to VGA saya mencoba menghubungkan Banana Pi  ke LCD monitor 19", namun ternyata ada masalah, yakni muncul informasi " Out of Range bla bla ". Setelah googling sebentar saya menemukan link berikut , dan saya mendapatkan pencerahan bahwa untuk mengatasi hal ini kita bisa mengedit file config.txt . Jadi berikut hal-hal yg saya lakukan: Mencabut sdcard dari banana pi dan memasangnya ke laptop Saya edit file config.txt yg ada di folder BOOT uncomment  2 baris berikut, jika belum ada mungkin sahabat bisa menambahkannya sendiri hdmi_group=1  hdmi_mode=1...

Ubuntu | Menerima File Dari Device Bluetooth

Lama ga ketemu ya sahabat javanatics, apa kabar? Semoga sahabat sekalian senantiasa dalam limpahan rahmat dari Tuhan Yang Maha Esa. Aamiin Kali ini saya ingin berbagi cara untuk mengkonfigurasi Ubuntu 12.04 agar bisa menerima file yang dikirim dari device bluetooth (sebagai contoh saya ingin mengirim foto dari device Android saya). Secara default, setting bluetooth di Ubuntu 12.04  belum bisa digunakan untuk menerima file yang kita kirim melalui bluetooth. Jadi jangan heran jika proses pengiriman file ke Ubuntu kita selalu gagal. Berikut adalah langkah-langkah untuk mengkonfigurasi agar Ubuntu kita bisa menerima file dari device bluetooth.  Masuk ke dashboard Unity dan akses aplikasi "Personal File Sharing".  Pada window preferensi Personal File Sharing, centang opsi Receive files in Downloads folder over Bluetooth  lalu klik tombol Close Ulangi kembali mengirim file dari device Bluetooth kita, dan voila... File otomatis t...

Java | Mudahnya Konversi Java Object - JSON dengan Google Gson

Pada kesempatan kali ini saya ingin berbagi dengan sahabat tentang konversi object menjadi JSON atau sebaliknya. Sahabat tentunya sudah tidak asing lagi dengan format JSON bukan?  Bagi yang belum kenal, silahkan kenalan lebih dalam lewat halaman wikinya ya. :) Sebenarnya kita bisa membuat coding sendiri untuk melakukan konversi ke format JSON, karena JSON merupakan format yang berbasis text. Hanya saja, jika sudah ada yang membuatnya terlebih dahulu dan sudah production ready , terlebih lagi jika pembuatnya adalah Google , kenapa harus membuat library sendiri.  Ingat prinsip don't reinvent the wheel kan. Jadi saya memilih untuk menggunakan library Google Gson, yang informasi lebih detailnya bisa dinikmati pada halaman berikut,  http://code.google.com/p/google-gson/ .  Ok, let's get our hand dirty ! Perlu diketahui, seperti biasa saya menggunakan Maven , sehingga untuk menambahkan library Google Gson kita tinggal mengedit file pom.xml dan menam...

Java Swing | Text AutoCompletion dengan JIDE Common Layer AutoCompletion

Kali ini saya ingin berbagi mengenai cara membuat autocomplete  pada JTextField dan JComboBox  dengan library yang bernama JIDE Common Layer . JIDE Common Layer merupakan sebuah product open source dari Jidesoft  (sebuah perusahaan komersil yang menyediakan komponen custom Java Swing). Namun pada post kali ini saya hanya akan membahas komponen AutoCompletion yang disediakan pada library JIDE Common Layer. Sebelumnya kita harus menambahkan dependency JIDE Common Layer pada project yang kita buat. Karena saya menggunakan Maven dan JIDE Common Layer sudah tersedia pada maven repository, silahkan tambahkan dependency berikut pada pom.xml <dependency>             <groupId>com.jidesoft</groupId>             <artifactId>jide-oss</artifactId>             <version>3.5.0</version> </dependency> Untuk mencoba AutoCompletion, saya me...

Java | Menambahkan Dialog Konfirmasi Sebelum Keluar dari Aplikasi

Kali ini saya ingin berbagi cara sederhana untuk menampilkan dialog konfirmasi sebelum keluar dari aplikasi. Dengan syarat aplikasi yang kita buat harus menggunakan JFrame sebagai frame utama. Langkah-langkah yang harus kita lakukan adalah sebagai berikut: 1. Ganti property default close operation dari JFrame menjadi DO_NOTHING_ON_CLOSE, value ini dimaksudkan agar ketika button close dari JFrame diklik tidak akan terjadi apa-apa. Sebaliknya jika valuenya adalah EXIT_ON_CLOSE, maka ketika button close dari JFrame diklik maka program akan tertutup. setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); 2. Yang kedua adalah kita harus menambahkan WindowListener pada JFrame. Interface WindowListener memiliki beberapa method terkait event terhadap window (yakni JFrame), namun yang harus kita override hanyalah method windowClosing, method ini akan dipanggil ketika button close diklik.   Sebagai informasi, apabila kita menambahkan WindowListener secara langsung ...

PostgreSQL | 4 Reserved Word Yang Useful

PostgreSQL  menyediakan 4 reserved word  yang menurut saya sangat useful (berguna) yakni: CURRENT_DATE , berfungsi untuk menampilkan tanggal hari ini pada server. CURRENT_TIME , berfungsi untuk menampilkan jam saat ini pada server. CURRENT_TIMESTAMP , berfungsi untuk menampilkan tanggal dan jam saat ini pada server. PostgreSQL juga menyediakan fungsi now() yang memiliki fungsi yang sama dengan CURRENT_TIMESTAMP . CURRENT_USER , berfungsi untuk menampilkan user aktif pada PostgreSQL session (user yang melakukan koneksi database). Untuk informasi, keempat reserved word  tersebut juga menjadi standar pada SQL92 dan SQL3 , sehingga database yang mendukung standar tersebut seharusnya juga memiliki implementasinya. Berikut ini adalah contoh penggunaan 4 reserved word  tersebut dalam query: 1. SELECT CURRENT_DATE;     date     ------------  2012-12-12 (1 row) 2. SELECT CURRENT_TIME;        timetz ...

PostgreSQL | Cross Tabulation Dengan Ekspresi Kondisional CASE

Pada posting sebelumnya, saya sudah berbagi tentang cara menggunakan ekspresi kondisional CASE  pada query. Sekarang saya ingin berbagi cara untuk memanfaatkan ekspresi CASE  untuk membentuk cross tabulation query. Apa itu cross tabulation ? Silahkan baca di wikipedia untuk lebih detail. :P Secara sederhana saya mengartikan cross tabulation  adalah menyajikan data dari baris menjadi kolom. Berikut contoh sederhana untuk menggambarkan apa itu cross tabulation . SELECT * FROM siswa ORDER BY siswaid;  siswaid |      nama      | sex ---------+----------------+-----        1 | Eko Suhariyadi | L        2 | Mori Ran       | P        3 | Megumi Noda    | P        4 | Haruka Koga    | P        5 | Hiro Kunimi    | L (5 rows) Dari data tersebut akan kita sajikan informasi seperti berikut in...

PostgreSQL | Ekspresi Kondisional CASE Pada Query

Salah satu fitur yang saya sukai dari PostgreSQL adalah dapat digunakannya ekspresi kondisional pada query. PostgreSQL menyediakan ekpresi CASE yang memiliki fungsi yang sama dengan statemen IF/ELSE pada bahasa pemrograman. Berikut adalah bentuk dari ekspresi CASE pada PostgreSQL CASE WHEN condition THEN result      [WHEN ...]      [ELSE result] END Untuk melihat bagaimana cara menggunakan ekspresi CASE, saya memiliki sebuah tabel number dengan sebuah kolom nomor yang memuat data bertipe integer. SELECT nomor FROM number ORDER BY nomor;  nomor -------      1      3     32     37     38     97 (6 rows) Sekarang mari kita gunakan ekspresi CASE untuk menentukan apakah nomor tersebut merupakan bilangan ganjil atau genap. SELECT nomor, (CASE WHEN nomor % 2 = 0 THEN 'Bilangan Genap' ELSE 'Bilangan Ganjil' END) AS status FROM number ORDER BY nomor; dan hasilnya adalah se...