Kita Hari Ini

Kita hari ini, sedang mengikuti ritme apa yang beberapa tahun lalu orang-orang pintar sedang siapkan. Dan sepuluh tahun lagi, kita akan mengikuti ritme dari apa yang hari ini orang-orang pintar juga sedang siapkan.

Lalu kapan kita (kembali) menjadi referensi?

Abad pertengahan memang kisah yang menakjubkan, sampai kita terlalu asyik membaca ceritanya dan lupa untuk kembali bersaing.

Advertisements

Implementasi JWT pada Web Service berbasis Laravel Framework

Pendahuluan

Definisi non-formal dan sederhananya, JWT (JSON Web Token) adalah token dengan format JSON Object, yang berisi informasi-informasi penting yang dikemas secara aman menggunakan algoritma tertentu.

JWT terdiri dari tiga buah bagian, yaitu header, payload dan signatureyang dipisahkan oleh titik. Formatnya sebagai berikut

xxxheaderxxx.yyypayloadyyy.zzzsignaturezzz

Header memiliki attribute alg (algoritma yang digunakan untuk signature) dan"typ" (tipe token).

{
    "alg": "HS256",
    "typ": "JWT"
}

JSON tersebut di encode dengan Base64Url, dan menjadi bagian pertama dari JWT.

Payload terdiri dari attribute iss (issuer), iat (expiration time), sub(subject), dan lain-lain.

Contoh dari payload seperti berikut

{
  "sub": "1234567890",
  "name": "Badr",
  "admin": true,
  "exp": 1300819380
}

JSON tersebut di encode dengan Base64Url, dan menjadi bagian kedua dari JWT.

Signature

Signature adalah gabungan dari header, payload, secret key yang di sign dengan sebuah algoritma yang sudah ditetapkan. Misalkan kita menggunakan algoritma HMAC SHA256, maka signature akan dibuat dengan cara berikut:

HMACSHA256(
    base64UrlEncode(header) + "." +
    base64UrlEncode(payload),
    secret
)

Seperti yang sudah kita tahu, JWT terdiri dari header, payload dansignature, maka contoh JWT adalah sebagai berikut:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.
eyJzdWIiOjIsImlzcyI6Imh0dHA6XC9cL2xvY2.
OOFAd4unowQw8LN-5MWumL8ASzZk63emDRip-TwZLCc

Secara umum cara kerja dan penggunaan JWT bisa dilihat di diagram berikut:

image

Pada tulisan ini, implementasi JWT pada API yang menggunakan Laravel Framework memanfaatkan package jwt-auth.

Instalasi

Langkah pertama, install jwt-auth menggunakan composer dengan mengubah file composer.json, dan tambahkan “tymon/jwt-auth” pada attribute “require”:

"require": {
    "tymon/jwt-auth": "0.5.*"

}

Setelah itu jalankan composer update di terminal / command prompot

Konfigurasi

Setelah selesai melakukan update composer untuk menginstall jwt-auth ke dalam project kita, langkah selanjutnya adalah melakukan beberapa konfigurasi berikut:

Menambahkan service provider di file app.php pada array provider

Tymon\JWTAuth\Providers\JWTAuthServiceProvider:class

Membuat alias untuk JWTAuth facade dan JWTFactory facade dengan menambahkan kode baris dibawah ini pada file app.php, array 'aliases'

'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class,
'JWTFactory' => Tymon\JWTAuth\Facades\JWTFactory::class

Publish konfigurasi yang sudah dibuat dengan menggunakan command berikut

php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\JWTAuthServiceProvider"

jika publish berhasil maka akan muncul message:

Copied File [/vendor/tymon/jwt-auth/src/config/config.php] To [/config/jwt.php]
Publishing complete for tag []!

Ubah JWT_SECRET pada file config/jwt.php. defaultnya adalah string ‘changeme’.

Jalankan command berikut untuk men-generate jwt-auth secret key

php artisan jwt:generate

Mendaftarkan middleware

Beberapa middleware yang sudah disediakan package jwt-auth, perlu didaftarkan di Kernel.php agar bisa digunakan. Caranya dengan menambahkan beberapa baris kode dibawah ini pada array $middlewareGroups. Misalkan di group dengan nama 'jwt'

'jwt' => [
    'jwt.auth' => \Tymon\JWTAuth\Middleware\GetUserFromToken::class,
    'jwt.refresh' => \Tymon\JWTAuth\Middleware\RefreshToken::class,
]

Penjelasan lebih lanjut dari kedua middlware tersebut ada di bagian setelah ini.

Contoh Penggunaan

Misal, ada kebutuhan dari mobile developer seperti ini: 1. Login user, dengan melakukan request POST ke url http://contoh-jwt.com/api/login. Parameter yang dikirim adalah email dan password. 2. Mengetahui data user yang sedang login, dengan melakukan request GET ke http://contoh-jwt.com/api/user tanpa ada parameter yang dikirim.

Langkah-langkah yang perlu dilakukan sebagai berikut:

Membuat controller baru, misal ApiController.php dengan command artisan

php artisan make:controller ApiController

Membuat route

Route::group(['prefix' => 'api'] , function() {

    Route::post('/login', 'ApiController@postLogin');

    Route::group(['middleware' => ['jwt']], function() {
        Route::get('/user', 'ApiController@getUser');
    });
});

Menonaktifkan verifikasi csrf token untuk seluruh endpoint api, dengan menambahkan string 'api/*' pada attribute $except di fileVerifyCsrfToken.php

protected $except = [
    'api/*'
];

Buat fungsi postLogin(), yang akan menerima email dan password dari user dan mengembalikan token jika berhasil melakukan authentication.

public function postLogin(Request $request) {
    $email = $request->get('email');
    $password = $request->get('password');

    if (Auth::attempt(['email' => $email, 'password' => $password])) {

        $user = User::where('email', $email)->first();
        $token = JWTAuth::fromUser($user);

        $response = [
            "success" => true,
            "key" => "Bearer {$token}"
        ];

    } else {
        $response = [
            "success" => false,
            "message" => "user not found"
        ];
    }

    return response()
        ->json($response);
}

image

Token bisa langsung dibuat dengan fungsi JWTAuth::fromUser($user). Secara default, format token yang digunakan pada package ini adalah Bearer TOKEN.

Token ini yang akan digunakan oleh user sebagai “kunci”, agar mendapat akses untuk melakukan request selanjutnya. Misalkan request selanjutnya adalah mendapatkan data user dengan melakukan request ke /api/user

Buat fungsi getUser, tanpa parameter

public function getUser() {
    $response = [
        "success" => true,
        "data" => Auth::user()
    ];

    return response()
        ->json($response);
}

WAIT… WHY? HOW?

Mengapa kita bisa mendapatkan data authentication user secara langsung, tanpa parameter apapun di fungsi getUser() ?

Jika kita memperhatikan kembali route.php, getUser() akan diakses menggunakan bantuan middleware jwt, yang terdiri dari jwt.auth danjwt.refresh.

Inilah peran middleware jwt.auth (GetUserFromToken.php). Middleware tersebut yang bertugas meng-ekstrak token dan melakukan authentication secara langsung. Sehingga, setelah masuk controller, data user bisa langsung diakses dengan Auth::user().

Token tersebut dikirim melalui request header, dengan default key"Authorization".

image

Peran middleware jwt.refresh (RefreshToken.php) adalah memerbarui token yang sebelumnya kita pakai. Secara default, untuk alasan keamanan, setiap request akan menggunakan token yang berbeda. Token akan diperbarui setiap melakukan request.

Token yang baru bisa didapat di http header pada response-nya. Token ini yang valid digunakan untuk melakukan request selanjutnya.

image

Secara default, token hanya memiliki umur selama 60 menit. Untuk melakukan konfigurasi ini, kita bisa mengubahnya pada file config/jwt.php

Beberapa hal yang perlu diingat:

  1. Pada saat melakukan request, umumnya token dikirim melalu http header.
  2. Default key untuk pada http header untuk membawa token adalah “Authorization”.
  3. Default format token adalah Bearer TOKEN
  4. Secara default, token akan selalu diperbarui setelah melakukan http request, dan bisa diakses pada response header.
  5. Secara default, umur token selama 60 menit.

Penerimaan

Yang menarik dari memiliki kebiasaan menumpahkan pikiran ke sebuah tulisan atau rekaman adalah, kita akan sadar bahwa kita sedang belajar dan sedang menabung progress.

Manusia akan berubah. Cepat atau lambat. Sadar atau tidak sadar.

Bisa jadi, buah pikiran yang kita tuliskan tempo dulu sangat bertentangan dengan apa yang kita yakini hari ini. Bisa jadi, konsep-konsep yang tempo dulu kita tidak senangi, tapi sedang kita yakini hari ini. Persoalannya sederhana: karena dulu kita belum paham.

Maka, sikap sederhana yang senantiasa perlu dipelihara adalah “mau untuk menerima”, bahasa gaulnya “acceptance”. Acceptance menuntut kerendahan hati.

Praktiknya jelas tidak mudah, oleh karena itu kita diminta untuk menjalankan serangkaian latihan agar otot “acceptance” kita menjadi semakin kuat. Implikasinya, insyaAllah mudah untuk menangkap pelajaran dan hikmah-hikmah baru untuk perbaikan-perbaikan diri.

Dari sini saya sadar satu hal:

Mengapa orang-orang keren diluar sana itu pandai menjelaskan sesuatu, tanpa menggurui? Mungkin mereka benar-benar sadar, bahwa dalam dirinya masih banyak ketidakpahaman yang bertumpuk-tumpuk, dan tak ada ujungnya. Ia hanya menjelaskan apa yang benar-benar ia sudah pahami, dan yang sudah ia lakukan. Ia tidak merasa benar, buktinya ia tetap terbuka terhadap perubahan.

Ya, manusia memang akan (dituntut untuk) berubah, dan menerimanya.

SG Day #2

Perbedaan Waktu

Secara geografis, zona waktu Singapore sama dengan zona waktu Jakarta. Tetapi realitanya, perbedaan waktu di sini lebih cepat satu jam dari Jakarta, dengan kondisi matahari yang sama.

Waktu subuh di sini jam 5.49. Berasa kesiangan jam segitu baru shalat subuh. Alhamdulillah masih bisa mendengar lantunan Adzan karena penginapan saya terletak di depan Sultan Mosque yang indah. Saya biasa nyeker buat pegi ke Masjid lewat teras ruko-ruko di sini, salah memang ga bawa sandal jepit. Imam Masjid di sini, suaranya enak, mirip kaya salah satu imam di Masjid Ukhuwah Islamiyah di Univ Indonesia yang saya gatau namanya siapa hehe.

Tidur pun jadi lebih awal, karena secara psikologis udah kebawa ngantuk gegara liat jam menunjukkan pukul 22.00 dan suasana udah cukup sepi, padahal mah itu masih jam 21.00 kalo hari-hari biasanya. Office Hour di sini dari jam 9.00 sampai jam 17.00, rasanya sama kaya kerja jam 8.00 sampai jam 16.00 sore di Jakarta.

Saya memperhatikan dan merasakan, perbedaan waktu satu jam lebih cepat dengan kondisi matahari yang mirip-mirip seperti di Jakarta ini bikin hari lebih produktif *halah

Sleepy Kiwi – Hujan Pagi dan SIM Card Problem

Acara TIA hari pertama ini dimulai jam 9.00 untuk registrasi ulang dan networking session. Jam 7.30 saya sudah siap-siap, sarapan dan berencana berangkat jam 8.30 dari penginapan. Sarapan di sini gratis hehe. Roti dengan selai, susu, dan buah-buahan sudah sangat cukup buat memulai aktivitas.

Venue acaranya di Suntec Convention & Exhibition, di Reffles Blvd Street. Kemarin udah simulasi ke lokasi ditemani Benny dari penginapan. Tinggal naik bus sekali dan jalan sekitar 10 menit. Tidak terlalu jauh.


Hujan pagi belum juga selesai. Padahal udah jam 8.30. Menjelang jam 9 kurang 15, saya nekat terobos ujan yang udah ga terlalu gede. Ngomong-ngomong, saya masih punya satu PR lagi biar bisa survive hari ini, yaitu nyari kartu perdana SingTel wakakak. Masih aja.

SingTel ini agak sulit didapat kalau di 7 Eleven. Akhirnya saat ke 7 Eleven yang ada di sebrang penginapan, saya tanya ke mba-mba kasirnya: apa ada kartu perdana selain SingTel yang recommended? Lalu si mba-mba itu ngasih StarHub seharga $15 dengan isi pulsa $18. Untuk data plannya 1GB seharga $7. Pas nih, $7 buat data plan, $8 buat sms atau telpon kalo ada apa-apa (dan ternyata ini benar terjadi, suatu ketika saya harus SMS & Telpon ke Benny karena WA-nya doi bermasalah). Allah Maha Baik yang sudah membuat saya lupa bawa passport kemarin hehe. Kalo saya jadi pake SingTel mungkin cuma punya data plan aja tanpa bisa SMS & Telpon.

Alhamdulillah. Sekarang udah punya data plan jadi ga perlu takut nyasar lagi saat ngebolang nanti 😀

Suntec SCE – TIA Day #1: New Insight, New Relation, New Spirit

Seperti halnya tech conference pada umumnya, di sini ada banyak stage untuk sesi pemaparan materi dan booth untuk para startup yang ingin memamerkan product-nya. Acara Tech in Asia (TIA) ini cukup well organized. Yang saya suka, TIA ini punya mobile app yang “wajib” di install oleh peserta untuk mendapatkan update terkait seluruh informasi acara: notifikasi agenda setiap stage yang kita minati, activity feed (semacam timeline facebook), informasi booth, speed dating schedule ke investor dll, ngontak panitia, dll.

Saya sendiri hanya tertarik dibagian Product Stage dan Developer Stage, karena pemaparan materinya lebih spesifik dan lebih saya minati dibanding di Main Stage yang topiknya sangat umum, atau Fintech yang juga seru sih (?)

Bagian favorit yang insightful adalah ketika menyimak John Berns (Head of Data Science at Lazada Group) sedang memaparkan “The Why and How of Building a Data Team (Before it’s too late)”. Ketika mendengar ini semangat lama jaman kuliah untuk menjadi Data Engineer / Data Scientist tumbuh lagi wkwkwk. Lalu saya istighfar karena harus kembali fokus untuk menjadi Product Development-Growth Expert *saelah, bikin istilah sendiri*

Di hari pertama ini cukup banyak mendapat relasi juga dengan pelaku startup dari Indonesia, Singapore dan Malaysia. Dan juga tawaran pekerjaan baru wkwk. Tapi belum tertarik euy untuk caw dari Badr karena masih ada misi yang belum selesai.

Oh ya, saya mendapat kabar dari teman kantor kalau CEO-nya Alfath Innovative, Kak Ryan PP ikut juga diacara ini. Saat di Soetta Airport, saya langsung sok kenal aja ngontak beliau lewat WhatsApp buat ngajak ketemuan di acara ini. Alhamdulillah bertemu dan bisa diajak buat jadi temen perjalanan selama di SG nih 😀

Hemat Hemat!

Di TIA, makanan dibagikan gratis. Ada sandwich, minuman kotak dan kue kering yang enak. Kalau makan dua sandwich sudah cukup mengembalikan energi buat bisa kembali beraktifitas. Saya menyesal tidak ngambil dua, oke besok saya bertekad akan ngambil dua! Tidak lebih tidak kurang. Tapi kalau boleh lebih ya ga nolak.

Selain alasan hemat, alasan lainnya adalah mencari makanan yang halal agak sulit di sini. Jadi selama ada yang (insyaAllah) halal dan gratis, tunggu apa lagi? *plak 😀

Karena masih lapar, saya bareng Kak Ryan cari McD di sekitaran venue. Mahal betul pak. Saya harus ngeluarin sekian belas dolar buat makan Ayam dengan Nasi, tanpa minum yang tidak mengenyangkan tapi Alhamdulillah ya. Minumnya saya udah nyetok dari penginapan, karena air mineral di sini cukup mahal. Lebih mahal dari air yang ada rasanya: $2 – $3 untuk botol ukuran kecil.

Jalan-Jalan #2

Acara TIA hari pertama ini selesai jam 16.30. Saya sudah merencanakan sepulang dari acara harus melipir ke beberapa tempat dan mengunjungi satu masjid.

Sebelum berangkat ke SG, saya sudah googling tempat-tempat yang harus saya kunjungi. Mumpung lagi di sini dengan modal dikit yang belum tentu kejadian lagi.

Obyektif yang mau dicapai dari agenda jalan-jalan ini adalah mengeksploitasi momen sendiri buat berkontemplasi, mencari insight, pengalaman unik dan pelajaran baru; nge-push diri buat latihan terbiasa dalam kondisi ga nyaman di level yang agak tinggian dikit (menurut ukuran saya): berada di tempat yang asing sendirian, beda bahasa, beda budaya, dengan segala keterbatasan dari sisi budget dan pengalaman; dan hunting foto bermodalkan kamera Xiaomi Redmi Note 2 Prime wkwk.

Yang menarik, saya “berlibur” saat Singapore sedang hari biasa, bukan week-end. Keuntungannya: tempat-tempat yang biasa menjadi tempat rekreasi tidak seramai hari libur dan saya bisa menikmati dan memperhatikan pemandangan orang lalu-lalang untuk bekerja.

Saya memutuskan ke Marina Bay lagi, tetapi kali ini dari sudut yang berbeda. Alhamdulillah, nikmat sekali rasanya berjalan kaki sendirian di kota yang cantik dan sepi (karena orang masih pada kerja). Setelahnya jalan random aja mengikuti kemana yang hati inginkan. Tiba-tiba ke Victoria Theatre, menikmat pemandangan orang keluar kantor di pusat perkantoran saat dalam perjalanan ke Moulana Mohd Ali Mosque, dan duduk terpukau dengan gedung-gedung di sekitar Singapore River yang tiba-tiba nambah cantik kalau malam hari.

Oh ya, Moulana Mohd Ali Mosque ini letaknya di bawah tanah diantara gedung-gedung tinggi yang mewah. Saya agak bingung ketika mencari, karena tidak ada tanda-tanda masjid yang biasanya ada kubahnya, atau ada menaranya. Walaupun di bawah tanah, tempatnya sangat nyaman: er-AC, bersih, sejuk, dan menenangkan.

Kalau kaki belum sakit, rasanya saya masih mau jalan kaki lebih lama lagi. Tapi apa daya, besok masih ada aktivitas. Benar-benar pegal saat sampai ke penginapan. Setelah saya cek Map, saya berjalan kaki lumayan jauh juga. Achievement Unlock: jalan kaki terjauh sendirian selama 22 tahun terakhir.

Great User-Experience Country

Saya terkesan dengan kedisiplinan, kerapihan dan kecanggihan negara ini. Saya hampir tidak bingung saat berada di sebuah daerah yang saya ga kenal karena banyak papan direction yang mudah dimengerti. “Designer” kota ini benar-benar berempati dengan penduduknya. Istilahnya mah great user experience kali ya.

Kaum disabilitas juga sangat diperhatikan, terlihat dari design jalan di dalam dan luar gedung dan di MRT yang di design khusus untuk kaum disabilitas. Pejalan kaki juga sangat di hargai oleh pengguna mobil. Yang tidak kalah keren adalah di sini jarang ada kendaraan roda dua, jadi ga semrawut. Wajar saja ya, karena transportasi umum di sini sudah sangat enak dan murah.

Saya tidak ingin membanding-bandingkan dengan Indonesia. Karena jawabannya semua orang pasti sudah pada tau. Dari pada banding-bandingin, solusi atau bentuk positif apa nih yang bisa kita kasih buat tanah kelahiran? Sekecil apapun porsinya.

Saya percaya Indonesia akan sampai pada level ini suatu saat nanti. Kita adalah pelaku perubahannya 😀. Atau minimal Depok dulu lah ya wkwkw

Sleepy Kiwi, 12 April 2016

Foto-foto menyusul karena koneksi internet saat mudik tidak terlalu kondusif hehe.

Singapore – Day #1

Rumah, Tangerang – Persiapan

Ini adalah pengalaman perdana saya pergi ke negeri orang. Sendirian pula. Persiapan keberangkatan enggak terlalu ribet-ribet, cuma bawa satu ransel dan satu tas kecil buat naroh barang-barang yang mobilitasnya tinggi: kayak passport, handphone, powerbank, dompet. Karena ga telalu jauh juga dan cuma sebentar.

Di SG insyaAllah 4 hari. Acara TIA di tanggal 12-13 April, 11 dan 14 dipake buat mencari hikmah dalam perjalanan di SG.

Satu hari sebelum keberangkatan, seharian bolak balik Tangerang-Depok-Tangerang. Rencana awal berangkat dari Depok di Senin pagi, karena Minggu malam ada agenda mingguan: ngumpul-ngumpul ganteng. Tapi karena ada “sesuatu yang kritikal” *halah*, “ngumpul-ngumpul ganteng” ditiadakan untuk minggu ini, sesuatu yang sangat jarang terjadi. Dapet kabar ga ada agenda ini di siang hari, jadi minggu malam, setelah isya saya langsung berangkat ke Tangerang. Rencana berubah, berangkat ke Bandara dari Tangerang. Lebih deket juga Alhamdulillah.

Soekarno-Hatta Airport – Mba-mba biro jodoh

Dapet pesawat jam 11.50, karena kerajinan, jadi berangkat dari rumah jam 8.30. Ayah ga bisa nganter karena ada kerjaan yang ga bisa ditinggal, jadi pesan GrabBike. Dengan ongkos 50 ribu, alhamdulillah setelah 30 menit-an saya bisa sampai ke Bandara Soetta.

Walaupun bukan pengalaman pertama naik pesawat sendirian, saya masih tetap bingung wkwk. Duduk sebentar di depan tempat check-in dan dapat ide harus ngapain. Saat lagi duduk, ada ibu-ibu sebelah saya tiba-tiba ngasih kue. Enak 😀

Iseng nanya mba-mba yang lagi di duduk di sebelah saya, “Mba, ini check-in buat pesawat yang 11.50?”, sambil nunjuk antrian panjang depan mata. “Iya, Mas”. Hoalah, ngedumel dalem hati, “Ngapain gue duduk-duduk aja dari tadi” *tepok jidat*. Oke ikut antrian panjang buat check-in, padahal masih jam 9-an. Tapi sebelum beranjak dari tempat duduk, mba-mba itu bilang,

“Mas, nanti saya nitip check-in ya?”
“Eh, emang bisa mba?”
“Bisa bisa”
“Ooh. Ok”

Pas lagi ngantri, mba-mba itu dateng berdiri di sebelah saya. Dan tiba-tiba doi berusaha jinjit buat bisikin sesuatu ke saya “Mas nitip ya”. Yaudahlah ya, perlahan-lahan saya kasih dia berdiri di depan saya. Enggak enak juga sebenarnya sama yang ngantri di belakang saya.

Dan percakapan aneh pun terjadi:
“Mas udah nikah?”
*glek* “Eng.. belum, Mba”
“Ooh, saya udah punya anak satu”

Agak bingung juga sebenernya mau nanggepin apa, akhirnya saya cuma bilang “Ooh” sambil senyum.

“Umur berapa mas?”
“Emm.. Saya 23, Mba” (padahal belum genap 23, bukan info yang penting juga kalau saya bilang, “Tanggal 21 ini, saya 23, Mba”)
“Wah masih muda ya. Brondong”

Ini apa sih wkwk. Lalu beliau menjelaskan, sebenarnya dia tadi udah ngantri check-in, tapi karena bos-nya datang, jadi antriannya digantiin dengan bos-nya. Begitu kira-kira.

Setelah selesai check-in, ternyata beliau bareng temannya yang juga mba-mba.

“Tadi ngantrinya bareng mas ini, jadi cepet hehe”, jelas mba X kepada mba Y.

Obrolan pun berlanjut, ngomongin tentang rencana di Singapore mau ngapain aja. Pikir saya, lumayan juga, biar ada teman kalo sewaktu-waktu bingung. Mereka berdua juga pertama kalinya, tapi karena bareng bosnya yang udah sering bolak-balik Singapore jadi directionnya lebih jelas.

Sambil jalan ke gate,
“Mas udah punya pacar belom?”, tanya mba-mba yang satu lagi.
“Saya ga pacaran, Mba hehe”
“Wah pas banget tuh. Saya kenalin ya sama temen saya di kantor. Namanya ……. *lupa*. Dia juga katanya mau ta’aruf-ta’aruf gitu. Cantik lho mas. Ni fotonya”
“Hahaha”
“Eeh bener siapa tau jodoh”
“Hahaha”

Lalu mereka berdua curhat ke saya. Oke, tak dengerin walaupun ga paham.

TR-2279, Udara – Tidak terlalu menarik

Kurang beruntung karena ndak dapat seat yang di dekat jendela. Jadi ga bisa hunting foto. Tapi sempat curi-curi waktu buat jepret ketika orang india yang di sebelah saya sedang ke toilet. Sayangnya, pemandangannya lagi enggak kelihatan.

Beberapa menit sebelum landing, pramugari memberikan imigration card yang perlu diisi dan diserahkan saat pemeriksaan imigrasi di airport.

Changi Airport, Singapore – Pencarian Kartu Perdana dan Benny.

Alhamdulilah sampai dengan selamat di Changi. Karena saya belum tau setelah ini bagaimana berurusan dengan kantor migrasi, jadi saya “mbuntutin” mba-mba yang tadi bersama bosnya aja hehehe.

Watch and Learn! Dan Alhamdulillah bisa lolos kantor migrasi dengan selamat.

Tantangan selanjutnya dimulai. Saya ga bisa mengubungi Benny karena ga dapet sinyal, dan sepertinya belum tiba. Kami sudah janjian jam 14.40 di airport. Oh ya, Benny adalah teman baik saya dari jaman SMA, teman sebangku selama dua tahun, partner diskusi yang asik dan tentunya anak yang sangat cerdas. Ia saat ini sedang menyelesaikan PhD-nya di bidang Kimia.

Ok cukup cerita tentang si Benny hehe.

Menurut hasil googling saat di Indo, kartu perdana SingTel bisa di dapat di 7 Eleven (sejenis indomaret buat yang belum familar) dengan harga $7 untuk paket data 1 GB; $15 untuk isi pulsa $18; dan $28 untuk pulsa $30-an. Khusus yang paket data 1GB seharga $7 itu cuma ada di 7 Eleven, sisanya bisa dibeli di airport.

Karena saya cuma ada duit $20-an di dompet (fyi, money-changer ternyata tutup kalau hari sabtu, $20 ini di dapat dari teman yang baru balik juga dari SG) dan mau nuker di airport rate-nya jelek, jadi saya memilih untuk mencari 7 Eleven buat beli SingTel yang $7.

Pertanyaannya adalah dimana letak 7 Eleven di Changi Airport? Agak gambling, saya pun memutuskan jalan random buat nyari 7 Eleven. Life is a choice, yeah! wkwk

Setelah jalan sekitar 10 menit, akhirnya saya ketemu orang yang kira-kira bisa saya tanyain. Doi sepertinya supir mini-bus. Jawabannya, doi ga tau dimana letak 7Eleven. Jalan sedikit lagi, saya tanya lagi, dan hasilnya sama, ga ada yang tau. Reflek memutuskan untuk balik ke pintu terminal kedatangan, berharap ada benny disana. Tapi ternyata belum juga ada. Dari pada ribet, akhirnya saya memutuskan buat nuker duit aja lah di airport biar bisa segera beli SingTel yang $15, lalu ngontak Benny.

Di money changer saya ketemu mba-mba itu lagi bersama bosnya. Basa basi dikit sambil menceritakan kondisi saya yang lagi kebingungan wkwk.

Setelah saya nuker duit dan nunggu ngantri buat beli SingTel, saya memberanikan diri untuk meminta tolong ke pak bos-nya mba-mba itu buat sms ke Benny bahwa saya sedang nunggu di pintu terminal kedatangan. Tombol “Send” di tekan, dan saya mengucapkan banyak terimakasih. Cukup lega. Beberapa detik kemudian, saya iseng noleh ke belakang, dan alhamdulillah tidak disangka-sangka saya melihat Benny! Wow. Apakah ini sebuah kebetulan? Aku rasa tidak. Spontan saya pamit ke pak bosnya mba-mba dan mengucapkan banyak terimakasih, lalu segera nyamperin Benny sambil senyum bahagia karena lega hehe.

“Hi, Ben!”. Bolak balik ia minta maaf karena telat datang. Ia salah prediksi katanya, kalau siang hari MRT berjalan lebih lambat. Dengan senang hati saya memaafkan, karena saya tau doi bukan orang yang suka sengaja ngaret hehe.

Langsung Jalan-Jalan

Di hari pertama ini, Benny dengan baik hati berinisiatif mengantar saya ke penginapan. Sambil menuju penginapan, saya diajak melipir ke beberapa tempat, salah satunya ke Marina Bay dan diajak ke tempat Casino wakakak. Mind blown banget saat diajak ngeliat tempat casino dari atas. Pengalaman yang unik. Ga bisa masuk ke tempat Casino-nya karena perlu pakai jaminan-jaminan gitu, lagi pula saya ga mau masuk juga, takut mati di tempat perjudian ntar repot dunia-akhirat hehe.

Lanjut ke Bugis Junction buat nyari makan dan ternyata saya di traktir lagi sama Benny. Padahal 2 bulan sebelumnya udah di traktir makan di Pizza Hut sampe puas waktu doi lagi libur ke Indo.

Saya menyerap banyak informasi dari Benny seputar Singapore: bagaimana cara menggunakan transportasi disini, bagaimana cara membaca peta transportasinya, tips dapet makanan halal (walaupun ia seorang non-muslim), dan lain-lain. Selebihnya Watch and Learn!

Setelah berjam-jam langsung jalan-jalan–mostly menggunakan kaki–dengan barang bawaan yang cukup berat. Akhirnya saya sampai juga ke penginapan: Sleepy Kiwi namanya. Tempatnya di kampung bugis, tepat di depan Masjid Sultan yang terkenal itu. Pundak saya sakit parah karena menahan beban (hidup) yang berat selama berjam-jam.

Masih Jalan-Jalan

Setelah menaruh barang dan shalat, ternyata jalan-jalan belum selesai. Benny masih semangat buat bantu nyariin SingTel yang belum jadi terlebeli saat di airport tadi. Saya pun diajak meilipir lagi ke sebuah Mall sambil memperbanyak jam terbang menggunakan transportasi di sini. Hari sudah sore dan semakin gelap.

FYI, hiburan disini kebanyakan adalah jalan-jalan ke Mall. Cukup membosankan buat saya pribadi hehe.

Akhirnya kami mendapatkan gerai resmi SingTel, disini saya bisa beli SingTel paket turis dengan harga $7 untuk 1GB. Cukup untuk hidup satu minggu. Namun, saya melakukan kesalahan. Lupa bawa passport!

Di sini, untuk membeli kartu perdana harus menggunakan passport. Alhasil saya kembali pulang dengan tangan kosong dan berniat kembali lagi esok hari. Untungnya di penginapan ada Wifi gratis.

Benny pamit langsung pulang. Kami sudah membuat agenda untuk ketemu lagi di hari Kamis, hari terakhir saya di sini. Giliran saya yang nyamperin dia ke NTU, insyaAllah.

Dan ini juga sekaligus pertama kalinya saya balik sendirian ke penginapan. Agak serem juga karena ga ada koneksi internet, jadi saya ga bisa cek Google Maps. Tapi alhamdulillah bisa sampai ke penginapan dengan selamat, bermodalkan Google Maps yang masih kebuka (tanpa direction) saat make koneksi tatheringnya Benny. Sambil sikit-sikit nanya orang lah hehe. Butuh jalan beberapa menit dari stasiun MRT ke penginapan.

Alhamdulillah, hari pertama yang luar biasa. Dapet pengalaman baru yang keren. Officially thanks to Benny yang udah berbaik hati mau jadi tour guide dan nraktir makan, juga sebagai basis informasi yang jadi modal saya buat survive di SG selama 4 hari kedepan insyaAllah 🙂

Sleepy Kiwi, 11 April 2016

Disalin dari evernote, awalnya hanya direncanakan untuk konsumsi pribadi.