All posts tagged PHP

Eclipse Democamps 2010

Kemarin tanggal 10 Juli 2010 gwa baru saja ikut Eclipse Democamps 2010. Yah sebenarnya gwa ga tau ini termasuk seminar, meet up atau promosi eclipse tapi berhubung gwa adalah pengguna Eclipse semenjak beberapa bulan lalu maka gwa iseng-iseng datang ke acara ini.

Perjalanan dimulai dari kosan gwa dengan ditemani sang kekasih yaitu adinda Riani yang imut dan bulat seperti bola ping pong ( nyungsep dolo sebelum kena granat ). Sebenarnya kami rada telat berangkatnya ( kira-kira jam 9:30 ) sementara acaranya jam 10:00 dan ditambah lagi gwa dan riani ga tau jalan sekali kesana.

Dibekali dengan insting hewani maka kami nekat berangkat dan ternyata berakhir dengan muter-muter di sudirman. Sebenarnya gwa tau persis itu posisi gedung stock exchange ( setelah dikasih tau riani ) tapi emang jalan sudirman kalau mau muter balik rada ribet jadi berakhir lah kami jalan-jalan hampir setengah jalan sudirman. ( bagi yang sudah lama malang melintang di jalan sudirman pasti sudah tau la )

Setelah sampai tempat parkir motor adinda Riani sempat merasa kesal gara-gara kami rada telat sampenya ( kira-kira jam 10:18 ) dan sepertinya kami salah markir motor. Tapi ternyata setelah kami tanya ke satpam yang bertugas ternyata kami tidak salah parkir motor dan gedung stock exchangenya berada di sebelah tempat kami parkir motor ( dan riani yang tadi kesel seperti mesin diesel berubah menjadi senang seperti mesin benang ).

Gambar Riani Cemberut

Gambar Riani Cemberut

Cukup cerita tentang masalah dalam negeri, kita lanjut dengan cerita tentang acaranya. Ketika kami datang ternyata acaranya belum dimulai dan yang datang kok lebih sedikit dari yang diperkirakan ( kira-kira ada 30 orang saja ). Saat itu ada seorang bapak dari microsoft tengah berbincang-bincang dengan para peserta ( maaf ya pak saya lupa nama bapak ) –> setelah dikasih tau ternyata nama bapaknya Risman Adnan.

Dari perbincangan singkat bapak itu, gwa dapat menarik kesimpulan bahwa ternyata sang bapak kerja di microsoft ( ya iyalah ) dan dalam perbincangan singkat, bapak tersebut meng-encourage para peserta agar bisa buka bisnis sendiri serta tidak mempunyai mental karyawan. ( si bapak banyak menceritakan keluh kesahnya jika umur sudah tua, punya anak dan “gampang”nya buka bisnis )

Selesai dengan seminar motivasinya ( arigatou bapak microsoft ) kemudian dilanjutkan dengan acara intinya. Acara pertama dimulai dengan presentasi cara mengintegrasikan Eclipse Helios dengan Team Foundation Server ( version control punya microsoft ) yang dibawakan oleh pak Ronald Rajagukguk. Namun dikarenakan gwa sudah jatuh cinta dengan Git maka gwa ga gitu tertarik untuk mencobanya, tapi lumayan buat tambah ilmunya ( terima kasih pak Ronald Rajagukguk dari microsoft atas ilmunya).

Selesai makan siang baru dilanjutkan lagi dengan presentasi tentang Eclipse Helios yang dibawakan oleh pak Frans Thamura dari Meruvian Foundation. Presentasi yang dibawakan oleh pak Frans termasuk singkat dan lebih banyak “belajar sendirinya”. Dan dari presentasi “belajar sendiri” ala pak Frans maka yang bisa gwa simpulkan adalah :

Eclipse Helios ga berbeda jauh dengan Galileo tapi ada tambahan fitur market placenya ( udah kek main age of empire aja pake market ) dan fitur-fitur lainnya yang tidak sempat dijelaskan.

Setelah presentasi “belajar sendiri”, acara dilanjutkan dengan presentasi tentang Android dengan menggunakan Eclipse dan ditutup dengan presentasi tentang BlueOxygen yang ‘kayaknya’ merupakan sebuah IDE yang memungkinkan kita membuat design UI Java seperti di VB ( wah cocok buat gwa yang baru mo pegang Java).

Overall menurut gwa acaranya cukup asik karena tempatnya enak ( microsoft gitu loh ), dapat makan ( padahal gwa ampir desperate mo cari makan dimana ), dapat ceramah tentang pandangan orang-orang yang lebih berpengalaman di dunia IT terutama bertemu dengan pak Frans Thamura.

Secara pribadi gwa belum pernah ikut seminar, meet up atau acara-acara open source lainnya. Salah satu acara open source yang selama ini ingin gwa ikutin adalah CakeFest ( semacam seminar tentang CakePHP Framework). Tapi apa daya, uang ga punya, acaranya jauh di chicago jadi terpaksa mencari-cari konferensi PHP yang dekat.

Cake Festival

Cake Festival

Tetapi sejauh mata memandang gwa belum pernah menemukan konferensi PHP atau meet up PHP di Jakarta khususnya yang membahas tentang advance teknologi PHP ( yah kalau basic PHP, Joomla, Drupal, WordPress mungkin banyak ya ). Gwa sih pengennya ngumpul-ngumpul dan omongin tentang teknologi PHP yang terbaru seperti PHP 5.3, fitur namespacenya, Unit Test, Test Driven Development, NoSQL database seperti Mongo dan Couch, framework-framework lainnya.

Jadi gwa cukup salut dengan pak frans yang mungkin dapat dikatakan “gila” dengan Open Sourcenya dan berusaha menebarkan kegilaan tersebut melalui komunitas-komunitas yang dia buat. Sementara gwa disini hanya menunggu orang-orang untuk membuat sebuah komunitas dan mempertanyakan kenapa tidak ada komunitas seperti itu, tapi di sisi lain pak Frans malah giat membuat komunitas-komunitas ( bagus pak, tingkatkan terus perjuangan bapak. saya ikutin saja dari belakang :P ). Jadi sekarang saatnya mencari-cari PHP conference di Jakarta :)

Install PHP-FPM di FreeBSD dengan web server Nginx

Setelah mengalami beberapa problem dengan web server Binus Access yang menggunakan Nginx, akhirnya gwa memutuskan untuk mengganti php-cgi menjadi php-fpm.

Untuk mengubah php-cgi menjadi php-fpm ternyata tidak lah sulit, apalagi dengan adanya fitur ports dari FreeBSD. Pertama-tama cukup download file ports php-fpm dari websitenya php-fpm .

Untuk versi nya sendiri bisa disesuaikan dengan versi php anda, kalau gwa sih menggunakan versi php 5.2.10. Jadi hal pertama yang gwa lakukan adalah mendownload php-fpm versi 5.2.10.

Setelah itu tinggal extract aja file php-5.2.10-fpm-0.5.13.tar.gz kemudian pindahin folder php5-fpm nya ke folder /usr/ports/lang. Kemudian tinggal jalankan perintah make dan make install.

Tunggu proses instalasi selesai kemudian ubah file /etc/rc.conf dan tambahkan

1
php_fpm_enable=”YES”

masuk ke dalam settingan nginx.conf di /usr/local/etc/nginx/nginx.conf dan ubah beberapa settingan di

1
2
3
4
5
6
7
8
9
10
location / {
root /usr/local/www/nginx;
index index.php index.html index.htm;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/www/nginx$fastcgi_script_name;
include fastcgi_params;
}

fastcgi_param SCRIPT_FILENAME /usr/local/www/nginx$fastcgi_script_name; ini adalah tempat folder root web anda berada.

Lalu lanjut dengan edit file php-fpm.conf di /usr/local/etc/php-fpm.conf

1
2
3
4
5
6
7
8
<!– <value name=”user”>nobody</value> –>
<!– <value name=”group”>nobody</value> –>
 
ubah nobody menjadi www
 
<value name=”user”>www</value>
 
<value name=”group”>www</value>

matikan service sebelumnya yaitu php-cgi dan jalankan php-fpm nya

1
/usr/local/etc/rc.d/php-fpm start

kemudian tinggal testing saja apakah berjalan lancar atau tidak settingannya. Moga-moga lebih stabil dan ga down lagi hohohoho :D

Lithium atau Li3 : PHP 5.3++ Framework

Setelah 3 hari dicekcoki dengan lagu Boyce Avenue yang diputar berulang-ulang di foobar akhirnya gwa jadi ada semangat buat update blog. Sebenarnya pengen nulis tentang Ruby on Rails dan e-TextEditor tapi keknya lebih pengen tulis tentang Lithium dulu deh.

Jadi apakah Lithium itu ? merk baterai ? merk baju ? merk mobil ? merk parfum ? atau merk deterjen ? jelas saja bukan. Lithium yang saya gwa maksud disini adalah salah satu framework PHP yang tersohor sekali seantero jagad raya, sampe presiden SBY aja kalo pidato dicoding dolo pake neh framework. Itu versi lebainya, sebenarnya Lithium atau Li3 ini adalah sebuah framework besutan bekas pentolan ex project manager dan lead developernya CakePHP.

Seperti yang kita ketahui bersama bahwa Garrett J. Woodworth ( gwoo ) dan Nate Abele ( _nate_ ) memutuskan untuk hengkang dari CakePHP kira-kira 2-3 bulan lalu. Banyak desas-desus mengatakan kalau mereka terlibat konflik dengan foundernya CakePHP ( PhpNut ) dimana founder CakePHP ini tidak setuju dengan ide mereka tentang Cake 3.0.

Karena itulah akhirnya mereka minta cerai dan membuat framework sendiri yang basisnya dari Cake 3.0 dan diberi nama Lithium. Mungkin yang menjadi pertanyaan yang muncul di benak kita adalah apakah kehebatan framework baru ini ? kenapa kita harus belajar pake framework ini ? haruskah kita meninggalkan framework lama demi Li3 ? apa yang harus kita katakan kepada anak istri kita ? apakah orang tuaku akan setuju dengan keputusan ini ? aku ini anak siapa ? pacarku lagi dimana ? dan banyak pertanyaan-pertanyaan lainnya…

Beberapa fitur yang sempet gwa baca-baca dan sepertinya menarik adalah :

  • Li3 menggunakan namespace yang sebenarnya sampai sekarang gwa belum mengerti banyak sih. Tetapi setau gwa namespace adalah fitur baru dari PHP 5.3 yang katanya dapat mempercepat performa dari framework ini.
  • Li3 hanya untuk PHP 5.3++, berbeda dengan CakePHP yang mendukung PHP 4 & 5. Hal inilah yang katanya salah satu pemicu kenapa founder CakePHP tidak menyetujui Cake 3.0
  • Code Covention dimana disebutkan bahwa Lithium adalah framework pertama yang menggunakan Code Convention sehingga nanti kita dapat menggabungkan Lithium dengan framework seperti Symfony, dan Zend Framework
  • Lithium dibangun untuk menjadi framework yang RAD ( rapid application development ) dan Light Weight ( ringan )

Itulah beberapa fitur yang sempat gwa baca dan tentang Lithium. Untuk sekarang developmentnya baru menginjak versi 0.3, masih terlalu dini untuk membangun sebuah aplikasi dengan menggunakan framework ini tapi melihat dari visi yang ingin dicapai dan pengalaman dari developernya membuat framework ini salah satu framework yang menjanjikan nantinya.

Bayangkan jika nanti kita bekerja sama dengan orang yang menggunakan framework Symfony, karena adanya Code Convention kita dapat dengan mudah menggabungkan library-library dari framework yang berbeda. Berapa banyak waktu yang bisa kita hemat dan tentu saja seberapa bahagianya istri atau pacar kita nanti melihat kerjaan kita cepat kelar, apalagi anak di rumah semakin senang karena ayahnya punya waktu lebih banyak buat main sama dia.

Tapi untuk sekarang gwa sih lebih pengen belajar Ruby on Rails dulu, tar kalo Lithium dah stable baru jajal ini framework. :D

Group select box di CakePHP

Grouping di dalam select box adalah hal yang gampang ketika kita menggunakan codingan php biasa, tetapi kalau sudah masuk ke dalam codingan CakePHP kita harus banyak membaca documentation untuk teknik2nya, tickets jika ada yang pernah menanyakan hal yang sama dan tentu saja API agar kita tahu fungsi dari method yang akan kita pakai.

Jadi sekarang kita akan membuat sebuah grouping dalam select box seperti dalam gambar di bawah ini :

CakePHP Group Select

CakePHP Group Select

Di dalam contoh diatas gwa menggunakan 3 buah table di antaranya table majors ( jurusan ), table faculties ( fakultas ) dan table levels ( untuk pembagian apakah dia D3/S1 ). Hal pertama yang harus kita lakukan adalah men-query isi table dari majors ( dalam hal ini gwa menggunakan ClassRegistry karena table majors tidak ada relation dengan controller gwa ) :

1
2
3
4
$majors = ClassRegistry::init("Major")->find("all");
 
atau kalau punya relation / berada dalam controller sendiri
$majors = $this->Major->find("all");

Kemudian kita akan menggabungkan hasil query tersebut dan menyusunnya menjadi array yang jika kita masukkan ke dalam form helper maka akan secara otomatis menjadi select box yang tergroup. Kita akan menggunakan bantuan Set::combine untuk melakukan hal tersebut. Berikut contoh codingannya :

1
2
3
4
$majorsCombine = Set::combine($majors, "{n}.Major.id", array("%s - %s",
"{n}.Level.name", "{n}.Major.name"), "{n}.Faculty.name"); 
 
untuk penjelasan parameternya dapat dilihat di API CakePHP : <a href="http://api.cakephp.org/class/set#method-Setcombine">API CakePHP</a>

sedikit penjelasan tentang parameter yang gwa gunakan yaitu :

  • $majorsCombine Nama variable penampung.
  • Set::combine Nama method yang kita gunakan.
  • $majors Sumber data kita
  • {n}.Major.id Path pertama atau biasanya nilai dari select box kita
  • array(‘%s – %s’,'{n}.Level.name’, ‘{n}.Major.name’) Kalau ini path kedua yang berfungsi sebagai label dari isi select box kita, jika dilihat itu isinya ada level dan major jadi nanti keluarnya ( S1 – Teknik Informatika )
  • {n}.Faculty.name’ ini nama groupnya

Selanjutnya tinggal digunakan saja di viewnya seperti ini :

1
<?php echo $form->select("nama-form",$majorsCombine,null,null,"-- Pilih Jurusan Pertama --"); ?>

Penjelasannya kira-kira begini :

  • $form->select ini form helper yang kita gunakan
  • nama-form nama form helper yang kita gunakan
  • $majorsCombine sumber data
  • null,null,’– Pilih Jurusan Pertama — parameter tambahan lagi

Semoga membantu, silakan dicoba.. kalau ga jalan, dicoba lagi, kalau ga jalan juga ya sudah terima nasih aja :D

Koneksi ke Microsoft SQL Server dengan PHP di FreeBSD

Beberapa hari yang lalu gwa melakukan perpindahan server Binus Access ke server baru yang menggunakan FreeBSD ( sebelumnya menggunaka Ubuntu Server 8.04 ). Setelah melakukan konfigurasi-konfigurasi dan beberapa persiapan yaitu :

  • Backup database dan file website Binus Access
  • Konfigurasi Nginx ( web servernya ganti Nginx ) agar bisa membaca mod_rewrite
  • Setting NFS dari server asterix ke server Binus Access
  • Setting IP
  • Beberapa settingan kecil lainnya

Jadi setelah dirasa semua persiapan sudah kelar, akhirnya perpindahan server dilakukan yaitu mencabut kabel LAN di server lama dan mencoloknya di server baru ( yap pindahin server cuma begitu saja ). Nah setelah gwa melakukan perpindahan server gwa pun mencoba semua fitur-fitur yang ada di binus-access satu persatu apakah ada yang ga jalan. Ternyata eh ternyata pas gwa tes registrasi untuk user baru terjadilah error dimana yang kalau gwa telusuri dikarenakan server tersebut tidak dapat mengakses server binusmaya ( menggunakan mssql ).

Jadi gwa pun mulai mencek dengan menggunakan phpinfo(); apakah extension mssql sudah terinstall di server FreeBSD tersebut atau blum ( karena seingat gwa pas nginstall php-fpm extension mssql sudah gwa aktifkan ), pas gwa cek ternyata extension mssql sudah terinstall dengan benarnya ( berarti tidak ada kesalahan dengan extension mssql.

Setelah itu gwa pun mulai searching di google dan akhirnya ketemu sebuah artikel yang menyebutkan tentang FreeTDS, gwa sih kurang ngerti juga tentang FreeTDS tapi kalau artikel itu bilang kalau mau connect mssql menggunakan FreeBSD harus menggunakan FreeTDS ini. Oleh karena itu tanpa banyak cing cong langsung saja gwa install FreeTDS lewat ports FreeBSD, neh syntaxnya :

cd /usr/ports/databases/freetds
make install clean

Setelah menginstall FreeTDS langsung saja config freetds.confnya yang terletak di /usr/local/etc/freetds.conf ini isinya config freetds gwa :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#
#
#   $Id: freetds.conf,v 1.11 2005/12/05 21:34:12 freddy77 Exp $
#
# The freetds.conf file is a replacement for the original interfaces
# file developed by Sybase.  You may use either this or the interfaces
# file, but not both.
#
# FreeTDS will search for a conf file in the following order:
#
#     1) check if a file was set programatically via dbsetifile() and
#        is in .conf format, if so use that,
#
#     2) otherwise, if env variable FREETDSCONF specifies a properly 
#        formatted config file, use it,
#
#     3) otherwise, look in ~/.freetds.conf,
#
#     4) otherwise, look in @sysconfdir@/freetds.conf
#
# If FreeTDS has found no suitable conf file it will then search for
# an interfaces file in the following order:
#
#     1) check if a file was set programatically via dbsetifile() and 
#        is in interfaces format, if so use that,
#
#     2) look in ~/.interfaces
#
#     3) look in $SYBASE/interfaces (where $SYBASE is an environment
#        variable)
#
# Only hostname, port number, and protocol version can be specified
# using the interfaces format.
#
# The conf file format follows a modified Samba style layout.  There
# is a [global] section which will affect all database servers and
# basic program behaviour, and a section headed with the database
# server's name which will have settings which override the global
# ones.
#
# Note that environment variables TDSVER, TDSDUMP, TDSPORT, TDSQUERY, 
# and TDSHOST will override values set by a .conf or .interfaces file.
#
# To review the processing of the above, set env variable TDSDUMPCONFIG
# to a file name to log configuration processing.
#
# Global settings, any value here may be overridden by a database
# server specific section
[global]
        # TDS protocol version
	tds version = 4.2
 
;	initial block size = 512
 
	# uses some fixes required for some bugged MSSQL 7.0 server that
	# return invalid data to big endian clients
	# NOTE TDS version 7.0 or 8.0 should be used instead
;	swap broken dates = no
;	swap broken money = no
 
	# Whether to write a TDSDUMP file for diagnostic purposes
	# (setting this to /tmp is insecure on a multi-user system)
;	dump file = /tmp/freetds.log
;	debug flags = 0xffff
 
	# Command and connection timeouts
;	timeout = 10
;	connect timeout = 10
 
	# If you get out of memory errors, it may mean that your client
	# is trying to allocate a huge buffer for a TEXT field.  
	# (Microsoft servers sometimes pretend TEXT columns are
	# 4 GB wide!)   If you have this problem, try setting 
	# 'text size' to a more reasonable limit 
	text size = 64512
 
# This is a Sybase hosted database server, if you are directly on the
# net you can use it to test.
[JDBC]
	host = 192.138.151.39
	port = 4444
	tds version = 5.0
 
# The same server, using TDS 4.2.  Used in configuration examples for the
# pool server, since the pool server supports only TDS 4.2.
[JDBC_42]
	host = 192.138.151.39
	port = 4444
	tds version = 4.2
 
# The client connecting to the pool server will use this to find its
# listening socket.  This entry assumes that the client is on the same
# system as the pool server.
[mypool]
	host = 127.0.0.1
	port = 5000
	tds version = 4.2
 
# A typical Microsoft SQL Server 7.0 configuration	
;[MyServer70]
;	host = ntmachine.domain.com
;	port = 1433
;	tds version = 7.0
 
# A typical Microsoft SQL Server 2000 configuration
[stored]
	host = 10.21.50.16
	port = 1433
	tds version = 8.0
 
# A typical Microsoft SQL Server 6.x configuration	
;[MyServer65]
;	host = ntmachine.domain.com
;	port = 1433
;	tds version = 4.2
<pre>
 
jadi buat settingan mssql buat server binusmaya itu gwa letakin di bagian ini :
<pre lang="bash" line="1">
# A typical Microsoft SQL Server 2000 configuration
[stored]
	host = xx.xx.xx.xx
	port = 1433
	tds version = 8.0

ganti tulisan xx.xx.xx.xx dengan ip server SQL Server nya. Nah sekarang saatnya mencoba melakukan koneksi ( ada sedikit perbedaan cara melakukan koneksi ) begini contoh codingnya dalam PHP :

1
2
3
4
$host = "stored";
$user = "yourusername";
$pass = "yourpassword";
$db = mssql_connect($host,$user,$pass) or die ("Unable to connect to mssql databases");

Jadi perbedaannya adalah $host yang harus diisi dengan nama yang ada set di freetds.conf tadi, jadi jika pada freetds.conf ada menset namanya menjadi “mssql” maka pada host anda ubah menjadi “mssql”. Kira-kira begitulah caranya yang cukup membuat gwa pusing selama 2 jam mencari-cari caranya. Lanjut ngejunk lagi ah :P

Setting mod_rewrite atau SEF Joomla di Nginx

Yap sambil menunggu server World of Warcraft yang tak kunjung up-up gwa buat tutorial sedikit tentang setting mod_rewrite Joomla di Nginx. Sudah pada tau Nginx ? kalau belum tau gwa kasih tau dah. Nginx itu adalah salah satu web server seperti Apache, Lighttpd, Apache Tomcat, Jetty, IIS, Zeus dan lainnya. Nginx ini ( dibacanya Engine X ) kabarnya sih lebih cepat dan stabil dibandingkan Apache yang sudah tersohor sebagai server PHP. Untuk detail lengkap tentang fitur-fiturnya silakan baca link ini.

Kalau pengen liat perbandingan kecepatannya dapat googling sendiri soalnya gwa juga blom coba ngetes kecepatannya soalnya gwa cuma pengen ngetes aja bedanya makai Nginx dan Lighttpd. Setelah gwa menggunakan kedua web server yang katanya lebih “cepat” dari Apache tersebut gwa menemukan salah satu fitur penting yang kurang yaitu kemampuan kedua web server tersebut untuk membaca file .htaccess, dan itu artinya apa ? itu artinya kita tidak bisa langsung memakai fitur-fitur mod_rewrite yang sudah disediakan engine-engine dan framework-framework seperti CakePHP, Joomla, dan WordPress.

Tapi untunglah teknologi sudah maju, cukup search-search dikit ternyata langsung dapat deh tutorial mod_rewrite Joomla di Nginx. Tapi walaupun teknologi sudah maju tapi ternyata tutorial yang didapat tidak cukup maju ( alias dicoba-coba ga jalan ). Jadi daripada ntar ada orang yang bernasib sama kek gwa makanya dengan senang hati gwa bikin ini tutorial hohoho. Ya udah kita back to topic tar kelamaan out of topic.

Nah, jadi untuk membuat mod_rewrite atau fitur SEF Joomla jalan di Nginx kita hanya perlu membuat rulesnya dan dengan sedikit tricky way kita bisa buat semua berjalan seperti di Apache. Kira-kira begini settingan nginx.conf gwa ( gwa ga bakal jelasin cara nginstall Nginx dan setting PHP ) :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#user  nobody;
worker_processes  1;
 
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
 
#pid        logs/nginx.pid;
 
 
events {
    worker_connections  1024;
}
 
http {
    include       mime.types;
    default_type  application/octet-stream;
 
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
 
    #access_log  logs/access.log  main;
 
    sendfile        on;
    #tcp_nopush     on;
 
    #keepalive_timeout  0;
    keepalive_timeout  65;
 
    #gzip  on;
 
    server {
        listen       80;
        server_name  binus-access.com v2.binus-access.com;
 
        #charset koi8-r;
 
        #access_log  logs/host.access.log  main;
	location / {
		root   /usr/local/www/data;
		index  index.html index.htm index.php;
		error_page 404 = @joomla; 
	}
 
	location @joomla { 
		rewrite ^(.*)$ /index.php?q=$1 last;
	}
 
        #error_page  404              /404.html;
 
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/local/www/nginx-dist;
        }
 
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
 
        location ~ \.php$ {
		fastcgi_pass 127.0.0.1:9000;
		fastcgi_index index.php;
		fastcgi_param SCRIPT_FILENAME /usr/local/www/data$fastcgi_script_name;
		include fastcgi_params;	
        }
 
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
 
#	location ~ \.php$ {
#            root           html;
#            fastcgi_pass   127.0.0.1:9000;
#            fastcgi_index  index.php;
#            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
#            include        fastcgi_params;
#        }
 
         #deny access to .htaccess files, if Apache's document root
         #concurs with nginx's one
 
   #     location ~ /\.ht {
   #         deny  all;
   #   }
    }
 
    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;
 
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
 
 
    # HTTPS server
    #
    #server {
    #    listen       443;
    #    server_name  localhost;
 
    #    ssl                  on;
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;
 
    #    ssl_session_timeout  5m;
 
    #    ssl_protocols  SSLv2 SSLv3 TLSv1;
    #    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    #    ssl_prefer_server_ciphers   on;
 
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
 
}
<pre>
 
Jadi kalau dilihat-lihat dari settingan nginx.conf gwa, cuma ada 2 hal bagian yang harus diperhatikan yaitu bagian ini :
<pre lang="bash" line="1">
	location / {
		root   /usr/local/www/data;
		index  index.html index.htm index.php;
		error_page 404 = @joomla; 
	}
 
	location @joomla { 
		rewrite ^(.*)$ /index.php?q=$1 last;
	}

Kalau ditranslate kira-kira bacanya begini : jika ada error page 404 maka dia akan set rules menjadi @joomla. Semoga tutorial ini berguna, kalau ga jalan coba dilihat-lihat dolo settingannya lagi soalnya TESTED dan WORKS ( silakan ke www.binus-access.com ) itu adalah web yang pakai Nginx. Btw, selain itu ada beberapa web besar yang menggunakan Nginx juga yaitu Kaskus dan WordPress. Jadi itu juga menambah keyakinan gwa untuk menggunakan Nginx ini. Sekian tutorial dari gwa, kalau ada pertanyaan comment ato add YM aja di channel_life.

Blank page pada CakePHP

Hari ini gwa mencoba memindahkan sebuah project yang dibuat dengan menggunakan CakePHP ke komputer lain. Persiapan standard seperti mencopy folder project dan nge-dump file database sudah dilakukan. Trus file-file tersebut dimasukkan ke dalam flash disk untuk dipindahkan.

Tetapi ternyata semua tidak berjalan mulus seperti yang gwa kira. Setelah selesai mengcopy file tersebut ke dalam komputer yang lain, ketika ingin membuka halaman cakephp ternyata hanya halaman kosong saja yang terbuka.

Pertama kali kecurigaan dimulai dari webserver dan settingan PHP. Soalnya di komputer yang ini gwa menggunakan Lighttpd sementara di komputer di kosan pakai apache, jadi mulai deh googling mencari apakah ini salah dari webserver ( hasilnya didapat kalau ingin mencari error maka dapat melihat dari file log yang ada di folder log ).

Setelah mengutak-atik file conf nya Lighttpd dan melihat file log, ternyata tidak ada yang aneh dengan settingan lighttpd dan settingan php.ini nya. Kemudian kecurigaan menuju ke CakePHP nya, jadi mulai deh search di google tentang CakePHP blank page. Dan ternyata ga lama mencari-cari akhirnya ketemu solusinya. Ternyata solusinya gampang cukup delete file cache yang ada folder tmp/cache dan ternyata hasilnya… langsung bisa kebuka webnya :D

jadi kalau copy file cakephp ke server baru delete aja cachenya biar aman, supaya ga page kosong jadinya :D

Review CakePHP

Setelah sekian lama ga update blog, akhirnya update blog lagi deh… Untuk kali ini ga bakalan cerita-cerita yang aneh-aneh ataupun yang lucu-lucu… soalnya emang lagi ga ada kejadian yang benar-benar “klik” yang bisa diceritakan ( beberapa hari ini semua terasa semu hix ).

Jadi kali ini gwa akan melakukan review terhadap framework PHP yang sudah gwa pelajari kurang lebih 5 bulan lamanya yaitu CakePHP. Selama 5 bulan ini gwa lewati dengan mempelajari CakePHP, dari baca ebook, nonton video tutorial sampai tanya-tanya sama orang-orang di channel #cakephp di irc.freenode.net.

Dalam waktu 5 bulan ini sudah banyak yang gwa pelajari dari CakePHP, tapi tetep masih lebih banyak lagi yang harus dipelajari dari CakePHP… Jadi intinya gwa bakal sharing apa yang sudah gwa dapatkan setelah lebih kurang 5 bulan mempelajari CakePHP ( FYI, gwa belom pernah pakai framework lain selain CakePHP ).

Salah satu hal yang gwa dapatkan dari mempelajari CakePHP adalah mengerti arsitektur MVC ( Model View Controller ). Untuk yang pengen tahu lebih banyak tentang MVC dapat dibaca di http://en.wikipedia.org/wiki/Model-view-controller.

Tapi gwa coba rangkum beberapa hal yang gwa mengerti tentang MVC, dalam pemprograman MVC seluruh program dibagi menjadi 3 bagian utama yaitu Model ( berhubungan dengan database ), Controller ( berhubungan dengan logic ), View ( berhubungan dengan tampilan program). Jadi jika pada pemprograman procedural atau pemprograman barbar kita bagi dalam function-function, maka pada MVC kita harus membaginya menjadi 3 bagian besar.

Jika kita ingin melakukan query,validasi, edit data kita masukkan ke dalam Model. Kalau kita ingin mengatur aliran data maka kita memasukkannya ke dalam Controller, dan yang terakhir kali jika kita ingin mengatur tampilan dari program kita ( designnya ) maka kita atur di View. 3 hal tersebut saling berhubungan dan mempunyai peran masing-masing.

Selain MVC tentu saja gwa banyak mempelajari penggunaan dari CakePHP itu sendiri. Penggunaan Helper-helper seperti AJAX, Session, Javascript, dan HTML. Jadi CakePHP secara default sudah menyediakan beberapa helper. Helper itu sendiri adalah sebuah class yang dapat digunakan untuk membantu kita dalam membuat aplikasi sesuai dengan helper yang kita gunakan. Jadi jika kita ingin membuat sebuah website yang menggunakan AJAX, kita dapat menggunakan AJAX helper yang dapat meringankan tugas kita dalam membuat aplikasi AJAX itu. Sama halnya jika kita ingin membuat session maka kita dapat menggunakan session helper untuk membantu kita mengatur session di CakePHP.

Selain helper dikenal juga istilah element di dalam CakePHP. Element disini bukan berarti elemen air, elemen api, elemen tanah. Element di dalam CakePHP itu lebih dapat diartikan sebagai view yang reuseable. Jadi misalnya kita mempunyai sebuah form dan kita ingin membuat form tersebut di 2 view yang berbeda maka kita dapat menggunakan element. Jadi kita tidak perlu membuat ulang kembali form tersebut di 2 view yang berbeda, cukup buat sebuah element dan panggil element tersebut di 2 view itu.

Paging dengan element

Paging dengan element

Dan satu hal lagi yang harus diperhatikan dalam merancang sebuah aplikasi dengan menggunakan konsep MVC adalah Model sebaiknya lebih memiliki banyak method dibandingkan controller. Hal itu dikarenakan konsep dari OOP itu sendiri yaitu ‘reuseable’.

Jadi gwa bisa menyimpulkan selama 5 bulan apa saja keuntungan yang didapatkan dari mempelajari CakePHP

  • Mengerti konsep MVC.
  • Waktu untuk mendevelop program menjadi lebih cepat.
  • Source code menjadi lebih terstruktur.
  • Kemampuan berbahasa inggris meningkat ( banyak baca cookbook + tanya2 pakai bahasa inggris wakaka.

Walaupun gwa tidak menampik adanya kerugian-kerugian yang didapatkan dari mempelajari CakePHP, ini beberapa kerugian tersebut :

  • Harus belajar kembali karena dengan menggunakan framework tentu saja kita harus mempelajari API yang sudah tersedia.
  • Aplikasi jadi lebih lemot.
  • Jadi makin malas karena sudah dimanjakan dengan fitur-fitur walaupun tidak semalas karena menggunakan CMS
  • Makin lupa syntax2 PHP yang dasar karena keseringan menggunakan syntax CakePHP

Tapi walaupun begitu semua kekurangan itu tertutupi oleh kelebihan-kelebihan yang didapatkan dari mempelajari CakePHP tersebut. Yah jelas, kalau banyak ruginya napaen gwa capek-capek belajar framework. Mungkin ada yang beranggapan kalau menggunakan framework itu sendiri dapat memperbodoh diri sendiri, dan gwa pun tidak menampik hal tersebut.

Tapi gwa menganalogikan mempelajari framework ini seperti sedang memasak mie goreng. Bedanya jika kita menggunakan framework maka kita menggunakan mie yang sudah dijual di pasaran tanpa kita tahu cara membuat mie tersebut. Sementara orang yang tidak menggunakan framework adalah orang yang membuat mienya sendiri.

Pertanyaannya adalah apakah mie goreng yang dibuat dengan mie jualan di pasar pasti lebih enak daripada mie yang dibuat sendiri ? bagaimana sebaliknya ? tentu saja jawabnya tergantung dari banyak faktor ( bisa kualitas mie, bisa kemampuan orang yang memasak ).

Sama halnya dalam menggunakan framework, seberapa bagusnya aplikasi kita bukan saja ditentukan dari framework apa yang kita gunakan, bukan juga ditentukan dari apakah kita menggunakan framework atau tidak. Tetapi juga ditentukan dari kemampuan orang tersebut, karena di mata client tetap saja yang dilihat itu adalah hasil jadinya, bukan codingannya ( kebanyakan client kan ga ngerti2 banget :P ). Jadi client mana mo tau itu mie hasil buat sendiri ato hasil beli di pasar, yang mereka tahu cuma “mie ini enak”, “mie ini ga enak”. Udah itu aja, simple sekali kan ?

Yah sebenarnya kalau mau didebatkan lagi sebenarnya banyak yang bisa didebatkan tapi intinya sekarang gwa malas nulis panjang-panjang dan juga tentu saja gwa mendukung semua orang untuk mempelajari framework. Kenapa ? karena sekarang persaingan sudah semakin ketat, kita sekarang membuat aplikasi semakin mudah dan semakin cepat. Ibarat kata pepatah “Siapa cepat dia dapat”. Sekarang itu ada di tangan anda, apakah anda ingin memakai mie yang dijual atau buat mie sendiri :P hohoho yang penting untuk sekarang 5 star buat CakePHP deh :)

Gwa menyerah… udah cukup… ga tahan lagi…

gwa menyerah…
sudah cukup selama ini gwa dipermainkan…
dibohongi…
dianggap remeh…

emang apa salah gwa ?
apa salah gwa ?
apa ?

udah gwa ikutin semua perintah loe…
tapi tetep aja…
gwa tetep aja salah…
kenapa ?

kenapa ?

ya sudah la ga penting gwa salah apa…

ya penting sekarang gwa udah ketemu solusinya…

yap akhirnya gwa menyerah pakai cool captcha buat shoutbox gwa… lebih baik gwa pakai validasi angka yang dirandom dengan function php… daripada gwa keburu botak… gara2 dibohongi dan dipermainkan…

Sudah 2 hari gwa dipermainkan oleh joomla, dibohongi oleh joomla, dianggap remeh ama joomla. Padahal sudah baca dokumentasi dengan benar, tapi tetep aja… ga jalan…

Arghh… tapi gpp dah… tar liat dolo… apakah bot2 tukang spam itu bisa tembusin validasi cupu gwa… wakakakaka… kalo masih tembus juga… mau tak mau harus dianggap remeh lagi dah ama joomla…

CakePHP, tidak ada kata terlambat untuk belajar…

Tidak terasa sudah lebih dari 1 tahun saya mempelajari bahasa pemprograman PHP. Dimulai dari setahun yang lalu, dimulai dengan melihat orang lain, membaca-baca ebook, Tanya-tanya ke orang, cari-cari info di internet, dan banyak cara lainnya. Sampai saat ini masih banyak yang harus dipelajari tentang bahasa pemprograman PHP, tetapi saat ini saya ingin mengambil sebuah langkah untuk maju ke depan yang mungkin bagi sebagian orang masih menjadi sebuah pertentangan dalam diri mereka.

Beberapa bulan ini saya sibuk mencoba-coba sebuah framework PHP yaitu CakePHP. CakePHP itu sendiri sudah saya kenal lama sekali sebelum saya bisa PHP sekalipun, dikarenakan senior-senior saya di fave sudah lihai dan piawai sekali menggunakannya, namun karena saya saat itu termasuk junior yang “cacat” maka saya baru sempat untuk mulai serius mempelajari dan mendalaminya sekarang.

Ada beberapa pertimbangan yang membuat saya akhirnya memutuskan untuk mempelajari framework. Alasan utamanya adalah kemudahan yang ditawarkan oleh framework itu sendiri. Dengan menggunakan framework itu saya tidak perlu bersusah payah lagi membuat logika CRUD ( Create, Read,Update,Delete ), paging, data validation, dan relasi-relasi database. Mungkin jika menggunakan cara klasik dengan mengandalkan logika dan kemampuan coding saya, hal tersebut akan memakan waktu berjam-jam. Tetapi dengan mengandalkan framework, hal tersebut dapat diselesaikan dalam hitungan menit.

Namun dibalik kemudahan-kemudahan yang diberikan sebenarnya ada beberapa hal efek buruk yang dapat ditimbulkan nantinya ketika saya memutuskan untuk menggunakan framework, hal itu antara lain :

  1. Aplikasi yang nanti dijalankan akan lebih berat.
  2. Kemampuan logika akan semakin tidak terasah karena sudah terbiasa tinggal pakai.
  3. dan lain sebagainya…

Tapi memang untuk mendapatkan kemudahan tersebut harus ada harga yang harus dibayar. Jadi alangkah baiknya selain menggunakan framework kita juga ahli untuk coding sendiri ( tidak tergantung sama framework ). Tapi kalau zaman sekarang tidak bisa menggunakan framework bakal sulit bersaing dengan yang lainnya ( menggunakan framework itu sendiri sebuah unique point ).  Zaman sudah berubah bung… cara coding pun harus berubah…