You wanna be really great? Then have the courage to fail big and stick around. Make them wonder why you’re still smiling.
Struggling to Get Out of A Three-week Overdue
Last week I took three days off to attend my graduation ceremony. It turns out that the project I’m currently assigned to isn’t making any milestones during that time. When I came back, everybody seemed so stressed out. We were already almost three weeks overdue and the pressure was eating everybody’s nerves.
This brings out a question: Where have we taken the wrong turn?
Possibility #1:
We did not take into account the absence of our System Analyst during the first two weeks of the design phase due to an illness. From the staff’s perspective, the staff was forced to continue development with very limited manpower. With only three team members at the time (one Project Manager, one System Analyst, and one Programmer), the aftermath was quite horrible. The one-and-only Programmer was given the responsibility of taking over system analysis, while he still had to do the prototyping.
Possibility #2:
The programmers assigned to this deadline-infested project is not suitable. My senior had joined not sooner than a month before me, and I was a complete noob about Java itself. Even now we are still struggling to comprehend the framework as we work, and many of the mistakes we made are actually simple and silly ones. Our performance is still way below standard, and we have a long way to go before we can work effectively using the new framework.
Possibility #3:
This project uses a new framework. Although not entirely different than the old one, it still has quite a few major differences. This made the task of building the project a daunting one, as me and my co-workers could not ask any of the staff assigned to other projects about the framework itself. The fact that the framework itself is still quite messy adds up to the already overwhelming deadlines.
Possibility #4:
The entire team is not up to it — we might just not have the correct skills and abilities to do the task at hand. The project itself is considerably smaller and very much simpler than its “sister-project”, but still we were making very little progress.
Either way, the staff is subjected to lots of pressure from the beginning. But, that still does not justify the delays. We will have to find a way to speed up development and immediately submit the beta version for User Acceptance Tests. So, what can we do?
In my opinion, the one thing that must be done immediately is get the client to understand that we are currently in desperate need of more time. A person’s illness is not something we had planned, and it is certainly not in the project budget. Nevertheless, it happened, and something has got to be done about it.
On the other hand, the entire team must be brought up to speed. This is, in my personal opinion, something futile to pursue. We are noobs, and, hard as we try, we will not be up to speed within the allotted time. A more reasonable move would be to rewrite the entire framework from scratch, defining code standards and conventions along the way. This is necessary so that in the future any one of us can look into a piece of source code and precisely tell what it does. Using a framework was meant to reduce work, not add to it.
Another personal complain from me would be about the current style of programming. We use Java, and thus we use an entirely object-oriented framework. Everything is an object. But, in my opinion, the way the existing source code looks, we are doing everything so sloppy that it looks procedural. We need to take time and rewrite most of the application logic, break down large tasks into smaller methods wrapped inside a tidy class, and make the source code easier to read. Methods should be made as independent as possible. This way, we can probably use most of our source code for future projects with minimum modification.
Well, that’s enough chatter from me. I’m just a noob anyway. This is — let me emphasize this — just an opinion from an inexperienced programmer. Any constructive criticism is welcome, as well as new ideas.
First Week
My first week was all messy. Here we go…
Day 1
I was 10 minutes late. I didn’t write my time on my attendance sheet. My first assignment was learning about JAVA and every other little things that my team uses for their project. I was assigned to a rather large project. Assignees included one Systems Analyst and two Programmers (me included). The other two analysts and about 3 or 4 programmers were assigned to a larger project. Day one was all about learning: the procedures, the flow, the standards.
Day 2
Being 5 to 10 minutes is already common. No harm done. I spent the first half of the day trying this and that, mostly digging in on the interface’s coding. The second half was a disaster. My PC broke down and restarted four times in a row. I confiscated my friend’s MacBook and found immediately that it was not prepped for development. So much for a second day at work…
Day 3
By the third day, things were getting on track again. I learned a whole lot of new stuff. The framework, the systems, the IDE. But progress was sluggish. I didn’t know where to find what, and I kept bugging my fellow programmer. I could tell that he was really frustrated by his deadline, and the fact that he’s a single fighter in the project held me back when I wanted to ask him for help.
Day 4
Thursday was a relatively slow day. I learned the code piece-by-piece and soon figured out that the framework itself is still so messy. I still had a hard time finding what I needed, and googling was my best escape. This was the day that I did my first commit to the server. Nothing big really, just a few minor interface fixes, a new controller and listener, and some other stuff not worth mentioning.
Day 5
As the interface came together, I totally shifted my attention to the logic. I struggled to find pieces of code that were responsible for fetching data, processing, and then displaying them. I found out that just to add a single query to the framework, I needed to edit at least 4 to 5 class files. But I forced myself to get used to it. I’m gonna be here for a long time…
Day 6
The mood was changing as I approached a long weekend with new hopes. But I was still overwhelmed with the wealth of things that I needed to understand before I start making real progress. My boss already stuffed a deadline on me, and I had to finish my screen by next Tuesday. I guess he expected me to work at home, but I’m not going to. Home is for fun, not work. I’ll just see what happens next…
Dive into Java!
Yesterday was a rare moment for me and my friends at campus, as so many of us from out of town came home to one of our friend’s wedding. Everybody was asking about where I’m going and what I’m going to do, and each time I answered they would tell me how lucky I am.
One of my best friends told me once that choosing a career path is one of the three biggest decisions that a person has to make (FYI, the other two are choosing your faith and choosing your spouse). I decided to apply for this job because I wasn’t aiming to be rich. I aimed to stay close to my hometown and my family. Not because then I could beg and whine every time I got into something I can’t handle, but because the fact that my entire extended family is already some place else is bugging me.
Well then, this job is a perfect one for me (for now, I haven’t really done it yet). It’s close to home (about 50 minutes away by train), it’s something I like to do (I’m an ISTJ — check my personality profile — and ISTJs are supposed to be programmers), and it pays good money (I’m sorry, but I’m not disclosing my first pay). Furthermore, I have 4 friends that are already there, and they will surely be a great help to me — not professionally, but as campus friends when we’re having lunch together or hanging around after hours.
Tomorrow (yes, tomorrow!) I will officially be a Java programmer. This is something I have never done before. I know Javascript, but not Java itself. I know Macromedia Dreamweaver for editing all sorts of web-related source codes, but I haven’t had time to explore Java IDE itself: NetBeans. However, I have every confidence in myself that I will be able to learn.
Well, my vacation ends today, and tomorrow I’m off to a whole new adventure! Yippie kai ye!
Kernel Upgrade (again?)
Baru saja upgrade ke 2.6.24-18, sudah mau upgrade lagi. Macam mana ini? Harus install restricted drivers lagi? Aaaaa…
root@kertiyasa:~# apt-get dist-upgrade Reading package lists... Done Building dependency tree Reading state information... Done Calculating upgrade... Done The following NEW packages will be installed: linux-headers-2.6.24-19 linux-headers-2.6.24-19-generic linux-image-2.6.24-19-generic linux-restricted-modules-2.6.24-19-generic linux-ubuntu-modules-2.6.24-19-generic The following packages will be upgraded: guidance-backends linux-generic linux-headers-generic linux-image-generic linux-restricted-modules-generic 5 upgraded, 5 newly installed, 0 to remove and 0 not upgraded. Need to get 50.6MB of archives. After this operation, 195MB of additional disk space will be used. Do you want to continue [Y/n]?
Going Ubuntu
Setelah mengalami trauma yang cukup menganggu, akhirnya aku memberanikan diri install ulang Ubuntu Gutsy Gibbon, dan kali ini langsung di-upgrade jadi Hardy Heron. Hasilnya? Ciamik euy! Memang rasanya beda banget dibandingin pake Windows, apalagi buat aku yang *control-freak* dan *settings-junkie*, sering kali aku jadi *cupu* kalo mau ganti-ganti setting ini itu, tapi overall T.O.P. dah!
Sekedar info tambahan, hardware-ku Acer Aspire 4310. WiFi bawaan Atheros 5007EG, yang driver bawaannya dari Acer sendiri sering nggak cocok…
Langkah-langkah installnya (spesifik untuk keperluanku) seperti berikut ini. Catatan: semua perintah di console berasumsi bahwa sebelumnya sudah melakukan sudo su –.
- Untuk memastikan bisa upgrade dan install ini itu dengan lancar, pastikan ada koneksi internet yang bisa diakses via LAN. Caraku: “merampas” laptop temen untuk dijadikan gateway sementara.
- Install Ubuntu Gutsy Gibbon (7.10) dari Live CD. Sebenernya bisa langsung pake Ubuntu Hardy Heron (8.04), tapi karena kesalahan teknis pada DVD-Writer di laptop, aku pake CD yang sudah ada: Gutsy Gibbon.
- Supaya proses instalasi bisa lebih lancar, install dulu driver-driver untuk konektivitas WiFi:
Untuk WiFi adapter bawaan Acer (Atheros 5007EG):
– apt-get install build-essential
– Download madwifi-ng-r2756+ar5007.tar.gz dari madwifi.org
– Extract dan masuk ke direktori hasil extract dengan console
– make
– make install
– modprobe ath_pci
Untuk WiFi adapter tambahan (buat akses internet nebeng tower tetangga, SMCWUSB-G):
– Download ndiswrapper terbaru dari http://sourceforge.net/projects/ndiswrapper
– Extract dan masuk ke direktori hasil extract dengan console
– make distclean
– make
– make install
– Cari driver SMC Wireles USB Adapter SMCWUSB-G yang versi Windows
– Cari dan copy SMCWGUXP.sys dan SMCWGU.inf dari paket driver tadi ke suatu tempat buat installnya (misal home directory)
– ndiswrapper -i [full-path]/filename.inf
– ndiswrapper -l –> memastikan driver terinstall dengan benar
– Sambungkan adapternya
– lsusb –> perhatikan bahwa USB device sudah ada dalam daftar (jika perlu catat ID-nya, misalnya 058f:9254)
– depmod -a
– modprobe ndiswrapper
– tail /var/log/messages –> cek apakah ada error message, jika tidak ada maka instalasi beres
– Klik di icon Wireless Network Configuration di panel kanan atas. Cari device yang baru saja diinstall tadi. Jika belum ada, tunggu beberapa saat dan cek lagi. Jika perlu, cek dengan iwconfig di console, harusnya device itu sudah ada di daftar. - Update via APT. Sebelum melakukan update, ganti dulu repo Gutsy dengan repo Hardy. Caraku, gedit /etc/apt/sources.list lalu tambahkan repo di akhir file sebagai berikut:
## REPOSITORY UTAMA deb http://kambing.ui.edu/ubuntu hardy main restricted universe multiverse deb-src http://kambing.ui.edu/ubuntu hardy main restricted universe multiverse ## INI UNTUK MAJOR BUG FIX UPDATES deb http://kambing.ui.edu/ubuntu hardy-updates main restricted universe multiverse deb-src http://kambing.ui.edu/ubuntu hardy-updates main restricted universe multiverse ## INI UNTUK UBUNTU SECURITY UPDATES deb http://kambing.ui.edu/ubuntu hardy-security main restricted universe multiverse deb-src http://kambing.ui.edu/ubuntu hardy-security main restricted universe multiverse ## proposed deb http://kambing.ui.edu/ubuntu hardy-proposed main restricted universe multiverse deb-src http://kambing.ui.edu/ubuntu hardy-proposed main restricted universe multiverse ## backports #deb http://kambing.ui.edu/ubuntu hardy-backports main restricted universe multiverse #deb-src http://kambing.ui.edu/ubuntu hardy-backports main restricted universe multiverse deb http://archive.ubuntu.com/ubuntu/ hardy multiverse restricted universe main
Setelah itu, apt-get dist-upgrade dan kalo apt tanya-tanya macem-macem diiyakan saja. Tahap ini agak lama karena butuh download macem-macem dari repo, totalnya bisa hampir 1GB (bahkan bisa lebih! *sweat*) untuk upgrade dari Gutsy ke Hardy. Makanya lebih enak kalo dari awal pake Live CD yang Hardy.
- Pastikan driver VGA sudah terinstal dengan benar. Tahap ini perlu untuk memastikan alat-alat cuci mata yang akan diinstall untuk desktop nanti bisa optimal. Caraku: apt-get install libgl1-mesa-dev libgl1-mesa-glx libgl1-mesa-dri. Tambahan info, hasil lspci | grep VGA –> 00:02.0 VGA compatible controller: Intel Corporation Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller (rev 03).
- Setelah itu, aku pilih install alat-alat cuci mata dulu. Dalam hal ini CompizFusion. Caraku: apt-get install compizconfig-settings-manager. Setelah itu, bisa setting macem-macem efek di desktop dengan masuk ke menu System -> Preferences -> Advanced Desktop Effects Settings. Karena suka pake dock seperti di MacOS, aku sekalian install Avant Window Manager dengan apt-get install avant-window-manager. Selain itu, aku juga install macem-macem GDM Theme dan GTK Metacity Theme dari www.gnome-look.net.
- Untuk hiburan audio visual, perlu install macem-macem codec yang diperlukan. Cara simpel: coba buka mp3 dan/atau film-film dalam format apapun. Jika player-nya protes minta download codec, turuti saja. Cara lain buat yang *lebih* peduli codec apa saja yang diinstall:
– System -> Administration -> Synaptics Package Manager
– Search Gstreamer plugins, install apa yang dianggap perlu
Media player yang aku pake adalah VLC untuk video dan Amarok untuk audio. - Aplikasi-aplikasi tambahan yang aku gunakan sementara ini:
– Thunderbird, buat kirim-kirim email yang bukan spam
– Pidgin, gantinya YM di Ubuntu
– Deluge BitTorrent Client, buat download barang-barang nggak jelas (biasanya barang-barang *haram*)
– Nero Linux, karena Brasero *katanya* menyebalkan kalo dipake burn DVD
– WINE, buat instal aplikasi Windows yang aneh-aneh
– Crossover, buat instal Microsoft Office 2003 (OO.org boleh juga, tapi aku masih lebih nyaman pake MSO) dan Dreamweaver MX
– Anjuta, IDE buat bikin-bikin program. Syntax highlighting, indentation guide, dan code folding-nya sangat membantu.
Sip dah! Semua sudah terinstall dan enak digunakan, tapi buat aku ini masih kurang lengkap. Karena ini laptop mau dipake untuk mengerjakan (baca: menyelesaikan) skripsi, maka perlu ada tambahan-tambahan berikut:
- Install Linux-Apache-PHP-MySQL (LAMP) dengan tambahan modul PECL-HTTP:
– apt-get install ssh mysql-server-5.0 apache2 php5 libapache2-mod-php5
– /etc/init.d/apache2 restart
– apt-get install phpmyadmin
– apt-get install php5-dev php-pear libcurl4-gnutls-dev pecl_http
– pecl install pecl_http
– gedit /etc/php5/apache2/php.ini –> tambahkan extension=http.so pada akhir file
– /etc/init.d/apache2 restart - Untuk lebih memudahkan editing, aku memindah web root folder dari /var/www ke home folderku. Caranya:
– cd /etc/apache2/sites-available/
– cp default [your_user_name]
– gedit joliet –> edit setting webmaster email address dan root folder sesuai keinginan
– a2ensite [your_user_name]
– /etc/init.d/apache2 restart - Install SBCL dan tetek bengek lainnya: apt-get install sbcl cl-sql cl-sql-mysql cl-who cl-hunchentoot.
Oke dah, semua sudah siap digunakan. Sekarang, waktunya mengerjakan skripsi *hiks*…
Behind These Hazel Eyes
Here I am, once again
I’m torn into pieces
Can’t deny it, can’t pretend
Just thought you were the one
Broken up deep inside
But you won’t get to see the tears I cry
Behind these hazel eyes
Behind These Hazel Eyes – Kelly Clarkson
SweetTitles
Malam ini bosan ngurusi kode PHP yang kalau dituruti nggak akan pernah ada sempurnanya. Selalu ada ruang untuk menyempurnakan. Iseng-iseng aku mengunjungi website milik kang Oggix, si juragan hosting dan domain. Setelah liat-liat sini dan situ, ternyata sekarang idWebHost punya blog. Wah, apa pula ini? Langsung meluncur ke TKP…
Setelah baca-baca ini dan itu, tidak sengaja aku menemukan ada tooltip yang asik tampilannya, pakai efek fade-in pula. Penasaran, aku Ctrl+U di Firefox, liat sana-sini mencari jejak javascript yang bertanggung jawab untuk efek itu. Setelah ketemu sumbernya, buka, dan ketahuanlah bahwa si empunya script adalah seorang Dustin Diaz, pegawai Google yang memang berkutat di bagian user interface.
Meluncur ke TKP!
Setelah sampai di sana, baca-baca blognya, ternyata nama scriptnya SweetTitle, dan sudah mengalami banyak perubahan. Meskipun sudah cukup “berumur” (debutnya tahun 2005), tapi masih cukup menarik. Tanpa pikir panjang, donwload dan baca-baca dokumentasi. Hmmm… sepertinya cukup mudah diimplementasikan. Memang akan perlu mengubah beberapa (puluh, atau malah ratus) baris kode di phpFormGenerator, tapi nggak ada salahnya to… Dengan catatan: kalau ada waktu lebih aja…
Kalau nggak salah tadi aku berniat mundur selangkah dari usaha penyempurnaan tiada henti, lha kok malah mau menyempurnakan lagi… Piye to iki??
Hunchentoot: standalone vs. mod_lisp
Tulisan ini meralat tulisanku di sini tentang mengapa tidak menggunakan mod_lisp untuk menghubungkan Hunchentoot dengan Apache. Setelah membaca-baca lagi spesifikasi dan cara penggunaan Hunchentoot, sekaligus baca-baca mailing list tbnl-devel, aku meralat alasanku dan menemukan alasan-alasan yang lebih kuat dan logis:
- Menggunakan mod_lisp tidak membuat Hunchentoot dan Apache harus dipasang pada mesin yang sama. Dengan memberikan setting yang tepat pada konfigurasi Apache (httpd.conf), kita bisa menggunakan mod_lisp untuk membuat Apache bekerja bersama dengan Hunchentoot yang dipasang pada mesin yang berbeda. Dengan demikian alasan tidak menggunakan mod_lisp untuk mengantisipasi Hunchentoot yang akan dipasang pada mesin yang berbeda dengan Apache tidak lagi relevan.
- Kemampuan Hunchentoot menggunakan mod_lisp sebagai perantara untuk bekerja bersama dengan Apache kemungkinan besar akan dihilangkan. Ini dilakukan untuk menyederhanakan code base Hunchentoot dan dengan demikian mempermudah proses debugging. Selain itu, Hunchentoot akan dikembangkan menjadi full-fledged, full-featured, standalone web server. Dengan demikian penggunaan mod_lisp menjadi tidak strategis.
The Security Hole Solution
Masalah:
Ketika user berada di tempat yang seharusnya tidak bisa diakses olehnya, aplikasi akan tetap tereksekusi.
Solusi:
Menggunakan konstruksi <if></if> di Fusebox XML. Jika sistem menunjukkan bahwa user berada di tempat yang seharusnya tidak boleh diakses olehnya, dapat dilakukan beberapa alternatif langkah, yaitu redireksi ke suatu fuseaction yang akan menghentikan eksekusi. Ketika fuseaction tersebut mendeteksi bahwa eksekusi aplikasi harus dihentikan, ia harus bisa menyimpan semua variabel vital yang ada (system, config, server, get, post, dan lain-lain), lalu menghentikan eksekusi dengan perintah die(). Untuk sementara ini user experience akan sangat terganggu.