Membuat Virtual Host Apache Untuk Domain Sendiri di Windows 7


Sebelumnya di artikel http://phpmahir.blogspot.com/2013/06/membuat-virtual-host-apache-untuk.html, sudah dijelaskan bikin domain sendiri di laptop sendiri di ubuntu. Sekarang saya sedang menerapkannya di windows 7. Pada kasus ini saya ingin membuat domain http://airlines.com diarahkan langsung ke localhost di folder tertentu.

Langkah pertama adalah pointing domain ke 127.0.0.1 atau localhost. Buka notepad++ dengan klik kanan lalu run as administrator. Tambahkan 127.0.0.1 {namadomain} di baris paling bawah.


Coba buka http://airlines.com di browser, maka akan tampil tampilan root file apache, jika pakai xampp, tampilannya seperti berikut:


Selanjutnya kita arahkan http://airlines.com ke folder yang dikehendaki, saya akan arahkan ke C:\xampp\htdocs\arfik\airlines\taufik-riontona. Langkahnya buka file C:\xampp\apache\conf\extra\httpd-vhosts.conf. Di bagian bawah, tambahkan code sebagai berikut:
gambarnya:

Sekarang kunjungi http://airlines.com, maka file php di folder yang kita maksud akan dieksekusi.

PHP Mahir, Mahirin skill PHP lo!

Instalasi MySQL di Ubuntu

Artikel ini saya tulis karena beberapa kali saya harus setup server baru atau install ubuntu baru. Setiap kali saya hendak menginstall suatu program php, saya harus install php, mysql, apache, memcached, redis, dan sebagainya. Untuk instalasi MySQL, pertama kali update dulu ubuntu kita dengan perintah berikut:

Selanjutnya jalankan perintah berikut:
Biasanya ketika instalasi ada permintaan password untuk root. Jika tidak ada, kita dapat melakukan set password root MySQL dengan perintah berikut:
Selanjutnya mysql harus dihubungkan dengan php, untuk menghubungkan mysql dengan php, install modul berikut:

Sekian instalasi MySQL dari saya, cukup membantu bagi saya sendiri dan semoga bisa membantu para pembaca semua.

PHP Mahir, Mahirin skill PHP lo!

Instalasi CURL untuk PHP di Ubuntu dengan APT-GET

CURL berguna untuk mengambil data tertentu ke server lain. Kadangkala ketika pertama kali install php, modul curl belum terinstall. Untuk menginstall CURL di ubuntu, kita bisa menggunakan apt-get. caranya mudah.

sudo apt-get install php5-curl

Setelah itu restart apache

sudo /etc/init.d/apache2 restart

Sekian... ringkas banget kan?? hehe

PHP Mahir, Mahirin skill PHP lo!

BBM for All : KUDETA INTELEKTUAL

Dengan hadirnya BBM di iOs/Android, maka handset BB yang identik dengan keyboard qwerty akan naik lg pamornya, bandingin aja enak mana untuk urusan ketik di BB/iOs/Android ? Bahkan di z10 pun desain keyboard virtual dan predictive text-nya lebih nyaman dari iOs/Andro.



Untuk urusan privacy, BBM udah lebih dulu mikirin ginian, selama nggak di-accept, nggak akan bisa chatting dengan yang bersangkutan, nggak perlu repot-repot nge-block...



Penggunaan PIN dibanding nomor simcard handphone lebih secure, karena PIN hanya untuk BBM, tidak untuk sms, terhindar dari sms spam kerjaannya sales-sales gila yang maniak spam.



Hadirnya BBM di iOs/Android, bisa membalikkan kembali fungsi smartphone hanya nyaman untuk chatting, bukan untuk browsing, main game, social media dll, kecuali smartphone dengan size screen yang lebih lebar, artinya selain chatting lebih baik pakai Tablet.

Dan hanya BBM lah yang sukses sebagai text messanger, yang sekaligus memiliki device-nya juga. iMessage dan Gtalk, you knowlah ... Maka bisa jadi BBM akan menggigit Apel dan membuat semakin pucat hujau robot....


Dengan OS 10, paket internet BB sudah tidak menggunakan paket BIS lg, dan sudah pasti penggunaan BBM di iOs/Android juga. Namun ini bisa merubah paket data yang ada karena kemungkinan populernya penggunaan BBM di iOs/Android.

Kemudahan memindahkan ekosistem BBM dengan Blackberry ID akan banyak diminati karena didorong kecendrungan pengguna ponsel yang sering gonta ganti simcard (tingkat churn rate yang tinggi).




 (Budi Imam Prayitno)

Instalasi Node.js di Windows 7

Halo sahabat phpmahir! Kali ini saya mau mencoba node js. Node js itu katanya buat bikin aplikasi web secara real time dan responsif, jadi server dan client tetap terhubung, tidak 'jual putus' seperti http. Nantinya kita bisa menggunakan nodejs dikombinasikan dengan php untuk membuat aplikasi real time yang bagus.

Langkah pertama adalah download dulu nodejs di http://nodejs.org/download/. Saya menggunakan windows 7 Professional 64bit, jadi saya download windows installer 64-bit. Jalankan installernya kemudian ikuti instruksi selanjutnya, standar install program di windows lah.



Setelah instalasi, jalankan node.js command prompt. Saya buat sebuah file bernama hello.js, saya simpan di C:/xampp/htdocs/node. Isi filenya sebagai berikut:
Buka node.js command prompt, arahkan ke folder node, lalu jalankan perintah "node hello.js". Akan tampil "hello world".

Sekarang buat file hellosvr.js, isinya sebagai berikut:
Setelah itu jalankan perintah "node hellosvr.js", maka cmd akan menunggu. Jalankan browser, ketik alamat http://127.0.0.1:1337/, maka akan tampil Hello world di browser.
Tampilan node cmd prompt

Tampilan di browser

Demikian artikel awal node.js kali ini, semoga sahabat phpmahir bisa semakin mengerti.


Healthy Programmer: Teaser

"Prevention is better than cure". Ungkapan klise yang sering kita dengar dan tetap relevan hingga sekarang ini. Pernah gak ngerasain nyeri di bagian pergelangan atau punggung yang sering muncul saat kamu melakukan aktifitas apapun? Banyak orang yang mengatasi rasa nyeri tadi dengan mengkonsumsi analgesics, antispasmodics, physiotherapy, atau bahkan menggunakan terapi alternatif gitu kaya acupunture atau chiropracty. Tapi itu semua tidak menghilangkan rasa sakit tadi 100% loh. Rasa nyeri tadi akan tetap muncul di kemudian hari, bahkan lebih parah dari yg pernah kamu rasa atau kamu bayangkan.

Kebanyakan software developer pasti pernah merasakan rasa nyeri tadi(iya kn!? iya donk!? bener kn!? bener donk!?). Lebih parah lagi kamu sering menghabiskan waktu duduk di depan komputer dan hanya berjalan beberapa langkah saja dalam sehari. Hal ini bikin kamu lebih rentan terkena hipertensi dan diabetes. Gak sampe disini aj, dalam jangka panjang kedua hal ini bisa menyebakan kamu terkena serangan jantung dan stroke...hhiiiii

Serem kn!? masih banyak loh kasus lainnya yang bisa dibikin lebih serem lagi. Gaya hidup progammer tuh memang memberikan kontribusi besar terhadap kesehatan programmer itu sendiri. Penyakit dapat dicegah layaknya kesehatan yang dapat dijaga dengan olahraga dan nutrisi. Dalam hati kamu pasti dah g sabar pengen tau solusi yang tepat bagi programmer biar tetap segar bugar dalam menjalani karir yang menjanjikan ini... *tsah


Tulisan ini memang ditujukan untuk para programmer, tetapi bisa juga dipraktekan bwt kamu yang malas beraktifitas. Semakin sedikit hal yang kamu lakukan untuk tetap sehat, maka semakin penting tulisan ini bwt kmu. catet!! ;)


Let's refactor your health.

Menyimpan Tampilan Website ke Variabel dengan Output Buffering Control

Halo sahabat phpmahir! kali ini saya akan menulis tentang output buffering conrol di php. Output buffering control berguna untuk menyimpan tampilan ke dalam variabel. Maksudnya adalah kita menyediakan suatu buffer untuk menangkap source html hasil proses program php kita. Contoh  sederhana adalah ketika kita telah membuat suatu website kemudian kita harus membuatnya bisa dikirim via email. Caranya mudah, cukup buffer saja website kita ke dalam suatu variabel, kemudian kirim hasilnya ke email. Selain untuk email, output buffering juga dapat digunakan untuk mekanisme caching.

Masih bingung? Kalau masih bingung mari kita perhatikan script berikut:


Pada script tersebut, source yang harusnya tampil di browser disimpan terlebih dahulu ke dalam variabel $output. Selanjutnya kita bisa menggunakan output untuk ditampilkan di browser dengan perintah echo, bisa juga kita gunakan untuk mengirim email, atau bisa disimpan di database. Dengan output buffering, kita tidak perlu capek-capek mengetik ulang tampilan template ke dalam variabel.

PHP Mahir, Mahirin skill PHP lo!

Pengantar Paradigma Publish-Subscribe

Paradigma Publish-Subscribe merupakan paradigma yang relatif baru diketahui oleh para programmer. Sebelum ke paradigma ini, biasanya para programmer sudah lebih dulu akrab dengan prosedural kemudian dilanjutkan dengan paradigma berbasis objek. Saya sendiri baru mempelajari paradigma ini di kantor baru.

Publish-Subscribe Paradigm adalah paradigma dimana program pengirim pesan mengirimkan pesan tidak langsung ke penerima, tapi ke suatu saluran untuk kemudian penerima pesan mengambil data tersebut dari saluran yang dimaksud. Paradigma ini saudaraan sama message queue, kalau ngerti itu pasti ngerti ini. Paradigma ini bisa dijalankan dengan tools Redis dan RabbitMQ.

Contoh realnya gini, misal ketika user login, maka modul login akan mengirimkan pesan ke saluran 'login', isinya 'si Adi login statusnya berhasil'. Nanti ada beberapa program yang memantau saluran 'login', kalau ada yang login, masing-masing ngejalanin fungsinya. Misal Program A nerima pesan login, dia bakal nyatet siapa dan kapan yang login, Program B mantau kalau yang login user tertentu langsung kirim email ke si empunya web, Program C mantau kalau user gagal dia nyatet gagalnya kenapa dan kapan.

Intinya sih, dalam paradigma ini alur prosesnya bukan mengalir dari sini kemudian ke sini, tapi ada tumpukan pekerjaan di beberapa saluran dan ada beberapa program yang siap mengerjakan pekerjaan itu. Paradigma ini bisa digunakan untuk pekerjaan-pekerjaan yang tidak perlu beraturan alurnya, tapi bukan berarti tidak bisa digunakan untuk program yang beraturan ya.

Demikian penjelasan singkat paradigma Publish-Subscribe, semoga pembaca ngerti. hehe

PHP Mahir, Mahirin skill PHP lo!

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?

Mengenal MySQL Prepared Statement

Pada php versi jadul, untuk menghubungi MySQL kita dapat menggunakan mysql_query. Penggunaan mysql_query rentan dengan SQL injection, untuk mencegahnya kita menggunakan mysql_real_escape_string. Berikut ini ontoh pemrograman mysql_query untuk memasukkan data komentar ke database.

$nama = mysql_real_escape_string($_POST['nama']);
$komentar = mysql_real_escape_string($_POST['komentar']);
$q = mysql_query("INSERT INTO komentar (nama,komentar) VALUES ("$nama", "$komentar")");

Pada query di atas, jika komentar berisi karakter petik atau kutip, begitu diambil lagi akan menampilkan petik atau kutip itu dengan menggunakan backslash (\), misal kata jum'at akan ditampilkan menjadi jum\'at.

Pada php versi baru (5 ke atas), kita sebaiknya menggunakan MySQL prepare statement. Prepared statement memberikan pengamanan dari injeksi dan string. Prepared statement digunakan untuk mengeksekusi statement query yang sama atau mirip berulang-ulang dengan efisiensi tinggi. Dengan fitur ini, kita cukup mengirimkan query sebanyak satu kali kemudian kita dapat mengeksekusinya dengan hanya mengirim parameter-parameternya saja sehingga waktu eksekusi lebih cepat. Contoh penggunaan prepared statement dari php.net:


PHP Mahir, Mahirin skill PHP lo!

Instalasi NoSQL Redis di Ubuntu



Redis adalah salah satu database NoSQL yang cukup mumpuni. Website resmi redis dapat diakses di http://redis.io. Bagi Anda yang belum pernah mencoba redis, silakan coba tutorial interaktifnya di http://try.redis.io/. Kali ini saya menggunakan ubuntu 10.04 untuk melakukan instalasi redis. Saya tidak menginstall dari apt-get, tapi download filenya langsung dari redis.io. Instalasinya mudah, pertama tentukan dulu mau disimpen dimana file redis-nya. Cara instalasi terdapat di http://redis.io/download, tapi saya copas aja deh ke sini.
Buka terminal, masuk ke folder tempat download redis yang diinginkan. Ketik perintah berikut:
$ wget http://redis.googlecode.com/files/redis-2.6.11.tar.gz
$ tar xzf redis-2.6.11.tar.gz
$ cd redis-2.6.11
$ make
Setelah itu untuk menjalankan redis dapat mengeksekusi file berikut:
$ src/redis-server
Biarkan console redis-server tetap berjalan. Untuk menjalankan redis cli, buka terminal baru, kemudian eksekusi file berikut:
$ src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"
Selanjutnya untuk menggunakan redis di php, mari kita gunakan library predis. Download zip library php di https://github.com/nrk/predis. Setelah itu lakukan ekstraksi terhadap file zip. Setelah diekstrak, ganti nama foldernya menjadi predis supaya mudah digunakan, setelah itu php redis siap digunakan.
Library redis yang tadi didownload memiliki banyak file dan folder, kadang memusingkan juga. Untuk menyederhanakannya, kita dapat membuat single file, caranya buka folder predis/bin dari terminal, kemudian jalankan perintah berikut:
php create-single-file.php
Setelah itu akan terbentuk satu file bernama ‘Predis.php’ di folder bin. Berikut contoh penggunaan predis:
require 'Predis.php';
$single_server = array(
    'host'    => '127.0.0.1',
    'port'    => 6379,
    'database'=> 0
);
$redis = new Predis\Client($single_server);
$redis->set('a', 'Hello world');
echo $redis->get('a');
Demikian contoh penggunaan redis dari saya, lain kali akan saya lanjutkan dengan artikel yang lebih menarik. (Arief Hidayatulloh)

PHP Mahir, Mahirin skill PHP lo!

Install Apache dan PHP di Ubuntu


Untuk instalasi Apache dan PHP di ubuntu, ketik perintah-perintah di bawah ini:
sudo apt-get install apache2
sudo apt-get install php5
sudo apt-get install php5-cli
sudo apt-get install libapache2-mod-php5
sudo /etc/init.d/apache2 restart
(Arief Hidayatulloh)

PHP Mahir, Mahirin skill PHP lo!


Membuat Virtual Host Apache untuk Domain Sendiri di Ubuntu


Mungkin pembaca sudah tahu maksudnya virtual host, jadi misalkan ada arief.com itu nanti ngarah ke var/www/arief atau ke ~/arief, jadi kalo kita ngetik arief.com di browser, yang jalan tu file di ~/arief, begitu. Langkah pertama adalah ngedit file hosts linux:
sudo gedit /etc/hosts
Selanjutnya tambahin settingan berikut di filenya:
127.0.0.1 arief.com
Contoh file hosts yang sudah diedit di komputer saya:
127.0.0.1 localhost
127.0.1.1 ariefsam-desktop
127.0.0.1 arief.com

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts


Saya membuat folder arief.com di folder /home/ariefsam lalu menambahkan file index.php yang berisi teks apa saja. Selanjutnya mari kita setting virtual host apache-nya. File yang diedit adalah  /etc/apache2/sites-available/default
Sekarang mari kita restart networking ubuntu dan service apache.
sudo /etc/init.d/networking restart
Restart juga apachenya:
/etc/init.d/apache2 restart
Sekarang begitu akses arief.com/index.php, di komputer saya bertuliskan “arief.com berhasil”.  (Arief Hidayatulloh)

PHP Mahir, Mahirin skill PHP lo!

Install Server Message Queue RabbitMQ di Ubuntu 12.04


Sebagai programmer php yang mencoba jadi mahir, kita harus belajar dan terus belajar untuk mencapai mimpi. Selain dengan belajar, untuk mencapai mimpi kita harus tidur. Seseorang yang akan melakukan aktivitas tidur biasanya melakukan rangkaian aktivitas lain seperti cuci muka, sikat gigi dan ganti baju. Coba bayangkan kita menjadi pengasuh panti asuhan. Ketika mendekati jam tidur, kita dan pengasuh lain harus melakukan rangkaian aktivitas mencuci muka anak, membantu sikat gigi dan ganti baju. Misal kita mengawasi dan membantu seorang anak untuk tidur, kita harus menunggui dia cuci muka, kemudian menunggui ketika dia sikat gigi, kemudian menunggui ketika sang anak ganti baju. Untuk menunggui satu anak bisa dibutuhkan waktu 15 menit, gimana kalo banyak anak? Di situlah message queuing diperlukan, setiap pengasuh punya tugas masing-masing, ada yang menunggui cuci muka, sikat gigi, dan ganti baju.
Cukup tentang aktivitas tidurnya, sekarang kita implementasikan kisah tadi ke aplikasi php. Misal ada satu user yang upload gambar, kemudian gambar itu harus di-crop, kemudian datanya dimasukkan ke database. Dari ketiga proses itu, proses crop memakan waktu cukup lama sehingga user harus menunggu proses crop (disusul insert ke database) selesai untuk mendapatkan notifikasi bahwa gambarnya telah di-upload. Karena prosesnya lama, ada kemungkinan terjadi timeout. Ketika terjadi timeout di proses crop,  proses sluruhnya akan gagal seluruhnya. Dalam hal ini diperlukanlah suatu metode pemberian antrian tugas.
Salah satu cara lama yang too mainstream adalah dengan membuat database antrian tugas. Dalam kasus ini misal ada program php yang tugasnya ngecrop, dia akan cek di database antrian ada gak yang belum dicrop, kalo ada tugas dia proses, kalo gak ada tugas dia gak ngapa-ngapain. Masalah utama dari metode ini adalah looping-nya itu. Setiap saat si crop.php harus ngecek database padahal belum tentu ada tugas buat dia. Metode kaya gitu kan ngeborosin memori, akses io, dan prosesor. Mendingan si crop.php ini jalannya kalo ada antrian proses crop aja! Gimana dong solusinya? Karena judulnya tentang message queue, so pasti solusinya pake message queue dong. Kali ini saya mau ajak temen-temen tuk instalasi dan konfigurasi RabbitMQ. Website resmi si RabitMQ ada di http://www.rabbitmq.com. Sekarang mari install si RabbitMQ ini di Ubuntu 12.04.
Supaya terhubung dengan apt server RabbitMQ, mari kita tambahin sources-nya di Ubuntu. Buka terminal, ketik perintah sebagai berikut:
sudo gedit /etc/apt/sources.list
Abis itu tambahin “deb http://www.rabbitmq.com/debian/ testing main” di akhir baris. Ni tampilannya waktu saya tambahin:
sourcelist rabitmq
Tampilan sourcelist menggunakan gedit
Simpen terus tutup geditnya. Abis itu supaya gak ada warning public key, coba dari terminal pindahin aktif direktorinya ke documents, terus ketik perintah sebagai berikut:
wget http://www.rabbitmq.com/rabbitmq-signing-key-public.asc
sudo apt-key add rabbitmq-signing-key-public.asc
Sekarang jalanin perintah update apt, sebagai berikut:
sudo apt-get update
Setelah menyelesaikan proses di atas, baru deh sekarang kita install RabbiMQ:
sudo apt-get install rabbitmq-server
Buat ngatur pembatasan file yang di-handle, kita bisa edit ulimit di file /etc/default/rabbitmq-server.
Untuk menjalankan rabbitmq di php, dibutuhkan library. Web rabbitmq merefer kehttps://github.com/rabbitmq/rabbitmq-tutorials/tree/master/php untuk library php-nya. Kita harus pake minimal php 5.3 supaya bisa ngejalanin php-amqlib. Linux kita juga harus terinstall git untuk mendownload. Instalasi php-amqlib sebagai berikut:
git clone http://github.com/videlalvaro/php-amqplib.git lib/php-amqplib
Tampilan di monitor saya:

Cloning into 'lib/php-amqplib'...
remote: Counting objects: 1260, done.
remote: Compressing objects: 100% (582/582), done.
remote: Total 1260 (delta 717), reused 1161 (delta 627)
Receiving objects: 100% (1260/1260), 5.21 MiB | 212 KiB/s, done.
Resolving deltas: 100% (717/717), done.
Setelah dilakukan, nanti file-file dari php-amqlib akan masuk ke folder_aktif/lib/php-amqlib. Copy-in tuh folder lib ke website kita, terus copy juga file-file di https://github.com/rabbitmq/rabbitmq-tutorials/tree/master/php ke web kita. Abis itu coba deh jalanin php receive.php terus buka terminal baru, jalanin php send.php. Di terminal receive.php bakal muncul pesan:

[*] Waiting for messages. To exit press CTRL+C
[x] Received Hello World!
Kalau kita jalanin lagi di terminal lain php send.php maka si terminal receive bakal nampilin lagi[x] Received Hello World!, artinya pesan telah diterima dan setelah itu pesan dihilangkan dari queue.
Supaya makin mantap, silakan baca tutorial lengkap di website resminya, dijamin lebih joss daripada di sini. Demikian instalasi RabbitMQ, selanjutnya nanti kita bahas penggunaan RabbitMQ. (Arief Hidayatulloh)

PHP Mahir, Mahirin skill PHP lo!