Skip to main content

Posts

Showing posts from 2004

PostGreSQL :: Hitung Umur

Ternyata untuk menghitung umur dari data yang disimpan di PostGreSQL sangat gampang. PostGreSQL sendiri sudah menyediakan fungsi yang mendukung. Beberapa fungsi yang bisa dipakai adalah AGE dan EXTRACT. AGE dipakai untuk menghitung umur dari sebuah data, dibandingkan dengan hari ini, atau dengan data lain (tipenya timestamp). Misal: age(timestamp '1980-09-27'), akan menghasilkan nilai (bertipe interval) "24 years 1 mon 25 days". Nah, kalau mau mengambil nilai tahunnya saja, tinggal menggunakan EXTRACT Contoh: EXTRACT(year FROM AGE(timestamp '2001-09-27')), hasilnya akan jadi 24.

PHP :: Selisih Jam

Setelah kemarin kesulitan untuk melakukan increment ataupun decrement terhadap variabel waktu (date/time) di PHP, kali ini nemuin masalah untuk mencari selisih waktu (dari satu jam ke jam tertentu), yang perlu untuk ngitung lembur karyawan. Tadinya kepikiran untuk buat fungsi sendiri, yang flow -nya kira-kira begini: - masing-masing dipisah menjadi jam, menit, detik - bandingkan antara keduanya. - lakukan pengurangan terhadap masing-masing komponen (jam, menit dan detik) - gabungkan hasil perhitungan ... (selisih jam + selisih menit + selisih detik) Tapi waktu aku ingat kasus Next Date, ... muncul ide untuk menggunakan cara yang sama, yaitu memanfaatkan format UNIX timestamp, terus nyoba mencari selisihnya. TERNYATA BERHASIL !!! Flownya seperti ini: - masing-masing dipisah menjadi jam, menit,detik - ubah masing-masing ke format timestamp, gunakan fungsi mktime() - kurangkan kedua jam - hasilnya dibagi 60 (karena satuannya pakai menit), sementara selisih timestamp itu dalam detik Algori

PHP :: Next Date

Baru nyadar kalau ternyata di PHP nggak ada type data Date/Time, meskipun ada fungsi-fungsi untuk memanipulasi date/time itu. Padahal aku perlu ada operasi yang melibatkan tanggal, seperti iterasi berdasar tanggal, dari suatu tanggal awal ke tanggal akhir. Contohnya aja untuk mengetahui hari berikutnya. Kalau pakai VB tinggal nextDate = nextDate + 1; Gimana kalau pakai PHP???? Akhirnya setelah baca ebook tentang PHP, ada satu trick, yaitu memanfaatkan tipe timestamp standar UNIX. Caranya: - convert data ke timestamp - tambahkan dengan 86400 (1 hari = 24*60*60 detik) - timestamp diubah lagi ke format standard Misal: $tanggal = "2004-08-31"; //setelah ada proses parsing, misal memanfaatkan list dan explode list($thn,$bln,$tgl) = explode("-",$tanggal); //hasilnya //$thn = 2004; //$bln = 8; //$tgl = 31; //convert ke timestamp $tsTanggal = mktime("","","",$bln,$tgl,$thn); $tsNext = $tsTanggal + 86400; //next day //balikin ke format normal $n

[PostGreSQL] -- case sensitif

Akhir-akhir ini mulai belajar makai PostGreSQL, yang katanya lebih bagus dibanding MySQL. Untung Arif udah nginstall PphPgAdmin, jadi aku nggak usah main di consolenya Pg. Lumayan membantu juga, bisa buat cepet bikin database, tabel dan ngutak-atik isinya. Tapi fitur PhpPgAdmin masih kalah dibanding PhpMyAdmin. Berbeda dengan MySQL (atau mungkin gara2 settingnya ya), PgSQL ini lebih case sensitif. Sesuai koding standard di sini, nama table dan field memakai kaidah Camel, yang berarti bakal ada kombinasi huruf besar dan kecil. Waktu masih pakai MySQL, sintaks SQLnya biasa aja, sepertinya gak terpengaruh sama upper/lower case (alias case insensitif). Tapi waktu nyobain PgSQL ini (maklum, masih sangat pemula) aku sempat bingung. Kok error terus ya? Contohnya, ada tabel namanya hrdEmployee. Aku pengen ngambil semua data, pakai query select: " SELECT * FROM hrdEmployee ". Lha kok muncul pesan : Relation "hrdemployee" does not exist Bingung, tanya kanan-kiri, ternyata gak

Panoramic Image Viewer

Pagi-pagi Nanang udah nanya, apa bisa kliping image (entah istilah dari mana, aku sendiri bingung he hehe ..) pakai Javascript. Intinya sih, gimana caranya, sebuah gambar yang besar, bisa ditampilkan satu bagian tertentu (jadi seperti meneropong), terus sekelilingnya ada tombol untuk menggeser gambar itu. Jadi kotak peneropong tetap, tapi kalau tombol (up,down,left, right) dipencet, maka gambarnya akan geser seperti keinginan. Kepikiran untuk buat sendiri, tapi ternyata gak semudah yang dibayangkan. Coba aja cari dulu di internet, siapa tahu ada. Yang pertama kepikiran adalah lihat contoh javascript di server (yang dulu pernah ditaruh sama Arif). Karena merasa kurang lengkap, coba langsung ke sumbernya, di http://javascript.internet.com . Eh, malah di halaman pertama langsung ketemu. Thanks, God! Linknya di sini: http://javascript.internet.com/miscellaneous/panoramic-image-viewer.html Lumayan juga.

Memeriksa Angka

Beberapa hari ini sedikit-sedikit sudah mulai mengerjakan coding untuk proyek BIS. Yang aku buat masih beberapa modul yang mudah, yang hanya mengelola database (add, edit, delete). Karena ada data berupa angka (float ataupun integer), maka perlu ada pemeriksaan. Semula pemeriksaan hanya aku lakukan di PHP, namun kupikir-pikir gak ada salahnya kalau di Javascript juga dilakukan. Setelah beberapa kali mencari referensi (seperti biasa, aku paling jarang menghafal sintaks), akhirnya nemu juga cara untuk memeriksa apakah sebuah variabel nilainya angka atau bukan. Di PHP, ada fungsi is_numeric($value) , yang akan mengirim true jika $value adalah angka. Kalau di Javascript, aku pakai fungsi isNaN(value) , yang akan mengirim true jika value bukan angka.

PHP: dbClass

Sebelumnya, tiap bikin program dengan PHP aku selalu memanfaatkan PEAR:DB, soalnya sebelumnya Arif udah makai. Meski sangat membantu dan banyak keuntungan, tapi kalau ada error di sana aku jadi bingung. Makanya untuk proyek ERP yang lagi dikerjakan, aku rencana untuk membuat kelas sendiri, khusus menangani database. Jadi nantinya kalaupun ada perubahan database yang dipakai (misal dari PosgreSQL ke MySQL), perubahan hanya dilakukan di kelas tersebut. Dillah aku "daulat" untuk ngoprek dan buat kelas tersebut, dan lumayan juga. Ternyata nggak serumit yang kubayangkan. Setelah aku periksa, aku buat beberapa perbaikan, sedikit sih. Kodingnya seperti ini. class dbClass { var $strConn; // connection string var $dbCon; var $dbError; // fungsi untuk mengambil connection string // data disimpan dalam strConn function getConnString() { $this->strConn = "host=localhost port=5432 dbname=aska user=mahawan password=mahawan"; } //fungsi untuk konek ke datab

PHP :: Membuat konfigurasi sederhana

Biasanya untuk menyimpan konfigurasi yang dibuat dalam program PHP, aku makai PHP PEAR yang berguna untuk mengelola file INI. Aku pakai untuk beberapa program seperti SMS dan Excellent (soalnya ikut-ikutan Arif). Tapi ada kelemahannya, kalau sempat file INI itu ketebak namanya, terus diakses maka akan muncul daftar konfigurasinya. Wah, repot donk. Bisa sih diatasi dengan htaccess, tapi entar malah repot. Jadi aku rencana untuk membuat program pengelolaan konfigurasi itu sendiri. Jadi file ini bakalan aku ubah, jadi file conf.php. Jadi dia akan dianggap file php, tapi karena nggak standard, kalau diakses dari browser akan muncul pesan error. Masalahnya gimana cara membaca dan mengupdate data jika ada perubahan. Untuk membaca data, aku memanfaatkan function file: $arrLine = file($fileSetting); Dengan demikian otomatis semua isi file akan dimasukkan ke dalam array, baris demi baris. Lalu masing-masing baris dibaca isinya, dimasukkan ke variabel (array), terus dipakai sama PHP untuk proses
Register globals adalah salah satu setting dalam konfigurasi PHP, yang menentukan apakah variabel-variabel superglobal akan dapat diakses secara langsung atau tidak oleh script PHP. Misalnya, kalau status register globals adalah On, maka kita bisa langsung menggunakan $PHP_SELF, tapi kalau statusnya Off, kita harus memakai $_SERVER['PHP_SELF']. Ini berlaku juga untuk variabel-variabel yang dikirim oleh browser, baik dengan metode POST ($_POST[]), maupun metode GET ($_GET[]). Jika register globals diatur On, maka setiap variabel langsung bisa dipanggil sesuai namanya, misalnya ada variabel masukan dengan nama "id", bisa langsung diakses sebagai $id. Tapi kalau statusnya Off, maka pemanggilan langsung akan error, dan harus diakses dengan cara $_POST['id'] jika dikirim secara POST, atau $_GET['id'] jika dikirim melalui GET. Secara security, akan lebih aman jika register globals diatur Off, tapi pemrogramannya akan lebih repot. Sebenarnya hal ini sudah per

Instalasi Apache, PHP & MySQL

Karena ada yang mengalami kesulitan saat install Apache & PHP, kayaknya ada beberapa tips yang mendingan aku tulis di sini, sebagai petunjuk installasi itu. Mudah-mudahan masih valid Instalasi Apache, PHP, MySQL Install web server Apache, PHP dan MySQL. Tips: agar mudah, letakkan Apache di c:\Apache2, PHP di folder c:\php dan MySQL di c:\mysql Konfigurasi Apache Edit konfigurasi httpd.conf pada webserver Apache, biasanya ada di direktori conf, misalnya c:\apache2\conf\httpd.conf Tambahkan baris berikut di awal bagian LoadModule LoadModule php4_module c:/php/sapi/php4apache2.dll AddType application/x-httpd-php .php Cari bagian DirectoryIndex, lalu ubah menjadi : DirectoryIndex index.html index.html.var index.php Copy file C:\php\php4ts.dll ke folder C:\Apache2\bin Copy file C:\php\sapi\php4apache2.dll ke C:\Apache2\bin Copy file C:\php\php.ini-recommended ke folder C:\Apache2 Rename file C:\Apache2\php.ini-recommended menjadi C:\Apache2\php.ini Edit file C:\Apache2\php.ini. Sesuaika

Beda MySQL dengan MS SQL

Hari ini aku mencoba create table di MS SQL (MSDE) dengan memanfaatkan PHP. Jadi aku execute sebuah query string untuk membuat table. Asyik juga, sampai-sampai kepikiran untuk membuat program semacam PhpMyAdmin, khusus untuk MSDE ini. Ternyata aku temukan ada beberapa perbedaan: {mungkin daftarnya bisa lebih panjang} MySQL: auto_increment, MSDE: identity(1,1) Di MSDE, tipe integer tidak bisa dibatasi. Kalau di MySQL kan masih bisa dibatasi, misal int(2), int(4) dsb. Juga tipe Timestamp Di MSDE, dalam satu tabel hanya boleh ada satu field yang bertipe TimeStamp Di MSDE, daftar database disimpan di tabel sysdatabases (di database master), sedangkan daftar tabel ada di sysobjects, dengan kriteria tipe = 'U'. Itu yang aku temukan, nggak tahu kalau ada cara lain.

NULL Pointer

Hari ini sebenarnya aku agak bingung mau ngerjain apa. Kepikiran sih untuk ngecek TA-nya Elen, tapi ternyata source code yang dia kasih belum ada, jadi aku cuma terima dokument TA dia. Paling-paling aku rencana ikutan mempelajari DVD Player, terus ngerjain user guide untuk D'LaGate. Eh, pas Dillah ngetest D'LaGate lagi, ketemu masalah. Kalau ada pesan yang numpuk di HP, tidak terproses dengan benar. Malahan sms itu udah ditandai dibaca, tapi nggak kehapus .. wah, kenapa ya? Akhirnya aku ingat dulu Pak Iwan pernah melemparkan kasus ini. Jadi saat Comm membaca SMS masuk, yang dibaca adalah semua SMS, bukan satu-per-satu, jadi perlu di parsing. Wah kayaknya ini dia penyebabnya. Kerjaan lagi buatku .... he he he ... :( Akhirnya ketemu juga problemnya. Setelah di-debug, (dan menghabiskan banyak SMS -- untunnya Dillah pakai SMS gratisan dari IM3), akhirnya ketemu juga masalah yang membuat D'La Gate nge-hung ketika baca banyak SMS diterima. Penyebabnya adalah pengisian nilai '

Regex - Google Search

Selesai update website, kepikir untuk ngerjain fitur search di website. Kalau bikin sendiri kan susah, jadi mau memanfaatkan fasilitas google. Google emang menyediakan fasilitas untuk search, dengan membatasi pada situs tertentu. Caranya dengan nambahin teks "site:url" pada query. Misalnya "sms site:www.invosa.com", berarti akan mencari kata "sms" di situs www.invosa.com . Setelah bisa nyoba, sekarang giliran ngambil isi website itu dengan php. Ketemu deh caranya, dengan fopen biasa. Masalahnya, aku nggak mau header dan footer google (apalagi iklan-iklannya) ikut serta. Untunglah ada fasilitas regex (regular expression) di PHP. Lumayan, sambil belajar juga. Cari sana-sini, trial and error, buka tutorial ke mana-mana, gak berhasil juga. Ternyata gak semudah yang dibayangkan. Sampai sore baru selesai. Jadi lebih dari setengah hari untuk nyari itu. Akhirnya dapat kode kayak gini: if (isset($txSearch) && ($txSearch != "")) { $txSearch = str_

Tree Component in Flash

Karena masih bingung, seharian aku cuma explore Flash. Kali ini aku coba mempelajari penggunaan tree component (yang muncul setelah Flash aku upgrade ke Flash Prof). Soalnya ini bakalan berguna kalau aku mau bikin Help dengan Flash. Ternyata susah banget. Helpnya udah aku upgrade, tetap aja nggak membantu. Aku 'obrak-abrik' flashkit, tetap aja nggak ketemu. Akhirnya aku andalkan Google. Setelah mencoba beberapa link, ketemu juga ... ada di actionscript-toolbox. Ternyata nggak terlalu rumit, hanya saja aku yang salah bikin xml. Jadi udah bisa baca xml, terus udah bisa nampilin xml itu. Codenya kayak gini: myTreeDataProvider = new XML(); // ignore whitespace in XML (important) myTreeDataProvider.ignoreWhite = true; // load external XML file myTreeDataProvider.load("contoh.xml"); // onLoad handler for XML data myTreeDataProvider.onLoad = function() { tree_control.dataProvider = myTreeDataProvider; } Tinggal gimana cara membaca datanya, agar bisa memproses dengan benar ke

Flash - Jump Scene with Checkbox

Sejak siang sampai sore aku ngoprek-oprek Flash. Project untuk bikin presentation tool emang belum dilaksanakan, tapi mendingan siap-siap dari sekarang biar bisa lebih mudah nantinya. Dillah juga kerja keras untuk bisa menguasai Flash. Kali ini aku coba ngoprek gimana caranya bikin "slider bar", seperti yang ada di Media Player. Berbagai cara aku coba, dan nggak sia-sia, meskipun belum mencapai hasil maksimal. Aku udah bisa mengontrol movie (memanfaatkan perintah goto), jika slider (movieClip) di geser, ke kanan maupun ke kiri. Di sini aku belajar tentang startDrag() -- ternyata 4 argument terakhir adalah batas dari drag). Terus kata Dillah itu nggak bakal kepakai, mendingan pikirkan tentang checkbox. Maksudnya adalah gimana caranya biar orang bisa membuat pilihan presentasi apa aja (secara acak) yang ingin dia lihat. Jadi movie nantinya bakal bisa berjalan sesuai urutan yang diinginkan user. Aku memeras otak untuk mencari ide. Akhirnya ada ide, menggunakan variab