Apakah sekarang kau sudah mulai percaya python itu bukan ular sobat? Ah .. baiklah. Mulai saat ini kita anggap saja kau sudah percaya python itu bukan ular. Python adalah bahasa pemprograman.
Lalu, mengapa python?
Sobatku sayang, kuberitahu kau sebelumnya bahwa aku bukan tipe pria fanatik. Kecintaanku selalu beralasan. Bahkan aku tidak peduli dengan apa yang kugunakan dan apa yang aku banggakan. Aku hanya peduli dengan apa yang dapat diberikannya padaku.
Aku mencintai python karena tiga alasan. Ini sebenarnya rahasia, tapi karena kau adalah kawanku, aku akan beri tahu padamu. Tapi jangan kau bilang siapa-siapa ya!
Semua genap dalam bilangan tiga sobat, dan alasan kecintaanku yang pertama adalah faktor bahasa.
Coba kau baca artikel Python Selayang Pandang-ku sobat. Aku menulis banyak sekali keindahan bahasa python disana. Python memiliki sintaks yang mirip bahasa manusia. Mirip bahasa Inggris tepatnya. Dan yang membuat python begitu hebat dimataku adalah konsep identasi sebagai penanda blok program.
Menurut pandanganku sobat, sekali lagi menurut pandanganku: konsep bahasa pemprograman yang mengacu kepada bahasa manusia adalah masa depan! Sudah tidak zamannya lagi kawanku kita bersusah-susah mengikuti cara berpikir mesin. Mesinlah yang seharusnya mengikuti cara kita berpikir.
Dengan kemudahan bahasa yang diberikan python, kau dapat membuat aplikasi hingga sepuluh kali lebih cepat jika dibandingkan dengan bahasa pemprograman lain untuk aplikasi yang sama.
Dalam pikiranku sobat, seperti apa kau mengetik surat, seperti itu pula lah kau mengetik kode-kode python.
Alasan kecintaanku yang kedua adalah faktor teknologi.
Menurut artikel Python as a First Language dari O'Reilly media, python memiliki keunggulan sebagai berikut:
Ketersediaan. Python tersedia secara gratis untuk berbagai platform untuk versi yang sama. Kau bisa menjalankan program python pada mesin Linux, Windows, MacOS, BeOS, Unix* bahkan Symbian OS!
Interaktif. Untuk penjelasan mengenai python yang interaktif, kau baca sajalah artikel Python Selayang Pandang-ku bagian `Python Interactive Interpreter'.
Kesederhanaan. Ya sobat, python sangat sederhana dan relatif mudah dipelajari. Tapi jangan salah dulu sobat, `kesederhanaan adalah kesempurnaan'.
Kekuatan. Python sobat, kuberitahu kau, tidak hanya digunakan untuk aplikasi stand alone, tapi juga untuk industri!
Dan alasan ketiga sekaligus yang menggenapkan kecintaanku terhadap python adalah dukungan framework.
Python itu sobat, datang dengan filosofi `Battery Included'. Artinya python punya module dan library yang banyak sekali! Beberapa library pihak ketiga bahkan telah dipercayakan untuk menangani aplikasi-aplikasi industri.
Sebut saja twisted, kau ingat kode web server kita kemarin sobat? Untuk membuat webserver dengan dukungan cgi menggunakan twisted hanya membutuhkan tidak lebih dari sepuluh baris kode (bahkan kurang).
Sahabatku bang Ammar WK, bahkan membuat arpwatch dengan hanya empat baris kode menggunakan scapy!
Python benar-benar menyederhanakan banyak hal. Kau dapat membuat aplikasimu dengan lebih cepat, kau dapat meluncurkan aplikasimu dengan lebih cepat dan kau bisa mendapatkan umpan balik dengan lebih cepat. Aplikasimu akan matang lebih cepat kawanku!
Begitulah sobat alasanku memilih python. Aku sadar sobat, python bukan segalanya. Tapi python dapat mempermudah hidupku. Aku menggunakannya karena alasan-alasan, bukan cinta buta, kau tahu itu! Selalu ada alasan untuk mencintai sobat. Walaupun cinta itu buta, tapi jangan buta karena cinta!
Pusing kepalaku dibuatnya sobat. Tahukah kau, beberapa posting yang kubuat tidak tampil dengan semestinya. Berbagai cara telah ku tempuh untuk menyelesaikan masalah tersebut, tapi tetap saja tidak seperti yang ku harapkan.
Awalnya aku berfikir google docs bisa dengan mudah meng-import file openoffice.org 2.3.0 (writer) yang kugunakan untuk membuat artikel-artikelku, namun ternyata masih belum sempurna. Setelah ku selidiki, [tab] / identasi yang kugunakan pada artikel `Python selayang pandang' tidak tampil dengan semestinya. Aku khawatir, contoh-contoh kode yang ada dalam artikel tersebut tidak bisa dijalankan. Dalam python sobat, ku beritahu kau jika kau tidak tahu, identasi adalah masalah hidup mati!
Tadi malam tidak beres tidurku sobat. Lima jam lebih aku berjuang untuk tidur dari pukul 10 malam - setelah aku menutup buku `The Apple Way' dan memulai khayalan nakal agar dapat tertidur dengan mudah - hingga lewat pukul tiga pagi. Pikiranku tidak juga bisa lepas dari mu sobat.
Aku selalu berharap bisa memberikan apa yang terbaik yang bisa ku berikan padamu. Merasakan kembali perasaan yang sama yang kurasakan di pertengahan tahun 2000 saat berada dalam komunitas hacker. Perasaan yang sama saat aku menulis email pertamaku di newbie_hacker@yahoogroups.com . Perasaan yang sama yang kurasakan saat berbagi dengan guru besarku: phatygeni (minangcrew).
Aku ingin berbagi denganmu sobat. Aku ingin menebarkan energi kasihku!
Akhirnya aku menemukan sebuah cara yang cukup baik untuk berbagi file secara cloud tentunya dengan memanfaatkan fasilitas-fasilitas yang disediakan google. Silahkan kau buka web site ini sobat. Kalau ada masalah, kau tinggalkanlah komen atau kau email aku dengan meng-klik link contact disamping.
Sayonara ...
Sobatku, ada sedikit masalah pada artikel blog ku yang berjudul: Membuat web server menggunakan Twisted . Kode-kode tidak tampil dengan baik pada halaman blog. Ada rencana memang untuk menggunakan syntaxhighlighter, namun masih belum sesuai dengan harapan. Kau tolong doa kan aku ya sobat.
Oh ya ... sobat, aku punya artikel untukmu semoga artikel ini bisa menjawab keingintahuanmu mengenai Python. Sobat, kau sudah percaya kan kalau python itu bukan ular .. ?
Sobat, atas desakan saudara-saudaraku yang kurang beres pikirannya dan untuk menjaga reputasiku sebagai h3k3r Brondong, maka aku putuskan untuk mulai menulis mengenai h3k1ng atau paling tidak mengenai komputer di blog ini.
Beberapa waktu yang lalu aku dapat mainan bernama Twisted. Sebuah Networking Framework yang cukup menarik hati karena penggunaannya yang begitu luas dan ditulis menggunakan Python. Tak kurang dari aplikasi Email, XMPP, Web hingga apapun yang dapat kau bayangkan dalam sebuah program berorintasi jaringan dapat dibangun menggunakan Framework ini. Hebatnya lagi, kau bahkan bisa mendefenisikan protokol mu sendiri.
Namun untuk dapat melakukan semua itu, dibutuhkan pengetahuan mengenai Pemprograman Python yang memadai. Sudahkah kau belajar Python hari ini?
~~~
Keuntungan mengunakan Framework ini adalah kau dapat menjaga aplikasimu sesederhana dan sekecil mungkin sekaligus mengurangi kompleksitas. Efeknya akan sangat terasa jika kau memaksimalkan penggunaan python dalam aplikasi yang kau buat. Hal ini akan sangat membantumu dalam melakukan integrasi dan content sharing. Ingat sobat, kita menggunakan object yang sama!
Yang tak kalah hebatnya, kau tidak perlu install PHP pada aplikasimu yang berorintasi web karena semua orang tahu People Hate Php! Python yang akan melakukan semua keperluan otomatisasi. Filosofi python yang “battery included” bahkan membuatmu tidak perlu melirik library tambahan selama tidak dibutuhkan.
Kau juga tidak perlu meng-install Apache. Buat apa kau menggunakan twisted? Kau boleh buang Apache dari sistemmu.
~~~
Kau sudah siap untuk memulainya sobat ?
Artikel blog ku kali ini akan mendemostrasikan pembuatan web server sederhana mengunakan twisted, kita akan menggunakan static file, dalam hal ini cukup file html saja dan dukungan cgi-bin. Untuk cgi-bin akan didemonstrasikan dengan menggunakan skrip Perl.
Sebelumnya maaf sobatku, artikel ini tidak akan menjelaskan twsited secara menyeluruh, juga bukan artikel yang murni tutorial. Artikel ini hanya mendemonstrasikan penggunaan twisted. Namun jika kau berkenan, aku akan tulis artikel mengenai twisted semampuku, sebanyak yang kau mau!
Persiapan yang kau butuhkan adalah sebuah sistem linux (mohon maaf, bagi yang menggunakan windos), serta twisted yang telah terinstall. Instalasi twisted tidaklah begitu sulit, jadi akan aku lewatkan saja, namun jika kau terkendala masalah saat instalasi twisted, kau tinggalkan sajalah komen, nanti akan aku coba jelaskan padamu.
Pertama sekali, kau buatlah dulu direktori kerja mu. Terserahlah kau mau buat dimana. Kalau aku akan buat direktori twisted di /home/haddad .
Setelah itu, kau buat dalam direktori kerjamu dua buah direktori lagi yang akan digunakan untuk meletakkan file-file html dan cgi. Aku buat direktori “site” dan “cgibin” di dalam direktori /home/haddad.
Seperti inilah susunan direktori kerja dalam komputerku:
haddad@moria:~/twisted> pwd
/home/haddad/twisted
haddad@moria:~/twisted> ls -al
total 32
drwxr-xr-x 4 haddad users 4096 2009-01-23 12:18 .
drwxr-xr-x 105 haddad users 4096 2009-01-23 10:46 ..
drwxr-xr-x 2 haddad users 4096 2009-01-23 12:00 cgibin
drwxr-xr-x 2 haddad users 4096 2009-01-05 19:31 site
Sobat, sekarang kita akan mulai menulis kode. Aktifkanlah editor kesukaanmu!
Kuingatkan, cukup kau ketik saja kodenya, jangan pula kau ambil pusing. Nanti akan aku jelaskan kepadamu cara kerjanya.
Ingat kawanku, kau harus sesuaikan penempatan path pada argumen-argumen pada kode diatas dengan direktori kerjamu.
Setelah itu, boleh kau simpan dengan dengan nama apa saja yang suka dan kau letakkan file tersebut didirektori kerjamu. Kalau aku, akan kusimpan di direktori /home/haddad/twisted dengan nama webserver.py .
haddad@moria:~/twisted> pwd ; ls
/home/haddad/twisted
cgibin site webserver.py
Sampai pada langkah ini kau sudah buat web server mu sendiri menggunakan twisted. Sekarang yang harus kau siapkan adalah file html yang akan tampil jika kau membuka browser dan mengetikkan alamat localhost:31337. Betul, betul, betul! Kita menggunakan port 31337, bukannya 80. Kau sebenarnya bisa berikan port berapa saja, 31337 itu aku buat supaya terlihat keren saja.
Jika kau ingin menggunakan file-file cgi yang kau tulis menggunakan perl, cukup kau letakkan pada direktori “cgibin”. Di komputerku akan ku letakkan skrip perl tersebut di: /home/haddad/twisted/cgibin
Seperti inilah skrip perl yang ku buat untuk uji coba CGI Bin:
#!/usr/bin/perl
print "content-type: text/html \n\n";
print "TWISTED IS ROCK
\n";
exit(0);
Jangan lupa ya sobat untuk mengubah permisi skrip perl yang kau buat menjadi executable!
Sekarang seperti inilah direktori kerjaku:
haddad@moria:~/twisted> pwd ; ls -Ral
/home/haddad/twisted
.:
total 40
drwxr-xr-x 4 haddad users 4096 2009-01-23 13:16 .
drwxr-xr-x 105 haddad users 4096 2009-01-23 14:30 ..
drwxr-xr-x 2 haddad users 4096 2009-01-23 15:47 cgibin
drwxr-xr-x 2 haddad users 4096 2009-01-23 15:44 site
-rw-r--r-- 1 haddad users 278 2009-01-23 13:16 webserver.py
./cgibin:
total 24
drwxr-xr-x 2 haddad users 4096 2009-01-23 15:47 .
drwxr-xr-x 4 haddad users 4096 2009-01-23 13:16 ..
-rwxr-xr-x 1 haddad users 156 2009-01-23 15:46 cgi.pl
./site:
total 24
drwxr-xr-x 2 haddad users 4096 2009-01-23 15:44 .
drwxr-xr-x 4 haddad users 4096 2009-01-23 13:16 ..
-rw-r--r-- 1 haddad users 118 2009-01-05 19:20 index.html
Jika kau sudah tidak sabar, jalankanlah web server mu. Tentunya kau harus masuk ke shell dan mengetikkan:
haddad@moria:~/twisted> python webserver.py
Jika tidak ada kesalahan, kau seharusnya sudah bisa mengakses web server mu menggunakan browser dengan mengetikkan alamat:
http://localhost:31337/
Begitu juga kalau kau ingin mengakses file cgi yang telah kau siapkan, cukup arahkan browsermu ke:
http://localhost:31337/cgi-bin/cgi.pl
Cukup sederhana bukan ?
Karna aku telah berjanji padamu dan kaupun tetap memaksaku menjelaskannya, maka akan ku jelaskan padamu cara kerja web server yang telah kita buat.
Aku sampaikan padamu sobat, aku bukan pakar atau orang hebat, akupun tidak bermahsud mengguruimu. Jika kau menemukan kesalahan pada penulisan artikel ini, harap kau maafkan aku dan tolong kau koreksi.
Twisted adalah sebuah framework jaringan sobat. Jadi jangan kau samakan dengan framework web seperti Djanggo atau CherryPy. Cara termudah memahami twisted adalah dengan memandangnya sebagai sekumpulan komponen. Komponen-komponen tersebut harus kau rakit menjadi aplikasi yang kau butuhkan. Tentunya sebelum kau merakitnya, kau harus persiapkan (konfigurasikan) komponen tersebut. Apakah kau harus memasukkan argumen-argumen tertentu atau bahkan melakukan overriden method-method tertentu.
Dalam konteks aplikasi yang kita buat, ada dua komponen utama yang kita gunakan yaitu “internet” dan “web”.
Kau bisa lihat dari statement import pada kode kita diatas komponen-komponen apa saja yang terlibat. Komponen twisted.internet adalah komponen yang bertangung jawab mengurus asynchronous I/O dan events. Sedangkan reactor, komponen ini memiliki mekanisme internal yang tidak harus (mungkin tidak boleh) kita campuri. Pada web server kita sobat, komponen ini mengimplementasikan interface twisted.internet.interfaces.IReactorTCP yang mendefenisikan method diantaranya listenTCP.
Kalau kau mengacu ke dokumentasi API nya, method listenTCP dedefenisikan seperti ini:
def listenTCP(port, factory, backlog=50, interface=''):
Dan fungsi method ini adalah menghubungkan angka numerik port (misalnya 80 untuk web) dengan protocol factory. Jika ada koneksi pada port yang diberikan, maka akan ditangani oleh protocol factory.
Coba kau perhatikan kembali kode web server kita:
reactor.listenTCP(31337, site)
“31337” adalah nomor port, sedangkan “site” merupakan instance protocol factory.
Sampai disinilah wewenang twisted.internet sebagai penanggung jawab asynchronous i/o dan events.
~~~
Untuk mengani segala hal yang berhubungan dengan web, baik itu protokol http, request, url mapping dan banyak hal lainnya kita menggunakan komponen twisted.web.
Dalam studi kasus web server kita sobatku, kita harus mempersiapkan protocol factory yang akan menangani koneksi pada port 31337. Tentunya protokol ini adalah protokol http.
Ku beritahu kau sobat, twisted sudah mempersiapkan segalanya. Kau lihatlah kode yang kita buat:
site = server.Site(root)
Site merupakan instance dari class server.Site. Bacalah penggalan kode class Site ini:
class Site(http.HTTPFactory):
def __init__(self, resource, logPath=None, timeout=60*60*12):
Kalau kau telah belajar python hari ini sobat, kau pasti akan tahu kalau server.Site adalah turunan dari http.HTTPFactory. Class ini lah yang akan menangani koneksi pada port 31337.
Lihat kembali defenisi method __init__ yang dimiliki server.Site. Class ini membutuhkan argumen berupa “resource”.
Sekarang yang harus kita lakukan adalah mempersiapkan resource. Seperti yang ku katakan sebelumnya, web server kita akan berurusan dengan static file. Kau masih ingat kan? Oleh karena itu, kita harus menggunakan komponen yang berfungsi menangani resource static.
Kalau kau tidak malas membaca, di dokumentasi API twisted kau akan temukan modul “static” yang bertanggung jawab pada resource static. Lebih dalam lagi kau masuk, kau akan menemukan sebuah class bernama “File” yang berfungsi “represents a plain non-interpreted file”. Kau artikan sendiri sajalah, tahu lah kau bahasa inggrisku sekerat ular sekerat naga!
Kita akan gunakan class File ini. Sebelumnya, kau interogasi dululah API-nya. Ada cukup banyak method, tapi yang paling penting harus kau perhatikan adalah:
def __init__(self, path, defaultType="text/html", ignoredExts=(), registry=None, allowExt=0):
Kau lihat sendiri, argumen yang harus kita masukkan adalah “path”. Itulah argumen yang telah kita masukkan kode web server kita. Argumen yang aku berikan:
/home/haddad/twisted/site
Class ini nantinya sobat, akan melakukan pemetaan (mapping) terhadap request url. Kode:
root = static.File('/home/haddad/twisted/site')
berarti direktori /home/haddad/twisted/site dipetakan ke: localhost/ dan jika didalamnya terdapat file bernama “foo.html” akan dipetakan ke: localhost/foo.html . Jika terdapat direktori didalamnya yang bernama “bar” akan dipetakan ke: localhost/bar/ .
Kode:
root.putChild('cgi-bin', twcgi.CGIDirectory('/home/haddad/twisted/cgibin'))
berarti kau memetakan sebuah direktori ke dalam localhost/. Dalam contoh kita sobat, kita memetakan direktori /home/haddad/twisted/cgibin ke localhost/cgi-bin. Berarti sekarang kita punya web site dengan struktur seperti ini:
localhost/
localhost/cgi-bin/
Dan kau tidak boleh lupa sobat, class twcgi.CGIDirectory yang bertanggung jawab terhadap skrip-skrip CGI. Bagaimana cara kerjanya, kau baca sendiri sajalah dokumentasinya. Jangan jadi pemalas kau ini!
~~~
Bagiku sobat, seperti inilah taknik yang ku gunakan dalam memprogram berbasis framework: kau ingin buat apa? Kau daftar lah semua yang kau butuhkan. Cari komponen yang akan membantumu. Kau siapkan komponen tersebut dan rakitlah menjadi aplikasi yang kau inginkan.
Terima kasih telah membaca artikelku sampai ke bagian ini sobat. Kalau kau suka tinggalkan lah komentar, kalau ada yang salah, tolong kau ingatkan aku. Semoga kau tak bosan mengunjungi blog ini. Sayonara ... Live long and prosper!
Sudah ku katakan padamu tapi kau tidak percaya juga ! Python itu sobat, adalah bahasa pemprograman, bukan ular. Kalau yang kau makhsud itu ular besar yang bisa menelan anak sapi dalam satu sesi makan, itu namanya sanca. Berasal dari keluarga pythonidae. Mengapa kau tidak juga percaya padaku ? Kau buka sajalah Wikipedia, biar dirimu sendiri yang tentukan python itu apa !