Belajar Yii, mulai dari mana?

Pertama kali saya belajar yii, bingung, linglung, kesandung. Saya tidak mengerti harus belajar darimana. Setelah belajar ke sana kemari, akhirnya saya tahu yang pertama dilakukan adalah download dahulu framework-nya :). 
Source code yii dapat di-download di http://www.yiiframework.com/download/.

Setelah mendapatkan file-nya, ekstrak yii ke folder di mana saja, kalau saya sendiri meletakkan di root document server lalu saya namai foldernya dengan nama 'yii'. Berikut isi folder 'yii':

Selanjutnya di root document server saya membuat folder 'yii-web', saya akan membuat aplikasi web di sini. Sebagai ilustrasi, berikut saya berikan contoh folder 'yii-web' yang berada di root document server bersama folder 'yii'.

Dalam folder 'yii-web', buatlah file 'index.php' dan folder 'protected'. Di dalam folder 'protected', buat folder 'controllers'. Di dalam folder 'controllers', buatlah file 'SiteController.php'. Sebagai ilustrasi, berikut contoh struktur file dan folder 'yii-web':



Selanjutnya edit 'index.php' dengan kode di bawah ini:
// include Yii bootstrap file
require_once(dirname(__FILE__).'/../yii/framework/yii.php');

// create a Web application instance and run
Yii::createWebApplication()->run();

Setelah itu edit 'SiteController.php' dengan kode di bawah ini:
/**
 * SiteController is the default controller to handle user requests.
 */
class SiteController extends CController
{
 /**
  * Index action is the default action in a controller.
  */
 public function actionIndex()
 {
  echo 'Hello World';
 }
}

Setelah itu, buka halaman http://localhost/yii-web. Akan ditampilkan 'Hello World' dari aplikasi kita. Untuk saat ini demikian dulu artikel tentang yii,  artikel lain akan segera menyusul.

PHP Mahir, Mahirin skill PHP lo!

Instalasi Memcache Ubuntu Linux

Sobat phpmahir, kali ini saya akan menulis tentang instalasi memcache. Memcache digunakan untuk menyimpan memori sementara di dalam ram. Dengan adanya memcache, akses ke database bisa dikurangi sehingga bisa mempercepat proses.

Untuk instalasi di ubuntu, saya menggunakan apt-get. Buka terminal, ikuti langkah berikut.

Langkah 1.
$ sudo apt-get install memcached

Langkah 2.
$ sudo apt-get install php5-memcached

Langkah 3.
$ sudo /etc/init.d/apache2 restart

Buat satu file php, namai simpan.php dengan isi sebagai berikut:
addServer("localhost", 11211); 

$arr = array( 
    $mc->get("a"), 
    $mc->get("b") 
); 
var_dump($arr); 


Setelah itu, buat file lain, namai baca.php dengan isi sebagai berikut:
addServer("localhost", 11211); 

$arr = array( 
    $mc->get("a"), 
    $mc->get("b") 
); 
var_dump($arr); 

Jalankan simpan.php, kemudian buka baca.php di browser atau cli. Hasilnya sebagai berikut:
array(2) {
  [0]=>
  string(18) "PHP pakai memcache"
  [1]=>
  string(12) "Ini memcache"
}

Dengan menggunakan memcache, kita bisa menyimpan variabel dan membacanya di file lain, tak perlu akses database yang lama.

Demikian tutorial kali ini, semoga bermanfaat buat kita semua.

PHP Mahir, Mahirin skill PHP lo!

Sam dan MQ (Part 4) - Habis

Setelah browsing sana sini, Sam menemukan artikel tentang message queue (MQ). Dengan menggunakan MQ, Sam bisa membuat beberapa antrian pesan yang nantinya akan dikerjakan oleh program php-nya. Dalam artikel tersebut, program MQ yang digunakan adalah RabbitMQ.

Dalam tutorial di website resmi RabbitMQ, ada 4 skenario MQ yang dapat digunakan (dari 5 tutorial 1 di antaranya hanya tutorial "Hello World"). Skenario MQ tersebut adalah work queues, publish/subscribe, routing, topic, dan RPC.

Untuk kasus login, Sam menerapkan skenario RPC untuk true dan false serta menggunakan skenario publish/subscribe. Ketika program melakukan login, modul login mempublish pesan bahwa si anu telah login. Untuk pencatatan log login, ada program khusus yang melakukan subscribe terhadap pesan login. Dengan metode ini, jika ingin membuat alur program ketika login, Sam cukup membuat program baru dan melakukan subscribe terhadap pesan login, tidak perlu mengubah kodingan yang sudah ada.

Untuk kasus grabber dan resizer gambar, Sam menggunakan skenario work queue. Ketika user melakukan share link, program mengirimkan pesan link tersebut dengan alamat pekerja 'grabber'. Sam membuat program A untuk mengambil html dari suatu website. Jika A menerima pesan dengan alamat 'grabber', A akan mulai bekerja mengambil html. Setelah html tersebut didownload, A mengirimkan pesan link2 gambar yang perlu didownload, pesan tersebut dialamatkan ke pekerja 'image grab'. Nantinya jika menerima pesan yang dialamatkan ke 'image grab', program B akan bekerja untuk mengunduh dan mengubah ukuran dari gambar. Dengan metode ini, Sam bisa menjalankan program A dan B sebanyak apapun sesuai kebutuhan. Jika ada penumpukan pesan gambar yang harus diunduh dan diubah ukurannya, Sam cukup menjalankan program B lain di terminal. Masing-masing program B dijamin hanya menerima satu pesan untuk dikerjakan secara mandiri sehingga 10 link gambar bisa dikerjakan secara pararel oleh beberapa program B.

Demikianlah, Sam bisa tersenyum lega dengan penemuannya itu. Jika dibutuhkan, Sam dapat membuat program baru dengan mudah tanpa perlu mengubah-ubah program lama.

Sam dan MQ (Part 3)



Siang itu Sam berselancar di dunia maya. Sam masih memikirkan solusi yang tepat untuk menyelesaikan persoalan interoperabiliti modulnya. Belum berhasil dia menemukan solusi yang lebih efisien dari permintaan bosnya kemarin. Saking asiknya dia berselancar, dia kaget berat ketika Sang Bos menepuk pundaknya.

"Waduh Pak, kaget saya...", kata Sam.

"Kamu sih serius banget ngenetnya, kerja sana... ngenet mulu... hehe", Bos tertawa.

"Ini juga kerja Pak, nyari-nyari artikel buat kerjaan. Emang ada apa Pak?", kata Sam.

Bos: "Gini Sam, di web kita kan user bisa share link. Ketika user share link, server kita kan harus ngambil data teks dan gambar dari web lain terus gambar itu di-resize. Proses pengambilan data itu kan lama. Kalo kelamaan sering timeout, jadinya user gagal share link. Sekarang tolong dibuat begitu share link langsung aja diambil linknya terus user dapat notifikasi berhasil. Nanti ada modul yang kerjaannya ngambilin data terus resize gambar. Istilahnya itu Asynchronous Process ya? lupa saya "

Sam: "Iya kayaknya itu pak, Ok nanti saya kerjakan Pak"

Bos: "Harus real time ya, jadi begitu ada tugas ambil data dan resize gambar, modul-modul itu langsung jalan, jangan nunggu dulu. Harapannya user bisa langsung liat hasilnya secepat mungkin. Tolong program pengambil data dan resize gambar bisa dijalankan banyak, jadi bisa pararel, supaya lebih cepat".

Sam: "Ok saya usahakan Pak".

Bagaimana caranya melakukan asynchronous process tersebut? Menurut Sam sebaiknya dibuat tabel process di MySQL sehingga ketika user melakukan share link, dimasukkanlah data process baru yaitu id,link,process,status. Setelah itu di belakang ada program grabber yang akan mengambil data teks dan gambar dari link tersebut serta ada program resizer yang akan meresize. Jadi ketika user melakukan share link, akan ada data baru di tabel process dengan data [{id_share},{link}, grab, false] dan [{id_share}, {link}, resize, false].

Nantinya program grabber akan melakukan check ke tabel process apakah ada process grab yang statusnya false, kalo ada dia akan melakukan tugasnya yaitu mengambil data dan teks dari link dan setelah selesai dia akan mengubah status process tersebut menjadi true. Hal yang sama juga dilakukan oleh program resizer, dia akan mengecek process resize yang masih false dan akan melakukan tugasnya asalkan data gambar yang bersangkutan telah diambil oleh program grabber.

Dengan alur seperti itu memang akan dihasilkan asynchronous process untuk grabber dan resizer, namun yang jadi masalah, koneksi query terus menerus dari kedua program tersebut sangat menguras sumber daya.

Anggaplah sumber daya tidak masalah, Sam juga harus dihadapkan dengan proses pararel. Anggaplah ada dua grabber dan dua cropper, ketika grabber satu mengakses proses ke i, bagaimana memberitahu grabber ke dua untuk tidak melakukan proses ke i? Anggaplah bisa berkomunikasi menggunakan tabel MySQL lain, tapi masalahnya berapa banyak koding yang harus ditulis?

Sam dihadapkan dengan asynchronous process yang harus bisa pararel, haruskah dia membuat banyak koding lagi? haruskah dia minum aspirin lagi?

Sam dan MQ (Part 2)



Setelah berpikir cara paling efisien mengubah programnya, Dalam konsep Sam, setiap halaman akan mengakses modul otentifikasi, misal otentifikasi(username,password,modul_halaman). Dengan cara itu, nantinya modul otentifikasi akan mencatat log dari setiap pengaksesan dirinya dari modul halaman tertentu.

Setelah 2 hari ngoding dan 6 kali minum aspirin, akhirnya kode dalam modul otentifikasi dan kode dalam setiap modul halaman telah diubah dan berjalan dengan baik. Bos Sam sangat senang dengan kinerja Sam yang cepat dan efisien.

Esoknya sang Bos meeting dengan petinggi nokia untuk membicarakan pembuatan aplikasi mobile dari web perusahaan Sam. Setelah meeting, bos Sam meminta sesuatu kepada Sam.

"Sam, tadi Pak Narenda setuju untuk membuat aplikasi windows phone dari web kita. Tolong dong kamu buatkan web service untuk otentifikasi dari aplikasi dia ya. Nanti aplikasi dia bakal mengirim username dan password, kamu harus otentifikasi. Jangan lupa catat juga lognya ya, buat data mining."

Sam hanya mengangguk kemudian dia merenung. begini renungan dia:
"Hari ini windows phone, besok mungkin android. Dua minggu lalu di meeting sempet bahas kemungkinan bakal ada aplikasi internal perusahaan pake C#.net dengan otentifikasi dari database web perusahaan. Kalo ada tambahan aplikasi atau device baru, masa gue harus ubah koding modul otentifikasi? Masa gue juga harus buat interface baru buat tiap device? Ada gak sih solusinya?"

Bagaimana caranya supaya si Sam bisa menghandle banyak bahasa pemrograman tanpa membuat banyak interface?

Android: Teaser

Sekarang kita punya channel baru nih :D Isinya akan membahas segala hal yg berhubungan dengan android. Apa?? Kamu g tau apa itu android?? *cyiaann... Jadi, android itu adalah sistem operasi yang sekarang ini banyak digunakan pada perangkat mobile, kaya smartphone atau tablet gitu deh. Katanya sih hadirnya android ini berhasil mengganggu kedigdayaan IOS produksi Apple. Data lengkapnya bisa diliat dibawah ini:

Berbeda dengan Apple yang memilih nama kucing untuk sistem operasi yang dirilisnya (Cheetah, Puma, Jaguar, etc), Google menamai sistem operasi android dengan nama hidangan penutup. 


Klo kamu perhatikan dengan seksama, nama - nama diatas memiliki huruf awalan yang berurutan sesuai abjad loh. Terus kamu pasti nanya, "A sama B-nya kemana?". ada dehh... pokoknya alasan si A dan si B tadi g disebutin karena masalah hak cipta dan trademark. Pada saatnya, nama hidangan penutup yang akan disematkan pada sistem operasi android ini akan menggunakan huruf awalan "z". Ada yang tau hidangan penutup apa yang menggunakan huruf awalan "z"?? share donk di komen.

Sam dan MQ (Part 1)

Sam adalah seorang programmer php, dia telah membuat modul otentifikasi yang sangat bagus dan efisien. Setiap halaman dari web akan mengakses modul otentifikasi itu untuk memastikan tiap user hanya mengakses halaman yang diizinkan.

Pada suatu hari bosnya si Sam minta setiap proses otentifikasi harus dibuat lognya apakah otentifikasi itu true atau false untuk setiap modul. Sam harus minum dua panadol karena pusing mengubah kode program ketika request otentifikasi semua halaman.


Bagaimana supaya si Sam ini bisa kerja lebih sedikit dengan mengubah kode lebih sedikit?