Detecting Mobile User-Agent For OperaMini Client
Mobile phone that use OperaMinisometimes don't sent user agent header to the server. Instead, they send:
Opera/9.60 (J2ME/MIDP; Opera Mini/4.1.13068/488; U; en) Presto/2.2.0
This can cause a problem for web application that rely on user-agent detection, such as application that use WURFL So, after about an hour or two trying to debug the problem, I found some way to retrieve the original user-agent (device user-agent) instead of operamini user-agent.
Wordpress to Plurk Plugin
Why not extends your blog reader by sharing your post permalink to Plurk or alert your Plurk friends about your post. Yes, you could do it with posting to plurk manually. But how about do it automatically each time you publish a blog post, wordpress will do the post for you. How? Simple, just install the wp-plurk plugins.
Have fun ;)
Simple Routing Library
Once I've wrote a simple routing library. You know, the one that you can use to make pretty urls such as: http://ferdianto.com/2009/05/21/this-is-a-post. Actually, framework like CodeIgniter has internal support for friendly URLs. But, what if you already have an up-and-running application and decide to make pretty urls. This library is intentionally made simple so that it can be included in any framework or application you have.
Using Apache And mod_rewrite to Redirect your Mobile User
While I'm browsing using my K800i, very often that I've accidentally visit a non-mobile site with huge flash or huge content. That sucks, that costs, since mobile internet is rather expensive in my location. So after searching and testing, I've shared a simple hacks for your existing blog or web application to redirect mobile user that visiting your website to mobile-specific pages.
Blog Updates - Mobile Version and English
After reading this article, I've put some minor modification onto this blog so that mobile user can view this blog also. The design still simple, at least I can view it correctly in my k800i. You can try it also, just browse ferdianto.com on your mobile phone.
The second change is: I decided to write my blog in english — again. The only reason that most of the traffic that come to this blog was not from Indonesia, so.. I'll try to make this blog more accessible from the International viewer ;) And what about the local viewer? Here's a tip: "learn english"
Ok, have fun ;)
HTTP Server Instant menggunakan Jetty
Salah satu keunggulan Java yang susah mencari bandingannya adalah melimpahnya library opensource. Library mulai dari yang sederhana semacam membaca konfigurasi, penanganan file upload atau yang lain. Library-library tersebut bisa dilihat di Java Source, sudah terkategorisasi secara rapi. Tinggal browse dan temukan library yang anda butuhkan. Tetapi saat ini yang ingin saya share adalah menambahkan kemampuan webserver di aplikasi java anda. Ya, anda ngga perlu coding sendiri hanya untuk membuat webserver. Ada 1 library yang hebat yang bernama Jetty. Sebenarnya banyak web server yang bisa ditambahkan atau di embed di aplikasi anda dengan mudah, tetapi pilihan saya jatuh kepada Jetty. Mengapa?
Setup Modem PCI Serial di Linux
Mencoba untuk mendokumentasikan dan berbagi pengalaman saat ngeset modem serial di Linux. Sebenarnya ngga susah sih, banyak resourcenya, cuman karena emang dilakukan secara manual pake konsol dan ssh, jadi terlihat sangat rumit, tetapi sebenarnya ngga susah kok. Begini critanya:
April Mop 2009
Happy April Mop!
BYOB - Bring Your Own Bags
Tadi sore, sekitar pukul 20, pas ngeliat NGC, ada iklan layanan yg judulnya B.Y.O.B, yg nyantol pertama adalah lagunya System of a Down, ternyata singkatan dari "Bring Your Own Bags".
Iklan ini menyarankan kalau pas pergi ke supermarket, minimarket, micromarket dan market-market yang lain, disarankan untuk bawa tas sendiri. Jangan meminta tas kresek atau tas kertas yang biasa kita dapat kalau kita membeli ke toko. Alasannya sederhana. Tas kresek terbuat dari plastik. Plastik itu bahan yang tidak bisa di daur oleh tanah. Otomatis nantinya akan jadi sampah yang ga bakalan hancur-hancur. Nah, jika semua orang di dunia setiap membeli sesuatu selalu dapat 1 tas kresek, bayangin aja, berapa banyak tas kresek yang harus dibuang tiap hari.
OK, ga pake kresek, pakai yang karton, yang bisa di daur ulang. Eh, itu karton dari kertas. Nah kertas itu bikinnya dari kayu. Ga tambah bagus, tambah parah. Jadi, iklan ini make sense banget. Daripada kita hidup dikelilingi sampah, biasakan untuk bawa tas sendiri dari rumah ketika beli sesuatu.
Saya udah coba hari ini, tadi pagi, pas beli rokok. Gampang sih kalau di toko2 kecil. Susahnya kalau pas beli di mal2 gedhe. Pasti disuruh nitipin, dan pasti dipaksa untuk bawa tas sablonan logo mall yg gedhe itu. Tapi, patut dicoba kok, take care ;)
Zen of Python
Sebenernya sudah lama nemu ini, sejak pertama kali kenalan python, tapi cuman pengen share aja bagi yg belum mengenal python, kalau python punya easter egg yg lucu, namanya Zen Of Python. Mengandung ajaran2 yang sebaiknya dianut oleh programmer python. Begini isinya:
Jika Flash Banner Anda Menutupi Javascript
Problem flash yang selalu berada diatas menu javascript atau tooltip javascript atau div lain, sangat mengesalkan. Menu anda menjadi tertutup flash. Solusi sederhana adalah memberikan parameter wmode = transparent. Jadi flash anda tidak menutupi tag div atau yg lain. Masalah baru timbul, bagaimana jika flash ini dari banner / ads. Kita ngga mungkin modif flash HTML nya kan? Untuk itu saya ada beberapa script sederhana yang menambahkan parameter wmode di flash object.
[thinkagain] Naik motor sambil SMSan
Jika anda berpikir kalau sms-an sambil naik motor/mobil adalah keren, efektif dan hebat, THINK AGAIN
Aman di Internet
Ada plesetan yang mengatakan, WWW bukan singkatan dari World Wide Web, melainkan singkatan dari World Wild Web. Plesetan tersebut sebenarnya sangat mirip dengan kenyataan. Internet adalah dunia liar dimana semua orang bebas mem-posting apa keinginannya, ada beberapa orang yang selalu ingin tahu, menyebarkan virus, menangkap password orang lain dan menggunakan sesuai dengan keinginannya. Saya ada beberapa tips yang cukup manjur dalam membuat ber-internet sedikit lebih aman.
Membuat Programming Lebih Menyenangkan
Saya adalah tipe orang yang sangat cepat bosan. Jadi ada kalanya saya sangat bosan dalam kegiatan yang menafkahi saya, yaitu memprogram. Bosan dengan mengetik source-code, membuat getter/setter, melakukan query SQL, dsb. Mengetik source semacam:
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];
if (empty($username)) {
//
} else if (..) {
//
}
Menjadi sebuah neraka bagi saya, dan menutup IDE adalah salah satu obat. Untungnya, saya menemukan cara untuk membuat kegiatan satu ini menjadi lebih menarik dan menantang. Cara saya adalah mem-variasi model penulisan. Contoh kasus diatas, saya biasanya memodifikasi dengan:
$posts = array( 'username', 'password', 'email', ... );
foreach($posts as $p) $$p = $_POST[$p];
do {
if (!$username) { $error = "Username kosong"; break; }
if (!$password) { $error = "Password kosong"; break; }
//simpan SQL di sini
}
while(0);
Atau daripada menulis:
cookiedata = {
'name': request.COOKIES.get('name'),
'email': request.COOKIES.get('email'),
'url': request.COOKIES.get('url'),
}
#atau
key_name = 'tag:%s' % defaultfilters.slugify(tag.name)
newtag = models.Tag( key_name=key_name, name = tag.name, description = tag.description )
newtag.put()
Saya akan mengubah ke:
cookiedata = dict([(k, request.COOKIES.get(k, '')) for k in ['name', 'email', 'url']]) key_name = 'tag:%s' % defaultfilters.slugify(tag.name) newtag = models.Tag(key_name=key_name, **dict([(prop, getattr(tag, prop)) for prop in models.Tag.properties()])) newtag.save()
Contoh lagi di Java, daripada saya menulis
class ShutdownThread extends Thread {
MyObject obj = null;
public void run() {
obj.closeAllConnections();
}
public void setObj(MyObject obj) {
this.obj = obj.
}
}
public static void main(String[] args) {
MyObject obj = new MyObject();
ShutdownHook hook = new ShutdownHook( obj )
Runtime.getRuntime.addShutdownHook( hook );
}
Saya akan menggunakan metode yg lebih menyenangkan
public static void main(String[] args) {
MyObject obj = new MyObject();
Runtime.getRuntime.addShutdownHook( new Thread() {
MyObject obj;
public Thread set(MyObject obj) { this.obj = obj; return this; }
public void run() { obj.closeAllConnections(); }
}.set(obj) );
}
Karena mengingatkan saya kepada betapa menyenangkannya javascript dan jQuery.
Ya, memang lebih tidak mudah dibaca dan maintenance aplikasi akan sedikit lebih susah, tetapi at-least its fun. Dan sepertinya saya udah bosan ngeblog, jadi sampai di sini. Silahkan ceritakan solusi anda sendiri untuk mengatasi kebosanan anda di kerjaan anda sendiri.
Javascript Siap Pakai
Saya hanya ingin share beberapa fungsi JS yang sering saya pakai. Ya, memang jQuery atau Prototype selalu lebih menggiurkan. Tetapi, kalau hanya untuk toggle (show/hide sebuah div) kemudian anda menggunakan jQuery, bukankah itu adalah sebuah overkill? 50kb overhead (uncompressed) tidaklah murah. Jadi, saya share aja fungsi-fungsi javascript yang sering saya gunakan tanpa harus melangkah ke prototype atau jQuery.
Analytic dan Ajax
Seperti kita tahu, Google Analytics adalah servis lengkap dari google untuk melakukan tracking terhadap user. Sederhananya, analytic adalah statistik situs dengan kemampuan canggih untuk menganalisa perilaku user di situs kita. Permasalahannya, jika situs kita menggunakan konsep ajax atau request dijalankan via XMLHttpRequest, maka analytic tidak berlaku disini. Kita tidak bisa men-track user melalui request ajax, jika instalasi analytic dijalankan secara normal. Normal itu maksudnya, anda langsung kopi-paste kode yang ada di analytic dan memasukkan ke halaman anda.
Cara yang paling umum dilakukan adalah secara manual memasukkan fungsi _trackPageView setelah request ajax anda sukses dijalankan.
Load balance dengan Nginx
Apakah website anda mengalami overload dengan ribuan request per hari? Atau aplikasi web anda super berat sehingga 1 server tidak mampu lagi menangani request yang datang? Mungkin solusi Load Balancing dengan beberapa server bisa meringankan beban load yang tinggi. Permasalahnnya adalah: Bagaimana
Tidur Malam
Hampir semua programmer yg saya kenal, punya hobi tidur pagi. Dan sepertinya tidur pagi ini banyak ruginya daripada untungnya, misalnya telat ngantor gara2 bangun kesiangan atau badan lemes dan kulit pucat karena ga pernah kena sinar matahari. Tetapi untungnya, kebiasaan tidur pagi ini ada untungnya juga. Ada 3 hal yang bisa dikemukakan sebagai pembenaran kegiatan diatas:
-
Hormon stress cortisol paling banyak di produksi sekitar jam 7 pagi. Jadi kalau bangun sekitar jam itu, kemungkinan akan mengalami ketegangan. Coba tambahkan beberapa menit tidur
-
8 jam untuk tidur tidaklah cukup. Sebenarnya, sebelum bola lampu ditemukan, rata2 lama orang tidur adalah 10 jam per hari. Bukan 8 jam.
-
Terakhir, biasanya yg punya hobi tidur malam/pagi adalah mempunyai tingkat kreatifitas tinggi. Ada riset yang berkesimpulan bahwa orang yg hobi melekan cenderung mempunyai skor tinggi di test kreatifitas daripada orang yg "normal"
Programmer dan Typo
Setelah sekitar 3 hari tidak mengakses e-mail kantor — libur natal dan tahun baru, hari ini saya beranikan diri untuk mengakses inbox kantor. Ngga sebanyak saat hari kerja normal. Tetapi yang paling menyebalkan menurut saya adalah typo yang ada di body maupun subject e-mail. Sebenarnya saya ngga akan terlalu mempermasalahkan problem "Salah Ketik" ini jika saja orang yang typo bukan programmer.
Mengapa saya membenci programmer yang suka typo? Karena senjata utama programmer adalah typing. Seorang ngga akan mungkin bisa menjadi programmer yang handal tanpa skill mengetik di keyboard. Well, memang mungkin, tetapi di jaman dulu, saat Punched Card masih berjaya. Kalau sekarang? Baik anda menggunakan IDE hebat semacam Eclipse, Netbeans ataupun Visual Studio, seorang programmer akan selalu terkutuk untuk mengetik.
Jadi, skill mengetik adalah skill dasar, yang menurut saya sangat berpengaruh dalam produktifitas seorang programmer. Mungkin saya akan usulkan untuk mencantumkan skill mengetik di lowongan pekerjaan programmer di kantor saya, agar problem semacam ini ngga akan terjadi di masa depan.
Nopol Mobil Jakarta 3 Huruf
Pas ke jakarta kemaren, saya perhatikan kalau kode karakter nopol mobil di Jakarta menjadi 3 Huruf. Dan ketika saya baca di beberapa blog dan sebuah situs media, SAMSAT Jakarta menyatakan kalau memang kehabisan digit untuk nomer kendaraan. Heran aja, dikasih 4 digit plus 2 kombinasi karakter, tetapi bisa kehabisan. Memang seberapa banyak sih mobil dan motor di Jakarta? Jika saya coba hitung dari digitnya
9999 x 27 x 26 = 7.019.298
7 juta kendaraan. Pantesan aja jakarta macet. Cuman, yang saya permasalahkan adalah solusi untuk menambah jumlah huruf untuk Nopol baru. Ini yang menurut saya kurang cerdas. Secara akan membuat plat nomer yang udah jelek, menjadi lebih panjang dan lebih jelek lagi. Belum lagi akan menyusahkan orang untuk mengingat nomer kendaraan. Dengan menambah 1 digit di belakang
9999 x 27 x 27 x 26 = 189.521.046
189.5 Juta dengan kompleksitas nomer semacam: B 9919 JXR. Panjang banget. Jadi plat metal yang dibuat dari plat drum bekas yang asalnya udah jelek, jadi tambah jelek dan panjang.
Apakah ada solusi lain? Ya, tentunya ada solusi yang mudah. Daripada menambah digit di belakang, kenapa tidak mengubah 4 digit angka tersebut menjadi bilangan basis 36? (Base-36 adalah bilangan 0-9, A-Z) Dengan base-36, mungkin 3 huruf dibelakang ngga akan diperlukan lagi. Kita hitung kemungkinan untuk base-36
4 Digit untuk base36 adalah 1.679.615 Jadi total kendaraan yg muat adalah = 1.679.615 x 27 x 26 = 1.179.089.730
1 milyar, tanpa hrs nambah panjang plat nomer, Contoh plat nomer yang valid adalah: B JXPY CR. Juga menambah peluang untuk customizing plat nomer dengan nama pemiliknya semacam: B ANDI CX atau B FER DI
Moral: Mikir dulu sebelum nambahin digit.


