Sejak tahun 2008, saya tidak lagi punya kewajiban untuk datang ke kantor setiap hari. Artinya, saya boleh bekerja (atau tidur-tiduran) di rumah setiap hari.

Wah enak sekali?

Demikian komentar dari semua orang yang ngobrol dengan saya mengenai masalah ini. Hmm, seperti segala sesuatu hal di dunia ini, semua ada plus dan minusnya. Tidak berarti semuanya menyenangkan.

Berikut beberapa poin yang saya dapatkan dari 6 tahun kerja di rumah:

Faktor Positifnya

  • Jatah waktu untuk kerja lebih maksimal. Dengan asumsi jam kerja sama-sama 9-5, gak ada waktu transport dan macet. Waktu tempuh dari kasur ke meja kerja cuma 1 menit :D
  • Mood juga relatif lebih baik karena gak perlu pepet-pepetan sama ojek/angkot di jalan.
  • More quality time bersama keluarga. Makan siang bisa bersama anak/istri.

Tantangannya

  • Harus bisa self-motivating. Gak ada yang menghalangi kita dari bantal dan kasur. Jadi begitu sudah punya to do list untuk hari ini, ya harus memacu diri sendiri untuk segera bekerja.
  • Selain diri sendiri, juga harus bisa mengkondisikan anggota keluarga. Istri/anak harus bisa menghayati bahwa kerja di rumah artinya kerja. Tidak berarti karena ada di rumah bisa diajak main atau disuruh anter ke minimarket. Butuh waktu berbulan-bulan untuk mengkondisikan hal ini.
  • Kadangkala tetap harus berangkat dari rumah kalau benar-benar butuh zero interruption. Saya biasanya ke perpustakaan pemda dekat rumah. Teman saya yang sesama pekerja rumahan lebih suka kerja di kafe. Saya pernah baca di internet ada orang yang suka kerja di taman.
  • Susah untuk berhenti kerja. Programmer kalau sudah ketemu error biasanya penasaran. Tinggal satu bug lagi bisa makan waktu berjam-jam. Kalau di gedung perkantoran, jam 18 biasanya AC dan lampu dimatikan, sehingga mau gak mau ya harus pulang. Nah kalo di rumah, on terus. Tanpa sadar, tiba-tiba sudah jam 3 malam ;)
  • Hati-hati bahaya gak bisa pulang. Kalau kita kerja di kantor, begitu kita suntuk, kita bisa pulang, menemui suasana berbeda, kemudian istirahat. Nah, kalau kerjanya di meja makan, gimana mau ganti suasana? Akhirnya bisa burn-out.

Nah, mudah-mudahan ini bisa menambah wawasan rekan-rekan yang mempertimbangkan untuk kerja di rumah ataupun project manager yang ingin mengijinkan programmernya coding di rumah.

Baca juga beberapa artikel berikut yang membahas masalah ini

Dalam membuat aplikasi, biasanya ada nilai variabel yang ingin kita simpan di file konfigurasi, supaya pada saat isinya berubah tidak perlu melakukan kompilasi ulang. Misalnya konfigurasi koneksi database. Alamat database server, username, dan password biasanya sering berubah, tergantung tempat di mana aplikasi dideploy.

Ada beberapa hal yang biasanya menjadi pertanyaan, yaitu:

  1. Di mana sebaiknya kita menyimpan file tersebut?
  2. Bagaimana caranya supaya aplikasi kita portable? Portable artinya bisa dicopy paste ke berbagai komputer dengan lokasi folder berbeda-beda.
  3. Bagaimana cara membaca file konfigurasi tersebut?

Pertanyaan ini diajukan salah satu member di grup Netbeans Indonesia

Berikut screenshot kode program yang sudah dia buat

Hampir seluruh aktivitas yang saya lakukan dengan komputer (smartphone juga termasuk komputer) menggunakan aplikasi open source. Jaman sekarang, aplikasi open source sudah jauh mengungguli aplikasi closed source baik dalam hal fitur, user-friendliness, reliability, dan kecepatan development (bug fix, fitur baru, enhancement, dan sebagainya).

Selama ini kita hanya tahu pakai saja. Download, instal, pakai, happy. Kita juga hanya tahu bahwa open source = kode programnya bisa dilihat, dimodifikasi, dan dibagikan ke siapa saja. Sebenarnya ada aspek lain dari open source yang juga menarik, penting, dan banyak sekali manfaatnya buat para pembaca blog saya yang utamanya adalah programmer, software project manager, dan juga pengusaha di sektor IT. Aspek tersebut adalah software development process yang terjadi sehingga semua produk canggih ini bisa berada di tangan kita saat ini.

Kehandalan manajemen proyek open source bisa kita lihat bukti nyatanya di distro linux Ubuntu. Coba lihat beberapa fakta berikut:

  • Ubuntu rilis setiap enam bulan sekali, yaitu tiap bulan April dan Oktober.
  • Sejak rilis pertama, belum pernah terjadi keterlambatan rilis.
  • Kontributor Ubuntu (programmer, pembuat dokumentasi, desain tampilan, tukang burn CD, tukang update website, tukang upload iso, admin server, dsb) datang dari seluruh dunia. Bekerja 24 jam sehari 7 hari seminggu dengan timezone yang berbeda-beda. Jadi kalau kita masih kerja di ruangan yang sama, hanya dipisahkan cubicle saja, datang bareng, makan siang bareng, pulang bareng, sebaiknya jangan terlalu sering mengeluh di socmed ;p
  • Jumlah kontributornya ribuan orang. Bahasanya berbeda-beda. Lokasinya juga berbeda-beda.
  • Tulang punggung Ubuntu adalah kernel Linux dan desktop manager Gnome. Harus menunggu Gnome rilis dulu, baru Ubuntu bisa dikerjakan. Jangan sampai di tengah-tengah development Ubuntu, ada perubahan signifikan yang terjadi di Gnome sehingga Ubuntu harus rombak total.
  • Ubuntu basisnya adalah distro Debian varian unstable. Proses development harus memperhatikan agar jangan sampai menyimpang terlalu jauh dari Debian supaya tetap bisa sinkronisasi pada saat Debian naik versi.
  • Ubuntu digunakan orang dari seluruh dunia, sehingga harus bisa mendukung berbagai bahasa, format angka, format tanggal, dan berbagai variasi lainnya.
  • Kompatibilitas antar rilis harus terjaga, supaya orang bisa upgrade dengan mudah.

Nah, apa rahasianya supaya bisa seperti itu?

Ada pertanyaan bagus di milis IT Project Management, sebagai berikut

Mohon di-share caranya menentukan spesifikasi minimal hardware yang dibutuhkan sebuah sistem. contoh http://en.wikipedia.org/wiki/System_requirements Kriteria apa saja yang digunakan dalam memilih hardware? Terutama menentukan jumlah RAM dan Speed Processor nya. Apakah cukup dari jumlah concurrent user? Atau menggunakan metode trial-and-error. Kalaupun trial-and-error, tentunya ada standar yang digunakan sebagai benchmark awal ya kan? Bagaimana standar awal tersebut?

Mari kita bahas

Menjelang penghujung bulan Ramadhan, ada yang bertanya di milis JUG. Alhamdulillah, ada kesempatan bersedekah di detik-detik terakhir bulan puasa ;) Karena pertanyaannya membutuhkan jawaban yang cukup panjang, baiklah kita jawab di blog saja.

Berikut pertanyaannya.

Saya pernah menggunakan Spring Security Framework. Tapi kalau cuma pakai, tanpa ngerti konsep dasar dan cara kerjanya dasarnya sakit kepala juga akhirnya kalau semua terjadi secara automagically.

Jadi kalau murni tanpa menggunakan Framework apapun :

  • Bagaimana membuat proses loginnya? dari beberapa artikel yang saya baca (saya baru tahu) katanya login username dan passwordnya dimasukan kedalam HTTP Header.

Contohnya :

Authorization:Basic c2VzdWF0dUB5YWhvby5jb206YmlzbWlsbGFo

dimana c2VzdWF0dUB5YWhvby5jb206YmlzbWlsbGFo adalah Base64 encoding dari sesuatu@yahoo.com:bismillah (username:password)

benarkah begitu?

  • Bagaimana server mengenali client jika kita menggunakan method GET? (ini pertanyaan konsep sangat mendasar sekali). Mungkin jawabannya ya dengan token.

  • Tapi ditaruh dimana? apakah dengan saya tempelkan saja di URL? misal

GET /thewebapp/category/324?token=abcde1234

atau saya masukkan dalam HTTP header? tapi dengan header apa?

Dan berikut jawaban saya

Pada artikel sebelumnya, kita telah belajar bagaimana memulai membuat aplikasi, yaitu dengan cara:

  • membuat daftar fitur
  • membuat UI Mockup

Kedua langkah di atas membantu kita untuk memvisualisasikan apa yang ada di imajinasi kita menjadi bentuk yang bisa dilihat oleh banyak orang. Ada beberapa keuntungan dari proses visualisasi ini, yaitu:

  • mengurangi kepusingan, karena apa yang sebelumnya cuma dibayangkan, sekarang terlihat bentuknya
  • menunjukkan kekurangan dalam imajinasi kita. Seringkali saya mendapati ada informasi yang kurang sehingga harus ditanyakan lagi ke user. Kali lain, saya mendapati ternyata perpindahan antar screen tidak sistematis sehingga membingungkan user. Atau saya terlalu kompleks mendesain tampilan yang seharusnya bisa lebih sederhana.
  • menjadi bahan diskusi dengan user, menghindarkan kita dari membuat sesuatu yang tidak dibutuhkan user.
  • sebagai pedoman kita untuk merancang skema database

Poin terakhir tersebut akan menjadi bahasan kita pada artikel kali ini.

Saya tidak akan membahas tentang teori normal form. Seharusnya para mahasiswa informatika sudah mempelajarinya di mata kuliah Basis Data yang biasanya diberikan di semester 3. Silahkan ambil lagi mata kuliah tersebut di tahun/semester depan kalau ternyata Anda ketiduran waktu dosennya menerangkan. Sedangkan pembaca yang tidak kuliah di informatika (seperti saya), bisa baca-baca referensi dari Wikipedia atau tutorial di sini.

Artikel ini ditulis dengan asumsi pembaca sudah paham apa itu normal form. Silahkan belajar dulu kalau belum paham, baru kembali lagi ke sini.

Seperti sudah dijelaskan pada artikel sebelumnya, anjuran saya buat mereka yang ingin mahir pemrograman adalah

Buatlah aplikasi production barang 5-10 buah. Insya Allah setelah itu Anda akan mahir.

Setelah kita menguasai dasar-dasar pemrograman seperti:

  • konsep variabel dan tipe data
  • control flow (looping, branching, jumps)
  • pengelompokan (function, class, package)

tidak serta merta kita bisa langsung membuat aplikasi. Analoginya, walaupun kita mahir menggunakan pengolah dokumen seperti MS Word atau Open Office, tidak berarti kita bisa menulis seri lanjutan dari Harry Potter and the Deathly Hallows.

Inilah sebabnya banyak pemegang sertifikasi pemrograman seperti Oracle Certified Java Programmer yang tidak bisa membuat aplikasi, walaupun mendapatkan nilai yang tinggi.

Ada berbagai macam aplikasi, diantaranya:

  • aplikasi bisnis, yaitu aplikasi yang membantu pencatatan kegiatan bisnis. Contohnya aplikasi akunting, purchasing, perpustakaan, mini-market, bank, payment gateway, dan sebagainya
  • aplikasi sistem, yaitu aplikasi yang memungkinkan berbagai perangkat bekerja sama. Contohnya sistem operasi, device driver, embedded system, dan lainnya
  • dan berbagai kategori aplikasi lainnya.

Artikel kali ini akan kita batasi hanya untuk membahas aplikasi bisnis. Mengapa demikian? Karena aplikasi bisnis adalah genre aplikasi yang paling banyak dibuat orang. Sebagai ilustrasi, kita hanya mengenal beberapa sistem operasi populer, yaitu Microsoft Windows, Linux, MacOS. Bandingkan dengan aplikasi bisnis, untuk proses akuntansi saja berapa ribu aplikasi yang tersedia. Bahkan walaupun sudah ada yang gratis dan lengkap, tetap saja banyak perusahaan yang minta dibuatkan aplikasi sejenis. Jadi dari sisi komersial dan ketersediaan lapangan kerja, pembuatan aplikasi bisnis tetaplah pangsa pasar terbesar.

Pada artikel ini, kita akan membahas proses berpikir dan tahapan mulai dari penjabaran aplikasi yang akan dibuat, sampai menjadi skema database dan desain aplikasi berorientasi objek (object-oriented).

Salah satu pertanyaan yang sering ditanyakan di forum programmer adalah

Saya ingin belajar bahasa pemrograman [isi bahasa yang Anda sukai di sini], bagaimana ya caranya supaya bisa mahir?

Dan jawaban saya selalu sama

Coba buatlah aplikasi berkualitas production barang 5 - 10 kali, setelah itu insya Allah akan mahir.

Jawaban di atas memang singkat, tapi jalan untuk menuju kesana sungguh tidak mudah dan tidak singkat. Apalagi untuk pemula, setidaknya ada dua pertanyaan besar:

  1. Apa sih aplikasi production itu?
  2. Bagaimana cara membuat aplikasi?

Pertanyaan pertama akan kita jawab pada artikel ini. Sedangkan pertanyaan kedua akan kita jawab pada artikel selanjutnya.

Pada artikel ini, kita akan membuat implementasi download file PDF/XLS dari aplikasi web. Fitur ini akan kita implementasi menggunakan library Jasper Report dan framework Spring MVC.

Projectnya akan kita buat menggunakan Maven, supaya bisa dibuka dengan baik (portable) di berbagai IDE. Untuk bisa memahami artikel ini dengan baik, pembaca harus sudah paham tentang Spring Framework dan Spring MVC. Yang belum paham Spring Framework bisa membaca artikel terdahulu tentang Dependency Injection. Sedangkan pembahasan tentang Spring MVC bisa dibaca di rangkaian artikel berseri tentang membuat aplikasi web dengan Spring MVC.

Source code lengkap dapat diakses di repository Github. Bagi yang ingin tahu urutan langkah-langkah implementasinya, bisa lihat commit history.