Teknologi Informasi dan Pemerintahan: Tentang Fenomena Baru ‘Open Data’ di Indonesia

Indonesia akhir-akhir ini sedang ramai memperbincangkan hasil Pemilu Presiden RI 2014. Ketika hasil quick count lembaga survei tidak seragam, banyak pihak yang kemudian melakukan klaim-klaim pemenangan yang aneh. Lucunya, saya pribadi justru merasa tersulut untuk ikut merespon sekarang, setelah pemilu selesai, bukan saat masa kampanye pemilihan presiden. 😀

Ngg, maaf, maaf, bukan ini inti pembicaraan yang ingin saya sampaikan. 😛

Saya salut sekali dengan Komisi Pemilihan Umum Republik Indonesia. Tahun ini, data Daftar Pemilih yang boleh mencoblos serta rekap hasil Pemilu Presiden semuanya bisa dilihat di alamat http://data.kpu.go.id dan http://pilpres2014.kpu.go.id. Dengan menggunakan halaman ini, seluruh data yang ada dapat dipantau oleh publik, sehingga siapapun yang berminat untuk melihat datanya dengan lebih teliti bisa langsung bertindak dengan cepat. Di Twitter sampai ada hastag #KawalKPU segala untuk merepresentasikan tindakan netizen yang ingin melihat hasil pemilu yang bersih dari kecurangan.

Akibatnya, KPU harus bersabar dalam menerima berbagai macam jenis kritik, koreksi, dan juga sentimen dari Rakyat Indonesia yang ingin mengawal proses pemilu. Ini sebuah fenomena yang menurut saya sangat positif. Semakin banyak rakyat yang merasa terlibat dalam menyelesaikan masalah yang ada, kemudian “turun tangan” (pinjam istilah Pak Anies Baswedan) untuk bertindak, maka tentu saja Indonesia yang maju bisa segera berubah dari retorika dalam wacana menjadi kenyataan. 😉

Fenomena ini adalah sebuah kemajuan yang sangat luar biasa. Jika hal seperti ini dilanjutkan, tidak hanya di KPU saja, tapi juga di lembaga-lembaga pemerintah lainnya, saya rasa frase Transparansi Publik akan jadi sebuah kenyataan yang benar-benar terimplementasi. 🙂 Bayangkan kalau seluruh data yang memang seharusnya diketahui oleh Rakyat Indonesia seperti progress pengembangan infrastruktur pembangunan, pajak, dan data-data terkait dengan pendidikan bisa diakses dan dipantau publik. Rakyat Indonesia akan bisa terlibat langsung dalam mengawasi dan akhirnya akan lebih optimis terhadap hasil kerja politisi-politisi yang menjadi wakil rakyat di pemerintahan.

Tampilan halaman pilpres2014.kpu.go.id.

Tampilan halaman pilpres2014.kpu.go.id.

Indonesia di masa Pak SBY sudah memiliki Unit Kerja Presiden Bidang Pengawasan dan Pengendalian Pembangunan (UKP4). Coba kunjungi http://ukp.go.id. Salah satu programnya adalah Open Government Indonesia (OGI). Coba baca lebih detailnya di http://www.opengovindonesia.org. Salah satu produknya yang saya tahu adalah LAPOR, singkatan dari Laporan Aspirasi dan Pengaduan Online Rakyat, sebuah aplikasi berbasis web dan mobile yang bisa digunakan oleh Rakyat Indonesia untuk memberikan aspirasi, ataupun melaporkan semua hal yang terkait dengan pemerintahan. Ada infrastruktur lalu lintas yang rusak? LAPOR saja. Ada kantor pemerintah yang menerapkan pungutan liar? LAPOR lagi. Hasil dari setiap pelaporannya akan diproses lebih lanjut hingga ditindak. Coba saja kunjungi website-nya di alamat http://lapor.kpu.go.id.

Tampilan website lapor.ukp.go.id.

Tampilan website lapor.ukp.go.id.

Hal-hal positif seperti ini malah jarang disorot media ya? Hihi.

Terkait dengan optimisasi penggunaan Teknologi Informasi di pemerintahan, menurut saya, ada 2 hal, yang jika diimplementasikan, akan meningkatkan kualitas dari fenomena open data ini. Hal tersebut adalah tentang pengembangan peranti lunak pemerintah yang open source dan adanya sentralisasi data publik.

 

Tentang Peranti Lunak Pemerintah yang Open Source

Beberapa bulan yang lalu, saya sempat dimintai saran oleh teman saya tentang pengembangan e-procurement di kantor pemerintah. Saat itu saya masih belum tahu apa-apa tentang peranti lunak yang ada kaitannya dengan pemerintahan. Di pikiran saya, setiap kantor pasti harus mengembangkan peranti lunak sendiri-sendiri dan kemudian harus mempersiapkan infrastrukturnya sendiri pula.

Setelah melakukan browsing, barulah saya tahu, kalau ternyata peranti lunak e-procurement sudah tersentralisasi dan dikembangkan langsung oleh pemerintah. Waktu itu saya membaca informasinya di alamat http://eproc.lkpp.go.id. Jadi, ada namanya Layanan Pengadaan Secara Elektronik atau disingkat LPSE. LPSE ini adalah peranti lunak berbasis web yang dikembangkan untuk menangani lelang pengadaan barang/jasa secara digital. Coba saja googling dengan kata kunci “LPSE”, nanti akan muncul banyak contoh LPSE yang telah terdistribusi. Setelah saya perhatikan, ternyata LPSE ini sudah terimplementasi di banyak provinsi.

Saya sangat tertarik dengan hal ini, sehingga saya mencari-cari informasi lainnya. Ternyata peranti lunaknya didistribusikan secara gratis (free license). Aplikasinya sepertinya dikembangkan dengan menggunakan Java. Bahkan, sistem proteksi dokumennya juga sudah tersedia. Waktu itu di halaman yang saya cantumkan di atas, saya membaca tentang beberapa prosedur implementasi yang dapat dilakukan. Sayangnya, dokumentasinya menurut saya masih berantakan, dan bahkan pedoman instalasinya juga kurang jelas. Link untuk men-download salinan aplikasinya juga tidak ada di halaman itu. Saya rasa untuk mendapatkan informasi lengkap, mau tidak mau harus bertanya langsung ke humas Lembaga Kebijakan Pengadaan Barang Jasa Pemerintah (LKPP) selaku yang membawahi, dan itu berarti agak susah.

Mungkin ada beberapa faktor pertimbangan yang membuat pengembang LPSE tidak menjadikan peranti lunak ini open source. Namun, seandainya saja aplikasi ini open source, pemerintah bisa mendapatkan masukan yang lebih banyak terkait dengan implementasi teknis dan mungkin non-teknisnya. Di luar sana ada banyak pengembang peranti lunak yang antusias untuk memberi masukan dan tentunya bisa dijadikan bahan pertimbangan baru bagi pengembang peranti lunak tersebut di pemerintahan agar dapat mengimplementasikan best practice untuk peranti lunak yang ada.

Peranti lunak seperti LPSE milik LKPP ini hanya salah satu contoh yang saya tahu saja. Mungkin ada banyak peranti lunak lain yang juga dikembangkan sendiri oleh pemerintah. Andaikan semuanya open source, hehe.

Sebagai contoh, di Inggris, pencarian informasi terkait dengan layanan pemerintahan sangat mudah, tinggal kunjungi https://www.gov.uk. Di sana, informasi seperti passport, aturan tax, bahkan aturan untuk berkendara bagi pejalan kaki, pengguna sepeda, dan kendaraan juga tersedia. Menariknya lagi, source code-nya dibuka untuk umum. Coba kunjungi https://github.com/alphagov.

 

Tentang Sentralisasi Data Publik

Beberapa waktu yang lalu, saya dan teman saya kebetulan mendapatkan sebuah pekerjaan yang membutuhkan data provinsi dan kabupaten yang ada di seluruh Indonesia. Saat itu saya hanya bisa memasang ekspresi bingung. Ke mana saya harus mencari datanya? 😐

Hal yang relatif sepele seperti ini, aslinya sangat penting. Ada banyak aplikasi yang dalam praktiknya pasti membutuhkan data-data seperti ini. Pendaftaran mahasiswa misalnya. Pihak universitas jika menyediakan aplikasi pendaftaran mahasiswa baru online pasti akan menanyakan asal kota/kabupaten dan provinsi dari si mahasiswa baru. Data ini tentunya dibutuhkan oleh sistem agar pilihannya dapat disajikan di formulir online-nya.

Kalau sudah bingung begini, mau tidak mau si pengembang biasanya akan mencari sendiri datanya, kemudian memasukkan data yang ditemukan ke dalam database yang mereka buat sendiri. Akibatnya, ada banyak data yang mungkin duplikat, atau mungkin salah, atau mungkin kurang lengkap, dan berbagai macam kemungkinan tidak enak lainnya.

Andaikan pemerintah punya pusat data publik yang menyimpan data-data seperti ini, tentunya masyarakat akan sangat terbantu, apalagi para pengembang peranti lunak.

Tidak hanya data seperti itu, data tentang undang-undang terbaru misalnya. Saya pribadi kalau diminta untuk mencari salinan UU ITE yang paling baru, saya akan bingung juga, karena ada banyak salinan yang berasal dari alamat-alamat yang tidak resmi seperti blog seseorang yang tidak saya kenal. Bagaimana kalau ternyata salinannya salah? Bagaimana kalau ternyata salinannya bukan yang paling baru?

Andaikan pemerintah punya pusat data publik yang menyimpan data-data seperti ini, (lagi-lagi) tentunya masyarakat akan sangat terbantu.

Dan mungkin masih banyak lagi jenis data-data yang jika disentralisasikan akan sangat berguna sekali buat khalayak ramai.

Oh iya, saya sempat menemukan artikel menarik di sini: https://github.com/blog/1657-introducing-government-github-com

GitHub adalah situs tempat penyimpanan source code tersentralisasi, yang memang namanya hanya akrab di telinga para pengembang peranti lunak. Tapi di artikel di atas, tim mereka bercerita bahwa kini GitHub bukan lagi digunakan untuk sekedar hal-hal teknis semacam itu, namun juga untuk hal-hal non-teknis seperti penyimpanan data yang berkaitan dengan hukum, peta, maupun layanan-layanan pemerintah. Indonesia juga seharusnya bisa memanfaatkan fasilitas seperti ini bukan? GitHub boleh digunakan secara gratis. 😀

Lebih keren lagi, kalau misalnya pemerintah Indonesia punya sejenis API server untuk menyajikan seluruh data yang benar-benar tersentralisasi dan paling terbaru. Saya jadi ingat, kemarin sebelum pemilu berjalan, ada kompetisi untuk membuat mobile apps yang bertemakan pemilu. Hasilnya kini sudah dipublikasi di http://pemiluapps.org. Aplikasi yang dikembangkan tersebut menggunakan API Pemilu, sebuah antarmuka (interface) yang dapat digunakan oleh aplikasi untuk bertukar data. Dengan menggunakan API Pemilu ini, pengembang bisa mendapatkan data-data seperti berita terbaru terkait pemilu, social analytics untuk mengambil data dari social media, dan fungsi-fungsi lainnya. API Pemilu ini open source, dan kodenya bisa dilihat di https://github.com/pemiluAPI.

 

Yah, ini memang sebuah impian jangka panjang. Mudah-mudahan hal-hal positif seperti ini dapat cepat berkembang, dan saya bisa merasakannya sebelum saya tua. Syukur-syukur kalau saya bisa ikut mengembangkan ide ini di pemerintahan Indonesia suatu saat nanti. Siapa tahu?

Semoga bermanfaat. 🙂

Mempelajari Pemrograman Web

Sudah 3 tahun terakhir ini semenjak saya benar-benar ‘menjeburkan’ diri di bidang teknologi informasi dan mengawalinya dengan menjalani kuliah di program studi teknik informatika, sebagian besar aktifitas saya dihabiskan di web browser: emailblogging, menggunakan cloud computing dan banyak hal lainnya. Aplikasi desktop yang ada di komputer saya jadi banyak yang menganggur.

Kalau saat ini, aplikasi dekstop yang cukup sering saya gunakan paling hanya Microsoft Office, 7zip (untuk menangani compressed archive), beberapa IDE (NetBeans, Visual Studio), SourceTree (untuk version control system), beberapa teks editor canggih (Sublime, Notepad++) dan MuseScore (untuk menulis partitur lagu). Ada juga beberapa aplikasi yang terkait dengan sistem seperti Windows Explorer atau command prompt. Aplikasi yang selain disebutkan di atas jadi jarang sekali dipakai.

Jangan-jangan nanti semua komputer akan jadi thin client semua ya? Cukup hanya dengan web browser dan semua hal bisa dilakukan. Bisa jadi juga kan ya?

Bayangkan, kalau mau mencari video, sekarang sepertinya orang-orang lebih suka streaming di YouTube. Untuk memutar lagu, web browser sekarang juga bisa. Aplikasi web seperti SoundCloud misalnya, penuh dengan rekaman data audio yang menarik. Untuk pekerjaan kantor tidak perlu ditanya lagi. Ada Google Drive dan SkyDrive. Semuanya bisa dijalankan di web browser.

Jadi, kalau bicara masalah peluang di masa depan, saya rasa belajar web programming merupakan hal yang sangat tepat. 😀

Ada yang tertarik untuk mempelajari web programming? Tulisan saya kali ini membahas tentang langkah-langkah yang bisa diikuti jika pembaca ingin mempelajari pemrograman web. 😉

Mendesain Layout Halaman Web

Pertama kali saat mempelajari hal-hal yang berkaitan dengan web, hal pertama yang harus dipahami adalah tentang Hypertext Markup Language (HTML) dan Cascading Style Sheet (CSS). HTML dan CSS merupakan gerbang pertama yang harus dipelajari untuk membuat halaman web.

Pembaca sekarang sedang melakukan browsing dengan Google Chrome atau Firefox? Coba sekarang tekan Ctrl + U.

Nah, sudah kembali ke halaman ini? 😛 Kode-kode panjang yang pembaca lihat setelah menekan shortcut tersebut merupakan elemen penyusun dari website yang sedang pembaca kunjungi ini.

Setiap halaman yang pembaca lihat di web browser tersusun dari struktur kode-kode HTML tersebut. Di dalamnya, bagian-bagian dari halaman tersebut diberi spesifikasi tampilan (style) dengan menggunakan CSS.

Ada banyak resources yang dapat digunakan oleh pembaca untuk mempelajari HTML. Coba saja kunjungi w3schools misalnya.

Tampilan halaman depan w3schools.

Sebenarnya, di dunia nyata, proses mendesain halaman web tidak langsung ke kode HTML dan CSS. Sebelum memutuskan untuk mengembangkan suatu halaman web, terlebih dahulu si pengembang harus memikirkan kira-kira bentuk website-nya akan seperti apa. Bentuk website tersebut pada awalnya digambar sketsanya atau biasa disebut juga wireframing. Setelah terpetakan, barulah desainer web bisa mendesain halamannya. Itupun tidak langsung menggunakan HTML dan CSS. Pada awalnya desain web tersebut hanya digambar biasa dengan software seperti Adobe Photoshop atau Illustrator.

Setelah desainnya benar-benar fix, barulah kemudian tampilan websitenya dibangun dengan HTML dan CSS.

Jika pembaca merasa sudah cukup mengerti tentang HTML dan CSS, cobalah pelajari bagaimana mengubah gambar desain menjadi halaman web yang sebenarnya. Ada banyak tutorial yang bisa pembaca cari. Biasanya saya melihat tutorial-tutorial tersebut di websitewebsite ini: 1stwebdesigner, Tuts+, CSS-Tricks. Masih banyak website lain yang juga bagus. Googling saja. 😉

HTML 5, CSS 3, dan Lainnya

Jika pembaca sudah mulai menguasai dasar-dasar HTML, coba pelajari tentang HTML 5 dan CSS 3. Dengan 2 teknologi ini, pembaca bisa membuat sesuatu yang lebih powerful dibanding dengan HTML dan CSS biasa.  Bahkan dengan HTML 5, pembaca bisa membuat aplikasi seperti game. Selain itu jika pembaca juga mau mempelajari JavaScript, hanya dengan HTML, CSS dan JavaScript, pembaca bisa membuat aplikasi mobile. Coba lihat: PhoneGap, Steroids, dan Ionic Framework.

Mulai Mendalami Web Programming

Setelah mempelajari HTML dan CSS, langkah selanjutnya adalah mempelajari bahasa pemrograman web yang berjalan di sisi server. Ada buanyak (saking banyaknya) bahasa pemrograman yang bisa pembaca pelajari. Di antaranya ada PHP, ASP dan ASP.NET, Java, Ruby, Python dan lainnya. Pilihlah 1 bahasa dan fokuslah ke bahasa pemrograman tersebut sampai benar-benar menguasainya.

Kalau saran pribadi dari saya, pelajarilah PHP terlebih dahulu. Di antara bahasa-bahasa tersebut, PHP merupakan yang paling banyak penggunanya untuk  saat ini. Selain itu, nanti jika pembaca ingin mempunyai website sendiri misalnya, hosting di Indonesia rata-rata sudah mendukung PHP, sehingga akan lebih mudah untuk pembaca saat ingin mempraktikkan langsung hasil belajarnya.

Nanti, jika sudah menguasai PHP, berpindah ke bahasa lain tidak akan terlalu sulit. Saya pribadi bahkan tidak menganjurkan pembaca untuk langsung mempelajari Ruby, Python, dan ASP, karena bahasa-bahasa tersebut sangat strict dalam kerangka Model-View-Controller (akan saya bahas di bawah). Dengan PHP, pembaca bisa mempelajari konsep dasarnya dengan lebih mudah.

Bitnami WAMP Stack, salah satu tools yang dapat pembaca gunakan untuk mempelajari PHP web programming.

Bitnami WAMP Stack, salah satu tools yang dapat pembaca gunakan untuk mempelajari PHP web programming.

Oh iya, saat mempelajari web programming, pastikan pembaca mempelajari konsep form dengan benar. Di jagad web, yang membuat dunia di internet bisa seinteraktif seperti saat ini adalah karena adanya si tag <form> tersebut. Saat mempelajari form, pembaca pasti akan bertemu dengan terminologi seperti GET dan POST. Pelajari hal tersebut, karena disitulah nanti inti dari web programming. Jika pembaca sudah berurusan dengan form, biasanya pembaca juga akan berurusan dengan database. Pelajari pula syntax dasar dari Structured Query Language (SQL) seperti INSERT, SELECT, UPDATE dan DELETE. Pembaca akan akrab dengan 4 keywords tersebut.

Oh, satu lagi, bertahanlah dalam mempelajari programmingnya sendiri. Sebelum mempelajari hal seperti GET dan POST tadi, pembaca pasti akan berurusan terlebih dahulu dengan dasar-dasar pemrograman seperti branching (percabangan) dan looping (perulangan). Setelah itu, pembaca juga pasti akan bertemu tentang konsep function dan bahkan Object Oriented Programming. Di sinilah kesungguhan pembaca dalam mempelajari dunia komputer akan diuji. Mereka yang berhasil di tahap ini biasanya akan sukses. 😉

Nah, tentang sumber untuk belajarnya, kalau saran pribadi dari saya, cobalah cari buku atau e-book soal web programming. Sumbernya bisa banyak sekali. Untuk yang mau belajar PHP, di Google ketikkan saja php programming filetype:pdf dan pembaca akan kebanjiran dokumen PDF yang membahas tentang web programming menggunakan PHP.

Tampilan halaman it-ebooks.info, website penyedia e-book komputer gratis.

Tampilan halaman it-ebooks.info, website penyedia e-book komputer gratis.

Oh iya, satu lagi, satu lagi. 😛 Bertahanlah dengan banyaknya konten yang ber-Bahasa Inggris, karena Bahasa Inggris adalah lingua franca-nya para ahli komputer. Just keep learning, dan pastikan Google Translate ada di salah satu tab pembaca saat browsing. 😀

Untuk memastikan bahwa pembaca benar-benar mengerti tentang web programming, cobalah membuat aplikasi web sederhana dari scratch, yakni benar-benar dari 0. Pembaca bisa membuat aplikasi blog sederhana, atau buku tamu sederhana, atau mungkin galeri foto sederhana, atau bahkan jejaring sosial sederhana? Apapun itu, cobalah membuatnya sampai benar-benar jadi. Pembaca akan lebih banyak mendapatkan ilmunya nanti, dibanding hanya sekedar membaca buku. Pastikan pembaca benar-benar mempraktikkannya ya. 🙂

Melompat ke Advanced Topics

Ketika pembaca merasa sudah benar-benar mengerti tentang bagaimana penggunaan HTML dan CSS, serta bagaimana mengintegrasikannya agar dapat mengirim dan mengambil data secara dinamis ke database dengan menggunakan salah satu bahasa pemrograman web, cobalah untuk melanjutkannya dengan mempelajari hal-hal berikut:

MVC Framework

Ada kalanya nanti ketika pembaca membuat 1 aplikasi web yang cukup kompleks, dan kode pembaca sudah demikian banyak, sehingga rasanya seperti berantakan sekali. Jika pembaca telah merasa demikian, ada baiknya pembaca mempelajari penggunaan MVC framework.

MVC adalah singkatan dari model-view-controllersebuah software-pattern yang memungkinkan pembaca untuk menyusun aplikasi dengan 3 objek utama yaitu model (sebagai entitas utama yang digunakan untuk mengakses data), view (sebagai tampilan yang dilihat pengguna) dan controller (sebagai pengendali utama aplikasi).

Skemanya kurang lebih bisa dilihat di gambar di bawah ini:

Tipikal kolaborasi dari komponen MVC.

Bahasa pemrograman web seperti Ruby dan ASP.NET telah menganut pattern ini di dalam fungsi utamanya. Mempelajari Ruby dan ASP.NET akan membuat pembaca merasakan langsung bentuk pattern ini.

Di PHP, ada beberapa MVC framework yang dapat pembaca gunakan, di antaranya: Yii, CakePHP, Laravel, Zend, Symfony.

Dengan menggunakan framework, aplikasi yang pembaca buat akan lebih terstruktur dan lebih mudah untuk dipelihara. Jika pembaca terjun di dunia web programming yang sebenarnya, ketika suatu aplikasi web dikembangkan oleh banyak programmer, barulah nanti akan terasa bahwa menggunakan framework yang telah ada atau setidaknya menggunakan pattern MVC akan mempermudah pengembang untuk terus memperbarui aplikasinya.

CakePHP, salah satu PHP MVC framework.

CakePHP, salah satu PHP MVC framework.

Javascript dan AJAX

Pembaca pernah melihat website yang di halaman depannya ada slideshow gambar, atau ada efek-efek transisi atau mungkin efek bergerak yang menarik? Nah, disitulah peran Javascript.

Javascript adalah sebuah bahasa pemrograman dynamic yang berjalan di sisi client dan merupakan bagian dari web browser yang pembaca pakai. Dengan menggunakan Javascript, pembaca bisa memodifikasi elemen-elemen  (Document Object Model atau DOM) halaman web secara langsung dan berinteraksi dengan pengguna dengan konten yang interaktif. Mempelajari Javascript akan membantu pembaca untuk memperkaya user experience dari halaman web yang pembaca kembangkan.

Jika pembaca ingin mempelajari dasar-dasar dari Javascript, pembaca bisa mempelajarinya secara interaktif di Codecademy. Di sana nanti pembaca akan mendapatkan instruksi-instruksi yang bisa pembaca ikuti untuk mendalami Javascript.

Jika pembaca sudah mulai menguasainya, cobalah mencoba-coba kode Javascript yang pembaca pelajari dengan meletakkannya langsung di halaman web sebagai latihan.

Nah, setelah merasa sudah mulai menguasai Javascript, pembaca bisa mencoba Javascript library seperti jQuery misalnya. Dengan menggunakan library, pembaca bisa melakukan banyak aksi-aksi ataupun menambahkan efek-efek tertentu tanpa harus membuatnya dari awal.

Halaman depan website jQuery.

Halaman depan website jQuery.

Di Javascript, ada sebuah teknik menarik yang disebut AJAX. AJAX merupakan singkatan dari Asynchronous Javascript and XML, yaitu sebuah teknik untuk menciptakan aplikasi web yang responsif. Dengan menggunakan AJAX, pengguna halaman web tidak perlu berpindah dan me-load halaman dari awal, karena segala sesuatunya telah dilakukan dibelakang pengguna secara asynchronous tanpa pengguna sadari.

Dengan menggunakan AJAX, website akan terasa lebih responsif dan interaktif di mata pengguna. SoundCloud, Facebook dan Twitter adalah contoh aplikasi yang menggunakan AJAX. Saat mengetikkan komentar di salah satu posting di Facebook misalnya, pembaca cukup mengetikkan komentar dan menekan enter, dan tahu-tahu komentar pembaca sudah ditampilkan di sana bukan? Sebenarnya, tanpa disadari, saat penggunanya menekan enter setelah mengetik komentar, sang Facebook di belakang layar melakukan pengiriman data ke server dan langsung menampilkannya tanpa harus berpindah halaman.  Seperti itulah contoh pemanfaatan AJAX. Kalau pembaca sudah menguasai jQuery, melakukan AJAX tidak akan menjadi pekerjaan sulit.

MV* Framework Dengan Javascript

Beberapa aplikasi web, ada yang sebagian besar kodenya merupakan kode Javascript. Biasanya, aplikasi yang didesain hanya berkutat di 1 halaman (disebut juga single page application atau disingkat SPA) akan mengalaminya. Saat sebagian besar aksi perpindahan halaman harus ditentukan dengan menggunakan Javascript, tentu kode Javascript yang ada akan menjadi banyak dan biasanya tidak terstruktur, sama kasusnya seperti kasus MVC pada bahasa pemrograman web seperti PHP yang kita bahas sebelumnya di atas.

Untuk mengatasi hal ini, konsep MVC pun juga dianut dalam pemrograman Javascript, hanya saja yang dipakai adalah konsep turunannya, dan ada banyak sebutan dari turunan pattern MVC ini. Ada yang menyebutnya MVVM (model-view-view model), ada juga yang menyebutnya MVP (model-view-presentation). Karena itu, biasanya turunan-turunan dari MVC ini disingkat menjadi MV*.

Ada banyak MV* framework ini dan tentunya semuanya diprogram dengan Javascript. Di antaranya ada: AngularJS, Backbone.js, Knockout.js, dan Ember.jsFramework-framework ini sudah banyak digunakan di berbagai aplikasi-aplikasi yang besar. Framework Backbone.js saja sudah dipakai di aplikasi seperti WordPress, Four Square dan SoundCloud (coba lihat di sini).

Halaman depan website AngularJS.

Halaman depan website AngularJS.

Demikianlah kira-kira langkah-langkah yang dapat diikuti untuk mempelajari pemrograman web. Tulisan ini kurang lebih bersumber dari pengalaman pribadi saya juga, hehe. Pada akhirnya, siapapun orangnya dan bagaimanapun caranya saat mempelajari web programming pasti akan berhadapan dengan beberapa atau mungkin semua hal yang saya bahas di tulisan ini. Jika ada pembaca yang ingin menambahkan, memberi saran atau mengkritik terkait tulisan ini, silakan disampaikan lewat komentar, dan akan saya terima dengan tangan terbuka.

Mempelajari sesuatu merupakan tantangan yang besar, dan ketika berhasil pasti akan sangat menyenangkan rasanya. Mudah-mudahan pembaca yang ingin mempelajari web programming bisa dipermudah dengan adanya tulisan ini. Semoga bermanfaat. 😀

Menangani Penyimpanan File yang di-Upload ke Server

Dalam pembuatan aplikasi web, terkadang dibutuhkan suatu skenario untuk meng-upload satu atau beberapa file ke server. Untuk mengganti gambar profil di aplikasi jejaring sosial misalnya, pengguna pasti akan berurusan dengan skenario ini.

Proses meng-upload file pada aplikasi web ditangani oleh masing-masing infrastruktur dari aplikasi web yang digunakan, namun hampir seluruh urutan prosesnya sama: user akan memilih file, aplikasi web akan menyimpan file yang di-upload oleh user ke suatu path dengan nama file tertentu, kemudian jika dibutuhkan informasi file tersebut akan disimpan di database. Hal yang sering menjadi masalah adalah tentang metode menyimpan file-file tersebut.

Tulisan saya kali ini membahas beberapa cara yang bisa dilakukan untuk menangani penyimpanan file yang di-upload ke server lewat aplikasi web.

Cara 1: Simpan File Apa Adanya

Menyimpan file apa adanya adalah cara yang paling mudah dan juga paling tidak direkomendasikan. -_- Simpan file yang telah di-upload ke suatu direktori tertentu dengan nama yang sama persis saat di-upload.

Misalkan, ada seseorang bernama Budi yang menyimpan foto profil di komputernya dengan nama budi.jpg, maka aplikasi akan meng-upload dan menyimpannya juga dengan nama budi.jpg di suatu direktori di server.

Masalahnya akan muncul, jika ternyata ada Budi lain (sebut saja Budi 2) yang juga menyimpan foto profil dengan nama budi.jpgFile yang sama tentu saja akan tertimpa.

Jika hal seperti ini terjadi, tentu saja gambar foto profil Budi 1 dan Budi 2 akan selalu sama. Sedangkan di Indonesia mungkin ada ribuan orang dengan nama Budi (Budi 3, Budi 4, dan seterusnya). Dengan cara ini, gambar foto profil ribuan orang ini pasti akan selalu sama jika mereka meng-upload file dengan nama budi.jpg. Bayangkan saja, mereka akan saling berebut berganti gambar profil bukan? 😛

Cara ini hanya untuk ilustrasi kemungkinan terburuk saja. Sebisa mungkin hindari cara sederhana ini, kecuali jika dapat dipastikan bahwa tiap user akan meng-upload file yang namanya pasti unik.

Cara 2: Simpan File di Dalam Database

Banyak Database Management System (DBMS) yang menyediakan tipe data binary untuk dapat menyimpan file langsung di simpan di dalam database. Tipe data binary large object (BLOB) di MySQL misalnya, dengan menggunakan tipe data ini, file yang di-upload oleh user dapat langsung di simpan di database dengan statement INSERT seperti biasa.

Namun sebaiknya sebelum menggunakan cara ini, pelajari tentang efek penyimpanan binary file  di dalam database terhadap performa dari DBMS yang digunakan, karena ada catatan tertentu terkait soal penggunaan cara ini.

Sebagai contoh, untuk pengguna DBMS MySQL, coba lihat halaman ini: http://stackoverflow.com/questions/5285857/when-is-using-mysql-blob-recommended

Cara 3: Simpan File di Direktori Tertentu Dengan Nama Khusus

Cara ketiga yang cukup mudah dan paling umum adalah menyimpan file tersebut dengan suatu nama khusus tertentu. Untuk cara ini, ada beberapa cara yang bisa dilakukan.

Contoh sederhana misalnya, aplikasi bisa saja menyimpan file yang telah di-upload tersebut dengan format nama tertentu. Sang programmer dapat membuat prosedur sedemikian sehingga setiap file yang di-upload akan disimpan dengan nama file-n.extension di mana n adalah urutan upload -nya. Jadi nanti di dalam direktori tempat file upload akan ada file-1.extension, file-2.extension dan seterusnya. Sedangkan informasi file yang aslinya bisa disimpan di dalam database.

Kelemahan metode ini adalah, sang programmer harus memikirkan sebuah fungsi untuk meng-generate format nama ini dengan benar tanpa kemungkinan adanya saling timpa.

Cara lain bisa juga dengan cara meng-generate sejenis random characters tertentu yang nantinya akan digunakan sebagai nama file. Dengan cara ini, sang programmer tinggal memikirkan 1 fungsi untuk menghasilkan karakter acak yang stabil untuk nama file yang akan disimpan.

Ngomong-ngomong soal karakter acak, ada beberapa cara yang bisa dilakukan. Di antaranya, sang programmer bisa menggunakan fungsi untuk meng-generate sebuah Universally Unique Identifier. Banyak bahasa pemrograman yang sudah memiliki built-in function untuk melakukan hal ini.

Ini contoh UUID: 88961191-5ad3-49b2-be97-c3f481820644. Spesifikasinya diatur dalam RFC 4122.

Banyak metode untuk menghasilkan karakter acak. Biasanya, dengan menggunakan parameter timestamp, keunikan karakter bisa dijamin. Membungkus string angka timestamp dengan fungsi md5 misalnya, itu sudah cukup menghasilkan karakter yang lumayan acak (lihat fungsi PHP di bawah sebagai contoh).

$randomCharacters = md5(strtotime("now"));

Untuk fungsi yang lebih reliabel, bisa juga menggunakan fungsi checksum untuk file. Fungsi checksum akan menghasilkan serentetan string yang unik dan tentunya dapat digunakan untuk nama file yang di-upload. Hasil checksum bisa dikatakan sebagai sidik jari dari suatu file sehingga terjamin keunikannya.

Algoritma checksum ada banyak pilihannya, dan sama seperti UUID tadi, fungsi built-in-nya juga sudah banyak di berbagai macam bahasa pemrograman. Tinggal dipakai saja.

Cara 4: Simpan File di Dalam Struktur Direktori Tertentu Dengan Nama Khusus

Cara nomor 3 di atas, boleh dipakai dengan catatan: jumlah file dalam direktori tempat penyimpanan file yang di-upload tidak terlalu banyak.

Saat mengakses suatu direktori dengan menggunakan perintah ls di Linux atau dir di Windows, terlebih dahulu, sistem harus melakukan pendataan terhadap isi direktori. Itulah mengapa saat menggunakan file explorer di semua sistem operasi, semakin banyak menyimpan file di dalam direktori maka akan semakin lama proses loading-nya.

Selain itu, setiap disk tempat penyimpanan data memiliki batas maksimum jumlah file yang dapat disimpan di dalam 1 direktori. Batas maksimum ini dipengaruhi oleh jenis file system yang digunakan (lihat tabel di bawah).

Sistem Operasi File System Jumlah File Maksimum di 1 Direktori
Windows FAT-32 268,173,300
NTFS 4,294,967,295 (232-1)
Linux ext3 Tergantung Kapasitas Disk
ext4 Tergantung Kapasitas Disk
Mac OS HFS 65,535
HFS+ 4,294,967,295 (232-1)

Diambil dari banyak sumber. Jika ada yang keliru mohon beri pemberitahuan pada penulis.

Jika aplikasi web yang dikembangkan akan menghasilkan banyak sekali file yang di-upload seperti aplikasi penyimpanan gambar, faktor ini harus sangat diperhatikan.

Untuk menangani hal ini, diantaranya, sang programmer dapat memisahkan file-file yang di-upload ke dalam klasifikasi-klasifikasi yang lebih spesifik dalam bentuk direktori. Misalnya, jika file yang di-upload diletakkan di direktori upload/, maka jika ada user yang bernama imamfile-nya bisa diletakkan di direktori upload/imam/.

Klasifikasi yang dilakukan dapat dipilih sesuai kebutuhan. Direktori klasifikasi bisa saja dibuat berdasarkan parameter tertentu. Sebagai contoh, aplikasi WordPress menyimpan file yang di-upload di direktori wp-content/uploads/, dan kemudian diklasifikasikan berdasarkan tahun, dan di dalamnya diklasifikasikan lagi berdasarkan bulan.

Ada banyak skenario lain yang mungkin lebih advanced dalam menangani penyimpanan file yang di-upload. Tulisan ini hanya membahas beberapa diantaranya. Demikianlah kira-kira sekelumit cara yang dapat dilakukan untuk menyimpan file yang di-upload oleh user ke dalam server. Semoga bermanfaat. 🙂

Bersiap untuk Menjadi Seorang Ph. D. di Bidang Computer Science

Siang tadi, saya mengikuti seminar tentang mempersiapkan diri menjadi Ph. D. students yang diselenggarakan di Surya University. Pagi-pagi saya sudah bangun untuk langsung menuju ke Tangerang. Dengan sangat terpaksa saya juga membolos mata kuliah Komputer dan Masyarakat pagi ini. Mudah-mudahan ini bolos yang terakhir untuk semester ini.

Setelah sempat nyasar dan pindah angkot sampai lebih dari 5 kali, alhamdulillah saya sampai juga. 😀 Surya University gedungnya masih dalam tahap pembangunan. Jalan untuk menuju ke gedung utamanya saja masih berbatu-batu. Penasaran, seperti apa nanti jadinya universitas ini. Sebelum sampai di Surya University, saya sempat nyasar ke STKIP Surya yang terletak di depan Universitas Multimedia Nusantara (UMN). Gedung STKIP ada persis di depan UMN itu, sedangkan gedung Surya University ternyata ada di belakangnya.

Pembicaranya adalah Bapak Haryadi Gunawi, beliau adalah profesor di University of Chicago. Peserta yang datang tidak banyak, tapi itu justru keuntungan untuk kami karena diskusi menjadi informal, yang dengan kata lain, tentu saja lebih intim. Saya mendapatkan informasi tentang seminar ini dari facebook-nya Bapak Yohannes Surya dan segera langsung mendaftar online saat itu.

Selesai dari sana, yang saya rasakan adalah: khawatir, dan ada rasa sedikit menyesal juga. “Don’t start too late,” begitu kata Pak Haryadi. Menurut beliau, untuk mempersiapkan diri menjadi Ph. D. students, tentunya harus mempersiapkan diri dengan sangat matang, mulai dari memilih topik research yang tepat hingga mempersiapkan prerequisites-nya seperti GRE dan lainnya jika mau melakukan studi di luar negeri.

Jadi strategi yang beliau sampaikan kurang lebih begini:

Pada tahun ke-1 dan 2 pilihlah topik yang kita sukai. Jangan lupa, ambil pula course yang berkaitan dengan system. Saya agak bingung juga soal ini, karena seperti apa system course lupa saya tanya tadi. -_- Tapi intinya, ambillah mata kuliah yang fundamental dan berhubungan dengan topik yang kita sukai. Namun sepertinya metode ini tidak selalu bisa dipakai, karena ada beberapa universitas yang memang sudah memasang paket tiap semester untuk mahasiswanya.

Tahun ke-3, mulailah undergraduate research. Berdasarkan topik yang kita pilih, mulai lakukan research.

Tahun ke-4, bersiaplah untuk GRE, dan siap-siap untuk menjadi kandidat Ph. D.

Saya pernah dengar kalau di luar negeri, kalau ada mahasiswa yang research-nya memang sudah bagus, maka sang mahasiswa boleh loncat, dari S1 langsung ke S3, dan ternyata memang benar. Namun jika ternyata secara akademis sang mahasiswa belum memiliki pengalaman research yang mumpuni, bisa menjembataninya dengan mengambil S2 terlebih dahulu.

Lalu beliau juga mengatakan, untuk melakukan research, paling tidak butuh waktu 2 tahun. Dalam melakukan research yang berkaitan dengan suatu sistem komputer, butuh 3 fase yaitu: understandre-design dan evaluate. Untuk memahami suatu sistem butuh waktu, dan tentunya saat melakukan research, peneliti pasti akan memodifikasi desain yang sudah ada sebelumnya untuk menemukan sesuatu yang baru. Untuk itulah 2 tahun tersebut diperlukan.

Nah, ada tips dari beliau tadi untuk yang mau bersiap-siap.

Pertama, pilih topik yang mau kita tekuni dengan benar. Topik industri berbeda dengan topik untuk penelitian. Web development atau iPhone apps development misalnya, itu adalah topik industri. Topik penelitian biasanya lebih dalam, bukan dari sisi aplikatif.

Kedua, pilih fakultas yang memang mendukung untuk melakukan research. Beliau bercerita tadi, dalam melakukan research butuh koneksi dan relasi juga. Jadi saat memilih tempat untuk melakukan research, biasanya kita akan mencari universitasnya dulu, baru kemudian melihat fakultasnya. No, kata beliau seharusnya tidak seperti itu. Tentukan dulu fakultasnya, bahkan tentukan dulu nama orangnya malahan. Orang yang dimaksud tentu saja profesor-profesor yang sudah mumpuni di bidang yang mau kita tekuni. Tujuannya adalah supaya nanti ketika penelitian kita sudah selesai, pak profesor bisa memberikan kita recommendation letter yang akan sangat berguna untuk mendapatkan gelar Ph. D. tersebut.

Ketiga, carilah paling tidak 5 konferensi internasional yang membahas topik yang kita tekuni. Dari sana nanti, tentukan keywords yang akan membantu kita untuk menemukan pembahasan yang tepat dan bisa jadi sedang trend. Lalu rajin-rajin baca paper-nya. Tidak harus semuanya, abstraknya saja cukup. Dari sana nanti kita akan menambah pengetahuan tentang topik yang mau kita teliti. Selain itu, dengan mengetahui konferensi-konferensi tersebut, kita juga jadi tahu, universitas mana saja yang aktif dalam topik yang kita sukai. Data ini tentu saja bisa kita gunakan untuk memilih di mana nantinya kita akan mengambil studi.

Keempat, tidak perlu harus menjadi author dari sebuah research. Jadi co-author saja itu sudah cukup. Memulai research sendiri dari awal itu bukan hal yang mudah. Jadi kalau ternyata sedang ada research yang sedang berlangsung dan berkaitan dengan topik yang kita sukai, ambil saja. Berkomitmenlah untuk menyelesaikan research itu, dan itu akan membantu juga nanti untuk mendapatkan Ph. D.

Oh iya, yang paling jleb dari beliau adalah yang ini: soal karakter. Menurut beliau, butuh 3 karakter untuk menyelesaikan Ph. D. dan karakter inilah justru yang paling penting dan akan sangat menentukan. Ketiga karakter itu adalah: consistent, persistent, dan independent.

Consistent, artinya seorang researcher harus berkomitmen terhadap hal yang sedang ia teliti. Sediakan waktu yang cukup. Masalahnya adalah, research memang butuh komitmen dan pengorbanan besar. Sebagian besar research itu lazimnya dilakukan secara voluntarily, alias unpaid. Jadi memang harus konsisten, karena kalau tidak konsisten, bagaimana research-nya mau selesai?

Persistent artinya kita teliti dan cermat dalam melakukan research. Jangan sampai hasil yang ditemukan dari research ternyata salah-salah, entah karena metodenya, atau karena interpretasinya. Dalam melakukan research kita harus berusaha menghasilkan sesuatu yang benar dan terbaik.

Independent, artinya kita harus mandiri saat melakukan research. Hihi, kata beliau sering-seringlah bersahabat dengan Google. 😀 Saat seorang peneliti menemukan masalah, kepada siapa dia harus bertanya? Research question itu adalah pertanyaan yang hasilnya bahkan belum pernah ditemukan siapapun. Si peneliti itulah yang harus menjawab pertanyaan yang ia buat sendiri, dan jawaban dari pertanyaan itu belum ada. Jadi, kalau saat menemukan kendala sedikit lalu si peneliti ‘cengeng’ dalam mencari solusinya, pasti akan sulit untuk menyelesaikan penelitian. Jadi, tiap punya kendala (biasanya kendala teknis), googling! Jangan mengeluh ke orang lain. 😉

Tanpa 3 karakter ini, akan sulit mau menjadi seorang Ph. D.

Fiuh, berat bukan? 😐

Tadi di akhir pertemuan, beliau sempat membahas beberapa topik yang menarik untuk dijadikan research. Diantaranya adalah tentang Big Data dan Cloud Computing. Kebetulan kemarin saya mengambil course tentang Web Intelligence and Big Data di Coursera, jadi lumayan nyambung tadi mendengar penjelasan beliau, hehe. Coba saja cari, ada banyak kata kunci yang menarik untuk kita ketahui, di antaranya: map reduce, software-defined networkinghadoopscale outdata center programming, stragglers. Ayo, googling. 😛

Begitulah kira-kira ringkasan seminar yang saya hadiri hari ini. Saya dulu pernah memasang misi untuk dijalankan persis sebelum saya kuliah di Paramadina, yaitu: sebelum tahun 2025, saya sudah menyelesaikan doctoral degree. Kalau ada pembaca yang ikhlas dan berbaik hati, doakan saya ya. 🙂

Semoga bermanfaat.

Iseng di Kelas Praktikum Algoritma dan Pemrograman

Semester lalu alhamdulillah saya diberi kepercayaan oleh dosen mata kuliah Algoritma & Pemrograman di kampus saya (Bapak Harry T. Y. Achsan) untuk jadi asisten. Senang sekali tentunya, karena mata kuliah ini adalah mata kuliah favorit saya. 😉

Ngomong-ngomong, mengajar di kelas itu sangat menyenangkan sebenarnya. Hal yang membuatnya jadi agak kurang menyenangkan adalah kewajiban di akhir untuk memberikan penilaian. Selain sulit dan ribet, kadang-kadang agak khawatir juga bahwa terjadi subjektifitas dalam penilaian saya.

Karena itu kemarin waktu melakukan asistensi saya sempat membuat UTS yang penilaiannya otomatis berdasarkan jumlah soal yang berhasil diselesaikan.

Namun tentunya, melakukan hal ini butuh pengorbanan yang lain juga. Saya harus menciptakan sejenis grader yang akan melakukan pengujian input dan output yang nantinya kemudian akan menilai hasil pekerjaan peserta kelas saya.

Dengan meluangkan waktu sejenak, akhirnya saya membuatnya juga. Ini tampilannya:

Tampilan Score Board UTS Algoritma dan Pemrograman

Tampilan Score Board UTS Algoritma dan Pemrograman

Kalau dipikir-pikir, jatuhnya sama seperti kontes pemrograman. 😛

Sebenarnya, kalau fasilitasnya mendukung, saya tidak perlu capek-capek melakukan pembuatan aplikasinya, karena sudah banyak programming contest management system yang sudah mumpuni seperti PC^2 atau DOMjudge. Kendalanya, saya tidak punya server sendiri, sehingga saya menggunakan cara lain untuk melakukan penilaian.

Oh iya, soal yang saya buat bisa di-download di sini.

Kelas pemrograman ini menggunakan bahasa pemrograman Java. Jadi, untuk melakukan penilaian, saya membuat sebuah library yang disimpan dalam format JAR yang kemudian dapat digunakan untuk melakukan penilaian sekaligus untuk men-submit nilai ke server. Server yang saya maksud bukan server beneran sih. Saya menaruh score board tadi di website yang saya miliki di alamat http://muslihat.net.

Library yang saya implementasikan sebenarnya sederhana. Seluruh input dan output yang benar untuk setiap testcase yang diujikan ke program buatan peserta diletakkan di dalam array. Karena saya tidak mungkin menganalisis output yang dihasilkan program peserta (berhubung saya tidak bisa sekonyong-konyong mengubah hosting server menjadi grader server), maka setiap soal yang saya buat merupakan soal OOP yang tiap method-nya tinggal di-override saja.

Hasilnya lumayan juga ternyata. Saya jadi tidak perlu capek menilai pekerjaan mahasiswa peserta praktikum. Cukup santai saja melihat scoreboard. Hihi.

Barangkali, seharusnya mata kuliah algoritma dan pemrograman diubah modelnya menjadi seperti ini saja. Selain lebih fun, hal ini mempermudah dosen juga.

Bayangkan kalau seorang dosen memberikan tugas pemrograman. Setelah men-download source code dari masing-masing muridnya, sang dosen harus melakukan compile dan kemudian menguji input dan output dari program tersebut. Selain melelahkan, kadang-kadang jadi kurang teliti. Akan lebih baik kalau ada proses yang terautomatisasi untuk melakukan hal tersebut.

Nantinya kalau sang murid mau yang lebih serius, ada banyak kompetisi pemrograman yang model pengujiannya juga seperti ini. Buat programnya, submit untuk dinilai, dan kemudian lihat hasilnya. Kompetisi seperti International Collegiate Programming Contest (ICPC) menggunakan model seperti ini. Kompetisi yang berskala nasional seperti COMPFEST dari UI atau ITB-PC juga menggunakan model yang seperti ini.

Bayangkan, dari yang sekedar iseng-iseng mencoba kode, bisa sekalian keliling dunia kalau berhasil. Kenapa tidak? 😉