Rabu, April 26, 2006

Nginstall Apache, MySQL dan PHP di Linux

Pernah coba install Apache, MySQL dan PHP di Linux (LAMP), 4 sekawan sakti yang paling banyak dipake di Internet saat ini? atau pengen coba tapi udah jiper duluan karena keliatannya susah? Semoga pengalaman saya nginstall di Ubuntu Linux bisa jadi batu loncatan buat belajar nginstall AMP di Linux. Sebenarnya install AMP di Linux itu kalo mau nyoba dan usaha ga susah (kalo belajar maunya gampang doank ga dapet ilmu apa-apaan donk!!), intinya "keep trying". Semua proses instalasi dilakukan dengan menggunakan source code Apache, MySQL dan PHP.

Source code ini bisa didownload di website resmi masing-masing : Biar lebih cepat proses download-nya, cari mirror-mirror download yang berada di Indonesia, atau kalau tidak ada cari mirror terdekat, seperti Singapura atau Australia (itung-itung menghemat bandwidth Internet ke luar negeri).

Semua proses instalasi dan kompilasi dilakukan pada console atau terminal dan juga pastikan gcc, glibc, g++ sudah terinstall (kalo ga punya g++, gcc juga bisa dipake buat compile c++, tinggal tambahin : CXX=gcc sebelum perintah ./configure), karena tanpa ketiga aplikasi ini kita tidak bisa melakukan kompilasi source code. Untuk melakukan proses instalasi hingga tuntas maka kita menggunakan user tertinggi di Linux yaitu root. Untuk meng-kompilasi PHP pastikan bahwa parser Bison GNU (versi-versi terbaru kalo bisa -- kalo engga ada Bison parser Yacc juga bisa diterima) dan juga Flex.

Untuk ngecheck-nya apakah Bison dan Flex udah ke-install apa belum lakuin perintah berikut ini :

which bison
which flex

kalo engga ada juga gimana? jangan menyerah, download aja versi pre-compiled (tergantung distribusi Linux apa yang diinstall), di Ubuntu saya cari pre-compiled binary Bison yang khusus Debian Ubuntu.

Yang pertama saya install biasanya adalah Apache, kedua MySQL dan terakhir baru PHP. Kenapa saya pake urutan begini? karena untuk install PHP sebagai module apache dan gunain client library MySQL di PHP kita butuh Apache dan MySQL yang sudah terinstall sebelumnya.

Extract source Apache dengan melakukan perintah sebagai berikut :

tar -xvzf httpd-2.2.x.tar.gz

masuk ke dalam direktori httpd-2.2.x dengan menjalankan perintah berikut :

cd httpd-2.2.x

di dalam direktori ini lakukan perintah berikut :

./configure --prefix=/opt/apache2/ --enable-so -- tunggu sampai proses konfigurasi selesai --

setelah proses konfigurasi instalasi selesai tanpa masalah (biasanya kalau ada masalah proses akan berhenti di tengah jalan dan akan mengeluarkan error) maka jalankan perintah berikut untuk memulai proses kompilasi apache :

make -- tunggu sampai proses kompilasi selesai --

apabila proses kompilasi berjalan lancar tanpa error maka selanjutnya adalah melakukan perintah berikut untuk menginstall apache ke tempat yang sudah kita tentukan (dalam hal ini adalah /opt/apache2/ ) :

make install

sekarang web server apache kita sudah terinstall di /opt/apache2/. Untuk mencoba menjalankan daemon apache maka lakukan perintah berikut ini :

/opt/apache2/bin/apachectl start -- untuk saat ini abaikan saja warning-warning yang keluar, kecuali ERROR -- cek apakah apache sudah benar-benar berjalan dengan melakukan perintah berikut ini :

ps ax | grep httpd -- apabila berjalan maka akan tampil daftar proses milik apache yaitu httpd --

Agar lebih secure, buat group dan user baru dengan nama sama yaitu apache. Bisa dilakukan dengan menjalankan perintah berikut ini :

addgroup apache
adduser -s --no-create-home -G apache apache

Sekarang langkah selanjutnya adalah melakukan kompilasi source code MySQL. Download saja MySQL versi 4.1.x.
Extract source MySQL dengan melakukan perintah sebagai berikut :

tar -xvzf mysql-4.1.x.tar.gz

masuk ke dalam direktori mysql-4.1.x dengan menjalankan perintah berikut :

cd mysql-4.1.x

di dalam direktori ini lakukan perintah berikut :

./configure --prefix=/opt/mysql4/ -- tunggu sampai proses konfigurasi selesai --

setelah proses konfigurasi instalasi selesai tanpa masalah (biasanya kalau ada masalah proses akan berhenti di tengah jalan dan akan mengeluarkan error) maka jalankan perintah berikut untuk memulai proses kompilasi mysql :

make -- tunggu sampai proses kompilasi selesai --

apabila proses kompilasi berjalan lancar tanpa error maka selanjutnya adalah melakukan perintah berikut untuk menginstall mysql ke tempat yang sudah kita tentukan (dalam hal ini adalah /opt/mysql4/ ) :

make install


sekarang MySQL sudah terinstall di /opt/mysql4/. Untuk mulai menggunakan server MySQL kita harus melakukan inisialisasi GRANT TABLE milik MySQL. Inisialisasi GRANT TABLE bisa dilakukan dengan menggunakan perintah :

/opt/mysql4/bin/mysql_install_db

selanjutnya adalah kopi file my-medium.cnf yang terletak pada direktori /opt/mysql4/share/mysql/ ke direktori /etc/ dengan merubah namanya menjadi my.cnf. Perintahnya adalah seperti ini :

cp /opt/mysql4/share/mysql/my-medium.cnf /etc/my.cnf

buat user baru khusus untuk MySQL dengan melakukan perintah berikut :

addgroup mysql
adduser -s --no-create-home -G mysql mysql

setelah itu coba jalankan server MySQL dengan melakukan perintah berikut ini :

/opt/mysql4/share/mysql/mysql.server start

apabila berhasil maka akan muncul status seperti ini "Starting MySQL..... [OK]" dan selanjutnya sudah bisa melakukan query-query kepada server dengan masuk ke dalam program client command-line mysql :

/opt/mysql4/bin/mysql -- apabila berhasil maka akan dibawa masuk ke dalam program dan ada greetings "Welcome to MySQL ....." --

Sekarang last but NOT LAST adalah meng-kompilasi bahasa pemrograman favorit saya, yaitu PHP. Extract source code PHP dengan melakukan :


tar -xvzf php-4.4.x.tar.gz

masuk ke dalam direktori php-4.4.x dengan menjalankan perintah berikut :

cd mysql-4.4.x

di dalam direktori ini lakukan perintah berikut :

./configure --prefix=/opt/php4/ --with-config-file-path=/etc/php/ --with-config-file-scan-dir=/etc/php/ --with-apxs2=/opt/apache2/bin/apxs --with-mysql=/opt/mysql4/ --enable-mbstring -- tunggu sampai proses konfigurasi selesai --

setelah proses konfigurasi instalasi selesai tanpa masalah (biasanya kalau ada masalah proses akan berhenti di tengah jalan dan akan mengeluarkan error) maka jalankan perintah berikut untuk memulai proses kompilasi php :

make -- tunggu sampai proses kompilasi selesai --

lalu jalankan :

make install

sekarang lengkap sudah AMP kita di Linux. Tapi tunggu!!?? bagaimana caranya agar web server kita bisa ngerti PHP? apa otomatis gitu aja? engga juga. Sekarang kita harus buka file /opt/apache2/conf/httpd.conf dan memodifikasi-nya sedikit. Buka saja dengan vi atau apabila sudah menggunakan desktop GNOME misalnya, buka saja dengan menggunakan gedit. Yang harus diubah adalah :

User nobody
Group -1

ganti dengan :

User apache
Group apache

lalu tambahkan pada baris terakhir :

# PHP
AddType application/x-httpd-php .php

Untuk testing apakah sudah berjalan dengan baik, maka buat sebuah file php di dalam /opt/apache2/htdocs/ dengan nama test.php dan isikan dengan :

<?php phpinfo(); ?>

save file dan keluar. Restart web server apache agar apache membaca ulang file konfigurasi yang baru diubah dengan menjalankan perintah :

/opt/apache2/bin/apachectl restart

buka browser dan ketikan http://localhost/test.php pada kotak URL, dan lihat apakah skrip PHP yang baru kita buat sudah terinstall.

Rabu, April 12, 2006

Full Open Source Web Design and Programming. Kata siapa ga mungkin?

Mayoritas web designer dan web programmer di Indonesia (koreksi apabila saya salah) masih sangat tergantung pada software-software proprietary/shareware dalam mendesain dan merancang web. Daya beli masyarakat kita yang rendah pada akhirnya mendorong penggunaan software-software bajakan seperti Macromedia Dreamweaver, Adobe Photoshop, Adobe Illustrator, Macromedia Flash dsb. 5 atau 4 tahun yang lalu mungkin akan sangat sulit untuk mencari aplikasi-aplikasi Open Source untuk menandingi software-software proprietary tersebut, tetapi seiring perkembangan OSS (Open Source Software) yang sangat pesat beberapa tahun belakangan seperti Inkscape, GIMP, Sodipodi, Eclipse, Quanta Plus dan belakangan ini Xara Xtreme merupakan isyarat bagi web designer dan web programmer untuk segera bermigrasi penuh ke OSS.

Dari pengalaman saya sendiri dalam membangun beberapa aplikasi berbasis web (yang saya juga bertindak sebagai designer interface-nya), ternyata tidak memerlukan waktu yang lama untuk membiasakan diri menggunakan OSS secara penuh dalam men-develop sebuah aplikasi berbasis web. Ketika saya menggunakan desktop Ubuntu linux pertama kalinya saya juga sempat bingung mau memakai software apa untuk mendesain interface aplikasi nantinya. Terima kasih kepada komunitas Open Source yang tidak kenal lelah telah menghasilkan software-software pengolah vektor seperti Inkscape dan XaraXtreme, serta untuk image editing, GIMP yang telah matang di versi ke 2 ini.

2 Aplikasi web based yang saya bangun dengan Full OSS
Inkscape on Action


Untuk ilustrasi saya sudah terlanjur jatuh cinta pada inkscape (alhamdulillah telah tersedia untuk versi windows-nya) dan untuk editing image saya menggunakan GIMP versi 2.2.10. Kedua software tersebut apabila digabungkan penggunaannya ternyata cukup dahsyat dalam menghasilkan design mock-up web. Apalagi bila kita sudah faseh terhadap semua tools yang ada pada Inkscape dan GIMP (yang saya yakin baru memaksimalkannya paling-paling 10%). Intinya dalam menguasai sebuah software grafis adalah explorasi dan maksimalisasi tools yang ada. Bagi mereka yang terbiasa menggunakan photoshop mungkin akan sedikit sulit saat menggunakan GIMP, karena windowing system-nya yang terbilang cukup merepotkan, tetapi semua itu hanya butuh adaptasi saja (alah bisa karena biasa). Inkscape juga menawarkan perbedaan dibandingkan dengan aplikasi pengolah vektor lainnya, karena Inkscape menggunakan format SVG (Scalable Vector Graphics) sebagai format native-nya. Hal ini tentunya merupakan sebuah inovasi yang brilian, karena dengan built-in XML editornya kita bisa saja "menggambar dengan tidak menggambar". Apa maksudnya?? apabila kita telah terbiasa dengan spesifikasi XML SVG, maka bisa saja kita menggambar dengan menuliskan kode XML SVG saja dan langsung melihat hasilnya di Inkscape. Kekurangan dari Inkscape adalah pada Eksport-nya yang masih terbatas pada PNG saja (tetapi tidak terlalu menjadi masalah, karena hasilnya eksport-nya bisa kita eksport kembali dalam bentuk lainnya dengan menggunakan GIMP).

Untuk IDE (coding PHP dan HTML) di Linux, saya menggunakan Eclipse dengan ekstensi PHP-Eclipse. Eclipse merupakan IDE berbasis Java yang sangat populer dan sudah sangat matang serta masih terus dikembangkan hingga saat ini. Yang paling saya suka adalah fitur auto-completion-nya yang cukup lengkap (terutama kalau lagi lupa fungsi-fungsi PHP). Sebelum Eclipse saya pernah menggunakan Quanta Plus, tetapi karena Quanta didisain spesifik untuk desktop KDE (dimana banyak sekali library dependancies yang bikin saya malas), akhirnya saya menjatuhkan pilihan ke Eclipse yang fasilitasnya sudah sangat lengkap.

Jadi, Web Designer dan web programmer? Uninstall semua program web authoring bajakan anda dan migrasi penuh ke OSS!! I bet we can do it.

Kenapa coding OOP ?

Saya mengenal Object Oriented Programming sekitar 1,5 tahun yang lalu, ketika saya mulai coba-coba coding OOP untuk salah satu project sistem informasi berbasis web di salah satu departemen pemerintahan (menggunakan PHP 4). Pada awalnya saya menggunakan OOP hanya untuk mencari cara bagaimana agar kode-kode yang saya buat bisa digunakan kembali dengan cepat tanpa harus cape-cape menulis prosedural yang rumit, ternyata semakin hari semakin terasa kenyamanan coding dengan style OOP.

Menurut pengalaman saya, beberapa kenyamanan yang saya dapat melalui coding OOP ini adalah :
  1. Kode menjadi lebih bersih
  2. Alur pemrograman menjadi lebih terstruktur
  3. Reusability (penggunaan ulang) yang tinggi
  4. Berkurangnya ketergantungan antar program karena setiap objek bekerja sendiri-sendiri, tetapi saling bekerja sama satu sama lain
  5. Adanya inherintance antar kelas yang memungkinkan kita memperpanjang fungsi dan manfaat dari kelas yang sudah ada, tanpa harus menulis ulang kelas sebelumnya
  6. Kelas memungkinkan kita mengelompokan/mengklasifikasikan properti dan metode-metode yang serupa fungsinya
  7. Dalam lingkungan yang Open Source diperlukan kode-kode pemrograman yang juga readable oleh pemrograman lainnya. OOP bisa menjadi solusi untuk hal ini
  8. Mempelajari OOP di PHP 5, membuat saya lebih mudah untuk mencoba OOP di Java karena modelnya hampir serupa
Tetapi OOP juga mempunyai kekurangan yaitu dalam hal eksekusi skrip. OOP seperti saya pernah baca pada buku Core PHP Programming, karangan Leon Atkinson, eksekusi skrip yang menggunakan OOP bisa berkurang kecepatannya hingga 20%, dibandingkan dengan menggunakan style prosedural biasa.

IHMO OOP merupakan sebuah pilihan bagi programmer. Mereka yang mementingkan kecepatan performa aplikasi akan cenderung memilih style prosedural, sedangkan mereka yang lebih mementingkan modularitas dan keterbacaan kode aplikasi akan cenderung memilih OOP. Saya sendiri tidak strict ke satu style, seperti yang pernah Rasmus Lerdorf (PHP Founding Father) katakan,

"Gunakan OOP di saat yang betul-betul diperlukan, dan gunakan prosedural di sisi yang lain".

Selasa, April 11, 2006

Object Oriented Programming PHP 5 - Bagian 1

PHP merupakan server-side scripting untuk membangun halaman web dinamis yang sangat populer saat ini dan powerful. Keunggulan PHP adalah pada kemudahan dalam penulisan program dan dukungan extension library yang sangat banyak terutama dalam hal koneksi database. Salah satu keunggulan PHP yang lain adalah penulisan kode dalam style Object Oriented Programming atau biasa juga disingkat OOP. Style OOP sudah didukung sejak PHP 3, tetapi mulai versi 5 style OOP PHP ditulis ulang kembali agar lebih mendekati kepada prinsip-prinsip OOP yang sebenarnya seperti munculnya modifier public, protected, private, abstract dsb. OOP pada PHP 5 mirip dengan OOP pada Java.

Apa sih Object Oriented Programming itu? OOP mudahnya adalah membangun sebuah aplikasi dengan menggunakan object (objek). Mari kita analogikan sebuah aplikasi sebagai sebuah Mobil. Mobil dibangun oleh komponen-komponen pendukungnya (objek) seperti ban, mesin, rangka mobil, setir dan komponen-komponen lainnya. Setiap komponen mempunyai fungsinya masing-masing dan saling mendukung satu sama lain, agar sebuah mobil dapat berjalan dengan baik. Hal seperti ini kemudian kita implementasikan dalam pembangunan aplikasi dimana kita membangun aplikasi dengan menggunakan objek-objek yang telah kita buat sebelumnya. Pengenalan lebih lanjut mengenai konsep OOP dapat dilihat di sini.

Untuk membuat sebuah objek maka kita harus mendeklarasikan terlebih dahulu Blue-Print atau prototype dari object tersebut. Prototype dari sebuah objek dalam terminologi pemrograman disebut class (kelas). Di bawah ini adalah contoh sebuah deklarasi kelas dengan sebuah variabel dan sebuah metode.

<?php
 
class kelasKucing
{
    var nama_kucing = '';
 
    // metode untuk memberikan nama pada kucing

    function setNamaKucing($isi_nama_kucing)
    {
         $this->nama_kucing = $isi_nama_kucing;
    }

 
    // metode untuk mengetahui nama kucing 
    function getNamaKucing()
    {
         return $this->nama_kucing;
    }

}
 
?>


Source code di atas mendeklarasikan sebuah kelas (Blue-Print) dengan nama kelasKucing. Kelas ini nantinya akan menghasilkan sebuah objek "kucing". Salah satu metode kelas ini adalah metodeSetNamaKucing yang fungsinya adalah memberikan nama untuk objek kucing nantinya. WARNING!! Jangan samakan kelas dengan objek, objek merupakan hasil cetakan dari sebuah kelas.

Untuk membuat sebuah objek dari dari kelasKucing, maka kita harus meng-instantiate kelasKucing atau mudahnya mencetak sebuah objek dari kelasKucing. Contohnya bisa dilihat pada contoh di bawah ini :

<?php
 
require 'kelasKucing.inc.php';
 
// buat objek kucing pertama
$blacky = new kelasKucing();
 // kasih nama buat kucing baru kita

 $blacky->setNamaKucing('blacky');
 // siapakah nama kucing yang baru kita buat
 echo "Nama kucing pertama kita adalah : ".$blacky->getNamaKucing;

 
// buat objek kucing kedua
$kitty = new kelasKucing();
 // kasih nama buat kucing baru kedua kita
 $kitty->setNamaKucing('kitty');
 // siapakah nama kucing yang baru kita buat

echo "Nama kucing kedua kita adalah : ".$kitty->getNamaKucing;
 
?>


Perbedaan paling mendasar pada OOP di PHP 5 dengan versi PHP sebelumnya adalah pada akses kepada properti dan metode dari kelas. Pada PHP 4, semua properti kelas bisa diakses secara public (dari manapun) dan semua metode kelas bisa diakses secara static tanpa harus membuat objek dari kelas terlebih dahulu. Pada PHP 5 sudah diperkenalkan modifier-modifier properti dan metode seperti halnya Java dan C++. Beberapa diantaranya yang penting adalah :
  • PUBLIC Ini artinya setiap properti atau metode bisa diakses secara langsung oleh program lain diluar kelas.
  • PROTECTED Ini artinya setiap properti atau metode hanya bisa diakses oleh kelas itu sendiri dan bisa diakses oleh kelas lain yang meng-inherit kelas tersebut.
  • PRIVATE Ini artinya setiap properti atau metode hanya bisa diakses oleh kelas itu sendiri.
Contoh implementasi modifier ini bisa dilihat pada source code di bawah ini :

<?php
 
class kelasKucing
{
 private nama_kucing = '';
 private tahun_lahir_kucing;
 protected usia_kucing;
 public gender_kucing = '';

 
 public function setNamaKucing($isi_nama_kucing)
 {
     $this->nama_kucing = $isi_nama_kucing;
 }

 
 public function setTahunLahirKucing($isi_tahun_lahir_kucing)
 {
     $this->tahun_lahir_kucing = $isi_tahun_lahir_kucing;
 }

 
 protected function hitungUsiaKucing()
 {
     if ($this->tahun_lahir_kucing AND ) {

         $this->usia_kucing = (integer)date("Y") - $this->tahun_lahir_kucing
     }

 }
 
 
}
 
// buat objek kucing
$arie = new kelasKucing();
// metode setNamaKucing dan setTahunLahir bisa dipanggil

// langsung oleh objek karena sifatnya public
 // kasih nama untuk si kucing
 $arie->setNamaKucing("arie");
 // tahun lahir si kucing
 $arie->setTahunLahir(1982);

 
// syntax di bawah ini benar
// karena properti gender_kucing bersifat public
$arie->gender_kucing = "laki-laki"
 
// syntax di bawah ini salah dan akan memunculkan error
// properti usia_kucing bersifat private

$arie->usia_kucing = 20;
// properti nama_kucing bersifat private
echo "Nama kucing kita adalah : ".$arie->nama_kucing;

 
?>


Bisa dilihat bahwa implementasi OOP pada PHP 5 sudah sangat advanced dan pada kenyataan sudah banyak extension library ataupun fungsi-fungsi di PHP 5 yang menggunakan model OOP untuk penggunaannya. Salah satunya adalah fungsi mysql improved (mysqli) yang menyediakan style komunikasi database mysql dalam bentuk OOP. Sampai sini dulu pengenalan pada OOP PHP 5, see you on next articles with same topics.