esc
Lompat ke konten

05Uses

Yang dipakai harian

Perangkat yang ada di meja, lingkungan tempat kodenya ditulis, dan layanan yang menjalankan situs ini. Kelompok terakhir bisa Anda periksa sendiri lewat header situs ini dan catatan DNS domainnya.

Meja

Satu tempat kerja tetap, dipilih supaya tidak ada yang perlu dipikirkan lagi setelah dibeli.

Mesin
PC rakitan · AMD Ryzen 9 9950X (16 inti / 32 utas) · 64 GB DDR5-6000

Enam belas inti dipilih bukan untuk satu build yang cepat, melainkan supaya type-check, dev server, container basis data, dan browser yang sedang di-profil bisa hidup bersamaan tanpa satu pun menunggu yang lain. 64 GB membuat saya berhenti menutup jendela demi mengosongkan memori.

Grafis
NVIDIA GeForce RTX 4070 Ti Super

Mendorong dua panel 4K sekaligus dan mengambil alih encoding saat merekam demo, jadi perekaman tidak memakan inti yang sedang dipakai build.

Penyimpanan
NVMe Gen4 2 TB · NVMe 4 TB

Yang cepat untuk sistem dan repositori aktif, yang besar untuk arsip proyek dan image container. Dipisah supaya “disknya penuh” tidak pernah jadi alasan menunda sesuatu.

Layar
2× 27" 4K, satu dipasang vertikal

Yang mendatar memuat editor dan browser berdampingan pada ukuran huruf yang tidak memaksa mata; yang vertikal memegang log, diff, dan dokumen panjang — tiga hal yang bentuk aslinya memang tinggi, bukan lebar.

Keyboard
Keychron Q1 Pro · Gateron Jupiter Brown, keycap PBT

Rangka aluminium dan gasket mount, jadi bunyinya rendah dan tidak mengganggu di panggilan video. Tata letaknya bisa diprogram di papan itu sendiri, bukan lewat aplikasi yang harus jalan di latar.

Tetikus
Logitech MX Master 3S

Roda gulir horizontalnya dipakai tiap hari untuk menyusuri tabel lebar, lini masa, dan diff yang melebar keluar layar.

Audio
Sony WH-1000XM5

Peredam bisingnya yang membuat kerja di ruang ramai tetap mungkin. Dipakai tanpa musik lebih sering daripada dengan.

Mikrofon
Shure MV7

Panggilan klien adalah bagian pekerjaan yang paling sering rusak oleh hal sepele. Mikrofon yang jelas menghilangkan satu kalimat yang paling membuang waktu di rapat mana pun: “maaf, tadi terputus, bisa diulang?”

Kursi
Herman Miller Aeron

Pengeluaran terbesar di meja ini dan satu-satunya yang tidak pernah saya sesali. Ia dipakai lebih lama daripada mesinnya, dan akan bertahan lebih lama juga.

Meja
Meja berdiri, tinggi bermotor

Bukan demi berdiri seharian — melainkan supaya berganti posisi tidak menuntut keputusan. Tombol yang butuh dua detik akan ditekan; penyetelan yang butuh dua menit tidak akan pernah.

Perangkat kedua

Yang dipakai ketika pekerjaannya tidak bisa menunggu sampai saya kembali ke meja — dan ketika mesin utama justru bukan tempat yang tepat untuk memeriksanya.

Laptop
MacBook Pro 14" · M4 Pro · 24 GB

Bukan sekadar mesin cadangan. Safari dan macOS tidak bisa diuji dari Windows, dan keduanya sumber paling sering dari bug yang tidak pernah muncul di mesin utama. Mesin ini yang menangkapnya sebelum klien yang menangkapnya.

Uji perangkat
iPhone · satu Android kelas menengah

Android-nya sengaja bukan kelas atas. Perangkat kencang menyembunyikan halaman yang berat sampai ia sampai ke tangan orang yang perangkatnya tidak kencang — dan itu mayoritas pengunjung di Indonesia. Setiap halaman yang saya serahkan sudah dibuka di kedua perangkat ini lebih dulu, lewat jaringan seluler, bukan Wi-Fi rumah.

Tablet
iPad Air · Apple Pencil

Dipakai untuk membaca ulang rancangan dan menandai revisi jauh dari editor. Menilai tata letak di perangkat yang tidak bisa saya sunting membuat saya membacanya seperti pengguna, bukan seperti penulisnya.

Lingkungan

Sistem
Windows 11 Pro
Shell
PowerShell untuk harian, WSL2 kalau butuh POSIX

Dua shell, dan batasnya jelas: PowerShell memegang apa pun yang menyentuh Windows sendiri, WSL2 memegang skrip yang nanti akan jalan di server Linux. Menjalankan skrip deploy di lingkungan yang berbeda dari tujuannya adalah cara paling mudah menemukan bug di tempat yang paling mahal.

Runtime
Node.js · npm · fnm untuk mengunci versi per proyek

Versinya dicantumkan di dalam proyek dan berpindah sendiri begitu saya masuk foldernya. Menjalankan kode klien di runtime yang berbeda dari servernya menghasilkan bug yang cuma muncul setelah rilis — tempat paling mahal untuk menemukannya.

Editor
Cursor

Turunan VS Code, jadi ekstensi dan pintasannya sama persis — pindah ke sini tidak menuntut belajar ulang apa pun.

Terminal
Windows Terminal · WSL2 (Ubuntu)

Satu jendela memegang tab PowerShell dan tab Ubuntu berdampingan, jadi berpindah antara keduanya tidak memutus alur kerja. Berkas proyeknya tetap di sisi Linux — menaruhnya di seberang batas sistem berkas adalah penyebab paling umum WSL terasa lambat, dan orang biasanya menyalahkan WSL-nya.

Huruf
JetBrains Mono

Dipilih karena nol dan huruf O, serta angka satu dan huruf l kecil, tidak pernah tertukar. Membaca ulang kunci API yang salah satu karakternya keliru adalah cara membuang setengah jam untuk kesalahan yang tidak pernah perlu terjadi.

Alur kerja

Bagian yang tidak kelihatan di tangkapan layar, dan justru bagian ini yang menentukan sebuah proyek masih bisa dilanjutkan setahun kemudian — oleh saya atau oleh orang lain.

Kontrol versi
Git · riwayat linear, pesan commit yang menjelaskan sebab

Rebase alih-alih merge, supaya riwayatnya terbaca sebagai catatan perubahan dan bukan sebagai log penyimpanan. Pesan commit menjawab kenapa, bukan apa — apa-nya sudah ada di diff, dan kenapa-nya cuma ada di kepala penulisnya sampai ia menuliskannya.

Mutu kode
TypeScript strict · ESLint · Prettier, dijalankan sebelum commit

Bukan disiplin pribadi, melainkan hook yang menolak commit-nya. Aturan yang bergantung pada ingatan akan dilanggar tepat pada hari yang paling sibuk — hari yang sama ketika kesalahan paling mahal dibuat.

Pengujian
Playwright untuk alur kritis, Vitest untuk logika

Tidak mengejar persentase cakupan. Yang diuji adalah jalur yang kalau rusak berarti uang atau data hilang — pendaftaran, pembayaran, dan ekspor. Sisanya diuji dengan membacanya.

Layanan pendukung
Docker · versi basis data disamakan dengan produksi

Basis data dan antrean tiap proyek berjalan di container pada versi yang sama persis dengan servernya. Setelah itu “di mesin saya jalan kok” berhenti jadi kalimat yang bisa dipakai siapa pun.

Klien API
Bruno

Koleksi permintaannya berupa berkas biasa di dalam repositori, bukan isi akun di layanan awan. Artinya ia ikut ditinjau, ikut berversi, dan tetap ada setelah siapa pun berhenti berlangganan.

Klien basis data
TablePlus

Menelusuri bug dengan melihat barisnya langsung hampir selalu lebih cepat daripada menebaknya dari log. Sambungan ke basis data produksi disimpan hanya-baca.

Rahasia & kredensial
1Password

Kredensial klien tidak pernah berada di berkas teks biasa, riwayat percakapan, atau berkas .env yang ikut terkirim. Saat serah terima kepemilikannya dipindahkan, bukan disalin — supaya akses saya benar-benar berakhir, bukan sekadar tidak dipakai lagi.

Catatan
Obsidian · berkas Markdown biasa

Catatan tiap proyek berupa berkas di disk, bukan baris di layanan yang suatu hari bisa tutup. Keputusan yang dicatat saat dibuat adalah satu-satunya cara menjawab “kenapa dulu dibikin begini” dua tahun kemudian.

Server rumah

Berjalan 24 jam di rumah, dan tidak ada satu pun port yang diteruskan ke internet.

Mesin
Rakitan · Ryzen 7 5700X · 64 GB ECC · UPS line-interactive

ECC dipilih karena mesin ini memegang satu-satunya salinan beberapa hal, dan memori yang diam-diam salah adalah kerusakan yang tidak muncul di log mana pun. UPS-nya bukan supaya tetap bekerja saat listrik mati, melainkan supaya ia sempat mati dengan rapi — pemadaman singkat adalah cara paling umum sebuah pool ZFS rusak.

Hypervisor
Proxmox VE

Tiap layanan duduk di container atau VM sendiri, dengan snapshot diambil sebelum tiap perubahan. Membatalkan pembaruan yang gagal jadi urusan satu menit, bukan satu malam.

Penyimpanan
ZFS · 4× 8 TB RAIDZ1 · NVMe untuk cache

RAIDZ1 menahan satu disk mati tanpa kehilangan apa pun. Yang lebih penting, checksum ZFS menangkap bit yang berubah diam-diam — jenis kerusakan yang RAID biasa justru rajin menyalin ke cerminnya.

Cadangan
Restic ke object storage · aturan 3-2-1

RAID bukan cadangan. Yang benar-benar menyelamatkan bukan disk kedua di kotak yang sama, melainkan salinan di luar rumah yang tidak ikut terhapus ketika saya salah mengetik satu perintah.

Jaringan
2,5GbE · VLAN terpisah untuk perangkat IoT

Perangkat pintar murah adalah bagian paling lemah dari jaringan rumah mana pun, dan yang paling jarang diperbarui. Mereka duduk di VLAN sendiri dan tidak bisa melihat satu pun mesin yang penting.

Akses jarak jauh
Tailscale (WireGuard)

Tidak ada port yang diteruskan dari router, dan server ini tidak punya alamat publik — jadi tidak ada yang bisa memindainya. Menerbitkan panel admin ke internet demi kenyamanan adalah kesalahan yang cuma perlu terjadi sekali.

Yang berjalan
Cermin repositori, runner CI, lingkungan staging, arsip foto, dan catatan internal

Staging yang berjalan di sini berarti klien bisa melihat dan menyetujui perubahan sebelum satu baris pun menyentuh produksi. Cermin repositorinya ada supaya pekerjaan tidak berhenti kalau layanan pihak ketiga sedang mati.

Menjalankan situs ini

Semuanya bisa diperiksa dari luar — lewat header situs ini atau catatan DNS domainnya.

Hosting
Vercel

Deploy dari push ke main, dan halaman statis dengan revalidasi tiap jam — tidak ada server yang perlu dijaga.

Domain
Jagoan Hosting, nameserver di Vercel

Registrar dan DNS sengaja dipisah: sertifikat serta catatan situs ikut deploy, sementara kepemilikan domainnya tidak menempel pada penyedia hosting.

Surel masuk
ImprovMX

Penerusan, bukan kotak surat. Alamat di domain sendiri tanpa satu pun kotak masuk baru untuk dijaga.

Surel keluar
Resend

Dipakai formulir kontak. SPF dan DMARC-nya sudah dipasang, jadi kirimannya tidak mendarat di folder spam.

Data
Upstash Redis

Penghitung baca dan pembatas laju formulir. Satu-satunya keadaan yang disimpan situs ini.

Kode
GitHub

Sekaligus sumber angka aktivitas di beranda dan /now — ditarik lewat API, bukan diketik ulang.