Rabu, Desember 31, 2008

Belajar Ruby

Berawal dari sebuah kebutuhan untuk mengetahui kapan DHCP Client memperbaharui IP Address, saya akhirnya malah belajar Ruby dan jadilah script sederhana berikut ini. FYI, saya menggunakan GNU/Linux Ubuntu Intrepid Ibex. Saya butuh informasi waktu perbaharuan IP berikutnya dari DHCP Client. Dari file /var/log/daemon.log saya bisa mendapatkan informasi berikut ini


$ grep renewal /var/log/daemon.log
Dec 29 10:32:41 hantulab dhclient: bound to 192.168.1.31 -- renewal in 14563182 seconds.
Dec 29 10:39:10 hantulab dhclient: bound to 192.168.1.31 -- renewal in 14168572 seconds.
Dec 29 12:18:45 hantulab dhclient: bound to 192.168.1.31 -- renewal in 13948234 seconds.
Dec 30 08:08:48 hantulab dhclient: bound to 10.2.13.34 -- renewal in 1496 seconds.
Dec 30 08:33:44 hantulab dhclient: bound to 10.2.13.34 -- renewal in 21496 seconds.
Dec 30 14:32:00 hantulab dhclient: bound to 10.2.13.34 -- renewal in 18630 seconds.
Dec 31 08:53:45 hantulab dhclient: bound to 10.2.13.34 -- renewal in 1446 seconds.


Ide awalnya adalah mengubah angka detik menjadi format jam. Dari tiga bahasa scripting yang terinstall di laptop saya, Perl, Python, dan Ruby, saya memutuskan untuk coba menggunakan Ruby sambil belajar. Dengan bekal panduan dari http://pine.fm/LearnToProgram/, sayapun membuat script sederhana berikut ini:

#!/usr/bin/env ruby

hour = ARGV[0].to_i / 3600
reminder = ARGV[0].to_i % 3600
minute = reminder / 60
second = reminder % 60

puts ARGV[0] + ' = ' + hour.to_s + ':' + minute.to_s + ':' + second.to_s


Lalu saya coba jalankan

$ ruby sectomin.rb 1446
1446 = 0:24:6


Hmm, lumayan. Script simple pertamaku pake Ruby. Selanjutnya aku juga perlu penjumlahan jam nih. Cari-cari nama fungsi dengan fungsionalitas sama dengan explode di PHP, nemu method split. Sekalian aku edit scriptnya dengan membuat fungsi.

#!/usr/bin/env ruby

def sectohour sec
hour = sec / 3600
reminder = sec % 3600
minute = reminder / 60
second = reminder % 60

hour.to_s + ':' + minute.to_s + ':' + second.to_s
end

def houradd hour1 hour2
arr_hour1 = hour1.split(':')
arr_hour2 = hour2.split(':')
result = (arr_hour1[0].to_i + arr_hour2[0].to_i) * 3600
+ (arr_hour1[1].to_i + arr_hour2[1].to_i) * 60
+ (arr_hour1[2].to_i + arr_hour2[2].to_i)
sectohour result
end

hour = sectohour ARGV[0].to_i

puts ARGV[0] + ' = ' + hour
puts ARGV[1] + ' + ' + ARGV[0] + ' = ' + houradd ARGV[1] hour


Coba dijalankan:

$ ruby sectomin.rb 1446 08:53:45
sectomin.rb:12: syntax error, unexpected tIDENTIFIER, expecting '\n' or ';'
sectomin.rb:19: syntax error, unexpected kEND, expecting $end


Wah...wah... koq error yah. Sebelum buka manual, coba-coba lagi, kali ini nambah koma sebagai pemisah argumen, ternyata berhasil. Untuk statemen multi baris juga mesti pake backslash, karena ga ada akhir baris pake ' seperti php. Untuk manggil fungsi dua argumen mesti pake tanda kurung. Inilah hasil script yang jalan, plus penyempurnaan sectohour.

#!/usr/bin/env ruby

def sectohour sec
hour = sec / 3600
reminder = sec % 3600
minute = reminder / 60
second = reminder % 60

hour.to_s \
+ ':' + (minute.to_s.length < 2 ? '0' : '') + minute.to_s \
+ ':' + (second.to_s.length < 2 ? '0' : '') + second.to_s
end

def houradd hour1,hour2
arr_hour1 = hour1.split(':')
arr_hour2 = hour2.split(':')
result = (arr_hour1[0].to_i + arr_hour2[0].to_i) * 3600 \
+ (arr_hour1[1].to_i + arr_hour2[1].to_i) * 60 \
+ (arr_hour1[2].to_i + arr_hour2[2].to_i)
sectohour result
end

hour = sectohour ARGV[0].to_i

puts ARGV[0] + ' = ' + hour
puts ARGV[1] + ' + ' + ARGV[0] + ' = ' + (houradd ARGV[1],hour)


Hasil running:

$ ruby sectomin.rb 1446 08:53:45
1446 = 0:24:6
08:53:45 + 1446 = 9:17:51


Setelah ini selesai, selanjutnya perlu otomatisasi dari pembacaan log sampai didapatkan hasil penjumlahannya. Dengan kombinasi grep dan tail, saya bisa dapat info ini:

$ grep renewal /var/log/daemon.log | tail -n 1
Dec 31 08:53:45 hantulab dhclient: bound to 10.2.13.34 -- renewal in 1446 seconds.


Selanjutnya dengan bantuan gawk yang powerfull, saya bisa membentuk string ini

$ grep renewal /var/log/daemon.log \
| tail -n 1 \
| gawk '{print "ruby sectomin.rb " $12 " " $3;}'
ruby sectomin.rb 1446 08:53:45


Lalu saya tambahkan backtick (`) sehingga saya bisa mendapatkan:

$ grep renewal /var/log/daemon.log \
| tail -n 1 \
| `gawk '{print "ruby sectomin.rb " $12 " " $3;}'`
1446 = 0:24:6
08:53:45 + 1446 = 9:17:51


Jreng...jreng... selesailah script sederhana Ruby pertama saya, plus parsing log. Semoga tulisan singkat saya ini bermanfaat. Ruby ternyata asik juga, cuman kadang saya terbawa kebiasaan di php. Belajar bahasa baru memang harus merubah paradigma dan pola pikir. Nantikan tulisan saya selanjutnya di blog ini.

Jumat, Desember 05, 2008

OSS Week di ITB

Saya membaca info rilis OpenSolaris 2008.11 dari blognya mas Alex Budiyanto. Di akhir tulisan blognya, ada link mengenai OSS Week yang diadakan di ITB. Karena itu, siang ini saya sempatkan berkunjung ke bekas kampus saya itu, setelah sholat Jumat.

Saya datang dari arah Borromeus menuju jalan Ganeshe. Karena jalan Ganesha sehabis sholat Jumat pasti macet, saya putuskan untuk memarkir motor di parkir Timur. Setelah itu, saya berjalan kaki menuju aula barat dan mendapati aula barat penuh kursi, panggung, dan peralatan band. Install Fest kok gini yah, curiga ini bukan acara Install Fest, akhirnya saya coba mencari outlet POSS ITB yang katanya ada di jalan Ganesha No 15A.

Karena tidak tahu letaknya, saya sempat tanya di Pusat Inkubasi ITB yang di depannya ada tulisan alamat Ganesha. Saya diberitahu bahwa POSS ITB ada di sebelah. Saya pun jadi sempat nyasar masuk Plasa Telkom, dan diberitahu bahwa POSS ada di belakang Plasa Telkom ini.

Saya masuk ke ruangan POSS ITB dan langsung nodong CD OpenSolaris dan NetBeans. Sebenarnya saya ingin berkenalan lebih lanjut dengan rekan-rekan di POSS, tapi berhubung saya sudah capek jalan-jalan di kampus nyari-nyari letak POSS, dan juga harus segera kembali ke kantor karena jam istirahat akan segera berakhir, saya pun tidak sempat berkenalan dan memperkenalkan diri.

Untuk rekan-rekan di POSS ITB, terima kasih atas CD OpenSolaris dan NetBeans-nya. Mungkin lain kali kita bisa berkenalan dan saling berbagi pengalaman. Semoga berhasil memperkenalkan Open Source di bekas kampus saya ini :)

Rabu, November 19, 2008

Panduan Instalasi modul OCI8 pada PHP5 Ubuntu

Pada tulisan ini saya akan mencoba menerangkan langkah-langkah menginstall modul OCI8 untuk PHP5 sehingga PHP bisa melakukan koneksi ke database Oracle. Pada tulisan saya terdahulu, saya melakukan kompilasi ulang PHP-nya. Cara ini kurang menguntungkan, karena dengan keluarnya versi baru PHP, kita perlu melakukan kompilasi ulang. Dengan menggunakan modul, kita tetap dapat mengupdate PHP dengan versi terbaru, tanpa perlu repot kompilasi ulang setiap saat.

Operating System yang digunakan adalah Ubuntu 8.04 Hardy Heron, tetapi langkah2 ini juga sama untuk versi sebelum maupun sesudahnya. Paling-paling hanya berbeda versi PHP dan OCI8-nya saja.

Persiapan

Berikut ini adalah paket aplikasi dan library yang harus dipersiapkan.

Paket kompilasi

Paket-paket berikut ini dibutuhkan agar kita bisa melakukan kompilasi modul OCI8. Install dengan menggunakan perintah :

sudo apt-get install
checkinstall build-essential gcc re2c

Paket development PHP5

Paket-paket berikut ini adalah paket development PHP5 yang dibutuhkan untuk mengkompile modul-modul PHP5

apt-get install php-pear php5-dev

Oracle Client

Agar kita bisa melakukan koneksi ke database Oracle, dibutuhkan library Oracle Client. Untuk modul OCI8 kita cukup menggunakan instantclient. Download melalui alamat http://www.oracle.com/technology/software/tech/oci/instantclient/index.html

Setelah download selesai, lakukan langkah berikut ini sebagai root:

mkdir -p /opt/oracle/instantclient
cd /opt/oracle/instantclient
unzip instantclient-basic-linux32-<version>.zip
unzip instantclient-sdk-linux32-<version>.zip
echo "/opt/oracle/instantclient"
>> /etc/ld.so.conf.d/oracle.conf
ldconfig
ln -s libclntsh.so.10.1 libclntsh.so
ln -s libocci.so.10.1 libocci.so

Kompilasi dan Instalasi modul OCI8

Setelah paket-paket aplikasi yang kita butuhkan tersedia, sekarang kita akan melakukan kompilasi modul OCI8. Berikut ini langkah-langkah yang akan kita lakukan.

Download modul OCI8

Kita akan mendownload source code modul OCI8. Untuk melakukannya, lakukan perintah berikut ini sebagai root.

mkdir -p /usr/local/src
cd /usr/local/src
pecl download oci8

Ekstrak dan konfigurasi modul

Setelah langkah diatas selesai dilakukan, kita akan mendapatkan file oci8-1.3.3.tgz (versi terbaru mungkin telah tersedia, sehingga sesuaikan nama filenya dengan nama file yang didapat dari langkah diatas). Selanjutnya kita akan mengekstrak file ini dan mengkonfigurasi modul oci8

tar xzf oci8-1.3.3.tgz
cd oci8-1.3.3
phpize5
./configure
--with-oci8=shared,instantclient,/opt/oracle/instantclient

Kompilasi dan Instalasi

Setelah kita mengkonfigurasinya sesuai dengan library instantclient yang ada, sekarang waktunya kita melakukan kompilasi. Jalankan perintah berikut ini;

make
make install

Selesai? Belum juga :) Modul OCI8 sekarang sudah berada di direktori modul PHP5, tetapi PHP5 belum ditambahkan setting agar meload modul tersebut. Kita akan menambahkan setting ini dengan perintah

echo "extension=oci8.so" >
/etc/php5/conf.d/oci8.ini

Selanjutnya silahkan restart server apache httpd, lalu cek dengan phpinfo. Saat ini modul OCI8 seharusnya telah dikenali oleh PHP5 dan muncul di halaman phpinfo. PHP5 siap melakukan koneksi ke database Oracle.

Selamat mencoba.

Sumber tulisan:

http://ubuntuforums.org/showthread.php?t=92528


Minggu, November 16, 2008

Mengatasi firefox berjalan di modus offline di ubuntu terbaru

Pengguna Ubuntu sejak rilis Hardy Heron dan sekarang Intrepid Ibex, yang terkoneksi Internet menggunakan modem, atau tidak menggunakan Internet sama sekali, hampir dipastikan mengalami masalah Firefox berjalan pada modus Work Offline. Permasalahan ini bersumber dari NetworkManager yang tidak mendeteksi adanya koneksi melalui ethernet kabel, maupun wireless, sehingga mengirimkan status offline kepada Firefox. Firefox yang mendapatkan status offline ini akan otomatis mengaktifkan modus Work Offline.

Bagi web developer yang bekerja pada localhost, hal ini tentu sangat mengesalkan. Bagi yang terkoneksi lewat modem juga akan merasakan hal yang sama, karena NetworkManager tidak mendeteksi koneksi lewat modem. Saya mencoba mencari cara mengatasi hal ini. Di beberapa halaman yang saya temui menyarankan untuk menonaktifkan NetworkManager, atau mematikan pengiriman notifikasi dari NetworkManager ke aplikasi. Tentu hal ini kurang tepat untuk dilakukan, karena jika suatu saat kita membutuhkan koneksi melalui jaringan kabel ethernet maupun wireless, kita akan membutuhkan NetworkManager.

Saya akhirnya menemukan jawaban pada thread ini. Pada post nomer 34, saya mengetahui adanya opsi toolkit.networkmanager.disable pada firefox. Untuk mengetahui fungsi dari opsi ini, saya mencari informasinya di mozillazine dan mendapatkan halaman ini. Opsi ini sesuai dengan kebutuhan saya, yaitu membuat firefox tidak menggunakan NetworkManager untuk mengetahui status koneksi. Dengan mengeset opsi ini menjadi true, maka firefox tidak akan masuk ke modus Work Offline lagi. NetworkManager tetap berjalan, dan dapat digunakan untuk memilih koneksi kabel ethernet atau wireless saat dibutuhkan.

Semoga informasi ini membantu para pengguna Ubuntu maupun distro Linux lainnya mengatasi permasalahan Firefox Work Offline. Saya menggunakan juga varian Firefox yaitu Flock dan Mozilla Prism, dan opsi toolkit.networkmanager.disable juga bisa diterapkan.

Cara untuk mengeset toolkit.networkmanager.disable menjadi true:

  1. Pada Firefox, ketikkan about:config di kolom isian lokasi

  2. Klik tompol peringatan yang muncul

  3. Pada kolom isian filter, ketik toolkit.networkmanager.disable

  4. Sekarang tabel akan menampilkan opsi toolkit.networkmanager.disable saja. Nilai default adalah false. Klik dobel baris tersebut untuk mengubah nilai false menjadi true.

  5. Cara alternatif, terutama untuk mengeset opsi ini pada Mozilla Prism adalah dengan mengedit file prefs.js, lalu tambahkan baris ini di akhir file:
    user_pref("toolkit.networkmanager.disable", true);
    Lokasi file prefs.js untuk Mozilla Prism akan berada di dalam folder .prism di home direktory. Tiap aplikasi prism memiliki folder setting sendiri-sendiri, gunakan fitur search di nautilus untuk mencari semua file prefs.js yang ada.

Selamat mencoba.

Minggu, November 09, 2008

Publish tulisan ke blog menggunakan OpenOffice

Saya baru saja menemukan extension Sun Weblog Publisher di halaman ini. Extension ini akan membantu pengguna OpenOffice untuk mempublish tulisannya langsung ke blog. Blog yang didukung cukup banyak, diantaranya adalah Blogger dan Wordpress.


Extension ini tentu saja akan memudahkan blogger untuk menulis blognya, karena tidak perlu repot membuka control panel blognya untuk menulis tulisan. Cukup dengan menulis menggunakan OpenOffice, lalu mengklik File > Send > To Weblog... maka tulisannya akan langsung dipublish ke blog. Sangat mudah, cepat, dan nyaman.


Tulisan ini saya tulis menggunakan OpenOffice.org 3.0 yang berjalan pada OS GNU/Linux Ubuntu 8.10 Intrepid Ibex. Indahnya dunia ini dengan adanya software freeware yang menjamin kemerdekaan penggunanya untuk berkreasi.


Rabu, Oktober 15, 2008

Berbagi pengalaman apply kartu kredit BCA

Siang ini saya pergi ke kantor BCA Dago untuk apply kartu kredit BCA. Oleh satpam, saya dipersilahkan menuju lantai 2 untuk menemui Customer Service. Setelah bertemu dengan Customer Service, saya diberikan penjelasan tentang kartu kredit BCA.

Kartu kredit BCA yang akan diterima oleh pemegang kartu kredit ada 2 kartu. Yang pertama adalah kartu BCA Silver atau kartu Gold, dan yang kedua adalah kartu BCA VISA atau MasterCard. Saya bertanya apakah bisa hanya mendaftar untuk kartu VISA saja dan dijawab oleh mbak CS tidak bisa. Biaya tahunan kartu Silver adalah Rp 75.000,- dan biaya tahunan kartu VISA/MasterCard adalah Rp 125.000,- sehingga total biaya tahunan yang harus dibayar oleh pemegang kartu kredit BCA adalah sebesar Rp 200.000,-

BCA memiliki program tahun pertama gratis biaya tahunan kartu Silver/Gold, sehingga pemegang kartu yang baru setahun hanya membayar biaya tahunan untuk kartu VISA/MasterCard. Jika dalam setahun rata-rata penggunaan kartu kredit setiap bulannya mencapai 30% dari limit kartu kredit, maka biaya tahunan kartu Silver/Gold menjadi gratis.

Saya tadi mendaftar untuk kartu VISA, karena akan digunakan untuk aktivasi rekening PayPal yang selama ini masih inaktif. Mumpung saat ini masih berstatus karyawan. Mudah-mudahan saja permohonan aplikasi kartu kredit saya ini disetujui :)

Selasa, September 23, 2008

Mencoba Mozilla Prism

Pagi ini saya mencoba aplikasi Mozilla Prism (sebelumnya bernama WebRunner). Prism adalah aplikasi browser mini yang menjadi jembatan penghubung aplikasi web dengan desktop. Prism tidak menampilkan tampilan menu dan toolbar seperti browser lainnya, tetapi langsung menampilkan halaman aplikasi web secara penuh. Produk lain yang serupa dengan Prism ini adalah Adobe AIR.

Prism menyediakan aplikasi bantu untuk menciptakan file deskripsi dari halaman aplikasi web yang akan dijalankan dengan prism. Shortcut ke aplikasi web ini akan diciptakan di Desktop. Untuk menghapus aplikasi, cukup hapus shortcut ini. Saat ini saya sudah membuat webapp (istilah file deskripsi prism) untuk Plurk, RememberTheMilk, dan Blogger. Posting ini saya tulis dari halaman blogger yang dijalankan menggunakan Prism.

Untuk mendownload Prism, silakan mengunjungi halaman ini. Pengguna Ubuntu Hardy Heron dapat langsung menginstall prism melalui synaptic maupun apt-get, karena prism telah ada di repository standar ubuntu. Terdapat juga bundel webapp yang disertakan, diantaranya adalah google docs, google calendar, facebook, twitter, dan aplikasi google lainnya. Andapun dapat dengan mudah membuat webapp untuk aplikasi web favorit menggunakan aplikasi bantu bawaan dari Prism.

Minggu, Agustus 31, 2008

Menyimpan file ke dalam database dan menampilkannya di halaman web

Hari ini saya membaca artikel yang sangat menarik di asktom tentang keuntungan dan kerugian menyimpan file ke dalam database. Tom menjawab bahwa dia sampai saat ini tidak menemukan keuntungan menyimpan data dari file diluar database. Tom memaparkan keuntungan-keuntungan yang didapatkan kalau data file disimpan ke dalam database, diantaranya:

  1. data akan dikelola dengan profesional oleh DBMS
  2. data akan ikut di-backup
  3. dapat di-rollback / di-recover bersama data-data lainnya
  4. data ikut terlindungi / aman
  5. scalable
  6. locking
  7. konsistensi data
Membaca pembahasan-pembahasan yang ada disana, saya jadi tertarik untuk mencoba menyimpan file ke dalam database. Kebetulan proyek yang sedang saya kerjakan di kantor memilki permasalahan sinkronisasi file. Ada dua website, gambar diupload di salah satu website, dan ditampilkan di kedua website. Keduanya akan berada di mesin yang terpisah, sehingga saya perlu memikirkan cara sinkronisasi file hasil upload. Jika file yang diupload saya simpan ke database, saya tentu tidak akan memiliki masalah sinkronisasi, karena kedua website dapat mengambil data dari database yang sama.

Saya pun mencoba membuat halaman sederhana untuk upload file yang akan disimpan ke database, dan menampilkan file yang tersimpan di database. Saya menggunakan framework codeigniter dan untuk akses database saya menggunakan adodb. Untuk DBMS sendiri saya menggunakan OracleXE.

Berikut ini potongan struktur tabel, dan potongan kode yang saya buat. Silahkan dipelajari dan dikembangkan lebih lanjut.

Tabel

CREATE TABLE "T_BLOB"
("ID" NUMBER NOT NULL ENABLE,
 "TITLE" VARCHAR2(255 CHAR),
 "FILE_DATA" BLOB,
 "CONTENT_TYPE" VARCHAR2(100 CHAR),
 CONSTRAINT "T_BLOB_PK" PRIMARY KEY ("ID"));

Sequence

CREATE SEQUENCE "SEQ_BLOB" INCREMENT BY 1 START WITH 1;

Package

CREATE OR REPLACE PACKAGE "P_PUBLIC_TYPES" AS
  TYPE theCursor IS REF CURSOR;
END P_Public_Types;
/

CREATE OR REPLACE PACKAGE "PG_BLOB" as

  function get_single(v_id in INTEGER) return p_public_types.theCursor;

  function get_all(v_order in VARCHAR2) return p_public_types.theCursor;

  function add_blob(v_title in VARCHAR2
                    ,v_content_type in VARCHAR2) return INTEGER;

  function delete_blob(v_id in integer) return INTEGER;

end pg_blob;
/

CREATE OR REPLACE PACKAGE BODY "PG_BLOB" as

  function get_single(v_id in INTEGER) return p_public_types.theCursor as
    cc p_public_types.thecursor;
  begin

    open cc for '
    SELECT B.*
    FROM T_BLOB B
    WHERE B.ID = ' || v_id || '
    ';

    return cc;
  end get_single;

  function get_all(v_order in VARCHAR2) return p_public_types.theCursor as
    cc      p_public_types.thecursor;
    orderby VARCHAR2(255);
  begin
 
    if v_order is not null then
      orderby := ' ORDER BY ' || orderby;
    end if;

    open cc for '
    SELECT B.*
    FROM T_BLOB B
    ' || orderby || '
    ';

    return cc;
  end get_all;

  function add_blob(v_title in VARCHAR2
                    ,v_content_type in VARCHAR2) return INTEGER as
    new_id  INTEGER;
  BEGIN
    select SEQ_BLOB.nextval into new_id from dual;

    INSERT INTO T_BLOB (ID, TITLE, FILE_DATA, CONTENT_TYPE)
    VALUES (new_id, v_title, empty_blob(), v_content_type);

    if SQL%ROWCOUNT > 0 then
      return new_id;
    else
      return 0;
    end if;
  end add_blob;

  function delete_blob(v_id in integer) return INTEGER as
  begin

    DELETE FROM T_BLOB
    WHERE ID = v_id;

    return SQL%rowcount;
  end delete_blob;

end pg_blob;
/

Controller function index

function index()
{
  echo '<p><a href="'.site_url('/testblob/add').'">Add new data</a></p>';

  $rs =& $this->adodb->db->ExecuteCursor('begin'
                                        .' :result := pg_blob.get_all(:v_order);'
                                        .'end;'
                                        ,'result'
                                        ,array('v_order' => ''));
  if ($rs && $rs->RecordCount() > 0)
  {
    $this->load->library('table');
    $this->table->set_heading('No'
                            , 'Title'
                            , 'Content-Type'
                            , 'File');
    $i = 1;
    foreach ($rs as $row)
    {
      $this->table->add_row($i++
                          , $row['TITLE']
                          , $row['CONTENT_TYPE']
                          , $row['FILE_DATA'] ?
                              '<a href="'.site_url('/testblob/file/'.$row['ID']).'">Download File</a>'
                            : 'No File');
    }
    echo $this->table->generate();
  }
  else
  {
    echo '<p>No Data yet</p>';
  }
}

Controller function add

function add()
{
  if ($this->input->post('submit'))
  {
    $uploaded = false;
    if ($_FILES['file']['name'] != '')
    {
      //upload image
      $conf_upload['upload_path']    = realpath(BASEPATH.'../').'/tmp/';
      $conf_upload['allowed_types']  = 'gif|jpg|png';
      $conf_upload['encrypt_name']   = true;

      $this->upload->initialize($conf_upload);

      if ( ! $this->upload->do_upload('file'))
      {
        //echo '<p>'.$this->upload->display_errors().'</p>';
      }
      else
      {
        $data_upload = $this->upload->data();
        $uploaded = true;
      }
    }
    //insert data
    $sql = 'declare'
          .'  result integer;'
          .'begin'
          .'  :result := pg_blob.add_blob(:v_title'
                                      .', :v_content_type);'
        .'end;';
    $stmt =& $this->adodb->db->PrepareSP($sql);

    $this->adodb->db->InParameter($stmt, $this->input->post('title'), 'v_title', 255);
    $this->adodb->db->InParameter($stmt, $data_upload['file_type'], 'v_content_type', 255);
    $this->adodb->db->OutParameter($stmt, $result, 'result');

    $this->adodb->db->Execute($stmt);

    if ($result > 0)
    {
      if ($uploaded)
      {
        $this->adodb->db->UpdateBlobFile('T_BLOB', 'FILE_DATA', $data_upload['full_path'], 'ID='.$result, 'BLOB');
        unlink ($data_upload['full_path']);
      }
      redirect('/testblob/index');
    }
  }

  echo form_open_multipart('/testblob/add', array('name' => 'form_add', 'id' => 'form_add'));
  echo '<ol>';
  echo '<li>'.form_label('Title', 'title').form_input('title', $this->input->post('title'), 'id="title"').'</li>';
  echo '<li>'.form_label('File', 'file').form_upload('file', '', 'id="file"').'</li>';
  echo '<li>'.form_submit('submit', 'Add');
  echo '</ol>';
  echo form_close();
}

Controller function file

function file()
{
  $id = intval($this->uri->segment(3));
  if (! $id)
  {
    redirect('/testblob/index');
  }

  $rs =& $this->adodb->db->ExecuteCursor('begin'
                                        .' :result := pg_blob.get_single(:v_id);'
                                        .'end;'
                                        ,'result'
                                        ,array('v_id' => $id));
  if ($rs && $rs->RecordCount() > 0)
  {
    if ($rs->fields['FILE_DATA'])
    {
      header('Content-type: '.$rs->fields['CONTENT_TYPE']);
      echo $rs->fields['FILE_DATA'];
    }
    else
    {
      echo '<p>No File</p>';
    }
  }
  else
  {
    echo '<p>Data no longer exist</p>';
  }
}

Semoga tulisan singkat ini dapat memberikan gambaran kepada pembaca yang ingin menyimpan file ke dalam database dan menampilkan data file dari database.

Silahkan juga baca pembahasan dan contoh di link berikut ini:

  1. http://www.devarticles.com/c/a/MySQL/Blobbing-Data-With-PHP-and-MySQL/

  2. http://phplens.com/lens/adodb/docs-oracle.htm

  3. http://forums.oracle.com/forums/thread.jspa?threadID=205149

Penjumlahan jam dan menit di PHP

Beberapa jam yang lalu seorang teman bertanya tentang kode PHP untuk menjumlahkan dua string jam dan menit. Saya coba cari di google tapi tidak ada solusi yang saya temukan. Saya pun menyarankan untuk parsing manual stringnya, di-explode dan dijumlahkan secara terpisah menit dan jamnya. Cara dasar tapi memang bisa dipakai untuk menyelesaikan permasalahan.

Beberapa saat yang lalu tiba-tiba saja terlintas ide untuk menggali lagi kehebatan fungsi strtotime yang ada pada PHP. Hasilnya adalah potongan kode berikut ini

<?php

$time1 = '10:20';
$time2 = '12:40';

$time1_unix = strtotime(date('Y-m-d').' '.$time1.':00');
$time2_unix = strtotime(date('Y-m-d').' '.$time2.':00');

$begin_day_unix = strtotime(date('Y-m-d').' 00:00:00');

$jumlah_time = date('H:i', ($time1_unix + ($time2_unix - $begin_day_unix)));



Dengan kode diatas penjumlahan dua string jam:menit dapat dilakukan dengan mudah. Semoga bermanfaat.


Update: kesalahan ketik diatas sudah diperbaiki :) Maklum ditulisnya malem2 sih...

Kamis, Juli 31, 2008

Tri Duta Suci memang mengecewakan

Saat saya bertanya kepada teman saya ke bengkel mana dia mempercayakan servis motor yamaha miliknya, teman saya itu menyarankan bengkel Sentra Anugrah Motor di Jl. Dipati Ukur, depan STHB. Alasannya seserhana saja, "Pelayanannya lebih baik daripada Tri Duta Suci." Saat itu, saya masih berdomisili di Jl. Puyuh, sehingga bisa melakukan servis berkala I dan II motor saya di Sentra Anugrah.

Pelayanan di Sentra Anugrah memang memuaskan. Ketika saya datang, yang menjaga konter bengkel langsung mencatat motor saya dan menanyakan keluhan yang saya alami dengan motor ini. STNK diberikan kembali kepada saya sebagai bukti pengambilan motor setelah selesai diservis.

Sekarang saya sudah pindah rumah ke daerah Cibaduyut. Kemarin saya hendak menservis di bengkel resmi Yamaha, tetapi bengkel di Taman Kopo Indah ternyata ikut libur. Pagi ini sambil berangkat kerja, saya memutuskan untuk meninggalkan motor di bengkel untuk diservis, sehingga siang hari bisa langsung diambil. Saya memutuskan mencoba servis di Tri Duta Suci karena lokasinya yang dekat dengan kantor.

Pagi hari tadi saya datang ke Tri Duta Suci. Di konter bengkel, saya disambut oleh mbak penjaga konter. Saya menyerahkan buku servis, kunci dan STNK. Si mbak menyuruh saya menunggu. Saya bilang padanya bahwa motor akan saya tinggal disini saja, nanti siang diambil. Si mbak bertanya, "mau diambil jam berapa?" "Jam 12 siang," kata saya. Tidak ada pertanyaan tentang keluhan yang saya alami dengan motor, maupun pencatatan. Saya meminta STNK yang saya serahkan bersama kunci, tetapi kata si mbak, semua ditinggalkan disana saja. Dalam hati saya berpikir, mudah banget ya nanti kalo mau ngambil motor milik orang lain, kan STNK, buku, dan kunci disana semua. Sungguh suatu kelemahan yang sangat fatal.

Siang harinya setelah sholat dzuhur saya langsung ke Tri Duta Suci untuk mengambil motor. Saya berencana makan siang nanti setelah mengambil motor. Sesampainya di bengkel, saya kembali menjumpai mbak penjaga konter yang sama. Saya katakan ingin mengambil motor. Oleh si mbak, saya diminta menunggu karena kasirnya sedang keluar makan siang. "Duh, kenapa ga bilang tadi pagi kalo jam 12 pada istirahat," kata saya dalam hati.

Sayapun menunggu dengan sabar dan tak terasa 45 menit telah berlalu. Perut saya sudah protes dengan hebatnya. Si mbak penjaga itu kayaknya berusaha mencari keberadaan si kasir 'penting' itu. "Kayaknya kasirnya kekenyangan," begitu guraunya kepada saya. "Lucu banget mbak, pengen ketawa perut saya ini," kembali saya berujar dalam hati.

Sayapun menghampiri si mbak sambil bertanya, "Memangnya kasirnya cuma satu ya mbak?" "Iya, sekarang manajemennya digabung dengan showroom. Jadi menyulitkan konsumen sih. Saya sudah berkali-kali bilang agar kalau keluar jangan sampai lewat jam 1. " begitu jawaban si mbak. Si mbak pun memberikan kuitansi (2 lembar) dan KSG III dari buku servis kepada saya, dan menyarankan saya agar menunggu di showroom saja.

Di showroom, ada 2 orang mbak penjaga. Seorang dari mereka bertanya keperluan saya, dan saya jawab hendak bayar servis bengkel. Si mbak menerima kuitansi dan ksg dari saya. Ketika saya memberi uang Rp 50rb, si mbak minta uang pas saja, karena kasirnya lagi keluar. Saya pun bertanya padanya, "kasirnya hanya satu orang ya mbak?" "Iya, mas mau melamar jadi kasir disini?" begitu jawaban si mbak itu. Saya jawab saja, "nggak sih, cuman kalo ada yang sampai masukin ke surat pembaca, bisa sepi nih bengkel," begitu kaya saya. "Kenapa memangnya?" tanya si mbak. "Saya sudah menunggu dari jam 12 tadi. Setidaknya tolong diinformasikan kepada konsumen, " begitu jawaban saya padanya. Si mbak kemudian memberi cap di kuitansi dan KSG, lalu menyerahkan kembali pada saya. Lembar kuitansi hijau disimpan olehnya.

Saya kembali ke si mbak penjaga konter bengkel. Dia malah heran ketika saya sodorkan kembali kuitansi putih dan KSG. "Kok dikembalikan ke saya, " tanyanya kepada saya. "Di sana sudah bayar mbak," kata saya padanya. Si mbak pun akhirnya menyerahkan kunci+STNK dan buku servis pada saya.

Duh, coba kalo yang ambil motor ini bukan saya, apa Tri Duta Suci mau bertanggung jawab? Setidaknya kasi pertanyaan kek, atau coba tiru Sentra Anugrah yang menggunakan STNK sebagai bukti ketika hendak mengambil motor kembali.

Ini merupakan pengalaman saya yang pertama dan terakhir di Tri Duta Suci. Kepada manajemen Tri Duta, mohon lebih selektif dalam menerima dan membina pegawai-pegawai Anda. Kalau bengkel Anda sampai sepi dan bangkrut, kasihan para pekerja Anda yang lain yang telah bekerja dengan baik, tapi harus ikut menderita akibat ulah satu orang yang tidak becus bekerja.

Blogged with the Flock Browser

Minggu, Juni 22, 2008

Hapuskan Israel dari dropdown country list, tambahkan Palestina...

Hari ini saya membaca berita di slashdot tentang pengalaman sebuah organisasi yang menerima sumbangan/donasi lewat website. Pada halaman data pengirim sumbangan, terdapat sebuah dropdown negara, dan Israel tidak tercantum di sana. Sebaliknya, dropdown negara ini memiliki entri Palestina sebagai sebuah negara. Berita lengkapnya dapat dibaca disini.

Cerita itu ditulis oleh . Grup ini menuduh organisasi penerima sumbangan ini sebagai anti-semit dan anti-zionis.

Terlepas dari masalah teknis kenapa negara Israel hilang dari list negara dan justru ada negara Palestina, ada hikmah yang dapat kita petik dari kejadian ini. Kita bisa memboikot Israel lewat cara ini. Hapuslah Israel dari daftar list negara untuk drop-down negara, dan tambahkan negara Palestina. Israel bukanlah sebuah negara, tetapi adalah perampok yang telah merampas tanah Palestina lalu berbuat kerusakan di seluruh dunia. Tidak pantas situs-stus kaum muslimin menampilkan Israel pada list negara di situs mereka. Hapus Israel sekarang juga dari list negara di situs yang Anda miliki.

Semoga perjuangan kecil ini menjadi amal ibadah yang besar pahalanya kelak di akhirat nanti.

Blogged with the Flock Browser

Maag dan pengobatan dengan air kelapa

Sekitar sebulan yang lalu saya sempat menderita sakit maag. Bermula dari sakit yang gejalanya mirip dengan demam berdarah, sayapun memeriksakan diri ke rumah sakit. Hasil test sarah menunjukkan trombosit saya masih normal. Karena malam sebelum nya saya menderita mencret, saya diberi enzim pencernaan oleh dokter yang memeriksa. Dua hari kemudian saya mulai merasakan gejala mual. Ketika dimuntahkan, bukannya mualnya berkurang, tapi badan ikutan jadi tambah lemas.

Beruntung kerabat istri saya bisa melakukan pijat refleksi. Setelah dipijat, gejalanya terasa berkurang. Kata si uwa, emang ini yang kena lambung. Setelah browsing di internet, saya memang menemukan bahwa salah satu penyebab maag bisa dikarenakan enzim pankreas buatan. Semenjak muntah, saya memang tidak meminum lagi obat yang diberikan dari dokter.

Setelah muntah, istri meminumkan madu kepada saya. Madu cukup menolong mengisi lambung yang sedang kosong setelah seluruh isinya keluar. Madu juga mengurangi rasa pahit dan tidak nyaman yang ada di mulut dan kerongkongan setelah muntah.

Untuk memperbaiki lambung, ada satu obat yang sudah saya buktikan mujarab. Air kelapa muda. Air ini merupakan cairan ber-ion yang lebih baik dari minuman ion buatan. Bahkan salah satu produk minuman ion ada yang beriklan bahwa produknya mengandung manfaat yang terkandung pada air kelapa. Tetapi tentu saja air kelapa muda alami jauh lebih baik ketimbang minuman hasil produksi pabrik.

Saya membeli air kelapa muda di warung es kelapa muda di dekat kantor. Pada penjualnya, saya meminta air kelapa yang belum dicampur dengan es. Ternyata bisa beli air dari satu kelapa muda. Penjualnya membelah satu kelapa muda, menampung airnya, dan menyerut daging kelapa mudanya. Air dari satu kelapa harganya Rp 4000,- sedangkan kalau beli es kelapa, segelasnya Rp 2000,- Tapi air dari satu kelapa muda emang banyak, lebih dari 2 gelas.

Air kelapa mampu menetralisir kelebihan asam lambung yang menyebabkan maag. Air kelapanya tidak perlu dicampur apa-apa. Sekali minum juga jangan banyak-banyak, maksimal 1 gelas saja. Sisa air kelapa simpan di kulkas agar tidak berubah rasa menjadi asam. Kalau sudah tersimpan lebih dari 2 hari, sebaiknya jangan diminum lagi, buang saja, karena biasanya sudah tidak baik.

Dalam masa penyembuhan, makan harus teratur. Jangan memakan makanan yang memicu produksi asam lambung berlebihan, seperti lemak, makanan pedas, dan makanan / minuman yang asam. Makan secukupnya, jangan sampai terlalu penuh, karena makanan juga merangsang produksi asam lambung. Semakin banyak makanan yang ada di lambung, asam lambung juga makin banyak diproduksi. Jangan lupa juga untuk air yang banyak.

Setelah gejala maag hilang, pertahankan kebiasaan makan secara teratur. Alhamdulillah semenjak sembuh sampai sekarang, gejala sakit maag saya belum pernah kambuh lagi. Semoga pengalaman saya ini dapat membantu pembaca yang juga sedang mengalami sakit maag. Semoga cepat sembuh.

Blogged with the Flock Browser

Sabtu, Juni 21, 2008

Blogging menggunakan Flock

Posting ini saya tulis menggunakan fitur blogging yang terdapat pada browser flock. Browser ini dibangun menggunakan komponen Mozilla Firefox, sehingga memiliki tampilan yang serupa dengan Firefox. Add-ons untuk firefox pun dapat langsung diinstall, walau tidak semuanya kompatibel.

Saya menjalankan flock versi 2.0b1 berdampingan dengan Firefox 3.0 yang baru saja dirilis. Saya menginstall beberapa add-ons, dan membuka tab dengan jumlah yang sama dan ke alamat yang sama pada kedua browser. Flock menggunakan memory lebih sedikit ketimbang Firefox 3.

Pada Flock telah terdapat berbagai fasilitas untuk memudahkan kita bersosialisasi di era Web 2.0. Ada fitur Accounts and Services yang menampilkan list situs web 2.0 yang didukung oleh Flock. Fitur ini tampil sebagai sidebar dan akan menampilkan status kita, apakah sedang login atau logoff.

Ada juga People sidebar, yang akan menampilkan list teman dari situs pertemanan dan situs web 2.0 lainnya yaitu Facebook, Flickr, Pownce, dan Youtube. Photo Uploader juga memudahkan proses upload foto ke situs yang dapat menyimpan foto seperti Flickr, Photobucket, Picasa, dan Facebook. Upload dapat dilakukan secara batch. Cukup men-drag foto dari komputer ke area yang terdapat pada jendela Photo Uploader.

Dan satu yang tidak ketinggalan adalah fitur Post Blog yang saya gunakan untuk menulis posting ini. Fitur ini sudah langsung tersedia tanpa perlu menginstall add-ons. Fiturnya hampir sama bagusnya dengan add-ons Scribefire untuk Firefox. Blog yang didukung juga banyak, yaitu Blogger, Blogsome, LiveJournal, Typepad, Wordpress.com, Xanga, and Self-Hosted Blog.

Jika Anda ingin alternatif browser selain Firefox, pertimbangkanlah Flock. Semua yang dapat dilakukan oleh Firefox dapat dilakukan oleh browser ini. Browser yang ringan dan banyak fitur ini akan menjadi teman setia Anda dalam menjelajahi dunia pertemanan dan sosial web 2.0

Blogged with the Flock Browser

Jumat, Mei 02, 2008

Catatan upgrade Gutsy Gibbon menjadi Hardy Heron

Sudah seminggu sejak Hardy Heron dirilis, dan sudah seminggu ini pula saya mengupgrade Gutsy Gibbon di laptop saya menjadi Hardy. Dengan koneksi internet Centrin yang saya gunakan, upgrade sebesar 1GB lebih memang tidak dapat dilakukan dengan cepat. Untunglah koneksi internet di kantor yang menggunakan Speedy cukup membantu mempercepat proses upgrade yang saya lakukan. Tadi siang, upgrade selesai dan laptop saya resmi menggunakan ubuntu 8.04 Hardy Heron.

Versi terbaru Ubuntu ini merupakan versi LTS, yang akan disupport selama 2 tahun. Banyak aplikasi yang di-upgrade. Beberapa paket harus diremove karena telah digantikan oleh paket baru dengan nama yang sedikit berbeda. Saya melakukan upgrade secara bertahap, sebagian menggunakan synaptic, sebagian menggunakan perintah apt-get install.

Tidak ada kendala berarti yang saya hadapi selama proses upgrade ini. Hanya sedikit masalah di akhir proses upgrade sempat membuat saya kalang kabut. Pagi tadi saya iseng mencoba fitur dual screen yang sudah menjadi default di Hardy. Malam sebelumnya upgrade xserver sudah selesai. Di bagian setting System > Preferences > Screen Resolution sekarang memang langsung diset pada bagian Clone Screens. Saya menyambungkan monitor yang nganggur di kantor. Walaupun Clone Screens dimatikan, tetap saja yang tampil di layar kedua sama dengan tampilan di layar utama. Cari-cari informasi di internet, trus nyoba-nyoba setting pake xandr, eh malah layar laptop jadi mati. Akhirnya saya coba cara kasar, Ctrl+Alt+BackSpace untuk merestart Xserver.

Ketika masuk lagi ke xsession, saya sedikit heran karena avant-window-navigator ga jalan. Ketika dicoba dijalankan dari gnome-terminal, avant memberikan pesan bahwa screen composite, yaitu compiz, ga jalan. Saya coba jalankan compiz, eh malah menghasilkan Segmentation Fault.

Saya pun kemudian mencari di internet cara mengaktifkan compiz. Sebagai catatan, kartu grafis di laptop saya adalah Intel GMA 900. Saya mendapatkan berbagai macam solusi, tapi setelah dicoba tidak ada yang berhasil. Saya bahkan sempat menguninstall driver xserver-xorg-video-intel. Padahal ternyata biang keladi kenapa compiz tidak berjalan karena saya harus perlu menginstall paket xserver-xgl. Entah kenapa paket ini tidak ikut terinstall sewaktu proses upgrade.

Karena tadi saya sempat menguninstall driver video intel, ketika konfigurasi xorg saya balikin lagi ke driver intel, tampilan jadi lambat sekali. Scrolling menjadi patah-patah. Ketika dicek dengan perintah :

$ glxinfo | grep direct

Saya mendapatkan hasil ini:

direct rendering: No

Cari-cari lagi di internet, akhirnya saya mencoba solusi di sini, yaitu dengan mengedit file /etc/X11/xorg.conf, kemudian mengedit bagian ini dan menambahkan bagian yang saya tandai dengan huruf tebal.

Section "Device"
Identifier "Intel Corporation Mobile 915GM/GMS/910GML Express Graphics Controller"
Boardname "intel"
Busid "PCI:0:2:0"
Driver "intel"
Screen 0
Option "AccelMethod" "xaa"
EndSection

Setelah xserver direstart, akhirnya compiz bisa saya jalankan dengan lancar, seperti semula. Avant-window-navigator pun berjalan dengan baik.

Semoga pengalaman saya ini dapat bermanfaat bagi pembaca yang juga sedang melakukan upgrade dari Gutsy ke Hardy.

Kamis, April 24, 2008

New version of ScribeFire

Setelah beberapa waktu ini scribefire mogok berfungsi, sekarang baru muncul versi barunya. Fitur-fiturnya jadi lumayan lengkap, ada add image dari flickr dan add video dari youtube. Post ini untuk mengetes apakah scribefire sudah berfungsi dengan baik atau belum.

Jumat, April 18, 2008

Mendapatkan kembali SIM tanpa sidang tilang

Seperti yang saya tuliskan pada tulisan sebelum ini, sore ini saya kembali ke pengadilan negeri Bandung untuk mengambil SIM yang kena tilang. Saat saya sampai di pengadilan, parkir motor di pelataran halaman pengadilan sudah kosong. Saya tidak jadi parkir di tempat parkir motor tapi saya parkir di dekat pos satpam, karena ada 3 motor sedang terparkir disana. Ruang pengadilan pun sudah tampak sepi, hanya ada dua orang petugas ketika saya masuk ke ruang sidang VI.

Saya langsung menemui seorang petugas dan menyerahkan surat tilang kepadanya. Beliau memberikan surat itu ke petugas yang berada di meja hakim, yang duduknya di sisi kanan hakim. Petugas itu lalu menyarankan saya untuk langsung ke loket pengambilan bukti tilang di bagian pidana. Petugas pertama tadi menyerahkan kembali surat tilang ke tangan saya sambil menunjukkan letak ruangannya. Dari pintu ruang sidang VI, berjalan lurus ke depan, lalu masuk ke pintu di sebelah kiri. Ada dua pintu, kebetulan ada petugas parkir lewat dan mengarahkan saya ke ruangan yang benar, yaitu pintu sebelah kanan diantara dua pintu yang ada. Saya langsung menyerahkan surat tilang dan surat pasangannya langsung ditemukan. SIM diserahkan ke saya oleh petugas disana sambil bilang dendanya Rp 25.000,-

Bagian pidana tempat saya mengambil SIM kurang tepat disebut loket, karena bentuknya seperti ruang kantor biasa. Mungkin jika ingin mengambil sitaan tilang di hari selain hari sidang yang tercantum di surat tilang, ke tempat inilah pengurusannya. Tentang sidang sendiri, saya sempat bertanya ke petugas di ruang sidang, kata beliau, sidang selesai sekitar pukul 2 siang tadi. dari hasil perkiraan saya, dengan sidang per 5 orang yang waktunya ga sampai 5 menit untuk kelima orang itu, memang sekitar jam 2 s/d 2:30, semua pelanggar yang ada di ruang sidang tadi itu bakal selesai diproses semuanya.

Dari dua kali pengalaman saya ditilang ini, sudah dua cara saya tempuh untuk mengambil SIM yang disita. Cara pertama yang telah saya tulis di sini adalah mengambilnya di kantor Polresta sesuai dengan surat tilang yang diberikan saat ditilang. Waktu itu saya dapat slip biru tapi tanpa nominal, dan bayar di kantor Polresta cuman Rp 20.000, waktu pengambilan hari senin setelah tanggal sidang. Cara kedua adalah pengalaman hari ini, dapet slip merah dan diambil di pengadilan, setelah waktu sidang, bayar Rp 25.000,- Satu cara lagi yang baru saya ketahui dari sini yaitu dapat diambil di kantor Polres sesuai surat tilang segera setelah tilang sampai dengan H-1 waktu sidang. Mungkin lain kali akan saya coba cara ini (mudah-mudahan ga akan pernah lagi ditilang :D)

Semoga informasi ini berguna bagi pembaca semua. Jangan takut ditilang. Jangan mau diurus calo, mending urus sendiri. Kalau belum tahu tempatnya, tanya ama calo, tapi jangan tunjukkan surat tilang, pura-pura bego aja, atau bilang nyari temen yang lagi sidang atau alasan lain. Tapi informasi akurat tetap dari petugas, karena kadang calo bisa aja bohong, atau memang tidak tahu lalu ngarang jawabnya. Kalau ga mau antri, datanglah ketika sidang hampir selesai, atau setelah waktu sidang.

Laporan pandangan mata sidang tilang dari pengadilan negeri Bandung

Saya kena tilang lagi. Kejadiannya hari Senin minggu yang lalu, tanggal 7 April 2008. Penyebabnya sebenarnya sepele, tapi emang melanggar sih. Saat itu saya dari arah pasteur mau naik ke jalan layang cikapayang. Ketika hampir sampai di persimpangan dengan jalan cihampelas, lampu lalu lintas menjadi merah. Karena tanggung, saya putuskan saja untuk berhenti, karena dari arah cihampelas sudah banyak mobil dan motor yang bersiap-siap untuk melaju. Daripada ketabrak, mending nunggu bentar kan. Saat itu saya tidak sadar bahwa posisi saya berada di depan garis batas.

Dari arah kanan datanglah seorang polisi dengan isyarat tangan menyuruh saya mundur. Celakanya di belakang sudah penuh oleh motor yang datang belakangan dan tidak ada ruang lagi bagi saya untuk mundur. Si polisi itu kemudian memberi isyarat dengan tangan agar saya mengikutinya, sambil meminta sim dan stnk. Sayapun mengikutinya ke seberang jalan pasteur. Jadilah saya kena tilang untuk kedua kalinya semenjak memegang SIM.

Kali ini saya diberikan slip merah. Artinya saya harus datang sidang pada tanggal 18, yaitu hari ini. Saya pun mencari-cari informasi tentang sidang tilang, terutama sidang di Bandung. Ada yang menyarankan datang di hari lain selain hari sidang, ada yang menyarankan datang di hari sebelum sidang ke Polwiltabes, langsung bayar denda di sana. Sayang saya baca saran terakhir ini baru tadi pagi.

Tadi jam 1-an, setelah sholat jumat, saya pergi ke pengadilan negeri. Karena saya tidak tau persis alamatnya di mana, dan di blog maupun wikimapia juga tidak ada, saya putuskan untuk mencari sendiri saja. Perkiraan lokasi ada di dekat KFC, dan ternyata memang benar. Dari kejauhan tampak banyak sepeda motor diparkir di trotoar. Saya terus melaju, kebetulan di depan ada mobil belok masuk ke pengadilan, jadi saya ikuti saja. Di dalam halaman pengadilan ada parkir motor dan saya lalu parkir motor disana. Saat parkir seperti biasa disapa para calo, menawarkan bantuan. Saya tolak dengan halus, sambil tanya kemana saya harus masuk. Dijawab oleh mang calo, ruang sidangnya ada di ruang VI.

Ruang VI adalah ruang sidang yang dipadati pengunjung, sebagian besar adalah pelanggar lalu lintas yang hendak sidang. Untuk mencapai ruang ini, masuklah di pintu paling kiri, yang berada di dekat pos satpam, dari arah pintu masuk jalan RE Martadinata. Masuk saja terus ke lorong yang gelap karena ga ada lampu itu, lalu belok ke kiri, belok kanan lagi. Ruangnya ada di ujung lorong dengan label Ruang VI di atas pintu masuk.

Saat saya datang, ada banyak orang yang sedang menunggu. Ternyata saat itu hakim belum datang. Bagi yang ingin sidang, tinggal masuk memberikan surat tilang ke petugas di meja sebelah kiri. Saya kemudian iseng jalan-jalan ke bagian lain pengadilan. Bangunan di bagian lain bagus-bagus dengan lantai keramik, sedangkan ruang sidang VI seperti ruang tak terawat, dengan suasana gelap dan lantai semen saja. Saya kembali ke ruang VI dan tak lama kemudian hakim memasuki ruangan. Selanjutnya dipanggillah nama sesuai surat yang sudah ada di meja hakim, untuk duduk di kursi panjang di tengah ruangan yang dapat menampung lima orang. Hakim selanjutnya mengatakan tujuan sidang saat itu, ditutup dengan pesan agar para terdakwa tidak melanggar lagi. Hukuman yang dijatuhkan berupa denda yang dibayarkan pada petugas di meja sebelah kanan, setelah mengambil surat tilang kepada petugas di samping kiri hakim.

Saya lalu meninggalkan ruang sidang, berencana untuk balik sore nanti. Di tempat parkir, saya menanyakan ke calo yang kebetulan lewat sampai jam berapa sidang dilaksanakan, dan dijawab olehnya sampai sore, jam 4-an jam 5-an. Ketika dia bertanya ke saya dapat slip merah apa biru, saya jawab aja udah sidang. Iseng juga sekalian nanya kalau telat sidang, diurus dimana, dijawab di dalam, di loket pidana. Tak lupa sang calo menambahkan bahwa dendanya juga bakal beda kalo telat. Saya jawab dengan terima kasih dan sayapun meninggalkan pengadilan negeri, balik ke kantor nerusin kerjaan dan posting tulisan ini :)

Nanti sore saya mau balik lagi kesana, tunggu aja laporan pandangan matanya di tulisan selanjutnya.

Tulisan lain tentang tilang:
http://standalone.blogsome.com/2006/01/03/tilang-kenapa-takut-disidang/
http://my.opera.com/teguh_widodo/blog/2007/02/01/prosedur-tilang?cid=3131197
http://www.kaskus.us/showthread.php?p=29816341
http://riyogarta.com/2006/12/05/sidang-akibat-tilang/
http://indrariawan.wordpress.com/2007/06/20/sidang-tilang/
http://papabonbon.wordpress.com/2007/02/12/kena-tilang-p/

Kamis, April 17, 2008

Kompilasi dan instalasi modul ffmpeg-php di Ubuntu

Tahun lalu sewaktu saya membutuhkan module oracle untuk PHP, saya perlu melakukan kompilasi php sendiri dari source code saat itu. Proses kompilasi, selain lama, juga perlu diulang setiap kali versi/rilis baru php keluar. Hal ini tentunya tidak praktis untuk dilakukan.

Saat ini ternyata kompilasi php tidak perlu lagi dilakukan sendiri. Saya dapat mengkompile sendiri modul php yang saya butuhkan, untuk kemudian tinggal diload melalui php.ini. Kompilasi modul sangatlah sebentar, karena ukurannya yang memang kecil. Selain waktu kompilasi yang cepat, jika versi baru php dirilis, saya juga tidak perlu melakukan kompilasi ulang, selama modul masih kompatibel dengan versi php tersebut.

Berikut ini saya akan menuliskan langkah-langkah instalasi modul ffmpeg-php. Langkah-langkah ini adalah hasil rangkuman dari panduan di situs ini dan ini, dan saya sesuaikan dengan kondisi saat saya melakukan kompilasi dan instalasi.

Langkah pertama, persiapan



Siapkan ubuntu untuk melakukan kompilasi. Ada beberapa paket development yang perlu diinstall yaitu:
Paket php development:

$ sudo apt-get install php5-dev

paket ffmpeg saran dari goose blog:

$ sudo apt-get install ffmpeg libavformat-dev libavcodec1d libavformat1d

paket ffmpeg saran dari escapegoat.org:

$ sudo apt-get install liblame-dev libfaad2-dev libfaac-dev libxvidcore4-dev liba52-0.7.4 liba52-0.7.4-dev libx264-dev libdts-dev libgsm1-dev libvorbis-dev libdc1394-13-dev checkinstall build-essential gcc


Langkah kedua, download



Untuk langkah ini dan seterusnya, saya mengikuti panduan dari goose blog. Jika Anda ingin mengikuti panduan dari escapegoat.org silahkan saja dicoba :)

Download source code ffmpeg-php dari sourceforge.net. Saat saya melakukan ini, alamatnya adalah :
http://downloads.sourceforge.net/ffmpeg-php/ffmpeg-php-0.5.2.1.tbz2?modtime=1207482494&big_mirror=0

Langkah ketiga, kompilasi



Lakukan ekstrak terhadap file ffmpeg-php-0.5.2.1.tbz2 dengan perintah :

$ tar jxvf ffmpeg-php-0.5.2.1.tbz2


Setelah itu, masuklah ke direktori ffmpeg-php-0.5.2.1 hasil ekstraksi dengan perintah:

$ cd ffmpeg-php-0.5.2.1


dan lakukan perintah berikut ini untuk mengkompile modul ffmpeg-php :

$ phpize5
$ ./configure
$ make
$ sudo make install


Perintah-perintah diatas akan mempersiapkan source code ffmpeg-php, mengkompile-nya, dan menginstallnya di direktori modul php. Lokasi modul php akan terlihat saat perintah terakhir dijalankan. Ini hasil pada sistem yang saya gunakan:

$ sudo make install
Installing shared extensions: /usr/lib/php5/20060613+lfs/


Langkah keempat, konfigurasi php.ini



Setelah modul selesai dikompile dan diinstall, sekarang kita perlu menambahkannya pada php.ini, agar modul dikenali dan diload oleh php. Saran dari escapegoat.org maupun dari goose blog adalah mengedit file php.ini, tetapi saya tidak setuju dengan ini. Ada mekanisme yang lebih mudah daripada harus mengedit file php.ini.

Saya tidak tahu sejak kapan fitur loading konfigurasi secara dinamis ada, tetapi Debian yang saya gunakan tahun lalu sudah memiliki fitur ini. Saya juga tidak tahu nama resminya apa. Konfigurasi apache dan php di ubuntu maupun debian bukan 1 file lagi, tetapi sudah dipecah-pecah menjadi file-file kecil yang dapat diload secara otomatis ketika server dihidupkan. Fitur ini memudahkan kita menambahkan konfigurasi kustom dan tidak perlu takut konfigurasi kita ditimpa saat melakukan upgrade.

Folder konfigurasi dinamis php.ini ada di /etc/php5/conf.d. Di direktori ini telah ada banyak file-file .ini, masing-masing meload modul sesuai dengan nama filenya. Untuk menambahkan modul ffmpeg-php hasil kompilasi kita tadi, kita cukup membuat file ffmpeg.ini di direktori ini dan isikan konfigurasi berikut ini:

# configuration for ffmpeg-php module
extension=ffmpeg.so


Langkah kelima, restart apache



Sekarang tiba saatnya kita menguji dan menggunakan modul ffmpeg-php. Restart apache dengan perintah :

$ sudo /etc/init.d/apache2 restart


Buka halaman php yang memanggil fungsi phpinfo(); menggunakan browser. Jika instalasi ffmpeg-php sukses, maka modul ffmpeg-php akan tampil di halaman phpinfo ini dan modul ini siap untuk digunakan.

Selamat menginstall dan menggunakan ffmpeg-php

Langkah-langkah membuat Hoax

Menyambung posting saya lang lalu, saya pernah mendapatkan tulisan dibawah ini lewat milis beberapa tahun lalu. Tulisan ini bukan untuk menyuruh Anda semua membuat hoax, tetapi untuk membekali diri agar tidak terkecoh dengan hoax yang banyak beredar.

Semoga bermanfaat bagi pembaca semua.

------

Date: Wed, 15 Mar 2006 14:02:02 +0700 (WIT)

Beberapa orang masih bingung membedakan antara spam dan hoax. Gampangnya,
spam adalah email yang berisi iklan suatu produk/website tertentu dimana
kita tidak menginginkan menerima email tersebut, keterangan lengkap bisa
dilihat di wiki. Sementara itu, hoax adalah berita bohong atau berita
palsu.

Hoax beredar di mana saja: email, bulettin friendster, Yahoo Messenger,
bahkan SMS. Sebelum dapat membedakan hoax dan bukan, mari kita belajar
membuat hoax.

Langkah-langkah membuat hoax.
- Pilih topik yang unik
Tidak harus berhubungan dengan dunia komputer, boleh kesehatan, keuangan,
kemanusiaan, atau bahkan tentang cuaca. Coba yang sepele dulu, tapi setiap
hari digunakan orang, misalnya "mouse".

- Cari 'masalah'
Carilah yang kira-kira akan membuat orang mengernyitkan dahi dan berupaya
untuk memberitahukan teman-temannya. Misalnya:

"Penggunaan optical mouse dapat menimbulkan Kanker"

- Gunakan istilah-istilah ilmiah
Usahakan yang sudah diketahui oleh banyak orang. Jangan lupa berikan
data-data berupa angka.

"Kenyamanan optical mouse ternyata mempunyai efek samping yang berbahaya.
Tiga tahun semenjak peluncuran pertama optical mouse oleh microsoft, telah
ditemukan ribuan kasus kelainan pada jaringan tangan akibat radiasi yang
dipancarkan mouse. Optical mouse bekerja dengan memancarkan gelombang
elektromagnetik frekuensi tinggi ke permukaan di bawahnya. Frekuensi yang
digunakan jauh lebih tinggi dari pada pada handphone.

Telah diketahui secara luas bahwa telapak tangan dan kaki merupakan pusat
ujung-ujung syaraf tubuh. Radiasi yang dirasakan oleh telapak tangan bisa
berpengaruh fatal pada kesehatan, karena menurut laporan WHO radiasi dari
mouse setara 5 kali radiasi handphone. Akan tetapi radiasi mouse menjadi
berbahaya karena dipegang terus menerus oleh pemakai komputer.

Pengaruh radiasi dari mouse lebih terasa pada produk-produk berkualitas
rendah, karena produk-produk yang bagus memiliki shield (pelindung) untuk
melindungi pergelangan tangan. "

- Tambahkan alamat kantor berita di internet

"WHO, GreenPeace, dan CNN sudah menghentikan penggunaan optical mouse
untuk seluruh kegiatan di kantornya, sementara Microsoft dan IBM
mengucurkan dana sekitar 2milyar dolar untuk kerjasama pembuatan pointing
device yang lebih aman.

Industri-industri hardware terbesar di cina dan taiwan berusaha
menutup-nutupi hal ini. Jika diperhatikan, mouse-mouse optical yang
beredar di pasaran saat ini diproduksi oleh merk-merk yang tidak terkenal,
padahal itu hanyalah sisa produksi industri besar yang sudah menghentikan
penjualan."

- Berikan solusi yang tidak kalah gebleknya

"Untuk itu, cobalah memegang mouse hanya di saat diperlukan saja.
Berlatihlah menggunakan Hotkey (Ctrl-C, Ctrl-V untuk kopi paste).
Kembalilah menggunakan mouse model lama (bola)".


- Tambahkan kata-kata ajaib

"Sekedar untuk berjaga-jaga, seorang temanku sudah kena 2 hari yang lalu.
Tolong teruskan ke orang-orang yang anda sayangi".

*hihihi*

- Berikan efek forward.
Agar seolah-olah email ini didapat dari kalangan eksklusif, atau dari
milis yang berkaitan, beri efek forward pada judul email

"Fwd:[milis-kesehatan]Mouse Optical dapat menyebabkan kanker
(PENTING!!!)".

Gampang? Tentu Saja
Dari uraian diatas semoga bisa terlihat betapa mudahnya orang membuat hoax
di internet. Oleh karena itu, setelah dapat membuat hoax sendiri seperti
di atas, kita dapat membedakan mana berita hoax dan mana berita yang
benar. Semakin banyak orang yang bisa mengerti ciri-ciri hoax, semakin
sedikit sampah yang akan beredar di internet.

Bagaimana memeriksa apakah suatu berita itu Hoax atau bukan?
1. Gunakan logika saja. misalnya "forward berita ini sebagai tanda bahwa
account anda aktif, karena friendster terlalu penuh dan akan menutup
account yang tidak aktif". Yang benar saja gitu loh, dengan satu query di
database saja sudah kelihatan kapan suatu account terakhir login, lagipula
mana ada online industry yang menutup kliennya dengan semena-mena.
2. Jika ada link, coba cari di link tersebut
3. Tanyakan pada rekan yang lebih memahami hal ini
4. Tanya paman google

Dalam urutan 'penyampah internet', menurutku hoax berada setingkat lebih
tinggi daripada spam. Orang membuat spam untuk sekedar mencari makan,
mungkin untuk anak-anaknya atau istri-istrinya. Sedangkan orang membuat
hoax tak lain hanyalah untuk kepuasan pribadi : berhasil membohongi orang
banyak. (Junk mail tergolong sampah jinak)

Membuat hoax tidak menjadikan seseorang mendapatkan keuntungan apapun,
kecuali kesenangan semu karena 'hasil karya'nya beredar luas di internet.
Sementara itu, ribuan bahkan jutaan orang yang bekerja pada industri yang
berkaitan mengalami kerugian karena produknya tiba-tiba saja tidak laku.
Sementara ribuan orang yang lain mengalami kecemasan (fraud) akibat
membaca hoax tersebut.

Ketahuilah, hanya ciken yang membuat hoax dan menyebarkannya, dan hanya
idiot yang memforwardnya. Selamatkan internet dari sampah berbahaya,
sebarkan informasi ini pada teman-teman yang anda sayangi.

Kamis, April 10, 2008

Solusi menghadapi konten negatif

Setelah tulisan emosional saya sebelum ini, saat ini saya mencoba menuliskan solusi untuk masalah peredaran konten negatif, salah satunya berupa film Fitna. Tindakan pemerintah memblokir akses ke website yang mengandung konten negatif bagi saya sangat tidak efektif. Konten itu bukan milik website bersangkutan, tetapi dapat diletakkan disana oleh siapa saja dan dari mana saja.

Ibarat sebuah papan besar yang boleh ditempel dengan selebaran, poster, pengumuman, dll, maka seperti itu jugalah website seperti YouTube dan Multiply. Hanya karena ada satu selebaran negatif tertempel di papan itu, apa lantas kita harus melarang orang lain melihat keseluruhan papan? Yang harus dilakukan adalah menghubungi pengurus yang bertanggung jawab atas papan pengumuman tersebut, memberitahu dia bahwa ada selebaran yang tidak pantas berada disana. Saya yakin dengan cara ini, pengurus tersebut akan mencabut selebaran negatif yang ada tadi.

YouTube dan Multiply memiliki admin yang dapat menghapus konten negatif yang ada pada server mereka. Tidak perlu campur tangan pemerintah, siapapun bisa melakukan laporan kepada mereka tentang adanya konten negatif di server mereka. Laporan yang tepat pasti akan ditanggapi oleh mereka. Tidak perlu sampai boikot keseluruhan website, konten negatif yang banyak dikeluhkan oleh pengakses sebuah website pasti akan dihapus oleh admin website tersebut.

Pak Menteri Menkominfo tampaknya harus memperdalam ilmu kominfo-nya. Di negara ini memang 'wajar' pejabat diangkat bukan karena keahliannya, tapi karena alasan politik yang sering disebut 'politik balas budi'. Walaupun begitu, tidak ada kata terlambat untuk belajar. Banyak otak-otak cemerlang di negeri ini yang bisa diajak bertukar pikiran, sebelum suatu keputusan diambil. Kalau suatu urusan dilaksanakan oleh orang yang tidak memiliki keahlian, hal yang pasti terjadi adalah kehancuran. Sudah bukan masanya lagi 'pakar' gadungan dimintai pendapat tentang suatu hal yang bukan bidang keahliannya.

Pemblokiran website, sebuah eksperimen pemerintah... LAWAN!!!

Beberapa waktu lalu saya membaca berita tentang pemblokiran website YouTube oleh pemerintahan beberapa negara, diantaranya Thailand, Iran, dan Pakistan. Pemerintahan negara ini termasuk sukses dalam tuntutannya kepada YouTube untuk menghapus video yang tidak disukai oleh pihak pemerintah negara bersangkutan. Thailand mempermasalahkan video yang menghina raja mereka. YouTube akhirnya mengikuti tuntutan Thailand dan menghapus video tersebut dari koleksi video yang mereka miliki, dan YouTube pun bisa diakses kembali oleh warga Thailand. Thailand tidak sekali saja melakukan hal ini, tetapi dua kali, dan kedua-duanya tergolong sukses.

Kali ini hal yang sama dicoba dilakukan oleh pemerintahan NKRI. Pemerintahan kita ini tampaknya tidak mau kalah dari negara tetangga. Mereka ingin menguji keefektifan dari UU ITE yang baru saja disahkan oleh para wakil rakyat yang terhormat itu. Surat sakti dari menteri pun langsung dikirimkan ke penyelenggara jasa internet / ISP. Ancaman pencabutan izin usaha tampaknya cukup ditakuti oleh para perusahaan penyelenggara jasa internet, sehingga sekarang saya akhirnya menikmati internet tanpa YouTube, Multiply, dan beberapa website lain yang ikut diblok.

Sebuah eksperimen, pastilah menunggu hasil. Saya yakin bahwa pemblokiran beberapa website ini hanyalah eksperimen pemerintah. Apa kira-kira hasil yang diharapkan? Saya menduga adalah sikap nrimo dari kita semua, pada pengguna jasa internet. Jika eksperimen ini sukses, di masa mendatang akan banyak situs-situs lain yang akan 'diberangus' oleh pemerintahan dengan berbagai alasan 'klise' seperti yang selalu kita dengar selama ini. Mengingat tahun depan adalah masa pemilu, maka bisa jadi, ini adalah persiapan dari para pemegang tampuk pemerintahan saat ini untuk mencoba mengendalikan informasi yang berada di ruang maya internet. Seperti tulisan Pak Budi, selamat datang Orde Baru 2.0.

Apa yang harus kita lakukan? Hanya ada satu kata ... lawan. Ini yang banyak beredar di milis dan forum-forum pembahasan tentang pemblokiran ini. Kita harus dapat bergerak bersama, melawan tindakan pemerintah yang akan mengekang dan mengendalikan informasi. Mari kita bersama menggagalkan eksperimen pemerintah yang satu ini. Sudah cukup media cetak dan elektronis saja yang dikuasai oleh tangan-tangan pemerintahan, jangan sampai tangan-tangan kotor itu ikut mencekik media internet.

Mari kita bersama mengentaskan kebodohan yang disuapkan oleh pemerintah agar rakyatnya tetap dalam kegelapan dan mudah diatur. Mulailah rajin menulis di media internet, suarakan aspirasi Anda semua. Mari berbagi ilmu, sekecil apapun itu, melalui internet. Ilmu dibagikan akan semakin bertambah.

Kepada pemerintah NKRI, kalian tidak akan mampu membodohi kami terus-menerus. Janji-janji manis dari mulut kalian sudah bosan kami dengar. Kami sangat kasihan dengan kalian yang sangat kelaparan, sehingga aspal, minyak tanah, sembako, bahkan makanan jatah rakyat kecil pun ikut kalian makan sendiri. Tak usah mengalihkan perhatian kami ke masalah-masalah sepele seperti pemblokiran internet ini. Kebusukan pasti akan tercium juga, walau susah payah kalian sembunyikan.

Bandung, 10 April 2008 14:11 WIB

Liferea, a powerfull rss reader

Sudah dua hari ini thunderbird yang saya gunakan untuk membaca RSS Feed mengalami gangguan. RSS yang biasanya ditampilkan dalam bentuk summary, tiba-tiba saja menjadi ditampilkan isi websitenya. Hal ini tentu saja membuat waktu loading content menjadi cukup lambat. Padahal tujuan saya berlangganan RSS Feed adalah supaya saya tidak perlu mengunjungi website untuk melihat berita / konten terbaru. Bug ini sangat mengesalkan, karena thunderbird juga menjadi berulah, sehingga saya tidak dapat mengedit setting subscribe RSS Feed yang ada.

Akhirnya saya mencoba mencari aplikasi alternatif untuk membaca RSS Feed. Saya mengunjungi halaman wikipedia ini yang memuat list aplikasi RSS reader.

Pertama saya mau mencoba aplikasi Akregator, tetapi setelah melihat keterangan dan tampilan aplikasi Liferea, saya jadi terterik untuk mencoba aplikasi ini. Desktop yang saya gunakan adalah GNOME, sehingga saya mengusahakan menggunakan aplikasi berbasis GTK, kecuali jika aplikasi yang saya butuhkan belum ada padanannya yang setara, seperti aplikasi Basket Note Pads.

Saya mengekspor list RSS Feed dari thunderbird ke sebuah file.opml. Setelah Liferea terinstall, saya lalu mengimport file .opml tadi ke dalam Liferea. Liferea segera membuatkan folder yang serupa dengan struktur dari thunderbird. Saya suka hal ini, karena saya sudah mengatur tiap RSS feed pada folder-folder tersendiri sesuai dengan kategorinya. Fitur ini tidak saya temui pada aplikasi straw yang sebelumnya saya coba.

Liferea berjalan lebih ringan daripada thunderbird. Liferea pun mampu meload gambar yang terdapat pada feed dengan cukup cepat. Akhirnya saya mematikan cek otomatis untuk rss di thunderbird. Feed-feed yang pernah didownload saya biarkan tetap ada. Thunderbird sekarang murni hanya untuk keperluan email saja. Memori laptop yang pas-pasan membuat saya tidak bisa menghidupkan thunderbird bareng dengan eclipse. Jadi selama jam kerja, thunderbird saya matikan saja, dan dihidupkan hanya sewaktu pagi hari ketika baru datang, dan nanti sore ketika akan pulang. RSS Feed tetap dapat saya nikmati menggunakan Liferea yang ringan dan powerfull.

Selasa, April 08, 2008

HADE yang tidak hade

Siang tadi, di lapangan Gasibu Bandung, ada kampanye oleh pendukung calon gubernur dan wakil gubernur Jabar, yaitu HaDe. Efek samping yang dibawa oleh kegiatan kampanye ini adalah kemacetan pada jalan Surapati dan jalan sekitarnya, seperti jalan di samping Telkom Japati. Di dalam hati saya berkata, "Belum jadi gubernur aja udah bikin orang susah, gimana kalo udah jadi gubernur yah??"

Saya sungguh tidak mengerti dengan kegiatan kampanye. Hampir tidak ada manfaat positif yang diterima masyarakat sekitar tempat kegiatan kampanye diadakan. Yang dirasakan justru kekesalan akibat macetnya jalan raya. Belum lagi atribut berupa poster, baliho, selebaran yang selain mengganggu, tentunya memakan biaya yang tidak sedikit. Sungguh suatu pemborosan yang nyata. Bandung sudah kelebihan sampah, tidak perlu ditambah dengan atribut-atribut lagi.

Pemilihan gubernur nanti, saya sudah memastikan diri untuk tidak memilih. Tidak ada hal positif dari ketiga pasangan calon gubernur dan wakil gubernur yang menarik perhatian saya. Semua menebar janji klise yang sama di setiap pemilihan pemimpin. Janji-janji muluk yang tidak dapat ditagih di kemudian hari sewaktu mereka akhirnya menjabat.

Sabtu, Maret 22, 2008

Privacy Policy

This policy is valid from 23 March 2008


This blog is a personal blog written and edited by me. This blog accepts forms of cash advertising, sponsorship, paid insertions or other forms of compensation.

The compensation received will never influence the content, topics or posts made in this blog. All advertising is in the form of advertisements generated by a third party ad network. Those advertisements will be identified as paid advertisements.

The owner(s) of this blog is not compensated to provide opinion on products, services, websites and various other topics. The views and opinions expressed on this blog are purely the blog owners. If we claim or appear to be experts on a certain topic or product or service area, we will only endorse products or services that we believe, based on our expertise, are worthy of such endorsement. Any product claim, statistic, quote or other representation about a product or service should be verified with the manufacturer or provider.

This blog does contain content which might present a conflict of interest. This content will always be identified.


To get your own policy, go to http://www.disclosurepolicy.org

Jumat, Maret 21, 2008

Fitur Feed Redirect pada Blogspot

Saat saya mengutak-atik setting blog saya ini, saya menemukan fitur feed redirect. Fitur ini akan mengarahkan feed default dari blogspot ke layanan feed lain, seperti FeedBurner. Saya akan membahas tentang FeedBurner pada tulisan mendatang.

Untuk menggunakan fitur ini, dari Dashboard blogger, klik tab Settings, lalu pilih menu Site Feed. Pada halaman ini akan ada tiga pilihan setting yang dapat diatur. Setting pertama adalah pilihan berapa banyak dari tulisan kita yang akan disertakan pada feed, apakah semuanya, sebagian, atau tidak disertakan sama sekali.

Setting kedua adalah setting "Post Feed Redirect URL". Jika Anda telah memiliki feed dari penyedia layanan feed, isikan url feed di kolom isian yang disediakan. Setelah tombol Save Settings di-klik, feed dari blog Anda akan diarahkan secara default ke feed dari layanan feed yang Anda gunakan tersebut. Coba saja lihat feed pada blog ini, sudah saya set agar diarahkan ke feed yang saya buat di FeedBurner.

Semoga bermanfaat.

Sabtu, Maret 15, 2008

Pentingnya Backup Data

Hari ini saya memperoleh pengalaman berharga, bagaimana rasanya kehilangan data penting di harddisk. Kejadian ini bermula ketika saya hendak memformat ulang partisi data di harddisk laptop dari NTFS menjadi ext3. Ukuran partisi ini adalah 30GB dan data yang ada di dalamnya tinggal 16GB. Saya memiliki sebuah harddisk laptop di dalam enclosure berukuran 80GB, tetapi kapasitas yang tersisa pada harddisk eksternal ini tinggal sekitar 2 GB. Saya juga memiliki sebuah harddisk 3,5" yang telah saya miliki sejak tahun 2001, berkapasitas 20GB dan sedang tidak digunakan, sehingga saya memutuskan untuk menyalin isi partisi data ke harddisk ini.


Harddisk 3,5" 20GB ini saya miliki sejak pertama kali memiliki komputer. Ketika PC saya jual karena telah memiliki laptop, harddisk ini tidak ikut saya jual. Saya lalu membeli enclosure merk "ROCK mobile disk" dan menggunakan harddisk ini sebagai tempat menyimpan data yang tidak muat di harddisk laptop. Setelah memiliki harddisk laptop ekternal 80GB diatas, harddisk ini dipensiunkan. Sempat terpikir hendak dijual, tetapi saya belum sempat melakukannya.


Saya ingin mengubah format partisi data dari NTFS menjadi ext3, karena saat ini saya bekerja penuh menggunakan Ubuntu. Ubuntu memang bisa membaca dan menulis partisi NTFS, dan memang semua data saya masih ada di partisi itu, agar dapat digunakan baik di Windows maupun di Ubuntu. Kelemahan partisi NTFS adalah fragmentasi file yang hanya dapat di defrag dari Windows. Fragmentasi ini ikut mempengaruhi kinerja Ubuntu, terutama ketika saya menjalankan aplikasi Java seperti Eclipse, SQL Developer, dan Tomcat5.5


Saya pun menghubungkan harddisk 20GB ke laptop lalu menyalin isi partisi data ke harddisk itu. Harddisk saya format bertipe NTFS juga. Proses penyalinan data saya lakukan melalui Windows menggunakan aplikasi TeraCopy. Proses ini cukup lama, sekitar 3 jam-an. Setelah selesai, saya pun me-reboot laptop ke Ubuntu untuk merubah format partisi ini menjadi ext3. Ubuntu sempat hang, kemungkinan karena aplikasi Gnome-do. Ubuntu di laptop ini memang sudah lama tidak di-reboot, selalu di-hibernate saja ketika dimatikan. Setelah saya reboot, Ubuntu berjalan dengan normal kembali. Saya menghubungkan harddisk 20GB dan data dapat saya akses. Saya lalu me-unmount harddisk ini, dan rupanya inilah kesalahan saya yang fatal.


Saya menjalankan gparted melalui menu System > Administration > Partition Editor. Proses format partisi selesai dalam waktu 47 detik. Saya mencoba me-mount partisi ini, tentunya setelah mengedit file /etc/fstab dan mengubah UUID dari partisi ini menjadi UUID yang baru, dan tipe pertisi dari ntfs menjadi ext3. Untuk melihat UUID partisi, dapat menggunakan Hardware Information yang terdapat pada menu System > Preferences > Hardware Information. Cari partisi harddisk pada tree hardware di bagian kiri aplikasi, klik partisi yang hendak dilihat, lalu klik tab advance di bagian kanan. Atribut uuid ada di baris paling bawah. Copy nilainya dan isikan ke file /etc/fstab menggantikan nilai UUID partisi yang lama.


Setelah partisi ini berhasil dimount, saya kembali menancapkan harddisk eksternal 20GB ke port USB. Ditunggu 5 detik 10 detik, kok ga muncul di desktop, icon harddisk usb. Saya coba lepas lalu colok lagi tetap tidak berpengaruh. Saya coba matikan harddisknya, lalu dinyalakan lagi, lho kok sekarang malah harddisk tidak berputar. Sayapun menjalankan System Log, dan ini yang saya dapatkan:


Mar 14 22:46:51 ubuntuku kernel: [ 1162.816000] usb 5-5: new high speed USB device using ehci_hcd and address 4

Mar 14 22:46:52 ubuntuku kernel: [ 1162.972000] usb 5-5: configuration #1 chosen from 1 choice

Mar 14 22:46:52 ubuntuku kernel: [ 1162.976000] scsi3 : SCSI emulation for USB Mass Storage devices

Mar 14 22:47:02 ubuntuku kernel: [ 1173.756000] usb 5-5: USB disconnect, address 4

Mar 14 22:47:02 ubuntuku kernel: [ 1173.756000] scsi 3:0:0:0: scsi: Device offlined - not ready after error recovery

Mar 14 22:49:08 ubuntuku kernel: [ 1299.552000] usb 5-3: new high speed USB device using ehci_hcd and address 5

Mar 14 22:49:08 ubuntuku kernel: [ 1299.684000] usb 5-3: configuration #1 chosen from 1 choice

Mar 14 22:49:08 ubuntuku kernel: [ 1299.684000] scsi4 : SCSI emulation for USB Mass Storage devices

Mar 14 22:49:19 ubuntuku kernel: [ 1310.464000] usb 5-3: USB disconnect, address 5

Mar 14 22:49:19 ubuntuku kernel: [ 1310.464000] scsi 4:0:0:0: scsi: Device offlined - not ready after error recovery



Damn, harddisk ini rusak disaat sedang menampung data-data saya. Rasanya benar-benar tidak percaya hal ini terjadi pada diri saya. Saya boot lagi ke Windows, tetap saja harddisk 20 GB ini tidak mau diakses. Dia wafat dengan sukses, membawa serta data-data saya ke tempat peristirahatannya. Satu-satunya harapan saya adalah partisi data yang baru saja diformat menjadi ext3. Saya segera me-unmount partisi ini dan mengedit file /etc/fstab untuk memberi tanda komentar agar partisi ini tidak di-mount saat Ubuntu saya reboot. Saya langsung mencari aplikasi recovery partisi lewat google. Ada dua aplikasi yang saya temukan, yaitu DiskInternals NTFS Recovery dan Windows Data Recovery. Karena rekening online saya belum ada uangnya, terpaksa saya mencari alternatif di situs warez, dan saya mendapatkan aplikasi Activ@ Partition Recovery. Saya segera mendownload aplikasi ini, tetapi karena file ada di rapidshare, saya harus menunggu sekitar satu jam lebih sebelum dapat mendownloadnya.


Karena sudah lelah, sayapun sempat tertidur menunggu habisnya timer rapidshare. Tentu saja tidur saya tidak bisa nyenyak, membayangkan data-data yang ada di partisi itu. Akhirnya saya bisa mendownloadnya. Saya sempat tertidur lagi, dan ketika terbangun, alhamdulillah aplikasi telah selesai didownload dan tidak corrupt, walaupun ukuran file yang saya dapat kurang sekitar 1 byte dari ukuran file aslinya. File ini dapat saya ekstrak dan install dengan baik.


Setelah instalasi selesai, saya langsung menjalankannya. Aplikasi ini mendeteksi partisi ext3 yang baru saya iptakan tadi. Sayapun menutup aplikasi lalu menjalankan Disk Management untuk menghapus partisi ext3 tadi. Saya cukup lama mengecek ulang agar saya tidak salah hapus. Kalau sampai partisi ubuntu yang terhapus, bener-bener habis jatuh tertimpa tangga saya. Setelah partisi data saya hapus, saya kembali menjalankan aplikasi Activ@ Partition Recovery. Saya melakukan scanning pada free space harddisk, bekas partisi data tadi berada. Setelah menunggu cukup lama, akhirnya APR menemukan partisi NTFS berukuran 30GB di bagian harddisk tersebut. Saya klik tombol recover dan partisi NTFS muncul kembali. Ketika saya coba browse menggunakan Window Explorer, partisi ini tidak dapat dibaca. Sayapun lalu menjalankan aplikasi APR File Recovery yang masih bagian dari Activ@ Partition Recovery.


Saya melakukan scan pada partisi data yang telah ditemukan sebelumnya. Alhamdulillah data-data saya masih ada disana. Saya lalu menghapus data2 lama pada harddisk eksternal 80GB, sehingga akhirnya tersisa space sebesar 15GB. Pada partisi C: juga masih ada space 3GB yang dapat saya gunakan sebagai tempat menyalin data dari partisi data. Sayapun segera menyalin data yang ditemukan tadi. Sayapun akhirnya bisa tersenyum dengan tenang karena data-data saya dapat saya peroleh kembali.


Semoga kejadian ini menjadi pengingat bagi saya, bahwa backup data itu sangat-sangat penting sekali. Gunakan media yang dapat diandalkan sebagai penyimpan data penting, dan selalu siapkan backup. Dulu saya sering merasa sayang memanfaatkan space harddisk yang tersisa untuk backup data, tetapi sekarang saya telah merasakan sedihnya kehilangan data. Masih untung saya tidak mengalami kehilangan laptop beserta datanya, dan semoga hal ini tidak pernah terjadi pada saya. Dan saya sangat beruntung bisa mendapatkan data-data saya kembali.


Jika nanti rekening online saya telah terisi, saya akan membayar biaya lisensi aplikasi Activ@ Partition Recovery yang telah saya gunakan. Aplikasi ini telah menyelamatkan data saya dan pembuatnya berhak mendapatkan haknya. Semoga saya tidak lupa melakukannya nanti.

Rabu, Maret 12, 2008

So much idea, so little time available

Pada perjalanan pulang dari Jakarta ke Bandung kemaren, banyak ide tulisan yang muncul di pikiran saya. Sayangnya saat itu saya tidak bisa langsung menuliskannya di blog ini. Saat itu saya sedang menaiki bis Jakarta - Garut. Kami naik di dekat gerbang tol Cibening. Bus saat itu sudah penuh dan untung masih tersisa dua tempat duduk. Kondisi seperti itu sangat tidak memungkinkan saya untuk menulis.

Mudah-mudahan beberapa waktu kedepan saya dapat menyempatkan diri menuliskannya. Selain waktu, kemauan untuk menulis saya juga masih rendah, seringkali rasa malas itu timbul.

Selasa, Maret 11, 2008

Ke Jakarta lagi

Sudah cukup lama saya tidak ke Jakarta. Pagi ini saya berangkat ke Jakarta, dalam rangka presentasi tender proyek.

Tadi sewaktu menunggu di stasiun, saya browsing mencari aplikasi java untuk posting blog langsung dari hp. Ada satu aplikasi yg saya dapatkan dari www.getjar.com,tetapi entah kenapa aplikasi itu tidak bisa terkoneksi ke internet. Akhirnya saya menggunakan Opera Mobile untuk membuka blogger.com untuk memposting tulisan ini. Browser Opera ini cukup nyaman digunakan untuk brosing internet langsung di HP.

Kalo dah punya PDA bakal lebih nyaman lagi berinternet dimana saja selama masih ada sinyal data. Kapan ya bisa beli satu :-/ :-D

Senin, Maret 03, 2008

Test aplikasi gnome blog

Tulisan ini saya buat menggunakan aplikasi gnome-blog yang berjalan di Sistem Operasi GNU/Linux Ubuntu 7.10. Aplikasi ini sangat sederhana. Pertama kali dijalankan, akan ditampilkan jendela login dengan 8 pilihan tipe blog yang digunakan. Blogger termasik tipe blog yang didukung oleh aplikasi ini. Setelah saya memasukkan username dan password, akan ditampilkan pilihan blog yang saya miliki di blogger. Saya memiliki 3 blog dan saya dapat memilih post ini akan masuk ke blog yang mana.


Setelah saya mengklik tombol close, akan tampil sebuah jendela sebagai tempat pengetikkan tulisan. Hanya tersedia 5 tombol di bagian bawah jendela, yaitu tombol untuk membuat tulisan menjadi bold, italic, memasukkan link, dan tombol preference, serta tombol Post Entry.


Sayang sekali tidak ada fasilitas untuk mengedit kode html tulisan secara langsung dan fasilitas untuk mengelola tulisan yang telah ada sebelumnya. Sementara ini saya masih akan menggunakan ScribFire, add-ons di Firefox yang saya gunakan untuk memasukkan tulisan ke blog yang saya miliki.

Jumat, Februari 29, 2008

Speedy mati karena kabel Telkom di Palembang putus

Hari ini pelanggan Telkom Speedy tidak bisa terkoneksi ke internet, karena terputusnya kabel jaringan Telkom. Lokasi kabel yang terputus berada di Palembang, yang menurut kabar yang saya dengar, hal ini terjadi akibat pembangunan fly-over di Palembang. Entah benar apa tidak, kita tunggu saja pernyataan resmi dari pihak Telkom.

Terputusnya kabel ini mengakibatkan seluruh koneksi Telkom ke luar negeri terputus. Koneksi hanya dapat dilakukan ke situs web lokal, melalui IIX. Seluruh pengguna internet yang menggunakan Telkom ikut terkena imbasnya, baik pengguna Speedy, TelkomnetInstant, maupun jaringan internet di kantor Telkom itu sendiri.

Saya beruntung karena ISP yang saya gunakan, yaitu Centrin, tidak mengalami gangguan. Koneksi internet tetap lancar ke dalam dan luar negeri. Coba kalau ISP ini adalah reseller jaringan Telkom, pasti akan ikut terkena dampak putusnya kabel Telkom ini.

Semoga saja kondisi ini dapat segera diatasi dan koneksi internet ke luar negeri dapat terhubung kembali. Semoga Telkom dan penyelenggaran layanan koneksi internet lainnya dapat belajar dari kejadian ini. Internet awalnya dibangun untuk dapat bertahan dari bencana terhadap infrastruktur. Tetapi belakangan ini, koneksi internet menjadi sangat tergantung pada satu jalur keluar. Apabila jalur tersebut mengalami gangguan, terjadilah kiamat kecil internet. Sungguh sayang tujuan awal internet tidak dapat tercapai.


Kamis, Februari 28, 2008

Lagi-lagi spam lewat messenger

Siang ini kembali saya mendapatkan pesan ini lewat YM :
forward yah.....TOLONG DI RANTAIKAN... dicari golongan darah AB, danbersedia membantu seorang sahabat: dian_USD , ekonomi 06 BINUS kankerotak stadium 4. Hubungi Ketut (0818041674 97). Tolong disebarkan.. .Thanks before ... Cuma copy paste doank udah ngebantu orang loch

Sudah setahun lebih sejak pertama kali saya mendapatkan pesan seperti ini. Kata-katanya pun persis sama. Sepertinya yang ikut menyebarkan pesan ini benar-benar melakukan copy-paste tanpa pernah melakukan pengecekan ulang apakah berita ini benar atau tidak.

Kali ini saya iseng nanya ke teman yang memberi pesan ini. Ini percakapannya:
Donny Kurnia: masih butuh ya?
teman1: duh..kurang tau ..don....tapi baru masuk messagenya ke adhit barusan...
Donny Kurnia: dari siapa? dah pernah konfirmasi sebelumnya?
teman1: disitu ada contact personnya khan..
Donny Kurnia: maksudku, kamu sendiri udah pernah konfirmasi dulu sebelum ikut2an menyebarkan lewat kopi-paste ini belum?
Donny Kurnia: soalnya dah setahun lebih sejak pesan ini pertama kali nyebar
teman1: teman2: ini forward-an dah lama bt ada..
teman2: dan FYI, ini berita bohong...
teman2: yg namanya ketut itu menjual darah yg dia kumpulin...
teman2: udah ada org yg ketipu.
teman2: thnx.. teman1: oh..gitu....
teman1: thx 4 your information...
teman1: oh...belon..sorry...
teman1: ntr ge forward-in lagi..berita ini ke atas..soriii...
Donny Kurnia: :)
teman1: teman2: ini forward-an dah lama bt ada..
teman2: dan FYI, ini berita bohong...
teman2: yg namanya ketut itu menjual darah yg dia kumpulin...
teman2: udah ada org yg ketipu.
teman2: thnx.. teman1: oh..gitu....
teman1: thx 4 your information...
teman1: jadi bwt yg mau nolong..tolong di check dulu kali yah informasi nya...(cuman menginformasikan doang..)
Donny Kurnia: makanya, selalu crosscheck before spread any news :)

Itulah berita yang saya dapatkan. Saya juga tidak bisa melakukan konfirmasi, apakah yang dikatakan oleh teman saya (saya kasi inisial teman2) itu benar, bahwa ketut menjual darah yang dia dapatkan. Saya sendiri pernah membaca tentang proses transfusi darah di blog seorang dokter bernama Tonang Dwi Ardyanto. Memang ada kondisi yang membutuhkan ketersediaan darah, sedangkan persediaan darah di PMI kadang terbatas.

Pesan berantai yang ada bukan hanya berita ini saja. Banyak berita-berita tidak jelas lainnya yang sering menyebar lewat sarana messenger, milis, email berantai, forum dan media lainnya. Kita harus selalu bersikap teliti dalam menerima informasi, apalagi ikut menyebarkan informasi yang kita terima. Cek kembali sumber berita / informasi tersebut. Jangan menyebarkan berita / informasi yang tidak bisa kita konfirmasi kebenarannya. Putuskan penyebaran pesan berantai tersebut, biarlah kita yang menjadi orang terakhir yang menerimanya.