Langsung ke konten
AFM Studio
  • Halaman

    AFM Studio
  • Karya
  • Lab
  • Tentang
  • CV
  • Kontak
  • Proyek

    AksaraPerpustakaan pengetahuan Otorita IKN yang bisa dicari, dengan server memeriksa akses setiap pembaca di tiga tingkat
  • Daily TaqwaSistem presensi salat anti-manipulasi untuk ~2.000 pegawai OIKN di Masjid Negara IKN
  • Lantara v2Mesin perizinan Otorita IKN tempat administrator menambah jenis izin baru dari layar, tanpa developer
  • eKiosk IKNDua ruang kendali untuk Nusantara: konten kios dan pelacakan bus live dengan estimasi kedatangan yang menilai dirinya sendiri
  • E-Monev IKNPlatform pemantauan pembangunan Nusantara selama 23 tahun, melacak progres triwulan setiap unit terhadap 24 KPI
  • JDIH OIKNPortal dokumen hukum publik OIKN, dengan alur penerbitan terkendali dan ringkasan AI yang tidak pernah keluar dari server
  • Jejak PenanamanAplikasi absen acara penanaman pohon IKN yang membuktikan peserta hadir di lokasi lewat selfie ber-geofence
  • Dashboard SAKTIPipeline malam dan dashboard yang menggantikan unduhan anggaran manual di keenam satker OIKN
  • DoseRxKalkulator dosis untuk 127 obat yang membulatkan dosis ke tablet dan sirup yang dijual apotek Indonesia
  • CubiqPelatih speedcubing dengan timer setara kompetisi dan solver buatan sendiri untuk 8 puzzle utama
  • ScimotionPerpustakaan sains interaktif berisi 86 artikel, masing-masing dijelaskan bersama animasi yang bisa dikendalikan pembaca
  • WA Daily Scrum BotBot WhatsApp yang menagih laporan standup tim 14 orang dan menandai tugas yang macet berhari-hari

↑ ↓ untuk berpindah · Enter untuk membuka · Esc untuk menutup

Congestion Lab

Simulator per paket yang menunjukkan kenapa panggilan video tersendat saat ada yang mulai mengunduh di rumah

Tangkapan layar
algoritma congestion control, satu pengirim bersama
5
hasil riset dicek sebelum setiap deploy
4
skenario yang bisa dibagikan, masing-masing satu efek
9
paket disimulasikan dalam sekitar setengah detik
288 ribu
Di halaman ini

Masalahnya

Setiap koneksi internet memutuskan, berkali-kali dalam sedetik, seberapa cepat ia boleh mengirim data. Keputusan itu menjelaskan masalah sehari-hari: kenapa panggilan video tersendat saat ada orang di rumah mulai mengunduh, atau kenapa server yang jauh terasa lambat di jaringan yang cepat. Biasanya ini diajarkan lewat satu gambar, garis bergerigi yang tidak pernah kita lihat proses terbentuknya.

Ada empat hal yang tetap tersembunyi tanpa simulator. Server yang berjarak 300 ms pulih dari paket yang hilang enam kali lebih lambat daripada server berjarak 50 ms, dengan bandwidth yang sama. "Slow start" ternyata menggandakan kecepatan setiap putaran. Buffer router yang terlalu besar menambah jeda sampai hitungan detik tanpa kehilangan satu paket pun. Dan berbagi jalur secara adil hanya berhasil dalam kondisi tertentu. Congestion Lab dibuat untuk mahasiswa jaringan, engineer yang tahu istilahnya tapi belum melihat mekanismenya, dan para pengajarnya.

Yang saya bangun

Setiap paket disimulasikan, kurvanya mengikuti

Saya membangun simulator yang mengirim paket satu per satu lewat jalur virtual. Paket mengantre di router, dibuang saat antrean penuh, lalu dikonfirmasi penerimanya. Kecepatan kirim yang terlihat adalah hasil reaksi algoritmanya. Tidak ada kurva yang berasal dari rumus. Simulator yang menggambar bentuk yang sudah diharapkan tidak akan pernah memberi kejutan, padahal kejutan itulah inti proyek ini.

Hasil riset menentukan boleh tidaknya deploy

Simulator yang salah tetap bisa menggambar garis bergerigi yang meyakinkan, jadi saya tidak memercayainya hanya dengan melihat. Empat hasil independen dari literatur riset diperiksa di berbagai rentang pengaturan, dan kalau gagal, deploy diblokir. Keempatnya mencakup throughput saat ada paket hilang, pemakaian jalur dibanding ukuran buffer, keunggulan server yang dekat, dan cara dua pengirim menuju bagian yang sama besar. Dua di antaranya sudah lolos sebelum saya membuat satu layar pun. Aturannya: kalau pemeriksaan gagal, simulatornya yang salah, dan toleransinya tidak diubah.

Lima algoritma memakai satu pengirim

Saya mengimplementasikan lima algoritma congestion control dari spesifikasi resminya: Tahoe, Reno/NewReno, CUBIC, Vegas, dan BBR v1. Semuanya terpasang di pengirim yang sama, jadi perbandingannya hanya mengukur algoritmanya. Di jalur yang panjang dan cepat, awalnya semua algoritma terlihat sama karena pemulihan paket hilang menjadi hambatannya. Karena itu saya menambahkan selective acknowledgement, yang tidak ada di rencana awal, supaya perbandingannya bermakna.

Empat grafik berbagi satu sumbu waktu

Tampilan utamanya menumpuk jendela pengiriman, antrean router, throughput, dan waktu bolak-balik pada satu sumbu waktu. Membaca lurus ke bawah di titik mana pun menunjukkan alasan pengirim bertindak seperti itu. Halaman bufferbloat menjalankan unduhan yang sama lewat buffer dalam dan lewat antrean yang dirancang untuk membatasi jeda: throughput-nya hampir sama, sedangkan jedanya berbeda sepuluh kali lipat. Setelah setiap simulasi, situs menuliskan temuannya dalam kalimat sederhana, dalam bahasa Indonesia atau Inggris, lengkap dengan sumbernya.

Batas modelnya ditunjukkan

Beberapa perilaku tidak bisa dimodelkan dengan setia di sini. Saya mencatatnya sebagai celah dan menampilkannya di tempat celah itu memengaruhi hasil. Ada satu hasil yang mengejutkan saya. Dengan antrean sederhana yang membuang paket saat penuh, waktu kedatangan paket kadang membalik keunggulan server yang dekat. Pemeriksaan keadilan saya pindahkan ke antrean yang membuang paket secara acak, dan efek mengejutkan itu tetap punya tesnya sendiri.

Hasilnya

Congestion Lab sudah live dan terbuka untuk umum, dalam bahasa Indonesia dan Inggris. Ada sembilan skenario pilihan, masing-masing menunjukkan satu efek yang punya nama, dan setiap simulasi bisa dibagikan lewat tautan tanpa akun atau server. Simulatornya mengolah 288.000 paket dalam sekitar setengah detik di thread latar. Tidak ada pustaka simulasi atau grafik yang dipakai. Audit aksesibilitas otomatis tidak menemukan pelanggaran di lima halamannya saat itu, dalam kedua bahasa. Saya membangunnya dalam sekitar 10 jam pada 6 Agustus 2026.

Di balik layarDetail teknis untuk engineer
  • Mesin discrete-event di lib/sim/ (~3.600 baris): jam virtual, priority queue, serialisasi link, disiplin antrean, pengirim dan penerima, serta buku besar paket.
  • (config, seed) → SimTrace identik per byte di mesin mana pun: waktu dalam nanodetik integer, tanpa Date, tanpa keacakan tanpa seed, dan timestamp yang sama diurutkan dengan nomor urut monoton eksplisit.
  • Konservasi paket (sent = delivered + dropped + in flight) diverifikasi di setiap event pada setiap test suite.
  • Keempat oracle: throughput Mathis et al. 1997, utilisasi terhadap ukuran buffer dan BDP, rasio ketidakadilan RTT pada Reno, dan konvergensi AIMD Chiu & Jain 1989. Sebelum ada UI, Mathis cocok dalam 13% di 5 laju kehilangan × 4 RTT, dan ukuran buffer dalam 1% di 9 ukuran buffer.
  • Setiap algoritma mengimplementasikan onAck, onLoss, onTimeout, dan canSend. Tidak ada if (algorithm === 'cubic') di pengirim. Pengirim CBR berlaju tetap dipakai sebagai acuan.
  • SACK mengikuti RFC 2018 dan RFC 6675, bisa diatur per flow lewat sackEnabled, dan mati untuk Tahoe.
  • Disiplin antrean: DropTail, RED, dan CoDel. Pada DropTail yang deterministik, efek fase Floyd–Jacobson membalik bias RTT, jadi oracle keadilan berjalan di RED dan efek fase diverifikasi di tests/oracles/rtt-unfairness.test.ts.
  • Simulasi 60 detik di 100 Mbps berisi sekitar setengah juta paket. Field yang sering dipakai disimpan di typed array dengan tabel samping dan hidrasi malas; simulasi berjalan di Web Worker dengan anggaran event. Benchmark di M0: 288 ribu paket dalam ~0,5 detik dengan heap yang tidak bertambah.
  • MODEL_GAPS di lib/sim/engine.ts: tanpa RACK atau Tail Loss Probe, tanpa delayed ACK, tanpa HyStart, ACK tidak pernah mengantre atau hilang, segmen selalu satu MSS, dan batas bawah RTO 200 ms (Linux), bukan 1 detik seperti RFC 6298.
  • lib/analysis/insight.ts menyusun kalimat temuan dalam kedua bahasa. Keadilan diukur dengan indeks Jain dari waktu ke waktu dan diagram fase Chiu-Jain.
  • TraceChart mengukur container-nya dan menyatakan jarak dalam piksel perangkat, setelah label 11px ternyata tampil sekitar 4px di ponsel dalam viewBox tetap 1000 unit.
  • bund (3,0:1) dan sediment (2,9:1) lolos kontras untuk garis tapi tidak untuk teks, jadi ditambahkan varian -ink yang aman untuk teks.
  • Nol pelanggaran axe-core di kelima rute dalam kedua bahasa pada M6. 6 rute × 2 bahasa, 148 tes di 18 berkas, ~12.100 baris TypeScript, 34 commit, tiga dependensi runtime.

Tangkapan layar

Landing Page
Trace
Compare
Fairness
Queue and AQM
Scenarios

Sedang merekrut, atau membangun hal serupa?

Saya terbuka untuk posisi full-time dan proyek freelance tertentu.