Less talk, more code

The blog of Iskandar Soesman

Kenapa Panada?

Kenapa musti bikin Framework lagi kalau banyak Framework yang bagus-bagus? Kira-kira seperti itu pertanyaan yang muncul dari dalam diri saya sendiri, dan kurang-lebih, juga datang dari teman-taman sekitar. Diantara semua jawaban yang coba saya cari, mungkin satu jawaban yang paling mendasar adalah "masih kurang puas".

Ya, sepertinya ini adalah jawaban yang paling pas dari pertanyaan di atas. Sebelumnya saya sempat beberapa kali mencoba untuk membuat sebuah Framework, namun tidak membuahkan hasil. Sebelum memulai mengerjakan Panada, saya sempat berencana untuk membuat sebuah toko online, Martwe namanya. Domain parkingnya masih numpang di hosting milik seorang teman di kantar. Dan teman kantor ini pulalah yang cukup tahu banyak mengenai projek ini.

Rencana saya ketika itu, sebelum sampai pada proses pengerjaan Martwe saya akan buat sebuah Framework dulu sebagai landasannya. Framework ini saat itu saya beri nama Martgear. Bagian inilah yang kemudian membawa saya untuk menggali lebih jauh Frmework-Framework yang sudah ada, salah satunya adalah CodeIgniter. CodeIgniter merupakan Framework yang paling sering saya gunakan, terutama untuk menyelesaikan pekerjaan-pekerjaan di kantor. Namun, yang ada saat itu bukannya membuat Framework baru, tapi justru hanya 'comot' sana sini dari CodeIgniter. Mulai dari index.php, routing, Core System dan sampai ke Contoroller dan View, semuanya di ambil dari CI. "Ini namanya bukan bikin baru, tapi co-pas dari CI", dalam hati saya. Kalau memang semua sama, kenapa tidak sekalain saya gunakan CI? toh sudah teruji bukan?

Martgear gagal, saya tidak puas karena memang bukan hasil pemikiran saya sendiri. Yang saya maksud pemikiran sendiri di sini adalah, membuat suatu Core Sistem Framework yang belum atau berbeda dari yang sudah ada. Dari sekian banyak Framework yang ada saat ini, semuanya memiliki Core System yang berbeda. Walaupun sebagian besar di antaranya memiliki patern yang sama, yaitu M-V-C. Core System adalah bagaimana suatu request diproses mulai dari penerima request (file index.php misalnya), diproses hingga sampai ke file Controller dan View yang kemudian ditampilkan ke si pengirim request. Keunikan Core System ini lah yang menjadi salah satu pembeda antara satu Framework dengan Framework lainnya. Efektifitas dan evisiensi pada Core System akan menjadikan suatu Framework bisa lebih cepat dari Frmework yang lain.

Berdasarkan informasi yang cukup banyak di internet, CodeIgniter merupakan Framework yang paling banyak digunakan. Selain karena ringan dan cepat, panduan dan dokumentasi yang disediakan juga sangat jelas. Sehingga sangat membantu para developer untuk mempelajarinya. Termasuk saya ketika pertama kali menggunakan. Namun demikian, saya merasa CI masih terlalu "gemuk". Pada saat saya menulis artikel ini, ukuran CodeIgniter2 yang sudah diexstrak sekitar 3.9 MB. Dengan ukuran seperti ini, saya merasa terlalu mubazir karena lebih banyak bagian yang tidak saya gunakan dari semua file-file itu. Saya sadari memang, bahwa sebuah Framework sebisa mungkin menyediakan hampir semua tools sehingga mempermudah pekerjaan penggunanya. Dengan alasan ini, argumen CI terlalu gemuk, sudah terpatahkan sebenarnya. Untuk menyiasati agar tidak terlalu besar, saya pernah mencoba untuk mengurangi file-file core CI yang saya gunakan sehingga menjadi lebih light, namun tetap ini tidak membuat saya puas.

Hal lainnya yang juga mengganjal adalah, CI menurut saya kurang "straight to the point" dalam mengambil resources seperti library, model ataupun View. Ketika sebuah Controller membutuhkan sebuah library misalnya, maka paling tidak dia juga harus meload sebuah class Load. Saya membayangkan seandainya hal ini bisa di-bypass, pasti akan lebih cepat.

Di luar dari alasan ini, banyak hal yang saya kagumi dari CI. Salah satunya adalah pengelolaan antara Core System, Controller, Libraries dan View. Semuanya tersusuan secara rapih dan terstruktur. Terinpirasi dari hal inilah kemudian saya terapkan struktur yang sama di Panada.

Untuk alasan ramping, saya sempat mencoba beberapa Framework, Madeam di antaranya. Namun kandas, karena tidak semudah penggunaan CI. Saya juga sempat mencoba Kohana, yang ukurannya hanya sekitar 1.7 MB, tapi lagi-lagi tidak memenuhi harapan saya.

Dengan prinsip "straight to the point" ini, maka saya coba membuat sebuah Core System sendiri. Saya pelajari lagi hal-hal apa saja yang ada di PHP 5 yang bisa saya manfaatkan. Yang saya inginkan dari Core System ini adalah, semua bisa dilakukan tanpa perlu melakukan banyak proses. Satu feature yang sangat menarik di PHP 5 adalah __autoload(). __autoload() adalah sebuah fungsi yang kita buat sendiri, di mana PHP mem-passing nama class yang sedang dipanggil ke dalam fungsi ini. Fungsi inilah yang kemudian menjadi processor utama dari seluruh Core System. Semua pembabakan Controller ataupun Library dilakukan secara cepat pada bagian ini.

Lalu bagaiman dengan View? semula View adalah salah satu method pada class Panada, di mana class Controller menjadi inheritance dari class ini, sehingga bisa langsung dimanfaatkan Controller untuk menampilkan file View. Namun hal ini saya ubah di versi 0.1.2. Dengan memanfaatkan feature magic method, untuk mengirimkan infromasi ke file View, mulai digunakan method call() yang diletakkan di dalam class Panada. Prinsip kerjanya sama dengan fungsi autoload() di mana PHP mem-passing argumen, dan kitalah yang melakukan sisanya.

Saya kurang terlalu pandai untuk mendeskripsikan dalam bahasa tulisan mengenai teknis proses bagaimana Core System Panada bekerja. Anda saya persilahkan langsung untuk melihatnya di halaman gear.php. File gear.php ini lah yang menjadi Core System di Panada. Seya berusaha untuk memberikan komentar sejelas mungkin agar mudah dipahami. Dengan begitu, saya berharap Anda bisa memberikan masukan agar Core System ini ataupun bagian yang lainnya bisa bekerja lebih baik, lebih efisien dan pada akhirnya bisa lebih cepat.

Untuk memenuhi "straight to the point" saya berharap proses yang dilakukan bisa lebih cepat. Oleh karenaya, saya selalu melakukan banchmark setiap kali melakukan suatu perubahan atau penambahan. Saya akan buat sebuah tulisan tersendiri mengenai Banchmark Panada terhadap Framework lain untuk meliahat seberapa cepat proses yang sama dilakukan oleh Panada.

Kali ini saya cukup puas dari apa yang saya sudah kerjakan di Panada. Tinggal tugas selanjutnya adalah mengembangkan lebih lanjut agar bisa dimanfaatkan oleh developer-developer lain untuk penggunaan aplikasi yang lebih luas.

Terakhir mengenai nama Panada itu sendiri. Saya sangat kagum terhadap projek-projek open source lokal yang umumnya juga menggunakan nama lokal. Sebut saja projek BlankOn, Singkong dll. Terinspirasi dari hal-hal ini, maka saya juga ingin memiliki nama Indonesia pada projek ini. Di kantor tempat saya bekerja, ada seorang penjual kue yang hampir setiap hari datang untuk menjajakan makanan ringan. Dari penjual kue ini, satu kue yang selalu saya cari adalah kue Panada. Kue asli asal Manado, Sulawesi Utara ini menurut saya sangat enak. Tidak terlalu besar namun memiliki isi yang berkualitas dan cukup komplit. Tidak perlu berfikir panjang, maka nama kue inilah yang saya abadikian untuk dijadikan nama sebuah Framework.

Jadi silahkan cicipi, rasakan dan nikmati "hidangan" khas Indonesia ini. Mudah-mudahan Anda menyukainya sehingga bisa menceritakan ke teman-teman Anda yang lain sehingga Panada tidak hanya disukai di Indonesia, tetapi juga di seluruh dunia, Amin.