Blog Feed

Hidup Nomaden, Pindah Negara 3 Kali dalam Setahun (1/3)

Selama kurun waktu Maret 2022 hingga Maret 2023, saya berpindah tempat kerja dua kali ke tiga negara. Dimulai dengan bekerja di Jepang, Prancis, lalu Belanda. Kehidupan seorang imigran bagi saya jauh dari kata mudah, terlebih jika harus berganti residency dalam kurun waktu yang singkat. Tulisan ini dibuat untuk menjadi memori bahwa saya pernah melalui hal ini.

Jepang – Japan – 日本

Saya mendaftar di sebuah startup drone di Tokyo sebagai mahasiswa magang tingkat akhir kuliah. Idealnya, saya akan mulai bekerja di Jepang pada awal April 2020, tetapi pandemi membuat perusahaan menunda segala proses perekrutan. Hingga pada September 2020, mereka memutuskan untuk berkesperimen dengan memulai magang jarak jauh. Hasilnya cukup baik, Februari 2021, saya ditawari kontrak untuk menjadi full-time engineer.

We will wait for you to come here”, kata CTO perusahaan tersebut.

Kedatangan

Maret 2022, setelah menutup total perbatasannya untuk imigran selama 2 tahun, Jepang akhirnya membolehkan kelompok-kelompok tertentu untuk memperoleh visa. Saya masuk ke dalam kelompok pekerja, salah satu bagian dari kelompok itu. Pembuatan visa Jepang dilakukan di konsulat yang sesuai dengan wilayah domisili pelamar, seperti yang dijelaskan di sini. Karena ber-KTP dari Sulawesi Tengah, visa saya dibuat di Kantor Konsuler Jepang di Makassar. Jika seluruh dokumen persayarat sudah lengkap, pemohon bisa membuat jadwal untuk pembuatan visa. Kemudian konsuler akan memberikan informasi jika visa sudah dapat diambil, durasi pembuatannya 5 hari kerja bagi saya.

Makanan Selama Karantina

Dengan membawa 1 tas ransel, 1 koper kabin, dan 1 koper besar, berangkatlah saya ke Jepang menumpang maskapai penerbangan Japan Airlines. Masih dalam suasana pandemi, ada proses khusus yang harus saya lalui setibanya di Bandara Narita. Sialnya, penumpang penerbangan yang tiba di sore hari harus rela antri lebih lama untuk akhirnya dibolehkan ke rumah atau hotel karantina. Dari jam 4 sore sampai jam 3 pagi, hampir 12 jam lamanya saya mengikuti protokol mereka mulai dari turun pesawat hingga masuk karantina[1]. Beruntung, hotel yang disediakan sangat layak dan seluruh makanan diberikan secara gratis dan bersertifikat halal.

Perjalanan

Lepas dari hotel karantina, saya masuk ke kamar hotel lain di daerah Edogawa di Tokyo. Kamar ini dibayarkan oleh kantor karena kamar kos yang saya pesan belum pula masuk tanggal mulai kontraknya. Jauh dari bayangan saya tentang kamar hotel, ruangan 10 meter persegi itu bagi saya lebih cocok disebut sebagai kos. Dari kamar ini, saya berangkat kerja tiap hari dengan menumpang bis kota. Di kamar ini juga, saya makan ala kadarnya, cukup dengan mie instan dan onigiri dari convenient store.

Hari pertama di bulan April, saya pindah ke kamar kos yang saya sewa melalui website online. Bayar perbulan seharga 65.000 JPY, sekitar 450 EUR, dan kamar yang saya dapatkan berukuran 7.5 meter persegi, kamar mandi pun di luar. Kecil sekali, sesak rasanya setelah meletakkan seluruh barang yang bahkan tidak seberapa jumlahnya. Untuk urusan makan, kos ini menyediakan tiga dapur (2 besar, 1 kecil) yang digunakan oleh hampir 30 orang di rumah itu. Alat dapurnya lengkap (termasuk rice cooker) sehingga tak perlu beli peralatan baru, cukup beli bumbu masak saja. Sisi baiknya, semua administrasi bisa dilakukan dalam bahasa Inggris, cocok bagi saya yang hanya mengetahui frasa Jepang melalu anime.

Dengan bis kota, cukup 15 menit untuk berangkat dari kos dan tiba di kantor. Di hari dan jam tertentu, sopir dibalik stir lebih suka ngebut sehingga cukup 11-12 menit bis sudah berhenti di halte Edogawa rinkai yūbinkyoku mae (江戸川臨海郵便局). Kerja dimulai pukul sembilan pagi, jeda makan siang selama satu jam, dan stretching kecil di tiap jam agar badan tak kaku. Kerjaan utamaku adalah membuat program (dengan C++ dan Python) untuk drone kantor, kemudian menguji kodingan itu dengan ground atau flight test jika perlu. Pukul enam sore, saatnya pulang dengan menumpang bis lagi. Begitu kiranya gambaran hidup di kantor.

Sepulang kerja, hal yang paling saya nantikan adalah makan udon di stasiun Nishikasai (西葛西), dua kali seminggu jatahnya. Di akhir pekan, kadang saya jalan mengelilingi Tokyo dan daerah sekitarnya, sendiri ataupun dengan teman-teman Indonesia. Satu idul fitri dan satu idul adha saya lalui di sana, beruntung Masjid Indonesia Tokyo (MIT) menyediakan sarana untuk merasa seakan lebaran di rumah. Untuk liburan panjang, saya mengambil cuti ke Kyoto, kota yang kental dengan budaya Jepangnya mungkin karena pernah menjadi ibu kota Jepang. Begitu kiranya gambaran hidup di luar kantor.

Keberangkatan

Sebelum berangkat ke Jepang, di Januari 2022, saya mengajak Oi untuk menikah. Oi akan melanjutkan kuliah magister di Belanda dan saya janji akan berusaha untuk menyusulnya ke sana, minimal ke Eropa. Saat mengatakan itu, belum ada tawaran kerja dari perusahaan sana. Namun, dengan bismillah, saya tekadkan untuk berusaha mencarinya. Tanggal 4 Juni, keluarga saya datang ke rumah Oi untuk melakukan lamaran. Saya di Jepang, Oi di Thailand, cukuplah keluarga yang mewakilkan niat suci kami. Kedua keluarga sepakat untuk melaksanakan pernikahan tanggal 13 Agustus 2022.

Di akhir bulan Juni 2022, saya menandatangani kontrak kerja dari perusahaan Prancis. Kawan, ini adalah salah satu doa saya yang dikabulkan Yang Maha Kuasa.

Dengan kontrak kerja itu, saya menutup bagian perjalanan singkat saya di Jepang.


[1] Makanan terakhir yang saya makan di perjalanan ke Jepang adalah sarapan. Tak ada makan siang di pesawat. Selama protokol transisi karantina pun tak diperbolehkan untuk makan di luar area kedatangan (tidak ada restoran di sana). Akhirnya, setelah keluar gerbang kedatangan, saya meminta ke petugas untuk keluar sebentar membeli makan. Tidak boleh, kata petugas. Beruntung ada seorang mas-mas, umurnya sepantaran saya, bersedia membelikan onigiri tuna mayo dan air mineral untuk pengganjal perut saat itu. Terima kasih, saya tidak tahu kapan bisa membalasnya.

Tips Main Katla, Ini Dia Tebakan Pertama Terbaik

Setelah permainan tebakan kata Wordle viral dan dimainkan jutaan orang, Indonesia punya versinya sendiri! Katla, adalah versi Indonesia dari game tersebut. Dibuat oleh Fatih Katlifa, game ini kini meramaikan jagat Twitter, TikTok, dan Instagram Indonesia.

Cara Bermain Katla

Cara bermain Katla cukup sederhana, sama seperti aturan Wordle. Mengutip dari situsnya, setiap tebakan harus merupakan kata valid 5 huruf sesuai KBBI dan pemain memiliki 6 kesempatan untuk menebak.

Setiap tebakan tentunya sangat berharga, terlebih jika kita bisa mendapat banyak petunjuk. Untuk itu, statistik dapat digunakan untuk memaksimalkan peluang memperoleh tebakan terbaik. Mari kita bahas!

Statistik

Untuk pengolahan data, bahasa pemrograman yang akan digunakan adalah Python. Kata-kata yang digunakan diperoleh dari source code situs tersebut, kemudian disimpan dalam format .txt. Bagi yang tertarik untuk membaca cuplikan script Python-nya, dapat dilihat di artikel ini.

Selanjutnya, kita dapat menghitung jumlah kemunculan tiap alfabet pada daftar kata tersebut. Dengan menggunakan script Python, diperoleh hasil seperti gambar di bawah ini.

Statistik 1: Distribusi peluang kemunculan huruf

Dari grafik tersebut, dapat dilihat bahwa huruf ‘a’ adalah huruf yang paling mendominasi, dengan peluang kemunculan lebih dari 15%. Huruf selanjutnya yaitu ‘e’ dengan peluang kemunculan hampir 8%. Dengan hasil ini, kita dapat menyimpulkan bahwa dua huruf ini harus dimasukkan di awal tebakan kita.

Salah satu yang penting dari cara kita menebak adalah posisi huruf. Huruf ‘a’ pada awal kata tentu memiliki peluang yang berbeda dengan huruf ‘a’ pada urutan lain. Untuk itu, kita hrus meninjau peluang huruf tersebut muncul di tiap urutan.

Peluang muncul di Urutan Tertentu

Dari gambar di atas, dapat disimpulkan bahwa huruf ‘a’ paling sering muncul di urutan keempat pada sebuah kata. Meskipun huruf ‘a’ juga menjadi huruf yang paling sering berada di posisi kedua sebuah kata, tentu kita tidak ingin menggunakannya dua kali di awal tebakan kita. Huruf selanjutnya yang dapat kita pilih adalah ‘e’ di posisi kedua.

Tebakan Terbaik

Berdasarkan dua kriteria peluang tersebut, secara kasar kita dapat langsung menjumlahkan nilai peluangnya setelah dinormalisasi. Dengan menggunakan script Python, diperoleh kata terbaik untuk tebakan pertama adalah ‘serak’! Selanjutnya, untuk tebakan kedua, kita dapat menggunakan kata ‘pulih’.

Dengan menggunakan kombinasi dua kata ini, semoga anda dapat menebak kata dibalik teka-tekinya dengan mudah. Selamat bermain!


Jika anda tertarik dengan stastik serupa, anda dapat menonton video dari 3Blue1Brown. Di video tersebut, Grant membahas tentang metode penentuan tebakan pertama untuk Wordle berdasarkan Teori Informasi.

What’s the Best Initial Guess for Wordle?

Recently, a daily word game called Wordle has gone viral on Twitter. The rule of the game is simple, guess a five letters word in 6 tries. Some of the hint after guessing a word is shown in the figure below.

I found the game as interesting and challenging since there are hundreds of thousands of words in English but it is not my native language. Luckily I know Python! I calculated the statistics of letters occurrence in English and make an informed initial guess

Statistics!

First thing first, I load all the words from a .txt file provided on GitHub. Since the quiz only considers a five letters word, we eliminate all the words with length other than that. Some words might not be in the quiz dictionary, but I just let it be.

Next, we calculate the occurrence of the alphabet. in the five letters words. This can be done easily by using dictionary in Python, iterate through all the words and letters, count it, and normalize the data. The code can be seen below.

import string
letter_count = dict.fromkeys(string.ascii_lowercase, 0)

for word in words_5_letters:
  for letter in word:
    letter_count[letter] = letter_count[letter] + 1

total_count = sum(letter_count.values())

letter_count_normalized = {key: value/total_count for key, value in letter_count.items()}

sorted_letter_prob = {k: v for k, v in sorted(letter_count_normalized.items(), key=lambda item: item[1], reverse=True)}
Statistics 1: English Letter Probability in 5 Letters Words

The result shows that more than 10% of the letters is ‘a’, with ‘e’ trails behind at almost 10% and ‘s’ at slightly higher than 8%. This is slightly different from the distribution for words with any length, shown in the image below. With this statistics, we are confident that we should include those letters in our initial guess.

Frequency Table
English Letter Frequency (source)

Another statistics, let’s count the occurrence probability of a word in a letter. With “’Pandas’ library, the code is shown below.

import pandas as pd

data = dict.fromkeys(string.ascii_lowercase, [0, 0, 0, 0, 0])
df = pd.DataFrame.from_dict(data, orient='index')
df.columns = [1, 2, 3, 4, 5]

for word in words_5_letters:
  for count,letter in enumerate(word):
    df.loc[letter][count+1] = df.loc[letter][count+1] + 1
        
df_transposed = df.transpose()
df_normalized = df_transposed.div(df_transposed.sum(axis=1), axis=0)

The result is shown in the figure below. One can see that the most common letter for first to fifth position in a word are ‘s’, ‘a’, ‘r’, ‘e’, and ‘s’. This can be a hint on what first word is good as a guess. However, since using ‘s’ double is not efficient, we can substitute the first letter with the next high occurring letter, ‘c’.

Statistics 2: Letter Occurrence Probability in the Words

Hold up! what about the Statistics 1? Yes! We should also consider it so let us do the calculation! Suppose that we consider both Statistics 1 and 2 is equally important so we can measure the most probable word by averaging those criteria. The function to calculate the score is written below

def count_score(word):
  count_crit_1 = 0
  count_crit_2 = 0

  for count,letter in enumerate(word):
    count_crit_1 = count_crit_1 + sorted_letter_prob[letter]/100
    count_crit_2 = count_crit_2 + df_normalized.iloc[count][letter]
    
  return (count_crit_1 + count_crit_2)/2*100

Making an Informed Guess

To make an initial guess, let us iterate through all the five letters words and see which one has the highest probability. Note that we should not include a word with doubled letter since it is not an efficient guess. The code is shown below.

def letter_is_not_doubled(check_string):
  count = {}
  condition = True
    
  for s in check_string:
    if s in count:
      count[s] += 1
    else:
      count[s] = 1
        
  for key in count.keys():
    condition = condition and (count[key] == 1)
        
  return condition
words_score = {}

for word in words_5_letters:
  if letter_is_not_doubled(word):
    words_score[word] = count_score(word)
        
sorted_words_score = {k: v for k, v in sorted(words_score.items(), key=lambda item: item[1], reverse=True)}

From this calculation, we found that the highest probability word is ‘tares’. Thus, we can use this word as our first guess, an informed guess!

Once you play the quiz, you will notice that one guess is not enough so we need another one. For our next guess, we do not want to include the letters already exist in the first guess. Let us define a function to filter out which letter we want to exclude and calculate the score again.

def not_contain_this_letter(word, not_contain):
    condition = True
    
    for letter in not_contain:
        condition = condition and (letter not in word)
        
    return condition
not_contain = 'tares'

word_guess = [word for word in words_5_letters if not_contain_this_letter(word, not_contain)]

words_score_2 = {}

for word in word_guess:
    if letter_is_not_doubled(word):
        words_score_2[word] = count_score(word)
        
sorted_words_score_2 = {k: v for k, v in sorted(words_score_2.items(), key=lambda item: item[1], reverse=True)}
sorted_words_score_2

From this filtering, we found out that the best word for the second guess is ‘colin’! Using the same technique, by excluding ‘tares’ and ‘colin’ we found that the third best guess in case two is not enough is ‘bumpy’.


There you go! Make “tares” as your initial guess, following with ‘colin‘ for the second one, and ‘bumpy’ in case you think you need a third one.

Now you can play Wordle with statistically best initial guess. Good luck!

Personal Note on Learning New Things: Case Study on Chess

I started playing chess when I was a kid, but not regularly. Several years later, after watching the Queen’s Gambit on Netflix in January 2021, I began playing chess again. With the pandemic situation, outside the working hour, I restricted my activity in crowded places and I found chess can be a fun activity to do.

How the Journey Goes

In my initial games on chess on chess.com , I used “fazlurnu” as my username. After several games, my rating was below 800 which is around the average rating on chess.com for a game of rapid chess (10-minute time format). I thought I could improve so I keep on playing.

Rapid Time Format Rating Distribution on Chess.com

Two months later, in March 2021, my rating went to 1200. After that, I took a pause on chess because it was too time-consuming and started to distract me from important things. I closed my previous account.

On June 1st, 2021 I created a new one, with a username of toko_material. Within 5 months after opening that account. I reach 1636 for Rapid chess, which is higher than 98% of all the players, or in other words, the top 2% on chess.com.

My Rapid Chess Rating as of November 9th, 2021

I realize I made some important approaches on my chess journey, allowing me to go from average in the beginning, to be in the top 2% at this moment. I am sure it can be used as a reflection to study or master new things.

Here are some important notes.

Know the Basics, Know the Theories

When I started with the average rating, I had no clue of the theory in chess. I only knew only the rule, like how the pieces move, what is a checkmate, etc. As my rating shows, if you know this then you are an average.

Luckily, chess.com provides learning features where you can study several theories related to chess, starting from opening to end game. One theory that opens up my mind is the value of each piece is not the same. With this, you know when to trade certain pieces. You can even trade two knights and a bishop for a queen and the game is not losing for you.

The Value of the Chess Pieces. During the beginning of our chess… | by The  Chess King Shop | Medium

Another theory is the advantage of knight and bishop. You may see that both pieces are equal but in certain situations actually one of them is worth more than the other. Take a look at a closed game below, the bishops are obviously useless since their movement is restricted by the pawn. In this condition, a knight is better than a bishop.

Open vs Closed Chess Game - The Chess Website
A closed game

There are many more theories in chess, learning them gives you a lot of advantages compared to those who don’t. Of course, you can discover the theory by yourself from months or years of experience, but you should avoid reinventing the wheel!

Learn from the Professionals

There are millions of chess players in the world and some of them are in the highest-ranked position. Luckily, in this age, you can watch their games and learn from them!

Personally, I prefer watching Agadmator Chess Channel on Youtube. Antonio, the host, is a knowledgeable chess player and with sharp analysis and fun jokes. He analyses world-class chess players’ moves by using the help of chess engines.

In the picture below, Magnus Carlsen, the world chess champion, sacrificed his queen for two bishops and a knight when fighting Anish Giri. In the end, with excellent pieces coordination, Carlsen won the game. This proves the theory that a queen is worth as much as those three pieces and you can win the game with that queen sacrifice.

Magnus Carlsen vs Anish Giri match review by Agadmator

I have watched countless videos from Agadmator, I think it is a good help to improve my reasoning in making moves during my chess games.

Practice, Practice, and Practice

It is no secret that practice improves our performance, as the saying goes “practice makes perfect.” Repetition helps me to learn, evaluate, and understand chess more.

I have been practicing chess almost every day since June 2021 and I think it is one of the reasons for my improvement. Surely there were times where I lost my games, but with evaluations and having a small break, I can bounce back to the track.

With practicing, I personally think I develop a kind of memory. I do not need to think a lot, but I know that the move I am going to make is a good one and it will work. Analyzing the pattern, or choosing which trade to make, will also be easier.


This chess journey has taught me that mastering a new thing is always possible. I went from average to top 2% chess player on chess.com within 9 months, something I did not expect when I started to play chess regularly.

I am sure, with a good strategy, anyone can learn new things and master it within a relatively short period.

As the saying goes, “Never stop learning, because life never stops teaching”.

Magnetometer Calibration Using Levenberg-Marquardt Algorithm

Recently I worked on a magnetometer calibration method. This method is based on Levenberg-Marquardt Algorithm (LMA), a non-linear least-squares optimization algorithm. The method is implemented on ArduPilot and PX4, an open-source flight controller firmware.

I have to admit, formulizing mathematical notion from code is not straightforward. I spent several days to learn from LMA basic and finally understanding the sphere fit and ellipsoid fit algorithm.

In case you are wondering about the mathematical part, I write the formulation of the algorithm on PDF since it can’t be viewed on WordPress (unless I pay more for the plugin).

Click here for the document.

Duka Untuk 1000 Korban COVID-19 di Sulawesi Tengah

Palu, 14 Agustus 2021

Tanggal 26 Maret 2020, kasus pertama COVID-19 terdeteksi di Sulawesi Tengah, tepatnya di Kota Palu. Pasien tersebut merupakan pelaku perjalanan yang kemungkinan tertular saat sebelum kembali ke Palu. Lebih dari 500 hari kemudian, COVID-19 masih terdeteksi di Sulawesi Tengah bahkan dalam keadaan yang lebih berbahaya.

Hingga hari Sabtu, 14 Agustus 2021, tercatat lebih dari 1000 kasus meninggal yang diakibatkan oleh COVID-19 di Sulawesi Tengah. Ada catatan penting yang perlu kita renungkan, 614 kasus meninggal atau 60.4% dari total kasus meninggal terjadi di 1,5 bulan terakhir. Ini berarti, di Sulawesi Tengah, 1 orang meninggal akibat COVID-19 setiap 2 jam. Mungkin, kerabat kita sudah menjadi korban.

Dari 1017 kasus meninggal terkait COVID-19, angka terbesar datang dari Kabupaten Banggai sebanyak 218 kasus, disusul Kota Palu sebanyak 165 kasus. Banggai Laut, kabupaten terjauh dari Kota Palu mencatat 19 kasus meninggal akibat virus ini. Tidak ada kota atau kabupaten yang bebas dari COVID-19, penyakit ini telah mewabah ke segala penjuru hingga ke pelosok.

Lebih Mencekam dari Pulau Jawa

Pada situs Kementerian Kesehatan, terdapat tiga kategori transmisi komunitas untuk mengukur keparahan penyebaran COVID-19. Tiga kategori ini adalah Kasus Konfirmasi, Rawat Inap Rumah Sakit, dan Kematian. Perhitungan yang dilakukan Kementerian Kesehatan untuk kategori-kategori tersebut dibagi per 100 ribu penduduk per minggu. Dengan cara ini, kita dapat melihat tingkat “kepadatan” COVID-19 di masyarakat pada suatu daerah.

Sulawesi Tengah, per tanggal 11 Agustus 2021, mencatat 203,76 kasus terkonfirmasi positif per 100 ribu penduduk per minggu. Angka ini jauh lebih tinggi dari puncak kasus COVID-19 di Jawa Barat dengan 128,9, atau di Banten dengan 189,54 kasus terkonfirmasi positif per 100 ribu penduduk per minggu. Pada kategori ini, penyebaran COVID-19 di Sulawesi Tengah juga “lebih padat” dibandingkan dengan Jawa Tengah dan Jawa Timur.

Dengan jumlah fasilitas kesehatan yang lebih sedikit dari provinsi-provinsi tersebut, tentu beban yang dihadapi puskesmas, rumah sakit, dan tenaga Kesehatan kita lebih berat. Jelas, kondisi pandemi di provinsi kita lebih mencekam dari Pulau Jawa. Kita berada dalam kondisi krisis.

Pada tanggal 13 Agustus 2021, Sulawesi Tengah berada pada 6 besar provinsi dengan kasus terkonfirmasi per 100 ribu penduduk per minggu terbanyak. Kita memuncaki klasemen di Pulau Sulawesi, menjadi daerah yang paling berbahaya di antara provinsi-provinsi lainnya.

Gambaran kondisi krisis ini jelas terlihat pada masyarakat kita. Di Banggai misalnya, dalam sehari terdapat 12 Jenazah yang “antri” untuk pemulasaran COVID-19 pada tanggal 4 Agustus 2021. Kemudian di Palu, di hari yang sama, dr. Rochmat selaku Ketua Satgas COVID-19 Kota Palu, menyampaikan bahwa 7 orang penderita COVID-19 meninggal saat isolasi mandiri di minggu itu.

Mari kita renungkan sekali lagi, kita berada dalam kondisi krisis. Kasus COVID-19 di Sulawesi Tengah jauh lebih mencekam dari Pulau Jawa.

PPKM Level IV

Efektif mulai tanggal 10 Agustus hingga 23 Agustus 2021, terdapat tiga daerah yang harus menjalani Pemberlakuan Pembatasan Kegiatan Masyarakat (PPKM) Level IV di Sulawesi Tengah. Tiga daerah tersebut adalah Palu, Banggai, dan Poso dengan lebih dari 1000 kasus aktif COVID-19. Hal ini tentu merupakan upaya pemerintah untuk mengurangi penyebaran virus ini di tengah masyarakat.

Masyarakat tidak diperbolehkan mengadakan acara yang melibatkan keramaian, termasuk pesta dan resepsi pernikahan. Kegiatan-kegiatan pada tempat umum juga dibatasi jumlah warga dan jam operasionalnya. Pun, menurut instruksi gubernur, bilamana ada keramaian pada lingkungan masyarakat, protokol kesehatan 5M harus dipatuhi.

Lain aturan dengan lapangan, beberapa kali kami menjumpai laporan mengenai keramaian yang terjadi di masyarakat. Misalnya, Wali Kota Palu menganjurkan masyarakat untuk melakukan kerja bakti demi mengejar target penghargaan Adipura. Kita tahu, tidak ada kerja bakti yang tidak menimbulkan keramaian, pun tidak mungkin dilakukan secara virtual. Alih-alih berupaya menurukan penyebaran COVID-19 di masyarakat, ajakan kerja bakti ini justru membuka celah baru bagi virus ini.

Mari kita renungkan sekali lagi, kita berada dalam kondisi krisis. Sudahi acara beramai-ramai, tekan laju penyebaran COVID-19!

Lawan COVID-19!

Simpul-simpul relawan yang diinisiasi oleh warga mulai terjalin. Sebut saja Roa Jaga Roa, gerakan oleh wartawan di Kota Palu yang bertujuan untuk membantu pasien-pasien isolasi mandiri (isoman). Beberapa nama lain yang bisa kami sebutkan adalah JagaPalu, Sigi Mosijagai, dan Relawan Nagasi oleh Pemerintah Kota Palu.

Gerakan relawan ini fokus pada penanganan pasien yang telah terkonfirmasi COVID-19. Ibarat genting bocor saat hujan deras, mereka membantu pemerintah “mengeringkan” lantai untuk mencegah korban jiwa. Kawan-kawan relawan Mendedikasikan energi, waktu, dan biaya atas nama kemanusian.

Melawan COVID-19 tidak cukup dengan mengeringkan lantai yang basah tersebut. Masalah di bagian hulu harus diatasi, yaitu dengan membenahi genting yang bocor. Laju penyebaran virus ini harus ditekan sehingga jumlah orang yang terjangkit dan meninggal berkurang. Ikhtiar membenahi genting yang bocor ini hanya bisa dilakukan oleh pemerintah, baik provinsi maupun kabupaten/kota, yang memiliki sumber daya dan kuasa. Instrumen-instrumen yang dapat digunakan tentu sudah termuat dalam arahan PPKM Level IV, yang kemudian harus diadaptasi sesuai kebutuhan masing-masing daerah.

Masyarakat dan pemerintah harus bergandengan tangan menekan penyebaran COVID-19. Pemerintah berkewajiban untuk meningkatkan kualitas dan kuantitas testing, tracing, dan treatment. Sementara masyarakat harus menegakkan protokol kesehatan 5M; memakai masker, mencuci tangan, menjaga jarak, menjauhi kerumunan, dan mengurangi mobilitas. Dalam melaksanakan perannya, masyarakat dan pemerintah perlu saling mengingatkan sehingga penanganan krisis akibat wabah dapat berjalan dengan baik.


Note: Tulisan yang sama telah dipublikasi di Harian Mercusuar, daring dan luring, dengan sedikit perubahan.

Python vs Julia: Speed Test on Fibonacci Sequence

Recently MIT released a course on Computational Thinking with code 18.S191 and it is available on YouTube. I can code in C++ and Python, so the founder’s claim that this code is as fast as C and as easy as Python gains my interest.

Introduction to Julia

Julia is created in 2009 and first introduced to public in 2012. The developers aimed for scientific computing, machine learning, data mining, and large-scale linear algebra. We might have heard this application on Python, but Julia gives advantages to programmer compared to Python.

Continue reading Python vs Julia: Speed Test on Fibonacci Sequence

Humanitarian Robotics: Autonomous Landmine Detection Rover

Although war is not happening, the dangerous impact is still tangible today. Landmine has been one of the threats left by the past wars, killing 15,000–20,000 people every year according to UN Mine Action Service. Demining efforts cost US$ 300–1000 per mine and imposing danger to people, resulting one person is killed and two are injured for every mines cleared.

HRATC 2017

Robot can be really helpful in solving this problem, as it is designed to do the “dull, dirty, dangerous, and difficult” tasks. In 2017, IEEE Robotics Automation Society’s Special Interest Group on Humanitarian Technology (RAS–SIGHT) held a competition. The competition was Humanitarian Robotics and Automation Technology Challenge (HRATC), held at the 2017 International Conference on Robotics and Automation (ICRA’17).

Autonomous Landmine Detection Rover
Continue reading Humanitarian Robotics: Autonomous Landmine Detection Rover

Text Extraction from a Table Image, using PyTesseract and OpenCV

Extracting text from an image can be exhausting, especially when you have a lot to extract. One commonly known text extraction library is PyTesseract, an optical character recognition (OCR). This library will provide you text given an image.

PyTesseract is really helpful, the first time I knew PyTesseract, I directly used it to detect some a short text and the result is satisfying. Then, I used it to detect text from a table but the algorithm failed perform.

Figure 1. Direct use of PyTesseract to Detect Text in a Table

Figure 1 depicts the text detection result, with green boxes enclosing the detected words. You may realized that most of the text can’t be detected by the algorithm, especially numbers. In my case, these numbers are the essentials of the data, giving me value of daily COVID-19 cases from a local government in my hometown. So, how extract these information?


Getting Started

When writing an algorithm, I always try to think as if I’m teaching the algorithm the way humans do. This way, I can easily put the idea into more detailed algorithms.

When you’re reading a table, the first thing you might notice is the cells. A cell might be separated from another cell using a border (lines), which can be vertical or horizontal. After you identify the cell, you proceed to read the information within. Converting it into algorithm, you may divide the process into three processes, namely cells detection, region of interest (ROI) selection, and text extraction.

Continue reading Text Extraction from a Table Image, using PyTesseract and OpenCV

Monte Carlo Localization

Monte Carlo localization (MCL) is also known as particle filter localization. Given a map of an environment, the algorithm estimates the position and orientation of a robot as it moves and senses the surrounding. The algorithm uses particle to represent the distribution of likely states, with each particle representing a possible state.

The algorithm starts by distributing the particles in the configuration space. After that, it starts to loop its three main parts, namely motion update, sensor update, and resampling. During motion updates, particles are shifted into new possibilities of states. Whenever the robot senses the environment, the particles are resampled using the recursive Bayesian estimation. Lastly, the particles with higher likelihood tend to survive in the resampling process.

Continue reading Monte Carlo Localization