Ulang tahun ke-50 Kuwait

Tahun 2011 ini, Kuwait merayakan ulang tahun emasnya yang ke-50. Ada banyak hal spesial di tahun emasnya kali ini. Walau banyak juga hal-hal yang masih sama saja dibanding tahun yang lalu.

Tak terasa, sudah lebih dari 4 tahun saya tinggal di negara ini. Banyak hal yang saya pelajari, dan juga banyak hal yang sudah saya tahu tentang negara ini. Secara keseluruhan, saya nyaman dan senang tinggal di negara ini. Itulah kenapa bisa sampai 4 tahun. Padahal pada awal-awal kedatangan saya, pernah terpikir maksimal 2 sampai 3 tahun saja.

Tentang ulang tahun Kuwait.

Kuwait berulang tahun 2 hari, tanggal 25 dan 26 Februari. Pada tanggal 25 Februari 1961, mereka diberikan kemerdekaan olah Inggris. Dan tanggal 26 Februari 1990, mereka “merdeka” dari invasi Irak. Jadilah 2 hari itu libur nasional. Dan entah sejak tahun berapa, tiap perayaan ulang tahun, anak-anak dari yang kecil sampai yang agak tanggung menyemprotkan busa ke mobil-mobil di jalan. Tidak sedikit yang iseng menyemprotkan langsung ke orang yang sedang jalan.

Bagi mereka, 2 hari itu adalah hari yang “dibolehkan” untuk iseng menyemprotkan busa (kadang berupa air, entah air beneran atau air kencing) ke siapapun. Terlebih kepada para pendatang. Dan itulah yang membuat banyak pendatang yang berduit di negara ini keluar Kuwait untuk 2 hari itu saja. Tapi bagi saya, 2 hari libur itu adalah waktunya berleha-leha di dalam rumah. Tidak melakukan kegiatan di luar rumah. Atau paling tidak, tidak pergi-pergi jauh.

Mirip seperti Nyepi di Bali. Bedanya, Nyepi yang berisik di luar.

Nah, untuk ditahun emas ini, saya sangat menyambut positif upaya pemerintah yang mengadakan acara lain selain semprot-menyemprot seperti karnaval dan pesta kembang api. Ditambah, semprotan busa yang dilarang beredar di Kuwait. Dan sejauh pengamatan saya, ini cukup efektif.

Tapi, bagi saya, tetap saja 2 hari libur ini adalah hari Nyepi di rumah. Karena jalanan macet di mana-mana. Jakartapun bisa kalah telak.

Kegembiraan rakyat Kuwait

Ditahun emas ini, semua rakyat Kuwait gembira betul. Tiap kepala dapat jatah 31 juta rupiah (1000 dinar kuwait) di tanggal 23 dan 24 Februari. Termasuk anak-anak. Tapi sayang, tidak termasuk saya dan teman-teman pendatang lain. Maka dari itu, untuk merayakan kegembiraan mereka, benar-benar mereka kumpul di jalan. Mobil-mobil ditempel stiker sang Emir (Emir = Raja), bendera-bendera dipasang dimanapun. Sangat bertolak belakang dengan negara-negara tetangga yang akhir-akhir ini menghujat para pemimpin mereka.

Dikarenakan populasi orang Kuwait yang rata-rata anak-anak muda dan anak kecil, bisa ditebak apa yang mereka beli dong. Betuuul, XBOX dan PS3! Saya yang mampir untuk nengok saja keburu kehabisan.

Kabar gembira buat saya? tengok seminggu lagi, saya yakin banyak yang jual Xbox bekas atau PS3 bekas yang baru dipakai beberapa hari.

Dari saya, Selamat ulang tahun Kuwait, semoga lebih bersahabat untuk para pendatang. Dan semoga alat transportasi umum lebih diperhatikan. Mabroook….

KetaKetik di 10k Apart

Salah satu aplikasi saya “How fast is your typing“, versi bahasa inggris dari KetaKetik, menang sebagai Notable Mentions. Prestasi yang lumayan sebenarnya, tapi seharusnya bisa lebih baik dari itu kalau saja saya bisa memanfaatkan lebih baik penggunaan canvas.

Dari 367 aplikasi, yang terpilih sebagai pemenang hanya 16. 1 juara umum, 3 juara kedua, dan sisanya yang 12 mendapatkan buku HTML5. Lumayan buat belajar lagi.

Selamat buat KetaKetik! #eh

KetaKetik dan Teektak ditutup sementara

Terbaru: KetaKetik dan Teektak sudah pindah ke server baru. Atas biaya sendiri T_T

Dikarenakan server yang saya pakai sudah tak bisa lagi menampung pengguna-pengguna yang luar biasa banyaknya, saya, dengan berat hati, menutup sementara kedua aplikasi ini.

Niat awal saya membuat aplikasi murni untuk belajar dan mengetahui lebih dalam tentang HTML5 dan CSS3. Efeknya jelas, saya lebih siap untuk mengikuti kompetisi 10k apart. Dan, pastinya saya jadi mengerti sedikit banyaknya dengan HTML5 dan CSS3 ini.

Server yang saya pakai adalah kepunyaan Hostmonster. Jadi bandwith atau besarnya penyimpanan bukanlah halangan buat saya. Satu-satunya kelemahan server yang saya punya sekarang punya adalah kapasitas CPU. Optimasi dari sisi database sudah saya lakukan secara maksimal. Sampai-sampai jawara terbaru sering tidak terlihat karena cache.

Untuk tahu seberapa parahnya CPU tercekik, di bawah ini adalah ilustrasi dari CPanel. Setelah hampir 2,5 jam saya nonaktifkan.

Dari ilustrasi di atas, terlihat jelas pemakaian CPU sudah sangat maksimal. Di bar 3, 4 dan 5, adalah saat saya mengistirahatkan KetaKetik dan Teektak selama kurang lebih 2 – 3 hari. Pemakaian CPU yang sangat maksimal ini berakibat langsung ke aplikasi saya. Koneksi database  sering sekali mati, dan akhirnya banyak pengguna yang protes. Bahkan ada yang bilang aplikasinya error sama seperti yang buat.

Untuk sekedar info, total pengguna yang terdaftar di 3 aplikasi saya (Teektak, Ketaketik dan Taktak) mencapai 14146 ribu, dan 13834 ribu diantaranya adalah akun Facebook. Dari angka-angka itu, detail pengguna di aplikasi-aplikasi saya tergambar jelas dari gambar di bawah.

Dari data-data di atas, inilah statistik pengunjung unik dan pageview dari Google Analytics. Terlihat bedanya saat saya menggunakan Facebook API. Itupun sempat 3 hari saya matikan karena saya butuh mengoptimasi kode-kode saya.

Kesimpulan asal-asalan saya, banyak orang-orang suka dengan permainan saya tidak lain dan tidak bukan adalah karena menggunakan bahasa Indonesia. Rupanya banyak juga orang-orang yang sepertinya ‘haus’ akan permainan kata-kata yang saya buat. Sekadar informasi, saya masih punya 2 aplikasi yang hampir siap dipublikasi, dan 1 aplikasi yang masih berbentuk ide.

Pertanyaannya, kenapa saya membuka lebar-lebar statistik ini? tidak lain dan tidak bukan, saya mencari sponsor yang bisa menyediakan server bagus. Tertarik?

Kontes aplikasi web 10 Kilobyte


10k apart adalah kompetisi membuat aplikasi web yang kurang dari 10 Kilobyte, dengan persyaratan sebagai berikut:

  1. Ukuran total semua berkas harus kurang dari 10 Kilobyte;
  2. Berfungsi sama di peramban-peramban modern seperti Mozilla Firefox 3.6, Peramban Webkit (Chrome dan Safari), dan juga Internet Explorer versi 9.
  3. Librari Javascript yang boleh dipakai adalah JQuery, Prototype, dan Typekit.
  4. Tidak boleh menggunakan pemrograman sisi server (server-side programming) seperti PHP, ASP dan teman-temannya. Aplikasi murni berjalan di sisi klien
  5. Boleh menggunakan web service seperti Twitter, Google Web dan web service lain.

Membuat aplikasi web itu memang tantangan, tapi membuatnya sekecil-kecilnya itu yang agak sulit. Saya sampai menggunakan aplikasi kompresi file yang menghilangkan spasi dan whitespace di semua berkas yang saya buat.

Oh, iya, kenapa ada IE9 di sini? jangan heran, karena Microsoft adalah sponsor utamanya.

Jangan lupa cek juga aplikasi buatan saya yang sudah nebeng di sana.

Perkenalkan, Teektak

Akhirnya aplikasi keempat saya rampung. Total masih ada 2 aplikasi yang “hampir jadi” dan 1 aplikasi yang masih tercatat di papan tulis di rumah.

Dari sejak awal melihat perkembangan statistik aplikasi-aplikasi yang saya buat, saya cukup senang karena respon yang begitu wah. Terutama dari anak-anak muda (usia 18-24 tahun), karena merekalah pengunjung dan pemain terbanyak. Paling tidak, dari data statistik yang Facebook berikan.

Apa itu Teektak?

Teektak adalah permainan sederhana membuat kata. Kalau permainan-permainan yang sudah-sudah menebak kata, kali ini membuat kata. Setiap pemain akan disuguhi 15 huruf acak, dan misinya membuat kata sebanyak-banyaknya. Semakin banyak kata yang didapat, semakin besar poin. Penentuan poin juga ditentukan berapa banyak huruf yang terpakai ditiap kata.

Selamat bermain!

Codeigniter dan Facebook Graph API

Saya ceritanya baru berhasil menggunakan Facebook Graph API dan Codeigniter. Ini saya lakukan karena saya sudah cukup menyerah dengan ribetnya RestAPI Client yang diberikan Facebook. Karena kasus saya agak berbeda, yaitu saya punya beberapa aplikasi terpisah dalam satu instalasi Codeigniter. Setelah melihat-lihat, ternyata ada cara lain yang bisa kita lakukan. Dan yang paling mudah dan cukup aman diimplementasikan adalah Facebook Graph API ini.

Catatan ini kiranya bisa berguna buat teman-teman yang lain atau yang mungkin di kemudian hari dapat proyek ini. Juga sebagai catatan saya, biar nanti kalau ada proyek lain saya tinggal melihat dokumentasi yang saya buat.

Yang perlu disiapkan adalah 1 librari dan 1 file controller dan 1 file view. Tidak perlu unduh (download) yang lain. Facebook Graph API ini memang jauh lebih simpel. Dan saya sangat menikmati proses belajar ini. Dan perlu diketahui, bahwa tutorial kali ini tidak akan mencakup banyak hal. Saya hanya mengharapkan anda mengerti konsep baru yang ditawarkan Facebook ini.

Sebelum memulai, pastikan beberapa hal berikut ini:

  1. Versi PHP yang dipakai adalah versi 5
  2. Pengetesan skrip tidak bisa dilakukan di server lokal. Jadi anda harus punya hosting dan harus online
  3. Codeigniter yang saya pakai 1.7.2, saya kurang tahu apa tetap akan sama jika menggunakan versi lama

Langkah pertama, buat aplikasi

Ini adalah langkah wajib. Karena dengan mendaftarkan aplikasi kita, Facebook akan memberikan 3 hal penting yang nantinya kita butuhkan. Yaitu Application ID, Application Secret dan API Key. [Klik link ini untuk mendaftarkan aplikasi anda]. Yang perlu anda isi adalah Application Name dan Connect->Connect URL.

Langkah kedua, unduh librari Curl

Librari Curl yang saya pakai ini memang hebat. Mudah sekali pakainya. Bisa diunduh dari link ini: http://codeigniter.com/wiki/Curl_library/

Langkah ketiga, konfigurasi

Buka file /application/config/config.php, lakukan beberapa hal berikut ini:

  1. Index page dibuat kosong. $config['index_page'] = ""; (baris 26)
  2. URI Protocol dibuat jadi ORIG_PATH_INFO. $config['uri_protocol'] = "ORIG_PATH_INFO"; (baris 44)
  3. On-kan pilihan query string. $config['enable_query_strings'] = TRUE; (baris 151)

Langkah keempat, htaccess

Karena konfigurasi codeigniter saya tidak menggunakan “index.php”, maka saya butuh berkas (file) htaccess. Berikut isinya:

RewriteEngine on
RewriteCond $1 !^(index\.php|assets)
RewriteRule ^(.*)$ /projects/fbci/index.php/$1 [L]

Sesuaikan path ini:/projects/fbci/index.php dengan aplikasi anda.

Langkah kelima, controller

Kita hanya punya 1 berkas controller. Saya menggunakan controller yang diberikan Codeigniter saat kita instalasi, yaitu controller Welcome.

Controller itu nantinya akan punya 2 method, yang pertama sebagai gerbang pertama sebelum pengguna (user) masuk ke Facebook. Dan yang kedua sebagai penerima data dari Facebook. Berikut adalah gambar perjalanan aplikasi kita yang berkomunikasi dengan Facebook (semoga ngerti, saya kurang bisa gambar).

Dari gambar di atas, berikut detail yang bisa saya berikan:

  1. Ketika pengguna mengeklik sebuah tautan di aplikasi kita (bisa berupa link, tombol, atau apa saja)
  2. Aplikasi kita mengarahkan pengguna untuk login dulu ke Facebook dan atau menerima konfirmasi tentang informasi apa saja yang akan aplikasi kita butuhkan. Tautan itu seperti ini:
    https://graph.facebook.com/oauth/authorize?client_id=[client_app_id]&redirect_uri=[redirect_uri]
  3. Dari tautan di atas, [client_app_id] diambil dari kode aplikasi ketika kita selesai mendaftarkan aplikasi di Facebook. Sedangkan [redirect_uri] adalah URL yang akan kita gunakan untuk menangkap kode dari Facebook berupa $_GET['code']. Maka dari itu, aplikasi kita harus menerima query string (lihat bagian konfigurasi di atas).
  4. Setelah Facebook mengirim kode, kita perlu akses token untuk mendapatkan data-data pengguna Facebook. Untuk mendapatkan akses token, kita perlu menghubungi lagi Facebook dengan mengirim data kode (yang kita dapat di nomor 2), [redirect_uri] dan [secret_code].
  5. Setelah itu Facebook akan mengirimkan akses token dalam format JSON.
  6. Setelah punya akses token, kita bisa bebas meminta data-data pengguna ke Facebook.

Langkah keenam

Ini adalah langkah terakhir tutorial kali ini, yaitu mengunduh berkasnya. Saya sadar bahwa tidak ada keterangan yang lengkap sekali untuk level pemula. Tapi percayalah, saya hanya bisa mengarahkan dan sedikit memberitahu cara kerja Graph API ini. Dokumentasi Graph API lebih lengkap dan siap disantap.

unduh demo

Berikut adalah kode untuk Controller:

<?php
 
class Welcome extends Controller {
 
	// beberapa detail aplikasi kita
	// ini semua harus diisi.
	var $fb_appid = "";
	var $fb_secret = "";
	var $fb_api = "";
 
	function Welcome()
	{
		parent::Controller();	
		$this->load->helper("url");
	}
 
	function index() {
		$data['app_id'] = $this->fb_appid;
		$this->load->view('welcome_message', $data);
	}
 
	function fb() {
		$this->load->library("curl");
		// method untuk redirect balik dari facebook
		// setelah pemanggilan pertama, facebook mengirimkan sebuah kode 
		// yang bisa kita tangkap lewat $_GET['code']
 
		// cek dulu, apa $_GET['code'] ada
		if(isset($_GET['code'])) {
			// buat url untuk mengambil token
			$url = 'https://graph.facebook.com/oauth/access_token?client_id='.$this->fb_appid.'&redirect_uri='.site_url("/welcome/fb").'&client_secret='.$this->fb_secret.'&code='.$_GET['code'];
 
			// ambil token lewat curl
			$token_data = $this->curl->simple_get($url);
 
			// ambil kode token saja, dengan regular expression
			// arti tanda ([^&]+) adalah:
			// ambil semua karakter asal bukan tanda &
			preg_match("/access_token=([^&]+)/",$token_data,$token);
 
			// kode token ada di variabel token[1]
			$access_token = $token[1];
 
			// pengambilan token selesai, sekarang ambil userid, nama
			$uri = 'https://graph.facebook.com/me?access_token='.$access_token;
			$data = $this->curl->simple_get($uri);
 
			// decode data
			$fb = json_decode($data);
			$fb_id = $fb->id;
 
			// ambil nama dan foto pengguna
			$fb_userdata = $this->curl->simple_get("https://graph.facebook.com/".$fb_id."?fields=name,picture&access_token=".$access_token);
 
			//echo "https://graph.facebook.com/".$fb_id."?fields=name,picture&access_token=".$access_token;
 
			$fb_user = json_decode($fb_userdata);
 
			$data = array();
			$data['fbuser'] = array('id'=>$fb_id, 'avatar'=> $fb_user->picture, 'nama'=> $fb_user->name);
 
			//print_r($data);
 
		}
		elseif(isset($_GET['error_reason'])) {
			// untuk menangkap user yang klik "Dont Allow" atau "Cancel di Facebook"
			// buat variabel untuk ditampilkan di view
			$data['tolak'] = "Uh oh, saya ditolak T_T";
		}
 
		$this->load->view("welcome_message",$data);
	}
}
?>

Taktak versi baru

Setelah dirilis awal bulan Juni 2010, saya akhirnya bisa merilis versi baru Taktak. Di tulisan ini saya akan menulis informasi-informasi baru tentang Taktak.

Cara main Taktak

Taktak terbagi atas jumlah babak yang terbatas dan pada tiap babak terdapat 10 soal untuk dijawab. Untuk menjawab tiap soal anda hanya tinggal mengisi kotak-kotak kosong dengan papan ketik (keyboard). Sebagai bantuan lain, anda bisa membuka huruf pada tiap kotaknya dengan cara mengeklik kotak tersebut.

Penilaian berdasarkan jumlah huruf yang menjadi jawaban, dikurangi banyaknya kotak yang anda buka. Syarat untuk melaju ke babak berikutnya adalah anda harus punya 40 poin. Makin banyak poin anda, maka jumlah huruf yang harus bisa ditebak semakin banyak.

[Tautan]

Kistaka

Kistaka adalah permainan kuis kata sederhana. Dalam satu babak, akan ada 5 pertanyaan yang harus dijawab dalam waktu maksimum 80 detik.

Permainan ini adalah sedikit variasi dari permainan lain yang pernah saya buat sebelumnya, Taktak. Memang, letak fun-nya kurang, tapi permainan ini sangat jitu untuk memperkaya pengetahuan kita tentang kosakata bahasa Indonesia.

Peraturannya sudah sangat jelas, setiap babak akan disuguhi 5 soal. Tiap soal mempunyai 5 pilihan untuk dipilih. Tiap soal benar akan mendapat 3 poin, dan untuk soal yang salah, poin akan dikurangin 1. Ditiap babak, jika nilai anda mencapai 7 atau lebih, maka babak selanjutnya menunggu anda.

Latar belakang

Permainan ini seharusnya bisa diselesaikan beberapa hari setelah Ketaketik, tetapi karena kerjaan untuk memperbaharui tema Jazeera Airways, maka sayapun menunda meneruskan Kistaka.

Nama Kistaka sendiri diperoleh dari permainan 2 kata, kuis dan kata. Ada beberapa nama seperti Wistaka, Kistaka, Qustaka, Quistak, dan nama-nama lain. Tapi akhirnya entah kenapa saya memilih Kistaka.

Seperti biasa, Kistaka tidak mendukung Internet Explorer. Semua versi.

Ketaketik

KetaKetik adalah sebuah permainan adu cepat mengetik. Salah satu keistimewaan yang bisa saya banggakan dari permainan ini (minimal, dari sisi saya sendiri), adalah HTML5 dan CSS3. Tentunya javascript juga ikut andil.

Sebelum saya lempar ke publik, saya sempatkan teman-teman di Kampung Gajah untuk mencoba. Banyak yang saya dapat dari mereka, mulai dari masalah yang saya sendiri tak pernah terpikir sebelumnya, sampai hal-hal yang cukup fatal.

Silahkan mencoba dan bertarung lewat mengetik!

Yang masih menjadi masalah:
- Tombol backspace tidak berfungsi dengan benar di Google Chrome

TERKINI di 8 Juni 2010
- Masalah kesalahan ketik yang seharusnya tidak sudah diperbaiki
- Jika balon kata habis, maka otomatis akan mencek skor
- Dibuatnya favicon
- Masalah di Google Chrome sudah diperbaiki
- Terima kasih untuk Tokopas.com untuk jadi sponsor bulan Juni 2010.
- Diberikan 3 nyawa untuk setiap pertandingan. Dan ada kata-kata bonus untuk mengembalikan nyawa yang hilang.

Melanjutkan proyek Taktak

Saya tak pernah menyangka, proyek iseng Taktak butuh perhatian yang lebih lanjut. Tadinya saya pikir akan jadi proyek yang bisa langsung saya tinggalkan karena mungkin tak banyak orang yang minat. Tapi ternyata tidak.

Di hari pertama peluncurannya, Rabu, 2 Juni 2010, yang masih minim fitur itu, sudah ada hampir dari 1000 halaman terlihat (pageviews) dari 780-an pengunjuk unik (unique visitor). Di hari keduanya, nilainya masih hampir sama.

Reaksi yang cukup luar biasa ini mengundang banyak sekali masukan-masukan yang tak pernah terpikir oleh saya sebelumnya. Ditambah, salah satu teman saya, Rony lantip juga ingin disertakan dalam proyek ini. Tentu sebuah kehormatan buat saya.

Jadi sekarang saya dan Rony mulai serius menindaklanjuti proyek ini. Beberapa fitur bocoran dalam waktu dekat ini adalah tentang peringkat. Dengan resiko, Taktak di tempat yang sekarang tidak akan kami sentuh lagi, tapi mulai fokus di tempat yang baru.

Aja!