Monday, December 22, 2008

Bye bye apache, welcome Nginx

Bagi saya, php tetap memiliki kenangan yang indah dalam mengisi hari-hari pemrograman saya terdahulu. Programming language yang fleksibel, dan nggak pake ribet. Justru kesulitan ditemui ketika deploy di server. Kebanyakan server yang tersedia sudah diinstall default dengan bundle apache, beserta modul-modul yang sudah di tentukan sebelumnya. Kalau pake keluarga Redhat, iya kalau kebetulan dapet rpm yang pas versinya, kalo nggak ? Cara paling enak memang tetap dengan compile dari source, karena kita bisa bongkar pasang modul yang kita inginkan, tambahkan semaunya, kurangi sesukanya. Jaman dulu(nggak dulu banget sih, 2004), saya hanya kenal Apache dan IIS buat jadi webserver untuk skrip php saya. Belakangan ini, muncul sebuah webserver yang tidak terlalu terkenal, tapi sepertinya ampuh. Kenapa ampuh ? Coba anda pergi ke netcraft.com, dan coba anda scan situs wordpress.com dan detik.com, apa webserver mereka ? Mereka pakai Nginx (baca:engine X). Ini dua situs besar loh, dan saya sangat yakin, tiap hari banyak diantara kita yang berinteraksi dengan kedua situs ini, ya tho ? Nggak mungkin dong mereka pake webserver yang kurang 'terkenal' kalo nggak karena mereka merasakan keampuhan dibaliknya, tul ndak ? Coba buka aja deh langsung di situsnya.


Ok, karena saya bukan pembuat Nginx, sejarahnya tidak akan saya beberkan disini. Berikut sebagai pengingat saja buat saya (syukur kalau berguna buat anda juga) untuk ngebangun server PHP siap pakai dengan Nginx dan lighttpd.
Berikut Linux saya, ubuntu 7.10 :
lintang@cygnus:~$ uname -a
Linux cygnus 2.6.22-14-generic #1 SMP Sun Oct 14 23:05:12 GMT 2007 i686 GNU/Linux
Disini kebetulan waktu nginstall, saya pake apt-get saja untuk nginx nya, baru php dan lighttpdnya yang compile dari source. Selain nginx, kita juga harus install dependenciesnya, terutama pcre dan zlib, serta openssl kalau anda ingin.
root@cygnus:~# apt-get install libpcre3 libpcre3-dev zlib1g zlib1g-dev nginx
Tunggu sejenak, bikin kopi dulu juga boleh. Atau kalau anda ingin waktu anda efisien, mari kita donlot dulu PHP dan Lighttpd nya :D
Saya ambil PHP versi 5.2.6, dan Lighttpd versi 1.4.19. Dari mana ? please deh, silakan googling, mudah didapat kok kedua-duanya.
Ok, kita mulai dengan PHP dulu, silakan ekstrak, compile, dan install. Berikut opsi yang saya gunakan untuk PHP saya.
lintang@cygnus:~$ ./configure --prefix=/usr/local/php-5.2.6 --with-mysql --enable-fastcgi --with-sockets --with-zlib
Ini berarti, kita akan instal PHP kita nanti di direktori /usr/local/php-5.2.6, mengikut-sertakan library koneksi php untuk mysql, membuat PHP yang berfungsi sebagai interpreter CGI ( nantinya skrip PHP bisa dijalankan dari shell, mirip /bin/bash atau /usr/bin/perl), lalu PHP tersebut dapat memiliki/membuka socket tersendiri (nantinya PHP akan berjalan sebagai process yang terpisah dari webserver, tidak seperti model Apache dimana PHP berjalan sebagai modul di dalamnya), lalu yang terakhir, mengikut sertakan library php untuk support kompresi dengan tipe Gzip.
Tunggu sejenak, setelah sukses, silakan lakukan langkah dibawah seperti biasa :
lintang@cygnus:~$ make
lintang@cygnus:~$ sudo make install
Nah, coba cek di direktori /usr/local/php-5.2.6/bin, seharusnya ada file executable bernama php-cgi. File inilah yang akan berjalan sebagai interpreter PHP anda dari shell.
Menurut beberapa sumber dari internet, sebenarnya php-cgi ini saja cukup untuk dipanggil dari Nginx nantinya untuk menjalankan PHP, namun akan lebih baik apabila kita mengambil spawner dari project Lighttpd. Spawner ini akan mengeksekusi php-cgi kita. Berikut langkah-langkahnya, seperti biasa, silakan ekstrak Lig
lintang@cygnus:~$ ./configure --prefix=/opt/lighttpd-1.4.19 --enable-static --disable-shared
Kira-kira maksudnya, kita akan menconfigure Lighttpd sebagai library static yang dependenciesnya mutlak terhadap file-file .so tertentu. Opsi static ini membuat program yang kita compile akan jauh lebih cepat, karena versi dependencies di dalamnya seperti di hardcode. Berkebalikan dengan ketika kita compile dengan modus dinamis, hasilnya program akan lebih lambat, namun dependencies terhadap versi library tertentu bisa dihindari. Kalau kita ingin membuat server yang cepat, siapa peduli dengan dinamisasi, bukan begitu ? :p
Lalu seperti biasa, kita jalankan make, tapi kali ini tanpa make install.
lintang@cygnus:~$ make
Seharusnya nanti, di direktori src/ akan ada file bernama spawn-fcgi. Kopikan file tersebut ke directory /usr/bin sebagai berikut :
lintang@cygnus:~$ sudo cp spawn-fcgi /usr/bin/
Lalu anda buat skrip .sh sederhana sebagai berikut :
lintang@cygnus:/usr/local/php-5.2.6$ cat > /usr/bin/php-fastcgi << EOF
#!/bin/sh

/usr/bin/spawn-fcgi -a 127.0.0.1 -p 8999 -f /usr/local/php-5.2.6/bin/php-cgi

EOF

Ini adalah skrip untuk menjalankan PHP sebagai proses CGI yang terpisah dari webserver anda nantinya. PHP akan membuka socket di port 8999, dan akan binding di interface lo(127.0.0.1) anda, sehingga hanya bisa diakses dari mesin anda sendiri.
Ok, langkah terakhir tinggal setup nginx.conf anda, punya saya ada di sini /etc/nginx/nginx.conf.
Berikut isi file konfigurasi Nginx saya :
user www-data;
worker_processes 4;

error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

events {
worker_connections 1024;
}

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

access_log /var/log/nginx/access.log;

sendfile on;
#tcp_nopush on;

#keepalive_timeout 0;
keepalive_timeout 65;
tcp_nodelay on;
gzip on;

include /etc/nginx/sites-enabled/*;

}
Perhatikan baris yang di bold, bahwa Nginx saya berjalan atas nama user www-data, sehingga user ini mutlak harus ada sebelumnya, sepertinya kalau di Ubuntu, user ini dibuatkan otomatis ketika kita install Nginx yah, saya lupa sih :D.
Baris selanjutnya, worker_processes, saya isi 4. User yang mengakses webserver saya disini kurang dari 100 orang, dan selama ini, 4 worker sudah cukup sih.
Lalu selanjutnya, gzip on, ini modul gzip compress yang kita aktifkan setelah sebelumnya kita install zlib. Dan yang terakhir, kita akan meng-include kan semua file konfigurasi di direktori /etc/nginx/sites-enabled. Berikut contoh file konfigurasi saya di direktori tersebut :
Filename : atutor.conf
server {
listen 80;
server_name atutor;

access_log /var/log/nginx/atutor.access.log;

location / {
root /var/www/nginx-default;
index index.html index.htm index.php;
}

#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 /var/www/nginx-default/ATutor;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
#proxy_pass http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
fastcgi_pass 127.0.0.1:8999;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}

Konfigurasi ini mengatakan bahwa, saya memiliki sebuah aplikasi (kebetulan aTutor), yang saya letakkan di /var/www/nginx-default, dan untuk semua URL yang berakhiran .php, maka saya akan lemparkan requestnya ke CGI interpreter PHP yang berjalan di port 8999 seperti konfigurasi PHP diatas.

And that's it, kita bisa mengetes konfigurasi nginx kita dengan perintah :
lintang@cygnus:~$ sudo nginx -t
Lalu untuk menjalankan nginx bisa dengan perintah sbb :
lintang@cygnus:~$ sudo nginx
Kalau kita ada perubahan konfigurasi nginx, setelah selesai mengedit file konfigurasi, untuk merestart nginx bisa dengan perintah sbb :
lintang@cygnus:~$ sudo killall -HUP nginx

Udah deh, silakan arahkan browser anda di port 80, aplikasi anda siap melayani user :)

Sunday, December 21, 2008

Teknologi CDMA 450

Minggu siang, iseng-iseng menyalakan speedy dan browsing. Saya menemukan banyak artikel tentang CDMA 450, yang pas banget dengan bidang tempat kerja saya sekarang.
Jadi ceritanya begono, pada jama dahulu kala, tersebutlah sebuah teknologi analog bernama NMT, Nordic Mobile Telephone. Teknologi NMT ini kira-kira sekelas dengan teknologi AMPS yang ada sebelum jaman GSM dulu.Orientasinya voice only, lalu muncullah teknologi GSM, yang perbedaan 'paling terlihat' nya dengan AMPS adalah kemampuannya untuk mengirim SMS, dan satu hal lagi yang waktu itu masih nice to have-tapi sangat berpengaruh saat ini, apa itu ? yak, anda benar, GPRS. Namanya juga industri yang berbasis teknologi, maka dunia telekomunikasi dan para pelaku-pelaku di dalamnya juga harus berbenah menghadapi evolusi teknologi yg semakin berkembang. Para pelaku di dunia telekomunikasi tadi juga semakin merasa, bahwa mereka memerlukan sebuah standarisasi dari varian teknologi yang banyak berkembang. Muncullah organisasi-2 seperti GSMA (GSM Association->3GPP), dan CDG(CDMA Development Group->3GPP2). Lalu, CDMA 450 ini posisinya dimana ? Sabar sabar...
Seperti namanya, CDMA 450 ini termasuk teknologi yang beraliran CDMA, dan teknologi di dalamnya masuk ke dalam spesifikasi yang dibuat oleh CDG. Seperti kita ketahui, selain di frekwensi 450Mhz, CDMA juga ada yg beroperasi di 800Mhz dan 1900Mhz. Frekwensi 450Mhz ini dibuat sebagai transitional path untuk para operator telekomunikasi yang berbasis teknologi NMT.
Gambar yang menarik saya temukan di situs CDG (http://www.cdg.org/technology/3g/cdma450.asp) berikut ini :
Spektrum 450Mhz diantara spektrum lainnya
Kalau dilihat dari gambar diatas, frekwensi 450Mhz berada di paling luar, yang berarti jangkauan dari sebuat BTS dengan frekwensi 450Mhz lebih luas dari yang lain. Artinya, untuk mencakup daerah yang dengan luas yang sama, jumlah BTS yang dibutuhkan akan lebih sedikit dengan frekwensi ini. Teknologi CDMA dengan frekwensi 450Mhz ini banyak terdapat di negara2 skandinavia(rusia, checz), dan beberapa negara asia, seperti laos, kamboja, vietnam, dan tentu saja Indonesia. Dan seharusnya ini adalah jawaban untuk menyediakan sarana telekomunikasi di banyak desa-desa pedalaman di Indonesia.
Tantangan berikutnya adalah implementasi. Para pebisnis telekomunikasi tentu selalu saja kembali ke pertanyaan mendasar, apakah marketnya ada kalau teknologi ini diimplementasikan di desa-desa pedalaman ? Pemerintah sih inginnya desa-desa tertinggal juga maju, tapi tetap saja, investasi kan butuh balik modal ? Apa penduduk desa-desa pedalaman itu mampu dan butuh teknologi ini ? Don't get me wrong, tetapi banyak desa-desa pedalaman di Indonesia sebenarnya justru adalah kantung-kantung konsumen strategis dan potensional. Kenapa ? Kalau anda berasal dari desa (baca:wong nDeso), berapa banyak teman-teman masa kecil anda yang merantau keluar kota ? atau keluar negeri bahkan ? Banyaknya perantau berarti banyak pula yang ingin berkomunikasi dengan keluarga di desa, bukan begitu ?Atau sebuah pertanyaan simple, berapa jumlah minimum ternak sapi atau kambing yang dimiliki penduduk di desa ? :D belum lagi pertanyaan jumlah hektar sawah yang mereka punya ? So, pertanyaan diatas sudah terjawab dengan sendirinya.

Lalu ada pertanyaan lain, "..jadi, teknologi ini hanya cocok untuk operator yang ingin bermain di pedesaan kah" ? Well, kalau itu sih masalah ekspansi pasar yah. Dengan makin berkembangnya handset yang beredar di pasaran saat ini, bukan tidak mungkin sebentar lagi akan keluar handset triple band, 450-800-dan 1900Mhz di pasaran. Selama ini kita baru mengenal handset yang support 2 band saja, 800 dan 1900Mhz. Dengan fleksibilitas ini, sebenarnya kalau operator ingin punya dual license, tinggal beli ke pemerintah kan ( atau not so simple yah ? sorry :D ) ? Atau jalan paling cepat yaaa, kerjasama roaming dengan operator CDMA yang sudah memiliki teknologi ini. Aneh ya denger kata CDMA Roaming ? kalau pake GSM kan sudah biasa bagi yang sering jalan2 keluar negeri, dengan istilah international roaming. Intinya handset harus support frekwensinya dulu. Dan yang saya tau, handset untuk frekwensi 450Mhz ini memang terbatas, merknya mungkin hanya Huawei, Quallcom, atau Ubiquam. Pasar baru lagi nih buat produsen handset, he he.

Pada akhirnya, konsumen kan sebenarnya tidak peduli dengan teknologi yang akan dipakai, mau itu CDMA, mau itu 3G, WiMax, pada frekwensi berapapun, jika itu bisa memenuhi kebutuhan mereka, ya why not. Biarlah para vendor yang berperang di tataran teknologi ini, kita tinggal daftar, nikmati layanannya, dan jangan lupa, bayar tagihannya :p Bagi yang butuh akses internet cepat, sudah ada HSDPA untuk para pengguna GSM 3G dan EvDO dengan berbagai versi revisinya buat para pengguna CDMA. O ya, untuk teknologi CDMA 450 ini, karena teknologi basisnya CDMA, dan hanya frekwensinya saja yang 'tidak umum', EvDO ini juga bisa jadi termasuk layanan yang ditawarkan. Dan kalau secara teori range frekwensinya bisa mencapai 50Km2, maka seharusnya teknologi EvDO yang berjalan di atas frekwensi ini akan sama-sama menjanjikannya dengan teknologi WiMax, hanya saja mungkin untuk bandwidth speed nya, WiMax masih akan lebih unggul. Tapi balik-balik lagi, kalau sudah cukup dengan 3.1Mbps (EvDO Rev.A) untuk sekedar buka web, chatting, voip dan video streaming, buat apa terlalu serakah ? :D

Thursday, December 18, 2008

Speedy Vs Matrix Broadband 3.5G

Uhm, ok let's get this straight, here's my opinion for those written titles above. We will compare only the 'unlimited' versions of them. I'm currently using the Speedy personal with 1Gb quota, and 1024 Kbps bandwidth (but it's free from 8pm to 8am - next morning, so I consider this unlimited too). And for the backup, I'm using Matrix Broadband 3.5G with Isat Eco package.It's unlimited quota, the bandwidht was around 256 Kbps, but if your usage reaches 2Gb, they will limit your bandwidth until up to 64 Kbps. Both costs me around Rp 100rb per month.
Speedy
After upgrading their speed to 1024 Kbps (well yes, actually the speed was never reach 1024Kbps~128KBps), but still - in terms of 'unlimited', speedy still the best. Imagine after a day full of hardwork, you're going home, arrived at home on 6.30pm, playing with your son/daughter, and finally after they sleep, you open up your laptop and start browsing without having any worries that your quota this month will reached. Speedy gave me 1Gb quota every month, and yet no matter how crazy I download something from the internet, as long as I do that from 8pm to 8am, it's free.
But still, speedy has some flaws. Usually during 8pm to 10pm, the connection can not be stable enough. Sometime I have to reconnect-force my DSL connection. Well, it's annoying if you're in the middle of downloading something or connecting to your office via VPN. For now, my Free Download Manager can handle this, but sure this is something to be fixed by the Speedy team. Can't wait until they launch the IPTV services, wonder what would it be.

Matrix Broadband 3.5G
I got this package for free, those Customer Service offered it to me via phone, and I took it. It's stable enough ( if you're not that mobile ), my VPN connection hold very stable on this. But the limited bandwidth speed is also annoying. Being used to with 1024 Kbps with speedy and then switch to Isat Eco with only 256Kbps sometimes make me sick. nd the worst thing is that if you fall into GPRS mode, you'll better choose TelkomNet instan for this. It's back to where your position is, and how strong the signal from your place. In my place here, I have 2-3 bars of signal, and yet the bandwidth speed I considered to be 'slow', not fast enough, although your modem shows that it supports until 7.2 Mbps...well, it's only on your dream :)

Having both of this services in parallel, I decided that both must be used optimally, and if I can, I have to earn something back from it. Still trying to look at how internet marketing works, combined with how to use google adSense in our websites.

Any clue/wisdom words for me ? Please fill in your comment.

Friday, June 20, 2008

Popular telco billing terms #1

I wrote this post in case if someone got interested on Telco Billing but they dont familiar with it's basic common glosarry in a telco billing environment. These cheat words will come in handy when you're in the middle of an interview :D for a billing position. At least it came to me during one of my interview :D

1. What is Rating ?
Rating is a process to determine a cost for every event. This process involves the account system and the product catalog. Product catalog is a place where we store all product we sell (well, on this case, this will be all service we sell), including it's tariff. Imagine an online bookstore where they have a catalog containing what books they sell, and how much the price.

2. What is Charging ?
Is a logical place where the Rating process takes place. Charging means deducting or adding your balance. When you use a data service from your cellular to download a song, they will do a rating process for that event, and they will charge you a cost, deducting from your balance.
Talking about balance deducting, current IN/charging system usually have more than 1 pre-configured account that can be owned by a subscriber. Let's say main account, and dedicated account. Imagine this as a wallet, where you can store different types of money there. There are parts of money from your wallet used only to pay your SMS charge, and the other one is only to pay your Voice charge.

3. What is Re-rating ?
Re-rating means recount your cost for post-rated events. This usually done for discount. Imagine a package, that offers you free 10 minutes call after your 100th minutes call duration. This means that after your call duration reaches 100 minutes, then another 10 minutes call will be free of charge.

4. What is Billing process?
Ok, so billing means producing your invoices. Usually this is used for postpaid subscriber where they're charged in offline mode. Offline mode means not realtime, batch, bulk, you name it. This paradigm has became a key words for those Billing vendor offers a Convergence Billing solution. We will get this on next section. So how about prepaid subscriber, do they get billing invoice too ? well, no, at least not if it's not a convergence billing. Usually for prepaid subscriber, they only get bill invoices when they're doing top up for their balance. And also, the billing usually includes taxes. These taxes can be included during rating process, or only when the bill invoice produced.

5. What is Convergence Billing?
There are so many definition for this. Convergence billing is a billing system designed for all service events, including their own characteristics, and at the end, it produces a convergence bill for all of your services. Today's GSM world has offered lots of services. 10 years before, we can never imagine how a cellular phone can bring us a very fast data services, video call, ring back tone, music downloads, etc. Those services has their own characteristics, and therefore, there's a need for a flexible billing system that can handle this. Current IN/Charging system only provide a simple way to charge a service. It might require a software upgrade everytime you sell a new service. And not to mention today's trend, the hybrid customer, where a postpaid customer can do top up for their account using prepaid vouchers. Convergence billing tries to answer this by giving at least few things below :
a. One bill, for all types of services offered by the operators.
b. An online and realtime system, without having to wait for new billing cycle arrived to know your bill.
c. Easy to configure new service type, with it's own way-to-bill. This impacts on time to market for a new product.
d. Lot more.

This glosarry is as far as I can understand or remember. Feel free to comment if you dont agree with my definition. I will be more than happy to get your input.

Then, have a nice interview :)

Thursday, March 27, 2008

Welcome to billing world....

Every event counts....
Outthinking. Outdoing....

Familiar with those words ? Well yes you're right. Those are the slogans for 2 billing company in telco industries.

Yes, it's been 3 weeks since I quit from my previos job in J University(some of you must have been familiar with this abbreviation) as one of Development team member. Currently I work for one of telecommunication company, CDMA450 based, in Indonesia (easy guess, there's just only 1 company using this technology in Indonesia). I join here as Interconnect Billing Specialist.

It's been almost 3 years since I decided to move on to my next career path. Hard decision I guess. Well, of course there's a reason and hope. Also, there's a prayer and faith why I decided to resign. It's the billing world that makes me fall in love with telco.

I remember my first chance in billing world was in 2006, when I sent my CV, apply to a company as a Billing staff, got accepted, but the situation was a little bit difficult that day, my wife will gave birth soon, and I thought that this wasnt the right time to move, so I stayed.

My second chance in billing world, came during a project in Indosat. Also, got recommended by one of my campus senior. Again, the time seems didnt fit. I got weblogic training to Hong Kong at the same month, it's a hard choice, but at least I still got my loyalty. It was the first time I got trained abroad, never miss those moment, I was more than happy that day, so I decided to stay.

My third chance, here in my current company. I thought this is the right time to move. I doubt those chances would come back again for the fourth time. I always thought that joining telco industries right at it's heart was a very strategic decision for my next career path. Some colleagues told me that life will felt so stuck and slowly if I took this chance, well I heard them and I really appreciate them, but still... life is a path full of choice, right ? :)

My current job title here is Interconnect Billing and Retail Tariff management. Basically, billing solution can be divided into two major parts, Retail and Interconnect. Retail billing is the part where it deals with direct customers for their current balance, charging, and so on. It;s more like daily operational task. While Interconnect Billing relates to another operator. We deal with any kind of event that involved other licensed operator (OLO). While Retail Billing's usually done daily, Interconnect's cycle is only once in a month. Dispute solving, Volume Compare, Tariff Management, is our monthly tasks. We work together with the Retail Billing team, we share the CDR data, but we work in a different way.

Ok, that's it. Time to go to bed, tomorrow, there's still CDR waiting to be rated.