Selasa, 24 Februari 2026

Perbandingan Terbalik dan Lama Pengerjaan

Halo!

Mungkin teman-teman pernah membaca soal-soal sejenis ini:

Sebuah gedung akan selesai dibangun dalam waktu 6 bulan oleh 20 orang pekerja. Jika ternyata pembangunan gedung perlu selesai dalam waktu 4 bulan, berapa jumlah pekerja yang diperlukan?

Soal-soal sejenis ini biasanya digunakan untuk belajar materi perbandingan terbalik. Dalam perbandingan biasa, makin besar suatu nilai dalam perbandingan, makin besar pula nilai aslinya. Kebalikannya, dalam perbandingan terbalik, makin besar suatu nilai dalam perbandingan, justru makin kecil nilai aslinya.

Contoh perbandingan biasa adalah perbandingan jarak dengan lama perjalanan: jarak 60 km perlu 1 jam, maka jarak 120 km perlu 2 jam. Contoh perbandingan terbalik, ya, yang ada pada soal di atas: 6 bulan perlu 20 orang pekerja, maka 4 bulan perlu 30 orang pekerja.

Sebenarnya, rumus asalnya masih sama untuk perbandingan, yaitu x : y = A : B. Hanya saja, yang membedakannya adalah nilai x dan y yang digunakan. Pada perbandingan biasa, nilainya sesuai yang diketahui. Pada perbandingan terbalik, nilainya adalah kebalikannya (1/x). Nilai ini biasa kubayangkan sebagai "kecepatan" karena sering muncul pada soal yang membahas lama pengerjaan.

Meski cocok untuk belajar perbandingan terbalik, perhitungan ini belum tentu bisa diterapkan di dunia nyata. Terdapat bagian-bagian pekerjaan yang tidak bisa dipercepat meski ada tambahan tenaga ataupun bahan. Dalam contoh pembangunan gedung misalnya, menunggu hasil cor tidak bisa dipercepat dengan tambahan tenaga.

Dalam topik rekayasa perangkat lunak pun, konsepnya juga sama. Ada batas atas ukuran tim dalam mengerjakan suatu sistem atau komponen sistem (tergantung ukuran dan kompleksitasnya). Bila ukuran tim sudah melebihi batas itu, tidak ada peningkatan laju pengerjaan dan justru ada masalah baru, yaitu komunikasi antar-anggota tim.

Aku pernah menemukan soal di internet yang "agak lain" juga terkait perbandingan terbalik:

Sebuah orkestra menyelesaikan satu lagu dalam waktu 30 menit oleh 20 orang pemain. Jika mendapatkan 10 orang pemain tambahan, mereka akan menyelesaikan satu lagu dalam waktu berapa lama?

Ini, ceritanya, memainkan lagunya dipercepat begitukah? Ya ... namanya juga hanya contoh soal cerita. Tidak apa-apa meleset sedikit dari aslinya di dunia nyata.

Cukup sekian tulisanku kali ini. Sampai jumpa!

Sabtu, 31 Januari 2026

Spam Telepon yang Meresahkan

Halo!

Beberapa hari yang lalu, aku dapat panggilan telepon berulang kali tiap beberapa jam selama dua hari berturut-turut. Di satu sisi, aku jadi tahu bahwa menekan tombol volume pada ponsel akan menghentikan bunyi nada dering tanpa menutup/menerima teleponnya. Di sisi lain, kejadian ini membuatku kaget, waswas, dan resah.

Yang unik dari kejadian ini adalah bahwa sebagian besar nomor telepon yang digunakan hanya berbeda dua/tiga angka terakhir. Aku baru menyadarinya setelah membaca komentar dari pengguna lain di aplikasi Getcontact. Hal ini berarti bahwa si pelaku membeli/memesan nomor telepon dalam jumlah besar (grosir/batch).

Ini nomor-nomor telepon yang memanggilku (urut nomor):

Betul, ada 18 nomor telepon yang berbeda yang memanggilku. Semuanya kartu Mentari (+62858) dari penyedia Indosat. Tidak ada yang kutanggapi karena sebagian kecil di antaranya sudah ditandai sebagai spam di Getcontact. Selain itu, semua nomor ini tidak terdaftar di WhatsApp. Jadi, yang lainnya kuanggap sama saja karena rombongan. Sepertinya, hal ini antara telemarketing atau phishing.

Aku masih heran dengan kinerja lembaga yang berwenang dan bertugas mengatasi masalah-masalah ini. Urusan-urusan ini lamban diatasi, sedangkan urusan-urusan yang baik (tetapi "mengancam" pihak tertentu) langsung ditanggapi dengan ganas. Semoga ada perbaikan ke depannya (kalau bisa, segera).

Sampai di sini dahulu tulisanku. Tahun baru dibuka dengan panggilan-panggilan telepon tidak jelas. Semoga hal-hal baik terjadi ke depannya. Sampai jumpa!

Rabu, 31 Desember 2025

Refleksi Tahun 2025

Halo, halo!

Waktu kurasa cepat sekali berlalu. Ini sudah hari terakhir tahun 2025 Masehi. Seperti tahun lalu, aku ingin bercerita hal-hal yang kualami pada tahun ini. Ada banyak hal yang terjadi pada tahun ini; ada banyak perubahan yang kualami juga. Kita mulai dari perkuliahan mungkin, ya.

Perkuliahan

Alhamdulillah. Aku menyelesaikan studi Magister Ilmu Komputer UI! Aku mengambil topik segmentasi citra satelit untuk tugas akhir, sama dengan skripsiku. Hanya saja, untuk tesisku, segmentasinya lebih dari dua kelas/label. Tesisku menggunakan data segmentasi penutup lahan (sebagian menyebutnya tutupan lahan), sedangkan skripsiku waktu itu menggunakan data segmentasi bangunan (biner: bangunan vs. non-bangunan).

Aku membandingkan ruang warna yang berbeda dalam tahap pra-pengolahan (pre-processing). Total ada tujuh ruang warna yang kubandingkan:

  1. RGB
  2. CMY (lawan dari RGB)
  3. CIE XYZ
  4. HSV
  5. CIE LAB
  6. Ohta
  7. ProLab

Ternyata terdapat perbedaan kinerja model jaringan saraf konvolusional (CNN) untuk tiap ruang warna. Ini yang menjadi hasil percobaan dalam tesisku. (Tentu masih ada banyak hal lain lagi yang kubahas di dalamnya.)

Aku diwisuda pada tanggal 13 September 2025. Alhamdulillah, ayah-ibuku dan juga adik-adikku hadir lengkap. Ada nenek, pakdhe-budhe, dan mas-mbak sepupuku juga yang datang.

Kami makan siang bersama di Amanaia D'mall Depok (dahulu bernama Talaga Sampireun). Eh, ternyata ada teman seangkatan yang juga makan siang di sana bersama ayah-ibu dan saudaranya.

Ada cerita unik mengenai wisuda UI pada periodeku itu. Mungkin teman-teman sudah pernah mendengarnya. Yang belum tahu ini mungkin bisa mencari di media sosial dengan kata kunci "dana abadi wisuda ui".

Pekerjaan

Pertengahan tahun ini, aku mendapat dua pekerjaan yang sifatnya mitra/kontrak. Alhamdulillah, keduanya cukup fleksibel, bahkan aku bisa mengerjakannya dari rumah dan sesuai jam yang kuatur sendiri (asal target pengerjaan tercapai). Keduanya masih berjalan hingga saat ini.

Jam kerja yang fleksibel dan pengerjaan dari rumah memerlukan kedisiplinan yang lebih karena tantangan di rumah juga tidak kalah kuat. Aku menggunakan bekas meja komputer (komputernya sudah dikasihkan kepada orang lain) sebagai "meja kerja" di kamarku. Selain lebih ergonomis dari sisi postur tubuh saat duduk, aku juga jadi punya "ruang khusus" di dalam kamarku khusus terkait urusan pekerjaan.

Lain-Lain

Sudah lama aku tidak ikut mengurus proyek Luanti. Jam rapat rutin yang awalnya dimajukan karena aku bergabung dalam tim pun dikembalikan lagi seperti semula karena aku sudah lama tidak aktif. Namun, aku sempat turut menerjemahkan laman web Luanti ke dalam bahasa Indonesia saat akhirnya fitur terjemahan untuk laman webnya dipasang: luanti-org.github.io#26 (komentar).

Di sisi lain, aku menambahkan modul-modul baru ke halaman depan web Team Tanpa Les Indonesia. Ada dua modul baru, yaitu modul hitung mundur dan modul jadwal belajar UTBK 120 hari. Semoga penambahan ini bisa membantu para siswa lainnya. Oh, iya, yang membuat jadwal bukan aku. Aku hanya menambahkannya ke halaman web.

Bulan ini menjadi bulan ke-25 aku menyelesaikan tantangan bulanan di Duolingo berturut-turut! Aku pertama kali menyelesaikannya pada Desember 2023. Ternyata sudah dua tahun lebih aku mengikutinya. Oh, iya. Aku mengambil kursus bahasa Prancis dan Jepang. Aku sudah pernah belajar bahasa Prancis pada waktu SMA (sebagai mata pelajaran lintas minat). Jadi, aku mengambilnya agar aku tidak lupa dengan kosakatanya.

Penutup

Tahun ini penuh dengan perubahan yang kualami. Semoga hal-hal baik terus berdatangan pada tahun depan dan tahun-tahun berikutnya, ya. Aamiin.

Demikian tulisan penutup tahun 2025 Masehi dariku. Sampai jumpa tahun depan, semuanya!

Minggu, 30 November 2025

Kerapuhan Prasarana Internet

Halo! Aku ingin cerita sedikit tentang kerapuhan prasarana internet karena gangguan-gangguan yang baru-baru ini terjadi.

Apa saja kejadiannya?

Mungkin masih teringat gangguan-gangguan di banyak layanan di internet beberapa waktu lalu. Berikut beberapa yang kualami langsung:

Mungkin masih ada yang lain yang tidak kualami secara langsung.

Siapa mereka?

Amazon Web Service (AWS) menjadi salah satu layanan prasarana yang dipilih oleh banyak penyedia layanan untuk menginangkan (to host) layanan mereka. Jadi, saat AWS mengalami gangguan, mereka juga kena akibatnya. Contohnya ada Amazon dan Alexa itu sendiri, Canva, Snapchat, Slack, bahkan sampai permainan seperti Duolingo, Fortnite, dan Roblox.

GitHub menjadi layanan pilihan banyak orang untuk menginangkan repositori Git, sistem pengontrol versi. Hampir semua pengembang (developer) mengetahuinya. Aku pun juga menggunakannya, baik untuk keperluan pribadi maupun untuk keperluan pekerjaan. Waktu itu, aku sedang melakukan operasi push (mengirimkan perubahan dari komputerku ke repositori tujuan) saat melihat bahwa layanan GitHub sedang mengalami gangguan (tidak bisa push dan pull).

Cloudflare awalnya menjadi pilihan populer untuk mengamankan jaringan dari luar/internet. Banyak situs web yang menggunakan layanannya untuk mencegah serangan siber. Sayangnya, yang seharusnya melindungi itu justru membuat yang dilindunginya tidak bisa diakses sama sekali pada waktu itu. Yang terdampak ada Canva (lagi), Twitter, Uber, AWS (juga), PayPal, ChatGPT/OpenAI, dan lain-lain.

Apa yang bisa dipetik?

Banyaknya gangguan yang terjadi secara berturut-turut ini mengingatkan kita tentang pentingnya desentralisasi internet, baik prasarana maupun sarananya. Kita terlalu "setia" kepada satu layanan, padahal layanan itu juga "setia" kepada satu layanan prasarana, dan seterusnya. Hal ini memang cara paling mudah dan murah. Namun, kita akhirnya merasakan getahnya.

Perlu diketahui bahwa AWS menguasai 30% pasar layanan prasarana internet. Hal ini diikuti Microsoft Azure (20%), Google Cloud (13%), dan Alibaba Cloud (4%). Meski di bawah 50%, sebanyak 30% pasar itu terdiri dari banyak perusahaan besar atau layanan vital seperti kesehatan dan keamanan.

Begitu juga dengan Cloudflare. Walau mungkin data situs web yang menggunakan reverse proxy kurang lengkap, ada sumber yang mengatakan bahwa Cloudflare digunakan oleh 20,5% situs web secara keseluruhan atau 81,6% situs web yang menggunakan reverse proxy. Persentase yang sangat besar ini juga menunjukkan kerapuhan layanan di internet yang kita pakai sehari-hari.

Apa yang bisa kita lakukan?

Yang jelas, ketika hampir semua (atau bahkan semua) bergantung kepada satu pihak, terdapat kerapuhan yang sangat besar terhadap gangguan/masalah yang mungkin terjadi. Dalam kasus ini, saat satu pihak yang dianggap akan selalu dapat diandalkan ini ternyata mengalami gangguan juga (apalagi yang tidak sebentar), semua terkena getahnya.

Untuk para pengembang (developer), pertimbangkan pula alternatif layanan yang tersedia. Kita perlu mempelajari dan mempersiapkan rencana/prosedur khusus saat layanan yang kita gunakan untuk menjalankan operasional ini mengalami gangguan. Hal ini meliputi variasi produk dari penyedia yang sama ataupun produk lain dari penyedia lain.

Untuk para pengguna/masyarakat secara umum, cadangan adalah hal yang wajib disiapkan. Kita tidak pernah tahu kapan gangguan akan terjadi. Jangan sampai pekerjaan (atau keselamatan) diri kita terancam hanya karena satu pihak mengalami gangguan.

Penutup

Aku teringat strip komik yang juga kembali tenar saat terjadi gangguan berturut-turut waktu itu: komik xkcd yang berjudul "Dependency" (2020) berikut:

Tumpukan balok-balok dengan judul Semua Prasarana Digital Modern dan panah yang menunjuk ke satu balok pipih yang menyangga di bawah semuanya dan bertuliskan sebuah proyek yang secara sukarela dikelola oleh seseorang di Nebraska sejak 2003
Gambaran kerapuhan prasarana digital modern

Omong-omong, tahukah kalian kalau tiap perusahaan, bahkan tiap individu, mengelola server sendiri pada awal perkembangan internet? Belum ada layanan "awan" ("cloud") waktu itu sehingga gangguan di satu layanan tidak terlalu berdampak ke layanan lainnya.

Sampai jumpa!

Jumat, 24 Oktober 2025

Seperempat Abad

seperempat abad sudah
semoga kuat tetap lanjut

banyak jenjang didik sudah
harap belajar tetap berlanjut

beragam hal kualami sudah
berdoa hati tetap kukuh

aneka tantangan tampak sudah
kuatkan diri tetap tangguh

usaha, harap, doa sudah
semua dilakukan sepenuh

Alhamdulillah dan Bismillah

Biasanya orang bilang, "Wah, tidak terasa, ya." Hanya saja, aku merasakan semua kejadian yang kualami. Walau sebagian besar hal itu tidak lagi kuingat, dampaknya terhadap pembentukan jati diriku tetap ada. Aku yang saat ini adalah hasil dari 25 tahun perjalanan hidup. Keinginanku hanya satu: bisa menjalani hidup sesuai dengan pedoman-Nya—sederhana, tetapi memang tidak semudah membalikkan telapak tangan.

Semoga hidup kita dipenuhi dengan kebaikan dan dijauhkan dari keburukan.

Salam!

Selasa, 30 September 2025

Jika dan Hanya Jika

Halo!

Pernahkah kalian dengar ungkapan jika dan hanya jika? Kata-kata ini biasanya muncul dalam konteks matematika, logika, atau hukum. Istilah ini terdiri dari dua bagian, yaitu (1) jika dan (2) hanya jika.

Kata jika menjadi kata depan yang menandai sebab dari suatu kejadian. Contohnya, dalam kalimat, "Aku akan tetap pergi jika dia tidak mengabariku," klausa dia tidak mengabariku menjadi sebab/faktor terjadi aku akan tetap pergi. Namun, hal sebaliknya tidak demikian. Kejadian aku akan tetap pergi belum tentu selalu disebabkan oleh dia tidak mengabariku.

Secara matematis, operasi jika atau implikasi disimbolkan dengan panah kanan (→). Contohnya, AB. Yang harus diperhatikan adalah bahwa operasi ini hanya bernilai salah saat B salah, padahal A benar. Cara mengingatnya adalah dengan selalu berpikir bahwa (1) penyebab/faktor suatu kejadian bisa ada lebih dari satu dan (2) definisi faktor itu memang hal yang menyebabkan sesuatu terjadi.

Sebaliknya, istilah hanya jika adalah kebalikan arah dari jika. Operasi ini disimbolkan dengan panah kiri (←). Contohnya, AB. Dalam matematika, operasi pembalikan ini disebut konvers dari suatu pernyataan. Yang harus diperhatikan adalah bahwa implikasi tidak sama dengan hasil konversnya, yaitu suatu kejadian belum tentu akibat dari faktor yang dimaksud (bisa disebabkan oleh faktor lain).

Ringkasnya, tabel kebenaran dari implikasi dan konversnya adalah berikut:

A B AB
(implikasi)
AB
(konvers)
benarbenarbenarbenar
benarsalahsalahbenar
salahbenarbenarsalah
salahsalahbenarbenar

Terakhir, yang dimaksud jika dan hanya jika (↔) adalah hasil konjungsi (operasi dan) dari operasi jika dan operasi hanya jika. Dari tabel di atas, yang bernilai benar untuk keduanya hanya saat A dan B benar. Karena itulah, operasi ini juga bisa disimbolkan dengan sama dengan tiga (≡).

Jadi, kalau bertemu kata-kata jika dan hanya jika, jangan bingung lagi, ya, dengan maksudnya. Semoga bermanfaat!

Minggu, 31 Agustus 2025

꧁ꦮꦪꦃꦲꦺꦢꦢꦶꦱꦶꦗꦶꦧꦼꦧꦉꦁꦔꦤ꧀꧂

ꦕꦼ()(ka)ꦏ꧀ꦧ(k ba)ꦲꦺ(he)ꦠꦸ(tu)ꦭꦶ(li)(sa)ꦤ꧀ꦲꦶ(n hi)ꦏꦶ(ki)(.)

ꦲꦸ(hu)ꦮꦶ(wi)ꦱ꧀ꦮ(s wa)ꦪꦃ(yah)ꦲꦺ(he)(ha)(wa)ꦏ꧀ꦏꦺ(k-ke)ꦝꦺ(dhe)ꦮꦺ(we)(da)ꦢꦶ(di)ꦱꦶ(si)ꦗꦶ(ji)(.)(ha)(ja)(nga)ꦤ꧀ꦠꦶ(n-ti)(ha)(na)ꦱꦶꦁ(sing)(ma)ꦭꦃ(lah)ꦚꦼ(nyê)ꦫꦁ(rang)(ka)ꦤ꧀ꦕ(n-ca)ꦤꦺ(ne)ꦝꦺ(dhe)ꦮꦺ(we)(,)(pa)(dha)(pa)(dha)(ra)ꦏ꧀ꦪ(k-ya)ꦠ꧀(t,)(pa)(dha)(pa)(dha)ꦮꦺꦴꦁ(wong)ꦕꦶ(ci)ꦭꦶ(li)ꦏ꧀꧈(k.)

(ha)(wa)ꦏ꧀ꦏꦺ(k-ke)ꦝꦺ(dhe)ꦮꦺ(we)ꦏꦸ(ku)ꦢꦸ(du)ꦲꦺ(he)ꦭꦶꦁ(ling)ꦪꦺ(ye)ꦤ꧀ꦩꦸꦁ(n mung)ꦱꦸꦃ(suh)ꦲꦺ(he)(ha)(wa)ꦏ꧀ꦏꦺ(k-ke)ꦝꦺ(dhe)ꦮꦺ(we)ꦲꦶ(hi)ꦏꦸ(ku)ꦮꦺꦴꦁ(wong)ꦮꦺꦴꦁ(wong)ꦒꦼ()ꦝꦺ(dhe)ꦱꦶꦁ(sing)ꦢꦸ(du)ꦮꦺ(we)ꦤꦶ(ni)ꦮꦼ()ꦮꦼ()ꦤꦁ(nang)ꦏꦁ(kang)ꦒꦺꦴ(go)ꦔꦸ(ngu)ꦫꦸ(ru)ꦱ꧀ꦏ(s ka)ꦧꦸ(bu)ꦠꦸ(tu)(ha)ꦤ꧀ꦤꦺ(n-ne)ꦮꦺꦴꦁ(wong)ꦮꦺꦴꦁ(wong)(ka)ꦧꦺꦃ(beh)(,)(na)ꦔꦶꦁ(nging)(ma)ꦭꦃ(lah)ꦩꦸꦁ(mung)(ga)ꦮꦺ(we)ꦱꦸ(su)ꦒꦶꦃ(gih)ꦝꦺ(dhe)ꦮꦺ(we)ꦏ꧀ꦏꦺ(k-ke)ꦭꦤ꧀(lan)(ka)ꦤ꧀ꦕ(n-ca)(ka)ꦤ꧀ꦕ(n-ca)ꦤꦺ(ne)(.)

ꦕꦺꦴ(co)ꦤ꧀ꦠꦺꦴ(n-to)ꦤꦺ(ne)ꦱꦶꦁ(sing)(ga)ꦮꦺ(we)ꦱꦼ()ꦝꦶꦃ(dhih)ꦲꦶ(hi)ꦏꦸ(ku)(,)ꦲꦸ(hu)ꦮꦶ(wi)ꦱ꧀ꦲ(s ha)ꦏꦺꦃ(keh)(ka)ꦧꦂ(bar)ꦱꦶꦁ(sing)(ma)ꦭꦃ(lah)ꦔꦺꦴ(ngo)ꦩꦺꦴꦁ(mong)ꦪꦺ(ye)ꦤ꧀ꦫ(n ra)ꦏ꧀ꦪ(k-ya)ꦠ꧀ꦱꦶꦁ(t sing)ꦔꦺꦴ(ngo)ꦧꦺꦴꦁ(bong)ꦒꦼ()ꦝꦸꦁ(dhung)ꦭꦤ꧀(lan)ꦥꦿ(pra)(sa)(ra)(na)(.)(ha)(wa)ꦏ꧀ꦏꦺ(k-ke)ꦝꦺ(dhe)ꦮꦺ(we)(ba)ꦲꦺ(he)ꦮꦶ(wi)ꦱ꧀ꦱ(s sa)ꦩ꧀ꦧ(m-ba)ꦠ꧀ꦉ(t rê)(ga)()(nga)(la)ꦫꦁ(rang)(.)(ka)(ya)ꦔꦺꦴ(ngo)ꦤꦺꦴ(no)(ha)()ꦥ꧀ꦢꦶ(p di)ꦧꦸ(bu)ꦮꦁ(wang)ꦏꦁ(kang)ꦒꦺꦴ(go)ꦔꦺꦴ(ngo)ꦧꦺꦴꦁ(bong)(.)(ra)ꦏ꧀ꦪ(k-ya)ꦠ꧀ꦢꦶ(t di)(ga)ꦮꦺ(we)(pa)ꦢꦸ(du)ꦝꦺ(dhe)ꦮꦺ(we)ꦝꦺ(dhe)ꦮꦺ(we)(.)

ꦱꦶꦁ(sing)ꦲꦺꦴ(ho)(ra)ꦭꦸ(lu)ꦩ꧀ꦫꦃ(m-rah)ꦏꦸ(ku)ꦮꦶ(wi)(,)(ka)ꦧꦂ(bar)(ka)ꦧꦂ(bar)(ra)ꦏ꧀ꦪ(k-ya)ꦠ꧀ꦭ(t la)ꦒꦶ(gi)ꦥꦿꦺꦴ(pro)ꦠꦺ(te)ꦱ꧀ꦩ(s ma)ꦭꦃ(lah)ꦲꦺꦴ(ho)(ra)ꦗꦼ()ꦝꦸ(dhu)ꦭ꧀ꦲꦶꦁ(l ing)ꦠꦶ(ti)ꦥ꦳ꦶ(vi)(la)ꦤ꧀ꦭꦶ(n li)(ya)ꦤꦺ(ne)(,)(na)ꦔꦶꦁ(nging)(ka)ꦧꦂ(bar)ꦏꦺꦴ(ko)ꦧꦺꦴ(bo)(nga)ꦤ꧀ꦩ(n ma)ꦭꦃ(lah)ꦗꦼ()ꦝꦸꦭ꧀(dhul)(.)ꦏꦸ(ku)ꦮꦶ(wi)(ba)ꦲꦺ(he)ꦮꦶ(wi)ꦱ꧀ꦮ(s wa)ꦪꦃ(yah)ꦧꦼ()ꦔꦶ(ngi)(na)ꦭꦶ(li)(ka)(ra)ꦏ꧀ꦪ(k-ya)ꦠ꧀ꦱꦶꦁ(t sing)ꦥꦿꦺꦴ(pro)ꦠꦺ(te)ꦱ꧀ꦮꦶ(s wi)ꦱ꧀ꦧꦸ(s bu)(ba)ꦫꦤ꧀(ran)(.)ꦲꦺ(he)ꦭꦶꦁ(ling)!(!)ꦱꦶꦁ(sing)ꦔꦺꦴ(ngo)ꦧꦺꦴꦁ(bong)ꦏꦸ(ku)ꦮꦶ(wi)ꦲꦸ(hu)ꦠꦸ(tu)(sa)ꦤ꧀ꦤꦺ(n-ne)ꦮꦺꦴꦁ(wong)ꦮꦺꦴꦁ(wong)(ka)ꦲꦺ(he)(ma)ꦤꦺꦃ(neh)(.)

ꦢꦸ(du)ꦫꦸꦁ(rung)(ma)ꦤꦺꦃ(neh)(ka)ꦤ꧀ꦕ(n-ca)ꦤꦺ(ne)ꦝꦺ(dhe)ꦮꦺ(we)ꦱꦶꦁ(sing)(ma)ꦭꦃ(lah)ꦢꦶ(di)(pa)ꦠꦺ(te)ꦤ꧀ꦤꦶ(n-ni)(ka)ꦫꦺꦴ(ro)ꦮꦺꦴꦁ(wong)ꦮꦺꦴꦁ(wong)(ka)ꦲꦺ(he)(.)(pa)ꦤ꧀ꦕꦺ(n-ce)ꦤ꧀ꦲꦺꦴ(n ho)(ra)ꦢꦸ(du)ꦮꦺ(we)(ha)ꦠꦶ(ti)ꦮꦺꦴꦁ(wong)ꦮꦺꦴꦁ(wong)(ka)(ya)ꦔꦺꦴ(ngo)ꦤꦺꦴ(no)(.)

ꦲꦶ(hi)ꦱꦶꦃ(sih)(ha)ꦏꦺꦃ(keh)(ba)ꦔꦼ(ngê)ꦠ꧀ꦱꦶꦁ(t sing)ꦲꦺꦴ(ho)(ra)ꦭꦸ(lu)ꦩ꧀ꦫꦃ(m-rah)ꦲꦶꦁ(hing)ꦤꦼ()(ga)(ra)ꦲꦶ(hi)ꦏꦶ(ki)(.)(ha)(wa)ꦏ꧀ꦏꦺ(k-ke)ꦝꦺ(dhe)ꦮꦺ(we)ꦏꦸ(ku)ꦢꦸ(du)(da)ꦢꦶ(di)ꦱꦶ(si)ꦗꦶ(ji)ꦏꦁ(kang)ꦒꦺꦴ(go)ꦲꦁꦭ(ngla)(wa)ꦤ꧀ꦩꦸꦁ(n mung)ꦱꦸꦃ(suh)ꦧꦼ()(ba)ꦉꦁ(rêng)ꦔꦤ꧀(ngan)(.)(ha)(ja)(nga)ꦤ꧀ꦠꦶ(n-ti)(ha)(na)ꦱꦶꦁ(sing)(ma)ꦭꦃ(lah)ꦚꦼ(nyê)ꦫꦁ(rang)(ka)ꦤ꧀ꦕ(n-ca)ꦤꦺ(ne)ꦝꦺ(dhe)ꦮꦺ(we)(.)(ha)(ja)(ma)ꦭꦃ(lah)ꦔꦿ(ngra)ꦪꦃ(yah)ꦲꦶ(hi)ꦢꦺꦴ(do)ꦢꦺꦴ(do)(la)ꦤ꧀ꦤꦺ(n-ne)(ka)ꦤ꧀ꦕ(n-ca)ꦤꦺ(ne)ꦝꦺ(dhe)ꦮꦺ(we)(.)

(ha)ꦠꦶ(ti)(ha)ꦠꦶ(ti)ꦠꦼ()ꦫꦱ꧀(rus)(,)(pa)(ra)(ka)ꦤ꧀ꦕ(n-ca)!(!)

Kamis, 31 Juli 2025

Jangan Remehkan Tsunami di Bawah Semeter!

Halo! Ini pesan pengingat singkat buat kita semua.

Kemarin pagi, terjadi gempa besar dengan magnitudo 8,7 (BMKG) di Semenanjung Kamchatka, Rusia. Gempa ini menyebabkan tsunami. Di sebagian wilayah Kamchatka, Rusia, tinggi tsunami mencapai 5 meter. Di Iwate, Jepang, tinggi tsunami mencapai 1,3 meter. Di Kota Jayapura, Papua, Indonesia, tinggi tsunami mencapai 20 sentimeter. Tinggi tsunami yang di bawah semeter ini pun lantas menimbulkan beberapa orang jadi meremehkan tsunami, padahal tsunami di bawah semeter pun juga tetap berbahaya.

Tsunami (bahasa Simeulue: smong) adalah gelombang air yang muncul karena kejadian di dasar laut. Hal ini berbeda dari ombak yang biasa kita lihat di pantai; ombak pantai umumnya disebabkan oleh angin. Perbedaan penyebab ini membedakan perilaku dari kedua gelombang. Tsunami memiliki daya dorong dari dasar sampai permukaan, sedangkan ombak pantai hanya mendorong yang di permukaan. Yang pernah main ke pantai dan maju sampai muka air setidaknya sepinggang pasti bisa merasakan perbedaan daya dorong antara yang di dekat permukaan (pinggang) dan yang di dasar laut (kaki). Bayangkan saja kalau ombak yang datang juga mendorong kaki kita (yang terjadi di tsunami): pastilah kita sudah jatuh dan tersapu ombaknya.

Jadi, kita tidak boleh meremehkan tsunami walau tingginya di bawah semeter. Daya rusak tsunami lebih besar daripada ombak pantai biasa. Oleh karena itu, sudah seharusnya kita segera mengenali tanda-tanda tsunami datang dan segera melakukan evakuasi jika tanda-tanda itu muncul.

Sampai di sini dahulu, ya. Semoga kita senantiasa diberikan keselamatan.

Senin, 30 Juni 2025

Sidang dan Revisi Tesis

Halo! Kali ini, aku ingin cerita sedikit tentang kehidupanku saat ini, singkat saja.

Bulan Juni ini penuh dengan kegiatan, baik kuliah maupun kerja proyekan. Aku menyelesaikan pengumpulan data, analisis data hasil percobaan, dan penulisan laporan penelitianku. Selain itu, aku juga dapat (kerja) proyek pada bulan ini. Padat betul rasanya.

Kabar baiknya, Selasa pagi lalu, aku maju sidang tesis. Alhamdulillah, aku diluluskan! Hanya saja, catatan revisinya memang lumayan banyak. Saat ini, aku masih merevisi laporanku.

Selama sidang itu, rasanya deg-degan banget. Ada beberapa komentar yang kesulitan untuk kujawab. Untungnya, jawabanku dianggap cukup bagi para dosen penguji untuk meluluskanku.

Aku teringat masa-masa sidang skripsi dahulu itu. Rasanya juga sama. Hanya saja, memang lebih berat sidang tesis kali ini karena topik yang dibahas lebih mendalam.

Sampai di sini dahulu, ya, ceritaku. Aku mau lanjut merevisi laporanku. Sampai jumpa!

Minggu, 25 Mei 2025

Urutan Operasi dan Sifat Asosiatif

Pernahkah kalian menemukan kalimat matematika yang berisi operasi dengan prioritas/urutan pengerjaan yang sama? Sebagai contoh, 7 - 3 - 2 akan menghasilkan 2 (bukan 6) karena yang terletak di sebelah kiri dikerjakan terlebih dahulu walaupun kedua pengurangan memiliki prioritas yang sama. Kira-kira mengapa, ya?

Apa itu prioritas? Urutan pengerjaan itu apa?

Dalam matematika, urutan pengerjaan adalah kumpulan aturan/konvensi urutan operasi yang dilakukan saat menghitung sebuah kalimat matematika. Prioritas atau urutan pengerjaan suatu operasi juga disebut dengan preseden (precedence). Prioritas yang lebih tinggi berarti akan dikerjakan terlebih dahulu. Begitu juga sebaliknya.

Keberadaan urutan pengerjaan ini digunakan untuk mengurangi ambiguitas, tetapi tetap hemat notasi. Kalau ingin mendahulukan salah satu operasi, kita bisa menggunakan tanda kurung, ( dan ), untuk membungkus operasi yang perlu didahulukan. Sebagai contoh, 7 × (3 - 2) akan menghasilkan 7 (bukan 19). Kalau ada lebih dari satu tingkat kurung, kita bisa menggunakan jenis kurung yang berbeda untuk menghindari kebingungan. Misalnya, [5 × (4 + 2)] - 7.

Urutan pengerjaan konvensional yang diadopsi dalam berbagai bidang, termasuk di luar matematika, adalah sebagai berikut:

  1. tanda kurung,
  2. perpangkatan dan akar,
  3. perkalian dan pembagian, lalu
  4. penjumlahan dan pengurangan.

Kalau kita perhatikan, terdapat beberapa operasi yang menempati prioritas yang sama. Bagaimana menentukan yang didahulukan kalau berturutan? Ini yang disebut dengan sifat asosiatif atau keasosiatifan (associativity).

Apa itu asosiatif?

Dalam matematika, sifat asosiatif adalah sifat suatu operator biner (operasi terhadap dua bilangan) yang tidak mengubah hasil ketika tanda kurungnya diubah. Sebagai contoh, (2 + 3) + 5 sama dengan 2 + (3 + 5) sama dengan 10 sehingga operasi penjumlahan bersifat asosiatif.

Yang perlu diperhatikan adalah asosiatif tidak mengubah urutan penulisan operator. Asosiatif berbeda dengan komutatif. Contoh yang umum memang memiliki kedua sifat tersebut sehingga tak jarang disalahpahami oleh kebanyakan orang.

Sifat komutatif adalah sifat operator biner yang tidak mengubah hasil ketika urutan penulisan kedua bilangan yang dikenai operasinya ditukar. Sebagai contoh, 2 + 3 sama dengan 3 + 2 sama dengan 5 sehingga operasi penjumlahan bersifat komutatif.

Memang ada, ya, operasi yang bersifat komutatif, tetapi tidak bersifat asosiatif?

Operasi yang bersifat komutatif, tetapi tidak bersifat asosiatif, memang ada, tetapi memang jarang muncul. Sebagai contoh, operasi batu-gunting-kertas (atau gajah-manusia-semut) memiliki sifat komutatif, tetapi tidak bersifat asosiatif.

  • batu vs. gunting = batu
  • gunting vs. batu = batu

... tetapi ....

  • (batu vs. gunting) vs. kertas = kertas
  • batu vs. (gunting vs. kertas) = batu

Jadi, operasi batu-gunting-kertas memiliki sifat komutatif, tetapi tidak bersifat asosiatif.[1][2] Ini juga alasan permainan batu-gunting-kertas hanya boleh dimainkan oleh tepat dua orang, tidak boleh kurang ataupun lebih.[3]

Bagaimana dengan operasi non-asosiatif?

Operasi yang tidak memiliki sifat asosiatif memiliki urutan pengerjaan masing-masing. Biasanya, hal ini diatur dengan menentukan suatu operasi sebagai asosiatif kiri atau kanan. Asosiatif kiri adalah mengerjakan dari kiri ke kanan. Asosiatif kanan sebaliknya.

  • Asosiatif kiri: 1 ▫ 2 ▫ 3 ▫ 4 = ((1 ▫ 2) ▫ 3) ▫ 4
  • Asosiatif kanan: 1 ▪ 2 ▪ 3 ▪ 4 = 1 ▪ (2 ▪ (3 ▪ 4))

Contoh asosiatif kiri adalah pengurangan dan pembagian:

  • 1 - 2 - 3 - 4 = ((1 - 2) - 3) - 4
  • 1 ÷ 2 ÷ 3 ÷ 4 = ((1 ÷ 2) ÷ 3) ÷ 4

Contoh asosiatif kanan adalah perpangkatan:

  • 234 = 2(34)

Namun, ada juga yang wajib menggunakan tanda kurung karena tidak ada konvensinya, misalnya perkalian silang vektor (cross product):

  • A̅ × (B̅ × C̅) ≠ (A̅ × B̅) × C̅

Penutup

Dengan mengetahui urutan operasi/preseden dan sifat asosiatif tiap operasi, kita bisa mulai untuk mengubah kalimat matematika dari notasi sisipan ke notasi akhiran untuk kalimat yang lebih kompleks. Selanjutnya, kita coba bahas algoritma shunting yard/depo gerbong, yuk! Semoga bermanfaat!

Catatan akhir

Aku menerapkan konsep dalam tulisanku kali ini untuk menyelesaikan masalah pada program pembuat soal di web TTL. Aku juga menyiarkannya di YouTube, loh!

Senin, 28 April 2025

Notasi Sisipan dan Notasi Akhiran dalam Kalimat Matematika

Pernahkah kalian memperhatikan perbedaan kalkulator dagang dengan kalkulator ilmiah? Bagaimana bisa kalkulator ilmiah menentukan urutan perhitungan? Loh, kalkulator yang di ponsel pintar itu kalkulator ilmiah?

Apa perbedaannya?

Perbedaan keduanya ada pada urutan menghitungnya. Kalkulator dagang memiliki keterbatasan memori dan daya komputasi sehingga perhitungan langsung dilakukan setiap tombol operator berikutnya ditekan (termasuk tanda sama dengan), sedangkan kalkulator ilmiah membaca kalimat matematika (KM) secara keseluruhan, menentukan urutan perhitungan, lalu melakukan perhitungan sesuai urutan seharusnya.

Sebagai contoh, berikut yang muncul ketika menekan tombol 2 + 3 × 7 = pada kalkulator dagang. Perhatikan bahwa perhitungan langsung dijalankan setiap tombol operator ditekan dan nilai itu yang disimpan dalam memorinya yang terbatas.

Tombol yang Ditekan Hasil pada Layar Memori Internal Kalimat Matematika
2202
+222 +
3322 + 3
×55(2 + 3) ×
775(2 + 3) × 7
=3535((2 + 3) × 7)

Bagaimana kalkulator ilmiah menentukan urutan perhitungan?

Sebagai manusia, kita biasanya akan mencari operator yang urutannya didahulukan, misalnya perkalian (×) lebih dahulu daripada penjumlahan (+). Kalimat matematika (KM) yang biasa kita pakai menggunakan notasi sisipan (infix notation), yaitu tanda operator berada di antara dua bilangan/KM yang akan dikenai operasi. Misalnya 2 + 3 berarti operasi penjumlahan antara 2 dan 3 dengan tanda tambah (+) berada di antara keduanya.

Salah satu cara yang lebih mudah bagi komputer adalah dengan menggunakan notasi akhiran (postfix notation atau reverse Polish notation/RPN), yaitu tanda operator berada di akhir dua bilangan/KM yang akan dikenai operasi. Misalnya 2 3 + berarti operasi penjumlahan antara 2 dan 3 dengan tanda tambah (+) berada di akhir/setelah keduanya.

Cara ini lebih mudah untuk diprogram dan dijalankan oleh komputer dengan menggunakan struktur data tumpukan/stack. Kita cukup memasukkan tiap bilangan/KM ke dalam tumpukan. Bila kita bertemu dengan tanda operator, kita ambil dua teratas dari tumpukan lalu melakukan operasi terhadap keduanya. Hasilnya ditaruh di atas tumpukan kembali. Setelah selesai, hasilnya adalah satu bilangan di tumpukan itu.

Sebagai contoh, berikut cara menghitung 2 3 7 × + dengan notasi akhiran. Perhatikan tumpukan setiap kita sampai tanda operator.

Tumpukan Kursor Sisa Kalimat
223 7 × +
3
2
37 × +
7
3
2
7× +
21
2
×+
23+

Bagaimana cara mengubah dari notasi sisipan ke notasi akhiran?

Ada beberapa cara untuk mengubahnya. Yang terkenal karena sederhana adalah algoritma shunting yard/depo gerbong karena bisa diilustrasikan dengan depo gerbong. Algoritma ini ditemukan oleh Edsger Wybe Dijkstra dalam artikelnya tahun 1961. Kita bahas lain kali, ya.

Potongan layar artikel yang menunjukkan diagram depo gerbong dengan masukan dari sisi kanan, keluaran di sisi kiri, dan depo gerbong di sisi bawah
Diagram depo gerbong

Eh, kalkulator di ponsel pintar bagaimana?

Oh, iya. Coba saja jalankan 2 + 3 × 7 = pada kalkulator di ponsel pintar kalian. Jawaban yang mana yang muncul?

Penutup

Itu yang bisa kutulis kali ini. Topik ini terpikirkan karena sempat ada masalah pada program pembuat soal di web TTL, khususnya pembuat soal operasi pecahan yang masih menggunakan cara kalkulator dagang dan belum menggunakan cara kalkulator ilmiah. Semoga bermanfaat!

Jumat, 21 Maret 2025

Mati Listrik saat Tarawih: Relevansi Islam Sepanjang Masa

Halo! Kali ini, aku mau cerita pengalamanku saat Tarawih pekan lalu.

Kamis pekan lalu malam (atau malam Jumat pekan lalu), aku ikut rangkaian salat Isya–Tarawih di masjid dekat rumah. Masjidnya cukup besar. Ukuran lantai bagian dalam sekitar 12 meter × 12 meter. Ada sembilan baris: 6 untuk putra dan 3 untuk putri. Ada lantai dua juga, tetapi hanya dipakai untuk acara-acara tertentu, misal salat Jumat dan TPQ.

Rangkaian salat Tarawih di masjid ini 11 rakaat: 8 rakaat Tarawih (dua rakaat salam) dan 3 rakaat Witir. Bakda Isya dan sebelum Tarawih, ada ceramah singkat. Biasanya, yang jadi imam Isya dan imam Tarawih orang yang sama.

Waktu itu, sekitar 20.02 WIB, kami sedang melaksanakan Tarawih rakaat ke-3 (salat ke-2). Suasana saat itu sedang hujan. Aku berada di barisan laki-laki yang paling belakang (baris ke-4) dan di bagian tengah/belakang imam. Saat imam sedang membaca surah Al-Fatihah, mendadak listrik masjid mati. Suara imam yang lirih (mungkin karena sudah terbiasa dengan pelantang/loudspeaker) ditambah dengan bunyi hujan menyebabkan bacaan imam sukar didengar.

Saat imam memberi aba-aba untuk rukuk, "Allāhu akbar!" terdengar suara dari salah satu jemaah yang mengulangi aba-aba imam, "Allāhu akbar!" dengan suara yang lebih lantang. Posisinya sebaris denganku di sisi kanan masjid. Untuk aba-aba imam selanjutnya, para jemaah ikut mengulangi aba-aba imam dengan suara cukup lantang (di-jahr-kan) sampai selesai salat.

Setelah selesai salat Tarawih ke-2, ada yang memeriksa listrik masjid dan menyalakan listrik kembali. Sepertinya ada korsleting pada jaringan listrik kipas karena kipasnya tidak menyala selama salat-salat berikutnya. Sekitar akhir Syakban seingatku, memang ada beberapa kipas baru yang dipasang. Bisa jadi ada kekeliruan dalam pemasangannya. Setidaknya, pemutus sirkuit (MCB) melakukan tugasnya dan mengisolasi yang terjadi korsleting sehingga jaringan listrik lain masih bisa menyala dan salat berjemaah kembali dilanjutkan seperti biasanya.

Selama salat Tarawih ke-2 itu, aku terenyuh dan bangga karena ajaran Islam memang berlaku untuk semua kalangan dan semua masa. Untuk ceritaku ini, misalnya, ajaran Islam tentang mengulang aba-aba imam masih relevan walau sudah ada teknologi mikrofon dan pelantang sehingga salat berjemaah tetap bisa dilaksanakan walau sedang mati listrik dan hujan.

Aku jadi teringat masjid-masjid yang masih melakukan cara ini walau sudah menggunakan pelantang, yaitu Masjidilharam, Masjid Nabawi, dan (di Indonesia) Masjid Istiqlal. Aku merasa sedang berada di masjid-masjid tersebut karena cara yang sama juga diterapkan walau hanya dua rakaat.

Sampai di sini dahulu, ya, ceritaku. Selamat melanjutkan, bahkan meningkatkan, ibadah-ibadah selama bulan Ramadan selagi masih ada waktu. Sampai jumpa!

Jumat, 28 Februari 2025

Keamanan Bersuara: Autentikasi Dua Faktor

Halo! Kali ini singkat saja, ya.

Pernah beredar kabar-kabar menyedihkan tentang kebebasan bersuara/berekspresi yang menjadi fondasi demokrasi. Salah satunya tentang pembajakan akun yang bersuara tersebut. Setelah menyuarakan tentang hal-hal tertentu, akun mereka justru dibajak. Walau tidak diketahui identitasnya, bukanlah hal yang tidak mungkin kalau pihak berwenang memiliki kemampuan untuk melakukannya, terlebih mereka adalah pihak yang dikritik.

Hampir semua platform komunikasi masyarakat Indonesia menggunakan layanan luar negeri, misal WhatsApp, LINE, Telegram, Facebook, Twitter, Instagram, TikTok, dan Gmail. Satu-satunya layanan dalam negeri hanyalah SMS dan panggilan suara seluler/telepon pulsa. Hal ini memiliki keuntungan tersendiri bagi pihak-pihak yang ingin bersuara dengan aman, yaitu akun tidak bisa diambil alih secara langsung tanpa surat pengadilan yang jelas. Layanan luar negeri pun bisa saja menolak surat tersebut. Pihak berwenang bisa saja memblokir layanan tersebut, tetapi kurasa tidak mungkin mereka akan melakukannya karena mereka pun juga menggunakannya.

Beberapa layanan ini utamanya menggunakan kata sandi sebagai cara masuknya. Namun, ada beberapa yang menggunakan nomor telepon via SMS atau telepon pulsa sebagai cara masuk utama, misal WhatsApp dan Telegram. Hal ini membuka celah bagi pihak berwenang untuk mengambil alih akun yang mereka rasa "merusak ketenteraman". Lantas, bagaimana cara mengatasi masalah ini sebagai masyarakat yang ingin bersuara?

Caranya adalah dengan menambahkan faktor autentikasi lainnya! Sebagai contoh, WhatsApp memiliki fitur autentikasi dua faktor dengan PIN yang disebut verifikasi dua langkah. Bila fitur itu dinyalakan, akun WhatsApp seseorang tidak bisa diambil alih hanya dengan memasukkan kode dari SMS yang diterima (yang sangat mungkin dialihkan oleh pihak berwenang), tetapi perlu memasukkan kode PIN yang dihafalkan (seperti sandi pada umumnya).

Dengan autentikasi dua faktor, kita bisa bersuara tanpa takut akun kita diambil alih. Namun, perlu diperhatikan bahwa keselamatan diri secara fisik bisa jadi tidak seaman yang dikira. Namun, setidaknya, belum ada cara untuk mengakses isi pikiran sampai saat ini (untuk mengetahui PIN yang dihafal) secara paksa sehingga kita bisa memilih untuk tidak memberi tahu walau mungkin akan babak belur, bahkan mati. Begini amat, ya, tinggal di wilayah yang pihak berwenangnya memusuhi rakyatnya.

Sampai di sini dahulu, ya. Tetap suarakan hak-hak kita dan tolong jaga diri juga.

Selamat menjalankan ibadah puasa bagi yang menjalankan! Sampai jumpa!

Kamis, 30 Januari 2025

Satu Tahun Rutin Menulis Blog

Halo!

Pada bulan Januari 2024 lalu, aku berencana untuk mengepos setidaknya sekali setiap bulan. Hal ini kulakukan agar aku bisa rutin menulis apa pun itu, sekaligus agar blogku tidak terlalu sepi.

Aku menulis berbagai macam hal, dari pengalaman pribadi hingga materi pelajaran/perkuliahan. Aku bahkan menulis seri kriptografi dari yang sederhana hingga yang kompleks. Meski demikian, yang kutulis hanyalah yang bisa kutulis dalam waktu beberapa jam atau beberapa hari. Itu pun karena kupaksa diriku untuk menulis, terutama saat sudah mendekati akhir bulan.

Rencanaku tetap merutinkan untuk mengepos setidaknya sekali setiap bulan, bahkan mungkin mencoba mengepos dua kali tiap bulannya. Hal ini mungkin sulit tercapai untuk kuartal pertama tahun ini, bahkan semester pertama tahun ini, karena aku masih harus menulis untuk Publikasi Ilmiah dan Tesis, dua mata kuliah terakhir yang harus kuselesaikan dalam studi S-2 ini.

Kualitas tulisanku kuserahkan kepada kalian, para pembaca, untuk menilainya. Aku hanya ingin ada tulisan rutin di blogku ini, kadang kusiapkan berhari-hari, kadang hanya sempat kusiapkan beberapa jam.

Semoga rencana-rencana baik kita semua tercapai, ya. Sampai jumpa!

Selasa, 31 Desember 2024

Menengok Kembali Tahun 2024

Hai, hai!

Ini hari terakhir tahun 2024 Masehi. Pada masa-masa ini, orang-orang biasa mengepos kilas balik tentang diri mereka. Ada yang mengepos Spotify Wrapped, YouTube Music Recap, bahkan GoJek Wrapped. Bukan, bukan itu yang akan kubahas kali ini. Aku ingin bercerita hal-hal yang kualami pada tahun ini.

Apakah aku menjadi orang yang lebih baik tahun ini? Mungkin orang lain yang lebih tepat untuk menilainya. Hanya saja, aku merasa lebih baik tahun ini. Aku belajar banyak hal baru, terutama tentang interaksi antar-manusia, selain studi ilmu komputer tentunya. Oh, omong-omong tentang perkuliahan, ....

Perkuliahan

Pada semester ke-2 lalu, aku mengambil mata kuliah Jaringan Komputer Lanjut/Jarkom Lanjut (wajib) dan Analisis Data Spasial Lanjut/ADSL (pilihan). Aku mengambil mata kuliah ADSL karena mata kuliah ini berkaitan dengan tesisku yang membahas data spasial atau citra/bangun.

Yang berkesan dari mata kuliah Jarkom Lanjut adalah tugas kelompok tiap pekan untuk mengulas dua artikel jurnal. Setelah itu, secara bergantian untuk tiap pekan, kelompok yang sesuai jadwalnya akan mempresentasikan hasil ulasan masing-masing. Dari tugas-tugas ini, wawasanku lebih terbuka mengenai dunia jaringan komputer dan banyak metode/algoritma yang ada di balik layar prasarana komunikasi global yang kita gunakan ini, yaitu internet.

Yang berkesan dari mata kuliah ADSL adalah data spasial utamanya. Aku memang suka data spasial, entah citra/foto entah bentuk/bangun. Skripsiku saja berkaitan dengan data spasial (citra satelit dan segmentasinya). Dari mata kuliah ini pula, aku juga jadi mengenal PostGIS, yaitu pengaya PostgreSQL untuk data spasial.

Pada semester ke-3 lalu, aku mengambil mata kuliah Rekayasa Perangkat Lunak Lanjut/RPLL (wajib) dan Komputasi Paralel Lanjut/Komparlan (pilihan). Aku mengambil mata kuliah Komparlan karena mata kuliah ini berkaitan dengan tesisku yang berkaitan dengan komputasi paralel untuk menjalankan metode penelitian untuk tesisku.

Yang berkesan dari mata kuliah RPLL adalah banyaknya teori dasar yang diusulkan menjadi teori besar (grand theory) rekayasa perangkat lunak. Aku juga belajar ulang kembali materi ini yang tidak terlalu kupahami selama kuliah S-1 walaupun aku juga memahami metode formal, mata kuliah pilihan yang kuambil selama kuliah S-1 dan membahas tentang penulisan persyaratan (requirement). Pada paruh kedua semester, mata kuliah ini membahas tentang ontologi. Aku sudah mengenalnya sejak berkenalan dengan Wikidata sehingga cukup bisa memahami materinya.

Yang berkesan dari mata kuliah Komparlan adalah tugas proyek kelompok yang menggunakan setidaknya dua lingkungan. Dengan CPU, ada lingkungan banyak nodus (multi-node) dan banyak inti (multi-core). Selain itu, ada lingkungan GPU dengan kartu grafis tingkat konsumen rumahan dan kartu grafis tingkat institut/universitas (NVIDIA Tesla). Oh, aku juga jadi belajar menggunakan CUDA. Baru kali ini aku berkesempatan menggunakan GPU secara langsung (low-level programming).

Selain itu, tahun ini dimulai untuk mata kuliah spesial Studi Mandiri dan Proposal Tesis. Studi Mandiri bertujuan untuk melakukan penelusuran literatur, mencari gap, dan melakukan ulang percobaan penelitian sebelumnya dengan harapan bisa ditemukan ide untuk tesis. Aku sudah mencoba menyelesaikan studi mandiri pada semester ke-2 lalu. Namun, rupanya, ada yang keliru pada bagian metodenya menurut dosen pembimbingku. Jadi, ya, aku perlu mengulang beberapa percobaan dengan metode yang sudah dibetulkan sehingga perlu memperpanjang mata kuliah ini.

Semester ke-3 ini cukup penuh kegiatan. Aku perlu menyelesaikan mata kuliah Studi Mandiri sekaligus menyusun dokumen untuk mata kuliah Proposal Tesis. Alhamdulillah, proposal tesisku sudah disetujui oleh dosen pembimbingku bulan ini dan jadwal seminar proposalku adalah bulan depan.

Keluarga

Alhamdulillah. Ayahku dan ibuku ikut masuk dalam kloter haji tahun ini! Awalnya, kami mengira bahwa masih tahun depan jadwal ayah-ibuku. Namun, ayahku coba menghubungi dinas agama di kabupatenku dan mendapat informasi bahwa ayah-ibuku masuk kloter haji tahun ini.

Tahun ini tahun yang tepat bagi ayah-ibuku naik haji. Aku sedang libur semester kuliah pada bulan Zulhijah sehingga berkesempatan untuk pulang kampung dan tinggal di rumah selama ayah-ibuku naik haji. Kalau saja selisih beberapa tahun, mungkin aku sedang ujian sehingga belum bisa pulang ketika ayah-ibuku berangkat.

Pada semester ke-3 ini, aku tidak pulang pada tengah semester. Pada semester ke-1 lalu, aku sempat pulang karena ada acara di rumah mbahku. Pada semester ke-2 lalu, aku sempat pulang karena ada Idulfitri. Nah, pada semester ke-3 ini, tidak ada acara yang bisa jadi alasan untukku pulang kampung. Belum lagi ibuku pernah bilang, "Enggak usah pulang sering-sering! Boros!" Ya, sudah, deh.

Oh, satu lagi. Pada tahun ini, aku bertemu seorang perempuan yang kurasa cocok denganku, bahkan bisa jadi teman hidupku (semoga, he-he). Yang mengikuti cerita Instagram-ku pasti sudah pernah baca tulisan/puisi yang kubuat tentang hal ini. Hari-hariku lebih berwarna-lah intinya sejak aku bersama dia.

Lain-Lain

Tahun ini tahun demokrasi. Ada banyak yang dipilih tahun ini. Aku sempat membuat surat keterangan pindah DPT, tetapi kubatalkan karena ternyata aku masih libur pada hari pencoblosan. Aku bisa ikut pemilihan presiden, anggota DPR, dan anggota DPD, tetapi tidak bisa ikut pilkada (bupati) karena aku masih di Depok.

Motorku dimaling! Untuk membantuku selama kuliah di Depok, motor kerabat di Pekalongan dipinjamkan dan dikirim ke Depok untuk kupakai. Namun, pada semester ke-2, saat aku sedang salat Asar di sebuah masjid dekat kantor kelurahan di dekat kos, motorku dicuri. Masih ada rekamannya di tempatku. Aku sudah membuat laporan kehilangan di Polsek Beji. Alhamdulillah, jemaah masjidnya membantuku selama mengurus akibat kejadian pada hari itu.

Penutup

Tahun ini penuh berbagai macam cerita. Tahun ini berisi kegagalan, tetapi juga penuh dengan harapan dan keberhasilan. Semoga hal-hal baik juga datang pada tahun depan dan tahun-tahun berikutnya, ya. Aamiin.

Sepertinya itu yang terpikir untuk kutulis kali ini sebagai tulisan penutup tahun 2024 Masehi. Sampai jumpa tahun depan!

Minggu, 24 November 2024

Bot Percakapan dan Interaksi Manusia

Dalam beberapa tahun terakhir, model bahasa besar (large language model/LLM) makin marak digunakan di Indonesia. Banyak perusahaan yang menawarkan LLM dengan berbagai fitur pendukungnya. Para pengguna juga makin terampil dalam memanfaatkan LLM ini.

Tentang LLM

LLM adalah salah satu jenis jaringan saraf tiruan (artificial neural network/ANN) yang disusun dan dilatih untuk mempelajari bahasa manusia serta berukuran besar. LLM juga dapat dilatih secara khusus (fine-tuned) untuk mengerjakan tugas tertentu. Selain itu, LLM yang bersifat umum juga bisa dipandu dengan rekayasa perintah (prompt engineering).

Diagram yang berisi dua masukan, yaitu input dan output yang digeser ke kanan. Tiap masukan diberi nilai tertanam yang mewakili nilainya, lalu dikodekan posisinya. Alurnya berisi perulangan multi-head attention, add, dan batch normalization. Ada juga feed forward biasa pada tahapan tertentu. Komponen ini diakhiri dengan operasi linear dan fungsi aktivasi softmax.
Diagram komponen utama model transformer dari artikel "Attention Is All You Need" (Vaswani, 2017) (digambar ulang oleh Yuening Jia, 2019)

Saat ini, terdapat banyak LLM, antara lain, GPT 4o (OpenAI), Gemini 1.5 (Google DeepMind), Grok 2 (xAI/Twitter), dan Claude 3.5 (Anthropic). Tiap perusahaan bersaing dalam memberikan hasil yang bagus, baik dari sisi kinerja LLM maupun dari sisi penerapannya dalam produk lain, misal untuk bot tanya-jawab layanan/produk.

Pemanfaatan oleh Pengguna

Banyak LLM yang disediakan secara gratis dengan fitur premium untuk yang mau membayar. Hal ini membuat LLM menjadi terjangkau untuk semua kalangan yang memiliki akses ke internet. Makin ke sini, makin terampil orang-orang dalam memanfaatkan LLM ini. Secara umum, banyak yang terbantu dengan keberadaan LLM ini.

LLM digunakan untuk mencari tahu tentang sesuatu yang sulit dicari dengan mesin pencari (Google, Bing, dsb.), memandu dalam memahami suatu konsep, memberi contoh kasus untuk berlatih, dan mendengarkan isi hati. LLM sudah seperti suatu orang yang bisa diajak berbicara. Apakah LLM saat ini sudah lulus uji Turing (uji untuk membedakan antara manusia dan robot dari interaksi) bisa ditentukan pribadi masing-masing.

Banyak orang yang menggunakan LLM sebagai teman mengobrol. Hal ini bisa disebabkan oleh

  • ketersediaan (bisa dihubungi kapan pun),
  • kesesuaian (bisa diatur menjadi persona apa pun), dan
  • kenyamanan (tidak menghakimi).

Sifat tidak menghakimi ini yang menjadi daya tarik banyak orang. Orang-orang yang semula takut bertanya menjadi berani bertanya. Seperti hal lain di internet, orang-orang bisa sesuka hati membalas pertanyaan seseorang, bahkan hingga menghakimi orang yang bertanya. LLM menjadi oasis (ruang aman) di tengah gurun pasir (internet).

Bagi beberapa orang, LLM menjadi teman dekat yang bisa dipercaya untuk mendengarkan banyak hal tentang dia, bahkan sampai menjadi tempat curhat. Ketika banyak orang dengan mudah menghakimi orang lain, LLM bisa memberi ruang aman untuk orang-orang yang perlu teman cerita.

ELIZA dan Relevansinya pada Masa Kini

Hal ini mengingatkanku tentang program/robot percakapan (chat bot) pertama yang dinamai ELIZA. ELIZA adalah program pengolah bahasa alami yang didesain untuk membuat simulasi percakapan secara interaktif. ELIZA bisa diatur dengan sebuah skrip. Skrip ELIZA yang terkenal adalah DOCTOR yang membuat simulasi psikoterapis yang berpusat pada orang (Rogerian psychotherapy).

Berikut contoh percakapan dengan ELIZA (Weizenbaum, 1966):

You : Men are all alike.
ELIZA : In what way?
You : They're always bugging us about something or other.
ELIZA : Can you think of a specific example?
You : Well, my boyfriend made me come here.
ELIZA : Your boyfriend made you come here.
You : He says I'm depressed much of the time.
ELIZA : I am sorry to hear you are depressed.
You : It's true. I am unhappy.
ELIZA : Do you think coming here will help you not to be unhappy?
You : I need some help, that much seems certain.
ELIZA : What would it mean to you if you got some help?
You : Perhaps I could learn to get along with my mother.
ELIZA : Tell me more about your family.
You : My mother takes care of me.
ELIZA : Who else in your family takes care of you?
You : My father.
ELIZA : Your father.
You : You are like my father in some ways.
ELIZA : What resemblance do you see?
You : You are not very aggressive but I think you don't want me to notice that.
ELIZA : What makes you think I am not very aggressive?
You : You don't argue with me.
ELIZA : Why do you think I don't argue with you?
You : You are afraid of me.
ELIZA : Does it please you to believe I am afraid of you?
You : My father is afraid of everybody.
ELIZA : What else comes to mind when you think of your father?
You : Bullies.
ELIZA : Does that have anything to do with the fact that your boyfriend made you come here?

ELIZA masih menggunakan pencocokan pola untuk membuat balasan. Ia juga tidak menyimpan konteks sehingga bisa hilang konteks dan terasa repetitif/monoton. Namun, program sederhana ini bisa membuat simulasi bentuk empati dan ilusi rasa mengerti/pengertian. ELIZA menjadi pelopor dalam kecerdasan buatan untuk percakapan.

Pada masa kini, pemanfaatan bot percakapan untuk tempat curhat makin relevan. Internet yang makin ke sini makin "galak" membuat ruang aman makin sempit. Belum lagi orang-orang yang bisa diajak bercerita juga makin sedikit karena mereka pun juga sedang kesulitan dengan masalah mereka masing-masing.

Kesimpulan

Sejatinya, manusia hanya ingin punya tempat untuk bertanya dan bercerita tanpa rasa takut akan dihakimi ataupun dipandang buruk. Namun, kita juga tidak bisa meminta orang lain agar sesuai dengan kita. Meski bukan cara yang ideal, robot percakapan bisa menjadi alternatif untuk tempat bertanya dan bercerita. Bila diperlukan, segera konsultasikan dengan psikiater yang dipercaya.

Mens sana in corpore sano. Sehat selalu, semuanya!

Rabu, 30 Oktober 2024

Punya Banyak Akun dan Attack Surface

Dalam dunia siber/internet, terdapat istilah attack vector dan attack surface. Suatu attack vector adalah cara-cara untuk menerobos masuk ke suatu sistem informasi. Dengan kata lain, ini adalah lubang dalam keamanan sistem informasi. Istilah vector diambil dari konsep dalam biologi. Kumpulan attack vector disebut sebagai attack surface. Penting untuk mempersempit attack surface dalam suatu sistem, baik dari pihak pengelola sistem maupun dari pihak penggunanya.

Pengelola sistem bisa mengamankan sistemnya, misal dengan memastikan keamanan tiap titik ujung (attack surface). Selain itu, pemeriksaan rutin terhadap otorisasi dan hak tiap pengguna juga diperlukan.

Di sisi lain, kita sebagai pengguna sistem juga perlu mengamankan akun kita. Pada masa sekarang ini, sudah banyak yang sedikit-sedikit buat akun sehingga kita jadi punya banyak sekali akun di berbagai sistem/layanan. Makin banyak sistem tempat kita punya akun, makin luas pula attack surface akun kita di internet. Bagaimana caranya?

Karena kita belum tentu bisa mengamankan sistem yang kita pakai, kita hanya bisa mempercayakannya kepada pengelola sistem tersebut. Yang bisa kita lakukan, antara lain, berikut:

  • menggunakan sandi yang aman (tidak berisi hal-hal/informasi/deskripsi diri);
  • menggunakan sandi yang berbeda untuk tiap akun/platform/sistem (tidak menggunakan sandi berulang);
  • menggunakan autentikasi dua faktor (2FA);
  • waspada terhadap usaha penipuan (phishing); serta
  • memantau aktivitas akun (misal ada yang mencoba masuk atau bahkan yang berhasil masuk).

Mungkin itu yang bisa kutulis saat ini di sela-sela penelitian dan eksperimen. Tetap berhati-hati di internet, semuanya!

Sabtu, 28 September 2024

Algoritma LFSR dan Bilangan Acak pada Komputer

Suatu program komputer tidak bisa menghasilkan bilangan acak sejati karena program komputer bersifat deterministik, yaitu hasilnya hanya ditentukan oleh masukannya. Namun, program komputer bisa menerima masukan dari sumber di luar program komputer sehingga bisa mendapatkan bilangan acak sejati dari luar program komputer.

Bagaimana komputer mendapatkan bilangan acak sejati?

Sebagai contoh, prosesor keluarga x86 memiliki perintah khusus untuk mendapatkan bilangan acak sejati, yaitu RDSEED (panduan lebih lanjut: Intel Digital Random Number Generator dan AMD Secure Random Number Generator). Untuk prosesor lain, seperti ARM, sumber bilangan acak sejati didapat dari komponen lain dalam sebuah sistem-pada-cip (system-on-chip/SoC). Ada juga komputer yang memang tidak memiliki perangkat keras untuk mendapatkan bilangan acak sejati. Dengan kata lain, komputer tersebut hanya mengandalkan pengolahan data oleh perangkat lunak untuk mendapatkan bilangan acak, misal dari jam komputer, gerakan tetikus, dan suara mikrofon.

Meski demikian, penghasil bilangan acak sejati ini hanya mampu menghasilkan 16/32/64 bita acak setiap ratusan siklus, bahkan ribuan siklus, karena komponen ini perlu mengumpulkan cukup data agar entropi dari bilangan acak cukup tinggi. Selain itu, tidak ada jaminan bahwa hasil dari RDSEED atau sejenisnya memiliki distribusi yang seragam. Ada kemungkinan nilai yang diperoleh darinya condong (skew) kepada bilangan tertentu.

Penghasil bilangan acak semu (pseudo-random number generator/PRNG) dibuat untuk menjawab masalah tersebut. Selain lebih cepat, algoritma-algoritma PRNG juga bisa diuji secara matematis bahwa distribusinya seragam sehingga hasilnya lebih bagus. Terdapat banyak contoh PRNG, antara lain, Xorshift, Mersenne Twister, linear-feedback shift register (LFSR), linear congruential generator (LCG), dan metode middle-square. Tiap algoritma PRNG memiliki kelebihan dan kekurangan masing-masing. Yang akan dibahas kali ini adalah linear-feedback shift register (LFSR).

Jadi, apa itu LFSR?

Linear-feedback shift register (LFSR) adalah register geser ke kanan yang menggunakan kombinasi linear dari bit-bit terpilih (disebut taps) untuk mengisi bit paling kiri (sebagai feedback). Operasi XOR sering digunakan sebagai operator kombinasi linear sehingga LFSR biasanya tersusun dari operasi geser dan operasi XOR. Hasil dari LFSR adalah untaian bit yang dikeluarkan dari bit paling kanan/bit satuan.

LFSR berukuran n akan melakukan siklus melalui semua kemungkinan dikurangi satu (2ᵐ - 1, nol tidak dihitung), kecuali jika register sejak awal bernilai nol yang berarti akan selalu nol. Sebagai contoh, LFSR 2-bit akan mulai dari 01, ke 10, ke 11, dan kembali ke 01. Namun, bila dimulai dari 00, LFSR tersebut hanya akan menghasilkan 00.

LFSR dengan XOR memiliki dua bentuk: LFSR Fibonacci dan LFSR Galois. Bentuk Fibonacci mengambil XOR dari bit-bit taps untuk mengisi bit paling kiri, sedangkan bit-bit taps dalam bentuk Galois mengambil XOR dari bit sebelah kiri dengan bit keluaran/paling kanan sebelum pergeseran. Keduanya digambarkan oleh ilustrasi di bawah ini. Perhatikan bahwa penomoran bit LFSR Fibonacci dan LFSR Galois terbalik.

Diagram LFSR Fibonacci yang terdiri dari empat kotak berlabelkan 1, 2, 3, dan 4. Di bawah keempat kotak, terdapat gerbang logika XOR yang menerima masukan dari kotak 3 dan kotak 4 dan meneruskan hasil ke kotak 1. Selain itu, terdapat panah dari kotak 4 ke huruf X (keluaran).
Diagram kerja LFSR Fibonacci 4-bit
Diagram LFSR Galois yang terdiri dari empat kotak berlabelkan 4, 3, 2, dan 1. Di antara kotak 4 dan 3, terdapat gerbang logika XOR yang menerima masukan dari kotak 4 dan kotak 1 dan meneruskan hasil ke kotak 3. Selain itu, terdapat panah dari kotak 1 ke kotak 4 dan panah dari kotak 1 ke huruf X (keluaran).
Diagram kerja LFSR Galois 4-bit

n.b. Pada diagram LFSR Galois, bit paling kiri tidak memiliki gerbang logika XOR karena 0 XOR x akan menghasilkan x pula.

Dari mana kita tahu taps yang sesuai?

Salah satu cara untuk mengetahui taps yang sesuai adalah dengan mencoba kombinasi taps yang mungkin. Namun, untuk mempersempit ruang pencarian, kombinasi taps yang dicari hanyalah yang menggunakan taps berjumlah genap (Ahmad dkk., 1997). Berikut adalah cuplikan tabel taps LFSR Galois yang disusun oleh Ward dan Molteno (2012).

n Jumlah kombinasi Bit-bit taps
232 dan 1
373 dan 2
4154 dan 3
82558, 6, 5, dan 4
1665.53516, 14, 13, dan 11
32±4,3 miliar32, 30, 26, dan 25
64±18 kuintiliun64, 63, 61, dan 60

Bagaimana langkah-langkah pengerjaannya?

Sebagai contoh, kita akan melakukan LFSR Fibonacci 3-bit dengan taps bit ke-2 dan bit ke-3 serta nilai register awal 001. Untuk tiap iterasi, bit-bit register digeser ke kanan, lalu bit ke-1 adalah hasil XOR dari bit ke-2 dan bit ke-3 sebelum pergeseran.

Bit ke- Keterangan
1 2 3
001(nilai register awal)
1000 XOR 1 = 1
0100 XOR 0 = 0
1011 XOR 0 = 0
1100 XOR 1 = 1
1111 XOR 0 = 1
0111 XOR 1 = 0
0011 XOR 1 = 0 (kembali ke awal)

LFSR tersebut menghasilkan untaian 7 bit 1001011 berulang. Untaian bit tersebut cukup "acak". Untuk lebih acak, kita bisa menggunakan ukuran register yang lebih besar agak untaian bit lebih panjang sebelum akhirnya berulang lagi.

Bonus: Contoh Program

register = 1
for i in range(8):
	print(f"{register:03b} -- {(register & 1):01b}")
	bit_baru = (register ^ (register >> 1)) & 1
	register = (register >> 1) | (bit_baru << 2)
Hasil keluaran
001 -- 1
100 -- 0
010 -- 0
101 -- 1
110 -- 0
111 -- 1
011 -- 1
001 -- 1

Cara mendapatkan bit baru (paling kiri) cukup dengan menghitung XOR dari register dan register >> 1 (yang sudah digeser ke kanan sekali), lalu mengambil AND darinya dengan 1 (mengambil bit satuan). Hal tersebut sama dengan melakukan XOR bit terakhir (bit ke-3) dengan bit kedua terakhir (bit ke-2).

Penutup

Itu yang bisa kutulis kali ini. Topik LFSR ini mendadak terpikirkan saat aku mencari ide untuk menulis di blogku ini. Ada dua video yang cocok sebagai pengayaan dari tulisanku ini, sekaligus menjadi inspirasiku dalam menulis pos ini, yaitu "True Random Numbers" dan "Random Numbers with LFSR" yang keduanya dari saluran YouTube Computerphile. Semoga bermanfaat!

Rabu, 28 Agustus 2024

Jaringan Substitusi-Permutasi

Pada pembahasan kali ini, kita beralih dari penyandian teks menjadi penyandian untaian bita secara umum. Karena komputer melihat data sebagai untaian bita-bita, penyandian untaian bita secara umum memampukan kita untuk melakukan penyandian data apa pun, seperti gambar, suara, video, dan dokumen jenis apa pun.

Sandi substitusi dan sandi transposisi (khususnya permutasi) dapat digabungkan menjadi suatu jaringan yang disebut sebagai jaringan substitusi-permutasi (SP). Jaringan SP terdiri atas operasi substitusi (biasa disebut sebagai kotak-S) dan operasi permutasi (kotak-P) yang disusun secara bergantian dan diulang beberapa kali. Jumlah pengulangan SP biasa disebut sebagai jumlah ronde.

Seperti penyandian pada umumnya, jaringan SP mengubah teks pesan menjadi teks tersandi dengan kunci yang diberikan. Untuk mengembalikan teks pesan, teks tersandi dimasukkan ke dalam inversi jaringan SP, yaitu sama dengan jaringan SP, tetapi urutan operasinya dibalik. Sebagai contoh, jaringan K-S-P-K-S-P-K memiliki inversi sebagai berikut: K-P-S-K-P-S-K. K adalah operasi penambahan kunci ke dalam teks.

Komponen Jaringan SP

Kotak-S berisi daftar konversi dari satu bita ke bita lain atau satu untaian bit ke untaian bit lain. Hal ini seperti konversi A menjadi B, lalu B menjadi K, dan seterusnya. Hal ini menyebabkan nilai-nilai bita hasil konversi tidak lagi memiliki hubungan linear terhadap nilai-nilai bita masukan.

Kotak-P berisi cara memetakan suatu bit dalam suatu bita ke bit lain dalam bita lain. Sebagai contoh, dari masukan 8 bita, bit ke-5 dalam bita ke-2 dipetakan ke bit ke-7 dalam bita ke-5. Hal ini menyebabkan susunan bit tidak lagi sama dengan sebelumnya sehingga relasi antara teks pesan dan teks tersandi menjadi sulit dimengerti.

Sebelum, setelah, dan di antara operasi substitusi dan permutasi, terdapat operasi penambahan kunci ke dalam teks. Namun, kunci yang digunakan berbeda-beda untuk tiap ronde, padahal hanya ada satu kunci yang diberikan. Caranya adalah penjadwalan kunci.

Penjadwalan kunci adalah cara untuk mendapatkan nilai kunci yang berbeda-beda untuk tiap ronde berdasarkan satu kunci yang diberikan. Terdapat beberapa cara untuk melakukannya, misalnya TEA membagi kunci 128 bit menjadi empat kunci 32 bit yang digunakan bergantian atau AES memiliki prosedur yang lebih kompleks untuk menjadwalkan kunci.

Contoh Kasus

Sebagai contoh, kita akan menyandikan pesan C5 37 2B 9F dengan menggunakan struktur K-S-P-K-S-P-K dan ukuran masukan empat bita. Selain itu, kunci yang diberikan juga empat bita: 58 65 9F DD.

Spesifikasi Jaringan SP

Berikut adalah nilai kotak-S yang digunakan dalam AES:

_0_1_2_3_4_5_6_7_8_9_A_B_C_D_E_F
0_637C777BF26B6FC53001672BFED7AB76
1_CA82C97DFA5947F0ADD4A2AF9CA472C0
2_B7FD9326363FF7CC34A5E5F171D83115
3_04C723C31896059A071280E2EB27B275
4_09832C1A1B6E5AA0523BD6B329E32F84
5_53D100ED20FCB15B6ACBBE394A4C58CF
6_D0EFAAFB434D338545F9027F503C9FA8
7_51A3408F929D38F5BCB6DA2110FFF3D2
8_CD0C13EC5F974417C4A77E3D645D1973
9_60814FDC222A908846EEB814DE5E0BDB
A_E0323A0A4906245CC2D3AC629195E479
B_E7C8376D8DD54EA96C56F4EA657AAE08
C_BA78252E1CA6B4C6E8DD741F4BBD8B8A
D_703EB5664803F60E613557B986C11D9E
E_E1F8981169D98E949B1E87E9CE5528DF
F_8CA1890DBFE6426841992D0FB054BB16

Untuk kasus ini, kita bisa membuat kotak-P agar menukar satu bita dengan bita sebelahnya. Sebagai contoh, empat bit pertama dari bita ke-1 ditukar dengan empat bit kedua dari bita ke-2, empat bit pertama dari bita ke-3 ditukar dengan empat bit kedua dari bita ke-4, dan seterusnya.

Operasi penambahan kunci hanya melakukan XOR dengan kunci. Selain itu, penjadwalan kunci yang akan kita gunakan sederhana, yaitu hanya melakukan geseran melingkar ke kiri (<<<) sebanyak satu bita untuk tiap ronde.

Perhitungan

Perhitungan dari kasus di atas ditunjukkan dalam tabel berikut:

OperasiTeksKunci
Keadaan awalC5372B9F58659FDD
Penambahan kunci9D52B44258659FDD
Substitusi5E008D2C<<<
Permutasi0E05CD28
Penambahan kunci6B9A1070659FDD58
Substitusi7FB8CA51<<<
Permutasi8FB71A5C
Penambahan kunci106A42399FDD5865

Hasil penyandiannya adalah 10 6A 42 39.

Bonus: Program C
Program C
#include <stdio.h>
#include <stdint.h>

#define UKURAN 4

void penambahanKunci(uint8_t *A, const uint8_t *kunci) { // K
	for (int i = 0; i < UKURAN; i ++)
		A[i] ^= kunci[i];
}

void substitusi(uint8_t *A, const uint8_t *kotakS) { // S
	for (int i = 0; i < UKURAN; i ++)
		A[i] = kotakS[A[i]];
}

void permutasi(uint8_t *A) { // P
	for (int i = 0; i < UKURAN; i += 2) {
		uint8_t lawas1 = A[i + 0];
		uint8_t lawas2 = A[i + 1];
		A[i + 0] = lawas1 & 0x0F | (lawas2 << 4) & 0xF0;
		A[i + 1] = lawas2 & 0xF0 | (lawas1 >> 4);
	}
}

void geserKunci(uint8_t *kunci) { // <<<
	uint8_t k = kunci[0];
	for (int i = 0; i < UKURAN - 1; i ++)
		kunci[i] = kunci[i + 1];
	kunci[UKURAN - 1] = k;
}

void jaringanSP(uint8_t *pesan, uint8_t *kunci, const uint8_t *kotakS) {
	penambahanKunci(pesan, kunci); // K
	substitusi(pesan, kotakS);     // S
	permutasi(pesan);              // P
	geserKunci(kunci);             // <<<
	penambahanKunci(pesan, kunci); // K
	substitusi(pesan, kotakS);     // S
	permutasi(pesan);              // P
	geserKunci(kunci);             // <<<
	penambahanKunci(pesan, kunci); // K
}

int main() {
	uint8_t pesan[] = {0xC5, 0x37, 0x2B, 0x9F};
	uint8_t kunci[] = {0x58, 0x65, 0x9F, 0xDD};
	uint8_t kotakS[256] = {};
	// https://id.wikipedia.org/wiki/Kotak-S_Rijndael
	initialize_aes_sbox(kotakS);
	jaringanSP(pesan, kunci, kotakS);
	printf("%X %X %X %X\n", pesan[0], pesan[1], pesan[2], pesan[3]);
	return 0;
}

Prinsip Shannon

Jaringan SP memenuhi prinsip pengacakan dan penghamburan Shannon.

  • Pengacakan: Bila salah satu bit teks pesan diubah, hasil dari kotak-S akan jauh berbeda yang kemudian akan makin tersebar oleh kotak-P. Hal ini berulang dalam beberapa ronde. Hasilnya adalah teks tersandi sulit untuk ditebak hanya dengan perubahan kecil.
  • Penghamburan: Bila salah satu bit kunci diubah, kunci ronde disebar ke seluruh/potongan teks sehingga perubahan teks tersandi sulit dilacak.

Penutup

Sekian dahulu tulisanku kali ini. Aku sudah ingin membahas ini sejak lama, terutama bagian menulis kode programnya, tetapi menunggu tulisan pembahasan sandi substitusi dan sandi transposisi selesai agar pembahasannya runtut. Semoga bermanfaat!