Friends are (not) forever?

Berapa banyak teman yang kamu punya di FB? Berapa banyak dari teman itu yang masih tetep kontak denganmu? Berapa banyak temen yang masih saling berkomentar dan atau kasih jempol saja? Berapa banyak yang kamu tungguin update kabar beritanya? Berapa banyak yang kamu kontak langsung setelah mendapati temen kamu ga ada di daftar temen kamu lagi (masa ga punya cara kontak lain selain di FB)?

Berapa banyak teman yang kamu ucapkan selamat ulang tahun bukan karena kamu lihat notifikasi di FB tapi karena kamu sengaja set reminder di calendar pribadimu? Berapa banyak teman yang kamu tahu umur anak-anaknya berapa walau sudah beberapa tahun ga ngobrol (alih-alih nanya mulu tiap ngobrol)? Berapa banyak teman yang kamu selalu bisa ngobrol bukan pas butuh bantuan/ada keperluan doang? Berapa banyak teman di FB yang ga kamu unfriend/hide gara-gara beda pandangan politik atau perbedaan memandang masalah asi/sufor, vaksin/nonvaksin atau karena perbedaan pendapat lainnya?

Ilustrasi dari undraw

Saya bukan orang yang terlalu ramah  dan sebagian besar kenalnya saya orang galak (mungkin karena saya sering ngomong to the point), tapi dibanding Joe, temen saya lebih banyak  mulai dari temen TK sampai temen kuliah yang masih terhubung via FB ataupun sekedar punya nomor telponnya. Beberapa teman tetap saling kontak, beberapa hilang karena mereka ga punya FB atau udah ga tau lagi mau ngomong apa.

Daftar teman saya di FB masih terlalu banyak menurut saya, karena sebagian teman di FB itu saudara dan atau teman sealmamater yang ya kenal tapi ga kenal-kenal banget. Kadang kepikiran buat merampingkan daftar teman, tapi saya pikir nanti bisa salah paham kalau saya putus pertemanan, akhirnya ya sudah sementara ini biarin dulu. Sesekali kalau ada teman di FB yang terlalu rajin jualan ngetag-tag, atau terlalu banyak share politik, berita hoax dan berita yang bikin sakit mata, ya paling temen itu saya unfriend saja. Beberapa saya kasih tau baik-baik kalau saya ga suka di-tag, lalu mereka ga nge-tag saya lagi, beberapa bilang ya udah unfriend aja.

Waktu kuliah seorang teman berkata: tidak ada teman sejati, yang ada kepentingan sejati. Saya waktu itu ga setuju dengan kalimat itu. Masa kuliah itu bisa dibilang saat terlama bersama-sama teman sekelas  (waktu SD belum merasakan serunya punya temen berlama-lama). Makanya saya ga buru-buru lulus 4 tahun. Kalau masa SMP dan SMA saya menanti-nantikan liburan panjang kenaikan kelas, masa kuliah saya merindukan kapan bisa kembali lagi kuliah sampai pas lagi liburan panjang terbawa mimpi lagi kuliah hahaha. Perasaan ga terima aja kalau dibilang kita berteman dengan seseorang itu karena ada “kepentingannya”, masa sih ga ada ketulusan dalam berteman? masa sih? masaaaa??? (eh kok jadi dramatis gini).

Belakangan ini setelah lama ga bertemu dengan teman-teman selain mostly lewat FB saya mulai merasa kalimat itu ada benarnya. Hubungan pertemanan yang masih terpelihara itu biasanya karena ada kepentingan dari kedua belah pihak, manusia kan mahluk sosial jadi pastilah kita membutuhkan manusia lainnya, dan itu juga termasuk kepentingan toh. Kalimat itu bukan berarti kepentingan dalam arti memanfaatkan teman, tapi lebih ke: kita masih berteman karena masih ada irisan kesamaan urusan (aduh apa sih irisan urusan). Ya kadang-kadang kepentingannya ga penting-penting banget juga, cuma seneng aja kan gitu ngumpulin temen lama, sesekali ketemu dan atau kalau ada yang butuh bisa ditanyakan tanpa harus kenalan dulu atau basa-basi.

Sejak jaman Friendster, saya malas menambah teman yang ga kenal. Setelah Friendster digantikan FB, saya makin malas nambah teman hahaha. Saya menambah teman kalau memang kenal (irisan urusannya misalnya sama-sama kota tinggal atau ya dulu pernah juga nambah teman jaman rajin hobi main benang). Beberapa teman yang bertambah karena hobi akhirnya hilang juga karena sejak saya ga hobi main benang lagi ya irisan urusannya hilang, tapi beberapa tetep jadi teman baik karena mereka tetep asik buat diajak ngobrol selain ngomongin benang.

Beberapa tahun terakhir ini, ada banyak ajakan reuni. Pertama kali bertemu di  grup WA atau FB dengan teman-teman sekolah itu rasanya seru banget. Tapi lama-lama sepertinya obrolannya mulai ga seru karena yang diobrolin ga bertambah yang baru.  Sejauh ini, saya belum pernah ikutan ke acara reuni ataupun reuni akbar, karena kalau dipikir-pikir saya memang pingin ketemu beberapa teman tapi saya ga terlalu pengen juga ketemu dengan teman baru. Beberapa teman bilang kan seru punya temen baru dan wawasan baru, atau beberapa teman bilang kan buat networking. Mungkin kalau saya punya bisnis saya akan merasa perlu juga punya banyak teman baru, tapi untuk sekarang ini sepertinya saya memilih untuk memaintain pertemanan dengan yang sudah ada saja.

Ball Lightning dan trilogi The Three-Body Problem

Beberapa hari yang lalu buku Ball Lightning versi bahasa Inggris akhirnya diterbitkan dan dengan cepat saya selesaikan. Buku ini aslinya ditulis tahun 2004 oleh Liu Cixin dan bisa dibilang sebagai prequel dari  trilogi The Three-Body Problem yang sudah diterjemahkan duluan beberapa tahun yang lalu.

Dari dulu ingin menulis mengenai trilogi ini, tapi selalu ditunda, nah dengan adanya buku yang baru terbit ini, ada alasan untuk menulis seri ini.  Saya akan menyampaikan pendapat saya, dengan sedikit kutipan cerita yang semoga tidak menjadi spoiler (anggap saja seperti menonton trailer film). Semua buku ini saya baca secara elektronik di Kindle.

Hampir semua buku science fiction yang saya baca, terutama dalam kategori Hard science fiction (kategori sci-fi dengan penekanan pada akurasi sains) berasal dari negara barat. Buku seri trilogi The Three-Body Problem ini buku scifi pertama yang saya baca yang asalnya dari negeri China. Saya tidak bisa membaca dalam bahasa aslinya untungnya terjemahannya menurut saya sangat bagus, setidaknya tidak membuat saya bingung.

Biasanya buku scifi lain akan berfokus pada segala sejarah, teknologi dan lembaga yang ada di Amerika atau Eropa, tapi buku ini fokusnya adalah China. Hal ini saja sudah cukup membuat buku ini menarik, tapi scifi-nya juga sangat menarik dari berbagai sudut pandang.

Bagian pertama buku pertama (bab 1-3) memang agak membosankan dan kurang terasa aura buku scifi sampai akhir bab 3. Ceritanya di awali dengan masa Cultural Revolution di China dan menjadi pengantar pengembangan karakter. Tapi setelah melewati bagian ini ceritanya menjadi sangat menarik.

Judul buku ini dari masalah fisika: three-body problem, menentukan posisi dan gerakan 3 benda jika diketahui informasi awal (massa, kecepatan, dan posisi) benda-benda tersebut dengan menggunakan hukum Newton. Ini berhubungan erat dengan bagian dari cerita, mengenai peradaban alien yang tinggal di tata surya dengan 3 matahari, dan mereka memiliki masalah karena tidak bisa meramalkan posisi ketiga matahari tersebut.

Dari sudut pandang ilmu komputer, akurasi buku ini sangat baik. Ini wajar karena penulisnya adalah seorang computer engineer. Contohnya di buku pertama (The Three-Body Problem) dia menggambarkan sebuah komputer yang terdiri dari banyak prajurit. Ini cuplikan dari buku pertama di mana John Von Neuman bertemu Qin Shi Huang:

Von Neumann turned to the three soldiers again. “Let’s form another component. You, Output: if you see either Input 1 or Input 2 raise a black flag, you raise the black flag. There are three situations where that will be true: black-black, white-black, black-white. When it’s white-white, you raise the white flag. Understand? Good lad, you’re really clever. You’re the key to the correct functioning of the gate. Work hard, and the emperor will reward you! Let’s begin operation. Raise! Good, raise again! Raise again! Perfect. Your Imperial Majesty, this component is called an OR gate.”

Then, Von Neumann used the three soldiers to form a NAND gate, a NOR gate, an XOR-gate, an XNOR-gate, and a tristate gate. Finally, using only two soldiers, he made the simplest gate, a NOT gate, or an inverter: Output always raised the flag that was opposite in color from the one raised by Input.

Von Neumann bowed to the emperor. “Now, Your Imperial Majesty, all the gate components have been demonstrated. Aren’t they simple? Any three soldiers can master the skills after one hour of training.”

“Don’t they need to learn more?” Qin Shi Huang asked.
“No. We can form ten million of these gates, and then put the components together into a system. This system will then be able to carry out the calculations we need and work out those differential equations for predicting the suns’ movements. We could call the system… um…”
“A computer,” Wang said.

Dari sudut pandang computer security, buku kedua cukup menarik: apa yang harus dilakukan jika pihak musuh punya teknologi untuk memonitor semua aksi kita tidak peduli di mana kita berada dan teknologi komunikasi kita, tapi tidak mengetahui niat kita.

Meskipun bukunya banyak bercerita tentang sains dan teknologi, tapi cerita mengenai aspek manusianya juga sangat banyak (ada kisah cintanya juga). Bagaimana bumi akan bereaksi kalau ternyata alien itu nyata? buku ini mencoba menggali aspek sosialnya tidak hanya teknologinya.

Meskipun ditulis pertama, tapi buku Ball Lightning diterjemahkan belakangan. Seharusnya terjemahan bukunya selesai tahun lalu, tapi tertunda hingga baru dirilis beberapa hari yang lalu. Buku ball lightning ceritanya cukup menarik, tapi menurut saya tidak terlalu berhubungan dengan buku-buku berikutnya.

Ada karakter yang muncul di buku berikutnya dan ada kejadian yang berhubungan, tapi teknologi yang ada tidak dipakai di buku trilogi The Three-body Problem. Menurut saya buku Ball Lightning ini menarik tapi ceritanya tidak sedalam The Three-Body problem.

Demikian ulasan buku Trilogi Three-Body Problem. Semoga banyak yang tertarik untuk membaca bukunya, karena sepertinya film yang sudah direncanakan belum jadi juga.  Kalau belum tertarik juga, mungkin pujian dari Barack Obama ini bisa membantu memutuskan:

What are some of those books?

It’s interesting, the stuff I read just to escape ends up being a mix of things — some science fiction. For a while, there was a three-volume science-fiction novel, the “Three-Body Problem” series —

Oh, Liu Cixin, who won the Hugo Award.

— which was just wildly imaginative, really interesting. It wasn’t so much sort of character studies as it was just this sweeping —

It’s really about the fate of the universe.

Exactly. The scope of it was immense. So that was fun to read, partly because my day-to-day problems with Congress seem fairly petty — not something to worry about. Aliens are about to invade

Oh iya, selagi menunggu buku Ball Lightning ini, saya sempat membaca juga The Wandering Earth yang merupakan koleksi cerpen dari penulis yang sama. Cerita-ceritanya bervariasi, ada yang menarik, dan ada juga yang membosankan tapi secara keseluruhan cukup menarik.

Belajar Sejarah

Sejak memasuki grade 3, selain memakai CLE kami menambahkan pelajaran sejarah sebagai salah satu materi yang dipelajari oleh Jonathan. Setelah mencari rekomendasi dari group yang diikuti, akhirnya pilihan jatuh ke Story of The World. Sesuai namanya, pelajaran sejarah ini mempelajari sejarah dunia.

Sesuai namanya, Story of The World isinya dalam bentuk cerita

Kemarin, topik yang dipelajari adalah mengenai Shamsi Adad, seorang diktator di kerajaan Assyrian. Pelajaran sebelumnya mengenai Hammurabi yang memerintah di Babylonia. Kedua kerajaan tersebut berada di Mesopotamia. Perbedaan dari Hammurabi dan Shamsi Adad ini dari cara mereka menjadi raja. Pertanyaan yang menarik dari akhir pelajaran adalah: siapakah raja yang lebih baik Hammurabi atau Shamsi Adad?

Ilustrasi dari proyek Undraw

Sebelum bisa menjawab siapa yang lebih baik, saya harus mereview lagi pelajaran mengenai Hammurabi ke Jonathan. Waktu saya sekolah, mungkin pernah dengar nama Hammurabi, tapi saya belum pernah dengar nama Shamsi Adad. Kemungkinan lain, pernah belajar tapi udah lupa hahaha. Salah satu benefit menghomeschool adalah kembali membuka pelajaran supaya bisa mengajar anak, setidaknya kalau belum pernah belajar mengenai ini, saya jadi belajar.

Hammurabi dikenal sebagai raja yang memperkenalkan penggunaan peraturan yang tertulis dan dijadikan acuan dalam mengambil keputusan hukuman. Peraturan yang ditetapkan Hammurabi dituliskan dan dijadikan acuan kalau terjadi pelanggaran di kerajaan Babylonia. Beberapa peraturannya menurut saya agak terlalu kejam karena hukumannya bisa berupa potong lidah atau tangan selain bayar denda. Tapi ya mungkin begitulah cara yang berhasil dilakukan di masa itu.

Berbeda dengan Hammurabi, Shamsi Adad memerintah secara diktator dengan cara kekerasan. Cita-citanya menjadi penguasa alam semesta dengan cara menaklukan lewat perang. Cara perangnya juga kadang-kadang cukup licik, bukan cuma perang dengan pasukan yang banyak, tapi dengan strategi dan meracuni lawan supaya daerahnya bisa diakuisisi. Kalau ada yang tidak menaati perintahnya langsung saja dibunuh. Caranya ini bisa membuat kerajaan Assyrian menjadi cukup luas, tapi akhirnya ketika dia sudah tua, kerajaanya bisa diambil alih oleh Hammurabi dari kerajaan Babylonia.

Kesimpulannya mana yang lebih baik, punya aturan yang jelas (walaupun mungkin aturannya tidak selalu terasa fair tapi ya ada aturan) dibandingkan dengan pemerintahan yang tidak ada aturan yang tertulis dan semua tergantung pada 1 individu. Perintah dari individu ini sifatnya mutlak dan tak terbantahkan, kalau dia sudah bersabda dan tidak dituruti maka orang yang ga nurut ini dihukum mati, kalau orang Medan bilang “sukak-sukaknya aja”. Kalau orang yang memerintah hatinya baik sekalipun tetap saja pola pemerintahan di mana hanya 1 orang yang punya suara ini hasilnya pasti kurang baik.

Untuk menjelaskan kenapa yang satu lebih baik dari yang lain (walaupun tidak ideal), saya dan Joe gak langsung bilang si A lebih baik tapi kami tanya ke Jonathan mana yang menurut dia lebih baik dan apa alasannya.

Dulu bagi saya, pelajaran sejarah ini membosankan dan hapalan mati. Saya ingat ujiannya saya ngapalin isi buku catatan dan gurunya mempertanyakan hampir semua isi buku catatan. Jadi dalam 2 jam saya harus memindahkan isi catatan yang saya hapal mati hahaha. Bedanya dengan pelajaran sejarah yang kami pakai ini, Jonathan bisa belajar dengan mendengarkan audio book sambil membaca bukunya. Setelah mendengarkan ceritanya, selanjutnya ada kegiatan menjawab pertanyaan memastikan anaknya denger dan ngerti, lalu mencari lokasi yang disebutkan dalam peta. Sekarang ini kebanyakan masih sekitar ancient world Egypt, Mesopotamia dan sekitarnya.

Kurikulumnya ini sebenernya bisa untuk kelas 3 sampai high school, ada 4 volume dan kami baru mulai di volume 1. Beberapa homeschoolers bahkan menggunakan kurikulum ini berulang (jadi setelah selesai 4 volume mereka mulai lagi dari volume pertama). Kalau rajin, ada kegiatan craft nya dijelasin di bukunya, tapi untuk sekarang ini kami memilih ga mengerjakan craftnya dulu tapi sekarang cukup kegiatan mewarnainya saja heheh.

Mewarnai tokoh dalam buku SOTW

Rencananya kalau menemukan buku pelajaran sejarah Indonesia, kami juga akan kenalkan sejarah Indonesia ke Jonathan. Untuk sekarang kami cuma kasih tau sedikit mengenai kehidupan papa mamanya jaman dulu dan bedanya dengan dia sekarang sebagai cerita pengantar tidur. Atau juga dia ingat perang Diponegoro itu 1825 – 1830 karena pernah disampaikan sebagai joke. Jonathan juga tau kalau Indonesia mendapatkan kemerdekaannya setelah perang melawan Belanda dan Jepang sedangkan Thailand tidak pernah dijajah.

Jonathan senang mendengarkan cerita-cerita dan cukup bisa lama ingat akan fakta-fakta yang kami sampaikan. Dia juga kami ajarin siapa Presiden Indonesia sekarang ini. Pelajarannya kadang agak random, karena waktu kasih tau soal Indonesia dipimpin presiden, dia akan bertanya kenapa Thailand ada Raja dan Indonesia nggak ada? Nah jadilah penjelasannya soal jenis-jenis pemerintahan yang ada. Kalau ada yang punya rekomendasi pelajaran sejarah Indonesia silakan komen ya.

Menulis Surat

Siapa yang masih sering menulis surat? Baik itu surat di kertas maupun surat elektronik? Sepertinya kebiasaan menulis surat kepada teman dan keluarga ini sudah mulai jarang dilakukan. Waktu Jonathan baru lahir, beberapa bulan pertama dan beberapa ulang tahun pertama, Joe dan saya mencoba untuk mengirimkan e-mail ke account yang kami set-up untuk Jonathan sejak dia lahir. Tapi bebeberapa tahun belakangan ini sudah lama tidak dilakukan lagi. Tulisan ini sekaligus pengingat buat saya untuk kembali lagi menuliskan surat untuk Jonathan dan Joshua. Surat buat mereka baca ketika mereka sudah bisa membaca nantinya.

Mengajak Jonathan ke kantor pos di Thailand

Teringat jaman dulu, salah satu kolom di majalah Bobo itu adalah sahabat pena. Saya ga pernah sih punya sahabat pena, tapi Joe pernah cerita dia pernah punya beberapa sahabat pena. Saya juga tau beberapa teman saya yang rajin kirim-kiriman surat dan punya beberapa sahabat pena. Saya ga ikutan kirim-kirim surat sahabat pena karena saya orangnya pemalu dan ga tahu juga mau nanyain apa di surat, ketemu orang baru aja rasanya sulit untuk bertegur sapa. Beda dengan sekarang, kalau sepertinya lawan bicaranya ga aneh-aneh (objektif terhadap mood), gampang sekali untuk ajak orang ngobrol.

Tahun pertama tinggal di Bandung, saya mulai sering berkirim surat. Kebetulan di kampus ada kantor pos, jadi lebih mudah juga untuk mengirimkan surat balasan.  Saya ingat, dulu saya punya 1 kotak khusus menyimpan surat-surat dari keluarga dan dari sahabat masa SMA. Terakhir saya ingat kotak itu ada di rumah mertua, saya coba membaca beberapa surat dari sahabat SMA saya. Lucu rasanya membaca curhatannya. Membaca surat lama sama seperti membaca posting blog lama, beberapa hal sudah terlupakan dan jadi ingat lagi.

Kadang-kadang saya terima surat dari teman SMP atau teman masa bimbingan belajar, kadang agak bertanya-tanya loh kok dia bisa dapat alamat kost saya ya hehehe. Dulu perasaan senang banget kalau terima surat, apalagi kalau suratnya panjang dan berlembar-lembar, serasa deh ketemu dengan orangnya dan ngobrol panjang lebar. Kadang-kadang saya semangat nerima doang, untuk membalas saya tunda-tunda, terus akhirnya ya ceritanya update yang lain-lain lagi. Sebenarnya beberapa hal pertanyaan-pertanyaan dalam surat ga penting banget juga dibalas langsung, yaaa bayangin aja pos biasa itu bisa 10 hari sampai dari Medan ke Bandung, soalnya emang pake perangko yang murah aja hehehe.

Liburan panjang kenaikan tingkat saya pulang ke Medan selama 2 bulan, beberapa teman kuliah ikutan semester pendek di Bandung. Saya ingat, sempat juga beberapa kali surat-suratan dengan teman kuliah. Mereka cerita seputar semester pendek dan update gossip hahahaha, saya cerita kebosanan liburan dan pengen balik ke Bandung, bukan buat kuliah tapi buat bisa hang out sama temen-temen aja.

Masa-masa nulis surat berlembar-lembar itu saya ingat punya angan-angan andai saja bisa kirim surat digital saja yang ga harus kirim via kantor pos (soalnya saya malas ke kantor pos). Saya gak harus nulis di kertas tapi langsung bisa membalas di bagian pertanyaan. Kira-kira yang saya harapkan waktu itu ya adanya e-mail seperti sekarang ini.

Saya  lupa kapan persisnya mulai kenal e-mail, tapi masa itu teman-teman dan keluarga saya di Medan belum punya e-mail, mereka bahkan masih ga ngerti apa itu internet. Yang saya ingat, saya sering banget tuh nyuruh-nyuruh teman saya bikin e-mail biar gampang ga harus surat-suratan pake pos. Di rumah saya di Medan juga saya minta adik saya install modem biar bisa konek internet dan belajar e-mail. Tapi ya, ga gampang memandu jarak jauh mengenai dial-up modem suapaya bisa berinternet, masa itu belum banyak yang jual buku how-to seperti sekarang.

Sejak e-mail makin populer dan keberadaan warnet mulai lebih banyak dibandingkan wartel, kebiasaan berikirim surat via pos mulai saya tinggalkan. Kontak dengan teman-teman SMA paling lewat telepon atau ketika saya liburan ke Medan saja. Kontak dengan teman kuliah dan beberapa teman lain ya sudah memakai e-mail. Untuk komunikasi ke rumah lebih sering memakai telepon (ke warnet atau saya di telepon). Rasanya menuliskan surat via pos biasa mulai kurang seru, karena lebih cepat ngobrol langsung, update kabar dan langsung dapat respon. Masa itu, kartu telepon atau wartel menjadi lebih sering dikunjungi daripada kantor pos. Kalau lagi liburan ke Medan saya jadi lebih sering ke Warnet dan udah ga pernah lagi ke kantor pos.

Iseng kirim kartu pos dari tempat wisata

Sekarang, sejak memakai media sosial seperti Facebook dan HP yang terkoneksi dengan internet 24 jam, menulis e-mail pun mulai ditinggalkan. Apalagi mama saya juga sudah kenal teknologi internet, tambah lagi berkurang alasan untuk kirim surat. Kalau mau ngobrol ya tinggal kirimkan pesan via WhatsApp, Facebook, Line dan dulu sempat juga pake BBM.  Kalau lagi malas nulis, sering juga pakai video call. Tapi rasanya sekarang ini malah makin jarang berkomunikasi dengan teman masa SMA, ya sebagian juga karena makin lama makin jarang update kabar, jadi paling taunya kabar dari update status mereka di media sosial.

Teknologi memang semakin memudahkan kita untuk berkomunikasi, tapi entah kenapa ada perasaan teknologi chat bikin saya semakin sulit untuk menuliskan banyak hal seperti ketika saya menuliskan surat. Menulis blog ini saja saya sering kehilangan kata-kata untuk mengungkapkan apa yang sebenarnya pengen saya sampaikan. Kebiasaan chat yang saling berbalasan langsung membuat saya tidak bisa mengkomposisikan apa yang ingin saya sampaikan dalam paragraph yang mudah dimengerti dan tidak bertele-tele.

Dipikir-pikir, waktu menuliskan surat, baik itu surat pos biasa ataupun e-mail, saya masih bisa untuk bercerita dengan menggunakan kalimat lengkap yang jelas, saya menyampaikan secara lengkap hal-hal yang ingin saya sampaikan tanpa interupsi oleh penerima surat. Tentunya saya berharap surat saya bisa dimengerti dan jelas mana yang berita dan mana yang pertanyaan. Sekarang ini, kalau saya disuruh menuliskan surat, rasanya suka bingung sendiri mulai dari mana. Bahkan menuliskan blog ini saja saya sepertinya sudah mulai kemana-mana dan ga fokus lagi. Harus lebih sering posting lagi dan lebih sering menuliskan surat.

Oh ya, jadi ingat, waktu masih pacaran saya pernah terima surat dari Joe, ceritanya dia lagi menghemat batere laptop dan ga ada wifi di Airport, jadi untuk mengisi waktu, dia nulis surat ke saya hahaha. Surat fisik begitu bagusnya bisa dibaca berulang-ulang, rasanya membaca surat apalagi dari pacar bikin perasaan makin berbunga-bunga. Jaman awal pacaran, saya dan Joe juga masih sering kirim e-mail. Harus dicari tuh arsipnya buat kenang-kenangan hahahhaa. Kira-kira isi suratnya kayak posting blog ini

Aku Cinta Padamu

 

Kesimpulannya buat saya, menulis surat itu berguna untuk jadi arsip/catatan yang bisa dibaca lagi dikemudian hari. Tapi memang ga ke semua orang sih kita perlu tulis surat, apalagi kalau ga tau juga mau cerita apa. Sekarang ini yang terpikir ya nulis surat ke anak-anak saja. Buat mereka baca kalau mereka besar nanti. Posting blog ini juga mudah-mudah bisa jadi kenangan buat mereka kalau kami sudah ga ada lagi.

Ayo menulis surat/blog buat orang-orang yang kita sayangi. Ingatan manusia ini ada batasnya, tapi kalau dalam bentuk tulisan bisa dibaca dan membawa kita bernostalgia dan menjadi memory yang lebih bertahan lama.

Mengenal Two Factor Authentication (2FA)

Saat ini untuk mengakses sebuah situs biasanya kita menggunakan password. Tapi password bisa bocor dan kadang gampang ditebak. Jika seseorang punya password kita, maka orang tersebut bisa login dan mengambil alih account kita. Untuk meningkatkan keamanan, maka selain password kita perlu memberikan bukti lain bahwa sesungguhnya yang ingin melakukan autentikasi benar-benar diri kita.

Sistem yang menggunakan lebih dari satu bukti/faktor untuk autentikasi dinamai “Multi Factor Authentication” (MFA). Two Factor Authentication merupakan subset dari MFA dengan hanya dua faktor saja. Biasanya password dan sesuatu yang lain. Website besar seperti GMail, Facebook dan Twitter semuanya mendukung 2FA. Di tulisan ini saya akan membahas kelebihan dan kelemahan berbagai faktor dalam 2FA.

MITM

Serangan generik untuk hampir semua jenis transaksi adalah MITM (man in the middle attack). Seseorang yang bisa mencegat paket jaringan dan menyimpan memodifikasi paket tersebut akan bisa  mendapatkan password seseorang. Contoh “pencegatan” adalah dengan menggunakan WIFI gratis yang disetup oleh penyerang, atau penyerang mengganti setting router (DNS).

Dalam kasus hanya password saja, jika attacker sudah berhasil menyadap password, maka attacker akan bisa login lagi walaupun user sudah logout. Dalam kasus multi factor authentication, serangan MITM ini juga bisa dilakukan tapi lebih terbatas.

Sebenarnya dengan penggunaan SSL, MITM ini semakin sulit dilakukan. Sebuah website sulit berpura-pura menjadi website lain yang memiliki sertifikat SSL. Tapi ada faktor manusia yang sering kurang jeli dalam mengunjungi website. Contohnya jika ingin mengunjungi klikbca.com menjadi kilkbca.com maka seseorang bisa dengan mudah mendapatkan sertifikat SSL untuk website tersebut.

Varian lain MITM adalah seseorang mendaftarkan domain yang memakai karakter bahasa lain yang sulit dibedakan dari karakter latin (IDN Homograph Attack). Ketika mengunjungi situs tersebut, semua permintaan akan diteruskan ke situs asli, tapi sambil disadap dan atau dimodifikasi.

Saat ini beberapa browser sudah menangani agar tidak terjadi penipuan nama domain yang terlihat sama tapi berbeda, tapi sayangnya Firefox masih belum menangani ini dengan baik

Contoh kombinasi huruf latin dan non latin pada nama domain. Huruf Latin “e” dan “a” diganti dengan huruf Cyrillic “е” dan “а”.

Yang kamu tahu

Ini merupakan faktor autentikasi yang paling sederhana, intinya selain ditanya password, kita akan ditanya hal lain secara random. Ketika registrasi kita diminta mengisi beberapa pertanyaan dan jawaban (misalnya: apa group musik favorit Anda? Anda lebih suka Marvel atau DC?). Perhatikan bahwa ini berbeda dengan pertanyaan “password recovery” ketika kehilangan password. Pertanyaan ini selalu ditanyakan ketika login.

Cara ini hanya sedikit lebih aman dari password saja.  Jika seseorang memonitor jaringan hanya sekali saja, maka dia tidak bisa login jika kebetulan mendapatkan pertanyaan yang berbeda, tapi jika dimonitor beberapa kali maka semua jawaban bisa ditemukan. Seperti halnya password, jawaban untuk berbagai pertanyaan ini bisa dicari dan ditebak. Jika sudah mendapatkan jawabannya maka akan mudah login di mana saja.

Dirimu

Biometrik merupakan autentikasi berdasarkan “apa adanya kita”, bisa berupa sidik jari, wajah, retina, DNA, bau badan, atau apapun. Metode autentikasi ini sudah umum dipakai secara lokal (misalnya ponsel, di gedung). Di ponsel, sidik jari atau wajah hanya akan mengunlock data di ponsel dan data tersebut yang akan dikirim ke server (jadi bukan biometrik kita yang langsung dikirim ke server).

Kelemahan sistem ini adalah: biometrik bisa disalin. Sidik jari bisa mudah dicuri dari segala permukaan yang kita sentuh, retina bisa difoto, bahkan pengenalan wajah juga bisa diakali. Biometrik juga tidak bisa diganti, jika data bocor — misalnya seseorang merekam dengan sidik jari atau retina Anda dan diposting ke Internet — maka Anda tidak bisa mengubah mata Anda. Ada kekhawatiran juga bahwa seseorang bisa diculik demi menjadi kunci akses untuk sesuatu yang berharga.

Yang kamu punya

Cara ini yang paling umum digunakan karena praktis: menggunakan benda yang kita pegang (ponsel/sms/app/token). Ketika login kita diminta memasukkan kode tertentu yang hanya bisa dipakai sekali (OTP, One Time Password). Secara umum serangan MITM bisa dilakukan seperti password, bedanya adalah: attacker hanya bisa login sekali ini saja karena berikutnya OTP-nya akan berbeda.

Setelah attacker bisa login, koneksi dari pengguna yang sebenarnya bisa diset agar selalu error atau diputus.

Untuk meningkatkan keamanan, OTP biasanya akan diminta per transaksi. Inipun masih bisa MITM, tapi lebih sulit. Misalnya ketika user ingin transfer uang ke pihak A, attacker akan mengganti agar di browser user tampil transfer akan dilakukan ke pihak A, tapi data yang dikirim ke server adalah: transfer dilakukan ke pihak B. Beberapa bank mengatasi ini dengan mengirimkan SMS notifikasi jika kita mendaftarkan account tujuan yang baru.

Serangan berikutnya adalah: menyalin apa yang kamu punya jika bisa disalin. Atau dalam kasus tertentu: cukup bisa membaca apa yang kamu punya (contohnya dalam kasus SMS).

Ponsel/SMS

Sistem ini dipakai di banyak bank: setiap kali login atau melakukan transaksi, maka sistem akan mengirimkan SMS kode. Teorinya ini cukup aman karena (seharusnya) cuma pemilik ponsel yang bisa menerima kode ini. Tapi jika seseorang ditargetkan maka metode ini sudah tidak aman lagi. Baru-baru ini Reddit dihack karena menggunakan SMS sebagai faktor kedua.

Cara pertama untuk membaca SMS adalah: SIM Swapping. Intinya berpura-pura jadi orang lain untuk mendapatkan SIM card baru dari operator. Cara ini tidak bisa dipakai untuk hacking banyak orang sekaligus karena perlu proses untuk mendapatkan SIM card baru dan pengajuan massal akan sangat mencurigakan.

Cara lain adalah hacking ke jaringan SS7. Secara singkat: semua jaringan operator di dunia ini berhubungan, dan hubungan ini perlu telpon antar operator dan untuk roaming. Jika memiliki akses ke jaringan SS7, ada banyak vulnerability yang bisa digunakan untuk membaca SMS. Selain dengan bug, cara termudah adalah mengakses jaringan operator adalah melalui orang dalam (SMS tidak dienkrip). Cara ini tidak bisa dengan mudah digunakan secara massal karena akan cepat ketahuan siapa yang mengakses SMS banyak orang.

Cara ketiga adalah menginstall aplikasi di HP target. Jika aplikasi ini memiliki hak untuk mengakses SMS maka SMS OTP yang sampai akan bisa dibaca oleh attacker. Cara ini juga tidak mudah digunakan massal, harus menggunakan trik agar seseorang mau menginstall aplikasi tertentu (atau menggunakan bug spesifik untuk ponsel tertentu).

Cara terakhir yang sebenarnya sangat sederhana tapi sering berhasil adalah social engineering (intinya: menipu, tapi orang yang sering melakukan social engineering kurang suka kalau saya pakai istilah menipu). Caranya begini: penyerang melakukan transaksi, lalu butuh OTP, lalu dia menghubungi korban dengan mengatakan “mas, maaf saya tadi mau masukin nomor telepon untuk aplikasi gojek, eh salah masukin nomor mas, nanti kalo ada SMS masuk dari gojek bisa minta tolong bacain kodenya mas?”

Software Token

Software seperti Google Authenticator tergolong pada Software Token. Setiap kali kita ingin login ke website, kita perlu memasukkan angka yang muncul pada token. Ada banyak algoritma yang bisa dipakai namun saat ini ada TOTP standar yang dipakai di banyak layanan (Google, FB, Twitter, dsb). Standar TOTP ini sangat sederhana (saya pernah mengimplementasikan di jam tangan saya sejak 2011). Intinya adalah: ada satu string yang menjadi kunci untuk algoritma yang inputnya adalah waktu saat ini.

TOTP ini relatif aman untuk kebanyakan kasus. Serangan yang mungkin adalah jika seseorang menyalin key dari device kita. TOTP ini juga bisa diserang dengan teknik MITM.

Variasi lain token semacam ini adalah berdasarkan challenge dari website, website meminta kita memasukkan nomor tertentu ke aplikasi dan kita diminta memberikan angka ke website. Secara konsep tidak ada perbedaan dengan waktu (waktu diganti dengan bilangan random yang dihasilkan website).

Hardware Token

Ini seperti token software, tapi memiliki kelebihan karena tidak mudah menyalin nilai key-nya. Untuk token software, kita diminta memasukkan kode tertentu dalam proses setup, pada token hardware kode ini dimasukkan oleh pihak terkait (bank atau perusahaan). Di dalam device ini ada RTC (real time clock) atau istilah awamnya: ada jam-nya, supaya waktunya sinkron dengan server.

Jika ingin menyalin keynya maka token hardware perlu dibongkar sampai level chipnya (jadi lebih aman dibandingkan software). Sama dengan software token, hardware token juga tidak kebal MITM.

Chip berada dalam bulatan hitam resin epoksi menggunakan teknik Chip-on-board (COB)

Kelemahan token hardware adalah: repot karena tiap layanan perlu hardware yang berbeda. Untuk masalah ini, sebenarnya ada juga varian token ini yang memakai smart card, jadi sebelum memakai tokennya kita masukkan dulu kartu kita. Pemrosesan dilakukan di smart card. Walaupun lebih ringkas, cara ini tetap repot karena butuh banyak kartu untuk tiap website.

U2F (Universal 2nd Factor)

Ini juga merupakan hardware token, tapi terhubung ke komputer atau ponsel. Koneksi yang bisa dipakai adala: USB, BLE (bluetooth low energy) dan NFC. Kata kuncinya di sini adalah terhubung dengan komputer/ponsel sehingga langkah verifikasi bisa dilakukan otomatis. Ini berbeda dengan token lain di mana harus ada manusia yang memasukkan sesuatu ke komputer.

Dari sisi user, penggunaan tokennya begini: di sebuah website kita perlu mendaftarkan token kita, caranya dengan mencolokkan device ke PC (atau mentap ke ponsel jika memakai NFC) dan menekan tombol di devicenya. Ketika akan login, kita juga diminta melakukan hal yang sama (colok lalu tekan tombol di device).

Di balik layar ada proses challenge response memakai ECC (Elliptic Curve Cryptography). Spesifikasi U2F ini terbuka, bisa didownload di website FIDO Alliance. Saya sendiri sudah pernah mengimplementasikan ini bertahun-tahun yang lalu. Implementasinya sudah dipakai di hardware yang sudah diproduksi.

MITM sangat sulit dilakukan karena browser akan memeriksa certificate SSL dari server, dan browser (bukan user) akan memastikan hal tersebut benar, jadi tidak mungkin website kilkbca.com meminta autentikasi untuk website asli klikbca.com.

Saat ini U2F ini cukup aman, dan bahkan Google baru-baru ini akan mulai menjual security key U2F. Seperti semua benda lain, kelemahan U2F ini adalah jika  hardware dicuri. Kemungkinan kelemahan lain adalah JIKA ada kelemahan pada browser sehingga bisa dipaksa untuk membypass autentikasi.

Penutup

Demikian perkenalan singkat two factor authentication. Two (atau multi) factor authentication ini sebaiknya ditambahkan pada website untuk menambah keamanan (tidak sulit menambahkan ini). Secara umum 2FA juga bisa digunakan untuk hal lain, misalnya untuk mengamankan akses SSH ke server kita.

 

Garlic Salt

Sejak beberapa tahun terakhir ini, bumbu wajib yang tersedia di dapur pemalas (saya) ya si Garlic Salt. Komposisinya sesuai namanya bawang putih dan garam. Awalnya Joe iseng nyobain, mungkin karena dia tau kalau saya sering malas ngupas bawang putih. Bumbu yg paling banyak saya pakai memang bawang putih, kadang-kadang saja saya tambahkan bawang merah untuk beberapa masakan. Dan sekarang garlic salt ini jadi andalan banget kalau mau masak bakwan/bala-bala, tahu goreng, nasi goreng, sup, sayur bening dan kemarin baru diajarin mertua buat bikin peyek.

Di Chiang Mai ini, kami sering kumpul-kumpul warga Indonesia. Masing-masing membawa makanan yang dimasak/beli, terus makan sama-sama. Kalau lagi super rajin saya bikin tempe bacem, tapi jurus andalan akhir-akhir ini ya bikin bakwan. Sejak ketemu garlic salt, bikin bakwan jadi jauuuh lebih mudah. Kemudahannya yang paling terasa ga butuh ngupas bawang putih, ga perlu ngulek, dan ya tinggal iris-iris dan campur deh. Setiap kali masak rasanya udah banyak, sejauh ini laris manis walaupun bentuknya ukurannya ga seragam hehehe.

Bakwan resep mertua memang bumbunya cuma bawang putih, garam dan merica. Jadi ya sayurnya diiris tipis (wortel, kol dan daun bawang), campurkan dengan garlic salt dan bubuk merica secukupnya (ga perlu gilingan deh), kasih air dan tepung terigu sampai adonannya pas buat digoreng. Oh ya, kalau mau bakwannya crunchy, bisa ditambahkan telur juga. Dulu saya hanya pakai telur untuk bakwan jagung, tapi belakangan ini karena Jonathan bilang dia lebih suka bakwan yang pakai telur, bakwan sayur juga saya pakai telur. Kalau bakwan sayur yang dijual di pinggir jalan kemungkinan besar sih ga pakai telur resepnya.

Penjelasan soal kekentalan adonan ini kira-kira kalau kalau kita tuang pakai sendok adonannya ga akan terlalu sulit lepas dari sendok dan ga terlalu gampang juga lepas dari sendok. Kalau ditanya takarannya, saya ga pernah nakar, semuanya main tuang aja sampai adonannya pas (lain kali kalau rajin mungkin bikin video buat penjelasan seberapa pas haha).

Ada banyak merk garlic salt yang dijual di Chiang Mai, tapi yang paling cocok pakai Garlic Salt McCormick (eh ini bukan lagi promosi ya). Pernah nyobain merk lain karena lebih murah, tapi ternyata gampang menggumpal dan akhirnya kebuang ga jadi dipakai.

Gara-gara mau bikin tulisan ini, jadi ngegoogle garlic salt McCormick dan baru ngerti kalau misalnya ada resep meminta 1 siung bawang putih dan kita cuma punya garlic powder (bukan garlic salt), perbandingannya 1 siung itu sama dengan 1/8 garlic powder.

Resep lain contoh kegunaan garlic salt ini yang juga sering saya pakai untuk goreng tahu, biasanya sebelum tahu digoreng supaya ada rasanya saya rendam tahu dengan air dicampur garlic salt beberapa menit, tiriskan airnya baru digoreng deh. Kalau lagi buru-buru saya ga rendam air, tapi kasih sedikit garlic salt terus di ratain deh ke permukaan tahu. Tapi pernah juga pake metode ini tahunya jadi keasinan hahahaha.

Resep lainnya yang sering jadi andalan buat bikin nasi goreng butter buat sarapan. Bumbunya paling gampang pake garlic salt dan butter, kecap asin dan kecap manis (kadang-kadang ga pake kecap manis). Kalau punya bacon makin mantap rasanya, untuk sayurannya biasanya saya pakai seperti sayuran bakwan (wortel, kol dan daun bawang iris tipis). Kalau lagi ga punya sayuran, atau Joshua lagi picky banget ga mau makan kalau ada sayurannya, ya saya masak nasi goreng tanpa sayuran, tapi ke dalam nasi gorengnya dicampurkan telur juga langsung.

Intinya ya semua masakan yang resepnya pakai bawang putih, bisa digantikan dengan garlic salt ini. Untuk takarannya ya kira-kira seperti memakai garam juga, kalau terlalu sedikit hambar kalau kebanyakan bisa keasinan juga. Beberapa kali pertama saya juga sering salah takar, bikin bakwan rasanya kurang sip hehehe. Kalau udah sering pakai, nanti lama-lama jadi tau deh takarannya.

Troubleshooting di Linux

Ada banyak masalah di dunia IT setiap hari meskipun software dan hardware sudah terpasang dan tidak diubah sama sekali. Beberapa contohnya: sesuatu menjadi semakin lambat (misalnya karena jumlah data menumpuk terlalu banyak), sesuatu tidak bekerja sama sekali (disk penuh, hardware rusak), mendapat serangan DDOS, ISP tiba-tiba memblok suatu website, dsb.

Jika ada sesuatu yang baru, masalahnya bisa lebih banyak lagi. Sesuatu yang baru ini bisa dari hal rutin misalnya upgrade software (contohnya baru-baru ini: ada masalah SSL di Chrome terbaru jika memakai SSL certificate tertentu) ataupun dari penambahan hardware maupun software karena ada kebutuhan baru.

Program top

Di posting ini saya ingin membahas cara troubleshooting generik berbagai masalah yang berhubungan dengan Linux. Pendekatan saya adalah pendekatan programmer: semua masalah admin sebenarnya adalah masalah debugging software. Pada dasarnya administrasi sistem (selain bagian memasang hardware) hanyalah menjalankan program dengan parameter/setting tertentu. Prinsip “debugging” ini bisa diaplikasikan ke sistem operasi apapun tapi saya hanya akan membahas tools khusus Linux di artikel ini.

Bagi sebagian orang ini merupakan hal yang jelas/obvious (“tentu saja mencari masalah itu sama seperti debugging program”). Sayangnya saya masih sering orang yang bingung dalam troubleshooting, dan akhirnya hanya coba-coba. Dan kadang solusinya meskipun “berhasil” tapi ternyata membuka masalah security. Contohnya ketika ingin mengkonfigurasi agar DBMS (misalnya postgres atau mysql) bisa diakses dari jaringan lokal, tapi ternyata malah bisa diakses dari seluruh internet. Dalam kasus ini karena dari jaringan lokal berhasil diakses dan sudah dianggap OK.

Semua program sifatnya sama: membaca input, memproses sesuai dengan algoritma tertentu, dan membuat output. Bahkan masalah jaringan pun sama: inputnya adalah paket data di jaringan dan konfigurasi jaringan (IP, routing, rule firewall, dsb), dan sistem operasi akan menjalankan beberapa algoritma (filtering, routing, dsb), lalu outputnya adalah paket yang diberikan ke program atau diteruskan ke host lain.

Tiga jenis masalah utama yang saya temui adalah sesuatu tidak berjalan sama sekali, sesuatu lambat (masalah kinerja), dan sesuatu tidak bekerja sesuai yang diharapkan. Contoh kasus terakhir misalnya: seharusnya direktori ini yang muncul di web, tapi kok direktori lain yang muncul atau muncul pesan warning/error walaupun program berjalan.

Prekondisi

Sebuah program akan berjalan benar jika prekondisi dipenuhi. Contoh: program konversi citra bisa berjalan jika ada input yang valid, ada disk space yang cukup untuk output. Beberapa program berasumsi bahwa ini pasti benar, sehingga jika disk space habis, kasus tersebut tidak ditangani, dan hanya muncul error generik. Jadi langkah pertama adalah: cek prekondisi dasar sebuah sistem.

Sebelum masuk ke debugging spesifik Linux, hal pertama adalah mengecek hal-hal yang jelas dulu. Apakah koneksi internet jalan? tidak ada masalah di ISP, cloud provider, dsb. Apakah hardware baik-baik saja? misalnya ternyata komputer mati karena kabel dimakan tikus. Jika masalah non-software yang bisa dicek eksternal tidak ada masalah, kita bisa masuk ke bagian berikutnya.

Prekondisi berikutnya adalah: disk tidak error. Hal ini bisa dicek dengan dmesg,  apakah ada pesan error dari kernel.  Ini penting karena jika ada hardware bermasalah maka akan muncul error di sini. Jika ada error, sebuah filesystem akan di-remount menjadi readonly, artinya log file tidak bisa diandalkan (tidak valid).

Lalu cek disk space sistem. Jika disk space penuh, maka log mungkin akan gagal ditulis jadi kita tidak mendapatkan error message yang benar.  Disk space bisa dicek dengan df (disk free). Jika ternyata memang penuh, kita bisa memakai program du (disk usage) untuk mencari tahu direktori/file mana yang memakan space banyak. Masalah disk ini juga kadang bisa dilihat dari “wa” (berapa banyak I/O yang menunggu) di program “top“. Secara umum, pelajarilah berbagai nilai yang muncul di program top, karena ini sangat berguna.

Membaca Pesan Error

Jika hardware dan disk space sudah aman, maka prekondisi dasar sudah terpenuhi. Berikutnya ketika melihat sesuatu yang error adalah: membaca pesan error yang memang sudah diberikan oleh program. Kadang program perlu dikonfigurasi agar mengoutputkan log dan kadang level loggingnya perlu ditingkatkan agar lebih jelas errornya.

Log system biasanya bisa dibaca di /var/log. Tapi ini belum tentu benar, log system bisa dikirim ke sistem lain. Kita baca membaca konfigurasi program di mana log disimpan. Jika program memakai syslog, kita perlu membaca konfigurasi syslog.

Jika memang sudah jelas dari error messagenya (misalnya: “file abc not found”) maka tanganilah error itu (buat file abc-nya, atau mungkin salah path file-nya). Sayangnya kadang  error message tertentu seperti “resource temporarily unavailable”, penyebabnya bisa banyak. Salah satu cara mencari solusi tentunya adalah dengan mencari pesan error di internet plus nama program yang berhubungan, misalnya “docker resource temporarily unavailable” (jika konteksnya ketika memakai docker). Jika ketemu orang dengan masalah yang sama dan gejala yang sama, maka mungkin itu solusinya.

Mencari masalah di internet juga sering kali merupakan cara terbaik, karena kadang solusi suatu masalah sangat panjang. Tapi jika kita tidak mengerti akar suatu permasalahan, kadang solusinya juga bisa melenceng jauh.

Membaca status program

Kita bisa mengecek apakah program sudah dijalankan dengan parameter yang benar dan dengan environment yang benar menggunakan filesystem /proc. Ini terutama dibutuhkan jika program dijalankan oleh skrip atau program lain. Dengan mengetahui PID (process id , proses adalah instance program yang sedang berjalan) kita bisa membaca status di /proc/PID.

Beberapa yang penting misalnya “cwd” adalah link ke direktori program saat ini. File “environ” berisi environment variable ketika aplikasi dijalankan. File “cmdline” berisi parameter ketika program dijalankan. Masih banyak lagi file-file lain yang berguna untuk mengecek status program saat ini.

Membaca Dokumentasi dan Changelog

Masalah lain yang mungkin ditemui ketika upgrade software adalah: suatu fitur diubah atau hilang. Dalam kasus ini yang perlu dibaca bukan hanya file log tapi juga  dokumentasi aplikasi tersebut.

Beberapa aplikasi memiliki tool atau opsi untuk mengecek apakah file konfigurasi sudah benar atau belum (terutama untuk mengetahui apakah di versi terbaru opsi masih valid), ini bisa digunakan untuk mencari tahu sumber error. Contohnya apache memiliki “apachectl configtest”.

Debugging Masalah Jaringan

Untuk masalah jaringan  biasanya masalahnya adalah tentang konektivitas (sesuatu tidak bisa diakses atau paket tidak diteruskan). Saya memakai gabungan banyak tool untuk debugging. Tool dasar pertama adalah “ping” (mengecek konektivitas ke host lain) dan traceroute untuk mengetahui route yang diambil paket. Program “ip” juga memiliki opsi untuk mengecek route di host saat ini: “ip route get to TUJUAN” (misalnya “ip route get to TUJUAN").

Sering kali program tidak bisa diakses dari host lain karena memang hanya menerima koneksi dari localhost. Ini bisa dicek dengan program netstat (terutama dengan opsi -l untuk melihat program yang statusnya “listening”). Setelah diperbaiki konfigurasinya kadang program menolak karena filter di dalam program tersebut. Contohnya: postgreSQL memiliki opsi listen_interface di postgresql.conf, tapi jika sudah diset, postgresSQL akan mengecek ke pg_hba.conf untuk mengecek apakah IP spesifik tertentu diijinkan untuk melakukan koneksi atau tidak. Dalam semua kasus kita perlu memahami hal-hal seperti ini.

Jika host bisa dihubungi dengan ping tapi ada service yang tidak bisa diakses dari host lain, maka saya akan memakai netcat untuk mengetes. Kadang saya pakai juga  “nmap”  untuk mengecek semua port untuk mengecek apakah ISP memblock port tertentu.

Jika masalahnya ada di firewall yang kita kontrol (bukan firewallnya ISP) maka kita perlu mendebug masalahnya dengan logging. Baik iptables maupun nftables mendukung logging untuk mencari tahu kenapa sebuah paket di-drop.

Senjata andalan terakhir adalah tcpdump dan wireshark. Kedua program ini dapat menangkap semua paket yang lewat. Jika yang bermasalah adalah komputer lokal, saya akan langsung memakai wireshark dengan GUI yang enak dilihat. Jika masalahnya di komputer remote, saya akan memakai tcpdump. Kadang output tekstual tcdump sudah cukup, tapi jika masih kurang, saya akan memakai opsi -w untuk menuliskan hasil capture ke file pcap yang bisa dicopy ke desktop lalu dilihat isinya secara visual.

Debugging Program

Kebanyakan program memiliki beberapa opsi dasar untuk debugging. Biasanya opsi  yang penting adalah: menampilkan log, atau menaikkan level logging dan membuat agar program tidak berjalan di latar belakang (foreground mode atau no daemon mode). Dua hal ini biasanya sudah cukup untuk mencari tahu kebanyakan error.

Jika semua pendekatan sudah mentok maka pendekatan programming akan saya ambil. Pertama adalah dengan  strace dan ltrace. Kedua program low level ini berguna untuk tracing, strace untuk syscall dan ltrace untuk library call. Kadang program-program ini bisa dipakai tanpa pengetahuan programming, tapi biasanya butuh pengetahuan programming terutama jika masalahnya kompleks.

Tracing di sini berarti semua pemanggilan library (untuk ltrace) dan system call (untuk strace) akan ditampilkan. Contoh paling sederhana adalah untuk debugging: kenapa aplikasi tidak membaca file sesuatu yang tercantum di konfigurasi. Dari hasil tracing bisa dilihat apakah filenya namapakcagegagal dibuka (misalnya masalah permission) atau ternyata tidak ditemukan (mungkin karena salah nama file, atau programnya menambahkan prefix/suffix tertentu sehingga tidak ketemu).

Contoh memakai strace untuk mengecek file apa yang dicoba dibuka oleh sebuah aplikasi dalah dengan membatasi output hanya syscall open dan access saja.

strace -e open,access namaprogram

Debugging berikutnya sudah sangat butuh skill programming, yaitu memakai debugger gdb. Dengan menginstall debug symbol, umumnya berbagai masalah crash bisa dicari tahu sebabnya. Andaikan debug symbol tidak cukup, maka langkah berikutnya adalah: compile ulang aplikasinya, lalu debug di level source code.

Compile ulang ini tidak sesulit jaman dulu. Di Debian kita bisa dengan mudah menggunakan “apt-get source namapackage” untuk mendownload source code package tertentu, dan “apt-get build-dep namapackage” untuk mendownload seluruh library/tool yang diperlukan untuk membuat package tersebut. Selanjutnya kita bisa mengcompile dan mendebug program dengan mudah.

Masalah performance

Masalah yang cukup sulit dicari adalah masalah performance karena biasanya tidak ada pesan di log. Masalah performance juga biasanya sangat spesifik pada aplikasi atau software server tertentu. Tapi Sebelum mengecek spesifik software tersebut cek dulu penggunaan CPU dan memory dengan top.

Apakah ada proses yang memakan banyak CPU atau memori? jika ada, harus diperhatikan karena itu mungkin sumber masalah utama. Jadi ketika database tiba-tiba lambat, belum tentu server databasenya bermasalah, mungkin saja ada proses lain yang memakan terlalu banyak CPU atau memori dan efeknya terasa ke query database.

Sebuah program bisa melakukan banyak langkah, dan kadang langkah tertentu menghambat langkah berikutnya, dan secara total aksi tertentu menjadi sangat lambat. Contoh sederhana: sebuah program bisa melakukan reverse DNS lookup untuk memetakan IP menjadi nama, dan menampilkan informasi tersebut ke log file. Jika ada masalah dengan DNS, maka proses yang tujuannya hanya informatif (melog informasi) ini butuh waktu lama karena masih menunggu respons dari server DNS.

Dari sudut pandang programmer, ada banyak tool yang bisa dipakai untuk debugging masalah performance. Tool ini meliputi software profiler spesifik untuk bahasa/teknologi tertentu (misalnya ada profiler khusus untuk Java, Python dsb), dan juga profiler system secara umum (misalnya Systemtap dan perf).

Penutup

Semua langkah ini biasanya cukup untuk menemukan masalah dan memperbaiki masalah tertentu. Namun demikian tidak semua masalah bisa diselesaikan dengan mudah.

Beberapa masalah tiba-tiba hilang karena restart program  (jika masalahnya ada di programnya), atau restart komputer (jika masalahnya ada di kernelnya). Dalam kasus ini akar permasalahan harus dicari, karena pasti akan muncul lagi.

Selain itu tidak semua masalah bisa diatasi dengan singkat, contohnya: ketika upgrade program tertentu, program tersebut butuh upgrade library, dan setelah upgrade library, program lain yang closed source ternyata berhenti berjalan. Akhirnya program harus dijalankan di chroot atau Docker dengan library lama dan ini butuh waktu.

Semoga langkah-langkah yang diberikan di tulisan ini berguna. Intinya sih jangan semuanya hanya proses coba-coba, tapi pahamilah akar masalahnya.