21.8.07

Update situs Tantillus

Baru selesai update situs Tantillus (home of Libellus, Book Organizer). Belom 100% selesai sebenarnya, masih harus check dan re-check. Tampilan situs baru ini benar - benar rapih dan so simple. Seneng liatnya :)

Kalau kemarin masih hard-code + flat text, sekarang fully database driven. 
Oh ya, ke depan, sudah harus disiapkan backend yang lebih simple.
Kepikir juga untuk membuat fasilitas buat pengguna Libellus untuk meng-upload data / list koleksi buku mereka di website Tantillus.com.
Tapi harus dipersiapkan yang matang dulu deh. Yang terutama harus dipersiapkan adalah metoda "upload" nya. Ntah mau manual disediakan fasilitas upload di website atau through socket di aplikasi (tinggal click and go).

Ide - ide masih banyak. Semoga masih tetap fokus.

15.8.07

Kompas pagi ini:
HELSINKI, RABU - Overheating atau panas yang berlebihan tidak hanya menimpa ribuan baterai yang digunakan di bebagai jenis laptop. Kini giliran baterai ponsel yang harus diwaspadai.

Kasus terbesar telah dialami Nokia yang merupakan produsen ponsel terbesar di dunia saat ini. Tidak tanggung-tanggung, ada sekitar 46 juta baterai yang diperkirakan rawan mengalami overheating saat digunakan. Baterai yang rawan mengalami panas berlebihan adalah jenis BL-5C yang diproduksi Matsushita Battery Industrial Co. Ltd. antara Desember 2005 hingga November 2006.

Baterai BL-5C adalah tipe baterai yang paling banyak digunakan Nokia dalam produk ponselnya, dari ponsel seri 1100 hingga handset multimedia N70 dan N91. Secara keseluruhan sudah ada sekitar 300 juta baterai jenis tersebut yang didistribusikan ke seluruh dunia dari berbagai pemasok.


Saya check, ternyata 1 HP GSM saya kena.
Form replacement sudah saya isi, sekarang tinggal menunggu?

Trims Kompas!

14.8.07

detik malam ini: 

Ical menegaskan, alasan Romo Magniz menolak penghargaan karena Bakrie merupakan pemilik Lapindo Brantas Inc tidak tepat. "Lapindo adalah lembaga yang berbeda. Kalau ini kan dari keluarga Bakrie," katanya.

Ical malah berkelit, jika Lapindo Brantas merupakan perusahaan publik yang tidak hanya dimiliki keluarga Bakrie. "Lapindo milik keluarga Bakrie dan masyarakat. Jadi kalau dinilai bersalah ada salahnya masyarakat juga," cetusnya.


Jadi dapat disimpulkan bahwa saya dan anda - anda sekalian yang sedang membaca blog ini BERSALAH dalam kasus lumpur sidoarjo. 

Wow! Terima kasih pak ical untuk pencerahannya! (susah kalau urat malu sudah putus, shame on you!)

On the other side, saya angkat topi untuk Romo Magniz. Salut!

12.8.07

Aston Villa
Baru sadar malam ini, ternyata saya sudah terbuai harapan/mimpi bahwa Aston Villa bisa menjuarai EPL nyaris 12 tahun. Nyatanya sampai sekarang begitu - begitu saja.
Prestasi terbaik mungkin tahun 1999/2000 ? 
Kalau ndak salah waktu itu sempet mejeng di posisi puncak untuk beberapa minggu. Pokoknya minggu itu indah bener. Semua media di inggris ngebahas tentang Aston Villa :)
Jadi inget lagi, waktu itu pas ke Bali, sampai - sampai di jalan juga mencari info hasil pertandingan. Belom lupa waktu itu cari tau skor Charlton Atl. - Aston Villa.. hasilnya 0 - 1 :)

Semalem hasilnya 2-1 untuk Liverpool. Buruk. Di kandang dan pertandingan perdana kalah.
Bingung juga kenapa kok tim favorit saya satu ini begini - begini aja.. dulu sempet ikut - ikutan berteori kalau yang salah itu pemainnya yang kurang ngotot, terus berlanjut managernya (JG kemana ya sekarang?), sampai terakhir si big boss Doug Ellis. Eh nyatanya setelah semuanya berganti.. masih begitu - begitu saja.
Jadi siapa yang salah?
Tukang pijet pemain?

Sayang banget untuk musim ini sudah tidak ada lagi si Gavin McCann. Padahal dia ini tipikal petarung sejati.
Pemain bagus kok dilepas?

11.8.07

Update..

Pagi ini ada wawancara di stasiun radio swasta yang sama, dengan seseorang dari YLKI. (saya terlambat mendengarkan pembukaan wawancara ini)
Inti wawancara ini kurang lebih sama dengan tulisan saya semalam.
Kenapa kok perlakuan pihak yang berwenang untuk menertibkan penggunaan bahan - bahan berbahaya pada produk yang digunakan oleh masyarakat umum berbeda?
Istilah kerennya, standar ganda.
Apa yang menjadi patokan pihak tersebut?

Anyway, ada tips menarik juga dari YLKI. Lebih baik cari aman saja (dengan kata lain, jauhi produk yang harus dijauhi)
Formalin, ya Formalin! Berita Top!


Sebelum tidur, ada beberapa pikiran yang menggangu (selain masalah pekerjaan tentunya)

1. Kenapa tiba - tiba diberitakan (massively) bahwa penggunaan Formaldehyde diperbolehkan untuk penggunaan luar?

Hari ini sebuah korporasi besar bahkan ikut - ikutan sibuk membuat press release yang meng-counter pernyataan haram untuk penggunaan Formaldehyde. Saya mendengar sendiri press release di salah satu stasiun radio swasta. Penyiar sudah dengan tepat membuka percakapan, dengan pernyataan yang mungkin menohok korporasi tersebut (well, at least sales mereka untuk bulan ini). Kira - kira begini pertanyaannya. "Apakah produk - produk yang dihasilkan mengandung formalin?". Jawabannya tentu saja sudah bisa ditebak: tidak ada jawaban sama sekali. Malah berpropaganda bahwa penggunaan formalin itu tidak masalah dan pada kasus tertentu malah berguna. Ya saya sendiri secara pribadi setuju - setuju saja. Tapi tetap saja.. itu tidak menjawab pertanyaan!

Yang sangat menggangu saya saat ini adalah, kenapa (pasti masih ingat) minggu kemarin sampai heboh penarikan produk china karena tersangkut penggunaan formalin, yang di dalamnya terdapat juga produk pasta gigi. (sekitar awal tahun 90-an saya memakai produk ini)
Sedangkan untuk minggu ini kejadiannya berubah total (yang saya soroti secara khusus adalah produk pasta gigi). Kenapa tidak terulang reaksinya? ditarik dari pasaran dan disosialisasikan di media masa (again, massively!)

Ndak habis pikir saya. Ngaco!

2. From Villain to Hero
Coba ditengok beberapa iklan di TV (secara khusus: iklan "layanan masyarakat" tentang internet masuk desa & iklan oli)
Iklan itu benar - benar membodohi!
Merekalah sebenarnya penjahatnya dan bukan pahlawan!

Sakit jiwa!

7.8.07

Win32 Hello World

Saya paste-kan "beberapa" baris kode di bawah ini.
Kesan pertama yang timbul saat melihat barisan kode ini mungkin mengerikan!
Hanya untuk menampilkan window yang sedemikian sederhananya harus mengetikan sedemikian banyak baris kode?
Jawabannya ya dan tidak.
  • Ya, baris kode di bawah adalah minimal
  • Tidak harus diketik. Saya belom pernah bertemu dengan programmer Windows yang secara "manual" mengetikan baris kode di bawah. Kebiasaannya adalah baris kode tersebut di simpan dalam suatu file dan kemudian dikopi-pastekan saat dibutuhkan :)
Dibandingkan program yang berbasis windows, program DOS hanya membutuhkan ± 5 baris kode untuk ber-"Hello, World" ria. (saya berbicara tentang pemrograman standar, dan bukan pemrograman "hard-core" yang diikutsertakan dalam kontest Obfuscated code.


#include <windows.h>

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
     static TCHAR szAppName[] = TEXT ("HelloWinWorld") ;
     HWND         hwnd ;
     MSG          msg ;
     WNDCLASS     wndclass ;

     /* definisi window class */
     wndclass.style         = CS_HREDRAW | CS_VREDRAW;
     /* opsi redraw */
     wndclass.lpfnWndProc   = WndProc;
     /* window function */
     wndclass.cbClsExtra    = 0;
     /* bytes extra untuk class struct */
     wndclass.cbWndExtra    = 0;
     /* bytes extra untuk window struct */
     wndclass.hInstance     = hInstance ;
     /* window instance */
     wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION);
     /* icon program */
     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW);
     /* cursor program */
     wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
     /* warna backgroud */
     wndclass.lpszMenuName  = NULL;
     /* window menu   */
     wndclass.lpszClassName = szAppName;
     /* nama class    */

   /* daftarkan window class yang telah kita definisikan di atas */
     if (!RegisterClass (&wndclass))
     {
          MessageBox (NULL, TEXT ("This program requires Windows NT!"),  szAppName, MB_ICONERROR) ;
          return 0 ;
     }
  
   /* buat window dengan nama class yang telah didaftarkan di atas */
     hwnd = CreateWindow (szAppName, /* nama class window      */
TEXT ("The Hello World Program"), /* judul window   */
WS_OVERLAPPEDWINDOW, /* style window    */
CW_USEDEFAULT, /* posisi x window   */
CW_USEDEFAULT, /* posisi y window  */
CW_USEDEFAULT, /* lebar window   */
CW_USEDEFAULT, /* tinggi window   */
NULL, /* handle parent window */
NULL, /* menu window   */
hInstance, /* window instance  */
NULL); /* parameter tambahan  */

   /* tampilkan window yang telah dibuat */
     ShowWindow (hwnd, iCmdShow) ;
     UpdateWindow (hwnd) ;

   /* proses Windows message */
     while (GetMessage (&msg, NULL, 0, 0))
     {
          TranslateMessage (&msg) ;
          DispatchMessage (&msg) ;
     }
     return msg.wParam ;
}

/* window procedure yang akan memproses setiap message yang diterima */
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
     switch (message)
     {
   /* contoh message yang diterima dari Windows adalah WM_DESTROY, yaitu windowakan di-"hancurkan", berdasarkan perintah yang diterima dari pengguna program, biasanya pengguna meng-klik tombol close */

     case WM_DESTROY:
          PostQuitMessage (0) ;
          return 0 ;
     }
     return DefWindowProc (hwnd, message, wParam, lParam) ;
}


Saya tidak membahas lebih lanjut, silahkan diamati saja kode program di atas, dan mulai modifikasi.

2.8.07

Fundamental Pemrograman Windows

Saya tertarik untuk membahas sedikit (atau mungkin banyak?) tentang pemrograman Windows dengan langsung mengakses API yang tersedia.

Sekilas tentang pemrograman Windows, terlepas dari apa bahasa pemrograman yang digunakan dan dengan cara apa. Ada 2 cara untuk membuat program tersebut.
1.  Mengakses langsung API yang tersedia
2. Menggunakan class library yang mengenkapsulasi API

Banyak perdebatan tentang mana yang lebih baik dari 2 cara / metode di atas.
Saya akan coba sedikit mengulas secara obyektif tentang pro dan kontranya.
1. Mengakses langsung API
Pro:
  • Memberikan kita pengertian yang mendalam tentang apa yang kita bangun (banyak kejadian dimana programmer tidak tahu kenapa kok ini bisa begini atau itu bisa begitu, yang penting apa yang saya inginkan bisa jalan/jadi)
Kontra:
  • Banyak orang berpendapat bahwa mengakses langsung API sangat tidak praktis (kenapa harus repot kalau kita bisa menggunakan class library yang telah tersedia)
2. Menggunakan class library yang mengenkapsulasi API
Pro:
  • Memudahkan pemrograman (tidak perlu membuat "tangan kita kotor" dengan detail - detail pemrograman)
  • Otomatis membuat development time menjadi berkurang
Kontra:
  • Kurangnya pemahaman (yang mendetail) tentang apa yang terjadi di dalam suatu proses pembangunan software maupun produk jadinya.

Saya tidak akan membahas terlalu jauh tentang hal ini, silahkan googling untuk informasi lebih detail.
Untuk sharing (saya suka kata ini :) ) saya kali ini, saya fokus dengan cara / metode #1.

Perlu juga saya bahas sedikit tentang dasar pemrograman di lingkungan Windows.
Sebelumnya saya hendak bertanya bagaimana software/program yang kita bangun berinteraksi dengan Windows? Bagaimana caranya Windows atau program kita, menterjemahkan, katakanlah setiap klik pada mouse ? Bagaimana proses sebenarnya dari program stock & inventory yang kita bangun, yang memungkinkan kita untuk menekan tombol tertentu dan data barang bisa ditampilkan pada kontrol tertentu (contoh: Listview) ?
Apakah ada suatu proses yang terjadi di balik proses klik pada mouse atau penekanan tombol? atau memang terjadi begitu saja? :) 

Proses sebenarnya yang terjadi adalah komunikasi antara program yang kita bangun (dan tentu saja sedang kita jalankan) dengan Windows.
Windows yang memulai proses komunikasi, Windows akan mengirimkan message/pesan ke setiap event yang terjadi kepada program yang sedang kita jalankan. Setelah menerima pesan tersebut, program akan menterjemahkan message/pesan tersebut dan kemudian memberikan respon. Setelah merespon Windows, program akan kembali menunggu untuk message/pesan berikutnya dari Windows.

Seperti pada contoh di atas dimana pengguna program stock & inventory menekan tombol tertentu untuk menampilkan data barang. Windows mendeteksi ada suatu peristiwa dimana suatu tombol pada suatu program sedang ditekan, kemudian Windows langsung mengirimkan message/pesan kepada program yang bersangkutan, dalam hal ini message yang diberikan adalah WM_COMMAND (akan kita bahas kemudian).
Program menerima message/pesan, menterjemahkan message/pesan tersebut, lalu memberikan respon, yaitu menampilkan data barang.

Setelah kita mengetahui bagaimana Windows dan program yang sedang kita jalankan berinteraksi, kita akan masuk sedikit lebih dalam lagi.

Bagi yang memiliki pengalaman atau pernah membuat program dengan bahasa pemrograman C,C++,D pasti sudah tidak asing lagi dengan fungsi main(), dimana seluruh proses akan dimulai dari fungsi ini. 
Sama dengan konsep ini, seluruh program Windows dimulai dari fungsi ini, namun dengan nama yang sedikit berbeda, yaitu WinMain().
Fungsi WinMain() memiliki perbedaan dibanding fungsi - fungsi lain. WinMain menggunakan WINAPI sebagai calling convention.
Nilai kembalian dari WinMain() harus bertipe int.

Kita lanjut ke fungsi berikutnya. Setiap program Windows harus memiliki fungsi yang dikhususkan untuk Windows, melalui fungsi inilah seluruh proses komunikasi antara Windows dan program yang kita buat terjadi. Fungsi ini biasanya dipanggil sebagai window procedure.
Message/pesan dari Windows (seperti yg kita bahas di atas) diterjemahkan dan diolah di fungsi ini. Seluruh window procedure harus mengembalikan nilai dengan tipe LRESULT CALLBACK. LRESULT sendiri adalah 32-bit int, sedangkan CALLBACK calling convention
digunakan oleh seluruh fungsi yang dipanggil/dikirimkan pesan oleh Windows.

Setelah kita mengetahui bahwa seluruh program Windows dimulai dari fungsi yang bernama WinMain() dan kemudian window berkomunikasi dengan program melalui window procedure. Berikutnya adalah window class.
Mungkin mendengar kata class di sini, kita langsung terpikir dengan class yang ada dalam bahasa pemrograman yang berorientasi object seperti C++. Apakah class yang ini yang dimaksud?
Tidak. Window class di sini lebih dimaksudkan dengan style atau tipe. Lalu apa itu style atau tipe ini?
Katakanlah kita mau membuat sebuah window seperti pada gambar di bawah. 
Kita tentukan warna backgroundnya putih, window icon nya adalah icon standard aplikasi, dst.



Setelah window class, selanjutnya adalah message loop. 
Seperti sudah dibahas di atas bahwa Windows dan program yang kita jalankan berkomunikasi melalui message/pesan, dan bahwa Windows akan mengirimkan message/pesan kepada program untuk setiap event yang terjadi. Setelah menerima message/pesan dari Windows dan meterjemahkan/mengolahnya maka program akan berada dalam posisi menunggu kembali.
Message loop terdapat didalam fungsi WinMain().

OK, cukup teorinya. Saya akan lanjutkan dengan praktek.

31.7.07

Akhirnya oh akhirnya..

Setelah 6 tahun lebih sedikit! (saya daftarkan account di blogspot ini tahun 2001)

Saya sudah ndak sanggup menahan godaan untuk nge-blog untuk numpahin pikiran teknis dan mungkin beberapa lame mini howto. Lagian sekarang ini lumayan santai juga. (baca: santai banget!)
Hehe.. hitung - hitung kalau disuruh buat daftar kegiatan.. nambah satu, selain:
1. Nganterin nyonya besar
2. Ngebunuhin kutu di beberapa software buatan sendiri
3. Berenang (ya berenang :P)
4. Ngejemput lagi nyonya besar
Kalau dipikir - pikir lagi.. gila juga.. 24 jam cuma diisi sama 4 kegiatan doang! (selain buang air, makan, tidur tentunya)
Mau jadi apa kalau begini?!

Padahal oh padahal, 2007 (seperti juga tahun - tahun sebelumnya) penuh dengan target - target yang kalau dilaksanain bakalan ngerasain "so little time so much to do". 
Nyatanya malahan jadi "so much time to do nothing". Gile bener!
Mana sudah tengah tahun lagi..
Mau jadi apa kalau begini?!

Semoga ndak terlambat, semoga!