Learn the Rules, Break The Rules, and Create the New Ones...

Hi... My name is Rizky Prihanto. You can call me RQ, or Rizky either. I am currently living on Bandung, Indonesia. Had a lot of works and research about Enterprise Information Systems (majoring on education and e-governments). I have bunch of interests (some friends call it 'freakz') about MySQL Opensource Database and now I am one of the administrator of MySQL Indonesia User Group - the opensource community initialized by Sun Microsystems Indonesia.

My Company PT Cinox Media Insani, Bandung, Indonesia. I work here since 2008 and I take responsibility as Chief of Software Architect. My job is about planning, imaginating, fantasy-ing, concepting, and build the infrastructure of the new information systems (or app engines) which going to be implemented.

This blog This is my blog that represent my current opinion, research and experiences about anything in Software Engineering. Written since 2007 (actually) and has been vaccum for a lot of while. And now I wanna ressurrect this blog (optimistically) from the long-long-hibernation with something fresh and new ideas -- still about MySQL, software engineering, development, and may be something managerial here.

About the tagline I've learned the statement above from some paper written by Kent Beck about Extreme Programming (XP) methodology -- some sort of practical software development methods which have no boundaries. That's very inspiring me a lot. I have written some article on this blog that tell my interpretation about that statement here.

My Another Blogs I have classifying my blogs into some sort of genre. The blog that you read here right now is my primary blog that tell you (majoring) about IT stuff. But if you wanna look another side of me, you can visit here, here, here,or here. Hope it'll be interesting for some of you.

Credits I would thanks to Blogger for this great blog platform. Skinpress who designed this Wordpress template (which is bloggerized by Free Blogger Templates). My appreciate is also going to you who give your generously time for visiting my blog.

6
Defacing

Defacing adalah merupakan bagian dari kegiatan hacking web atau program application, yang menfokuskan target operasi pada perubahan tampilan dan/atau konfigurasi fisik dari web atau program aplikasi tanpa melalui source code program tersebut. Sedangkan deface itu sendiri adalah hasil akhir dari kegiatan cracking dan sejenisnya – tekniknya adalah dengan mbaca source codenya (ini khusus untuk konteks web hacking), trus ngganti image (misalnya), editing html tag dkk, dan lain-lain.

JAHIL, sebuah kondisi ambiguitas....

Konon di suatu tempat yang (katanya) memiliki nilai-nilai luhur norma sosial (Kayaknya Indonesia banget deh .....), mereka memiliki semacam kode etik pada setiap sendi-sendi kehidupan sosialnya dan (katanya pula) mereka sangat menjunjung tinggi nilai-nilai tersebut, termasuk dalam kasus perbuatan “JAHIL”. Sebuah perilaku yang memiliki banyak kondisi. Kondisi dimana perbuatan jahil itu dapat ditolerir dan juga kondisi dimana perbuatan jahil itu tidak dapat ditolerir. Misalnya ada anak kecil yang nyolek bokong seorang wanita cantik yang juga montok. Reaksi wanita tersebut paling-paling hanya berujar, “Ah Adik ini, nakal deh kamu....... ". Untuk sementara persepsi jahil tereliminasi. Namun jika ada orang berumur 25 tahun dan melakukan aktivitas yang sama, maka akan ada dua kemungkinan respon dari wanita tersebut. Pertama, dia mungkin akan berujar, “KURANG AJAR!” PLAK, PLAK
(menampar). Alternatif kedua, wanita itu akan berujar, “Ah Mas ini, nakal deh kamu....... ”. Untuk sementara (lagi-lagi) persepsi jahil kembali tereliminasi.

Begitu pula dengan aktivitas “DEFACE” – bakal ada dua persepsi bagi orang-orang dalam menanggapi deface. Mungkin ada kalangan yang menganggap kalau program buatannya bisa di deface orang, dia akan merespon : “Wah..., keren juga nih. Programku sekalinya gak aman, ya ?” – tapi ada juga yang bakal ngerespon negatif seperti : “Tolong telepon pengacara saya, saya mau menuntut seseorang karena dia sudah defacing program saya!”.

Karena alasan kecil itulah maka deface dapat dikategorikan sebagai perbuatan jahil. Jahil, karena terkadang mereka yang melakukan deface tidak memiliki alasan profesional sebagai motif kegiatan mereka.

Deface banyak terjadi pada situs e-commerce web yang menggunakan MS IIS. Ini dikarenakan adanya bug pada IIS yang dikenal sebagai unicode bug. Dengan adanya bug ini seseorang dapat mengakses command line shell cmd.exe pada server keluarga Windows NT. Kelemahan IIS ini sempat ramai dibicarakan orang karena banyaknya korban. Mengakses server dengan memanfaatkan Unicode bug itu sendiri dilakukan melalui service HTTP (port 80), port yang pasti dibuka untuk memberikan layanan web. Setelah berhasil masuk ke sistem, pelaku web hacking menggunakan FTP untuk melakukan transfer terhadap halaman web dengan desain ‘kreatif’ yang dimilikinya untuk mengubah tampilan web target. Untuk kasus ini semua kegilaan yang telah dilakukan oleh si pelaku memiliki beberapa alasan tersendiri yaitu :

1. Ingin menjadi hacker
2. Mendapatkan popularitas
3. Ingin mendapat pujian

Alasan-alasan diatas memang cukup bisa dicerna logika. Tapi bagaimana dengan alasan-alasan yang unik seperti Nggak ada kerjaan, Suka-suka, Apa urusan loe, atau “aku pengen tu situs kesannya GUE BANGET, gitu” dan lain sebagainya. Menurut saya, tanpa suatu alasan apapun seseorang dapat saja melakukan web hacking.


Defacing, asyik juga.....

Memang kegiatan defacing suatu halaman web atau sebuah program aplikasi sangatlah menyenangkan (kami akui itu), tapi terlepas dari keasyikan (nge-deface) itu, sesungguhnya adalah perbuatan yang melanggar hukum dan jika kita tinggal di luar negeri bukan mustahil tindakan seperti ini dapat dikategorikan computer crime dan ada konsekuensi hukumannya. Tetapi karena kita hidup di Indonesia maka tidak mustahil pula kegiatan Defacing dapat kita lakukan dimana saja, kapan saja dan bahkan siapa saja. Mengapa ? karena kita belum memiliki payung hukum yang dapat dijadikan pedoman dalam menangani masalah kejahatan dunia maya.

Ada beberapa perbedaan mengenai kegiatan Meng-hack sebuah sistem yaitu dalam masalah “probing”, adalah mencari tahu kelemahan sebuah sistem. Computer security industry beranggapan bahwa probing merupakan kegiatan yang tidak etis. Sementara para computer underground menganggap bahwa mereka membantu dengan menunjukkan adanya kelemahan dalam sebuah sistem (meskipun sistem tersebut bukan dalam pengelolaannya). Kalau dianalogikan ke dalam kehidupan sehari-hari (jika anda setuju dengan analoginya), bagaimana pendapat anda terhadap seseorang (yang tidak diminta) yang mencoba-coba membuka-buka pintu atau jendela rumah anda dengan alasan untuk menguji keamanan rumah anda.

Ada program aplikasi yang bersifat freeware dan ada juga program aplikasi yang bersifat open source. Kedua pengertian ini (freeware dan open source) sangatlah berbeda, bukan berarti dengan status program itu freeware kita bisa dengan bebas melakukan deface terhadapnya. Hal itu bisa menyebabkan kesalahan interpretasi pada user lain dan mereka akan berangapan bahwa program tersebut adalah hasil ciptaan kita (yang nge-deface), belum lagi bagaimana perasaan orang atau perusahaan yang membuat program tersebut bila mengetahui bahwa mereka menggratiskan programnya untuk dicopy banyak orang tapi malah di-deface juga (tidak ada penghargaan sama sekali terhadap hak cipta). Ini mungkin kedengarannya hanya masalah sepele dan terus terang bagi kami tidak akan berdampak apa-apa, tapi bayangan bila program freeware tersebut merupakan sebuah program yang cukup penting dalam dunia bisnis e-commerce. Bisa-bisa orang akan berfikiran bahwa kitalah yang membuatnya, atau bisa juga akan menjatuhkan nama dari seseorang atau perusahaan yang telah membuatnya. Lebih celaka lagi bila kita defacing sebuah program aplikasi yang memang benar-benar bersifat komersial, artinya mereka telah mempatenkan produknya, dan bagi siapa saja yang akan menggunakannya harus membeli dan memiliki sertifikat keaslian dari program tersebut.

Dari pertimbangan tersebut, dapat dikatakan bahwa defacing adalah kegiatan yang mengarah pada computer-crime (walau sebenarnya lebih tepat dibilang bahwa defacing itu hanya berpotensi untuk berkembang menjadi kejahatan computer).

Kesadaran tentang pentingnya etika dalam dunia computer tentu ikut memacu sebagian orang untuk melakukan kegiatan deface, menurut mereka tu menyenangkan tetapi jelas sudah melanggar kode etik omputer. Ironis memang apabila kita menemukan sebuah program aplikasi yang telah di-deface tapi pemerintah atau pihak-pihak yang memiliki wewenang akan masalah ini tidak melakukan tindakan apa-apa terhadap pelakunya. Memang jika mereka (pihak berwajib) melakukan penelusuran terhadap kegiatan deface satu persatu akan sulit karena boleh jadi program yang sudah di-deface di deface lagi. Solusi yang cukup masuk akal adalah bagaimana menanamkan pengertian pada user akan pentingnya sebuah hak cipta orang lain. Dengan begitu apabila telah tumbuh semangat untuk menghormati sebuah hak cipta, bukan tidak mungkin secara umum kita dapat menepis anggapan orang bahwa di Indonesia banyak hackernya. “Dari hari kehari akan lahir calon hacker baru yang siap menularkan ilmunya pada teman-temannya”.

Hacking itu sesungguhnya itu merupakan seni dalam ber-coding. Di satu sisi, para programmer sedang mencari ilham tentang seni memproteksi software terhadap defacing, dan sisi lain para hacker sedang mencari ilham tentang seni menembus proteksi untuk melakukan defacing. Mencari ilham untuk dua kegiatan tersebut adalah dua hal yang sama-sama menyenangkan. Karena bagi masyarakat IT, berpikir itu menyenangkan, beibeh!

Sampai sejauh ini, setidaknya ada 3 definisi terhadap kegiatan hacking :
1. hacking adalah sebagai suatu bentuk kejahilan
2. hacking adalah sebagai salah satu wujud computer-crime
3. hacking adalah sebuah seni

Sekarang, tinggal bagaimana kita memandangnya dari sudut pandang yang mana, dan konteks pembicaraan yang mana.


0
Mengadopsi Agile Development Secara Praktek

Barusan mbaca buku Pattern of Agile Practice Adoption karangan Amr Elssamadisy (bisa didonlot secara online di sini : http://www.infoq/minibooks/agile-patterns) -- di situ dijelasin tentang beberapa domain kegiatan yang harus diperhatikan dalam mengadopsi praktek agile development, dimana masing-masing domain tersebut memiliki pola-pola praktek tersendiri yang saling berkesinambungan. Beberapa metode agile memiliki karakteristik fasenya sendiri, namun umumnya memiliki 3 (tiga) domain kegiatan yaitu requirements, design, dan development, yang terdiri dari praktek-praktek berupa :
1. Simple Design
2. Refactoring
3. Automated Developer Tests
4. Test-First Development
5. Test-Last Development
6. Collective Code Ownership
7. Continuous Integration
8. Functional Tests
9. Customer Part of Team

Berdasarkan pengalaman mendevelop software, dan mengkawinkannya dengan beberapa ide dari beberapa literatur mengenai agile development methodology yg laen, saya nambahin beberapa praktek agile lainnya, seperti :
10. Coding Standards
11. Pair Programming
12. Small Release.

Dan setelah menelusuri maknanya, saya modifikasi dikit tabel clustering dari aspek praktis agile development nya om Amr Elssamadisy tersebut menjadi seperti ini :



Berikut ini adalah penjelasan praktek-praktek agile development :


Domain Kegiatan :
1. Test-Driven Requirements
Test-driven requirements dilakukan dengan memotong jarak antara klien dengan tim developer dan melakukan komunikasi serta feedback antar keduanya secara intensif. Klien merupakan bagian integral dari tim. Dan klien secara progresif melakukan tes fungsional yang akan diperlakukan sebagai requirement oleh para developer.
2. Evolutionary Design
Desain sistem yang dibuat harus simpel namun memiliki nilai skalabilitas yaitu mampu menerima perubahan dan perluasan cakupan sistem di kemudian hari. Dalam domain kegiatan ini, yang benar-benar harus diperhatikan adalah kemampuan arsitektur software yang akan dikembangkan untuk beradaptasi dengan perubahan. Jika perubahan yang akan terjadi belum mampu diprediksikan di awal, minimal desain sistem yang akan dibuat harus dirancang supaya mudah untuk direfactoring. Konsep Object Oriented Analysis & Design (OOAD) sangat berperan dominan dalam hal ini.
3. Test-Driven Development
Domain kegiatan test-driven development ini mencakup nyaris sebagian besar pola-pola praktek agile development. Beberapa pola praktek bahkan saling beririsan dengan domain kegiatan yang lain. Ruang lingkup praktek dalam domain ini mencakup nyaris semua fase yang dilakukan dalam pengembangan software yaitu fase desain, coding, testing, release. Keberhasilan proses agile juga ditentukan dari keberhasilan domain kegiatan ini. Tidak berlebihan jika dikatakan bahwa agile development adalah test-driven development.

Aspek Praktis :
1. Coding Standards, yaitu penyeragaman pola dan teknik pemrograman untuk yang menjadi acuan bagi pengembangan aplikasi yang dilakukan dalam tim dan menyediakan pola baku untuk melakukan integrasi, pengujian, hingga analisis masalah-masalah yang berkaitan dengan bug.
2. Simple Design, yaitu elemen yang merujuk pada perancangan arsitektur sistem yang disiapkan untuk mampu menerima perubahan maupun penambahan fitur-fitur di kemudian hari, dengan acuan perancangan sistem berbasis komponen yang sederhana namun bersifat dinamis.
3. Refactoring, yaitu suatu kegiatan memodifikasi kode yang telah dimiliki untuk dipergunakan ulang dalam pembuatan kode pembentuk aplikasi. Refactoring dapat pula diartikan sebagai kegiatan memodifikasi kode yang didefinisikan sebagai sebuah modul fungsional yang mengalami penyesuaian setelah melewati beberapa fase pengujian.
4. Pair Programming, yaitu suatu disiplin dan budaya kerja yang diperkenalkan dalam agile development dimana sebuah isu pekerjaan ditangani oleh sepasang developer yang berperan sebagai eksekutor dan analisa. Dengan konsep ini, dapat menekan resiko terjadinya cacat produksi akibat kesalahan interpretasi dokumen requirement dengan kode program yang dihasilkan.
5. Collective Code Ownership, yaitu berwujud sebuah repository untuk menyimpan progress kode program yang terkatalog secara historis disertai dengan catatan mengenai perubahan yang dibuat oleh masing-masing programmer. Dengan adanya konsep kepemilikan kode secara kolektif ini, setiap programmer dalam tim dapat mereview hasil kode miliknya sendiri maupun milik rekan satu tim dan memodifikasinya, dengan tetap memperhatikan pencatatan riwayat dan otoritas perubahan dari kode tersebut.
6. Small Release, yaitu pengiriman progress untuk setiap bagian fungsional dari requirement yang telah selesai dikonstruksi (dan bebas bug) berupa modul atau komponen aplikasi.
7. Continuous Integration, yaitu proses menyatukan seluruh modul/komponen pembentuk aplikasi yang dilakukan setiap terjadi small-release yang telah selesai dilakukan pengujian baik secara otomatis maupun secara fungsional oleh pihak developer dan klien.
8. Test-First Development, yaitu inisialisasi unit testing yang akan dipergunakan dalam pembuatan perangkat pengujian pada awal fase konstruksi sebelum proses development aplikasi untuk semua requirement dilakukan.
9. Test-Last Development, yaitu proses evaluasi dan pengujian yang dilakukan secara manual oleh klien dan developer secara kolaboratif, atau dilakukan secara otomatis mempergunakan unit testing yang telah didefinisikan pada test-first development.
10. Automated Developer Tests, yaitu mekanisme otomatis untuk menjalankan unit testing yang telah didefinisikan pada test-first development untuk menguji seluruh modul/komponen pada aplikasi dan memastikan aplikasi bebas dari cacat, baik berupa cacat teknis maupun vulnerabilitas aplikasi terhadap kemungkinan error yang diakibatkan kesalahan input hingga hacking.
11. Functional Tests, yaitu merupakan pengujian rilis aplikasi yang dilakukan oleh developer bersama dengan klien secara kolaboratif untuk mengetahui feedback dan kesesuaian dari fungsi aplikasi dengan keperluan bisnis nyata. Bila diperlukan, pengujian fungsional akan memicu refactoring untuk menyesuaikan terhadap perubahan-perubahan fitur yang dianggap kurang tepat dengan kebutuhan klien di lapangan.