feat: add content
This commit is contained in:
parent
ae467a31de
commit
780c6008fa
110
content/1-tahun-di-delman.md
Normal file
110
content/1-tahun-di-delman.md
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
---
|
||||||
|
title: 1 tahun di Delman
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: 1-tahun-di-delman
|
||||||
|
date: 2021-06-30T05:31:15.000Z
|
||||||
|
date_updated: 2021-06-30T05:31:15.000Z
|
||||||
|
excerpt: "disclaimer: views are my own and do not reflect my employer and my ex"
|
||||||
|
---
|
||||||
|
|
||||||
|
Gue bukan tipe orang yang gampang berpindah, dan sampai hari ini sejujurnya masih kurang yakin juga apakah itu hal yang baik atau justru sebaliknya.
|
||||||
|
|
||||||
|
Pada akhir Maret 2020 kemarin gue ngobrol dengan salah satu pendiri Delman dan mengajukan posisi sebagai Frontend Engineer untuk departemen Engineering nya Delman. Pengajuan tersebut bermulai dari DM Twitter dengan [bapak theo](https://twitter.com/tibudiyanto) yang dilanjutkan dengan komunikasi via surel agar lebih profesional.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/06/Screen-Shot-2021-06-30-at-4.50.21-PM.png)gue rasa disini ga ada informasi sensitif, jadi gue share anyway
|
||||||
|
Ketika melihat 2 *requirements *tersebut gue sejujurnya jadi kurang semangat khususnya di poin nomor 2, karena gue tinggal di Bandung. Lalu gue *ghosting *deh sekitaran 1 bulanan karena gue tidak menyanggupi poin nomor 2 *for some reason.*
|
||||||
|
|
||||||
|
Ketika pemerintah mengumumkan *lockdown*, gue rasa ini waktu yang tepat untuk kembali lagi setelah menghilang sekian minggu tanpa kabar. Percakapan masih berada di DM Twitter dan gue bilang beberapa hal (masih dengan orang yang sama) khususnya tentang *onsite interview *di Jakarta yang tidak bisa gue sanggupi.
|
||||||
|
|
||||||
|
Lalu gue dapat penawaran kalau *interview *dilakukan daring (should I thank... C word?) lalu terjadilah *interview *selama 3 ronde dengan level C (CEO, CDO, CTO).
|
||||||
|
|
||||||
|
Dalam negosiasi kita sama-sama menyanggupi apa yang gue expect dari Delman dan begitupula sebaliknya.
|
||||||
|
|
||||||
|
Sebelum resmi bergabung dengan tim Delman, salah satu teman gue mengajak bergabungditempat dia. Dia IC, dan perusahaan tersebut adalah salah satu perusahaan ISP swasta, dan ISP adalah salah satu industri yang bergairah untuk gue + bekerja langsung dibawah dia gue rasa sesuatu yang menarik.
|
||||||
|
|
||||||
|
Kalau seandainya pas negosiasi untuk bisa kerja *remote *dari Bandung gue tidak disanggupi sama Delman, gue rasa gue akan memilih yang ISP karena sama-sama *onsite *dan juga karena kantornya di Sudirman bukan di Pejaten 😛
|
||||||
|
|
||||||
|
So, congrats, I guess?
|
||||||
|
|
||||||
|
## Working culture
|
||||||
|
|
||||||
|
Satu hal yang terbayang ketika kerja di startup adalah fleksibilitas.
|
||||||
|
|
||||||
|
Overall kultur bekerja (khususnya di departemen Engineering) di Delman oke. Tidak ada "blame culture" sebagaimana yang ditulis di halaman karir mereka, sehingga kita bisa menyelesaikan masalah secara objektif daripada subjektif.
|
||||||
|
|
||||||
|
*...oke gue masih pakai `git-blame(1)` untuk mengetahui siapa penulis kode, namun murni untuk melakukan Google Meet dengan orang tersebut untuk menghindari menanyakan hal ke orang yang kurang tepat. Anyway.*
|
||||||
|
|
||||||
|
Secara *leadership *di Delman (menurut gue) timnya relatif bekerja sebagai ["managers of one"](https://signalvnoise.com/posts/1430-hire-managers-of-one), actually kita ada PM namun so far yang gue lihat bertindak sebagai Product Manager x Product Owner (let's say Head of Product, as the title says) daripada sebagai *manager* secara umumnya.
|
||||||
|
|
||||||
|
Kalo lo expectnya kerja di startup itu selalu menuruti whatever PIC lo mau dan lo cuma bisa "noted", disini gak seperti itu (at least yang gue rasakan). Setiap orang berhak bersuara, so far ada 5 RFCs (1 Engineering, 4 Frontend) yang pernah gue buat selama 1 tahun. Terlepas bagaimana kelanjutannya RFC tersebut nanti, yang pasti maksud Request For Comment as in "RFC" tersebut tersampaikan (didikusikan).
|
||||||
|
|
||||||
|
Dan juga di Delman benar-benar memaknai *work-life balance*. Sejujurnya ini membosankan, but I love it anyway. Selama 1 tahun gue di Delman, gue hampir gak pernah lembur. Oke kadang gue cuma mindahin waktu kerja pas lagi gak *mood (misal dari jam 13-15 ke 19-21) *asalkan pas jam kerja gue *standby *di ruang percakapan *just in case* ada yang lagi butuh gue.
|
||||||
|
|
||||||
|
Dan so far belum ada yang mempermasalahkan itu.
|
||||||
|
|
||||||
|
Terakhir, sekali lagi, sebagaimana kultur di startup: fleksibilitas.
|
||||||
|
|
||||||
|
Terkadang gue terjun ke bagian infra meskipun posisi gue adalah Frontend, yang pertama karena gue (seharusnya) bisa dan yang kedua karena gue mau. Gue kadang ikut mengatur CI/CD nya Delman, *setup *VPN (sometimes fucking ancient VPN) yang menghubungkan antara layanan Delman dengan klien enterprise, dan melakukan *deployment. *Untuk yang poin terakhir, setiap *engineers* di Delman memang mendapatkan jatah untuk melakukan *deployment, but anyway.*
|
||||||
|
|
||||||
|
## Current work
|
||||||
|
|
||||||
|
Sejauh ini hal yang udah gue lakukan bersama tim—selain mengembangkan fitur & bug—adalah melakukan migrasi ke monorepo, mengatur e2e testing, dan mengatur *development environment *menjadi lebih mudah khususnya ketika proses *onboarding *anggota tim baru.
|
||||||
|
|
||||||
|
Salah satu misi gue di Delman (sebagai Software Engineer) adalah ingin memaksimalkan DX. So far belum tercapai namun setidaknya sekarang kita udah punya `bootstrap.sh` 😛
|
||||||
|
|
||||||
|
Codebase untuk produk utama Delman sendiri sudah relatif besar, ada 80,918 baris kode berdasarkan keluaran dari perintah `fd-find -t f js . | xargs wc -l` dan ada 838 berkas berdasarkan keluaran dari perintah `fd-find -t f . | wc -l` per 30 Juni 2021 6.06 PM.
|
||||||
|
|
||||||
|
Dan berdasarkan [perintah ini](https://stackoverflow.com/a/20414465), berikut "statistik" gue di *branch* utama selama setahun:
|
||||||
|
|
||||||
|
fariz,: 773 files changed, 22234 insertions(+), 9136 deletions(-), 13098 net
|
||||||
|
|
||||||
|
And that's kinda something, I guess.
|
||||||
|
|
||||||
|
Dan di hari ini (30 Juni 2021) adalah *commit *pertama gue di *codebase *produk nya Delman di *frontend*!
|
||||||
|
[![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/06/Screen-Shot-2021-06-30-at-9.30.03-AM.png)](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/06/Screen-Shot-2021-06-30-at-9.30.03-AM.png)klik gambar untuk versi lebih besar
|
||||||
|
And yeah, selama 5 hari—kalau gak salah inget—gue menghabiskan waktu untuk *"onboarding" *khususnya dalam memahami *codebase *dan *behavior *nya produk utama Delman*.*
|
||||||
|
|
||||||
|
## What's next?
|
||||||
|
|
||||||
|
Sebagaimana generasi Z (I guess?) lainnya bahwa sudah menjadi rahasia umum untuk menjadi kutu loncat, dan menurut infrografik dari [Beritagar](https://lokadata.id/artikel/sebagai-kutu-loncat-karyawan-gen-x-disalip-gen-z) (sekarang Lokadata) generasi Z dominan (57,3%) hanya bekerja 1 tahun (atau kurang, gue yakin) di 1 perusahaan.
|
||||||
|
|
||||||
|
Gue bisa dibilang generasi Z karena lahir diantara tahun 1995-2010 jika menurut [Wikipedia](https://id.wikipedia.org/wiki/Generasi_Z) dengan catatan jika generasi Y (milenial) adalah kelahiran 1981-1994.
|
||||||
|
|
||||||
|
Tapi sebagaimana yang ditulis di paragraf paling pertama: Gue bukan tipe orang yang gampang berpindah, dalam konteks apapun. Namun dalam konteks pekerjaan, satu-satunya alasan kenapa gue susah pindah adalah karena gue tidak memiliki *resume/CV.*
|
||||||
|
|
||||||
|
That's right.
|
||||||
|
|
||||||
|
Gue sejujurnya lupa apakah gue ngirim CV gue ke Delman apa enggak (semoga ngirim) tapi yang gue tau: gue paling menghindari bikin CV, di arsip email gue gak ada attachment CV, dan gue pernah minta CV gue ke HR (untuk kepentingan klien) dan ternyata gak ada hahaha.
|
||||||
|
|
||||||
|
Anyway, itu salah satu alasan gue males pindah.
|
||||||
|
|
||||||
|
Sampai detik ini bahkan gue gak punya CV. Kalo emang harus banget, paling gue manfaatin [resume.github.io](https://resume.github.io/) atau gak kalau dulu gue buat versi PDF nya halaman LinkedIn gue (sekarang udah gak main LinkedIn).
|
||||||
|
|
||||||
|
Apapun itu, sejujurnya gue belum kepikiran buat mencari petualangan baru.
|
||||||
|
|
||||||
|
Tapi nih, kalau tempat kerja lo memenuhi beberapa poin berikut:
|
||||||
|
|
||||||
|
- Mendukung budaya *remote *(literally, bukan hanya tentang working from home™)
|
||||||
|
- Berada di industri jaringan (data center, CDN, VPN, aplikasi/layanan P2P, dsb)
|
||||||
|
- Peduli dengan komunitas Open Source
|
||||||
|
- Menggunakan FreeBSD!
|
||||||
|
- Merasa cocok dengan gue
|
||||||
|
- Mengirim CV adalah opsional
|
||||||
|
|
||||||
|
Bisa menjadi pertimbangan hahaha.
|
||||||
|
|
||||||
|
Sejauh ini perusahaan yang gue tau memenuhi beberapa poin diatas dan yang ada di radar gue adalah [fly.io](https://fly.io), [Tailscale](https://tailscale.com/), [Twingate](https://www.twingate.com/), dan [Oxide](https://oxide.computer/). Meskipun 4 perusahaan tersebut bukanlah perusahaan Indonesia, a man can dream, right?
|
||||||
|
|
||||||
|
## Penutup
|
||||||
|
|
||||||
|
Overall gue bersyukur menjadi bagian dari tim Delman. The company is superb (and VC-funded, btw), the founders are brilliant, the coworkers are great and the products are cool. Pasar untuk produk utama Delman sendiri adalah [enterprise](https://www.forbes.com/profile/delman/), and that's something.
|
||||||
|
|
||||||
|
Salah satu alasan gue waktu itu memilih Delman adalah karena gue lagi tertarik dengan industri data, dan technically ingin mengetahui bagaimana industri ini bekerja. Sebelumnya, gue mau *apply *ke [Segment](https://segment.com) (a man can dream, once again) karena doi banyak kontribusi ke komunitas Open Source dan gue rasa itu seksi, tapi gue urungkan pertama selain karena terlalu nekat (in any level) juga karena... C word.
|
||||||
|
|
||||||
|
*Lumayan C word bisa dijadikan kambing hitam. Anyway.*
|
||||||
|
|
||||||
|
Sebagai penutup, gue merasa sudah cukup menjadi seorang Frontend Engineer selama ~6 tahun (gue memutuskan untuk menjadi "spesialis frontend" di sekitar tahun 2015) ini dan tertarik untuk pindah ke jalur lain, dari: Software Engineer (in general), Network Engineer/DevOps something (I'm sysadmin since forever!), Management (I guess?) dan Developer Relation/Advocate (DevRel, community ftw!).
|
||||||
|
|
||||||
|
And if you are interested in working with us to solve a challenging problem (writing JavaScript is also challenging, btw), head over to Delman's career page very now.
|
||||||
|
|
||||||
|
Ada banyak yang tidak gue ceritakan disini terkait bekerja di Delman, karena tulisan ini hanyalah introduksi terkait gambaran bekerja di Delman dan jika ingin mengetahui gambaran lengkapnya: send your best cover letter & resume and see you on board!
|
180
content/1-tahun-di-fediverse.md
Normal file
180
content/1-tahun-di-fediverse.md
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
---
|
||||||
|
title: 1 tahun di 'fediverse'
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: 1-tahun-di-fediverse
|
||||||
|
date: 2022-11-11T15:47:37.000Z
|
||||||
|
date_updated: 2022-11-11T15:47:37.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Pada tahun 2021 kemarin gue sempat menjalankan Mastodon untuk pertama kalinya. Tidak lama kemudian sempat berpindah ke [Pleroma](https://pleroma.social/), yang lalu pada tanggal 26 Oktober 2021 kembali lagi ke Mastodon, sampai hari ini.
|
||||||
|
|
||||||
|
Alasan menjalankan *instance *Mastodon sendiri sampai hari ini sebenarnya hanya satu: Ingin meninggalkan sosial media *mainstream* namun tetap ingin memiliki kehadiran *online*. Akhir-akhir ini beberapa tokoh publik mulai meninggalkan memiliki media sosial alternatif dari Twitter setelah Elon secara resmi mengakuisisi Twitter, yang dilanjutkan dengan beberapa kabar yang kurang mengenakkan terkait masa depan Twitter.
|
||||||
|
|
||||||
|
Beberapa orang mungkin menjadikan Twitter sebagai tempat utama untuk berkeluh kesah, mungkin untuk mencari nafkah, atau mungkin sekadar untuk mencari hiburan. Jika alasan utama meninggalkan Twitter dan beralih ke Mastodon (atau alternatif lain) hanya karena 3 hal tersebut, gue yakin sebagian besar akan gagal dan akan kembali ke Twitter.
|
||||||
|
|
||||||
|
Umumnya sosial media disebut dengan "social network" tapi gue rasa kata sosial media (atau media sosial?) lebih umum digunakan di Indonesia, fwiw.
|
||||||
|
|
||||||
|
Sebelum menyelam lebih dalam, gue ingin berbagi tentang alasan gue ingin meninggalkan sosial media mainstream yang ada. Dari Facebook, Twitter, Google+, Pinterest, Tiktok, Quora, Plurk (anyone?), Instagram, Snapchat, dan lain-lain.
|
||||||
|
|
||||||
|
## The Joy Of Missing Out
|
||||||
|
|
||||||
|
Sampai hari ini gue tidak kepikiran model bisnisnya bila sosial media adalah sebuah produk. Ambil contoh game, lo membayar sekian rupiah di Steam untuk dapat memainkan permainan yang dikembangkan oleh si pengembang game. Lo akan berpikiran seperti "the best thing money can buy" khususnya bila pengalaman yang lo dapat ketika/setelah bermain game tersebut sebanding dengan uang yang lo keluarkan.
|
||||||
|
|
||||||
|
Cukup sederhana.
|
||||||
|
|
||||||
|
Sosial media cukup sulit bila dijual sebagai produk, tidak ada nilai sebanding yang bisa ditukar dari sosial media. Umumnya produk utama dari perusahaan yang mengoperasikan sosial media adalah iklan, dan yang dijual adalah penggunanya. Siapa pembelinya? Siapapun yang ingin beriklan.
|
||||||
|
|
||||||
|
Produknya beragam, dari segmentasi pengguna per lokasi; gender, umur, dan ketertarikan. Ingin mengiklankan produk kepada pengguna pria berumur 21-25 yang berada di daerah Jakarta Selatan? You name it!
|
||||||
|
|
||||||
|
Karena produknya adalah pengguna, bagaimanapun yang terus dikembangkan adalah... penggunanya itu sendiri. Dari seberapa sering pengguna mengakses sosial media sampai ke seberapa lamanya. Metriks tersebut berguna agar iklan yang ditayangkan optimal dan tepat sasaran. Disamping itu, untuk membuat penayangan iklan lebih optimal lagi, iklan harus ditayangkan ke target yang relevan. Cukup aneh bila pengguna yang tidak meminum kopi mendapatkan iklan tentang produk kopi terbaru, bukan? Karena hal itu, mereka harus mengumpulkan data terkait pengguna se-relevan mungkin, bila kata 'sebanyak mungkin' terdengar agak menyeramkan.
|
||||||
|
|
||||||
|
Dampaknya, silahkan lihat statistik di *screen time *kalian. Atau di dasbor DNS query kalian jika cukup nerd. Berapa kali anda membuka sosial media X dalam sehari? Dalam seminggu? Sebulan? Dan berapa lama membukanya dalam sehari?
|
||||||
|
|
||||||
|
Teknik untuk 'pengoptimalan' tersebut beragam, namun gue rasa kita sepakat bahwa cara yang paling umum adalah untuk membuat pengguna menjadi ['hooked'](https://www.amazon.com/Hooked-How-Build-Habit-Forming-Products/dp/1591847788). Membuat 'menggunakan sosial media' menjadi bagian dari kebiasaan si pengguna, sampai membuatnya kecanduan.
|
||||||
|
|
||||||
|
Sehingga kalimat "ada apa nih? baru gak buka twitter 3 jam udah ketinggalan berita aja" menjadi sesuatu, dan akan merasa ada yang hilang ketika aktivitas yang biasa dilakukan, tidak dilakukan.
|
||||||
|
|
||||||
|
## Signal-to-noise ratio
|
||||||
|
|
||||||
|
Sosial media terkadang menjadi tempat yang *pas *untuk melakukan personal branding. In fact, pekerjaan gue sampai hari ini bermula dari interaksi singkat yang terjadi di Twitter, yang mungkin usaha gue dalam membangun personal brand disana agak berperan.
|
||||||
|
|
||||||
|
Banyak akun yang ingin gue ikuti kabarnya, dari akun personal sampai bisnis, karena gue tertarik mengikuti pembaruan yang terjadi di lini masa mereka.
|
||||||
|
|
||||||
|
Entah karena gue buruk dalam menggunakan sosial media atau bagaimana, sayangnya gue **lebih banyak mendapatkan apa yang****tidak ingin****gue *dengar *dan mendapatkan lebih sedikit apa yang ingin gue dengar.** Berdasarkan asumsi pribadi, ini karena rancangan sosial media yang memang dirancang untuk memudahkan banyak orang untuk saling terhubung.
|
||||||
|
|
||||||
|
Bayangkan lo seperti mencari stasiun radio yang pas, namun lo lebih banyak mendengar kebisingan daripada suara penyiar yang ingin lo dengar.
|
||||||
|
|
||||||
|
Lalu ada satu hal yang membuatnya semakin sempurna: vanity metrics. Dari jumlah pengikut, jumlah retweet, jumlah share, jumlah like, jumlah penayangan, dsb. Metriks yang seharusnya hanya berguna untuk pembeli produk, namun menjadi berguna juga bagi *si produk* hanya untuk memenuhi kepuasan.
|
||||||
|
|
||||||
|
Dan ini by design.
|
||||||
|
|
||||||
|
Bukan tanpa alasan mengapa "you may also like", "trending topics", "discover", "for your page" dsb ada. Dan polanya adalah: *ada**banyak orang yang menyukai/membicarakan tentang ini, mungkin lo juga akan suka.*
|
||||||
|
|
||||||
|
## The very shitpost
|
||||||
|
|
||||||
|
Terkadang ada saja yang gue pikirkan. Dari yang mungkin cukup bernilai sampai ke yang sebatas sampah. Actually kebanyakan yang sampah. Kadang sampah tersebut harus dibuang, beberapa orang mungkin bisa dengan mudah melupakan/mengabaikannya, tapi kalau gue seringnya harus dibuang dan "sosial media" sepertinya tempat yang pas.
|
||||||
|
|
||||||
|
You know, sampah-sampah remeh dari keluhan harga kopi langganan naik 2rb sampai ke hitung-hitungan living cost di jaksel yang dirasa "too cute to ignore".
|
||||||
|
|
||||||
|
Sebuah tanda kalau dulu gue kurang dapat perhatian.
|
||||||
|
|
||||||
|
Anyway, jika gue memikirkan sesuatu terus-terusan, seperti, memikirkan sesuatu dari ketika sedang di transjakarta dan masih memikirkannya ketika jalan kaki balik ke kosan, biasanya akan menjadi tulisan jika gue ada energi sampai ke menerbitkanya, seperti tulisan ini.
|
||||||
|
|
||||||
|
Jika gue memikirkan sesuatu lalu gue ketik dan selama 2 menit tidak gue hapus, biasanya akan gue publikasikan di akun Mastodon gue, dan akan berada disana jika gue tidak ada mood untuk menghapusnya di lain waktu.
|
||||||
|
|
||||||
|
Selainnya, berarti gak penting-penting amat atau mungkin karena sedang ada kesibukan yang lain. Atau mungkin visibility nya hanya untuk follower-only/me.
|
||||||
|
|
||||||
|
Namun bagian pentingnya adalah: entah mengapa gue ingin orang lain melihat sampah tersebut. Entah bagaimana gue ingin orang lain tahu apa yang sedang gue pikirkan tersebut, sekalipun itu adalah sampah. Dan gue rasa orang lain pun akan mengabaikannya jika tidak peduli ataupun tidak ingin mengetahuinya. win-to-win.
|
||||||
|
|
||||||
|
## Mastodon love story
|
||||||
|
|
||||||
|
Berdasarkan 3 poin utama diatas, gue menjalankan *instance *Mastodon sendiri di jaringan rumah. Mengapa Mastodon dan bukan *software *lain, karena alasan preferensi, atau lebih tepatnya terkait hal-hal teknis.
|
||||||
|
|
||||||
|
Instance ini *invite-only*, dan hanya orang-orang yang gue mau yang bisa mendaftar disini. Bukan berarti gue menutup diri ataupun ["calling out"](https://en.wikipedia.org/wiki/Cancel_culture), dan justru disini keindahan Mastodon daripada sosial media mainstream.
|
||||||
|
|
||||||
|
Gue ingin melakukan segmentasi. Kebanyakan [instance Mastodon](https://joinmastodon.org/servers) memiliki kategori, dari per regional sampai ke per topik. Anggap segmentasi seperti "lo kalo dari Indonesia, join sini!" atau "lo kalo seneng bahas tentang mobil tua, disini tempatnya!". Di instance gue, segmentasinya adalah "kalau kita kenal dan ingin keep in touch, sini join".
|
||||||
|
|
||||||
|
Di sosial media mainstream, tidak ada segmentasi. Literally seperti "sini join twitter karena di tongkrongan yang kagak pake twitter cuma lo doang bang" dan lalu lo main twitter karena mereka (dan teman mereka dan temannya teman mereka) ada disana.
|
||||||
|
|
||||||
|
Tapi ada satu efek sampingnya: tidak semua yang ingin lo lihat di Mastodon, ada di Mastodon. And it doesn't matter. Tidak semua orang yang ingin gue hubungi ada di email, tapi gue tetap bisa keep in touch dengan mereka anyway.
|
||||||
|
|
||||||
|
Bagian menarik lainnya dari Mastodon daripada sosial media mainstream adalah Mastodon bukanlah sebuah platform, melainkan implementasi dari sebuah protokol terbuka. Biasanya Mastodon disamakan dengan email, lo bisa mengirim pesan ke teman lo di gmail.com meskipun lo menggunakan icloud.com.
|
||||||
|
|
||||||
|
Jika platform, sederhana, lo tidak bisa mengikuti kabar teman lo di Facebook sedangkan lo hanya menggunakan Twitter.
|
||||||
|
|
||||||
|
Dari semua sosial media yang gue sebutkan, kebanyakan mereka akan agak memaksa lo untuk bergabung ke platform tersebut jika lo tidak memiliki akun ataupun tidak terautentikasi disana. Silahkan lihat akun acak di Twitter tanpa login, dan tunggu beberapa detik sampai popup "See more Tweets from X. People on Twitter are the first to know" muncul.
|
||||||
|
|
||||||
|
Dan lo (ataupun pemilik dari akun tersebut) tidak memiliki kontrol untuk itu.
|
||||||
|
|
||||||
|
Yang paling penting, Mastodon ada bukan untuk profit. Tidak ada profit yang diharapkan dari menjalankan instance Mastodon di internet, sekalipun it costs money (there ain't no such thing as a free lunch, baby!). Biasanya admin instance menawarkan donasi ke penggunanya untuk bisa membantu menutupi biaya, tetapi tidak jarang juga si admin menjalankan instance tersebut secara sukarela.
|
||||||
|
|
||||||
|
Balik lagi, karena bukan untuk profit tersebut, komunitas Mastodon fokus untuk membuat Mastodon menjadi lebih baik lagi, bukan fokus ke bagaimana agar penggunanya bisa sering dan betah berlama-lama di Mastodon sehingga potensi iklan dilihat dan diklik menjadi lebih besar.
|
||||||
|
|
||||||
|
Dan, ya, di Mastodon tidak ada iklan karena produk dari Mastodon adalah Mastodon itu sendiri, yang dikembangkan oleh komunitas dan bukan perusahaan for-profit.
|
||||||
|
|
||||||
|
And did I mention Mastodon is [Open Source?](https://github.com/mastodon/mastodon)
|
||||||
|
|
||||||
|
## Menggunakan Mastodon
|
||||||
|
|
||||||
|
Mastodon dirancang untuk bisa melayani pengguna sebanyak mungkin. Dari 1 pengguna aktif sampai ke [173,000 pengguna.](https://mastodon.social) Tapi yang gue yakin, Mastodon (ataupun alternatif lainnya) akan lebih ideal bila penggunanya 'cukup' di instance tersebut.
|
||||||
|
|
||||||
|
Khususnya bila tidak ada 'orang khusus' untuk melakukan moderasi ataupun karena instance tersebut lebih untuk kepentingan 'kekeluargaan' daripada 'komunitas'.
|
||||||
|
|
||||||
|
Untuk skala komunitas, moderasi pasti harus dilakukan, meskipun hanya memiliki Code of Conduct pun cukup membantu.
|
||||||
|
|
||||||
|
Awal ketika menggunakan Mastodon, lo akan bingung. Mungkin mempertanyakan suatu hal karena tidak menemukan apa yang lo cari di Mastodon. Bayangkan seperti membuat akun email pertama kali, dan lo bingung ingin melakukan apa dengan email tersebut, sampai lo sadar bahwa lo hanya menggunakan email ketika sedang membutuhkannya saja.
|
||||||
|
|
||||||
|
Ya, protokol hanyalah "membantu memfasilitasi" karena "membantu mencari" adalah karakteristik platform. Seiring berjalannya waktu, lo akan mendapatkan apa yang lo cari dengan cara lo sendiri. Seperti, membagikan alamat email lo dan memberitahu siapapun untuk bisa menghubungi lo melalui email.
|
||||||
|
|
||||||
|
Lalu beberapa akan tersadar akan tujuan utama dalam menggunakan sosial media: untuk mendapatkan lebih banyak apa yang ingin didengar dan mendapatkan lebih sedikit apa yang tidak ingin didengar.
|
||||||
|
|
||||||
|
Sebagai penutup dari poin ini, ada satu hal yang menurut gue killer feature nya Mastodon: Post visibility. Di Mastodon, lo bisa membagikan sesuatu berdasarkan audiens, dari public; hanya pengikut, hanya yang disebutkan (seperti DM) dan hanya diri lo (dan moderator i guess). Di sosial media mainstream, visibility tersebut berada di level akun, bukan audiens. Lo tidak bisa membagikan sesuatu hanya untuk pengikut jika akun lo publik.
|
||||||
|
|
||||||
|
Dan lo bisa mengganti setiap ada kata Mastodon di tulisan ini dengan "brand" lain seperti [Pleroma](https://pleroma.social/), [Misskey](https://misskey-hub.net/en/), [GNU Social](https://www.gnusocial.rocks/), dsb selagi menggunakan protokol (terbuka) yang sama yakni [ActivityPub.](https://activitypub.rocks/)
|
||||||
|
|
||||||
|
## What's next?
|
||||||
|
|
||||||
|
Instance Mastodon gue berjalan di jaringan rumah yang pada saat ini (ketika pindah ke Jakarta) kurang stabil. Tidak jarang instance tersebut tidak bisa diakses melalui jaringan internet, meskipun gue masih bisa mengaksesnya ketika sedang berada di rumah.
|
||||||
|
|
||||||
|
Instance gue berjalan di mini komputer Intel NUC dengan 2 CPU dan 8 GiB memory, berbarengan dengan 20 container/proses lainnya yang sedang berjalan, termasuk blog ini. Dan somehow berjalan dengan mulus meskipun kendala utamanya hanyalah koneksi internet.
|
||||||
|
|
||||||
|
Komponen utama dari Mastodon ada 3: Web (sesuatu yang lo lakukan di browser), Streaming (untuk melakukan live update sehingga lo tidak perlu melakukan refresh manual), dan worker (sesuatu untuk memproses pekerjaan dibelakang layar seperti menampilkan kabar orang lain di lini masa lo). Basis data yang direkomendasikan adalah PostgreSQL untuk menyimpan data persisten (seperti untuk menyimpan data status yang lo bagikan) dan Redis untuk menyimpan data ephemeral (seperti penunjuk ke foto profile lo yang gak mungkin lo ganti setiap 10 detik sekali).
|
||||||
|
|
||||||
|
Jadi totalnya ada 5 komponen. Butuh keahlian sysadmin dasar untuk bisa menjalankan Mastodon sendiri, atau lebih tepatnya menjalankan apapun sendiri pada umumnya. Namun ada layanan pihak ketiga yang spesialis menjalankan Mastodon untuk lo seperti [mastohost](https://masto.host/), sehingga lo tidak perlu mempelajari apapun terkait administrasi sistem termasuk menggunakan Minio alih-alih block device untuk menyimpan media statis.
|
||||||
|
|
||||||
|
Di bulan yang sama (Oktober 2021) gue juga menjalankan instance Pixelfed gue sendiri yang bisa diakses [disini.](https://edgy.photo/@rizaldy) Motivasinya tidak jauh berbeda dengan menggunakan Mastodon, namun khusus untuk shitpost yang didekasikan menggunakan foto sebagai media utama lol.
|
||||||
|
|
||||||
|
Gue tidak ada kepikiran untuk kembali ke Twitter, meskipun minggu lalu gue mengaktifkan kembali akun Instagram... karena sebuah misi.
|
||||||
|
|
||||||
|
Dan sejauh ini, belum ada kepikiran untuk [mematikan instance Mastodon](https://ashfurrow.com/blog/mastodon-technology-shutdown/) karena gue tidak merasakan bahwa menjalankan instance Mastodon gue sendiri menjadi sebuah liabilitas. Mungkin belum, semoga tidak pernah.
|
||||||
|
|
||||||
|
## Penutup
|
||||||
|
|
||||||
|
Jika kepikiran dan masih ragu-ragu untuk beralih ke Mastodon, just give it a shot! Pastikan bergabung dengan instance yang sesuai dengan preferensi, rekomendasi gue ada:
|
||||||
|
|
||||||
|
- [mstdn.io](https://mstdn.io/about/more) untuk yang general purpose
|
||||||
|
- [Fosstodon](https://fosstodon.org/about/more) untuk yang tertarik dengan FOSS (Free/Open Source Software)
|
||||||
|
- [BSD Network](https://bsd.network/about/more) untuk yang tertarik dengan apapun terkait *BSD (bukan komplek random di tangerang)
|
||||||
|
|
||||||
|
Ada juga instance Misskey yang gue tahu seperti [misskey.id](https://misskey.id/) yang dijalankan oleh pengguna dari Indonesia yang memiliki pengguna aktif cukup banyak. Dan, yes, lo bisa mengikuti akun [Mastodon gue](https://edgy.social/@rizaldy) sekalipun tidak menggunakan Mastodon (fediverse, baby!).
|
||||||
|
|
||||||
|
Jika ingin menjalankan instance Mastodon pribadi (di VPS, Kubernetes (please don't), jaringan rumah, dsb), [let me know](https://s3.rizaldy.club/rizaldy-club-ghost/contact/) if you need a hand! But be aware: self-hosting is addictive if you go down the rabbit hole iykwim ;)
|
||||||
|
|
||||||
|
Ada banyak masalah yang terdapat di sosial media mainstream. Silahkan hitung ada berapa banyak buku; artikel, karya ilmiah, film, dsb yang membahas tentang sosial media. Mungkin masalah tersebut akan ada juga di Mastodon, atau di Pleroma, atau di Misskey, atau di sosial media manapun.
|
||||||
|
|
||||||
|
Dan tahukah apa masalahnya? People.
|
||||||
|
|
||||||
|
It's always about people.
|
||||||
|
|
||||||
|
Bertahun-tahun platform mencoba menyelesaikan masalah yang berkaitan dengan manusia ini menggunakan sesuatu yang disebut *algoritma*. Berbagai riset dan solusi dilakukan, namun sampai saat ini masalah terkait moderasi belum bisa diselesaikan sepenuhnya. Mungkin karena manusia terlalu kompleks dan beragam, dan robot belum bisa memahami kerumitan dan keberagaman tersebut seutuhnya.
|
||||||
|
|
||||||
|
Dan pada akhirnya, cara yang paling ideal untuk berurusan dengan manusia adalah dengan sentuhan manusia itu sendiri. Belum masanya robot menjadi 'manusiawi' dan memiliki sifat-sifat yang membuat manusia menjadi manusia—mungkin suatu saat nanti.
|
||||||
|
|
||||||
|
Yang maksudnya, jika "blocklist" bukanlah cara yang ideal untuk melakukan moderasi, mungkin bisa mempertimbangkan untuk menerapkan "allowlist". Pendekatan "block by default unless allowed" efektif di lingkungan yang cukup sensitif meskipun terkesan gatekeeping dan kurang friendly, mungkin itu salah satu alasan mengapa Mastodon menyediakan fitur "invite-only" ataupun "need approval" ketika ingin mendaftar di salah satu instance: untuk mempermudah moderasi dikemudian hari.
|
||||||
|
|
||||||
|
Anyway, jika tidak memiliki masalah yang berkaitan dengan sosial media mainstream ataupun apapun yang dibahas disini, then, good for you. Jika X bukan untuk siapapun, berarti Y pun seharusnya bukan untuk siapapun.
|
||||||
|
|
||||||
|
Alternatif dari menggunakan Mastodon (atau Pleroma, atau Misskey, atau lebih spesifiknya "melakukan microblogging") adalah dengan melakukan blogging. Fitur sosial dari blogging (seperti berinteraksi melalui kolom komentar misalnya) akan ada disana, tapi sifatnya opsional tergantung keinginan dari si pemilik blog.
|
||||||
|
|
||||||
|
Selainnya, mungkin silahkan hanya bersosial di dunia "nyata". Cari hobi, bergabung dengan komunitas, lakukan apa yang disuka. Setiap orang memiliki cara yang beragam dalam bersosial.
|
||||||
|
|
||||||
|
Dan sebagai penutup, welcome to Fediverse.
|
||||||
|
|
||||||
|
Fediverse bukanlah hal yang baru. Bertahun-tahun pengguna internet dapat bertukar informasi dan berfederasi tanpa batas sekalipun [ekosistem bergerak.](https://signal.org/blog/the-ecosystem-is-moving/)
|
||||||
|
|
||||||
|
Dan kumpulan jaringan kecil yang saling terhubung dengan kumpulan lainnya adalah yang membuat internet menjadi internet.
|
||||||
|
|
||||||
|
An interconnected network.
|
||||||
|
|
||||||
|
Dan bagaimana untuk kesimpulan dalam menjalankan Mastodon (dan Pixelfed!) dalam setahun ini? Normal, very normal. Dan kabar buruknya gue jadi lebih banyak membuka Hacker News daripada sosial media seperti Mastodon, Pixelfed, LinkedIn, Instagram, dkk (good news, I guess?)
|
||||||
|
|
||||||
|
Jika belum terlalu familiar ataupun belum terlalu mengerti dengan Mastodon, berikut video perkenalan tentang Mastodon di YouTube:
|
||||||
|
|
||||||
|
Sebagai penutup, sekali lagi, welcome to Fediverse.
|
||||||
|
|
||||||
|
And maybe it's time for Mastodon's eternal september.
|
||||||
|
|
||||||
|
Welcome to Fediverse.
|
||||||
|
|
||||||
|
*[— @rizaldy@edgy.social](https://edgy.social/@rizaldy)*
|
63
content/2-tahun-di-delman.md
Normal file
63
content/2-tahun-di-delman.md
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
---
|
||||||
|
title: 2 tahun di Delman
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: 2-tahun-di-delman
|
||||||
|
date: 2022-06-30T05:52:00.000Z
|
||||||
|
date_updated: 2022-07-01T05:52:50.000Z
|
||||||
|
excerpt: "disclaimer: views are my own and do not reflect my employer or my ex"
|
||||||
|
---
|
||||||
|
|
||||||
|
Time flies fast. Fucking fast. 30 Juni kemarin menulis [1 tahun di Delman](https://s3.rizaldy.club/rizaldy-club-ghost/1-tahun-di-delman/) dan sekarang angka tersebut ditambah satu!
|
||||||
|
|
||||||
|
Ada banyak perubahan yang terjadi baik dari awal gue masuk sampai ke 1 tahun bekerja di perusahaan ini, sampai sekarang—atau tepatnya di 25 Juni kemarin—yang mana adalah tahun kedua gue. Jika di tahun pertama kebanyakan gue membahas tentang alasan gue memulai, di tahun ini gue rasa adalah tentang alasan gue bertahan.
|
||||||
|
|
||||||
|
Let's start from the working culture.
|
||||||
|
|
||||||
|
## Working culture
|
||||||
|
|
||||||
|
Sejak awal negosiasi untuk bisa bekerja *remote *dari Bandung, sampai hari ini gue masih bekerja *remote, *sekalipun sudah tidak lagi di Bandung. Dan seperti tempat kerja kebanyakan, beberapa sudah menerapkan untuk WFO *yet* gue rasa klo di tempat gue sekarang belum ada rencana untuk itu (jika melihat di job posting—we're still [hiring](https://glints.com/id/opportunities/jobs/mid-to-senior-frontend-engineer/e05a31ea-0683-40bb-8e6f-e46c4998464e) by the way).
|
||||||
|
|
||||||
|
Jam kerja masih fleksibel (and always been, I guess?) dan work-life balance masih dipertahankan. Gue bener-bener baru mengetahui bagaimana nikmatnya jam kerja yang fleksibel ketika sudah tidak sefleksibel dulu. Menikmati bagaimana rasanya kalender seringkali kosong, membuka Google Meet paling hanya 2 kali seminggu, dan, ehm, kesempatan untuk bangun siang dan bekerja selama 8 jam, meskipun tidak jauh berbeda dengan bangun pagi dan bekerja selama 8 jam. But still.
|
||||||
|
|
||||||
|
Selain itu gue menjadi lebih banyak berbaur dengan tim dan divisi lain, which is very interesting. And sometimes with C-level though still not used to this kind of situation yet. Anyway, dari segi pengembangan diri juga cukup oke. Beberapa teman mendapatkan promosi, gue minta X untuk Y (i.e: kepentingan R&D) juga oke-oke aja selagi reasonable (most likely), dan pengajuan cuti pretty straightforward dan kagak berbelit-belit.
|
||||||
|
|
||||||
|
Kultur bekerja hampir tidak ada yang berubah sejak awal gue masuk, kecuali terdapat beberapa perubahan yang mengarah ke arah yang positif gue rasa. Satu hal yang gue rasa berbeda adalah, we're busier than ever.
|
||||||
|
|
||||||
|
And I guess that's good news, no?
|
||||||
|
|
||||||
|
## Current work
|
||||||
|
|
||||||
|
Sekitar 7 tahun gue berkarir sebagai Software Engineer spesialisasi di Frontend. Di tahun kemarin gue ada rencana untuk pindah jalur, dan di tahun ini—setelah berbagai pertimbangan—akhirnya gue sudah mantap dan eventually terealisasi!
|
||||||
|
|
||||||
|
Menurut gue pribadi 7 tahun bukanlah waktu yang singkat. Cukup banyak perkembangan yang gue pelajari dan rasakan di dunia Frontend. Pasar frontend masih menjanjikan dan supply-demand nya gue rasa masih cukup menjanjikan. Tapi sayangnya gue merasa sudah tidak melihat diri gue di masa depan lagi khususnya di bidang ini, dan I guess sudah waktunya untuk try something new.
|
||||||
|
|
||||||
|
Sejak dulu gue sangat antusias dengan komputer, dengan jaringan, dengan bagaimana keduanya dapat bekerja sesuai fungsinya. Gue mendapat kesempatan untuk membantu mengatur beberapa infrastruktur nya Delman, karena itu adalah hobi gue dan gue dipercayai memiliki kapabilitas untuk melakukannya. Sempat diberikan tawaran untuk mengurus infrastruktur Delman secara keseluruhan, tapi dulu gue tunda karena merasa infrastrukturnya belum sekompleks itu.
|
||||||
|
|
||||||
|
Waktu berlalu dan infrastruktur semakin kompleks yang berbarengan dengan semakin beragamnya kebutuhan, yang kebanyakan datang dari faktor eksternal. Gue menawarkan diri untuk menjadi seorang DevOps Engineer dengan membuat proposal dan menjelaskan motivasi; tujuan, tanggung jawab dsb di posisi tersebut, and eventually I'm here. Karena kebetulan sebelumnya juga gue ditawari posisi Senior Software Engineer untuk Frontend, ketika berpindah haluan pun gue menjadi Senior DevOps Engineer, yang tentunya dengan banyak pertimbangan khususnya terhadap kapabilitas, kontribusi, dan performa gue.
|
||||||
|
|
||||||
|
## What's next?
|
||||||
|
|
||||||
|
Semakin dalam gue menekuni industri data, semakin banyak pula tantangan yang belum pernah gue ketahui dan alami, baik secara teori maupun secara teknis. Gue mendengar istilah baru dari Data Warehouse sampai Data Lake sampai gabungan antara/dari keduanya. Juga, berurusan dengan data diberbagai skala membuat tantangan baru untuk gue agar dapat merancang infrastruktur yang dapat diandalkan baik dari sisi performa sampai ke keamanan.
|
||||||
|
|
||||||
|
Dari segi bisnis pun cukup menantang. Memberikan [harga](https://s3.rizaldy.club/rizaldy-club-ghost/berapa-budget-untuk-x/) bukan lagi tentang paket Pro sekian paket Enterprise sekian. Di lingkungan *cloud *yang relatif fleksibel ini membuat komputasi menjadi lebih murah dan mudah dari sebelumnya, sehingga dapat lebih mudah dan lebih banyak dalam menjangkau pengguna di berbagai skala dan kebutuhan, secara fair.
|
||||||
|
|
||||||
|
Salah satu tantangannya tentu saja dalam menetapkan margin mengingat konsep keuntungan/kerugian selalu tentang pemasukan dan pengeluaran.
|
||||||
|
|
||||||
|
Dan tahun ini sepertinya akan cukup menantang dan menggairahkan.
|
||||||
|
|
||||||
|
Also, sepertinya gak perlu capek-capek membuat resume baru mengingat gue gak pernah menyimpan CV gue hahaha.
|
||||||
|
|
||||||
|
## Penutup
|
||||||
|
|
||||||
|
As one of person in charge, tentu tanggung jawab gue akan lebih banyak dari biasanya, khususnya di ranah infrastruktur dan umumnya di ranah manajemen.
|
||||||
|
|
||||||
|
Gue masih menulis kode di pekerjaan, 80% [Terraform](https://www.terraform.io/) dan 10% kode [YAML](https://yaml.org/) hahaha. 10% nya adalah kombinasi menulis kode Python ataupun JavaScript ataupun Dockerfile ataupun Shell Script ataupun... ok stop. Di ranah manajemen gue rasa gue perlu merancang KPI yang reasonable dan objektif, merancang strategi untuk bisa mendapat throughput yang maksimal baik di development maupun operations, etc, etc.
|
||||||
|
|
||||||
|
Diluar pekerjaan, sejauh ini belum menyentuh bahasa pemrograman lagi. Semoga pengetahuan JavaScript gue tidak cepat kadaluarsa hahaha. Bahasa pemrograman selain JavaScript yang sepertinya akan banyak gue tulis adalah [Go](https://go.dev) dan [Rust](https://rust-lang.org) (hello darkness my old friend!) meskipun tidak akan di dekat-dekat ini.
|
||||||
|
|
||||||
|
Dan gue rasa di tahun ini justru akan banyak melakukan R&D sambil memelihara dan memastikan infrastruktur yang ada stabil, performant dan scalable. Mungkin dari cara mengelola & mengolah data *at scale*, tentang DevSecOps, tentang multi-cloud, tentang menjembatani *development *dan *operations, *dan berbagai hal lain yang belum gue ketahui dan alami! Very excited!
|
||||||
|
|
||||||
|
Sebelumnya gue cukup khawatir dengan perpindahan karir yang gue ambil, tapi jika melihat kebutuhan akan posisi ini di tempat kerja gue sekarang (dan di tempat lain juga hehe) serta keterlibatan gue ketika masa transisi ini dalam pekerjaan gue, sepertinya gue sudah cukup mantap dan menjadikan ini sebagai keputusan terbaik gue di masa depan gue nanti!
|
||||||
|
![](https://s3.edgy.social/mastodon/media_attachments/files/108/571/423/587/503/197/original/aaa4f9adc2600628.png)[https://www.linkedin.com/in/faultables](https://www.linkedin.com/in/faultables/)
|
||||||
|
Dan seperti biasa, ada banyak yang tidak gue ceritakan disini terkait bekerja di Delman, karena tulisan ini hanyalah introduksi terkait gambaran bekerja di Delman dan jika ingin mengetahui gambaran lengkapnya: send your best cover letter & resume and see you on board!
|
56
content/5.md
Normal file
56
content/5.md
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
---
|
||||||
|
title: 5 favorite things
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: 5
|
||||||
|
date: 2023-07-29T08:19:40.000Z
|
||||||
|
date_updated: 2023-07-30T01:46:34.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
If I had to choose my 5 favorite things—things I can keep and remember forever—the list would be:
|
||||||
|
|
||||||
|
## Movies
|
||||||
|
|
||||||
|
1. [The Truman Show (1998)](https://www.imdb.com/title/tt0120382/)
|
||||||
|
2. [V For Vendetta (2005)](https://www.imdb.com/title/tt0434409/)
|
||||||
|
3. [Interstellar (2014)](https://www.imdb.com/title/tt0816692/)
|
||||||
|
4. [Lucy (2014)](https://www.imdb.com/title/tt2872732/)
|
||||||
|
5. [The Great Hack (2019)](https://www.imdb.com/title/tt4736550/)
|
||||||
|
|
||||||
|
## Anime
|
||||||
|
|
||||||
|
1. [5 Centimeters per Second (2007)](https://myanimelist.net/anime/1689/Byousoku_5_Centimeter)
|
||||||
|
2. [Your Lie in April (2014)](https://myanimelist.net/anime/23273/Shigatsu_wa_Kimi_no_Uso)
|
||||||
|
3. [Your Name (2016)](https://myanimelist.net/anime/32281/Kimi_no_Na_wa)
|
||||||
|
4. [Violet Evergarden (2018)](https://myanimelist.net/anime/33352/Violet_Evergarden)
|
||||||
|
5. [Suzume (2022)](https://myanimelist.net/anime/50594/Suzume_no_Tojimari)
|
||||||
|
|
||||||
|
## Books
|
||||||
|
|
||||||
|
1. [Dunia Sophie (1991)](https://www.goodreads.com/book/show/26829247-dunia-sophie)
|
||||||
|
2. [Sapiens: A Brief History of Humankind (2011)](https://www.goodreads.com/book/show/23692271-sapiens)
|
||||||
|
3. [Goodbye, Things: The New Japanese Minimalism (2015)](https://www.goodreads.com/book/show/30231806-goodbye-things)
|
||||||
|
4. [The Subtle Art of Not Giving a F*ck (2016)](https://www.goodreads.com/book/show/28257707-the-subtle-art-of-not-giving-a-f-ck)
|
||||||
|
5. [The Psychology of Money (2020)](https://www.goodreads.com/book/show/41881472-the-psychology-of-money)
|
||||||
|
|
||||||
|
## Songs
|
||||||
|
|
||||||
|
1. [Masayoshi Yamazaki — One more time,one more chance (1997)](https://www.youtube.com/watch?v=BqFftJDXii0)
|
||||||
|
2. [JKT48 — Bersepeda Berdua (2012)](https://www.youtube.com/watch?v=XHM8RcqDZmQ)
|
||||||
|
3. [JKT48 — First Rabbit (2016)](https://www.youtube.com/watch?v=LgEfTUoiZpE)
|
||||||
|
4. [Bring Me The Horizon — LosT (2023)](https://www.youtube.com/watch?v=xv-70a6yXfM)
|
||||||
|
5. [Reality Club — Anything You Want (2023)](https://www.youtube.com/watch?v=FKijnRja8is)
|
||||||
|
|
||||||
|
## Games
|
||||||
|
|
||||||
|
*Nostalgic notes: My first and last game console was a "second-hand" PSX (PS1) that my dad gave me as birthday presents in 2006. After my dad brought the PC home, I used to play games on ePSXe and GBA (Game Boy Advance) Emulator ever since.*
|
||||||
|
|
||||||
|
1. [Final Fantasy VII (PSX)](https://gamefaqs.gamespot.com/ps/197341-final-fantasy-vii)
|
||||||
|
2. [Breath of Fire IV (PSX)](https://gamefaqs.gamespot.com/ps/196818-breath-of-fire-iv)
|
||||||
|
3. [Pokemon Emerald (GBA)](https://gamefaqs.gamespot.com/gba/921905-pokemon-emerald-version)
|
||||||
|
4. [Need For Speed Most Wanted (PC)](https://gamefaqs.gamespot.com/pc/927142-need-for-speed-most-wanted-2005)
|
||||||
|
5. [Factorio (PC)](https://gamefaqs.gamespot.com/pc/186863-factorio)
|
||||||
|
|
||||||
|
This should probably be about a list of "physical" items instead of a list of categorized digital copies, but I'm truly grateful that everything I've listed here was and still is in this world.
|
||||||
|
|
||||||
|
What are yours?
|
92
content/5cm-per-detik.md
Normal file
92
content/5cm-per-detik.md
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
---
|
||||||
|
title: 5cm per detik
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: 5cm-per-detik
|
||||||
|
date: 2023-05-16T15:17:14.000Z
|
||||||
|
date_updated: 2023-12-16T03:26:38.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Gue tidak ingat pastinya kapan pertama kali menonton anime, dan dulu gue cuma tertarik menonton film yang bergenre dokumenter. Di tahun 2018 gue rasa gue mulai cukup aktif menonton anime karena iseng, dan dari berbagai judul yang gue senangi, ada satu-satunya judul dari film anime yang sangat berkesan sekalipun gue selalu tidak menyukai *ending *nya: 5 centimeters per second *(Byōsoku Go Senchimētoru)*.
|
||||||
|
|
||||||
|
Anime tersebut cukup spesial menurut gue, bahkan setiap tahun gue tonton kembali meskipun sudah hafal keseluruhan cerita dan endingnya.
|
||||||
|
|
||||||
|
Anime ini terbagi menjadi 3 episode: "Kisah sakura", "Angkasawan" dan "5 centimeters per second". Maksud "5 centimeters per second" sendiri adalah tentang kecepatan bunga sakura jatuh, yang mana menjadi percakapan pembuka dari film ini.
|
||||||
|
|
||||||
|
Pada dasarnya anime ini adalah tentang jarak. Terkait jarak apa yang dimaksud, gue rasa setiap penonton akan menafsirkannya sendiri.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Tahun 2011 lalu gue menginjak kelas 2 SMP. Gue agak sedikit canggung berkomunikasi dengan lawan jenis karena kurang terbiasa, mengingat dulu gue sekolah di asrama putra dan terpisah jauh dengan asrama putri. Dan komunikasi langsung hanya terjadi di sebuah masa bernama perpulangan.
|
||||||
|
|
||||||
|
Entah bagaimana awalnya gue kenal dengan seseorang dan memiliki satu kebetulan: intinya sama-sama tinggal di satu daerah, dan hanya dipisahkan oleh gang. Gue rasa dia adalah teman cewek yang paling pertama yang benar-benar sebagai teman. Mungkin satu-satunya juga. Dia juga cewek pertama yang pernah ke rumah orang tua gue, lalu masuk ke rumah yang sepi itu, dan... mengobrol tentang apapun. Hanya mengobrol.
|
||||||
|
|
||||||
|
Waktu berlalu dan dia pindah ke SMA yang tidak lagi tinggal di asrama. Jika dulu pemisahnya adalah jarak antara kampus putra dan putri, sekarang terpisahkan oleh 1 kota dan 1 kabupaten. Komunikasi masih terjalin berkat kehadiran Facebook dan Twitter pada masa itu. Meskipun jarang berkomunikasi, gue selalu menantikan pesan masuk darinya di Facebook. Dan juga sebutannya di Twitter, saat Retweet masih menggunakan prefix RT.
|
||||||
|
|
||||||
|
Pada dasarnya gue dan dia tidak sedekat itu. Pada saat itu pun dia memiliki pasangan yang mana adalah teman gue, dan gue tidak pernah mempermasalahkan itu. Pernah gue menjadi penyebab putusnya hubungan mereka, meskipun bukan gue alasannya. Dan hubungan gue dan dia serta hubungan gue dan teman gue baik-baik saja pada saat itu, for the record.
|
||||||
|
|
||||||
|
Gue tidak pernah menganggap dia spesial, begitupula mungkin sebaliknya. Singkat cerita, waktu berlalu dan kehidupan tentunya berlanjut. Kita sama-sama lulus SMA, gue melanjutkan studi di Bandung dan dia melanjutkan studi di sebuah kota di tengah pulau Jawa.
|
||||||
|
|
||||||
|
Meskipun begitu, sudah tidak ada komunikasi lagi diantara kita.
|
||||||
|
|
||||||
|
Mungkin semenjak SMA kelas 12 jika ingatan gue masih bagus.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Di semester 6 gue sudah mulai bekerja di salah satu startup di kota Bandung. Gue mulai mengabaikan urusan perkuliahan pada saat itu.
|
||||||
|
|
||||||
|
Pada suatu ketika, gue bersama teman SMA gue yang sama-sama kuliah di Bandung memutuskan untuk pergi ke Jogja. Saat tinggal di Bandung, Jogja selalu menjadi destinasi liburan andalan yang mungkin karena berada di sisi kanan pulau Jawa, dan kita terlalu bosan untuk pergi ke sisi kiri pulau Jawa.
|
||||||
|
|
||||||
|
Saat tiba di Jogja, kita selalu tidak memiliki tujuan. Mungkin teman gue punya: berurusan dengan masa lalunya. But anyways, entah bagaimana kita mencoba menghubungi seseorang yang sedang tinggal di Jogja untuk tujuan studi, seseorang yang namanya sudah sangat familiar, seseorang yang menjadi topik utama dari tulisan ini. Lalu gue dan teman gue berencana bertemu dengan dia di sebuah tempat kopi yang berada di daerah Caturtunggal.
|
||||||
|
|
||||||
|
Sekitar jam 19 seseorang tersebut datang. Tidak banyak yang berubah selain sifat dan tampilannya yang lebih dewasa. Walau awalnya sedikit kaku, kekakuan tersebut perlahan terkikis mengingat cara dia berbicara dan bercanda masih seperti yang gue tahu.
|
||||||
|
|
||||||
|
Lalu suasana mulai sepi, dan jam menunjukkan sudah waktunya untuk pergi. Jadwal kereta gue besok pagi dan pada hari itu tidak menyewa penginapan karena tanggung. Lalu kita berpindah ke tempat nongkrong yang buka 24 jam. Sekitar tengah malam gue tidur di tempat tersebut dan ketika terbangun gue melihat dia masih terjaga sampai pagi dan melihat teman gue yang sama-sama mati.
|
||||||
|
|
||||||
|
Singkat cerita, gue kembali ke Bandung. Kita berterima kasih karena dia sudah berkenan untuk menemani khususnya untuk tidur di jam 10 pagi. Meskipun tidak banyak yang terjadi, pertemuan itu menjadi awal dari sesuatu yang tidak pernah dimulai.
|
||||||
|
|
||||||
|
Sesuatu yang membuat gue tersenyum sinis ketika mengingatnya, sesuatu yang membuat gue merasa menjadi orang paling goblok sedunia setiap melihat foto yang ada di galeri.
|
||||||
|
|
||||||
|
Foto-foto tersebut tersimpan di folder bernama "2017" di setiap penyimpanan yang gue miliki.
|
||||||
|
|
||||||
|
Foto yang tidak pernah dibagikan, apalagi dipublikasikan.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Ada sebuah kejadian yang membuat gue dan dia ke kondisi seperti tidak terjadi apa-apa. Kondisi seperti, tidak pernah kenal sama sekali. Kejadian tersebut adalah salah satu kejadian yang paling gue sesali dalam hidup karena sifat kekanak-kanakan gue yang terlalu mementingkan ego daripada akal sehat pada saat itu.
|
||||||
|
|
||||||
|
Setelah berbulan-bulan berlalu, kondisi berubah menjadi tertutupnya akses kontak dari yang sebelumnya hanya putus kontak. Akun sosial media dan perpesanan instan gue diblokir, yang mana karena keinginan pasangannya pada saat itu setelah mencari tahu. Entah apa yang terjadi, sampai hari ini gue tidak terlalu peduli.
|
||||||
|
|
||||||
|
Waktu berlalu dan gue tidak pernah berhasil memiliki teman cewek lagi selain teman kantor. Hubungan selalu berakhir menjadi hubungan "spesial" yang pada akhirnya berakhir menjadi tidak saling kenal dan tidak spesial lagi. Tidak jarang gue kepikiran seseorang itu, dan hanya sebatas kepikiran. Ingin rasanya gue bercerita tentang tololnya kisah percintaan gue yang sudah-sudah sebagaimana dulu ketika dia bercerita didepan warung saat orang-orang sedang tarawih.
|
||||||
|
|
||||||
|
Disaat sebelum kejadian yang disebut di awal paragraf terjadi, 23 Februari 2018 adalah waktu ketika kita "sama-sama tahu". Pada saat itu sebenarnya gue merasa bingung, tidak tahu apa yang benar dan salah, bahkan tidak peduli tentang benar dan salah itu sendiri. Gue intinya tidak mengerti apa yang tidak gue mengerti. Jika mungkin gue melakukan hal yang salah atau benar, setidaknya mungkin gue akan mengerti sesuatu pada saat itu.
|
||||||
|
|
||||||
|
Sialnya, gue menjadi mengerti karena tidak melakukan apapun.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Bagaimana rasanya cinta tak terbalas? Gue kurang tahu, tapi yang gue yakin, jika terasa sakit, yang lebih menyakitkan gue rasa adalah cinta tak tersampaikan. Cinta tak terbalas gue rasa hanya akan dipenuhi oleh amarah, berbeda dengan yang tak tersampaikan yang dipenuhi oleh penyesalan, setidaknya itu yang gue tahu.
|
||||||
|
|
||||||
|
Berbeda rasanya ketika target dari amarah itu sendiri adalah diri kita dan bukan orang lain. Bertahun-tahun rasa penyesalan itu masih ada, setiap teringat sebuah gedung di jalan Dipatiukur; setiap melihat orang tua, setiap melihat Ekologi, setiap melihat DoTA 2. Tidak sering, hanya, terasa sangat mengganggu ketika terjadi.
|
||||||
|
|
||||||
|
Pada akhirnya gue hanya akan mengerti saat semuanya sudah sangat terlambat.
|
||||||
|
|
||||||
|
Gue tidak pernah menyesali keputusan yang gue ambil, tapi seringkali menyesali saat tidak membuat keputusan sama sekali. Terlepas yang benar atau salah, membahagiakan ataupun menyakitkan: setidaknya gue membuat keputusan.
|
||||||
|
|
||||||
|
Walau gue benci mengakuinya, sepertinya dia adalah cinta pertama gue. Dia adalah seseorang yang tidak pernah ingin gue miliki karena sebuah alasan. Dia adalah yang menjadi salah satu penyebab pertengkaran gue setiap kali menjalin hubungan dengan yang sudah-sudah karena namanya sering tersebut secara tidak sengaja. Dia adalah, dia—cukup.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Tahu bagaimana ending dari anime 5 centimeters per second? Dua orang menoleh kebelakang dan mengharapkan sesuatu yang mereka yakini akan terjadi. Pandangan mereka tertutup oleh sebuah benda bergerak yang berguna untuk mempertemukan orang-orang, dan ketika benda tersebut hilang dari pandangan, yang tersisa hanyalah satu orang. Seseorang yang, hanya menunggu dan tidak bergerak maju. Yang berharap apa yang diyakini benar, tanpa menyadari jika waktu terus berjalan. Tanpa melakukan ataupun mengucapkan apapun.
|
||||||
|
|
||||||
|
Mungkin lo bingung, apa hubungannya dengan semua ini? Mengapa gue membagikan cerita ini? Mengapa gue menceritakan sesuatu yang tidak pernah ingin gue ceritakan kepada siapapun? Mengapa lo membaca ini? Mengapa hari ini?
|
||||||
|
|
||||||
|
Untuk menutup tulisan ini, ada 1 kata yang ingin gue utarakan setiap tanggal 17 Mei: HBD, wish you all the best.
|
||||||
|
|
||||||
|
Dan untuk tambahan, ada satu kata yang belum sempat gue utarakan di minggu ini: HWD, wish you all the best.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Kadang gue mempertanyakan, bagaimana rasanya jatuh cinta? Yang bukan karena penasaran apalagi pelarian? Yang mengucapkan "I love you" bukan hanya karena kata itu yang ingin dibaca ataupun didengar. Cinta yang tidak dibagi apalagi dibeli, yang suci seperti melati atau hati.*
|
||||||
|
|
||||||
|
*Akankah gue merasakannya setidaknya satu kali lagi di lain hari?*
|
31
content/Apple Music.md
Normal file
31
content/Apple Music.md
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
---
|
||||||
|
tags:
|
||||||
|
- seed
|
||||||
|
---
|
||||||
|
|
||||||
|
The good
|
||||||
|
|
||||||
|
- Minim fitur sosial
|
||||||
|
- Tidak menggunakan model freemium
|
||||||
|
- Dukungan terhadap audio yang lebih beragam
|
||||||
|
- Judul yang lumayan lengkap
|
||||||
|
- Memiliki tampilan yang nyaman digunakan
|
||||||
|
- Tidak mengumpulkan data yang sangat agresif seperti Spotify
|
||||||
|
- Offline playback
|
||||||
|
|
||||||
|
The bad
|
||||||
|
|
||||||
|
- It's Apple
|
||||||
|
- Hanya berjalan di ekosistem Apple
|
||||||
|
- Diluar ekosistem Apple expect fitur "barebone"
|
||||||
|
- Aplikasi pihak ketiga masih minim
|
||||||
|
- Lebih berguna bila menggunakan hardware Apple
|
||||||
|
|
||||||
|
The ugly
|
||||||
|
|
||||||
|
- Tidak mendukung scrobbling
|
||||||
|
- Kurang stabil saat singkronisasi library/playlist antar perangkat
|
||||||
|
- Satu-satunya aplikasi yang mendukung Apple Homepod secara native (tanpa AirPlay)
|
||||||
|
- Beberapa media tidak bisa diputar karena alasan geo-restriction
|
||||||
|
- Tidak selengkap kompetitornya seperti Spotify apalagi YouTube Music
|
||||||
|
- Fucking Apple Music Replay
|
9
content/DuckDuckGo.md
Normal file
9
content/DuckDuckGo.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
tags:
|
||||||
|
- seed
|
||||||
|
---
|
||||||
|
- Respect privasi pengguna
|
||||||
|
- 90% hasil pencarian selalu relevan, +5% jika menghidupkan pencarian berdasarkan lokasi. Sisanya yang jarang relevan adalah jika mencari terkait ehm pribadi seseorang (stalking/doxxing) atau yang eksplisit mengarah ke informasi di dunia fisik (i.e "steam motor terdekat", "starbucks nearby", "shell near me")
|
||||||
|
- Sumber pencarian/index berdasarkan Bing
|
||||||
|
- Menampilkan iklan berdasarkan kata kunci
|
||||||
|
- Perusahaan berbasis di Amerika Serikat
|
13
content/Fragrance.md
Normal file
13
content/Fragrance.md
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
---
|
||||||
|
tags:
|
||||||
|
- seed
|
||||||
|
---
|
||||||
|
Memiliki identitas berdasarkan harum badan terasa menyenangkan, dan yang paling penting adalah harum yang sesuai dengan preferensi pemakainya. Terkadang, tempat dan kondisi (tren) berpengaruh juga but who cares?
|
||||||
|
|
||||||
|
Gue gak mengerti perparfuman, tapi hidung gue setidaknya masih bisa mencium. Tentu saja penilaian bersifat subjektif dan kembali ke preferensi masing-masing.
|
||||||
|
|
||||||
|
- 2020: Zara Tobacco Rich Warm Addictive (EDT). Agak segar, harum vanilla nya cukup terasa. Gampang bosan dan somewhat agak mudah ditemukan wanginya diberbagai tempat
|
||||||
|
- 2021: Zara Extreme Fusion (EDP). Nyoba aroma yang fruity, cukup segar, sepertinya cocok digunakan pas siang. Kurang oke (i guess karena gue senang dengan harum vanilla) dan mungkin parfum fruity terakhir yang gue pakai
|
||||||
|
- 2022: Zara Tobacco Intense Dark Exclusive (EDT). Kurang oke (dengan alasan yang sama), cukup ringan tapi terasa "kurang muda" lol. Sering gue gunakan tiap habis mandi malam buat tidur
|
||||||
|
- 2023: Versace Eros Flame (EDP). Baru ngerti aroma "spicy" seperti apa, overall favorit gue: perpanduan aroma vanilla + woody. Katanya ini dominan di wangi citron tapi penciuman gue kurang menangkap. Tertarik buat coba yang Eros "biasa" tapi waktu coba pertama kali seperti terlalu strong
|
||||||
|
- 2024: Hermes Terre Eau Givree (EDP). Agak standar tapi lumayan segar, cocok untuk siang pengganti si extreme fusion itu. Cukup yakin kurang cocok dengan umur gue yang < 30. Sepertinya bakal balik lagi ke Eros haha
|
96
content/Homelab.md
Normal file
96
content/Homelab.md
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
---
|
||||||
|
tags:
|
||||||
|
- evergreen
|
||||||
|
- homelab
|
||||||
|
---
|
||||||
|
# Router/Switch
|
||||||
|
|
||||||
|
- 16 Gbps switch (8 Gigabit ports)
|
||||||
|
- FTTH WAN dengan advertised bandwidth 30 Mbps (15 Mbps)
|
||||||
|
- 1 failover WAN port (4G, tergantung paket alias on-demand)
|
||||||
|
- QoS: SQM (64000 Kb/s limit on wan0 port)
|
||||||
|
- Deep Packet Inspection :)
|
||||||
|
|
||||||
|
# Firewall
|
||||||
|
|
||||||
|
Yes?
|
||||||
|
# DNS
|
||||||
|
|
||||||
|
AdGuard Home dengan upstream [edgyDNS](https://edgy.network/dns). Block iklan, malware, ads, apapun yang dijual oleh si edgyDNS
|
||||||
|
|
||||||
|
# VLAN
|
||||||
|
|
||||||
|
IEEE 802.1Q (dot1q)
|
||||||
|
|
||||||
|
# Setup
|
||||||
|
|
||||||
|
- Workload di-isolasi menggunakan Virtual Machine melalui KVM (libvirt).
|
||||||
|
- Network driver yang digunakan adalah Bridge
|
||||||
|
- Remote access hanya melalui Tailscale (100.64.0.0/10)
|
||||||
|
- Akses ke *services* selalu melalui reverse proxy, untuk akses TCP (L4) dan HTTP (L7)
|
||||||
|
- Akses dari internet melalui Tailscale (beberapa) dan Cloudflare Tunnel (rata-rata)
|
||||||
|
- Dukungan untuk akses melalui jaringan [[Yggdrasil]], dan, ya, melalui reverse proxy
|
||||||
|
|
||||||
|
# Host Software
|
||||||
|
|
||||||
|
- [Cloudflare Tunnel](https://www.cloudflare.com/en-gb/products/tunnel/)
|
||||||
|
- [Tailscale](https://tailscale.com)
|
||||||
|
- [Libvirt](https://libvirt.org)
|
||||||
|
- [OpenSSH](https://www.openssh.com)
|
||||||
|
- [[Yggdrasil]]
|
||||||
|
- [[Traefik]]
|
||||||
|
|
||||||
|
# OS
|
||||||
|
|
||||||
|
- [Ubuntu Server 22.04 LTS](https://ubuntu.com/server) (Host)
|
||||||
|
- [Fedora Asahi 39](https://asahilinux.org/fedora/) (Host)
|
||||||
|
- [Synology DiskStation Manager](https://www.synology.com/en-us/dsm) ([[NAS | Host]])
|
||||||
|
- [Debian Bookworm](https://www.debian.org/) (Guest)
|
||||||
|
- [Alpine Linux 3.19](https://alpinelinux.org/) (Guest)
|
||||||
|
|
||||||
|
# Diagram
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart LR
|
||||||
|
|
||||||
|
Internet --> B("Cloudflare (AS13335)")
|
||||||
|
Internet --> C("cgk01-egress (AS20940)")
|
||||||
|
Internet --> Yggdrasil
|
||||||
|
|
||||||
|
B --> D("EdgeRouter X SFP")
|
||||||
|
C --> D
|
||||||
|
Yggdrasil -.-> D
|
||||||
|
|
||||||
|
D --> nuc
|
||||||
|
D --> mac-mini
|
||||||
|
|
||||||
|
D -.-> nuc
|
||||||
|
D -.-> mac-mini
|
||||||
|
|
||||||
|
nuc --> cloudflared1
|
||||||
|
nuc --> traefik1
|
||||||
|
nuc -.-> traefik1
|
||||||
|
|
||||||
|
mac-mini --> cloudflared2
|
||||||
|
mac-mini -.-> traefik2
|
||||||
|
mac-mini --> traefik2
|
||||||
|
|
||||||
|
cloudflared1 --> traefik1
|
||||||
|
cloudflared1 --> traefik2
|
||||||
|
cloudflared2 --> traefik1
|
||||||
|
cloudflared2 --> traefik2
|
||||||
|
|
||||||
|
traefik1 --> vm1x
|
||||||
|
traefik1 --> vm2x
|
||||||
|
traefik2 --> vm1x
|
||||||
|
traefik2 --> vm2x
|
||||||
|
|
||||||
|
traefik1 --> nas01
|
||||||
|
traefik2 --> nas01
|
||||||
|
```
|
||||||
|
- EdgeRouter adalah SPOF (always bet in router)
|
||||||
|
- Gue masih agak bimbang antara all-in Cloudflare atau pakai solusi sendiri
|
||||||
|
- Gue ada rencana untuk menambahkan satu prajurit lagi yang khusus bertindak sebagai reverse proxy di DMZ (nunggu lebaran LOL)
|
||||||
|
- Info diatas cukup menggambarkan informasi jaringan rumah gue, 'kan?[^1]
|
||||||
|
|
||||||
|
[^1]: Hello, internet!
|
20
content/Kopi.md
Normal file
20
content/Kopi.md
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
tags:
|
||||||
|
- seed
|
||||||
|
---
|
||||||
|
- Hampir segala jenis kopi saya masuk
|
||||||
|
- Favorit saya adalah latte
|
||||||
|
- Es Kopi Susu adalah pilihan pertama sebelum latte
|
||||||
|
- Rata-rata saya mengonsumsi kopi 2 gelas sehari, sekitar 30 oz alias 887 ml :)
|
||||||
|
- Kopi sachet favorit saya adalah VIA Iced Coffee nya Starbucks jika ada susu, Good Day Freeze, dan Indocafe jika hangat
|
||||||
|
- Pernah mencoba berhenti konsumsi kopi (yang pada akhirnya kembali ke kopi lagi) dengan beralih ke:
|
||||||
|
- Air mineral, menjadi komplemen
|
||||||
|
- Susu, tidak cocok
|
||||||
|
- Teh, kurang cocok
|
||||||
|
- Bir, kurang cocok
|
||||||
|
- Kola, cocok tapi agak khawatir daripada konsumsi kopi
|
||||||
|
- Baileys yang Irish Cream, no comment
|
||||||
|
- Sebelumnya saya biasa mengonsumsi kopi 3 gelas sehari, sekitar 40 oz alias 1 L hahaha tapi lambung saya sudah tidak sekuat dulu (dan lebih nyantai ngabisin kopi nya kalau sekarang)
|
||||||
|
- Kepala saya agak pusing bila dalam sehari belum konsumsi kopi (kafein), khususnya bila sudah merokok (nikotin)
|
||||||
|
- Kopi Luwak (yang sachet) dan Kapal API pernah menjadi kopi favorit saya, tapi entah bagaimana sudah tidak kuat dengan kandungan gula nya
|
||||||
|
- Untuk manual brew, favorit saya adalah japanese (pour over/drip v60 + es)
|
139
content/Last Forever.md
Normal file
139
content/Last Forever.md
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
---
|
||||||
|
tags:
|
||||||
|
- evergreen
|
||||||
|
---
|
||||||
|
Semakin banyak yang dimiliki, semakin banyak yang harus dipelihara. Semakin banyak yang dipelihara, semakin banyak waktu yang harus dialokasikan.
|
||||||
|
|
||||||
|
Setiap produksi pasti memiliki masa kadaluwarsa, namun apa yang dibuat untuk selamanya?
|
||||||
|
|
||||||
|
Dan seberapa lama selamanya itu?
|
||||||
|
|
||||||
|
# Masa Kadaluwarsa
|
||||||
|
|
||||||
|
## Sandang
|
||||||
|
|
||||||
|
- Tren
|
||||||
|
- Kelayakan penggunaan
|
||||||
|
|
||||||
|
## Pangan
|
||||||
|
|
||||||
|
- Ada masa berlaku tertentu khususnya di makanan yang menggunakan zat pengawet
|
||||||
|
- Kelayakan untuk dikonsumsi
|
||||||
|
|
||||||
|
## Papan
|
||||||
|
|
||||||
|
- Kelayakan dalam fungsi
|
||||||
|
- Preferensi pribadi
|
||||||
|
|
||||||
|
## Gawai (gadget)
|
||||||
|
|
||||||
|
- Berdasarkan garansi: Umumnya 1 tahun setelah pembelian
|
||||||
|
- Berdasarkan kesehatan baterai: Perangkat modern biasanya menggunakan Lithium-ion dan kemungkinan [umur idealnya](https://archive.rizaldy.club/archive/1708720170.928918/index.html#Lifespan) adalah 3-5 tahun
|
||||||
|
- Berdasarkan kelayakan penggunaan dan fungsi
|
||||||
|
|
||||||
|
## Hard Disk Drive (HDD)
|
||||||
|
|
||||||
|
- [Umur idealnya](https://archive.rizaldy.club/archive/1708720170.928789/index.html) adalah 5-6 tahun
|
||||||
|
- Faktor lain yang mempengaruhi juga adalah "batas beban kerja" yang anggap angka rata-rata nya adalah 180 TB/tahun (jika kapasitas HDD adalah 2 TB, singkatnya batas beban kerja nya berarti ada di 90 tahun)
|
||||||
|
|
||||||
|
## Jam tangan
|
||||||
|
|
||||||
|
- Tren
|
||||||
|
- Umur ideal untuk jam tangan "pintar" adalah 3 tahun
|
||||||
|
- Jenis baterai pada jam tangan cukup beragam, dan untuk jam yang menggunakan jenis baterai sekali pakai, kisaran umurnya adalah 1-10 tahun
|
||||||
|
|
||||||
|
## Komputer portabel (laptop)
|
||||||
|
|
||||||
|
- Umur idealnya adalah 4-7 tahun
|
||||||
|
- Di laptop modern, umumnya menggunakan System on Chip (SoC) sehingga kerusakan 1 komponen memungkinkan dapat merusak keseluruhan sistem
|
||||||
|
- Di laptop yang menggunakan SoC, umumnya komponen tidak dapat diganti dengan mudah, seperti Memory; CPU/GPU, dan bahkan media penyimpanan seperti SSD
|
||||||
|
- Salah satu yang bisa menjadi faktor juga adalah masa dukungan versi major dari OS yang digunakan. Untuk Mac OS, biasanya [masa dukungannya](https://archive.rizaldy.club/archive/1708718292.603739) adalah 3 tahun
|
||||||
|
|
||||||
|
## Komputer pribadi (PC/Tower PCs)
|
||||||
|
|
||||||
|
- Umur idealnya adalah 5-10 tahun
|
||||||
|
- Sistem pada PC tower sangat bergantung dengan motherboard, namun komponennya relatif mudah diganti selama kompatibel dengan yang didukung oleh si motherboard
|
||||||
|
- Salah satu faktor umur motherboard adalah ketersediaan pasar terhadap komponen yang dibutuhkan
|
||||||
|
|
||||||
|
## Handheld Console
|
||||||
|
|
||||||
|
- Umur idealnya adalah 6-10 tahun
|
||||||
|
- Faktor tren kemungkinan berpengaruh
|
||||||
|
- Umumnya karakteristiknya kurang lebih sama dengan gawai ataupun komputer portabel, dan kemungkinan perangkat keras dan lunak yang digunakan dikhususkan untuk beban kerja tertentu seperti untuk bermain game (menampilkan gambar ke layar secara kontinyu dalam waktu yang lama)
|
||||||
|
|
||||||
|
## Elektronik pada umumnya
|
||||||
|
|
||||||
|
- Tren
|
||||||
|
- Kelayakan penggunaan dan fungsi
|
||||||
|
|
||||||
|
## Kendaraan Bermotor pada umumnya
|
||||||
|
|
||||||
|
- Tren
|
||||||
|
- Kelayakan penggunaan dan fungsi
|
||||||
|
|
||||||
|
# Pemeliharaan
|
||||||
|
|
||||||
|
## Hal yang harus dipelihara tiap waktu
|
||||||
|
|
||||||
|
- Masa aktif kartu SIM
|
||||||
|
- Kebersihan sandang, pangan, papan
|
||||||
|
|
||||||
|
## Hal yang harus dipelihara tiap hari
|
||||||
|
|
||||||
|
- Kesehatan badan
|
||||||
|
- Kebersihan badan
|
||||||
|
- Kebutuhan spiritual
|
||||||
|
- Perawatan diri
|
||||||
|
- Kebutuhan vitamin, gizi dan mineral
|
||||||
|
- Hubungan dengan pekerjaan dan rekan kerja
|
||||||
|
|
||||||
|
## Hal yang harus dipelihara tiap minggu
|
||||||
|
|
||||||
|
- Kebersihan papan tingkat lanjut
|
||||||
|
- Perawatan diri tingkat lanjut
|
||||||
|
- Hubungan dengan keluarga dan teman
|
||||||
|
- Melakukan hobi
|
||||||
|
|
||||||
|
## Hal yang harus dipelihara tiap bulan
|
||||||
|
|
||||||
|
- Token listrik
|
||||||
|
- Bahan Bakar Minyak (BBM)
|
||||||
|
- Kuota internet
|
||||||
|
- Saldo e-money
|
||||||
|
- Pembayaran tagihan
|
||||||
|
- Pembayaran iuran
|
||||||
|
- Persediaan sembilan bahan pokok (Sembako)
|
||||||
|
|
||||||
|
## Hal yang harus dipelihara tiap 3 bulan
|
||||||
|
|
||||||
|
- Penggantian oli pada kendaraan
|
||||||
|
- Penggunaan kata sandi pada layanan tertentu
|
||||||
|
|
||||||
|
## Hal yang harus dipelihara tiap tahun
|
||||||
|
|
||||||
|
- Penggunaan kata sandi pada layanan tertentu
|
||||||
|
- Pembayaran pajak kendaraan
|
||||||
|
- Pembayaran tagihan tahunan
|
||||||
|
- Pembayaran iuran tahunan
|
||||||
|
- Laporan Surat Pemberitahuan Tahunan Pajak Penghasilan (SPT PPh)
|
||||||
|
- Pemberian Tunjangan Hari Raya (THR)
|
||||||
|
- Penunaian zakat fitrah
|
||||||
|
|
||||||
|
## Hal yang harus dipelihara tiap 5 tahun
|
||||||
|
|
||||||
|
- Masa berlaku Surat Izin Mengemudi (SIM)
|
||||||
|
|
||||||
|
# "Kekekalan"
|
||||||
|
|
||||||
|
Hal yang membuat "kekal" bergantung dengan daya tahan (durabilitas) dan relevansi terhadap zaman, seperti:
|
||||||
|
|
||||||
|
- Protokol SMTP/IMAP yang masih digunakan selama lebih dari 40 tahun dalam sistem *email*
|
||||||
|
- Penggunaan IPv4 untuk menghubungkan antar komputer yang sudah berumur lebih dari 40 tahun juga
|
||||||
|
- Penggunaan "denim jeans" dari kemunculannya pada tahun 1950s yang masih relatif populer digunakan sampai hari ini (~70 tahun?)
|
||||||
|
|
||||||
|
Contoh yang tidak memiliki daya tahan lama dan/atau yang sudah menjadi tidak relevan karena zaman:
|
||||||
|
|
||||||
|
- Penggunaan GSM dalam jaringan seluler
|
||||||
|
- Floopy Disk (diskette) untuk menyimpan data yang rawan rusak
|
||||||
|
- Beberapa model pakaian yang dianggap "ketinggalan zaman"
|
||||||
|
- Pakaian yang sudah tidak layak pakai karena bentuknya
|
97
content/NAS.md
Normal file
97
content/NAS.md
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
---
|
||||||
|
tags:
|
||||||
|
- evergreen
|
||||||
|
- homelab
|
||||||
|
---
|
||||||
|
|
||||||
|
Dulu sekitar tahun 2017 saya tidak terlalu peduli dengan kepemilikan data. Saya hampir tidak menyimpan atau bahkan memiliki data yang dianggap penting, persetan foto; video, dokumen — segalanya ephemeral dan on-demand.
|
||||||
|
|
||||||
|
Pernyataan diatas yang membuat saya tidak pernah mempertimbangkan bagian penyimpanan di setiap perangkat yang akan saya beli. Sampai hari ini, saya selalu memilih perangkat dengan kapasitas penyimpanan terendah karena saya yakin bahkan sampai 60% kapasitasnya saja tidak akan pernah saya capai.
|
||||||
|
|
||||||
|
Lalu beberapa hal berubah.
|
||||||
|
|
||||||
|
Pertama, saya ingin meninggalkan penyewaan. Menggunakan penyimpanan awan gampangnya adalah "menyimpan di komputer lain" dan penyedia layanan penyimpanan awan yang saya gunakan pada saat itu lumayan terpercaya: iCloud. iCloud (atau iCloud Drive) mendukung E2EE via ADP; memiliki waktu aktif sistem yang reliable dan aksesnya pun relatif cepat. Saya merekomendasikan iCloud nya Apple untuk siapapun yang ingin menggunakan penyimpanan awan. Harganya pun relatif murah dangan sangat kompetitif!
|
||||||
|
|
||||||
|
Kedua, saya berinvestasi lebih ke [[Homelab]] saya. Saya sudah melakukan [[self-hosting]] sejak 2016 dan memiliki homelab ala-ala sendiri semenjak 2020, I guess? Tujuannya, untuk memiliki "internet" sendiri, namun tujuan lainnya untuk bersenang-senang dan belajar.
|
||||||
|
|
||||||
|
Kapasitas penyimpanan yang dimiliki "server" saya relatif terbatas, antara 100-265 GB (NVMe). Untuk skala homelab kecil, kisaran kapasitas tersebut relatif cukup. Sampai menjadi tidak cukup :))
|
||||||
|
|
||||||
|
Terakhir, saya mulai melakukan pengarsipan. Aktivitas ini termotivasi setelah melihat isi dari HDD external (alm) papah saya dan saya cukup terkesan bagaimana beliau memiliki koleksi/arsip/dokumentasi informasi dari beliau muda (30 tahunan?) sampai saat terakhir beliau bekerja (pensiun). Bahkan salinan digital akte saya pun ada disana.
|
||||||
|
|
||||||
|
Saya ingin mengarsipkan apapun. Literally apapun. Informasi, artikel, dokumen, foto, video, apapun yang saya minati. Perihal penting atau tidak penting, itu urusan nanti. Pada akhirnya kita akan tahu mana yang penting atau tidak penting setelah memiliki keduanya, bukan?
|
||||||
|
|
||||||
|
## Hardware
|
||||||
|
|
||||||
|
Yang membedakan "NAS" dengan "server biasa" adalah NAS dimaksudkan untuk beban kerja penyimpanan sedangkan server biasa untuk beban kerja sebuah server pada umumnya. Itulah salah satu alasan saya memilih hardware yang khusus dibuat untuk itu dan saya tidak memiliki cukup waktu dan pengetahuan untuk merakit sendiri.
|
||||||
|
|
||||||
|
Produk dari Synology saya pilih karena beberapa alasan pribadi. Alternatif yang ada di pasaran adalah QNAP dan setelah riset sedikit, saya lebih memilih Synology.
|
||||||
|
|
||||||
|
Saya memilih varian DS224+ karena menurut saya pribadi relatif cocok untuk pemula dan khususnya untuk kebutuhan saya:
|
||||||
|
|
||||||
|
- 2 drive bays dan hot swappable
|
||||||
|
- 2 gigabit ethernet ports
|
||||||
|
- 2 CPU dan 2 GB memory (bisa di-upgrade sampai maksimal 6 GB)
|
||||||
|
|
||||||
|
Juga ada 2 port USB 3.2 Gen 1 untuk akses ke penyimpanan eksternal sebagai tambahan.
|
||||||
|
|
||||||
|
Harganya relatif terjangkau, sekitar 5.7jt saat saya membeli pada saat itu (harga promo natal!)
|
||||||
|
|
||||||
|
## OS
|
||||||
|
|
||||||
|
Synology DS224+ saya menggunakan DiskStation Manager sebagai OS nya yang mana adalah GNU/Linux. Sebelumnya saya pernah menggunakan alternatif lain seperti:
|
||||||
|
|
||||||
|
- FreeNAS/TrueNAS (FreeBSD)
|
||||||
|
- TrueNAS Scale (GNU/Linux)
|
||||||
|
|
||||||
|
Yang mana menggunakan file system ZFS dan sistem operasi FreeBSD. Secara pengalaman pengguna saya kurang merekomendasikan jika untuk pemula seperti saya namun sangat powerful bila sudah cukup ahli khususnya bila sudah familiar dengan sistem operasi \*BSD.
|
||||||
|
|
||||||
|
## File System
|
||||||
|
|
||||||
|
DSM menggunakan btrfs, berbeda dengan "server biasa" yang umumnya menggunakan ext4. Btrfs menawarkan _deduplication_, _compression_, _snapshot_, _native RAID_, dll.
|
||||||
|
|
||||||
|
RAID 1 (mirroring) saya pilih karena saya menggunakan pendekatan 3-2-1 backup.
|
||||||
|
|
||||||
|
DSM mendukung encryption at-rest menggunakan standar Linux Unified Key Setup (LUKS), ini berguna untuk melindungi data bila HDD diakses melalui tempat yang tidak seharusnya.
|
||||||
|
|
||||||
|
## Hard Disk Drive (HDD)
|
||||||
|
|
||||||
|
Saya memilih kapasitas 2 TB (1.8 TiB) yang menurut saya tidak terlalu besar tapi tidak terlalu kecil juga. Ya somewhat di tengah-tengah, lah.
|
||||||
|
|
||||||
|
Total penyimpanan (dari 4 TB, 2 drive) yang bisa digunakan pada dasarnya adalah 1.8 TiB, dan sisa 18.6 GiB nya digunakan untuk sistem.
|
||||||
|
|
||||||
|
HDD yang saya gunakan:
|
||||||
|
|
||||||
|
- [Western Digital Caviar RED PLUS (WD20EFZX)](https://tokopedia.link/pl46uB9FAHb)
|
||||||
|
- [Seagate IronWolf (ST2000VN003)](https://tokopedia.link/SfOvIXbGAHb)
|
||||||
|
|
||||||
|
Masing-masing memiliki rpm yang sama (5400), cache dari 64-256 MB, dan batas beban kerja 180 TB/tahun. Untuk kapasitas 2 TB, gampangnya,
|
||||||
|
batas beban kerjanya berarti sampai 90 tahun.
|
||||||
|
|
||||||
|
## Pengelolaan Beban Kerja
|
||||||
|
|
||||||
|
Dari segi performa baca/tulis, tentu berbeda dengan kekuatan Solid State Drive (SSD) jika dibandingkan dengan HDD. SSD laptop saya (NVMe) untuk baca/tulis bisa sampai 2-4 GB/s, angka yang cukup mengesankan jika dibandingkan dengan mesin virtual yang disewakan oleh penyedia cloud.
|
||||||
|
|
||||||
|
Sayangnya, untuk model Synology yang saya gunakan tidak memiliki slot NVMe sehingga tidak bisa menambahkan SSD sebagai media cache. Memory yang dimiliki
|
||||||
|
pun sangat terbatas, dan memaksimalkan penggunaan swap hanya akan membuatnya lebih buruk.
|
||||||
|
|
||||||
|
Karena hal itu, NAS—untuk keperluan beban kerja server—saya gunakan sebagai "warm storage" dan akan selalu ada lapisan lain diatasnya. Misal, object storage server
|
||||||
|
MinIO. Bukan hal yang bagus untuk menjalankan MinIO di NAS[^1]. MinIO memiliki fitur [Tiering](https://min.io/docs/minio/linux/administration/object-management/object-lifecycle-management.html#id2) untuk memindahkan object ke tempat lain. Berbeda dengan [Replication](https://min.io/docs/minio/linux/administration/bucket-replication.html) yang singkatnya setiap server memiliki salinannya, tiering, singkatnya, si server utama menyimpan metadata dan akan mengaksesnya ke server kedua hanya saat dibutuhkan ("warm"). Bagian menariknya, si "server kedua" tersebut bisa ditaruh dibelakang caching proxy agar lebih efektif.
|
||||||
|
|
||||||
|
Selain itu, saya memaksimalkan penggunaan Network File System (NFS) sebisa mungkin, dan, ya, sebagai warm storage juga. Ini digunakan untuk beban kerja
|
||||||
|
yang I/O intensive (seperti video transcoding) yang baru hasilnya disimpan di NAS melalui NFS tersebut.
|
||||||
|
|
||||||
|
Satu-satunya yang tidak saya simpan di NAS adalah database SQLite karena masalah dengan FSYNC, kecuali untuk kebutuhan backup (cold).
|
||||||
|
|
||||||
|
## File Sharing Protocols
|
||||||
|
|
||||||
|
Pendekatan saya cukup sederhana: Jika di perangkat pribadi, gunakan Samba (SMB/CIFS), selainnya, NFS. Saya tidak menggunakan FTP(s), SFTP ataupun AFP untuk
|
||||||
|
mengurangi kompleksitas yang tidak perlu. Untuk perihal performa, relatif tidak terlalu mencolok.
|
||||||
|
|
||||||
|
Setiap client (NFS) memiliki pengguna khusus untuk alasan keamanan dan akses di _restrict_ berdasarkan alamat IP nya, relatif standar. Selain itu,
|
||||||
|
akses SMB hanya bisa melalui LAN dan Tailnet.
|
||||||
|
|
||||||
|
## Storage Area Network (SAN)
|
||||||
|
|
||||||
|
Mungkin perlu halaman khusus untuk ini...
|
||||||
|
|
||||||
|
[^1]: Baca [Why You Should Not Run MinIO on SAN/NAS Appliances (and the one exception)](https://blog.min.io/no-san-nas/) yang diterbitkan di blog MinIO
|
32
content/Netflix.md
Normal file
32
content/Netflix.md
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
---
|
||||||
|
tags:
|
||||||
|
- seed
|
||||||
|
---
|
||||||
|
|
||||||
|
The good
|
||||||
|
|
||||||
|
- Koleksi yang cukup lengkap
|
||||||
|
- Memproduksi film juga
|
||||||
|
- Lumayan catch-up dengan tren
|
||||||
|
- Lumayan aktif di komunitas Open Source (OOT but still nice)
|
||||||
|
- Layanan nya cukup stabil dan hampir tidak pernah mendapatkan playback issue
|
||||||
|
- Berjalan di hampir setiap platform
|
||||||
|
|
||||||
|
The bad
|
||||||
|
- DRM (come on, what else is expected of VoD service?)
|
||||||
|
- Judul datang-dan-pergi (come on, what else is expected with VoD service? (2))
|
||||||
|
- Fitur "household" nya yang kurang masuk akal dalam validasinya
|
||||||
|
- Melakukan pengumpulan data yang cukup agresif untuk memberi makan algoritma rekomendasi dan tidak bisa opt-out
|
||||||
|
- Terkadang tidak bisa diakses melalui VPN komersil (masuk akal untuk alasan mencegah bypass geo-restriction, but, still, sucks)
|
||||||
|
|
||||||
|
The ugly
|
||||||
|
- Fuck DRM
|
||||||
|
- Menawarkan paket "harga lebih murah" namun menampilkan iklan?
|
||||||
|
- Hanya mendukung adaptive bitrate streaming, tidak bisa memilih secara eksplisit resolusi yang ingin digunakan
|
||||||
|
- Sering mengubah tampilan dan tata letak untuk aplikasi mobile
|
||||||
|
|
||||||
|
Sejujurnya no hate untuk Netflix, fuck DRM. Gue berlangganan Netflix (putus-sambung) semenjak tahun 2018 waktu masih berperang dengan DPI[^1] nya Tel\*\*kom dan masih berlangganan sampai hari ini.
|
||||||
|
|
||||||
|
Jika gue menemukan layanan pembelian film yang tidak menggunakan DRM khususnya di Indonesia, mungkin gue bisa mempertimbangkan lagi untuk berhenti berlangganan layanan Netflix.
|
||||||
|
|
||||||
|
[^1]: Deep Packet Inspection
|
4
content/Traefik.md
Normal file
4
content/Traefik.md
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
tags:
|
||||||
|
- seed
|
||||||
|
---
|
44
content/a-girl-in-the-bookstore.md
Normal file
44
content/a-girl-in-the-bookstore.md
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
---
|
||||||
|
title: A girl in the bookstore
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: a-girl-in-the-bookstore
|
||||||
|
date: 2022-05-16T07:14:21.000Z
|
||||||
|
date_updated: 2022-05-16T07:14:21.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
I don't read much but I love writing. Going to bookstores helped me learn how people choose titles, design book covers, and price their work.
|
||||||
|
|
||||||
|
But not this time.
|
||||||
|
|
||||||
|
I had to meet someone, at least that's what my calendar says.
|
||||||
|
|
||||||
|
We agreed to meet at Gramedia Bandung.
|
||||||
|
|
||||||
|
I know the person. I know the face. I know the name. We both used to met but this is our very first time we've met in personal circumstances. I found her on the Novels shelf, meaning she knows what she's doing there.
|
||||||
|
|
||||||
|
I greeted as usual, she replied with a cute answer.
|
||||||
|
|
||||||
|
She had me when she smiled at me.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Then we went to KFC Merdeka for dinner. I know it's not a good choice, but at least we both kinda like fast food. We didn't talk much but I guess we both enjoyed our conversation until the restaurant closes orders.
|
||||||
|
|
||||||
|
We talked about everything, we kinda relate as we work in the same industry. I stared at her while she talk. She looks kind. And smart. And hard worker. And cute. And independent. And lovely. And, ok, I had to stop. She looks shy yet I know the reason. She seemed to know that I was always staring at her as she was always telling me to stop doing so. I'm very grateful that I can hear so I know her voice and tone.
|
||||||
|
|
||||||
|
Then the restaurant closed.
|
||||||
|
|
||||||
|
And the night came.
|
||||||
|
|
||||||
|
We know we still want to talk but time tells otherwise.
|
||||||
|
|
||||||
|
We both have to go home.
|
||||||
|
|
||||||
|
I looked at the night sky,
|
||||||
|
|
||||||
|
and it was already dark.
|
||||||
|
|
||||||
|
Then I looked at the time on my phone,
|
||||||
|
|
||||||
|
it was December 27, 2019 22:28 WIB.
|
5
content/alpine linux.md
Normal file
5
content/alpine linux.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
title: Alpine Linux
|
||||||
|
tags:
|
||||||
|
- seed
|
||||||
|
---
|
181
content/apa-itu-mengapa-menggunakan-tailscale.md
Normal file
181
content/apa-itu-mengapa-menggunakan-tailscale.md
Normal file
@ -0,0 +1,181 @@
|
|||||||
|
---
|
||||||
|
title: Apa & Mengapa menggunakan Tailscale
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: apa-itu-mengapa-menggunakan-tailscale
|
||||||
|
date: 2021-05-21T11:30:00.000Z
|
||||||
|
date_updated: 2021-08-01T04:53:57.000Z
|
||||||
|
excerpt: Tailscale — a secure network that just works
|
||||||
|
---
|
||||||
|
|
||||||
|
Untuk dapat bisa membuat komputer berkomunikasi satu sama lain, satu-satu nya cara adalah melalui alamat IP sebagai pengenal. Beda dengan manusia yang bisa berkomunikasi dengan memanggil namanya; nama orang tua nya, ataupun kekurangan yang dia miliki.
|
||||||
|
|
||||||
|
Untuk bisa mendapatkan alamat IP caranya ada 2: statis alias kita atur sendiri & dinamis alias ada "seseuatu" yang mengaturnya sendiri (DHCP). Tapi tidak sesederhana itu, jika gue sedang menyalakan 2 komputer dan masing-masing komputer sudah gue set dengan alamat IP yang berbeda-beda, apakah bisa langsung berkomunikasi? Tentu tidak. Dalam komunikasi, kita tidak hanya butuh "lawan bicara" saja melainkan "media" nya juga. Misal, bila kita ingin *say hello *ke seseorang, media tersebut berarti mulut untuk berbicara (send) & telinga untuk mendengarkan (receive). Di dunia komputer, let's say media itu adalah Hub, Switch dan Router.
|
||||||
|
|
||||||
|
Oke sekarang kita sudah ada pengenal & sudah ada media, lalu apakah sudah bisa berkomunikasi? Satu hal lagi yang dibutuhkan dalam komunikasi adalah protokol, ada tata caranya. Misal, komunikasi akan berjalan kurang lancar ketika si A yang orang Bandung berbicara dengan si B yang orang Surabaya dengan bahasa Sunda.
|
||||||
|
|
||||||
|
Protokol adalah tentang kesepakatan, sederhananya di dunia komputer, misal untuk dapat mengetahui apakah si B bisa dihubungi oleh si A, biasanya kita menggunakan protokol ICMP untuk mengirim "PING" ke target dan karena si B tau kalau itu adalah PING, maka si B bisa mengirim balik ke si A "PONG" untuk memberitahukan bahwa si B dapat dihubungi khususnya melalui protokol ICMP.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/05/Untitled-2021-05-22-0100.png)router sebagai "media" untuk berkomunikasi
|
||||||
|
Kasus diatas adalah untuk komunikasi yang berada di jaringan lokal atau yang biasa disebut dengan Local Area Network (LAN) yang mana jaringan yang ada hanya sebatas di lokal yang relatif sempit.
|
||||||
|
|
||||||
|
Sekarang adalah era internet, internet sederhananya adalah jaringan komputer yang saling terhubung. Komputer yang berada di Bandung dapat berkomunikasi dengan komputer yang berada di Singapore di jaringan internet. Media yang digunakan dalam komunikasi tersebut masih router, namun lebih kompleks.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/05/Untitled-2021-05-22-0100-2.png)contoh yang disederhanakan melakukan PING dari 192.168.10.6 ke 1.1.1.1 di Singapore
|
||||||
|
Sebagai catatan tambahan, biasanya jaringan untuk level kota keatas akan melalui Point of Presence (PoP) dan untuk yang negara (kumpulan kota) keatas akan melalui IXP.
|
||||||
|
|
||||||
|
Bagian dari ilustrasi diatas yang tidak gue bahas adalah tentang Network Address Translation (NAT) yang akan gue bahas nanti di tulisan khusus. Ilustrasi diatas hanyalah gambaran yang disederhanakan, dalam praktiknya harusnya lebih kompleks dari ilustrasi tersebut.
|
||||||
|
|
||||||
|
Disitu terlihat bahwa untuk mencapai 1.1.1.1 dari 192.168.10.6, komputer kita harus melalui komputer yang memiliki alamat IP 118.99.118.144 lalu 27.111.228.9 yang mana dua (tiga dengan 1.1.1.1) tersebut adalah alamat IP publik sedangkan yang 192.168.10.6 tersebut adalah privat.
|
||||||
|
|
||||||
|
Lanjut.
|
||||||
|
|
||||||
|
Total alamat IP versi 4 yang ada adalah **4,294,967,296** dan untuk yang publik sendiri ada ****3,706,452,992**. **Bayangkan komputer kita terhubung (berada dalam jaringan) dengan 3 milyar komputer lainnya.
|
||||||
|
|
||||||
|
Bagian yang mau gue highlight disini salah satunya adalah di keamanan.
|
||||||
|
|
||||||
|
Devbox gue yang ada di Singapore secara teori dapat berkomunikasi dengan 3 milyar komputer lainnya yang berada dalam jaringan internet. Begitupula sebaliknya, 3 milyar komputer tersebut dapat berkomunikasi dengan komputer gue juga.
|
||||||
|
|
||||||
|
Ingat analogi mulut & telinga dalam berkomunikasi?
|
||||||
|
|
||||||
|
Analogi telinga dalam komunikasi antar komputer adalah "port". Ketika komputer A mengirim PING ke komputer B, komputer A membuka port yang dia gunakan untuk "mendengarkan" balasan dari komputer B, dan komputer B akan mengirim balasan tersebut ke port yang komputer A gunakan.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/05/Screen-Shot-2021-05-22-at-02.02.52.png)PING dari kompuer A yang menggunakan 55 dan komputer B yang menggunakan port 28
|
||||||
|
Terdapat [~64k port](https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers) yang sudah diketahui, dan terdapat maksimal [65,535 port](https://stackoverflow.com/a/113228) yang dapat dibuka. Port yang paling sering digunakan untuk berkomunikasi adalah 22, yakni untuk membuat koneksi SSH alias mengakses komputer dari jarak jauh.
|
||||||
|
|
||||||
|
Beberapa orang ada yang menyamarkan port untuk SSH misal dari yang 22 menjadi 24 demi menghindari serangan, namun pendekatan tersebut adalah "security by obscurity" karena pada akhirnya penyerang pun akan menemukannya thanks to `nmap(1)`.
|
||||||
|
|
||||||
|
Mari kita fokus terkait SSH terlebih dahulu.
|
||||||
|
|
||||||
|
Masalahnya adalah bagaimanapun port tersebut tetap terbuka ke jaringan publik. Mungkin masalah ini dapat diatasi dengan melakukan *rate limit *di firewall untuk menghindari serangan *bruteforce *namun tetap tidak menyelesaikan masalah tersebut.
|
||||||
|
|
||||||
|
Solusi yang paling umum digunakan adalah dengan membuat jaringan pribadi (virtual) diatas jaringan publik atau yang biasa disebut dengan Virtual Private Network (VPN).
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/05/Untitled-2021-05-22-0225.png)Ilustrasi sederhana tentang VPN dengan subnet 10.0.0.0/24
|
||||||
|
Sekilas terlihat seperti komunikasi dalam jaringan seperti biasa, bukan? Dari gambaran diatas, paket yang dikirimkan untuk "jaringan biasa" sederhananya seperti ini:
|
||||||
|
|
||||||
|
**IP header (inner, encrypted):**
|
||||||
|
|
||||||
|
- source: 192.168.6.8
|
||||||
|
- destination: 192.168.7.9
|
||||||
|
|
||||||
|
**IP header (outer):**
|
||||||
|
|
||||||
|
- source: 192.168.6.8
|
||||||
|
- destination: 192.168.7.9
|
||||||
|
|
||||||
|
Namun dalam jaringan VPN, sederhananya seperti ini:
|
||||||
|
|
||||||
|
**IP header (inner, encrypted):**
|
||||||
|
|
||||||
|
- source: 10.0.0.2
|
||||||
|
- destination: 10.0.0.3
|
||||||
|
|
||||||
|
**IP header (outer):**
|
||||||
|
|
||||||
|
- source: <ip_public_a>
|
||||||
|
- destination: <ip_public_b>
|
||||||
|
|
||||||
|
Yang sederhananya, router (dan siapapun yang berada dibalik itu) tidak mengetahui siapa berkomunikasi dengan siapa, tapi yang dia ketahui adalah paket tersebut untuk memang untuk dia dan dia tau harus diteruskan kemana paket tersebut. Berikut ilustrasi lanjutannya:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/05/Untitled-2021-05-22-0225-2.png)IP yang ada diatas kotak komputer adalah IP Publik milik router
|
||||||
|
VPN pada umumnya menggunakan pendekatan "hub-and-spoke" atau yang biasa dikenal dengan "star network" yang sederhananya adalah mengandalkan 1 gerbang sebagai relay. Alasannya? Banyak. Yang paling umum adalah terkait Firewall yang nanti akan kita bahas di tulisan tentang NAT :))
|
||||||
|
|
||||||
|
Lanjut. Misal kita buat gambaran untuk membuat koneksi SSH dari komputer A ke komputer B melalui VPN. Karena mereka tersambung ke VPN, pasti mereka memiliki (Virtual) Network Interface lagi yang ditujukan untuk *tunneling *untuk alamat IP yang sudah didefinisikan. Anggap network interface tersebut namanya adalah `utun3`, nama bisa bervariasi tergantung mood kernel.
|
||||||
|
|
||||||
|
Ketika pengguna melakukan `ssh faultable@10.0.0.3`, dalam routing table berarti paket tersebut di *handle *oleh `utun3`. Dari `utun3` dia kirim paket (ter-enkripsi) ke default/external router bahwasannya dia ingin mengirimnya ke `143.198.198.198` yang mana itu adalah alamat IP publik dari komputer B.
|
||||||
|
|
||||||
|
Darimana komputer A alias si `utun3` tau kalau paket untuk `10.0.0.3` adalah komputer yang memiliki alamat IP `143.198.198.198`? Beragam. Misal, dari VPN Gateway.
|
||||||
|
|
||||||
|
Lalu paket dikirim oleh ISP A ke VPN Gateway dan si gateway meneruskannya ke ISP B, dan ISP B tau kalau paket tersebut adalah untuk dia dan kemana paket tersebut diteruskan misal ke port 22.
|
||||||
|
|
||||||
|
Berdasarkan kasus diatas, kita bisa memitigasi serangan terkait koneksi SSH dengan hanya menerima koneksi ke port 22 dari alamat IP VPN yang sudah didefinisikan.
|
||||||
|
|
||||||
|
Berkat menggunakan VPN, dapat diasumsikan bahwa segala sesuatu yang berada di jaringan tersebut terjamin & aman, dan bukan alasan mengapa VPN memiliki moto "trust but verify", karena untuk dapat terhubung ke VPN biasanya pengguna harus melakukan autentikasi terlebih dahulu dan juga paket selalu berada dalam bentuk ter-enkripsi.
|
||||||
|
|
||||||
|
Misal ada 3 komputer yang terhubung ke VPN.
|
||||||
|
|
||||||
|
Salah satu komputer diretas, dan seseorang dapat mengakses mesin tersebut.
|
||||||
|
|
||||||
|
Ingatkan kalau moto VPN adalah "trust but verify" dan karena koneksi tersebut berasal dari VPN, maka si komputer C yang diretas dapat berkomunikasi dengan komputer lain termasuk melakukan SSH. Meskipun mungkin penyerang tidak mengetahui kredensial yang terkait target, namun ini bisa menjadi masalah karena, well, koneksi yang berada di jaringan VPN terjamin & aman.
|
||||||
|
|
||||||
|
Dan berapa lama untuk melakukan *crack *terhadap ssh private key menggunakan john the ripper? Gue rasa tidak akan selamanya.
|
||||||
|
|
||||||
|
Anyway, kasus tersebut mungkin terlalu imajinatif.
|
||||||
|
|
||||||
|
Manfaat menggunakan VPN bukan hanya di keamanan, melainkan bisa untuk mengakses komputer yang tidak berada di 1 jaringan fisik namun dibalik alamat IP dinamis (misal mengakses Raspberry Pi gue dari Starbucks) yang pada intinya dapat membuat jaringan interlokal seperti lokal. Silahkan berimajinasi, seperti, membuat AirDrop® like experience untuk mengirim berkas dengan mudah & aman secara peer-to-peer.
|
||||||
|
|
||||||
|
## Wireguard®
|
||||||
|
|
||||||
|
Wireguard adalah program untuk membuat VPN. Program Wireguard bersumber kode terbuka, relatif sederhana, dan cepat. Autentikasi yang ada di Wireguard menggunakan *public key cryptography* seperti sebagaimana SSH.
|
||||||
|
|
||||||
|
Paket yang ditukar di Wireguard menggunakan protokol UDP daripada TCP seperti kebanyakan program VPN lainnya seperti OpenVPN dan tinc. Terdapat pro-kontra khususnya dalam pemilihan protokol UDP karena ISP sering memblokir protokol UDP untuk non well-known port, namun itu bukanlah masalah besar mengingat kita bisa melakukan hole punching yang nanti akan kita bahas di tulisan NAT.
|
||||||
|
|
||||||
|
Wireguard dapat menghubungkan antar komputer secara peer-to-peer, berbeda dengan VPN lain yang biasanya menggunakan *hub-and-spoke *yang biasanya berguna dalam proses autentikasi. Karena Wireguard menggunakan PKI dalam autentikasi, bagian yang harus didefinisikan oleh Wireguard hanya 4:
|
||||||
|
|
||||||
|
- PrivateKey: private key dari peer ini
|
||||||
|
- Address: alamat IP dari peer ini
|
||||||
|
- Endpoint: dimana peer tersebut berada
|
||||||
|
- PublicKey: apa public key dari peer tersebut
|
||||||
|
- AllowedIPs: kumpulan alamat IP yang ingin diarahkan melalui Wireguard
|
||||||
|
|
||||||
|
Misal jika ada konfigurasi seperti ini:
|
||||||
|
|
||||||
|
[Interface]
|
||||||
|
PrivateKey = <private_key_kita>
|
||||||
|
Address = 10.0.0.3/24
|
||||||
|
|
||||||
|
[Peer]
|
||||||
|
PublicKey = <public_key_peer>
|
||||||
|
AllowedIPs = 10.0.0.0/24
|
||||||
|
Endpoint = 143.198.198.198:1337
|
||||||
|
|
||||||
|
Ketika kita melakukan PING ke 10.0.0.3, berarti paket tersebut akan dikirimkan melalui interface yang dibuat oleh Wireguard di kita ke peer yang berada di 143.198.198.198.
|
||||||
|
|
||||||
|
Peer yang berada di IP 143.198.198.198 pun konfigurasinya harus disesuaikan dengan konfigurasi kita, misal seperti ini:
|
||||||
|
|
||||||
|
[Interface]
|
||||||
|
PrivateKey = <private_key_peer>
|
||||||
|
Address = 10.0.0.1/24
|
||||||
|
|
||||||
|
[Peer]
|
||||||
|
PublicKey = <public_key_kita>
|
||||||
|
AllowedIPs = 10.0.0.2/32
|
||||||
|
|
||||||
|
Bagian endpoint opsional bila komputer tersebut berada dibalik IP dinamis. Sayangnya, rata-rata komputer pribadi berada dibalik alamat IP dinamis. Dan untuk dapat terhubung ke komputer/peer lain, kita lagi-lagi membutuhkan Hub sebagai STUN server untuk dapat mengetahui alamat IP publik dari peer kita.
|
||||||
|
|
||||||
|
Dan juga, kita harus *take care *terkait public/private key yang ada. Ketika kita memiliki 8 komputer yang ingin terhubung di VPN melalui Wireguard secara peer-to-peer, berarti ada n*(n-1) koneksi yang terjadi. Berarti, jika n tersebut adalah 8, ada 56 koneksi yang terjadi.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/05/Untitled-2021-05-22-0225-3.png)ilustrasi jelek koneksi p2p
|
||||||
|
Setiap *peer *harus memiliki *public key *dari *peer *yang ingin tersambung. Setup VPN terakhir gue melalui Wireguard menggunakan pendekatan hub-and-spoke karena... lebih sederhana.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/05/Untitled-2021-05-23-0041.png)
|
||||||
|
Dengan setup seperti diatas, ketika komputer 2 ingin mengakses komputer 3, paket dikirimkan melalui komputer 1 terlebih dahulu. Dan good luck ketika komputer 1 meninggoy.
|
||||||
|
|
||||||
|
Tapi setup diatas relatif sederhana. Komputer selain komputer 1 bertindak sebagai *client *dan si komputer 1 yang memegang semua *public key *yang ada serta yang bertanggung jawab seperti *apakah komputer 2 boleh mengakses komputer 3?*
|
||||||
|
|
||||||
|
Masalah utama yang sering gue rasakan adalah tidak *reliable *nya komputer 1 yang menyebabkan koneksi VPN tidak efektif (tapi gue sadar diri kok). Setelah itu gue mencoba menggunakan solusi lain yakni [ZeroTier](https://www.zerotier.com) yang mana menggunakan pendekatan mesh network, namun terlalu kompleks dari sisi konfigurasi untuk admin dan juga kurang reliable khususnya dalam kasus "full tunnel mode" karena sering kali paket tidak dikirim melalui interface nya ZT.
|
||||||
|
|
||||||
|
## Tailscale
|
||||||
|
|
||||||
|
Tailscale adalah program untuk membuat VPN juga yang dibuat diatas Wireguard. Yang berarti, segala benefit yang didapat dari menggunakan Wireguard maka ada di Tailscale juga.
|
||||||
|
|
||||||
|
Tailscale melengkapi beberapa kekurangan yang dari Wireguard yang memang kekurangan tersebut bukanlah tanggung jawab Wireguard, seperti:
|
||||||
|
|
||||||
|
- Mesh network, meskipun Wireguard akan mendukungnya (seperti out-of-the-box nya `wg-quick`) melalui `[wg-dynamic](https://github.com/WireGuard/wg-dynamic/blob/master/docs/idea.md)`
|
||||||
|
- Machine authentication, jika di Wireguard hanya butuh public/private key, di Tailscale salah satunya menggunakan autentikasi via SSO untuk menjelaskan bahwa *komputer A boleh tersambung ke jaringan B*
|
||||||
|
- Magic DNS. Ini seperti mDNS, seperti, ketika ingin mendapatkan alamat IP komputer B, di mDNS kita hanya perlu mengetahui *hostname *nya saja sedangkan di Magic DNS hampir sama namun pendekatan yang digunakan adalah "machine name". Di Wireguard untuk dapat mengetahui alamat IP private dari mesin X, kita harus mengatur bagian `DNS` berikut dengan DNS nya juga.
|
||||||
|
- ACL. Di Wireguard mungkin ACL dapat diatur melalui `AllowedIPs`, jika di Tailscale menggunakan "caranya sendiri" yakni sebuah berkas yang berformat JSON sehingga kasus seperti *yang boleh SSH (port 22) ke mesin db-prod dan app-prod hanya group:devops *relatif lebih mudah
|
||||||
|
|
||||||
|
Mungkin masih banyak fitur lain yang belum gue sebut, cuman yang gue pakai fitur-fitur diatas aja. Tailscale menjanjikan "zero config" dalam proses instalasinya, dan bahkan cewek gue yang bukan orang IT pun bisa mengakses *private services* yang hanya bisa diakses di jaringan VPN.
|
||||||
|
|
||||||
|
Thanks to Tailscale sehingga dia tidak perlu berurusan dengan PublicKey, Endpoint, AllowedIPs, Ip dan lain sebagainya :))
|
||||||
|
|
||||||
|
## Cara mulai menggunakan Tailscale
|
||||||
|
|
||||||
|
Satu hal yang perlu diketahui adalah autentikasi di Tailscale baru hanya bisa melalui akun Google, akun Microsoft, dan SSO provider lain. Gue belum coba apakah menggunakan solusi lain seperti Keycloak bisa atau tidak tapi harusnya bisa jika Tailscale mendukung SAML. Anyway.
|
||||||
|
|
||||||
|
Jika kebutuhan diatas sudah siap, tinggal unduh aplikasi Tailscale di sistem operasi yang digunakan, autentikasi, selesai.
|
||||||
|
|
||||||
|
## Mengapa menggunakan Tailscale?
|
||||||
|
|
||||||
|
Gue sejujurnya ingin menulis lebih dalam tentang ini khususnya terkait Zero Trust networks yang menjadi salah satu alasan mengapa Tailscale ada. Dan karena itu adalah termasuk *buzzword *yang sangat menarik, jadi gue akan tulis ditulisan khusus—yang anggap saja sebagai part 2 dari tulisan ini—untuk menarik pembaca yang datang dari hasil pencarian *Apa itu Zero Trust network *hahaha.
|
||||||
|
|
||||||
|
## Penutup
|
||||||
|
|
||||||
|
Gue rasa judul dari tulisan ini lumayan oke untuk dijangkau oleh pengguna internet yang bergantung dengan mesin pencari untuk mendapatkan informasi. Serta, tulisan gue cuma ada 1 dan itupun tidak jelas.
|
||||||
|
|
||||||
|
Tulisan ini sebagai pembuka untuk gambaran akan tulisan-tulisan selanjutnya yang akan ada di blog ini. Di next post gue akan menulis tentang NAT, dan selanjutnya gue akan fokus ke dunia p2p karena ini menjadi topik yang gue tertarik untuk pelajari di tahun 2021 ini.
|
233
content/apakah-saya-butuh-cdn.md
Normal file
233
content/apakah-saya-butuh-cdn.md
Normal file
@ -0,0 +1,233 @@
|
|||||||
|
---
|
||||||
|
title: Apakah saya butuh CDN?
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: apakah-saya-butuh-cdn
|
||||||
|
date: 2021-06-11T14:25:02.000Z
|
||||||
|
date_updated: 2021-06-11T14:25:02.000Z
|
||||||
|
excerpt: "most likely: no"
|
||||||
|
---
|
||||||
|
|
||||||
|
Beberapa pembaca mungkin sudah tau kalau di tahun ini gue lagi tertarik memperdalam tentang "distributed system" dan "network engineering". In general gue tertarik dengan bagaimana internet—literally—bekerja. Dari beberapa hal yang sudah gue pelajari, hal pertama yang ingin gue bagikan adalah tentang Content Delivery Network atau yang biasa disebut dengan CDN.
|
||||||
|
|
||||||
|
## Siapa yang menggunakan CDN?
|
||||||
|
|
||||||
|
Sebelum kita masuk ke pembahasan apa itu CDN, mari kita lihat layanan (populer) apa saja yang menggunakan CDN.
|
||||||
|
|
||||||
|
Kasus [Fastly's outage](https://www.fastly.com/blog/summary-of-june-8-outage) pada 8 Juni 2021 kemarin setidaknya menjelaskan bahwa [Reddit](https://www.reddit.com) dan [StackOverflow](https://stackoverflow.com) menggunakan layanan CDN dari mereka. Selain layanan populer yang menggunakan Fastly sebagai solusi CDN mereka, ada [Shopify](https://www.shopify.com/) yang menggunakan [Cloudflare](https://cloudflare.com) dan [Streamble](https://streamable.com/) yang menggunakan [Bunny](https://bunny.net).
|
||||||
|
|
||||||
|
Setiap CDN memiliki fitur uniknya masing-masing, dan fitur umum yang ditawarkan oleh CDN adalah satu: membuat layanan (terasa) dekat dengan pengguna, dimanapun pengguna berada.
|
||||||
|
|
||||||
|
## Apa itu CDN?
|
||||||
|
|
||||||
|
Pada dasarnya CDN hanyalah kumpulan komputer yang berada diberbagai lokasi dan saling terhubung. Komputer-komputer tersebut biasa disebut dengan Point of Presence atau PoP.
|
||||||
|
|
||||||
|
Penyedia layanan CDN biasanya memiliki 1/lebih PoP yang tersebar di berbagai kota-kota besar. Tugas dari PoP tersebut pada dasarnya hanya satu: mengatur pertukaran paket yang ada.
|
||||||
|
|
||||||
|
## Mengapa ada CDN?
|
||||||
|
|
||||||
|
Komputer dapat berkomunikasi dengan komputer lain melalui sesuatu yang disebut alamat IP. Dalam jaringan internet, alamat IP yang umum digunakan bersifat publik, dan bila alamat IP tersebut publik, berarti si pengelola alamat IP tersebut "menyewa" dari sebuah organisasi yang disebut Regional Internet Registry atau RIR yang terdiri dari RIPE NCC, APNIC, ARIN, LACNIC, NRO dan AFRINIC.
|
||||||
|
|
||||||
|
Ambil salah satu contoh misalnya alamat IP 27.112.79.80, yang mana memiliki subnet 27.112.79.0/24 di jaringan 27.112.78.0/23 yang terdaftar di [IDNIC](https://idnic.id/), yang mana bagian dari [APNIC](https://www.apnic.net/) untuk wilayah Indonesia.
|
||||||
|
|
||||||
|
Karena setiap alamat IP pasti terdaftar—berikut dengan wilayahnya—siapapun dapat mengetahui dari wilayah mana sebuah koneksi tersebut berasal. Internet adalah jaringan yang kompleks, yang saling terhubung dari level antar kota; negara, sampai benua.
|
||||||
|
|
||||||
|
Jika gue mengakses server yang mengatur permintaan ke github.com dari jaringan gue sekarang, high-level view nya adalah seperti ini:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/06/Desktop---1.jpg)Dengan catatan bila server github.com berada di San Francisco
|
||||||
|
Sebenarnya gambarannya tidak sesederhana itu, di lower-level view, kira-kira seperti ini:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/06/Desktop---1-1-.jpg)sorry buat pemilihan warna yang kurang aksesibel
|
||||||
|
Dengan catatan bila kita menggunakan peta dunia versi bumi datar dan kondisi diatas tergantung ISP yang digunakan serta server yang ingin dituju.
|
||||||
|
|
||||||
|
Oke, ilustrasi diatas sumbernya gue ambil dari hasil `traceroute(8)` ke server github.com. Masalah dari kasus diatas adalah latensi dan sayangnya, latensi adalah sesuatu yang tidak bisa dihindari.
|
||||||
|
|
||||||
|
Mengapa latensi ini penting karena berdasarkan "riset" ternyata angka latensi ini berpengaruh terhadap bisnis, silahkan cari sendiri referensinya karena gue males ngomongin bisnis.
|
||||||
|
|
||||||
|
Masalah diatas mungkin dapat diselesaikan dengan cara menjalankan banyak server di berbagai kota besar. Namun tentu saja ada biaya yang harus dibayar, dan melihat ada peluang bahwa masalah tersebut dapat menjadi bisnis, maka lahirlah perusahaan-perusahaan yang bergerak di industri CDN yang *exactly *melakukan apa yang seharusnya dilakukan: menjalankan banyak server di berbagai kota besar.
|
||||||
|
|
||||||
|
## Cara kerja CDN
|
||||||
|
|
||||||
|
Server-server atau PoPs yang tersebar diberbagai daerah tersebut secara teknis bertindak sebagai penghubung alias *proxy. *Dan penghubung tersebut bekerja sebagai penerus paket yang datang dari pengguna dan mengembalikannya.
|
||||||
|
|
||||||
|
Agar gue gak terlalu capek ngedit gambar, gue akan ambil contoh PoPs nya Fastly yang diambil dari [halaman ini.](https://www.fastly.com/network-map)
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/06/Screen-Shot-2021-06-12-at-12.44.00-AM.png)Fastly PoPs. [Sumber](https://www.fastly.com/network-map)
|
||||||
|
Ketika kita (user) mengakses github.com dari Jakarta, koneksi yang ada adalah seperti ini:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/06/MacBook---1.jpg)Mengakses github.com via PoP nya Fastly di Singapore
|
||||||
|
Lalu bukankah berarti Fastly harus mengakses server github.com yang ada di San Francisco juga? Benar, namun, bukan dari PoP yang ada di Singapore, melainkan dari PoP yang terdekat dengan server github.com yakni di San Francisco juga.
|
||||||
|
|
||||||
|
Bagaimana itu bisa terjadi? Magic!
|
||||||
|
|
||||||
|
Oke oke, rahasianya ada di [BGP Routing](https://en.wikipedia.org/wiki/Border_Gateway_Protocol) yang nanti akan gue bahas detailnya.
|
||||||
|
|
||||||
|
Dengan menggunakan CDN, dari sisi pengguna kita tidak akan mendapatkan latensi yang besar karena permintaan kita menuju ke wilayah yang paling dekat dengan wilayah kita. Dari sisi pemilik layanan, salah satunya mereka tidak perlu menjalankan server di banyak tempat, karena itu pada dasarnya tugasnya si CDN hahaha.
|
||||||
|
|
||||||
|
## That Cache thing
|
||||||
|
|
||||||
|
Biasanya bagian yang paling banyak dijual oleh CDN adalah Cache Hit Ratio, yang bahkan itu dijadikan metriks akan kehandalan layanan CDN mereka. Dan itu *make sense *mengingat halaman website hanyalah sebuah dokumen dan kebanyakan website adalah dokumen statis.
|
||||||
|
|
||||||
|
Seperti, ketika kamu mengakses halaman ini, pada dasarnya yang membedakan kamu dengan pembaca lainnya hanyalah:
|
||||||
|
|
||||||
|
- User Agent (sistem operasi, browser, berikut dengan propertinya)
|
||||||
|
- Bahasa yang digunakan (via alamat IP misalnya)
|
||||||
|
|
||||||
|
Jika situs kita tidak bergantung dengan 2 hal diatas, pada dasarnya tidak ada yang membedakan kamu dengan pembaca/pengunjung lainnya.
|
||||||
|
|
||||||
|
Beda cerita kalau misalnya halaman ini sangat bergantung dengan wilayah negara pengunjung berasal (misal untuk mengarahkan pengunjung ke situs khusus negara tersebut), kapabilitas peramban yang ada (misal halaman ini hanya bisa berjalan di Google Chrome for some random reason) dan lain sebagainya.
|
||||||
|
|
||||||
|
Nah, misal, karena tidak ada bagian yang membedakan tersebut, CDN bisa membantu untuk mengurangi beban server kita dengan memberikan response yang sudah disimpan oleh si CDN. Misal, jika ada 1000 orang yang mengakses halaman ini dalam waktu yang sama, berarti ada 1000 permintaan yang masuk ke server gue dalam waktu tersebut.
|
||||||
|
|
||||||
|
Dengan bantuan CDN, permintaan yang masuk ke server gue mungkin cuma 1, karena yang 999 nya berasal dari response yang sudah disimpan oleh CDN dengan catatan gue tidak membedakan 2 poin yang sudah disebutkan diatas.
|
||||||
|
|
||||||
|
Jika permintaan tersebut response nya langsung diberikan oleh CDN, berarti cache tersebut biasanya disebut HIT. Yang berarti, jika cache HIT ratio nya adalah 99%, kasarnya dari 1000 request, 999 request yang ada tidak menyentuh origin server (server kita) sama sekali.
|
||||||
|
|
||||||
|
## That DDoS thing
|
||||||
|
|
||||||
|
Distributed Denial of Service atau yang biasa disebut dengan DDoS adalah teknik penyerangan yang paling mudah dilakukan. Tidak perlu ribet mengakses server target untuk mematikan layanan, cukup kirim yang misalnya paket berukuran 500M dari 100 komputer, maka besar kemungkinan server tersebut akan tumbang karena tidak kuat menangani paket masuk sebanyak 50GB/s.
|
||||||
|
|
||||||
|
CDN biasanya menawarkan layanan untuk menyelesaikan masalah tersebut yang biasa disebut dengan DDoS Protection.
|
||||||
|
|
||||||
|
Cara kerjanya relatif sederhana, pertama, PoPs ataupun router di CDN misalnya dapat menangani paket sebanyak 1TB/s dan kedua, CDN mengetahui mana paket yang normal dan kurang normal berdasarkan, ehm, *machine learning.*
|
||||||
|
|
||||||
|
Hahaha tentu saja berdasarkan pola.
|
||||||
|
|
||||||
|
Dan jika paket tersebut dianggap kurang normal, maka PoPs ataupun router di CDN akan "drop" paket tersebut bahkan sebelum menyentuh server kita.
|
||||||
|
|
||||||
|
## That GeoDNS thing
|
||||||
|
|
||||||
|
Ketika user mengakses github.com, berarti user mengakses komputer yang memiliki alamat IP 13.229.188.59 (per 12 Juni 2021). Domain Name System atau DNS adalah sistem yang digunakan di jaringan internet untuk mempermudah pengguna dengan mengingat alamat domain daripada alamat IP nya.
|
||||||
|
|
||||||
|
Di DNS, terdapat 3 komponen utama:
|
||||||
|
|
||||||
|
- DNS Authotritative Server yang bertugas menjawab alamat alamat IP dari permintaan DNS recursor
|
||||||
|
- DNS Recusor yang bertugas menerjemahkan alamat domain menjadi alamat IP dari permintaan DNS resolver
|
||||||
|
- DNS Resolver yang bertugas untuk menanyakan alamat IP dari alamat domain ke DNS recursor
|
||||||
|
|
||||||
|
DNS yang digunakan oleh pengguna ada di poin terakhir, resolver tersebut bisa Google Public DNS (8.8.8.8), Cloudflare (1.1.1.1), Quad9 (9.9.9.9) ataupun yang sudah disediakan oleh ISP.
|
||||||
|
|
||||||
|
Jika github.com menggunakan strategi Geo DNS, maka Authoritative Name Server akan menjawab dengan alamat IP yang berbeda-beda tergantung wilayah geografi pengguna.
|
||||||
|
|
||||||
|
Mari kita ke contoh nyata: facebook.com. Ketika user ingin mengakses facebook.com, DNS authoritative server Facebook akan menjawab dengan alamat IP yang berbeda-beda tergantung dengan lokasi si user tersebut. Untuk mencoba, gue akan menggunakan fitur [EDNS Client Subnet](https://en.wikipedia.org/wiki/EDNS_Client_Subnet) atau ECS sehingga gue tidak perlu menggunakan VPN untuk proses percobaannya.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/06/Screen-Shot-2021-06-12-at-2.00.14-AM.png)9.9.9.11 adalah DNS resolver dari [Quad9](https://quad9.net/) yang mendukung ECS
|
||||||
|
Disitu terlihat bahwa DNS Resolver mendapatkan alamat IP berbeda-beda untuk alamat domain yang sama berdasarkan letak geografis penggunanya (yang diasumsikan dengan Client subnet).
|
||||||
|
|
||||||
|
Banyak alasan mengapa menggunakan Geo DNS namun yang pasti adalah sebagai "traffic director" dan jika kita menggunakan CDN, kemungkinan besar itu sudah tugas CDN. Geo DNS termasuk teknologi yang relatif sudah lama dan yang mana kemungkinan besar akan tergantikan oleh adopsi Anycast yang akan kita bahas setelah ini.
|
||||||
|
|
||||||
|
## That anycast thing
|
||||||
|
|
||||||
|
Anycast ini bukanlah teknologi yang unik digunakan oleh CDN, namun kebanyakan CDN pasti menggunakan teknologi ini.
|
||||||
|
|
||||||
|
Dengan bahasa yang paling sederhana, anycast intinya adalah ketika 1 alamat IP (publik) digunakan di banyak komputer.
|
||||||
|
|
||||||
|
Kita ambil contoh stackoverflow.com yang mana menggunakan layanan CDN dari Fastly. Berapapun alamat IP yang digunakan oleh pengunjungnya ketika mengakses stackoverflow.com, alamat IP yang diberikan oleh authoritative servernya StackOverflow akan selalu sama (per 12 Juni 2021):
|
||||||
|
|
||||||
|
- 151.101.1.69
|
||||||
|
- 151.101.65.69
|
||||||
|
- 151.101.129.69
|
||||||
|
- 151.101.193.69
|
||||||
|
|
||||||
|
Yang urutannya berbeda-beda. Untuk mengujinya, kita bisa membuat permintaan melalui HTTP(S) Proxy dan melihat bagian Header nya (X-Served-By) yang merepresentasikan lokasi PoP yang digunakan:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/06/Screen-Shot-2021-06-12-at-2.28.10-AM.png)Contoh alamat IP anycast untuk stackoverflow.com
|
||||||
|
Yang mana tangkapan layar diatas menjelaskan bahwa:
|
||||||
|
|
||||||
|
- Permintaan pertama dengan proxy London response nya dari New York (LGA)
|
||||||
|
- Permintaan kedua dengan proxy Paris response nya dari Amsterdam (AMS)
|
||||||
|
- Permintaan ketiga dan terakhir dengan proxy Bangladesh dan tanpa proxy response nya dari Singapore (QPG)
|
||||||
|
|
||||||
|
Yang intinya, response diberikan oleh PoP terdekat dengan pengguna dan hanya melalui 1 alamat IP (terlepas .1.69, .129.169, .65.69, ataupun .193.69).
|
||||||
|
|
||||||
|
Gue sebenarnya ingin bercerita lebih banyak tentang Anycast IP ini terlebih gue sudah bereksperimen dengan BGP juga, tapi karena terlalu keluar dari konteks pembahasan, please give me another shot later!
|
||||||
|
|
||||||
|
## Apakah saya butuh CDN?
|
||||||
|
|
||||||
|
Akhirnya kita ke pembahasan inti.
|
||||||
|
|
||||||
|
Jawaban singkat untuk pertanyaan tersebut adalah: **most likely no.**
|
||||||
|
|
||||||
|
Menggunakan CDN menurut gue seperti kita berlangganan asuransi: kita tidak bisa memprediksi masa depan dan somehow kita tidak ingin shit happens tapi ketika itu terjadi, setidaknya kita sudah memikirkan & memitigasinya.
|
||||||
|
|
||||||
|
Jadi, untuk jawaban yang lebih panjang, mari kita jawab berdasarkan threat model yang sudah kita pikirkan.
|
||||||
|
|
||||||
|
### Bandwidth
|
||||||
|
|
||||||
|
Biaya bandwidth relatif murah dan juga biasanya hanya menagih egress traffic (trafik dari server ke internet). Egress traffic di salah satu server gue di DigitalOcean Singapore untuk Mei 2021 sekitar 24.45GiB berdasarkan `vnstat(1)`.
|
||||||
|
|
||||||
|
Jika gue menggunakan Google Cloud, mungkin seharga $2.93 dengan catatan menggunakan biaya $0.05/GB untuk egress wilayah Asia, untuk hanya biaya egress bandwidth aja.
|
||||||
|
|
||||||
|
Dan itu relatif murah, terlebih gue tidak menjalankan layanan yang banyak memakan bandwidth juga.
|
||||||
|
|
||||||
|
Jika lo memiliki layanan yang banyak memakan bandwidth (ada nampilin video, gambar HD, dsb) mungkin bisa pertimbangkan menggunakan CDN untuk menghemat biaya tersebut dan in case media tersebut bersifat statis.
|
||||||
|
|
||||||
|
Selainnya, dan terlebih bila tidak menjadikan harga bandwidth sebagai masalah, sekali lagi, most likely kita tidak membutuhkan CDN.
|
||||||
|
|
||||||
|
### DDoS
|
||||||
|
|
||||||
|
Ini bagian yang paling gampang dijual oleh CDN.
|
||||||
|
|
||||||
|
Namun biasanya layanan penyedia infrastruktur yang kita gunakan sudah menyediakan DDoS Protection di level router mereka.
|
||||||
|
|
||||||
|
Jika DDoS menjadi salah satu yang dikhawatirkan, dan terlebih bila penyedia infrastruktur (ataupun karena menggunakan in-house data center) tidak menyediakan DDoS Protection, mungkin bisa mempertimbangkan untuk menggunakan CDN.
|
||||||
|
|
||||||
|
Selainnya, sekali lagi, most likely kita tidak membutuhkan CDN.
|
||||||
|
|
||||||
|
### Latency
|
||||||
|
|
||||||
|
Ini menurut gue hanya cocok untuk yang target pasarnya sudah bukan lokal lagi.
|
||||||
|
|
||||||
|
Jika target pasar masih lokal, pengunjung dari Bandung yang mengakses server lo yang berada di Jakarta tersebut hanya memiliki perbedaan beberapa milidetik dengan pengunjung yang dari Pandeglang.
|
||||||
|
|
||||||
|
Tapi jika perbedaan 2ms bisa merugikan bisnis lo sebesar 4jt/ms, mungkin bisa pertimbangkan untuk cari bisnis lain?
|
||||||
|
|
||||||
|
Hahaha.
|
||||||
|
|
||||||
|
Anyway, di bagian ini menurut gue yang paling penting dalam menentukan apakah butuh menggunakan CDN atau tidak. Sebagai kesimpulan, jika latency adalah masalah yang saat ini lo alami, coba pertimbangkan dulu untuk melacak dimana latensi yang ada.
|
||||||
|
|
||||||
|
Dan bila sudah sangat yakin bahwa latensi yang paling menimbulkan masalah adalah ada di waktu ketika pengguna ingin menghubungi server lo, mungkin bisa pertimbangkan untuk menggunakan CDN.
|
||||||
|
|
||||||
|
Selainnya, sekali lagi, most likely kita tidak membutuhkan CDN.
|
||||||
|
|
||||||
|
### FUD
|
||||||
|
|
||||||
|
Siapa yang tidak khawatir dengan ketidakpastian?
|
||||||
|
|
||||||
|
Dan ini menurut gue yang paling laku dijual.
|
||||||
|
|
||||||
|
Biasanya, diiming-imingi dengan pertanyaan sebagai pemilihan copy: gimana kalau tiba-tiba situs lo viral? Gimana kalau tiba-tiba server lo kena DDoS? Gimana kalau tiba-tiba cinta datang kepadaku saat kumulai mencari cinta?
|
||||||
|
|
||||||
|
I'm sorry for the last one.
|
||||||
|
|
||||||
|
Ketakutan, ketidakpastian, dan keraguan atau FUD adalah bagian yang paling laku dijual terlebih bila kita menganggap CDN adalah seperti asuransi.
|
||||||
|
|
||||||
|
Terlebih, "Network is reliable" menjadi [salah satu](https://queue.acm.org/detail.cfm?id=2655736)[kekeliruan](https://aphyr.com/posts/288-the-network-is-reliable) yang paling populer di dunia distributed computing.
|
||||||
|
|
||||||
|
Dan ini sangat sulit untuk ditolak.
|
||||||
|
|
||||||
|
Namun untuk orang-orang yang memiliki prinsip YOLO ataupun filosofi "Let it crash" nya Erlang (yang gue cherrypick), yes, sekali lagi, most likely kita tidak membutuhkan CDN.
|
||||||
|
|
||||||
|
Bagaimana kalau tiba-tiba situs viral? Cool. Jika menggunakan infrastruktur yang mendukung autoscaling & scale to zero, gue rasa pertanyaan "*gimana kalau tiba-tiba situs viral?"* sudah tidak lagi seseram pertanyaan "*itu di kerah ada lipstik siapa?"*
|
||||||
|
|
||||||
|
## Penutup
|
||||||
|
|
||||||
|
CDN memang berguna, namun perlu diketahui juga apakah kita sudah membutuhkannya atau belum.
|
||||||
|
|
||||||
|
Alternatif dari CDN adalah Application Delivery Network atau ADN, yang menjadi lawan dari CDN itu sendiri. Jika CDN menjembatani pengguna dengan layanan kita ke lokasi yang paling dekat melalui PoP nya, ADN pada dasarnya menjadi jembatan itu sendiri, thanks to anycast network.
|
||||||
|
|
||||||
|
Yang berarti, kalau lo ingin membangun bisnis CDN sendiri tanpa harus memakan biaya & administrasi yang lebih panjang, menjalankan aplikasi di layanan yang menawarkan ADN mungkin bisa menjadi solusi.
|
||||||
|
|
||||||
|
Jenis ADN yang bisa dijalankan pun beragam. Ada yang berjenis "Serverless" alias sebuah function yang hanya dieksekusi ketika ada request aja seperti Cloudflare Worker; AWS Lambda, dan dsb, ada yang berjenis "Micro VM" ataupun container seperti Google Cloud Run, AWS Fargate, Heroku, dan Fly.io, dsb.
|
||||||
|
|
||||||
|
Kekurangan di industri Infrastructure As a Service alias IaaS sejauh yang gue tau adalah satu: Anycast VPS, dan alasan gue sederhana: tidak semua layanan membutuhkan CDN & tidak semua aplikasi harus berjalan secara on-demand.
|
||||||
|
|
||||||
|
Fly.io gue rasa solusi yang paling mendekati dari terkait Anycast VPS ini, technically gue bisa aja depoy Ubuntu container; menjalankan beberapa script untuk menjalankan beberapa program, membuat beberapa port mapping, dsb.
|
||||||
|
|
||||||
|
Namun sayangnya ada satu kekurangan dari fly.io: TLS certificate.
|
||||||
|
|
||||||
|
Sejauh ini fly.io hanya bisa untuk 1 domain = 1 aplikasi, gue tidak bisa deploy s.edgy.network, dns.edgy.network, yt.edgy.network di 1 "micro VM" dengan benefit Anycast IP yang ditawarkan oleh fly.io.
|
||||||
|
|
||||||
|
Benefit anycast IP bukan hanya untuk pengguna akhir, melainkan dari sisi operator pun tidak perlu repot-repot misalnya seperti menerapkan "load balancing" untuk menentukan "backend" mana yang bisa diakses, karena technically, semua "backend" tersebut memiliki 1 alamat IP.
|
||||||
|
|
||||||
|
Sebagai penutup, ya, most likely kita tidak membutuhkan CDN.
|
||||||
|
|
||||||
|
Jika cache hit ratio menjadi satu-satu nya alasan menggunakan CDN, mungkin bisa mempertimbangkan [membaca MDN?](https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching) Karena bukankah pada dasarnya bagian pembedanya hanya 1: Ketika menggunakan layanan CDN, "end user" tersebut adalah PoP.
|
||||||
|
|
||||||
|
Dan tugas PoP pada dasarnya adalah meneruskan permintaan dari pengguna akhir ke origin server jika tidak ada cache, ataupun karena tidak ada kebijakan terhadap PoP untuk "meng-cache" permintaan tersebut dari origin server.
|
||||||
|
|
||||||
|
Benar?
|
172
content/bandung.md
Normal file
172
content/bandung.md
Normal file
@ -0,0 +1,172 @@
|
|||||||
|
---
|
||||||
|
title: Bandung
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: bandung
|
||||||
|
date: 2021-08-03T12:09:57.000Z
|
||||||
|
date_updated: 2021-08-05T19:14:39.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Tidak jarang gue mendapatkan pertanyaan "di Bandung kerja?" setiap kali ngobrol dengan orang yang belum dikenal. Untuk memastikan apakah sebatas pertanyaan basa-basi atau memang ingin tahu beneran, biasanya gue jawab dengan "iya nih" dan kalau obrolan masih berlanjut tentang kerjaan, baru gue coba jelasin tentang kenapa gue di Bandung.
|
||||||
|
|
||||||
|
Asal gue adalah Banten, tempat kerja gue sekarang di Jakarta, dan tempat tinggal sekarang adalah Bandung. Gue kira di masa pandemi ini akan lebih mudah menjelaskannya dengan iming-iming *kerja remote*, ternyata pertanyaan selanjutnya kebanyakan adalah tentang "kenapa kerja dari Bandung dan bukan Banten?"
|
||||||
|
|
||||||
|
Yang membuat gue berpikir juga.
|
||||||
|
|
||||||
|
Kenapa masih di Bandung?
|
||||||
|
|
||||||
|
## 2015
|
||||||
|
|
||||||
|
Jika kembali ke 2015, alasan gue berada di Bandung adalah kuliah. Sekitar tahun 2017 gue melepaskan diri dari kehidupan perkuliahan dan fokus di dunia profesional dari menjadi *freelancer* sampai menjadi karyawan tetap di salah satu *startup *di Bandung yang bergerak di bidang *edtech.*
|
||||||
|
|
||||||
|
6 tahun berlalu, dan gue sudah tidak kuliah serta sudah tidak bekerja di perusahaan yang berada di Bandung lagi. Personally gue sangat menyukai Bandung baik dari masyarakatnya, *vibes *nya, serta ekosistem IT nya yang tidak berbeda jauh dengan yang ada di ibukota. Serta, gaya hidup disini gue rasa tidak terlalu mengarah ke hedonisme, yang gue rasa cocok dengan diri gue secara pribadi.
|
||||||
|
|
||||||
|
Alasan mengambil pekerjaan di Jakarta daripada Bandung tentu saja karena alasan duit, money is always the answer. Dari awal negosiasi gue meminta untuk kerja *remote *dari Bandung—bahkan dari sebelum WFH menjadi hal yang umum pada saat ini–dengan beberapa pertimbangan yang dua belah pihak setujui,
|
||||||
|
|
||||||
|
Beruntungnya, tempat kerja gue sekarang tidak terlalu mempermasalahkan kenapa gue ingin bekerja dari Bandung–setidaknya sampai sekarang–sekalipun itu karena alasan pribadi. Dari awal negosiasi, yang gue inginkan bukanlah WFH, melainkan *remote *nya*. *Sejujurnya (untuk sekarang) gue tidak menyukai WFH. Tantangan dari WFH adalah kesepian, dan tidak jarang ketika sedang merasa kesepian itu berdampak terhadap produktivitas.
|
||||||
|
|
||||||
|
Dengan kerja secara *remote*, berarti gue bisa bekerja dimana saja selagi ada perangkat & jaringan internet. Dari coworking space? Starbucks DU? THR dago? Malang? Seminyak? Kali Urang? You name it.
|
||||||
|
|
||||||
|
Sebelumnya ketika gue sedang merasa jenuh, tempat favorit gue untuk bekerja adalah dari Starbucks DU, karena sebuah alasan. Biasanya gue berdalih karena alasan internet, yang meskipun somewhat valid tapi ada alasan lain yang lebih tidak masuk akal.
|
||||||
|
|
||||||
|
Dan sekarang, bahkan untuk *dine in *saja tidak bisa. Bukan hanya di Starbucks, melainkan hampir di segala tempat yang menyediakan kursi dan meja.
|
||||||
|
|
||||||
|
Kejenuhan adalah hal yang lumrah dirasakan, dan sekarang gue hanya bisa menikmatinya karena tidak ada pilihan lain yang gue yakin gue tidak sendiri merasakan hal yang serupa.
|
||||||
|
|
||||||
|
Sempat terlintas untuk pulang ke Banten dan tinggal bersama keluarga, atau pindah ke Jakarta dan berada di lingkungan baru. Meskipun tidak menjamin rasa jenuh tersebut akan berkurang ataupun hilang, setidaknya gue berada di kondisi yang berbeda dibandingkan dengan suasana selama 6 tahun yang sampai hari ini gue rasakan.
|
||||||
|
|
||||||
|
Proses perpindahan sendiri gue rasa relatif tidak sulit.
|
||||||
|
|
||||||
|
Barang-barang yang gue miliki & gunakan tidak terlalu banyak dan gue yakin sekali bawa pun jadi. Namun entah mengapa pikiran ingin pindah tersebut menjadi hanya sebatas pikiran sesaat, bukan sesuatu yang harus gue tanggapi dengan serius.
|
||||||
|
|
||||||
|
Dan pertanyaannya adalah *mengapa masih tidak ingin beranjak?*
|
||||||
|
|
||||||
|
## 2021
|
||||||
|
|
||||||
|
Gue rasa bukan sekali gue berbagi pikiran tentang Bandung & usaha untuk berpindah dari kota ini. Gue tidak memiliki keluarga di Bandung dan teman-teman pun sudah pada lulus dan melanjutkan kehidupannya yang kebanyakan tidak memilih Bandung sebagai tempat mengadu nasib.
|
||||||
|
|
||||||
|
Setidaknya ada 4 teman gue yang masih berada di Bandung, yang mana 2 karena melanjutkan S2; 1 baru saja lulus dan yang 1 lagi bernasib sama dengan gue. Dan yang gue yakin, alasan gue masih berada di Bandung bukanlah karena masih ada 4 teman gue tersebut.
|
||||||
|
|
||||||
|
Lalu apa?
|
||||||
|
|
||||||
|
Apakah ada yang tau?
|
||||||
|
|
||||||
|
Jika gue pulang dan tinggal bersama keluarga, gue tidak perlu memusingkan tagihan listrik & kosan serta tidak perlu mengkhawatirkan besok akan makan apa, karena itu secara teknis bukanlah tanggung jawab gue.
|
||||||
|
|
||||||
|
Jika gue pindah ke Jakarta, gue bisa bertemu dengan lingkungan & suasana baru serta pengalaman-pengalaman baru yang mungkin tidak bisa gue dapatkan di Bandung.
|
||||||
|
|
||||||
|
Apakah karena gue sudah nyaman berada di zona ini?
|
||||||
|
|
||||||
|
Bisa jadi, tapi gue yakin tidak senyaman itu.
|
||||||
|
|
||||||
|
Lalu apa, sekali lagi?
|
||||||
|
|
||||||
|
Apakah ada sesuatu yang membuat gue tidak ingin beranjak dari Bandung?
|
||||||
|
|
||||||
|
Atau mungkin seseorang?
|
||||||
|
|
||||||
|
Entahlah, gue rasa tidak ada.
|
||||||
|
|
||||||
|
Dan semoga gue sedang tidak berbohong.
|
||||||
|
|
||||||
|
## Urusan Pribadi
|
||||||
|
|
||||||
|
Gue curiga sama diri sendiri kenapa gue menambahkan kalimat *Dan semoga gue sedang tidak berbohong *diakhir paragraf diatas. Jika memang seseorang tersebut adalah *pacar*, gue tidak memilikinya. Jika mantan, mantan gue tinggal di Jakarta malahan. Jika gebetan, gue rasa t9dak memilikinya juga.
|
||||||
|
|
||||||
|
Teman? Gue yakin gue gak seloyal itu sampai harus terus berada disini hanya karena teman gue masih ada yang berjuang di kota ini.
|
||||||
|
|
||||||
|
Lalu apa, sekali lagi?
|
||||||
|
|
||||||
|
Sebelumnya, alasan gue berada di Bandung adalah karena alasan pribadi.
|
||||||
|
|
||||||
|
Apakah itu hanya *ngeles *karena gue males pindah? Atau memang karena beneran ada urusan pribadi? Urusan pribadi gue sudah selesai karena gue sudah tidak melanjutkan kuliah lagi.
|
||||||
|
|
||||||
|
Tapi, apakah benar urusan pribadi gue sudah selesai?
|
||||||
|
|
||||||
|
Jika misalnya beneran sudah, pertanyaannya adalah kenapa gue masih disini?
|
||||||
|
|
||||||
|
Dan jika misalnya ternyata belum, pertanyaannya adalah urusan mana yang belum selesai?
|
||||||
|
|
||||||
|
Gue tidak memiliki hutang, kontrak, atau apapun yang menggambarkan perjanjian yang mengharuskan gue harus tetap berada disini.
|
||||||
|
|
||||||
|
Atau mungkin gue ternyata memiliki hutang? Atau kontrak? Jika iya, pertanyaannya adalah: kepada apa?
|
||||||
|
|
||||||
|
Atau mungkin lebih tepatnya: kepada siapa?
|
||||||
|
|
||||||
|
Come on, riz.
|
||||||
|
|
||||||
|
Gue yakin ada sesuatu yang lo sembunyikan.
|
||||||
|
|
||||||
|
## Penutup
|
||||||
|
|
||||||
|
Gue pernah deket dengan beberapa orang yang tinggal di Bandung. Mungkin 3x? Pertama, dengan teman sekolah gue dulu yang kuliah disini juga, tapi tidak gue lanjut karena alasan pribadi. Kedua, dengan seseorang yang gue kenal dari *dating app*, masih sama dengan alasan pertama. Terakhir, dengan seseorang yang gue kenal dari suatu tempat, tidak berlanjut karena dia belum bisa berpindah dari mantannya, lalu dia kembali dengan mantannya, dan gue pun menerimanya dengan damai.
|
||||||
|
|
||||||
|
Jika memang alasannya adalah karena seseorang, siapa seseorang itu?
|
||||||
|
|
||||||
|
Oke di *reminder *gue memang ada sebuah janji gue akan melakukan sesuatu untuk seseorang yang berada di Bandung, tapi sesuatu tersebut tidak mewajibkan gue untuk harus terus tinggal di Bandung.
|
||||||
|
|
||||||
|
Lalu karena apa?
|
||||||
|
|
||||||
|
Sepertinya gue sudah tidak memiliki jawaban lagi untuk menjawab pertanyaan mengapa harus terus tinggal disini.
|
||||||
|
|
||||||
|
Mungkin dengan berpindah gue bisa mengatur ulang kehidupan gue, menemukan bagian diri gue yang belum ditemukan, mendapatkan pengalaman baru, bertemu orang baru, dan menjalin cerita dengan orang baru terlepas cerita tentang apapun itu, meskipun secara pribadi gue belum siap untuk membuka diri kembali kepada orang baru yang ingin masuk ke kehidupan gue.
|
||||||
|
|
||||||
|
Meskipun gue sudah tidak memiliki jawaban tentang mengapa harus terus tinggal disini, gue belum memiliki jawaban tentang mengapa gue harus pindah. Hal-hal tadi yang gue sebut hanyalah kemungkinan-kemungkinan yang ribetnya gue belum bisa menjadikan hal-hal tersebut menjadi sebuah jawaban.
|
||||||
|
|
||||||
|
Apakah gue harus mengkhawatirkan ini?
|
||||||
|
|
||||||
|
Apakah gue harus mencari jawaban yang tepat?
|
||||||
|
|
||||||
|
Apakah gue harus bersikap bodo amat seperti biasa dan menikmati aktivitas dari bangun tidur sampai beranjak tidur lagi dengan suasana yang sama sejak 6 tahun lalu?
|
||||||
|
|
||||||
|
Gue pernah bilang kalau Bandung–bagi gue–cocoknya menjadi tempat untuk pulang, bukan untuk mengadu nasib. Karena untuk pulang, tempat yang dituju besar kemungkinan adalah sesuatu yang biasa disebut dengan rumah.
|
||||||
|
|
||||||
|
Banyak hal yang terjadi di rumah, dan besar kemungkinan, kita tidak ingin membawa hal-hal yang terjadi diluar rumah khususnya untuk sesuatu yang bersifat negatif.
|
||||||
|
|
||||||
|
Pekerjaan yang melelahkan biar ditinggalkan di tempat kerja, karena rumah adalah tempat untuk beristirahat. Teman kerja yang sedang tidak bersahabat biar ditinggalkan di tempat kerja, karena rumah adalah tempat yang berisi orang-orang yang kita senangi sampai kapanpun. Emosi terhadap beberapa pengguna jalan yang menyebalkan biarkan ditinggalkan di jalan, karena rumah adalah tempat yang tentram & damai.
|
||||||
|
|
||||||
|
Gue tidak memiliki rumah, mungkin belum. Gue saat ini menyewa sebuah ruangan untuk tempat singgah & istirahat yang mana ruangan itu biasa disebut dengan kosan. Secara teknis gue tidak pernah pulang karena memang gue tidak kemana-mana. Hanya berpindah tempat yang berjarak ~20cm antara kasur, kamar mandi, dan kursi yang menghadap ke layar monitor sialan ini.
|
||||||
|
|
||||||
|
Sepertinya sekarang gue mengerti.
|
||||||
|
|
||||||
|
Mungkin yang gue inginkan saat gue mengetik ini bukanlah alasan untuk tetap singgah ataupun untuk bisa pindah, melainkan gue sedang rindu dengan sebuah aktivitas yang bernama pulang.
|
||||||
|
|
||||||
|
Segala sesuatu–baik yang positif ataupun negatif–terjadi di ruangan sialan ini dan terus gue bawa yang mungkin setidaknya sampai gue bangun tidur di keesokan harinya.
|
||||||
|
|
||||||
|
Tapi gue yakin aktivitas pulang tersebut bukanlah tentang kembali ke sebuah bangunan yang disebut dengan rumah, melainkan kepada seseorang, yang mungkin disebut dengan rumah juga.
|
||||||
|
|
||||||
|
Rumah, sebuah tempat beristirahat; yang berisi orang yang disenangi, serta bersuasana tentram & damai.
|
||||||
|
|
||||||
|
Sebuah tempat yang bisa membuat energi negatif menjadi positif, sebuah tempat yang memiliki cinta dihampir setiap sudutnya, sebuah tempat yang menjadi tempat pertama sekaligus menjadi tempat terakhir setiap hari.
|
||||||
|
|
||||||
|
Gue rindu sesuatu yang biasa disebut dengan rumah.
|
||||||
|
|
||||||
|
Atau mungkin bukan sesuatu, melainkan seseorang.
|
||||||
|
|
||||||
|
Sekalipun gue tidak tahu pastinya rumah yang mana, ataupun rumah milik siapa.
|
||||||
|
|
||||||
|
Atau mungkin sebenarnya gue tahu?
|
||||||
|
|
||||||
|
Waktu sudah menunjukkan jam 01:51 WIB, udara sudah mulai dingin dan suasana sudah mulai sunyi. Waktunya untuk menutup jendela dan mengakhiri hari di kasur yang menghadap ke tembok sialan yang setiap pagi menjadi pemandangan pertama gue.
|
||||||
|
|
||||||
|
Tempat ini untuk sekarang adalah rumah gue, jika rumah yang gue maksud adalah ke sesuatu.
|
||||||
|
|
||||||
|
Jika memang ternyata maksudnya adalah ke seseorang, gue yakin seseorang tersebut adalah diri gue dan bukan orang lain.
|
||||||
|
|
||||||
|
Dan jika memang kalimat diatas benar, berarti baru kali ini gue merindukan & mencintai diri sendiri, secara harfiah. Yang mana gue rasa bukan gue banget, atau bisa saja mungkin gue baru saja menemukan bagian dari diri gue yang lain, yang sebelumnya belum gue temukan.
|
||||||
|
|
||||||
|
So, yeah. I lo... fuck.
|
||||||
|
|
||||||
|
Maybe I miss the times when I used to write about my day every time I wanted to close the day while someone narrated it verbally.
|
||||||
|
|
||||||
|
Then someone reads it.
|
||||||
|
|
||||||
|
And we talk about it, when we start the day.
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
Time to open the door, again?
|
142
content/banyak-tahu-itu-berbahaya.md
Normal file
142
content/banyak-tahu-itu-berbahaya.md
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
---
|
||||||
|
title: Banyak tahu itu berbahaya
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: banyak-tahu-itu-berbahaya
|
||||||
|
date: 2022-04-21T08:20:08.000Z
|
||||||
|
date_updated: 2022-04-21T08:20:08.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Dalam mempelajari sesuatu, tidak jarang kita mempertanyakan apa yang ingin dicapai setelah mempelajari sesuatu tersebut. Entah sekadar untuk kepentingan ujian, kepentingan pribadi, ataupun bekal untuk praktik.
|
||||||
|
|
||||||
|
Pengetahuan menurut definisi dari Wikipedia adalah informasi atau maklumat yang diketahui atau disadari oleh seseorang. Singkatnya, jika kamu memiliki pengetahuan tentang cara menggunakan komputer, berarti kamu memiliki informasi tentang cara menggunakan komputer tersebut.
|
||||||
|
|
||||||
|
Pengetahuan pada dasarnya bersifat netral. Di sebagian kasus, justru tidak ada baik/buruk ataupun benar/salah terhadap pengetahuan itu sendiri. Seperti, apakah baik atau buruk bila mengetahui cara mencuri?
|
||||||
|
|
||||||
|
Jawabannya selalu tergantung.
|
||||||
|
|
||||||
|
## To or not to
|
||||||
|
|
||||||
|
Anggap kamu memiliki pengetahuan terkait keamanan pada sebuah aplikasi. Kamu tau informasi terkait celah-celah keamanan yang terdapat pada suatu aplikasi, kamu tau aksi apa saja yang bisa dilakukan, kamu tau cara mencari pola nya, dsb.
|
||||||
|
|
||||||
|
Berdasarkan informasi tersebut, setidaknya ada 2 aksi yang bisa kamu pilih: menutup celahnya atau meng-eksploitasinya.
|
||||||
|
|
||||||
|
Dan pilihannya selalu tergantung.
|
||||||
|
|
||||||
|
Khususnya tergantung apa yang ingin dicapai dari aksi tersebut.
|
||||||
|
|
||||||
|
Berdasarkan pertimbangan tersebut, bisa dikatakan pengetahuan seperti pisau bermata dua.
|
||||||
|
|
||||||
|
Seseorang yang mengetahui cara membobol suatu sistem bisa digunakan pengetahuannya untuk meng-eksploitasi ataupun untuk menutup bagian sistem yang rentan tersebut.
|
||||||
|
|
||||||
|
Seseorang yang mengetahui cara melakukan korupsi bisa digunakan pengetahuannya untuk memberantas dan atau mencegah ataupun untuk melakukan korupsi.
|
||||||
|
|
||||||
|
Seseorang yang mengetahui tentang riba, bisa digunakan pengetahuannya untuk menghindari riba ataupun untuk mendapatkan keuntungan dari praktik riba tersebut.
|
||||||
|
|
||||||
|
Kamu tidak akan mengkhawatirkan dampak dari riba ketika kamu tidak mengetahuinya.
|
||||||
|
|
||||||
|
Kamu tidak akan meninggalkan ibadah ketika kamu mengetahui apa yang terjadi bila melakukannya.
|
||||||
|
|
||||||
|
Karena sekali lagi, pengetahuan seperti pisau bermata dua.
|
||||||
|
|
||||||
|
Dan apa yang ingin dituju berdasarkan pengetahuan tersebut jawabannya adalah selalu tergantung.
|
||||||
|
|
||||||
|
## Sometimes silence is gold
|
||||||
|
|
||||||
|
Selain baik/buruk dan benar/salah, salah satu sifat dari sebuah pengetahuan adalah *confidentiality*. Ada pengetahuan yang bersifat terbuka untuk umum dan ada yang bersifat rahasia. Dan sekali lagi, alasannya adalah selalu tergantung.
|
||||||
|
|
||||||
|
Pengetahuan yang bersifat terbuka bisa didapat dari mana saja, buku pelajaran; artikel di internet, apapun.
|
||||||
|
|
||||||
|
Untuk pengetahuan yang bersifat rahasia, selain sumbernya sangat terbatas juga distribusinya. Tidak sembarang orang yang boleh mengetahui dan memberitahu terkait informasi tersebut.
|
||||||
|
|
||||||
|
Contoh pengetahuan yang bersifat rahasia sangat beragam. Dari "rahasia negara" sampai strategi bisnis dari sebuah perusahaan. Jika informasi tersebut sangat terbatas dalam siapa yang boleh mengetahui dan memberitahukan, besar kemungkinan informasi tersebut bersifat rahasia.
|
||||||
|
|
||||||
|
Mengapa informasi tersebut ada yang bersifat terbuka/umum dan rahasia? Sekali lagi, jawabannya selalu tergantung.
|
||||||
|
|
||||||
|
Namun di kebanyakan kasus, tujuannya adalah untuk menghindari penyalahgunaan dari informasi tersebut. Untuk menghindari penggunaan informasi yang bukan untuk semestinya.
|
||||||
|
|
||||||
|
Berdasarkan pertimbangan tersebut, terkadang diam itu baik.
|
||||||
|
|
||||||
|
Atau lebih spesifiknya, diam untuk menandakan bahwa kita seperti tidak tahu padahal tahu.
|
||||||
|
|
||||||
|
## Facts in everyday things
|
||||||
|
|
||||||
|
Sampai hari ini gue pribadi tidak tahu tentang dampak dari praktik riba. Of course gue bisa mengetahuinya, apalagi di era teknologi informasi seperti sekarang. Namun gue tau sedikit tentang bahaya dari riba, dan setelah mengetahuinya, gue belum ingin menggali lebih dalam terkait informasi seputar riba tersebut.
|
||||||
|
|
||||||
|
Di kasus lain yang sedang dialami oleh teman gue adalah mencari kabar tentang mantannya. Teman gue ingin mengetahui kabar tentang mantannya tersebut karena... dia ingin tahu informasi terbarunya terkait mantannya tersebut. Of course.
|
||||||
|
|
||||||
|
Gue mengambil contoh menggunakan 2 kasus diatas karena 2 hal tersebut dampaknya seringkali mengarah ke hal yang kurang mengenakkan ketika sudah mengetahui informasinya.
|
||||||
|
|
||||||
|
Ketika sudah mengetahui dampak dari praktik riba, besar kemungkinan kita seharusnya akan menghindari praktik riba tersebut.
|
||||||
|
|
||||||
|
Ketika sudah mengetahui dampak dari *stalking *mantan tersebut, besar kemungkinan kita seharusnya tidak ingin melakukannya lagi.
|
||||||
|
|
||||||
|
Dan penyesalan selalu di akhir.
|
||||||
|
|
||||||
|
Seharusnya tidak perlu terkejut ketika sudah mengetahuinya karena yang pertama itu adalah faktanya dan kedua karena kamu sudah memilih untuk melakukannya.
|
||||||
|
|
||||||
|
Jika kita mengetahui informasi kapan kita akan mati, besar kemungkinan kita akan terus melakukan kebaikan hanya karena sebentar lagi akan mati, bukan karena melakukan kebaikan adalah sebuah kewajiban.
|
||||||
|
|
||||||
|
## If you know, you know
|
||||||
|
|
||||||
|
Gue tidak terlalu pandai dalam menyimpan rahasia, tapi setidaknya gue sedikit tahu kapan harus berbicara atau diam. Bagaimana cara gue mengetahuinya? Di banyak kasus, berdasarkan pengalaman, baik dari diri sendiri ataupun orang lain.
|
||||||
|
|
||||||
|
Menyimpan informasi untuk tetap rahasia dan mengetahui kapan dan kepada siapa harus memberitahukannya gue rasa adalah sebuah keterampilan yang harus terus diasah. Selain karena alasan untuk menjaga kepercayaan, juga untuk menyadari bahwa segala sesuatu itu ada waktunya.
|
||||||
|
|
||||||
|
Ada momennya kapan kamu harus membagikan slip gajimu dan kepada siapa.
|
||||||
|
|
||||||
|
Ada momennya kapan kamu harus berbicara dan kepada siapa.
|
||||||
|
|
||||||
|
Dan sebagainya.
|
||||||
|
|
||||||
|
Bagian menarik dari menentukan momen ini adalah dalam pemilihan waktu. Apakah harus menunggu sampai waktu yang pas? Apakah harus menunggu hal lain terlebih dahulu? Bahkan sampai Apakah memang harus diberitahukan?
|
||||||
|
|
||||||
|
Gue teringat cerita SMA dulu ketika salah satu teman dekat gue diberi kabar. Awalnya teman gue *disuruh *untuk pulang dari asrama karena suatu alasan, lalu ketika sudah sampai di rumah, barulah dia diberitahukan kabar sebenarnya bahwa ada berita sedih di keluarganya. Alasan tidak langsung diberitahukannya menurut penjaga asrama tersebut adalah untuk tidak membuat teman gue gelisah. Dan gue rasa, kalau dipikir-pikir memang momen yang tepat untuk memberitahukannya adalah ketika sudah di rumahnya.
|
||||||
|
|
||||||
|
Entah untuk menghindari kejadian yang tak terduga, ataupun untuk, membuatnya dirinya tidak gelisah.
|
||||||
|
|
||||||
|
Pada suatu hari gue pernah memilih untuk diam untuk sesuatu yang sudah gue ketahui. Alasannya sederhana, gue ingin tahu sampai sejauh mana dia terus menutupi kebenaran. Dan setelah momennya tiba, baru gue mulai berbicara.
|
||||||
|
|
||||||
|
Dan momen tersebut adalah ketika gue sudah siap untuk menjalani apa yang akan terjadi setelah gue berbicara tersebut.
|
||||||
|
|
||||||
|
Tanpa perlu penjelasan lebih lanjut.
|
||||||
|
|
||||||
|
## To not giving a fuck
|
||||||
|
|
||||||
|
Tidak semua yang kita ketahui harus kita terlalu perdulikan.
|
||||||
|
|
||||||
|
Dalam kasus ini biasanya ketika gue berurusan dengan sesuatu yang sepertinya tidak perlu gue ketahui. Yang sering terjadi adalah ketika mempelajari hal baru, misal Kubernetes. Gue tahu sepertinya gue tidak butuh mempelajari Kubernetes, namun gue merasa sepertinya hanya mempelajarinya saja terasa sangat menarik.
|
||||||
|
|
||||||
|
PR ketika akan mendapatkan informasi baru menurut gue ada 2: proses "unlearn" dan perencanaan ulang dalam mengatur prioritas.
|
||||||
|
|
||||||
|
Proses unlearn ini sederhananya adalah sebuah proses dimana kita "melupakan" sebuah pengetahuan entah karena kurang tepat atau karena sudah tidak relevan lagi.
|
||||||
|
|
||||||
|
Ketika 2017, gue selalu memilih Nginx dalam menentukan Reverse Proxy karena selain *high performance *juga gue cukup hafal dengan sintaksnya. Lalu gue mempelajari hal baru, ada reverse proxy lain seperti Caddy dan Traefik khususnya di era container seperti sekarang. Proses penerimaan teknologi baru tersebut relatif sulit bagi gue. Misal, di fitur provision TLS certs. Gue exactly bisa melakukan apa yang bisa dilakukan di Caddy namun bedanya bila gue biasanya melakukannya secara manual (via certbot) kalau pakai Nginx, di Caddy, itu dilakukan secara otomatis. Dan gue tidak keberatan dengan hal itu.
|
||||||
|
|
||||||
|
Namun seiring berjalan waktu, gue tahu bahwa Caddy lebih relevan daripada Nginx (ataupun Traefik) jika melihat kebutuhan gue. Perlahan gue melupakan beberapa hal. Pertama, gue melupakan kalau provision TLS certs itu harus manual. Kedua, gue melupakan kalau membuat konfigurasi itu tidak harus sekompleks Nginx. Ketiga, gue melupakan kalau beberapa hal itu tidak harus dilakukan secara manual (seperti provide x-forwarded-host dan host explicitly).
|
||||||
|
|
||||||
|
Dan PR yang lumayan berat dalam kasus gue diatas adalah menghiraukan Traefik. Sebelumnya gue selalu membandingkan perbedaan Caddy dan Traefik, Pro Cons nya, dsb. Gue selalu merasa yakin kalau yang gue butuhkan adalah Traefik bukan Caddy.
|
||||||
|
|
||||||
|
Setelah banyak pertimbangan, gue stick di Caddy.
|
||||||
|
|
||||||
|
Gue lebih memilih menjawab *"Gak tau kalau Traefik"* daripada harus menjelaskan perbedaan antara Caddy dan Traefik. Banyak tahu itu membahayakan, salah satunya adalah karena kamu akan berurusan dengan sesuatu yang seharusnya bukan urusanmu.
|
||||||
|
|
||||||
|
## Penutup
|
||||||
|
|
||||||
|
Gue kepikiran menulis ini setelah membahas tentang riba sama teman gue. Membahas tentang mengapa orang-orang korupsi. Membahas tentang kenapa kita berurusan dengan sesuatu yang seharusnya bukan urusan kita. Membahas tentang mengapa lebih menguntungkan jual data yang bocor daripada menyelanggarakan bug bounty.
|
||||||
|
|
||||||
|
Mungkin gue naif karena tidak ingin menerima fakta.
|
||||||
|
|
||||||
|
Tapi di beberapa hal gue lebih memilih untuk diam ataupun tidak mencari tahu daripada seperti menjadi bumerang untuk gue yang mungkin merugikan gue.
|
||||||
|
|
||||||
|
Pengetahuan tidak pernah salah.
|
||||||
|
|
||||||
|
Yang salah selalu subjeknya yang menyalahgunakan pengetahuan tersebut.
|
||||||
|
|
||||||
|
Terkadang memilih untuk diam adalah yang terbaik.
|
||||||
|
|
||||||
|
Entah agar tidak harus berurusan dengan sesuatu yang harusnya bukan urusan kita, ataupun untuk menghindari sesuatu yang menjadi bumerang untuk kita.
|
||||||
|
|
||||||
|
Yang pasti, fakta adalah fakta.
|
||||||
|
|
||||||
|
Dan semuanya membutuhkan momentum.
|
110
content/berapa-budget-untuk-x.md
Normal file
110
content/berapa-budget-untuk-x.md
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
---
|
||||||
|
title: "Berapa budget untuk X?"
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: berapa-budget-untuk-x
|
||||||
|
date: 2022-06-24T09:39:14.000Z
|
||||||
|
date_updated: 2022-06-24T09:39:14.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Tidak jarang gue mendapatkan pertanyaan tersebut baik dari lingkungan keluarga, teman, temannya teman sampai ke orang random di internet. Di kasus gue, biasanya X diatas mengarah ke membuat aplikasi ataupun situs web, dan jawaban dari gue adalah selalu "tergantung".
|
||||||
|
|
||||||
|
Dan karena pertanyaan tersebut cukup populer gue dapatkan, I guess gue buat tulisan disini aja deh biar klo ada yang nanya serupa tinggal gue kasih tautan ini.
|
||||||
|
|
||||||
|
Dalam jual beli, setidaknya ada 2 jenisnya: produk dan jasa. Sebuah produk biasanya memiliki harga yang *fixed*, seperti harga sebungkus Sampoerna Mild per tahun 2022 adalah 28,000 IDR dan that's it. Berbeda dengan jasa yang melibatkan banyak pihak dan khususnya memiliki kebutuhan khusus, yang membuat harga dari jasa ini variatif kecuali jasa tersebut dibungkus sebagai produk (i.e: SaaS).
|
||||||
|
|
||||||
|
Terlepas lo seoarang Programmer, Graphic Designer, 3D Artist, Video Producer, anything, as long as yang lo tawarkan adalah sebuah jasa, dan khususnya bila lo pribadi pun masih bingung dengan menentukan harga lo sendiri, mungkin tulisan ini akan relevan untuk lo juga.
|
||||||
|
|
||||||
|
Informasi yang ada disini murni diambil dari pengalaman gue selama menjadi seorang *freelancer *dulu, dan since gue sudah tidak melakukan *freelancing *lagi, mungkin akan bermanfaat bila pengalaman yang gue miliki gue bagikan ke masyarakat Internet.
|
||||||
|
|
||||||
|
## Dasar
|
||||||
|
|
||||||
|
Poin utama dari menentukan harga sebuah jasa menurut gue adalah harga per-orangan nya terlebih dahulu. Misal, lo dapat pesanan untuk membuat logo untuk perusahaan X, dan misal gaji lo adalah 20jt/bulan sebagai Graphic Designer. Lo kerja per-hari 8 jam, dan 5 hari selama seminggu. Berarti total 160 jam perbulan (8*5*4). Dengan gaji misalnya 20jt/bulan, berarti kurang lebih bayaran per-jam lo adalah 125,000 IDR alias $8.43 (20000000/160).
|
||||||
|
|
||||||
|
Misal untuk membuat logo tersebut lo membutuhkan waktu 5 hari dengan catatan hanya kerja 5 jam per-hari. Berarti total 25 jam, yang mana hasilnya adalah 3,125,000 IDR (125000*25), dan itu murni hanya untuk lo since untuk membuat logo tersebut hanya butuh 1 orang.
|
||||||
|
|
||||||
|
Untuk project lain yang lebih besar, misal membuat website yang butuh tim. Misal, lo butuh 1 designer dan 2 programmer. Dan perhitungannya tetap sama dengan yang diatas.
|
||||||
|
|
||||||
|
Berapa harga per-jam untuk diri lo? Tergantung. Lo sendiri yang menentukan harga, berdasarkan apa yang lo miliki.
|
||||||
|
|
||||||
|
## Waktu
|
||||||
|
|
||||||
|
Ini cukup sederhana, dengan let's say melihat portfolio ataupun track record lo, yang menawarkan jasa tersebut setidaknya sudah percaya kalau lo bisa meng-handle permintaan tersebut.
|
||||||
|
|
||||||
|
Tadi kita bahas sedikit tentang berapa lama pembuatan logo, dan sekarang misal kita ambil contoh dalam pembuatan website. Let's say membuat E-Commerce.
|
||||||
|
|
||||||
|
Lo memiliki pengetahuan dalam membuat E-Commerce, dan mereka memiliki requirements tentang apa yang ingin mereka buat dan apa yang mereka inginkan. Berdasarkan requirements tersebut, lo setidaknya bisa menentukan:
|
||||||
|
|
||||||
|
- Seberapa kompleks permintaan tersebut
|
||||||
|
- Berdasarkan poin pertama, seberapa lama waktu yang harus dialokasikan untuk men-deliver permintaan tersebut
|
||||||
|
- Dan masih berdasarkan poin pertama, seberapa banyak orang yang lo butuhkan untuk men-deliver permintaan tersebut
|
||||||
|
|
||||||
|
Damn, menjadi *freelancer *membuat gue belajar dasar project management hahaha.
|
||||||
|
|
||||||
|
Anyway, dalam praktiknya, kalau gue biasanya menggunakan strategi milestone. Gue deliver something gradually, demi menghindari banyaknya revisi. Misal dalam membuat E-commerce, milestone 1 adalah H+7, dan mereka sudah bisa mencoba fitur X. Jika mereka oke, biasanya mereka akan kunci bayaran (di [Upwork](https://www.upwork.com/) ini possible) untuk milestone tersebut (7 hari alias 56 jam jika bekerja 8 jam/hari) dan jika ada revisi di lain hari untuk milestone tersebut, biasanya gue akan jadikan itu sebagai "OP" atau Overtime Price meskipun literally gue kagak lembur haha.
|
||||||
|
|
||||||
|
## Skop
|
||||||
|
|
||||||
|
Ini berhubungan dengan waktu, tapi tidak seberhubungan itu.
|
||||||
|
|
||||||
|
Skop disini harusnya berada di perjanjian awal dan sifatnya custom.
|
||||||
|
|
||||||
|
Misal, apakah lo murni hanya untuk membuat aplikasi dan tidak melakukan maintenance? Apakah lo menerima bug fix selama 5 bulan setelah pesanan selesai? Berapa banyak batas maksimal revisi dalam membuat logo? Apapun.
|
||||||
|
|
||||||
|
Diluar dari skop, berarti urusan yang berbeda. Jika lo membuat aplikasi mobile menggunakan React Native dan perjanjian di awal hanya untuk membuat aplikasi di iOS lalu di lain waktu mereka ingin membuat versi Android nya juga, jika berbicara secara teknis, tentu possible. Tapi secara bisnis, itu adalah hal lain. Jika memang saling setuju, mungkin bisa dimasukkan sebagai OP dan atau pesanan lain mengingat prioritas utamanya bukanlah itu.
|
||||||
|
|
||||||
|
## Infrastruktur
|
||||||
|
|
||||||
|
Ini opsional tapi cukup penting karena gue pernah ngalamin ini.
|
||||||
|
|
||||||
|
Dalam konteks membuat website, gue memiliki alamat domain sendiri dan server sendiri untuk menjalankan website tersebut, dan gue beritahukan kepada mereka. Pernah gue mendapatkan pesanan bahwa mereka menginginkan agar website nya berjalan di [Heroku](https://www.heroku.com/) dan default nya jasa gue tidak menawarkan itu.
|
||||||
|
|
||||||
|
Misal ketika menggunakan Heroku lo membayar $25/bulan, gue akan minta *re-imburse *untuk bayaran ekstra tersebut.
|
||||||
|
|
||||||
|
Klo dalam konteks graphic designer/illustrator, mungkin, anggap lo dapat pesanan untuk membuat ilustrasi dan biasanya lo menggunakan Adobe Illustrator. Tapi somehow mereka menginginkan lo membuatnya di [Sketch,](https://www.sketch.com/) sedangkan lo tidak menggunakan Sketch meskipun Sketch hanyalah sebuah tools. Gue akan menawarkan untuk meminta belikan lisensi Sketch kepada mereka (pada saat itu $99) karena defaultnya menggunakan AI.
|
||||||
|
|
||||||
|
## Kesimpulan
|
||||||
|
|
||||||
|
Beberapa ada yang menawarkan layanan sebagai produk yang berarti menggunakan fixed price dalam periode tertentu, misal seperti layanan streaming. Lo berlangganan produk dari Spotify AB yakni aplikasi Spotify dan membayar 55rb/bulan untuk menikmati layanan streaming musik mereka.
|
||||||
|
|
||||||
|
Atau ada yang membukus layanan tersebut sebagai paket, misal, paket membuat website E-Commerce adalah 50,000,000—yang biasanya diawali dengan "start from".
|
||||||
|
|
||||||
|
Oke oke kembali ke topik, jika lo adalah seseorang yang membuka ini karena dikirim tautan ini sama gue, untuk pertanyaan "Berapa budget untuk bikin website E-commerce", silahkan uraikan:
|
||||||
|
|
||||||
|
- Seberapa lama agar website tersebut lo mau nya selesai? (kalau jawabannya "as soon as possible lah", berarti jangan lupa dengan [Project Management Triangle](https://en.wikipedia.org/wiki/Project_management_triangle)) — Waktu
|
||||||
|
- Apa saja fitur dan kebutuhan yang diinginkan? (Biasanya jawabannya adalah "fitur dasar ecommerce lah") — Skop
|
||||||
|
- Apakah ada pembeda dengan website ecommerce pada umumnya? (misal, "lo bisa gak preview produknya bisa dilihat pakai VR?") — Infrastruktur
|
||||||
|
|
||||||
|
Dari situ, baru gue mengambil base price lalu menambahkan dengan 3 hal tersebut. Misal:
|
||||||
|
|
||||||
|
- Base price gue 150,000/jam
|
||||||
|
- Gue akan dedicate waktu 5 jam/hari dan 5 hari/minggu
|
||||||
|
- Untuk membuat e-commerce, gue pasang harga 50,000,000 selama 3 bulan dengan 10 milestone (1 milestone per 6 minggu)
|
||||||
|
|
||||||
|
Jika misalnya dari sisi waktu, skop dan Infrastruktur oke, berarti:
|
||||||
|
|
||||||
|
- Biaya untuk diri gue: 45,000,000 (150000*5*(5*4)*3) yang mana sampai 3 bulan tersebut, berarti 15.000.000/bulan dengan 5 jam kerja.
|
||||||
|
- Biaya untuk E-commerce: 50,000,000
|
||||||
|
- Total: 95,000,000
|
||||||
|
|
||||||
|
Jika misalnya gue butuh graphic designer dan gue tidak ingin mengambil dari 45jt diatas, tinggal tambahkan misal 15jt untuk bayar graphic designer (yang anggap berarti 5jt/bulan, sorry guys ini hanya untuk contoh).
|
||||||
|
|
||||||
|
Ini hanya untuk contoh aja ya.
|
||||||
|
|
||||||
|
Jika mereka tidak cocok dengan harga tersebut, gue sih simply berarti mereka bukanlah target pasar gue. Damn, only $6.500 for fucking ecommerce in 3 months???
|
||||||
|
|
||||||
|
Bagian menarik jika mereka sudah menentukan budget. Let's say, mereka punya budget 150,000,000 alih-alih perhitungan dari 95,000,000 diatas. Ini cukup seru, pertama kita bisa naikkan pembayaran bulanan untuk si graphic designer, bisa menambah tenaga lain alih-alih gue sendiri yang lakukan, dan bisa mengalokasikan sisa sebagai bonus.
|
||||||
|
|
||||||
|
Yang ribet yang nanya budget, sehingga gue harus menulis ini. Hahaha.
|
||||||
|
|
||||||
|
Kalau memang aslinya gak tau budget nya berapa, tipe-tipe yang kayak gini nih yang biasanya gue hindari. Masa lo mau beli sesuatu tapi gak cek harga dulu? Biasanya tipe yang kayak gini cukup sadis, klo ngasih harga dan waktu tenggat harus solat istikarah dulu, since mereka harusnya gak tahu juga harga pasar dan workload yang ada apa saja.
|
||||||
|
|
||||||
|
Dan yang paling brengsek, para makelar. Hehe been there done that.
|
||||||
|
|
||||||
|
Ni biasanya eksploitasi macem outsourcing yang melempar urusan negara maju ke negara berkembang. Tentu gue memasang harga berbeda-beda, kek mungkin kalau untuk pasar US gue memasang $20/hr alih-alih $10. Tapi makelar ini misal gue dapet project 100,000,000 untuk e-commerce, terus gue outsource ke ahensi ataupun orang random menjadi 60,000,000. Ekstra 40jt gue dapet tanpa harus effort lebih selain menjadi "penawar" dan ekstra lainnya gue dapet dari 60jt tersebut sebagai upah seorang "project manager".
|
||||||
|
|
||||||
|
Tapi itu urusan lain hahaha.
|
||||||
|
|
||||||
|
Sebagai penutup, jika sebelumnya bertanya "berapa budget untuk X?", harusnya sekarang sudah mendapatkan jawabannya dan mari kita negosiasi angkanya.
|
||||||
|
|
||||||
|
Jika ternyata belum, I guess you are asking the wrong person?
|
243
content/cloud-gaming.md
Normal file
243
content/cloud-gaming.md
Normal file
@ -0,0 +1,243 @@
|
|||||||
|
---
|
||||||
|
title: Cloud gaming
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: cloud-gaming
|
||||||
|
date: 2022-10-16T02:26:44.000Z
|
||||||
|
date_updated: 2022-10-16T02:26:44.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Pada 29 September 2022 kemarin Google [mengumumkan](https://blog.google/products/stadia/message-on-stadia-streaming-strategy/) pemberhentian salah satu layanannya yang bernama Google Stadia. Google Stadia adalah sebuah layanan untuk bermain game melalui streaming, di komputer yang berada dan diakses melalui jaringan internet.
|
||||||
|
|
||||||
|
Disamping itu, sudah cukup banyak perusahaan teknologi lain yang bermain di industri ini: Amazon dengan [Amazon Luna](https://www.amazon.com/luna/landing-page) nya, Microsoft dengan [Xbox Cloud Gaming](https://www.xbox.com/en-us/play) nya, dan Nvidia dengan [GeForce Now](https://www.nvidia.com/en-us/geforce-now/) nya. Dari ketiga penyedia layanan tersebut, gue coba menggunakan Nvidia GeForce Now karena gue rasa yang sudah mendukung negara Indonesia hanyalah GeForce Now.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/10/image-5.png)
|
||||||
|
Disini gue menghubungkan akun Steam gue, dan beberapa game yang ada Steam Library gue (Dota 2, Team Fortress 2, dan Factorio) sudah siap dimainkan.
|
||||||
|
|
||||||
|
Game pertama yang gue coba adalah Dota 2, minimum hardware yang direkomendasikan di Steam untuk game ini—secara teori—adalah seperti berikut:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/10/image-7.png)
|
||||||
|
Secara praktiknya terkadang tak sesuai dengan teori. Di workstation gue dengan memory 16 GB dan graphics AMD Radeon R7 yang technically diatas sedikit dari rekomendasi yang ada diatas somehow gak stabil dalam bermain Dota 2. Yang mungkin karena gue menggunakan sistem operasi GNU/Linux?
|
||||||
|
|
||||||
|
Anyway, untuk gambaran ketika bermain Dota 2 di GeForce Now tersebut seperti ini:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/10/CleanShot-2022-10-15-at-23.01.02@2x.png)aslinya Full Screen
|
||||||
|
IMO graphics nya worse dari ketika gue main Dota 2 di Macbook Air M1.
|
||||||
|
|
||||||
|
Karena sedang tidak mood main Dota, gue coba game kedua yakni Genshin Impact. Gue tidak tahu bagaimana graphics aslinya di recommended hardware untuk bermain Genshin Impact, tapi di GeForce Now berikut gambarannya:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/10/CleanShot-2022-10-15-at-23.21.30@2x.png)Story mode
|
||||||
|
Dan sedikit gambaran untuk gameplay nya:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/10/CleanShot-2022-10-15-at-23.30.43@2x.png)Setiap char cewe pasti gue namain ayu btw
|
||||||
|
Gue sempat coba main Genshin Impact di iPad, dan gue rasa graphics nya kurang lebih sama dengan ketika gue main di iPad dengan Graphics Quality High (atau Highest? Lupa).
|
||||||
|
|
||||||
|
Dan ini ketika koneksi sedang lag:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/10/CleanShot-2022-10-15-at-23.23.26@2x.png)
|
||||||
|
Klo lagi lag kualitasnya kurang lebih seperti bokep amatir indo lah HAHAHA.
|
||||||
|
|
||||||
|
Bandwidth internet gue adalah 5 Mbps (internet kos), yang secara teori kecepatannya adalah 0,625 MB/s alias untuk bisa download apapun berukuran 1,25MB setidaknya memakan waktu 2 detik. Internet di kos gue menggunakan QoS yang setiap kamar mendapatkan jatah 5 Mbps (yang gue yakin mereka berlangganan internet yang paket 50 Mbps).
|
||||||
|
|
||||||
|
Dari gameplay cukup oke. Gue tidak merasakan lag karena frame drops yang kemungkinan bisa merendender 60 fps. Di GeForce Now gue cukup yakin mereka menggunakan adaptive streaming yang mana sederhananya grafis yang ditampilkan bergantung berdasarkan internet bandwidth dan throughput.
|
||||||
|
|
||||||
|
## The *promising* Cloud Gaming
|
||||||
|
|
||||||
|
Bagian menarik ketika gue mencoba Dota 2 dan Genshin Impact adalah gue tidak perlu menunggu beberapa jam untuk selesai mengunduh kedua game tersebut. Ukuran game Dota 2 di Mac OS gue adalah 37.54 GB (kalau untuk mengunduh installer nya kalau ga salah inget sekitar 6-9 GB) per gue menulis ini.
|
||||||
|
|
||||||
|
Untuk Genshin Impact sendiri sekitar 14 GB di desktop (installer nya kalau ga salah inget sekitar 100 MB) per gue menulis ini. Untuk mengunduh total 14 GB dengan kecepatan internet 5 Mbps, secara teori membutuhkan waktu setidaknya 6 jam 40 menit, itupun jika stabil.
|
||||||
|
|
||||||
|
Bagian menarik lainnya?
|
||||||
|
|
||||||
|
Gue dapat bermain Genshin Impact di Mac OS.
|
||||||
|
|
||||||
|
Di macbook. fucking. air.
|
||||||
|
|
||||||
|
Koneksi jaringan di data center umumnya cukup oke, mengingat cloud provider pasti berlangganan paket internet yang bukan untuk penggunaan rumahan. Jadi seharusnya kasus disconnect dari game karena masalah koneksi internet kemungkinannya sangat kecil, sehingga probabilitas mendapatkan commends alih-alih report kemungkinannya menjadi lebih besar.
|
||||||
|
|
||||||
|
Kondisi CPU dan memory di komputer gue?
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/10/CleanShot-2022-10-15-at-23.29.24@2x.png)
|
||||||
|
Lebih kalem dari weekdays ketika buka VSCode + Google Chrome.
|
||||||
|
|
||||||
|
## The Cloud Economy
|
||||||
|
|
||||||
|
Since sudah menjadi DevOps/Site Reliability/Cloud Engineer *(you can call me anything you want~) *argumen gue terkait cloud sedikit bisa dipertimbangkan mengingat i *do* cloud for a living.
|
||||||
|
|
||||||
|
Salah satu yang dijual oleh cloud adalah fleksibilitas. Salah satu contohnya, biar lebih gampang adalah ketika gue ingin main Genshin Impact, gue tidak perlu ribet-ribet download + update + make sure SSD healthy + make sure ada koneksi internet dsb karena itu bukan tanggung jawab gue. Yang gue inginkan hanyalah "bermain genshin impact" dan "upacara" yang harus dilakukan sebelum bisa bermain tersebut hanya berada di lingkungan non-cloud. Dan ketika gue ingin bermain, game nya ada disana dan siap digunakan.
|
||||||
|
|
||||||
|
Selain itu, yang sering dijual dari cloud adalah cost effectiveness.
|
||||||
|
|
||||||
|
In fact, salah satu benefit dari fleksibilitas diatas pun berperan di cost ini, yang biasanya dijual dengan kata "on demand", "pay as you use", blabla blabla.
|
||||||
|
|
||||||
|
Sekarang mari kita coba hitung-hitungan.
|
||||||
|
|
||||||
|
### On prem vs cloud
|
||||||
|
|
||||||
|
Gue ada PC desktop di rumah dengan spek kentang, total biaya yang gue keluarkan kalau gak salah inget sekitar 3 jt untuk mobo; memory, cpu, case, hdd, SSD (fucking SATA), cooling fan, dan sedikit neon rgb biar kek streamer.
|
||||||
|
|
||||||
|
Jika itu PC misal digunakan untuk gaming, total investasi awal yang gue keluarkan adalah 3jt dengan dalih, misal, bisa memenuhi kebutuhan gaming. Karena on prem (gampangnya: infrastruktur/hardware dimiliki sendiri), ada biaya lain yang sudah menjadi rahasia umum, dari maintenance sampai ke upgrade.
|
||||||
|
|
||||||
|
Namun dengan 3.3jt didepan tersebut gue sudah bisa memiliki PC tanpa ada biaya lain yang harus gue bayar tiap sepersekian waktu (misal perbulan) selain biaya internet dan listrik.
|
||||||
|
|
||||||
|
Di cloud, kita tidak membeli apapun. In fact, yang kita lakukan adalah menyewa.
|
||||||
|
|
||||||
|
Misal, layanan DigitalOcean. DigitalOcean adalah perusahaan yang menyediakan infrastruktur sebagai layanan (IaaS). Dengan $7/bulan ($0,01042/jam), lo sudah bisa menggunakan apapun yang komputer dengan spesifikasi 1GiB memory; 1 vCPU dan 25 GiB SSD lakukan. IaaS adalah salah satu bagian dari lingkungan cloud, dan bagian fleksibilitas dalam harga disini berperan. Misal, jika lo hanya menggunakan komputer tersebut selama 10 hari (240 jam), biaya yang diterbitkan hanyalah $2,50 untuk periode tersebut.
|
||||||
|
|
||||||
|
Tidak ada biaya yang harus dibayar diawal. Tidak ada komitmen. Very pay as you use.
|
||||||
|
|
||||||
|
Gue coba samakan DigitalOcean dengan workstation rumah gue.
|
||||||
|
|
||||||
|
Untuk komputer dengan memory 16 GiB dan 4 CPU AMD, setidaknya biayanya adalah $126/bulan ($0,18750/jam). Mungkin ini kurang apple-to-apple karena di cloud umumnya menggunakan virtualisasi sedangkan di workstation rumah gue bare metal. Namun gue rasa dari segi throughput tidak terlalu berbeda signifikan dan gue rasa perbedaannya di mesin virtual tidak bisa melakukan virtualisasi *lagi *aja. Anyway.
|
||||||
|
|
||||||
|
Dengan paket diatas sudah mendapatkan penyimpanan sekitar 50GiB SSD, dan karena SSD gue 120 GB, berarti kurang 70 GiB. Tambahan 100 GiB SSD di DigitalOcean memakan biaya $10/bulan ($0,015/jam), berarti totalnya sekarang adalah $136/bulan ($0,20238/jam).
|
||||||
|
|
||||||
|
Setidaknya gue pakai PC gue perhari sekitar 10 jam untuk kerja dan browsing-browsing. Berarti jika dalam 30 hari gue per-harinya menggunakan 10 jam, biayanya seharusnya adalah $60,71/mo (939,379 IDR/bulan). Total SSD yang gue gunakan sekarang hanyalah 33 GiB, berarti tidak perlu biaya SSD tambahan. Yang berarti, biayanya seharusnya adalah $56,25/mo (870,311 IDR/bulan). Dalam setahun, biaya tersebut menjadi $675 alias 10,443,735 IDR, yang mana 216% lebih besar dari biaya yang gue keluarkan untuk on prem.
|
||||||
|
|
||||||
|
Anggap lifespan PC gue adalah 5 tahun, perbandingan harganya sekarang adalah 3,300,000 IDR/5 tahun (atau sampe rusak) untuk on prem vs 52,218,675 IDR/5 tahun untuk cloud, yang mana 1482% lebih besar.
|
||||||
|
|
||||||
|
Itupun dengan catatan, spesifikasi + biaya + waktu pemakaian tidak berubah selama 5 tahun.
|
||||||
|
|
||||||
|
Gue coba untuk tidak terlalu banyak membahas detail tentang cloud, tapi sepertinya tidak bisa lol.
|
||||||
|
|
||||||
|
Salah satu common pitfalls dalam lingkungan cloud adalah tidak berubahnya mindset. Lingkungan berubah, tapi mindset tidak berubah. Di on prem, kita selalu berpikir general usage. Sedangkan di cloud, umumnya specific usage.
|
||||||
|
|
||||||
|
Misal, dengan workstation yang gue miliki sekarang, gue bisa menggunakan untuk bermain game ringan; streaming film, online meeting, dsb dalam satu waktu ataupun dalam waktu yang berbeda-beda.
|
||||||
|
|
||||||
|
Harga 3,3jt terlihat masuk akal untuk komputer bisa melakukan banyak hal.
|
||||||
|
|
||||||
|
Di lingkungan cloud, umumnya untuk bisa mencapai "cost effective" penggunaannya harus spesifik. Misal, untuk bisa streaming film 4K selama 2 jam, setidaknya gue membutuhkan komputer dengan spek memory 8 GiB + 4 vCPU + internet 50 Mbps. Tujuan lo adalah "streaming film" and that's it. Jika biaya untuk menggunakan komputer dengan spesifikasi tersebut adalah $0,07143/jam, berarti biaya khusus untuk streaming film 4K selama 2 jam tersebut adalah $0,14 alias 2,166 IDR per tulisan ini diterbitkan.
|
||||||
|
|
||||||
|
Jika lo menggunakan untuk kebutuhan lain (misal: live streaming) dengan spek yang sama + durasi yang sama, biayanya masih sama yakni 2,166 IDR, yang berarti total untuk melakukan 2 hal *spesifik *tersebut selama masing-masing 2 jam adalah 4,332 IDR.
|
||||||
|
|
||||||
|
### Gaming in the cloud
|
||||||
|
|
||||||
|
Membership di GeForce NOW (via [GameHub+](https://www.gamehubplus.com/)) adalah 9.99 SGD/bulan alias 107,000 IDR. Lebih murah dari budget kopi gue selama dua hari lol.
|
||||||
|
|
||||||
|
Anggap rata-rata orang bermain game selama 3 jam, maksimal anggap 5 jam. Biaya per-hari nya berarti 21,400. Let's be real. Selama 30 hari, total adalah 720 jam. Besar kemungkinan orang-orang tidak akan menggunakan 720 jam nya hanya untuk bermain game. Anggap kondisi ekstrim dengan mengurangi waktu tidur dan waktu pribadi orang bermain game selama 10 jam (24 jam - (8 jam kerja + 5 jam tidur + 1 jam waktu pribadi), total dalam 30 hari berarti 300 jam. Dengan harga 107,000/bulan, berarti anggap biaya per-hari nya yang dikeluarkan pengguna adalah 10,700/hari.
|
||||||
|
|
||||||
|
Kita tetap membayar 9,99 SGD/bulan, meskipun, mungkin, yang digunakan hanyalah 150-300 jam. Dan gue rasa harganya tetap masuk akal dari sisi pembeli.
|
||||||
|
|
||||||
|
Apakah itu sustainable?
|
||||||
|
|
||||||
|
...karena kita tidak ingin ini menjadi the next Google Stadia, bukan?
|
||||||
|
|
||||||
|
GameHub+ sendiri dioperasikan oleh [StarHub](https://en.wikipedia.org/wiki/StarHub), salah satu perusahaan telekomunikasi terbesar di Singapura. Meskipun ["too big too fail"](https://www.investopedia.com/terms/t/too-big-to-fail.asp) adalah hal yang tidak bisa dihindari, namun gue malas menyelam lebih dalam.
|
||||||
|
|
||||||
|
Namun agar lebih gampang, mari kita buat ilustrasi.
|
||||||
|
|
||||||
|
Ambil contoh Cloudflare, perusahaan publik yang menjual layanan keamanan dan performa di internet. Salah satu produk yang dijual Cloudflare adalah Content Delivery Network (CDN), yang mana membantu bisnis untuk dapat mendistribusikan konten nya di hampir seluruh dunia, sehingga pengguna dapat mengakses konten tersebut lebih cepat terlepas lokasi dari server "asli" dan pengguna itu sendiri.
|
||||||
|
|
||||||
|
Di tahun 2022, agak lucu jika lo ingin membuat bisnis CDN sendiri. Cloudflare memiliki Point Of Presence (PoP) di 275 kota termasuk di China per tulisan ini dibuat, means, sederhanannya, pikirkan berapa biaya yang harus direncanakan setidaknya untuk menjalankan banyak server di 275 kota.
|
||||||
|
|
||||||
|
Biaya untuk menggunakan layanan Cloudflare sendiri? Dimulai dari gratis. Literally gratis. No string attached. Tidak ada "free $50 credits for 12 months" untuk menggunakan Cloudflare. Paket premium nya dimulai dari $20/bulan untuk paket Pro, yang kemungkinan besar tidak dibutuhkan untuk skala UKM dan personal.
|
||||||
|
|
||||||
|
Apakah Cloudflare sustainable?
|
||||||
|
|
||||||
|
Cloudflare adalah perusahaan publik, dan data terkait keuangannya seharusnya dapat diakses publik. Cloudflare sudah beroperasi sekitar 12 tahun sejak tahun 2010, maybe it counts.
|
||||||
|
|
||||||
|
Berbicara tentang harga biasanya tidak lepas dari margin nya. Kembali ke kasus GameHub+, jika memang pengguna akan bermain 300 jam selama 1 bulan, berarti setidaknya harus memiliki sumber daya yang setara dengan 1,070 IDR/jam untuk memenuhi kebutuhan gaming 10 jam/hari tersebut. Di Google Cloud Platform (GCP), untuk menggunakan [Nvidia T4 GPU](https://console.cloud.google.com/marketplace/details/nvidia/nvidia-gaming-windows-server-2016) sendiri saja seharga 3,900,590/bulan, yang kasarnya berarti 5,417 IDR/jam per tulisan ini dibuat. Itu belum termasuk Windows Server license fee, CPU, memory dan persistent disk. Hanya GPU.
|
||||||
|
|
||||||
|
Tapi itu harga untuk konsumen, bukan untuk ritel.
|
||||||
|
|
||||||
|
Dan sepengetahuan gue, jika ingin menjadi "provider", dari segi biaya harusnya lebih terjangkau jika membawa perangkat sendiri dan menyewa fasilitas lain (colo) daripada menyewa keseluruhan fasilitas.
|
||||||
|
|
||||||
|
## Migrating to the cloud?
|
||||||
|
|
||||||
|
Beberapa biaya langganan layanan streaming yang setidaknya gue gunakan pertulisan ini dibuat adalah berikut:
|
||||||
|
|
||||||
|
- Apple Music (musik): 49,000 IDR/bulan
|
||||||
|
- Netflix (film): 186,000 IDR/bulan
|
||||||
|
|
||||||
|
Apple Music, Netflix, dan GeForce NOW sama-sama layanan streaming, namun pembeda kontrasnya adalah biaya untuk Apple Music dan Netflix untuk lisensi konten. Di GeForce NOW, game yang dijalankan adalah game-game yang sudah dibeli oleh pengguna di marketplace seperti Steam dan Epic Games dan beberapa game lain yang memang tidak ditawarkan di marketplace. Yang maksudnya, biaya 9,99 SGD/bulan tersebut murni untuk menyewa computing power (CPU, GPU, memory, dkk) dan tidak untuk konten (game).
|
||||||
|
|
||||||
|
Setidaknya ada 17,000 film yang bisa ditonton di Netflix, dan gue rasa dalam sebulan gue hanya menonton 1-4 film. Ada sekitar 100,000,000 lagu yang bisa diputar di Apple Music, dan gue rasa dalam sebulan gue hanya mendengar beberapa lagu yang tersusun di playlist gue (1-200 lagu).
|
||||||
|
|
||||||
|
And they of course know that.
|
||||||
|
|
||||||
|
Tapi berbeda dengan kebutuhan gaming. Streaming lagu dan film tidak membutuhkan "tenaga khusus" untuk bisa mengakses konten tersebut, namun, masalahnya, cukup sulit untuk dapat mengakses konten tersebut.
|
||||||
|
|
||||||
|
Dalam kebutuhan gaming, untuk akses ke konten tersebut relatif lebih mudah. Vendor game banyak menjualnya di marketplace atau bahkan bisa langsung membeli dari si vendor tersebut jika menyediakan—dan jika ingin.
|
||||||
|
|
||||||
|
Masalahnya, cukup sulit untuk dapat menggunakan konten tersebut, karena terkadang membutuhkan "tenaga khusus". Seperti, misalnya Genshin Impact, setidaknya butuh CPU Intel Core i7; memory 16 GB, GPU dengan memory 6 GB, SSD 30 GB, sistem operasi Windows, dsb.
|
||||||
|
|
||||||
|
Jika spek yang dimiliki komputer lo tidak termasuk dengan spek yang direkomendasikan diatas, good luck bisa bermain Genshin Impact tanpa mengumpat.
|
||||||
|
|
||||||
|
Anyway, anggap gue ingin setup gaming gear hari ini.
|
||||||
|
|
||||||
|
Dengan kata kunci "pc gaming" di Tokopedia, untuk komputer dengan spek:
|
||||||
|
|
||||||
|
- CPU: Intel Core i5-12400F 2.5GHz Up To 4.4GHz
|
||||||
|
- CPU Cooler: Intel Stock Cooler
|
||||||
|
- Motherboard: Gigabyte H610M H DDR4
|
||||||
|
- Memory: 16GB Team DDR4 PC25600
|
||||||
|
- Storage SSD: 512GB - SSD M.2 NVMe PCle Gen3 x4
|
||||||
|
- GPU: Nvidia GTX 1660 (6 GB)
|
||||||
|
- PSU: Seasonic S12III-500 500W - 80+ Bronze Certified
|
||||||
|
- Case: Aerocool Trinity Mini
|
||||||
|
- OS: Windows 10
|
||||||
|
|
||||||
|
Memakan biaya 13,819,000 IDR. The question is apakah gue harus peduli dengan 4 poin diatas untuk bermain game? Di lingkungan on prem: of course.
|
||||||
|
|
||||||
|
Sama seperti ketika ingin menjalankan aplikasi yang misal membutuhkan Node.js runtime. Apa yang lo butuhkan untuk menjalankan aplikasi tersebut? Di lingkungan on prem, lo butuh:
|
||||||
|
|
||||||
|
- Server dengan sistem operasi mungkin... Ubuntu? Atau Debian?
|
||||||
|
- Memory dengan ukuran 4 GiB lah setidaknya
|
||||||
|
- CPU dengan... 2 core, minimal?
|
||||||
|
- CPU dengan arsitektur x86 biasanya
|
||||||
|
- Maintain kernel, maintain packages, swap blablabla, setup syslog, docker docker blablabla
|
||||||
|
- Ah, download Node.js runtime! Atau pakai docker aja kali ye?
|
||||||
|
- Setup systemd? Atau, sekali lagi, biar docker aja yang urus scheduling?
|
||||||
|
|
||||||
|
Yang padahal yang dibutuhkan untuk menjalankan aplikasi tersebut secara teknis hanyalah Node.js runtime. Di lingkungan cloud, tidak peduli apakah mobo nya Gigabyte atau PSU nya Seasonic, versi kernel 6.0, base nya Debian atau Ubuntu, dll. If it's scalable, then it is.
|
||||||
|
|
||||||
|
Kembali ke topik, bagaimana bila ingin mengganti slot memory ke DDR5? Benar, ganti mobo. Yang kemungkinan besar akan berpengaruh ke komponen lain juga.
|
||||||
|
|
||||||
|
Itu tidak fleksibel, jika kata scalable disini tidak relevan. Dan sekali lagi, fleksibilitas adalah yang ditawarkan oleh cloud. Cloud menawarkan "elastisitas" (the buzzword begins) dalam memenuhi kebutuhan lo, seperti, jika sebelumnya game yang lo mainkan di cloud skala nya adalah Team Fortress 2 lalu berpindah ke skala Genshin Impact, tidak banyak yang lo harus lakukan jika memang ada yang harus dilakukan seperti upgrade koneksi internet.
|
||||||
|
|
||||||
|
Jika si cloud provider menjanjikan bisa memainkan game X, berarti bisa memainkan game X.
|
||||||
|
|
||||||
|
Ada satu pembahasan yang terlewat dari lingkungan cloud: serverless.
|
||||||
|
|
||||||
|
Buzzword ini gampangnya tentang "apapun yang berkaitan dengan server tapi ga perlu lo peduliin". Di platform serverless, tidak jarang menawarkan "on demand" untuk mendukung dari apa yang dijanjikan dalam efektivitas harga. Misal, aplikasi Node.js lo memiliki fitur login. Fitur tersebut membutuhkan setidaknya 10ms CPU time untuk melayani login dari pengguna.
|
||||||
|
|
||||||
|
Gampangnya, salah satu yang lo bayar tersebut adalah 10ms dari CPU time yang digunakan tersebut. Misal dalam 30 hari ada 10jt transaksi login, berarti total CPU time yang lo gunakan adalah 100,000,000 ms (100,000 seconds).
|
||||||
|
|
||||||
|
Jika harga CPU time per-detik nya adalah $0,00000666666, total biaya yang harus lo bayar untuk 10jt login dalam 30 hari tersebut adalah $0,67, alias 10,500 IDR ($0,00000666666 * 100000) per tulisan ini dibuat.
|
||||||
|
|
||||||
|
Oke balik ke topik, karena on demand tersebut, dari segi cloud provider akan berkompetisi salah satunya di "startup/boot" time. Dalam kasus login, ini adalah waktu antara permintaan fitur login diterima sampai mulai dieksekusi. Untuk kasus cloud gaming, berarti waktu antara "permintaan untuk bermain game X sampai ke dimulainya game X tersebut bisa dijalankan". Di GeForce Now via GameHub+, berikut yang gue dapatkan ketika mencoba bermain Dota 2 antara jam 22.00-22.45 WIB jika tidak salah ingat:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/10/CleanShot-2022-10-15-at-23.41.48@2x.png)
|
||||||
|
Disitu gue harus mengantri karena ada 35 pengguna lain juga yang ingin memainkan game serupa di waktu yang sama. Kurang lebih gue menunggu sekitar 13 menit jika tidak salah ingat. Untuk game lain seperti Factorio dan Team Fortress 2, tidak ada waktu menunggu, karena, mungkin, ketersediaan si "rig" untuk bisa menjalankan game tersebut banyak yang siap digunakan.
|
||||||
|
|
||||||
|
Dan disini tantangannya, dari segi teknis maupun bisnis (been there done that). Jika ada competitor GameHub+ yang menawarkan "instant access, kalau ada waiting list dijamin cuma 5 detik atau refund" dengan harga yang hanya berbeda sedikit — siapa yang tidak tergoda?
|
||||||
|
|
||||||
|
Karena jika ada waiting list seperti diatas, jika setiap ingin main Dota 2 gue harus *selalu *menunggu 13 menit, 13 menit, 6,5 jam gue dalam sebulan habis untuk menunggu, which is... another story, I guess?
|
||||||
|
|
||||||
|
## Penutup
|
||||||
|
|
||||||
|
Di Indonesia sendiri, pemain di pasar infrastruktur internet gue rasa masih jarang diminati dan ekosistem nya relatif lambat untuk bertumbuh dan berkembang. Silahkan hitung seberapa banyak layanan yang menyediakan CDN dari Indonesia, jika ada. Atau hitung seberapa banyak layanan yang menyediakan "Web Hosting" yang stuck di tahun 2010—ketika Common Gateway Interface (CGI) cukup populer di Indonesia—sampai hari ini.
|
||||||
|
|
||||||
|
Beberapa sudah menawarkan IaaS (cloud thing) seperti VPS—which is good—but, come on, 2014 adalah 8 tahun yang lalu.
|
||||||
|
|
||||||
|
Anyway, personally gue tertarik berlangganan cloud gaming thing ini mengingat gue occasional gamer dan bermain game for fun. Kadang main Dota 2 jika merasa hidup anehnya sedang mulus-mulus aja tanpa umpatan ataupun stress.
|
||||||
|
|
||||||
|
Jika merujuk ke tangkapan layar Genshin Impact gue sebelumnya, disitu terlihat 84ms yang gue rasa adalah latensi antara "rig" tempat gue bermain dengan server genshin impact. Metriks yang lebih pentingnya justru bukan disitu, melainkan di latensi antara klien (komputer gue) dengan rig tempat si genshin impact tersebut dijalankan, yang somehow gue tidak menemukan opsi untuk melihatnya.
|
||||||
|
|
||||||
|
Di internet, every millisecond counts. Dari [tulisan](https://glinden.blogspot.com/2006/11/marissa-mayer-at-web-20.html) yang diterbitkan pada tahun 2006 oleh Ex-Amazon ini, di Amazon, latensi 100ms menyebabkan penurunan traffic sebesar 20% dan pastinya berdampak ke revenue nya Amazon. Jika traffic Amazon pada tahun 2006 hariannya adalah 10jt, latensi 100ms tersebut gampangnya membuat kehilangan 2,000,000 pelanggan yang potensial.
|
||||||
|
|
||||||
|
Cloud gaming gue rasa cukup menjanjikan, sebagaimana layanan streaming lain seperti Apple Music, Spotify, Netflix, Disney+, dkk yang sudah ada dan masih survive sampai hari ini.
|
||||||
|
|
||||||
|
Terlebih, solusi yang ditawarkan oleh layanan cloud gaming cukup nyata dan tidak sedikit masalah yang ada dimiliki oleh pengguna/gamers: GPU, CPU, SSD, Memory, Internet, dll — yang performant.
|
||||||
|
|
||||||
|
Atau setidaknya gue memiliki masalah tersebut.
|
||||||
|
|
||||||
|
Tantangannya adalah bandwidth internet, dan ini hampir dimiliki oleh setiap pengguna yang berlangganan layanan streaming. Nonton film di Netflix gue stuck di kualitas 720p (HD) meskipun berlangganan paket Premium yang menawarkan kualitas sampai Full HD (1080p) dan Ultra HD (4K). Rekomendasi [dari Netflix](https://help.netflix.com/en/node/306) untuk paket internet 5Mbps (which is mine) adalah 720p - 1080p, dan realitanya tidak ada yang ingin menonton film 1080p namun setiap sekian detik buffering.
|
||||||
|
|
||||||
|
Di cloud gaming, selain harus dapat menampilkan tampilan yang nyaman dipandang, juga harus mengatur interaksi dari pengguna dengan baik. Siapa yang menginginkan karakter meninggal karena tidak bisa berjalan hanya karena paket terkait "input" dari pengguna tidak diterima oleh server cloud provider?
|
||||||
|
|
||||||
|
Selain itu, koneksi internet menjadi kewajiban. Gue tidak bisa bermain Factorio ketika sedang di kereta misalnya, meskipun mode yang ingin gue mainkan adalah offline/luring.
|
||||||
|
|
||||||
|
Untuk multiplayer games, simply, cloud gaming sangat membantu.
|
||||||
|
|
||||||
|
Khususnya untuk yang memiliki pc potato seperti gue, tapi banyak mau.
|
||||||
|
|
||||||
|
Mungkin next nya gue mau mencoba bermain Genshin Impact cukup lama meskipun I have no idea apa yang harus gue lakukan di game tersebut selain menganggap Genshin Impact adalah versi wibu nya The Legend of Zelda, dan dengan gaca.
|
||||||
|
|
||||||
|
Dan setelah payday mungkin mencoba game lain yang lebih berati seperti GTA V atau mungkin... 7 sins? Tanpa perlu menunggu game tersebut selesai terunduh di komputer gue, tanpa perlu memiliki lisensi Windows, tanpa perlu menghabiskan ruang di SSD gue.
|
||||||
|
|
||||||
|
Just click and play, and it (most likely) just works.
|
||||||
|
|
||||||
|
Welcome to the cloud future.
|
118
content/comfort-fucking-zone.md
Normal file
118
content/comfort-fucking-zone.md
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
---
|
||||||
|
title: Comfort fucking zone
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: comfort-fucking-zone
|
||||||
|
date: 2022-05-31T11:47:45.000Z
|
||||||
|
date_updated: 2022-05-31T11:47:45.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Setiap orang gue rasa memiliki pengertiannya sendiri dalam mengartikan arti zona nyaman. Untuk gue—berdasarkan pengalaman—setidaknya ada 3 bagian yang berkaitan dengan zona nyaman ini: lokasi, profesi, dan kualitas diri.
|
||||||
|
|
||||||
|
Tidak jarang kita mendengar kata "keluar dari zona nyaman", yang padahal tinggal di zona nyaman tersebut terasa... nyaman. Terlebih, tidak jarang untuk bisa berada di zona tersebut harus melewati banyak rintangan yang mungkin tidak mudah. Jadi, kenapa harus keluar? Seperti, anggap lo sudah bersusah payah untuk bisa berada di surga. Lalu pada suatu waktu ada seseorang memberikan ceramah motivasi yang berujar "keluarlah dari zona nyaman kalian!" dan lalu mungkin lo memakan buah khuldi dan dilemparkan ke dunia lagi sebagai batu loncatan pertama untuk bisa keluar dari zona nyaman tersebut. You may win but at what cost?
|
||||||
|
|
||||||
|
Anyways, dari 3 bagian tersebut, yang menjadi parameter utama gue adalah titik jenuh. Titik jenuh sederhananya mungkin seperti sebuah kondisi dimana sudah tidak lagi terjadi pertumbuhan atau perkembangan. Atau mungkin singkatnya adalah sebuah keadaan yang terhenti. Alias stagnan. Selain itu, ada faktor eksternal lain yang mungkin didorong oleh pihak ketiga.
|
||||||
|
|
||||||
|
Ada benang tipis yang menjadi pembeda antara stagnan dan stabil, yang mungkin cukup fatal jika salah mengerti, meskipun maknanya gue rasa cukup mirip. Contoh paling gampang gue rasa jika berkaitan dengan uang. Misal, lo punya uang 5,000,000 tunai. Uang 5jt tersebut, selama 5 tahun akan tetap menjadi 5jt. Tidak naik, tapi tidak juga turun. Pergerakan terhenti ketika lo menyimpan uang tunai tersebut di sebuah brankas. Itu contoh stagnan.
|
||||||
|
|
||||||
|
Beda dengan, misal, uang 5jt tersebut lo simpan dalam tabungan.
|
||||||
|
|
||||||
|
Dalam 5 tahun, dengan interest 5% p.a, seharusnya menjadi 6.250.000. Mungkin 6,250,000 di tahun 2027 tersebut senilai dengan apa yang bisa dibeli seharga 5,000,000 pada tahun 2022 atau mungkin di tahun 2025 somehow malah hanya senilai 4,500,000 for some reason. Dan yang lo tahu, lo menyimpan uang 5jt di tabungan, terlepas bagaimana pergerakan nilai yang ada di tabungan tersebut, lo tahu dia pasti bergerak, dan seharusnya terus bertambah sebagaimana yang dijanjikan.
|
||||||
|
|
||||||
|
Kembali ke topik, yang bisa menentukan "stabil" dan "stagnasi" yang ada pada diri kita pada akhirnya hanyalah diri kita sendiri. Mungkin lo berada di kondisi stabil setelah berbagai naik-turun yang terjadi, atau mungkin lo berada di kondisi stabil dan ingin mendapatkan tantangan baru lagi. I don't know. Terlepas bagaimana kondisi lo, here's my story.
|
||||||
|
|
||||||
|
## Lokasi
|
||||||
|
|
||||||
|
Perpindahan pertama kali yang gue rasakan adalah ketika memasuki Sekolah Menengah Pertama. Pertama kalinya gue terpisah dengan keluarga dan orang tua, meskipun jaraknya hanya Pandeglang-Serang, yang dilanjutkan sampai Sekolah Menengah Atas.
|
||||||
|
|
||||||
|
Selama 6 tahun gue dituntut untuk hidup jauh dari orang tua. Aktivitas sehari-hari pun berubah 180 derajat setelah gue menginjakkan kaki pertama kali di sebuah tempat bernama pesantren. Di hari pertama masuk pesantren, gue diantar keluarga lengkap. Makan makanan favorit gue, mengobrol dengan adik-adik gue, dan bermain internet di HP sampai puas. Karena ketika waktu sudah mewajibkan mereka untuk kembali ke rumah, kehidupan akan berubah, dan tidak akan pernah sama seperti pada saat itu.
|
||||||
|
|
||||||
|
Tidak cukup 6 tahun di Pandeglang, setelah SMA gue pergi ke Bandung untuk melanjutkan studi. Orang tua gue tidak mengizinkan untuk mengambil perkuliahan di daerah Serang karena sebuah alasan, dan nama tempat yang mereka rekomendasikan adalah Bandung, mungkin karena semua keluarga besar dari bokap dan nyokap gue berkuliah disana. Ketika mereka kembali ke Serang setelah mengantar gue, kondisi berbeda ketika pertama kali gue berpisah dengan mereka untuk alasan studi juga. Tidak ada rasa kehilangan yang mendalam, tidak ada rasa kesepian yang akan menghantui, dan yang paling penting, sudah tidak ada lagi tangisan. Gue sudah siap pergi dan ditinggal kemanapun, selagi demi kebaikan mereka dan khususnya diri gue.
|
||||||
|
|
||||||
|
Sudah sekitar 7 tahun di Bandung, dan di tahun ketujuh ini gue mulai berpikiran bahwa sudah tidak lagi merasakan perkembangan. Tidak ada teman baru, tidak ada pekerjaan baru, tidak ada pemandangan baru. Perubahan yang gue rasakan hanyalah slip gaji dan sisanya hampir sama seperti di tahun 2019. Pada tahun 2018 gue sempat pindah ke daerah Gegerkalong untuk sekaligus mencari suasana baru, dan karena sebuah alasan pada tahun 2019 gue kembali lagi ke daerah Coblong sampai tahun 2022. Tentu stagnansi yang terjadi pada diri gue kesalahannya pada diri gue sendiri, tapi pada akhirnya, lingkungan selalu membentuk diri kita. Itulah alasan mengapa orang-orang top tier university, ex-silicon valley, dan siapapun itu, yang membanggakan darimana dirinya berasal, karena lingkungan akan membentuk diri mereka. Orang bijak pernah berkata *"pelaut yang handal tidak lahir dari laut yang tenang" *because it is.
|
||||||
|
|
||||||
|
Pertengahan tahun 2022 gue memutuskan untuk pindah ke Jakarta. Gue tahu kalau gue harus mengurus perpindahan lagi, beradaptasi lagi, mengingat jalan dan nama-nama tempat lagi, dsb. Gue tahu kalau nanti di hari pertama ketika sudah pindah ke Jakarta, gue akan merasakan kesepian; merasakan perasaan aneh karena tidak terbiasa, dan mempertimbangkan untuk kembali ke tempat asal karena perasaan aneh tersebut. Tapi gue tahu itu hanyalah masa transisi.
|
||||||
|
|
||||||
|
Perasaan yang sama ketika pertama kali masuk pesantren, ketika pertama kali hidup di Bandung, ketika pertama kali berkarir, ketika pertama kali pindah kos.
|
||||||
|
|
||||||
|
Dan gue tahu, perasaan itu tidak akan terasa selamanya. Pada akhirnya gue pun akan terbiasa, sampai gue merasa sudah tidak merasakan perkembangan lagi di kota ini. Kota Jakarta gue pilih karena gue tidak ingin kembali ke Serang sedangkan tidak ingin terus tetap di Bandung. Bukan berarti gue tidak ingin kembali, hanya tentang waktu. Jakarta menjadi pilihan gue karena sebagian besar tujuan mereka pergi ke kota ini adalah untuk mengadu nasib. Sebagai ibukota negara, Jakarta (setidaknya sampai hari ini) memiliki infrastruktur yang cukup kaya daripada kota-kota lain, yang sekaligus menjadi alasan untuk menarik orang-orang dari berbagai tempat untuk hidup di Jakarta.
|
||||||
|
|
||||||
|
Jika merujuk ke industri tempat gue berkarir, komunitas di Jakarta lebih banyak daripada di daerah lain. Tidak sulit untuk menemukan orang yang memiliki hobi ataupun memiliki pekerjaan yang sama selagi mengetahui tempat mereka berkumpul, dan disini tempat tersebut relatif lebih banyak dari daerah lain.
|
||||||
|
|
||||||
|
Bagian yang ingin gue pelajari dari kota ini adalah tentang gaya dan cara hidup sebagaimana orang-orang yang tinggal di ibukota negara. Dari cara dan gaya bersosial, bersenang-senang, bertahan hidup, apapun. Jika suatu saat gue harus hidup misal di ibukota negara lain, setidaknya gue sudah memiliki sedikit gambaran meskipun pastinya sangat berbeda. Dan yang membedakan suatu daerah dengan daerah lain gue rasa adalah masyarakatnya, gaya dan cara mereka hidup. Tidak jarang juga kita mendengar "liat tuh pasti orang Jakarta", "orang baduy nih pasti", dan semacamnya dari melihat gaya dan cara mereka berperilaku.
|
||||||
|
|
||||||
|
Entah sampai kapan gue berada di kota ini, yang pasti tidak akan selamanya.
|
||||||
|
|
||||||
|
## Profesi
|
||||||
|
|
||||||
|
Pada tahun 2015, gue memutuskan untuk fokus ke dunia Frontend Development. Sebelumnya gue adalah seorang Fullstack Developer, dan tidak jarang mengambil pekerjaan "sysadmin" untuk membantu klien memasang LAMPP ataupun LEMP.
|
||||||
|
|
||||||
|
Salah satu pertimbangan terbesar gue adalah ingin menjadi spesialis. Gue rasa di usia muda lebih mudah berkarya sebagai spesialis daripada generalis.
|
||||||
|
|
||||||
|
Tidak sedikit dunia yang gue tinggalkan. Dari Ruby dan Ruby On Rails (of course), PHP, Laravel, Codeigniter, MySQL, Capistrano, RSpec, dsb. Dan memfokuskan diri ke JavaScript, JavaScript, dan JavaScript. Tidak lupa untuk menguasai juga beberapa tools populer di ekosistem tersebut, untuk alasan ehm pasar dan spesialisasi.
|
||||||
|
|
||||||
|
6 tahun keep in track dengan frontend development, bagian yang paling menariknya adalah di komunitas. Anggota di komunitas ini memiliki berbagai masalah unik dan menantang yang berkaitan dengan frontend development, dan membagikannya, sambil mencari solusinya, di berbagai skala. Komunitas ini terasa sangat hidup dan vibrant sampai teknologi frontend development sudah berada di titik jenuh seperti sekarang berkat infrastruktur yang semakin kaya.
|
||||||
|
|
||||||
|
Namun gue pribadi sudah tidak melihat masa depan sebagai Frontend Developer lagi, meskipun title gue adalah seorang Software Engineer. Akan selalu ada tantangan dalam frontend development, akan selalu ada inovasi, dan akan selalu ada masalah baru yang menarik untuk dimiliki.
|
||||||
|
|
||||||
|
Gue hanya tidak melihat ada diri gue disana.
|
||||||
|
|
||||||
|
Dulu gue pernah membayangkan bagaimana rasanya membuat Developer Experience di frontend development dalam tim gue terasa menyenangkan, dulu gue pernah membayangkan bagaimana kompleksnya mengembangkan sebuah aplikasi yang berurusan dengan data yang kompleks.
|
||||||
|
|
||||||
|
Di tahun ini gue sudah tidak membayangkan apa-apa lagi. Gue hanya melihat bahwa tanggal 25 nanti gajian dan setiap sprint akan mengembangkan fitur baru dan fix bug. Hanya itu. Tidak ada lagi energi untuk R&D dalam frontend development sebagaimana dulu, tidak ada lagi energi untuk membagikan "apa yang gue pelajari" dari frontend development sebagaimana biasanya, dan tidak ada lagi energi untuk berkomunitas dalam dunia frontend development.
|
||||||
|
|
||||||
|
Energinya sudah habis, dan nampaknya sudah tidak bisa lagi diisi oleh gue.
|
||||||
|
|
||||||
|
Bulan kemarin gue mengajukan perpindahan posisi. Gue jabarkan apa tanggung jawab gue dan dampaknya ke perusahaan, value yang bisa gue berikan kepada perusahaan (vice versa), serta apa hal baru yang bisa gue pelajari dari posisi tersebut.
|
||||||
|
|
||||||
|
Dan tentu saja alasan mengapa gue "qualified" dengan posisi tersebut.
|
||||||
|
|
||||||
|
They're very positive, terlebih gue salah satu person in charge untuk hal-hal yang berkaitan dengan itu.
|
||||||
|
|
||||||
|
Pertimbangan dari gue cukup berat. Pertama, gue reset pengalaman kerja gue. Kedua, posisi ini relatif baru dan segar. Daaan relatif langka khususnya di Indonesia. Ketiga, gue belum ada kenalan yang bekerja di posisi ini juga. Dan terakhir, gue harus meninggalkan frontend development.
|
||||||
|
|
||||||
|
Membuat aplikasi adalah sesuatu yang menyenangkan. Bayangkan jika lo mengembangkan aplikasi X dan kerabat ataupun orang tua lo menggunakan aplikasi tersebut, terus lo bisa bilang "itu pencarian aku yang bikin loh" dengan bangga, karena bisa membantu mereka menemukan apa yang mereka cari.
|
||||||
|
|
||||||
|
Tapi yang paling gue sayangkan adalah gue tidak bisa bertindak sebagai "spesialis" lagi di frontend development. Of course gue mungkin bisa tahu tentang apa-apa yang berkaitan dengan frontend development, tapi spesialis lah yang pastinya paling tahu.
|
||||||
|
|
||||||
|
Gue sedikit melihat masa depan dengan posisi baru gue nanti, meskipun masa depan tersebut relatif kurang realistis. Tapi gue cukup optimis, karena hanya usaha dan doa yang bisa mewujudkan harapan.
|
||||||
|
|
||||||
|
## Pengembangan diri
|
||||||
|
|
||||||
|
Ini yang paling gue males.
|
||||||
|
|
||||||
|
Gue selalu membenci diri gue di masa lalu, dari tahun ke tahun.
|
||||||
|
|
||||||
|
...yang seharusnya justru menjadi sesuatu yang baik.
|
||||||
|
|
||||||
|
Dulu, hubungan gue dan keluarga cukup renggang. Pada suatu waktu, gue harus memperbaikinya karena yang membuat jarak tersebut adalah diri gue. Gue menyesal pernah membuat jarak tersebut, tapi setidaknya gue mendapatkan sebuah pelajaran.
|
||||||
|
|
||||||
|
Dulu, gue cukup egois. Sangat egois. Mungkin tidak masalah jika konteks hanya memikirkan diri sendiri ini untuk sesuatu yang tidak dilakukan bersama, namun beda cerita jika sebaliknya. Sebuah hubungan seharusnya tentang dua orang. Dan gue rasa bukan tentang always me, bukan tentang always you, bukan hanya tentang 'tolong ngertiin aku'. Kesalahan gue yang paling gue sesalkan adalah hubungan yang dominan. Gue selalu meminta untuk dingertiin bahkan tanpa harus membicarakannya. Gue selalu meminta partner gue dulu untuk mengikuti apa yang gue inginkan. Dan yang paling gue inget, ada dan tidak adanya gue menurut partner gue sama saja. Entah apakah gue masih menjadi orang yang seperti itu atau tidak, setidaknya gue sudah menyadari kesalahan-kesalahan tersebut.
|
||||||
|
|
||||||
|
Dan gue yakin harusnya gue sudah tidak menjadi seperti itu lagi (in case anyone is asking).
|
||||||
|
|
||||||
|
Dulu, gue cukup anti sosial. Lebih sering menutup diri dan menghindari berbaur. Terlalu meyakini "if they will come, they will come" hanya karena gue malas menghampiri. Terlalu membatasi lingkup sosial gue karena malas memelihara pertemanan.
|
||||||
|
|
||||||
|
Masih banyak hal-hal yang tidak gue sukai dengan diri gue di masa lalu, dan gue yakin itu bisa diubah jika gue memang ingin merubahnya, yang pada akhirnya harus gue lakukan juga selagi baik untuk diri gue.
|
||||||
|
|
||||||
|
Merubah sifat bukanlah hal yang mudah. Gue bisa saja bertahan dengan sifat egois gue dan menggunakan "[gue mah gitu orangnya](https://www.youtube.com/watch?v=ltR7NVSvirI)" sebagai tameng.
|
||||||
|
|
||||||
|
Tapi gue merasa itu tidak baik untuk orang lain, dan khususnya untuk diri gue.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Pertimbangan utama gue—terlepas dari titik jenuh tersebut—ketika memilih untuk "meninggalkan zona nyaman" ini adalah "Is it worth it?".
|
||||||
|
|
||||||
|
Dan jika yang gue bandingkan adalah sesuatu yang sudah terjadi dengan sesuatu yang belum terjadi, jawaban gue akan selalu "yes" selagi itu masuk akal.
|
||||||
|
|
||||||
|
Gue tidak terlalu bermasalah jika hasil yang ada tidak sesuai dengan harapan, yang penting gue sudah mencobanya, mengetahuinya, dan yang paling penting sudah berusaha semaksimal mungkin.
|
||||||
|
|
||||||
|
Di umur yang masih relatif muda seperti sekarang gue rasa gue belum cocok dengan kondisi yang nyaman. Gue masih ingin melakukan hal-hal baru, hal-hal yang sebelumnya belum ada waktu ataupun kemauan ataupun keberanian untuk dilakukan, hal-hal yang menyertakan emosi dari marah; bahagia, sedih, menyesalkan, hal-hal yang tidak akan bisa gue lakukan dikehidupan selanjutnya selagi masih dibatas norma, hal-hal yang bisa menemukan jati diri gue, hal-hal yang bisa memberikan gue pelajaran yang tidak gue dapatkan dari hasil pembelajaran orang lain.
|
||||||
|
|
||||||
|
Tentu saja rasa capek pasti ada, tapi setidaknya gue sudah tahu apa yang harus gue lakukan ketika rasa tersebut muncul.
|
||||||
|
|
||||||
|
Gue orang yang relatif sulit untuk bosan, dan jika rasa itu sudah muncul, berarti gue sudah benar-benar merasakannya.
|
||||||
|
|
||||||
|
Keluar dari zona nyaman bagi gue seperti terus bermain game di level tertentu, sampai gue memutuskan kapan gue harus beranjak ke level selanjutnya. Bukan hanya karena sudah bosan, ataupun sudah dan hafal. Gue hanya merasa bahwa gue pantas untuk merasakan level selanjutnya, dan gue tahu pasti level tersebut akan terasa berbeda, dan gue pantas mendapatkan perubahan.
|
||||||
|
|
||||||
|
Selamat Hari Pancasila.
|
242
content/data-pribadi-dan-ironi.md
Normal file
242
content/data-pribadi-dan-ironi.md
Normal file
@ -0,0 +1,242 @@
|
|||||||
|
---
|
||||||
|
title: Data pribadi dan ironi
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: data-pribadi-dan-ironi
|
||||||
|
date: 2023-05-22T15:05:44.000Z
|
||||||
|
date_updated: 2023-05-22T15:05:44.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Akhir-akhir ini gue sedang rajin membuka Twitter semenjak Twitter sekarang tidak bisa lagi melakukan pencarian jika tidak ter-autentikasi. Untung gue masih punya kredensial akun [ormas](https://twitter.com/evilfactorylabs) buat numpang login. Meskipun jumlah *following *akun ormas relatif sedikit, tapi tiap hari ada aja warga yang mengomentari apapun yang muncul di lini masa thanks to fitur Quote Retweet nya Twiitter.
|
||||||
|
|
||||||
|
Berita yang cukup panas sekitar seminggu lalu per tulisan ini diterbitkan adalah tentang dicurinya data sebesar 1,5 TB yang diantaranya berisi 15jt data pengguna dan data sensitif lainnya. Korban dari pencurian tersebut adalah Bank BSI yang pada minggu lalu sempat terjadi *down *karena terkena serangan *ransomware *yang mungkin berkaitan.
|
||||||
|
|
||||||
|
Isu tentang data pribadi adalah topik favorit warga Twitter. Setiap akun akan berkoar tentang bagaimana tidak becusnya sebuah instansi dalam menjaga keamanan data penggunanya. Namun di lain sisi, ini kabar baik. Pengguna Internet khususnya di Indonesia setidaknya sudah cukup peduli tentang privasi khususnya yang berkaitan dengan data pribadi.
|
||||||
|
|
||||||
|
## Serangan Lxxxbit
|
||||||
|
|
||||||
|
Berdasarkan pengakuan dari Lxxxbit, mereka menyerang sistem Bank BSI pada 8 Mei 2023, melakukan aksi yang membuat sistem mati, mencuri apapun yang bisa dicuri, dan sebagaimana ransomware pada umumnya: "mengunci" berkas yang ada dan hanya bisa dibuka oleh program khusus.
|
||||||
|
|
||||||
|
Lxxxbit memberikan tenggat waktu sampai 15 Mei 2023 kepada korban (Bank BSI) lalu melakukan "negosiasi" senilai $20M. Karena negosiasi gagal (korban hanya ingin menebus senilai $100,000), Lxxxbit akhirnya merilis data tersebut ke publik (internet) sebagaimana perjanjian dari negosiasi.
|
||||||
|
|
||||||
|
Apa bagian menariknya? Ini adalah pencurian & pemerasan.
|
||||||
|
|
||||||
|
Lxxxbit menyandera "data yang dicuri" dan meminta tebusan, jika tidak ditebus, maka hal yang dianggap tidak diinginkan akan terjadi.
|
||||||
|
|
||||||
|
Apa bagian menariknya lagi? Warga Twitter marah dan menyayangkan tindakan yang diambil oleh pihak korban. Bahkan beberapa ada yang memberi konsultasi gratis tentang bagaimana keamanan pada sebuah sistem seharusnya dirancang.
|
||||||
|
|
||||||
|
Gue pribadi sudah bosan mendengar berita tentang "kecolongan data" ini, dan puncaknya, ketika salah satu e-commerce terbesar di Indonesia menjadi korban. Bukan berarti gue tidak peduli dengan isu ini, of course gue peduli. Dan bukan tanpa alasan gue "self-host everything" karena gue lebih percaya diri sendiri dalam menjaga sistem keamanan daripada orang lain lebih dari apapun.
|
||||||
|
|
||||||
|
Awal-awal isu terkait kecolongan data menjadi populer di Indonesia gue rasa semenjak situs [Have I Been Pwned](https://haveibeenpwned.com/) semakin populer. Situs tersebut berguna untuk melakukan pemeriksaan apakah alamat email/kata sandi yang pengguna internet gunakan berada di basis data mereka atau tidak. Dan data yang mereka kumpulkan diambil dari data bocor yang diterbitkan ke publik (internet) oleh si pelaku pencurian.
|
||||||
|
|
||||||
|
Tidak jarang juga dikaitkan dengan situs lain (forum) yang secara teknis menjual apapun yang bisa dijual.
|
||||||
|
|
||||||
|
Mari kita berbicara tentang realita.
|
||||||
|
|
||||||
|
Pasar ada untuk mempertemukan penjual dan pembeli. Dalam kasus data pribadi, pembelinya sebenarnya itu-itu lagi: spammer, jaringan pengiklan, data broker, dsb.
|
||||||
|
|
||||||
|
Target pasar dari penjualan data pribadi bukanlah individu yang kesehariannya menjelajahi internet saat ada waktu. Ini adalah bisnis B2B, dan sebuah bisnis serius. Berbeda dengan zaman awal-awal internet yang data paling sensitif seperti nama pengguna/alamat email dan kata sandi menjadi bagian dari transaksi, hari ini, sebagian besar sistem seharusnya sudah merancang sistem autentikasi menjadi lebih aman lagi.
|
||||||
|
|
||||||
|
Data alamat email hanya berguna untuk mencocokkan pengguna lain yang menggunakan alamat email berbeda, yang seharusnya hanya berguna untuk bisnis yang menawarkan layanan untuk mencegah fraud.
|
||||||
|
|
||||||
|
Mari kita bahas tentang data pribadi di bagian lain dan kembali ke topik Lxxxbit.
|
||||||
|
|
||||||
|
Dalam dunia pemerasan, kita akan menggunakan sesuatu yang dianggap berharga sebagai penukaran. Ingat bercandaan harta-nyawa? Atau ancaman kakak kelas saat lo ketahuan merokok di loteng? Atau mungkin ancaman mantan lo yang akan menyebar foto lo walau no face no case?
|
||||||
|
|
||||||
|
Dalam kasus diatas, sesuatu yang dianggap berharga itu adalah harga diri lo. Harga diri lo dijadikan sandera untuk sesuatu yang harus lo tebus. Dan tahu bagian menariknya? Sekali lo menebus, maka penyanderaan akan terus berulang setiap butuh pertukaran. Lo sudah memberikan titik lemah lo yang tidak bisa ditutup sampai waktu yang menjawabnya.
|
||||||
|
|
||||||
|
And here's the thing: data pribadi adalah sesuatu yang penting di Indonesia dan pastinya dibelahan dunia manapun juga. Namun minat "keresahan terhadap data pribadi" relatif tinggi untuk warga Twitter di Indonesia, dan data ini diambil dari hasil riset "trust me bro".
|
||||||
|
|
||||||
|
Anyway, kasus data pribadi dianggap berharga karena dianggap memiliki nilai.
|
||||||
|
|
||||||
|
Karena hal itu, itu bisa dijadikan sebagai pertukaran yang menjanjikan untuk mendapatkan tebusan: bayar atau masyarakat akan menggila.
|
||||||
|
|
||||||
|
Aktivitas "hacking" sendiri bukanlah hal yang baru. Mari kita mulai dari aktivitas carding yang dulu sempat ramai. Untuk dapat bertransaksi di internet menggunakan jaringan pembayaran tertentu, setidaknya kita hanya butuh 3 data ini:
|
||||||
|
|
||||||
|
- Nomor kartu kredit/debit
|
||||||
|
- Masa aktif kartu
|
||||||
|
- Kode CVV
|
||||||
|
|
||||||
|
Dulu kebijakan dalam menyimpan data sensitif seperti diatas belum seketat sekarang. Bahkan siapapun dapat menyimpan data tersebut tanpa ada regulasi yang jelas. Dan carder akan dengan senang hati membagikan hasil penemuannya (yang seringnya berdasarkan kerentanan dari plugin/module sebuah CMS pada masa itu) untuk tujuan cuci tangan. Membersihkan jejak.
|
||||||
|
|
||||||
|
Sekarang, sekalipun data tersebut leaked, kemungkinan besar tidak berguna jika instrumen pembayaran yang digunakan telah mendukung Three Domain Secure (3DS alias "OTP").
|
||||||
|
|
||||||
|
Sudah tidak bisa lagi mencuci uang melalui skema segitiga, berpindah hotel setiap minggu ataupun iseng beli helikopter di ebay.
|
||||||
|
|
||||||
|
Selanjutnya, aktivitas hacking yang cukup populer juga adalah peretasan akun. Entah untuk tujuan for fun or for profit or both.
|
||||||
|
|
||||||
|
Pernah merasakan saat "Lupa password" lalu sistem memberikan kata sandi lo yang sebenarnya melalui email? Exactly, itu adalah masa ketika sistem masih menyimpan data sensitif secara telanjang dan masih tolol-tolol nya. Lalu ada yang ngide untuk menyimpan (menyembunyikan) data sensitif dengan teknik hashing. Karena terlihat keren mengingat data tidak disimpan secara telanjang, beberapa yakin ini sudah menambah level keamanan dan memiliki proses autentikasi sesederhana md5($_POST['PASSWORD']) == $user->get('password').
|
||||||
|
|
||||||
|
Minat untuk membeli kredensial yang leaked untuk saat itu masih relatif tinggi. Tidak perlu john the ripper untuk memecahkan kata sandi, pencocokkan sederhana ke setiap kata di kamus yang dimiliki pun sudah cukup berbekal pengulangan dan fungsi md5.
|
||||||
|
|
||||||
|
Sekarang, data sensitif seperti kata sandi setidaknya sudah di hash menggunakan garam yang acak. Dulu setidaknya kita bisa menebak apakah hashing menggunakan md5, keccak, ataupun sha256 dengan melihat bentuknya. Sekarang, mengetahui bentuknya saja tidak cukup.
|
||||||
|
|
||||||
|
Sekalipun mengetahui "cost factor", "algoritma", "salt", dan "hash" nya dengan melihat bentuknya, pada akhirnya yang dibutuhkan adalah "versi telanjangnya" dan untuk mencocokkan versi telanjang dengan versi yang sudah di hash tersebut, membutuhkan waktu bertahun-tahun jika memang tidak selamanya.
|
||||||
|
|
||||||
|
Bisnis penjualan data pribadi menjadi terlihat kurang menjanjikan.
|
||||||
|
|
||||||
|
Data yang dicuri terkesan kurang berharga karena terkesan tidak memiliki nilai. Apa yang harus dilakukan untuk membuat bisnis ini sustain?
|
||||||
|
|
||||||
|
Membuatnya terlihat bernilai!
|
||||||
|
|
||||||
|
Seperti, lihat mata uang kertas yang lo miliki dan tatap baik-baik. Dengan bentuk dan bahan dasar yang sama, setiap kertas memiliki nilai yang berbeda-beda, bukan?
|
||||||
|
|
||||||
|
Atau, silahkan lihat logo apel dibelakang perangkat lo. Logo tersebut diyakini memiliki nilai yang bisa menaikkan status ataupun gengsi bagi pemiliknya bagi beberapa orang.
|
||||||
|
|
||||||
|
Sekarang, ambil konteks nya data pribadi. Misal, data pribadi lo tersebar di internet: nama lahir, TTL, NIK, nomor KK, nomor rekening utama, alamat lengkap tempat tinggal, mutasi rekening, golongan darah, dsb.
|
||||||
|
|
||||||
|
Itu adalah sesuatu yang berharga khususnya dalam konteks privasi.
|
||||||
|
|
||||||
|
Bayangkan jika data tersebut disalahgunakan dan berada di tangan yang salah, mungkin seperti di tangan pembunuh bayaran yang disewa dari situs dengan TLD bawang atau di seseorang/sekelompok dengan julukan... petrus (pepet terus).
|
||||||
|
|
||||||
|
Atau, lo menjadi korban dari skema pembayaran segitiga yang dulu cukup populer di forum jual beli disaat "rekening bersama" belum menjadi fitur utama dari sebuah pasar dunia digital hanya karena nomor rekening lo diketahui oleh si pelaku.
|
||||||
|
|
||||||
|
Lalu apa poinnya?
|
||||||
|
|
||||||
|
Gue rasa poinnya adalah setidaknya memiliki [Threat Model](https://www.privacyguides.org/en/basics/threat-modeling/) untuk lo sendiri.
|
||||||
|
|
||||||
|
Mungkin lo berpikir bahwa gue berpikir seperti ini karena gue belum pernah merasakan menjadi korban atau mungkin gue tidak terlalu menghargai tentang privasi.
|
||||||
|
|
||||||
|
Namun apapun itu, gue hanya bercerita tentang realita.
|
||||||
|
|
||||||
|
## Sebuah dilema
|
||||||
|
|
||||||
|
Ingat ilmu dasar ekonomi tentang permintaan dan penawaran?
|
||||||
|
|
||||||
|
Di masa ketika orang-orang sangat antusias dengan mata uang kripto, beberapa orang berlomba untuk menambang koinnya sendiri dan tidak jarang membagikan hasil menambang dari yang mereka lakukan. Harga GPU menjadi melonjak karena minat yang tinggi tidak sebanding dengan ketersediaannya di pasar. Saat sadar bahwa aktivitas menambang tidak efektif dilakukan oleh penambang eceran (atau sadar karena lain hal), harga GPU mulai kembali ke normal dan mungkin terus turun karena minatnya sudah tidak sebanding lagi dengan ketersediaan seperti sebelumnya.
|
||||||
|
|
||||||
|
Garis bawahi kata kuncinya: minat.
|
||||||
|
|
||||||
|
Internet bukan hanya tentang Twitter, tapi Twitter cukup berkontribusi dalam memberikan informasi "apa yang sedang terjadi" secara real-time. Disamping itu, minat dapat *didorong* berkat fitur "topik yang sedang trending" nya Twitter khususnya untuk pengguna yang tidak ingin ketinggalan kabar.
|
||||||
|
|
||||||
|
Saat terjadi kasus pembobolan, apa yang pertama ada di pikiran kita? Jawabannya tergantung. Jika pembobolan tempat tinggal, mungkin mengkhawatirkan keselamatan penghuninya. Jika bank, mungkin mengkhawatirkan dana yang disimpan. Jika sebuah sistem dari layanan/aplikasi/platform yang ada di internet?
|
||||||
|
|
||||||
|
Kewarasan sysadmins.
|
||||||
|
|
||||||
|
Just kidding, tentu saja data. Data apa? Kemungkinan data pribadi.
|
||||||
|
|
||||||
|
Who cares dengan data berukuran 100 MB untuk entry blog dicuri oleh maling? Kecuali terlalu tolol tidak melakukan backup karena YOLO.
|
||||||
|
|
||||||
|
Anyways, pada dasarnya kita memberikan data pribadi kita berdasarkan persetujuan kita. Ingat tulisan panjang berjudul "Kebijakan layanan" yang langsung lo klik Agree? Exactly.
|
||||||
|
|
||||||
|
Jika bertanya untuk apa data tersebut disimpan, jawabannya untuk operasional. Tapi pernah bertanya *operasional yang seperti apa? *I don't think so.
|
||||||
|
|
||||||
|
Intinya, kita akan setuju jika data yang kita berikan dijaga dengan aman dan tidak disalahgunakan. Seperti, kita mempercayai Google saat memasukkan data kartu kredit kita saat berlangganan ke YouTube Premium.
|
||||||
|
|
||||||
|
Dan tidak mungkin Google menyalahgunakan data tersebut hanya untuk kepentingannya, bukan?
|
||||||
|
|
||||||
|
Pernah menggunakan Path atau Swarm? Layanan tersebut cukup populer untuk melakukan check-in, in the good way. Misal, gue membagikan "kabar" bahwa gue sedang berada di Starbucks Paspes pada jam 13:37 WIB dengan melakukan check-in di aplikasi tersebut.
|
||||||
|
|
||||||
|
Kita mempercayai penyedia layanan bahwa mereka tidak akan menyalahgunakan data yang kita bagikan secara sadar tersebut ke mereka. Tidak terbayang jika data tersebut digunakan untuk mendapatkan celah bahwa lo sedang tidak berada di rumah lo, dan seseorang yang penasaran tahu bahwa lo tinggal sendirian.
|
||||||
|
|
||||||
|
Ingat kata kuncinya: penyalahgunaan.
|
||||||
|
|
||||||
|
Sekarang kita "privacy check" singkat dengan gue dan jawab pertanyaan ini dengan jujur tanpa memikirkan benar-salah:
|
||||||
|
|
||||||
|
- Masalah ga kalau gue tahu lo suka minum kopi? Ini level satu
|
||||||
|
- Masalah ga kalau gue tahu lo setidaknya seminggu sekali pergi ke Starbucks paspes setiap sore? Ini level dua
|
||||||
|
- Masalah ga kalau gue tahu lo dalam seminggu ke sbux paspes jam 16, pesan caffe mocha, dan setidaknya menghabiskan 69rb setiap transaksi? Ini level tiga
|
||||||
|
|
||||||
|
Sekarang gue bisa buat persona lo jika semua jawaban diatas adalah "tidak":
|
||||||
|
|
||||||
|
- Lo suka minum kopi (peminum kopi)
|
||||||
|
- Tempat kopi favorit di sbux paspes (tinggal kemungkinan di daerah Kuningan-Setiabudi)
|
||||||
|
- Prefer ke sbux paspes sekitar sore jam 16 (untuk santai setelah bekerja)
|
||||||
|
- Kopi favorit caffe mocha (kemungkinan suka coklat juga)
|
||||||
|
- Rata-rata menghabiskan 69rb (kemungkinan gaji perjam nya 100rb/16jt per bulan/golongan white collar)
|
||||||
|
|
||||||
|
Berdasarkan persona tersebut, terbentuklah sebuah entitas anggap dengan nama "audiens" yang sangat berguna dalam bisnis iklan digital.
|
||||||
|
|
||||||
|
Data-data itulah yang diberikan secara sukarela yang membuat "iklan relevan" menjadi sesuatu. Mungkin lo membagikannya dengan melakukan pembayaran melalui QR, atau dengan membuat status di media sosial mainstream, atau apapun itu.
|
||||||
|
|
||||||
|
Namun bagaimana jika disalahgunakan? Misal, karena gue tahu 5 informasi diatas, bisa aja gue masukkan sianida ke gelas kopi yang lo minum? Who knows.
|
||||||
|
|
||||||
|
Kembali ke pembahasan, ada 2 kata kunci yang sudah kita kumpulkan: minat dan penyalahgunaan.
|
||||||
|
|
||||||
|
Kata kunci tersebut sengaja gue garis bawahi agar lo mempertimbangkan membuat threat model lo sendiri yang sempat gue singgung sebelumnya.
|
||||||
|
|
||||||
|
Sekarang kita kembali ke bisnis data pribadi.
|
||||||
|
|
||||||
|
Ini dilemanya: untuk membuat data pribadi tidak bernilai, lo harus membuat data pribadi tersebut tidak bernilai. Alias, tidak menghargai data pribadi tersebut, benar?
|
||||||
|
|
||||||
|
Misal, salah satu instansi pemerintah kecolongan dan data pribadi kita ada disana, anggap data apapun itu terkait asuransi. Untuk membuatnya "kasus" tersebut tidak bernilai, kita harus membiarkannya. Tidak memberikan perhatian, tidak membuatnya menjadi tren. Karena, anggap data yang kecolongan itu bukanlah hal yang penting/bernilai. Aktivitas pembobolan tersebut terlihat kurang bernilai, karena respon yang didapat tidak sebanding dengan usaha yang sudah dikerahkan, dengan catatan, bila tujuan dari aktivitas pembobolan tersebut adalah untuk mendapatkan perhatian.
|
||||||
|
|
||||||
|
Jika tujuannya bukan untuk perhatian, I guess penjahat macam apa yang meninggalkan jejak tanpa alasan?
|
||||||
|
|
||||||
|
Tapi ada solusi over-simplified-silver-bullet yang lebih praktikal dari itu yang akan kita bahas di bagian bawah nanti.
|
||||||
|
|
||||||
|
In the meantime, jika lo memang berniat untuk mendapatkan perhatian dengan mengambil kesempatan dalam kesempitan, mungkin bisa pertimbangkan untuk berpikir lagi saat ingin menekan tombol Tweet.
|
||||||
|
|
||||||
|
Bagaimanapun, tidak ada sistem yang aman dan kasus pembobolan data sangat menyebalkan karena korbannya pada akhirnya adalah pemilik data itu sendiri alias kita-kita juga.
|
||||||
|
|
||||||
|
Dan jika memang sangat peduli dengan data pribadi atau khususnya privasi di dunia digital, coba pikirkan kembali mengapa berada di sebuah platform yang sudah menjadi rahasia umum bahwa bahan bakarnya adalah data pengguna.
|
||||||
|
|
||||||
|
Sebuah platform yang model bisnisnya dari iklan.
|
||||||
|
|
||||||
|
Sebuah iklan yang lebih efektif karena tepat sasaran, berbeda dengan iklan yang dipajang di stopan carrefour yang tidak bisa diukur karena tidak ditargetkan untuk audiens tertentu.
|
||||||
|
|
||||||
|
## Menyikapi data pribadi
|
||||||
|
|
||||||
|
Eropa memiliki regulasi bernama General Data Protection Regulation (GDPR), ada regulasi yang sangat jelas tentang menyikapi data pribadi seorang pengguna.
|
||||||
|
|
||||||
|
Contoh sederhana, misal, jika blog ini berada di jurisdiksi eropa, gue harus memberikan "banner" terkait data pribadi apa saja yang gue simpan dan harus berdasarkan persetujuan dari si pengguna nya. Misal, gue menyimpan alamat IP dari pengunjung blog gue selama 24 jam, aksi gue tersebut harus berdasarkan persetujuan dari lo sebagai pemilik, sebelum gue melakukannya.
|
||||||
|
|
||||||
|
Alamat IP berkaitan dengan data pribadi karena memberikan informasi dari daerah mana lo berasal dan menggunakan layanan penyedia internet apa. Berdasarkan informasi tersebut, intinya siapapun yang memiliki informasi tersebut dapat mengetahui bahwa "pengguna dengan alamat IP 74.74.69.69 adalah seseorang dengan nama Fariz dari Pasar Minggu", misalnya.
|
||||||
|
|
||||||
|
Untuk menyikapi regulasi tersebut, setidaknya ada dua cara selain dengan meminta persetujuan dari pengguna: jangan simpan data pribadi atau hanya simpan bagian data yang relevan saja (yang tidak menggambarkan pribadi seseorang). Misal, jika yang gue butuhkan hanyalah untuk melacak "pengunjung blog gue dari negara apa aja", secara teknis menyimpan data tersebut sebagai "74.74.69.0" pun cukup relevan dan informasi tersebut tidak berkaitan dengan data pribadi siapapun juga.
|
||||||
|
|
||||||
|
Di layanan komunikasi instan, penyedia layanan sudah mendukung enkripsi end-to-end untuk setiap konten yang dikirim oleh penggunanya. Yang gampangnya, jika suatu saat data-data di server WhatsApp bocor, si pencuri seharusnya tidak mendapatkan informasi yang berharga tentang apa yang pengguna WhatsApp berikan data tersebut ke WhatsApp, itupun jika disimpan oleh WhatsApp.
|
||||||
|
|
||||||
|
Bayangkan seperti data NIK disimpan di database dengan nilai `ND+2BN4v2yYuAQV66ICk8BEwkhc=` alih-alih 023452543312312, misalnya. Of course ada pertukarannya, seperti salah satunya enkripsi e2e tidak memungkinan untuk kasus ini. Tapi bukan berarti tidak melakukan enkripsi sama sekali kan?
|
||||||
|
|
||||||
|
Setidaknya encrypt at rest lah kalau enkripsi simetris terlalu mahal.
|
||||||
|
|
||||||
|
Dan good luck dengan politik yang ada by the way.
|
||||||
|
|
||||||
|
Anyways, bayangkan jika ada data bocor dan isinya seperti ini:
|
||||||
|
|
||||||
|
|
||||||
|
+-------------------------------+-------------------------------+------------------------------+-------+-------------+
|
||||||
|
| name | nik | photo_url | kk_id | updated_at |
|
||||||
|
+-------------------------------+-------------------------------+------------------------------+-------+-------------+
|
||||||
|
| X9GM9fKfMLoEgGwHvmrBKnubXKw= | M7Y1ar1cKVZ+0+MXAbTnwKZeAog | wBj6YOq74fviji1uiJ+oxFKHCKk= | 31337 | 1651338000 |
|
||||||
|
| MfskhA7jRGDsf8lF9SaRb18tgco | MfskhA7jRGDsf8lF9SaRb18tgco= | MfskhA7jRGDsf8lF9SaRb18tgco | 69420 | 1643648400 |
|
||||||
|
| mQ+z6KpzvLn9Lpro5+tqncVDQTo | dlbYB0LksuQ6XSauJzGIqAocgaQ= | JD+RVwPr69EgUwDM3l8x2nwi1YM= | 8069 | 1659286800 |
|
||||||
|
+-------------------------------+-------------------------------+------------------------------+-------+-------------+
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Apa yang berharga selain data `updated_at` dan `nik_id`?
|
||||||
|
|
||||||
|
Namun tentu saja ini sebuah distopia.
|
||||||
|
|
||||||
|
Tapi tidak ada lagi cara mengamankan data pribadi selain melakukan enkripsi atau tidak menyimpannya sama sekali.
|
||||||
|
|
||||||
|
## Penutup
|
||||||
|
|
||||||
|
Mari kita tutup dengan pertanyaan fundamental:
|
||||||
|
|
||||||
|
- Apa sebenarnya yang lo khawatirkan dari terjadinya pembobolan data?
|
||||||
|
- Apa dampak dari kekhawatiran tersebut?
|
||||||
|
- Seberapa pribadi "data pribadi" menurut lo dan apa saja?
|
||||||
|
- Apa makna privasi menurut lo selain "opsi visibilitas" ataupun "status audience"?
|
||||||
|
|
||||||
|
Salah satu tujuan dari tulisan ini adalah untuk membantu lo agar bisa menjawab setidaknya 4 pertanyaan diatas.
|
||||||
|
|
||||||
|
Ada hal yang menurut gue cukup lucu tapi ini nyata dan agak out of topic karena gue baru tahu kejadian ini.
|
||||||
|
|
||||||
|
Misal, lo bikin status di Twitter, apakah gue perlu izin untuk membacanya? Untuk membalasnya? Untuk melakukan apapun itu yang berkaitan dengan interaksi dengan status lo? Untuk menempelkannya di artikel yang gue tulis sekarang?
|
||||||
|
|
||||||
|
Apakah ada perjanjian eksplisit yang menegaskan "status ini hanya boleh dinikmati atau digunakan untuk keperluan non-komersil, untuk keperluan lainnya, izin dari *pemilik *status adalah kewajiban" atau something like that?
|
||||||
|
|
||||||
|
Seperti, bayangkan lo mendengar omongan orang lain di coffee shop yang suaranya sengaja dikeraskan biar terdengar oleh siapapun, terus doi ngasih disclaimer "lu pada boleh denger obrolan gue, tapi kalau lu jadiin obrolan gue untuk kepentingan komersil, lu harus izin dulu ke gue".
|
||||||
|
|
||||||
|
Untuk karya seni yang melibatkan proses kreatif tentu masuk akal but a fucking 240 characters tweets???
|
||||||
|
|
||||||
|
Anyways, sebagai penutup, silahkan berkoar-koar tentang data pribadi. Tentang privasi adalah hak fundamental baik di dunia fisik ataupun di dunia digital. Tentang tidak becusnya suatu instansi dalam menjaga data pribadi yang dipaksa harus diberikan kepada mereka. Tentang penggunaan data pribadi yang dilakukan bigco untuk keuntungan mereka. Tentang infosec. opsec. gdpr. blockchain. firewall berlapis. k8s.
|
||||||
|
|
||||||
|
Tapi pertimbangkan ulang jika dirasa ingin mengambil kesempatan dalam kesempitan. Pertimbangkan ulang jika dirasa ingin membawa penonton ke panggung yang seharusnya tidak pernah ada.
|
||||||
|
|
||||||
|
Gue mengerti bagaimana menyebalkannya tidak bisa berbuat apa-apa selain menunjukkan kepedulian.
|
||||||
|
|
||||||
|
Tapi coba pertimbangkan, alih-alih mempermasalahkan setiap kali terjadi gempa, bagaimana bila fokus dalam menyikapi setelah kejadian gempa tersebut, karena sadar tinggal di ring of fire.
|
63
content/digital garden.md
Normal file
63
content/digital garden.md
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
---
|
||||||
|
title: Digital Garden
|
||||||
|
tags:
|
||||||
|
- evergreen
|
||||||
|
---
|
||||||
|
|
||||||
|
Pernah melihat video bagaimana orang-orang acak di internet yang tidak saling mengenal satu sama lain berkolaborasi membuat
|
||||||
|
lagu dari video "orang tersandung ujung ranjang"? Atau video kucing seperti berbicara "sometimes im alone, sometimes im not, hello?" dan
|
||||||
|
menjadi mahakarya di internet? Keindahan internet adalah dapat menyatukan apapun yang terhubung ke jaringan tersebut, tanpa batas
|
||||||
|
geografis; waktu, apalagi kebangsaan.
|
||||||
|
|
||||||
|
Di internet, banyak informasi bersebaran: Dari informasi umum sampai informasi pribadi. Hanya tentang waktu untuk dapat menemukannya.
|
||||||
|
Bagaimana dan apa "media" untuk menyebarkan informasi tersebut adalah hal yang penting, dan yang pasti, informasi di internet
|
||||||
|
selalu ter-identifikasi menggunakan [Uniform Resource Identifier (URI)](https://en.wikipedia.org/wiki/Uniform_Resource_Identifier). Seperti
|
||||||
|
isi _email_, dokumen, video, musik, dan foto.
|
||||||
|
|
||||||
|
Termasuk profil instagram mu yang misterius itu.
|
||||||
|
|
||||||
|
Di banyak kasus, penggunaan internet bergantung dengan mesin pencari, seperti Google; Bing, DuckDuckGo, Kagi, dkk. Dan, ya, sebuah peramban juga.
|
||||||
|
Peramban (browser) adalah alat yang paling penting dalam mengakses internet di hari ini.
|
||||||
|
|
||||||
|
Setiap orang memiliki kebutuhan tersendiri dalam menggunakan internet, tapi yang pasti, semuanya adalah tentang mengakses informasi, dan tidak
|
||||||
|
jarang, informasi yang diminati: Jadwal pertandingan klub yang didukung? Ramalan cuaca di suatu daerah? Dokumen penelitian di bidang tertentu?
|
||||||
|
Unggahan terbaru dari pembuat konten favorit? Kode nuklir, anyone?
|
||||||
|
|
||||||
|
Aktivitas di internet adalah hal pribadi, namun memiliki ketertarikan bukanlah sesuatu yang harus disembunyikan. Ketertarikan adalah sesuatu
|
||||||
|
yang menjadikan manusia, manusia: rumah adalah tentang kumpulan manusia yang memiliki ketertarikan yang sama dalam aspek keluarga, kantor dalam
|
||||||
|
aspek pekerjaan (selain ofc \$\$\$), komunitas dalam aspek hobi ataupun ideologi. Ya, ketertarikan adalah magnet untuk menyatukan manusia.
|
||||||
|
|
||||||
|
Anggap kamu memiliki ketertarikan dalam membaca, sudah pasti "bacaan" akan menjadi topik favoritmu: Rekomendasi buku tentang X? Sumber bacaan terbaik
|
||||||
|
untuk mempelajari Y? Buku terbaru yang harus dibaca di tahun WXYZ?
|
||||||
|
|
||||||
|
Dan akan sangat menyenangkan saat menemukan orang lain yang memiliki ketertarikan serupa.
|
||||||
|
|
||||||
|
Informasi akan menjadi lebih menarik saat dibagikan ke orang lain, itulah mengapa ada buku; surat, televisi, dan sebuah aktivitas bernama percakapan.
|
||||||
|
Dalam konteks internet, menyebarkan informasi ini cukup beragam medianya, namun untuk orang awam, umumnya melalui sesuatu bernama [[media sosial]] karena
|
||||||
|
media tersebut yang paling mudah dijangkau. Di dunia fisik, itu seperti "berteriak di keramaian dan berharap ada yang mendengar ataupun menemukan" yang mana
|
||||||
|
tidak memakan biaya apapun, benar?
|
||||||
|
|
||||||
|
Tapi media sosial diciptakan (seharusnya) untuk ~~menampilkan iklan untuk mendapatkan keuntungan~~ bersosial, yang dibanyak kasus, untuk ~~promosi~~ berbagi kabar. Baik
|
||||||
|
melalui tulisan singkat, foto, dan video.
|
||||||
|
|
||||||
|
Beberapa pengguna internet, ingin mengumpulkan informasi; mengkurasinya, dan menyimpannya selama mungkin dengan harapan suatu saat akan mengakses kembali informasi tersebut.
|
||||||
|
Bookmark adalah istilah yang populer digunakan untuk aktivitas tersebut, baik di suatu aplikasi tertentu ataupun peramban pada umumnya.
|
||||||
|
|
||||||
|
Bookmark sayangnya lebih relevan sebagai "save for later" karena memang diciptakan untuk itu. Sebagai gambaran, "penanda buku" dan "kliping" (misalnya) adalah dua hal yang berbeda
|
||||||
|
meskipun mungkin memiliki tujuan akhir yang sama, jika dibandingkan dengan gambaran di dunia fisik.
|
||||||
|
|
||||||
|
Lalu begini kasusnya: Kamu memiliki banyak tautan yang disimpan di bookmark/favorites dan dikelompokkan berdasarkan kategorinya, untuk diakses nanti atau diakses kembali. Kamu ingin
|
||||||
|
mengolah informasi tersebut, mungkin membuat catatan; ringkasan, kutipan, atau "mind map". Lalu kamu mencari alat/media lain karena fitur bookmark/favorites tidak bisa melakukan hal itu.
|
||||||
|
|
||||||
|
Digital Garden[^1] adalah sebutan untuk menggambarkan "sebuah tempat untuk mengkurasi informasi yang ada di internet, tempat yang didedikasikan untuk pemikiran; ide dan kumpulan informasi" dan ada alasannya mengapa disebut sebagai "garden" alias kebun/taman.
|
||||||
|
|
||||||
|
Konsep ini menarik setelah saya gagal dalam 2 tahun untuk menerbitkan sebuah buku karena saya cenderung kesulitan dalam [[pengunjung lama|menyusun informasi yang berurut]]. Saya
|
||||||
|
lebih menyukai "connecting the dots" seperti mengetahui/mempelajari apapun yang saya minati lalu menghubungkan yang memang berkaitan yang pada akhirnya menjadikan sesuatu.
|
||||||
|
|
||||||
|
Yang unik dari konsep digital garden ini adalah tidak terbatas oleh urutan, alias, inilah yang saya impikan. Menulis buku adalah tentang mengurutkan informasi per babak. Blog, pada
|
||||||
|
dasarnya adalah tentang mengurutkan kejadian berdasarkan lini waktu. Dan di banyak kasus, sesuatu yang memiliki urutan bersifat kekal dan revisi terkadang hanya mencakup kesalahan
|
||||||
|
penulisan dan bukan konsep.
|
||||||
|
|
||||||
|
[^1]:
|
||||||
|
Penjelasan mendalam favorit saya terkait topik ini adalah [A Brief History & Ethos of the Digital Garden](https://maggieappleton.com/garden-history) nya
|
||||||
|
[Maggie Appleton](https://maggieappleton.com/about)
|
179
content/edgydns-with-more-edgyness.md
Normal file
179
content/edgydns-with-more-edgyness.md
Normal file
@ -0,0 +1,179 @@
|
|||||||
|
---
|
||||||
|
title: edgyDNS, now with more edgy-ness
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: edgydns-with-more-edgyness
|
||||||
|
date: 2021-06-04T12:24:17.000Z
|
||||||
|
date_updated: 2021-06-04T12:24:17.000Z
|
||||||
|
excerpt: "TL;DR: sekarang edgyDNS mendukung Handshake domain!"
|
||||||
|
---
|
||||||
|
|
||||||
|
Sudah lama gue secara pribadi menggunaan "DNS Sinkhole" dari yang paling ekstrim memodifikasi berkas `/etc/hosts` di komputer, sampai ke menggunakan Pi-hole dan sekarang menggunakan AdGuardHome yang lebih ringan dan sederhana dari Pi-hole.
|
||||||
|
|
||||||
|
Ketika menggunakan DNS Sinkhole via Pi-hole, gue berpikir untuk tidak ingin menggunakan ini sendirian. Gue membuka akses Pi-holegue publik dengan meng-ekspos port 53. Namun sayangnya, pendekatan tersebut tidak efektif mengingat ISP tidak jarang mensabotase DNS query kita. Pendekatan selanjutnya adalah dengan menjalankan DoH Server dan menjadikan Pi-hole sebagai upstream. Lalu gue berpikir jika pendekatan ini kurang efektif, selain karena harus menjalankan 2 layanan juga karena terdapat 2 lapisan dalam melakukan DNS Query.
|
||||||
|
|
||||||
|
Lalu gue menemukan AdGuardHome dan sangat memenuhi kebutuhan gue. Dan bukan hanya mendukung DoH, melainkan DoT dan DoQ juga. Serta lebih ringan dari Pi-hole, dan gue tidak memiliki alasan untuk tidak menggunakan AdGuardHome.
|
||||||
|
|
||||||
|
## Tentang Domain Name System
|
||||||
|
|
||||||
|
Setiap domain terdaftar di "top-level domain" seperti .com yang populer digunakan untuk hal-hal komersil dan .org untuk organisasi.
|
||||||
|
|
||||||
|
Tujuan utama dari penamaan menggunakan domain ini adalah agar pengguna internet tidak perlu ribet-ribet menghafal alamat IP 74.125.24.100 untuk dapat mengakses mesin pencari yang dijalankan oleh Google, cukup hafalkan google.com, and enjoy the ride. Selain itu, jika mesin yang memiliki alamat IP 74.125.24.100 sedang tidak bisa diakses, dengan menggunakan penamaan berbasis domain ini pengguna bisa mengakses mesin lainnya yang menjalankan layanan yang sama namun memiliki alamat IP berbeda, tanpa perlu menghafal (lagi) alamat IP tersebut.
|
||||||
|
|
||||||
|
Ada biaya untuk mendaftarkan alamat domain kamu. Pada dasarnya kita tidak pernah membeli domain, melainkan menyewanya. Seperti blog ini, gue menyewa nama faultable dari gTLD .dev yang dikelola oleh Google, dan setiap tahun ada biaya yang harus gue bayar.
|
||||||
|
|
||||||
|
Kepada siapa gue bayar?
|
||||||
|
|
||||||
|
Ke Google (sebagai registrar/pencatat sekaligus registry/pengelola dari gTLD .dev) dan ke ICANN sebesar $0.18 yang sudah menjadi kewajiban.
|
||||||
|
|
||||||
|
Karena penamaan domain ini yang selalu bergantung dengan gTLD, tidak jarang "perusahaan besar" membeli di beberapa gTLD lain menggunakan *brand *yang sama seperti google.com, google.co.id, google.co dan sebagainya untuk melindungi merek mereka.
|
||||||
|
|
||||||
|
Ya, domain adalah tentang merek/brand sesuatu di internet.
|
||||||
|
|
||||||
|
Dan bukan alasan mengapa sekarang ada gTLD yang unik per-merek seperti .google untuk Google, .apple untuk Apple, dsb agar tidak perlu pusing-pusing memelihara banyak domain demi alasan keamanan :))
|
||||||
|
|
||||||
|
Apakah kita bisa membuat gTLD sendiri, sehingga, kita tidak perlu membeli:
|
||||||
|
|
||||||
|
- rizaldy.com
|
||||||
|
- rizaldy.co
|
||||||
|
- rizaldy.io
|
||||||
|
|
||||||
|
Dsb melainkan hanya:
|
||||||
|
|
||||||
|
- .rizaldy
|
||||||
|
|
||||||
|
Untuk melindungi "brand" kita sebagaimana yang dilakukan oleh pemain besar seperti Google dan Apple? Tentu bisa, dan tentu tidak mudah apalagi murah.
|
||||||
|
|
||||||
|
Meskipun DNS pada esensinya adalah sistem yang "ter-desentralisasi" (misal seperti setiap orang dapat menjalankan DNS Resolver nya sendiri) namun sistem DNS sekarang adalah ter-sentralisasi. Pada dasarnya ada 3 level dalam hierarki DNS:
|
||||||
|
|
||||||
|
- Root server (.)
|
||||||
|
- gTLD atau generic Top-level domain (.com, .io, .id, dll)
|
||||||
|
- Domain anda disini! (faultable.dev, faultable.blog, dll)
|
||||||
|
|
||||||
|
Sejauh ini ada 13 root server yang ada, `{a-m}.root-servers.{net,org}`, silahkan jalankan `dig(1)` tanpa parameter apapun untuk memverifikasi. 13 root server tersebut dikelola oleh ICANN, yang meskipun ICANN adalah organisasi non-profit, namun yang sedang kita bicarakan adalah tentang "sentralisasi" dan "desentralisasi", bukan?
|
||||||
|
|
||||||
|
## DNS Censorship
|
||||||
|
|
||||||
|
Beberapa ada yang membahas tentang DNS Censorship, namun apa maksud dari itu?
|
||||||
|
|
||||||
|
Misal, begini.
|
||||||
|
|
||||||
|
Gue menyewa alamat faultable.dev dari Google, dan gue memiliki A Record yang mengarah ke komputer yang memiliki alamat IP 143.198.198.198. Misal, jika lo menggunakan DNS Resolver nya Cloudflare (1.1.1.1), ketika komputer ingin mengetahui alamat IP dari faultable.dev, besar kemungkinan jawabannya adalah 143.198.198.198 jika tidak ada "censorship".
|
||||||
|
|
||||||
|
Bagaimana 1.1.1.1 bisa tau **dan yakin **bahwa faultable.dev memiliki alamat IP tersebut?
|
||||||
|
|
||||||
|
- Pertama dia akan bertanya ke root server siapa penanggung jawab `.dev`
|
||||||
|
- Lalu ke `.dev` dia akan bertanya siapa penanggung jawab `faultable.dev`
|
||||||
|
- Penanggung jawab `faultable.dev` adalah `ns0{1-4}.edgyscale.host` (authoritative nameserver), maka dia akan bertanya kesana
|
||||||
|
- Authoritative nameserver bilang kalau `faultable.dev` memiliki alamat IP 143.198.198.198
|
||||||
|
|
||||||
|
Gue beli domain `faultable.dev` di `domains.google` dan berarti registry/pencatat yang bertanggung jawab adalah Google Registry. Gue bilang ke Google Registry bahwa Authoritative Nameserver yang gue gunakan adalah .edgyscale.host. Cara sederhana untuk "mengetahui" apakah tidak ada censorship terkait faultable.dev tersebut dengan menggunakan DNSSEC yang akan gue bahas lebih lanjut nanti.
|
||||||
|
|
||||||
|
Jika ingin mempelajari sedikit tentang DNSSEC, bisa baca [di halaman](https://www.cloudflare.com/dns/dnssec/how-dnssec-works/) CloudFlare ini.
|
||||||
|
|
||||||
|
Dengan DNSSEC, singkatnya kita dapat dengan lebih mudah memvalidasi apakah terdapat censorship. Akhir-akhir ini raidforums.com diblokir di Indonesia, dan domain tersebut menggunakan DNSSEC. Untuk pengguna internet dari ISP Biznet situs tidak dapat diakses demi mengikuti aturan pemerintah.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/06/Screen-Shot-2021-06-04-at-6.15.09-PM.png)Mengakses raidforums.com
|
||||||
|
Disitu terlihat bahwa konten yang ada di raidforums.com hanyalah meta tag untuk melakukan *redirect *ke "Safe Surf" nya Biznet. Dan juga disitu terlihat bahwa alamat IP dari raidforums.com adalah 202.169.44.80 yang padahal itu adalah miliki Biznet. Bagaimana bisa kita mendapatkan alamat IP tersebut? Mari kita tanyakan ke Authoritative Name Server nya!
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/06/Screen-Shot-2021-06-04-at-6.17.44-PM.png)dig raidforums.com NS
|
||||||
|
Disitu terlihat bahwa Start of Authority (SOA) nya adalah rpz.zone.porn yang padahal seharusnya adalah `elliot.ns.cloudflare.com` dan `dns.cloudflare.com`.
|
||||||
|
|
||||||
|
RPZ diatas adalah singkatan dari Response Policy Zone yang singkatnya biasa digunakan untuk melakukan "filtering" misal seperti pencegahan ketika mencoba mengakses situs yang dianggap "phising".
|
||||||
|
|
||||||
|
Berdasarkan kasus diatas, DNS query yang ada tidak bertanya ke Authoritative Name Server yang digunakan oleh raidforums.com. Sistem DNS seperti ini rentan dengan censorship, terlebih setiap entitas bisa dengan bebas menjawab DNS Query apapun selagi memiliki kontrol terhadap jaringan.
|
||||||
|
|
||||||
|
Dan kasus diatas hanyalah satu contoh untuk *censorship *di level pemerintah yang diterapkan oleh ISP. Yang menjadi pertanyaan, bagaimana bila suatu saat Google mematikan gTLD `.dev` nya? Bagaimana bila suatu saat `faultable.dev` diblokir oleh Google misal karena gue membenci Google? Tidak ada yang tau apa yang terjadi di masa depan, dan gue adalah salah satu orang yang berdiri di ujung.
|
||||||
|
|
||||||
|
## Decentralized DNS, literally
|
||||||
|
|
||||||
|
Ingat tentang Root Server yang pernah disinggung sebelumnya?
|
||||||
|
|
||||||
|
Dalam setiap kasus "decentralized", berarti setiap orang dapat melakukan hal tersebut, tanpa izin. Ingin menjalankan Authoritative Name Server sendiri? Sure, deploy PowerDNS dan nikmati perjalanan anda dalam mengatur ribuan permintaan masuk dari DNS Recursor dan orang jahat yang mencoba untuk melakukan DNS Poisoning.
|
||||||
|
|
||||||
|
Bagaimana bila ingin berpartisipasi dalam Root Server juga?
|
||||||
|
|
||||||
|
Di sistem internet sekarang, jawabannya adalah hampir tidak mungkin karena yang bertanggung jawab untuk menjalankan Root Server hanyalah ICANN.
|
||||||
|
|
||||||
|
Meskipun ada *community-effort *terkait alternative operasional Root Server yakni [Open NIC](https://www.opennic.org/) yang tidak bergantung dengan ICANN, namun tetap inti dari "desentraliasi" disini tidak terpenuhi.
|
||||||
|
|
||||||
|
Gue sudah lama mengikuti informasi terkait [Handshake](https://handshake.org/), salah satu alternatif dari Root DNS, *community-effort* juga namun ter-desentralisasi. Gue sebelumnya belum tertarik dengan Handshake karena pada saat itu ada blockchain-based Root DNS lain seperti Namecoin, tapi melihat masa depan Handshake yang menurut gue lebih cerah dari yang lain, gue tertarik untuk memperdalam tentang protokol tersebut.
|
||||||
|
|
||||||
|
Untuk lebih mempermudah memahami Handshake, anggap Handshake adalah Root Server dan Zone file nya berada di Blockchain.
|
||||||
|
|
||||||
|
Blockchain pada dasarnya hanyalah sebuah *merkle-tree *namun dengan gaya, anyway.
|
||||||
|
|
||||||
|
Salah satu entitas (di level registrar) yang mendukung misi Handshake adalah [Namebase](https://namebase.io), siapapun dapat mendaftarkan gTLD nya sendiri di blockchain Handshake.
|
||||||
|
|
||||||
|
Perlu diingat ketika ada yang membahas tentang "blockchain" kita harus mengetahui blockchain "yang mana" yang dimaksud. Dalam konteks disini, blockchain tersebut adalah di protokol Handshake dan "mata uang" yang digunakan di blockchain tersebut adalah HNS.
|
||||||
|
|
||||||
|
Gue mencoba membeli gTLD gue sendiri di Handshake, yakni `rizaldy`. Proses pembelian memakan waktu sekitar 2 minggu dan gue *bid *sekitar 2 HNS karena gue yakin tidak ada yang tertarik lagi membeli nama tersebut. Karena gue menjalankan DNS Resolver sendiri, tentu gue bisa saja membuat DNS Rewrite dengan memberikan jawaban `143.198.198.198` setiap kali ada request A record ke `rizaldy`. Namun tidak semua pengguna internet menggunakan DNS Resolver gue, kan?
|
||||||
|
|
||||||
|
Ini percobaan ketika gue mencoba resolve `hi.rizaldy` baik menggunakan Handshake Resolver langsung maupun ke DNS Resolver yang mendukung Handshake (NextDNS).
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/06/Screen-Shot-2021-06-04-at-11.11.24-PM.png)45.90.28.92 adalah DNS Server dari NextDNS
|
||||||
|
And it just fucking works!
|
||||||
|
|
||||||
|
## edgyDNS is supporting Handshake domains!
|
||||||
|
|
||||||
|
Bagi kamu yang tertarik dengan Handshake, kamu bisa menggunakan DNS Resolver yang gue (melalui edgy.network) tawarkan melalui:
|
||||||
|
|
||||||
|
- DoH: https://dns.edgy.network/dns-query
|
||||||
|
- DoT: tls://dns.edgy.network:853
|
||||||
|
- DoQ: quic://dns.edgy.network:784
|
||||||
|
|
||||||
|
Untuk pengguna MacOS Big Sur & iOS 14, bisa menggunakan "Profile" yang bisa diunduh disini:
|
||||||
|
|
||||||
|
- [DoH](https://dns.edgy.network/apple/doh.mobileconfig?host=dns.edgy.network)
|
||||||
|
- [DoT](https://dns.edgy.network/apple/dot.mobileconfig?host=dns.edgy.network)
|
||||||
|
|
||||||
|
Gue lebih memilih menggunakan Profile karena berjalan di level OS dan tanpa bantuan program lainnya seperti `dnsproxy` misalnya. Anyway.
|
||||||
|
|
||||||
|
Tentu saja kita menggunakan DNS Upstream sendiri melalui [HNSD](https://github.com/handshake-org/hnsd) nya yang dibangun diatas Unbound. Gue sudah melakukan pengujian selama 1-2 minggu, dan perbedaan (latensi) nya daripada menggunakan Unbound murni (upstream 1) dan PowerDNS (upstream 2) hanya sekitar 8-15ms untuk root domain yang dikelola oleh ICANN, yang gue rasa sangat kecil.
|
||||||
|
|
||||||
|
## Handshake, ENS, Unstoppable Domains, Namecoin
|
||||||
|
|
||||||
|
Tentu saja gue sudah *aware *dengan hal ini dan gue akan ceritakan sedikit kenapa gue memilih Handshake.
|
||||||
|
|
||||||
|
Meskipun sama-sama proyek eksperimental, pembeda paling kontras antar keempat nya sejauh yang gue tau adalah di Blockchain, penggunaan & cara "client" me-resolve domain name.
|
||||||
|
|
||||||
|
Namecoin dan Handshake berada di blockchain sendiri-sendiri, sedangkan ENS dan Unstoppable Domains diatas blockchain Ethereum.
|
||||||
|
|
||||||
|
ENS, Unstoppable Domains dan Namecoin adalah "registry" untuk gTLD yang mereka tawarkan (.eth, .bit, .ens, .crypto) sedangkan Handshake adalah di Root domain (.rizaldy, .evilfactorylabs, dll).
|
||||||
|
|
||||||
|
ENS, Unstoppable Domains dan Namecoin tidak memiliki "light client" atau yang sederhananya adalah untuk dapat menjalankan non-full node terkait operasional dengan blockchain. Di Handshake dapat menjalankan mode [SPV node](https://bitcoin.stackexchange.com/a/77097) yang fokus ke "name resolution" daripada berpartisipasi penuh dalam operasional blockchain tersebut (menjadi miner misalnya).
|
||||||
|
|
||||||
|
Dan terakhir, misi Handshake bukan hanya tentang DNS, melainkan di (decentralized) Certificate Authority juga meskipun sekarang sudah ada organisasi non-profit yang dapat menerbitkan sertifikat secara gratis yakni Let's Encrypt.
|
||||||
|
|
||||||
|
Namun sekali lagi, bukan disitu poinnya. Bukan di non-profit, gratis, ataupun community-effort, melainkan di desentralisasi.
|
||||||
|
|
||||||
|
## Salah satu Handshake co-founder adalah Andrew Lee
|
||||||
|
|
||||||
|
Tentu saja gue udah *aware *juga tentang ini. Mungkin beberapa sudah tidak asing dengan Andrew Lee, namun jika pernah mendengar Private Internet Access (layanan VPN) dan Freenode (jaringan IRC) salah satu orang dibalik 2 organisasi tersebut adalah si Andrew ini.
|
||||||
|
|
||||||
|
Akhir-akhir ini terdapat kontroversi terkait si Andrew khususnya tentang Freenode. Andrew bukanlah orang yang baru di teknologi terkait "desentraliasi" ini mengingat dia adalah co-founder dari Mt. Gox, salah satu *exchange *Bitcoin terbesar yang pernah beroperasi.
|
||||||
|
|
||||||
|
Selain itu, dia juga dikenal sebagai salah satu "long-time privacy advocate" yang sepertinya menjadi panduan yang pas antara "desentralisasi" dan "privasi".
|
||||||
|
|
||||||
|
Bagaimanapun Handshake hanyalah sebuah protocol dan setiap orang dapat menjalankan Handshake (name) resolver nya sendiri sebagaimana salah satu benefit dari sistem yang ter-desentralisasi.
|
||||||
|
|
||||||
|
Gue tertarik untuk mengenal lebih dalam dengan Handshake dan potensinya, khususnya dibagian Certificate Authority juga.
|
||||||
|
|
||||||
|
Sejauh ini beberapa klien memiliki "trust store" nya tersendiri seperti daftar yang ada di [Mozilla](https://wiki.mozilla.org/CA/Included_Certificates), [Chromium](https://www.chromium.org/Home/chromium-security/root-ca-policy), dan [Apple](https://support.apple.com/en-us/HT204132). Jika sertifikat diterbitkan oleh CA yang "tidak diketahui" maka klien akan menampilkan peringatan sebagaimana ketika kamu mengakses [https://hi.rizaldy](https://hi.rizaldy) yang menggunakan [minica](https://github.com/jsha/minica) sebagai penerbit sertifikat.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/06/Screen-Shot-2021-06-05-at-1.30.59-AM.png)Warning di Firefox karena penerbit sertifikat tidak diketahui (minica)
|
||||||
|
## It's all about ownership, isn't it?
|
||||||
|
|
||||||
|
Ketika kamu mengakses faultable.dev menggunakan protokol HTTPS, peramban (klien) menganggap koneksi tersebut aman selain karena koneksi antara komputer kamu ke server tempat blog ini berada terenkripsi, juga karena kamu benar-benar berkomunikasi dengan server yang bertanggung jawab terkait domain faultable.dev
|
||||||
|
|
||||||
|
Jika kamu menggunakan DNS yang ditawarkan oleh Biznet, kamu tidak akan bisa mengakses https://reddit.com (per 5/6/21) karena 1) Alamat IP dari reddit.com berbeda dengan hasil yang diberikan oleh DNS Server nya Biznet dan 2) Karena poin pertama tersebut, CA (misal Let's Encrypt) tidak bisa menerbitkan sertifikat untuk reddit.com yang bila menggunakan DNS Biznet memiliki alamat IP 202.169.44.80.
|
||||||
|
|
||||||
|
Berbeda dengan situs yang menggunakan protokol HTTP, setiap server dapat berpura-pura sebagai pengelola domain tersebut karena tidak ada cara yang bisa dilakukan di level peramban untuk memvalidasi, seperti, apakah reddit.com yang diakses oleh pengguna memiliki alamat IP 202.169.44.80.
|
||||||
|
|
||||||
|
Tapi lihat poinnya disitu: Certificate Authority, yang berada di Trust Store nya peramban.
|
||||||
|
|
||||||
|
Membuktikan "ownership" terkait alamat domain disini seharusnya bisa juga dilakukan dengan cara lain misal seperti menggunakan DNSSEC yang diatur di registry dan authoritative name server yang mana beda dengan menggunakan pendekatan sertifikat yang membutuhkan pihak ketiga yakni CA.
|
||||||
|
|
||||||
|
## Penutup
|
||||||
|
|
||||||
|
Inti dari tulisan ini sebenarnya hanya 1: Sekarang edgyDNS mendukung Handshake domains! Selain memblokir permintaan ke jaringan pengiklan, pelacak, scam, dsb, sekarang edgyDNS mendukung permintaan ke nama yang didaftarkan di sistem ter-desentralisasi di blockchain Handshake!
|
||||||
|
|
||||||
|
Silahkan gunakan edgyDNS, sebuah DNS resolver yang pribadi (bahkan menggunakan DNS Recursor sendiri DNS Upsteam!), aman (setiap query divalidasi menggunakan DNSSEC, jika mendukung), cepat (server berada di Singapura), gratis, serta memblokir permintaan kepada segala sesuatu yang membuat internet menjadi menyebalkan.
|
||||||
|
|
||||||
|
Untuk ber-eksperimen ke jaringan Handshake, silahkan akses [https://hi.rizaldy](https://hi.rizaldy), and see you there!
|
90
content/emptiness.md
Normal file
90
content/emptiness.md
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
---
|
||||||
|
title: Emptiness
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: emptiness
|
||||||
|
date: 2022-04-07T12:33:00.000Z
|
||||||
|
date_updated: 2022-04-07T12:33:00.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Ever since you sit in your comfy room, you have a smart TV; high-end laptops & PCs, 100MiB/s internet, comfort chair, even Nintendo Switch. You have a couple of good books to read, interesting thoughts to write, and some crazy reflection to draw.
|
||||||
|
|
||||||
|
But you do nothing.
|
||||||
|
|
||||||
|
You don't know what to do.
|
||||||
|
|
||||||
|
You spend time sitting in front of stupid computers for 8 hours a day, talking bullshit on the Slack channels every day and writing boring code just like everyone else does. You know who you are in your 9to5 but the rest you are a nobody.
|
||||||
|
|
||||||
|
Just a name with an empty soul.
|
||||||
|
|
||||||
|
Maybe you have a dream, but you choose to keep your dream, dream.
|
||||||
|
|
||||||
|
Maybe you have friends, but those are just Instagram users.
|
||||||
|
|
||||||
|
Maybe you have a nice watch, but have no time.
|
||||||
|
|
||||||
|
You then realize that you are not as strong as your 20's.
|
||||||
|
|
||||||
|
You then realize that you don't have as much time as before though every day is still 24 hours.
|
||||||
|
|
||||||
|
Your energy is spent doing nothing but work.
|
||||||
|
|
||||||
|
You have enough money in your savings, nice stocks to trade, and some cryptocurrencies to keep. You can buy anything yet happiness is always priceless.
|
||||||
|
|
||||||
|
Who the hell needs happiness, anyway?
|
||||||
|
|
||||||
|
Then you see how people live their lives.
|
||||||
|
|
||||||
|
You sure you're happy yet all you do is laugh.
|
||||||
|
|
||||||
|
Mouth can lie but your heart can't, as you know.
|
||||||
|
|
||||||
|
There is a strange feeling in your little heart. You don't know exactly what it is but you're sure it feel like an emptiness as it's not your very first time.
|
||||||
|
|
||||||
|
You know what you have to do but you choose to not to.
|
||||||
|
|
||||||
|
You need someone to talk and know it's not Siri.
|
||||||
|
|
||||||
|
Not even your phone.
|
||||||
|
|
||||||
|
Or your refrigerator.
|
||||||
|
|
||||||
|
You know the name but not the person.
|
||||||
|
|
||||||
|
You have deep regrets but don't want to change anything.
|
||||||
|
|
||||||
|
You open Netflix but what you want to see is not there
|
||||||
|
|
||||||
|
You open Discord, Telegram, Signal, but no one you want to contact there.
|
||||||
|
|
||||||
|
Nobody knows what happened but you.
|
||||||
|
|
||||||
|
Then you choose to sleep.
|
||||||
|
|
||||||
|
Forget anything and forgive everything.
|
||||||
|
|
||||||
|
Next morning you wake up, eat, and sit in front of stupid computer again.
|
||||||
|
|
||||||
|
You say *"new day, new me"* yet it's still the same just like yesterday.
|
||||||
|
|
||||||
|
And then you write this shit and save it in a draft.
|
||||||
|
|
||||||
|
You know it won't change anything even if you publish it anywhere yet you know it won't change anything if you keep it in draft anyway.
|
||||||
|
|
||||||
|
You click publish.
|
||||||
|
|
||||||
|
Emptiness is still there but you know it's a different one.
|
||||||
|
|
||||||
|
You know you just need to talk as your head can't keep it any longer.
|
||||||
|
|
||||||
|
Then something falls in your eyes.
|
||||||
|
|
||||||
|
You know tears won't change anything yet you know it won't change anything if you don't cry anyway.
|
||||||
|
|
||||||
|
Then you realize that emptiness is a part of who you are.
|
||||||
|
|
||||||
|
Because every time emptiness knocks on your door, you let it in.
|
||||||
|
|
||||||
|
Always.
|
||||||
|
|
||||||
|
Life is always about choice and that's what you choose.
|
178
content/faultables-home-server-2021.md
Normal file
178
content/faultables-home-server-2021.md
Normal file
@ -0,0 +1,178 @@
|
|||||||
|
---
|
||||||
|
title: faultable home server 2021
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: faultables-home-server-2021
|
||||||
|
date: 2021-12-26T14:40:53.000Z
|
||||||
|
date_updated: 2021-12-26T14:40:53.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Jika melihat ke riwayat transaksi di akun Tokopedia gue, sudah 6 bulan gue menjalankan *server* dari rumah dan *totally *sudahtidak bergantung dengan IaaS untuk menyewa sebuah VM.
|
||||||
|
|
||||||
|
Sebelumnya gue menggunakan Raspberry Pi 4 yang menjalankan distro Ubuntu sebagai home server gue. Overall lumayan oke, tantangannya hanyalah arsitektur CPU yang digunakan (ARM) dan somehow lebih sering gue gunakan untuk eksperimen (seperti membuat *router*) karena portabilitasnya hahaha.
|
||||||
|
|
||||||
|
Per tahun 2021, home server yang gue gunakan ada 2 yang *basically* hanyalah sebuah komputer bertipe "Mini PC" yang penampakannya adalah seperti berikut:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/12/IMG_3312-Large.jpeg)Intel NUC x Beelink
|
||||||
|
Spesifikasinya tidak *high-end *tapi *surprisingly *dapat memenuhi kebutuhan gue dan sejauh ini belum pernah *crash*. Spesifikasi singkatnya adalah seperti berikut:
|
||||||
|
|
||||||
|
- Intel NUC KIT NUC7CJYH2 (CPU: Intel Celeron J4005 gen 7, RAM: 8GB, SSD: 120GB (internal), 500GB (external), OS: TrueNAS Core/FreeBSD)
|
||||||
|
- Beelink GK35 (CPU: Intel Quad J3455 gen 8, RAM: 8GB, SSD: 120GB, OS: Ubuntu Server)
|
||||||
|
|
||||||
|
Untuk Routergue menggunakan EdgeRouter X nya Ubiquiti dan kalau untuk Switch gue menggunakan TL-SG105E nya TP-Link.
|
||||||
|
|
||||||
|
Strateginya, gue menggunakan si NUC untuk menyimpan data utama & data backup serta untuk menjalankan aplikasi-aplikasi yang berurusan dengan data seperti Postgresql, MariaDB, Redis, Metabase, dsb yang nanti akan gue bahas detailnya.
|
||||||
|
|
||||||
|
Dan kalau si Beelink, ini untuk menjalankan aplikasi-aplikasi yang tidak berkaitan dengan data secara langsung.
|
||||||
|
|
||||||
|
Sejauh ini ada 13 [jails](https://docs.freebsd.org/en/books/handbook/jails/) yang berjalan di si NUC dan ada 22 [docker containers](https://www.docker.com/resources/what-container) yang berjalan di si Beelink.
|
||||||
|
|
||||||
|
Agar server rumah gue dapat dijangkau oleh pengguna internet, gue menggunakan layanannya, ehm, [Cloudflare](https://www.cloudflare.com/teams/access/) daripada menggunakan [Dynamic DNS](https://www.cloudflare.com/learning/dns/glossary/dynamic-dns/) karena gue males ribet hahaha.
|
||||||
|
|
||||||
|
Ilustrasinya adalah seperti ini:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/12/CleanShot-2021-12-27-at-2.49.13.png)
|
||||||
|
Dari gambar diatas "routing match" nya ditentukan oleh Nginx (daripada dari cloudflared) karena gue ingin access log nya *centralized *ke [goaccess](https://goaccess.io/) gue dan selain itu karena males ribet juga hahaha. Si nginx (dan cloudflared) ini berjalan di beelink gue jadi setiap ada request, pasti lewat si beelink dulu dan latensi dari beelink ke nuc rata-rata ~0.7ms yang gue rasa bukanlah masalah besar.
|
||||||
|
|
||||||
|
## Firewall
|
||||||
|
|
||||||
|
Khusus untuk server-server gue, gue cuma mengizinkan port 80 dan 443 yang masuk. Untuk devices gue yang lain terhubung ke router yang berbeda (tapi upstream nya tetap si edgerouter).
|
||||||
|
|
||||||
|
Firewall gue setting di edgerouter dan rules yang lumayan fleksibel dikhususkan untuk interface `tailscale0` yang berjalan di *router *gue juga. Selebihnya (seperti WAN_IN) lumayan *strict *karena, ya, internet is wild.
|
||||||
|
|
||||||
|
Untuk non-wired devices (laptop, hp, tablet, dll) jika ingin mengakses server-server gue tersebut harus melalui Tailscale dan plus gue menggunakan fitur [Subnet Router](https://tailscale.com/kb/1019/subnets/) biar gak terlalu ribet.
|
||||||
|
|
||||||
|
## VPN
|
||||||
|
|
||||||
|
Setiap server (alias setiap devices gue) pasti terpasang [Tailscale](https://tailscale.com) agar gue bisa mengakses server gue darimana saja.
|
||||||
|
|
||||||
|
Kebutuhan sehari-harinya adalah untuk *handle* DNS query, mengakses NAS via SMB, SSH, *sync *direktori via Syncthing, dan masih banyak lagi untuk services yang hanya bisa diakses di jaringan lokal.
|
||||||
|
|
||||||
|
Gue memilih Tailscale karena konfigurasinya yang... hampir zero effort. Bahkan orang non IT seperti Karina pun bisa menggunakan mengkonfigurasi VPN tanpa pernah bertanya apa itu public/private key.
|
||||||
|
|
||||||
|
Tailscale dibuat diatas Wireguard, dan sepengalaman gue, jika menggunakan Wireguard secara langsung akan menjadi ribet jika alamat IP yang digunakan oleh perangkat kita bersifat dinamis. Selain itu, gue ingin agar antar perangkat gue dapat berkomunikasi secara peer-to-peer secara "automagically" meskipun di kasus langka terkadang *traffic *gue melalui DERP nya Tailscale yang menambah ~50-100ms latensi jika somehow tidak berhasil membuat komunikasi peer-to-peer.
|
||||||
|
|
||||||
|
Dan yeah, it just works.
|
||||||
|
|
||||||
|
Tailscale adalah "Mesh VPN" yang berarti tidak bergantung dengan "satu server" yang biasa disebut sebagai "VPN Gateway".
|
||||||
|
|
||||||
|
Terkadang gue menggunakan fitur [Exit Nodes](https://tailscale.com/kb/1103/exit-nodes/) ketika sedang diluar jaringan rumah gue ketika mengakses layanan yang berkaitan dengan uang untuk menghindari "verifikasi ulang" ataupun karena dianggap terdapat aktivitas anomal.
|
||||||
|
|
||||||
|
Tailscale kurang cocok untuk "privacy-minded people" yang membutuhkan "VPN komersil" untuk "menyembunyikan" aktivitas mereka di internet (yang biasanya dari mata ISP). Hmm, sorry jika banyak tanda kutip di paragraf ini. Anyway, jika membutuhkan VPN komersil gue *recommend *menggunakan [Mullvad](https://mullvad.net/) atau jika memang benar-benar sangat ingin memproteksi aktivitas di internet, gue rekomendasi menggunakan [Tor.](https://www.torproject.org/)
|
||||||
|
|
||||||
|
## Data & Backup
|
||||||
|
|
||||||
|
Data utama disimpan di si NUC dan menggunakan File System ZFS daripda BTRFS sebagaimana yang digunakan di sistem operasi GNU/Linux.
|
||||||
|
|
||||||
|
Untuk sinkronisasi gue menggunakan [Syncthing](https://syncthing.net/) dan di si beelink gue hanya meng-sinkronisasi direktori `/var/lib/docker/volumes`.
|
||||||
|
|
||||||
|
Gue tidak mem-backup semua yang ada di NUC gue ke cloud ataupun kemanapun karena *technically *mesin tersebut adalah mesin backup. Tapi suatu saat—jika memang harus banget—akan gue pertimbangkan untuk backup ke *cloud *dengan catatan data yang diunggah harus ter-enkripsi.
|
||||||
|
|
||||||
|
Dan juga gue sudah tidak menggunakan NextCloud karena gue rasa sedikit *overkill *dan lumayan memakan memori.
|
||||||
|
|
||||||
|
Bagian yang paling ekstrimnya adalah external SSD gue *mount *via USB daripada via SATA ataupun PCIe karena... YOLO. Oke, karena gue tidak memiliki *budget *sebanyak itu, dan overall [S.M.A.R.T](https://en.wikipedia.org/wiki/S.M.A.R.T.) status untuk external SSD yang gue gunakan ([Seagate Ultra Touch](https://www.seagate.com/id/id/products/external-hard-drives/ultra-touch-external-drives/)) masih oke dengan error 0.
|
||||||
|
|
||||||
|
I/O throughput nya dapat ditoleransi karena gue rasa ~2GB/s cukup dan begitupula untuk network throughput nya yang mencapai ~1GiB/s ketika gue tes menggunakan iperf di jaringan lokal.
|
||||||
|
|
||||||
|
Kalau punya budget lebih gue recommend menggunakan NVMe jika melihat performa dari laptop yang gue gunakan sekarang.
|
||||||
|
|
||||||
|
## Layanan
|
||||||
|
|
||||||
|
### Intel NUC (FreeBSD, jails)
|
||||||
|
|
||||||
|
1. [Wordpress](https://wordpress.org/)
|
||||||
|
2. [Wordpress](https://wordpress.org/)
|
||||||
|
3. [Syncthing](https://syncthing.net/)
|
||||||
|
4. [Gitea](https://gitea.io)
|
||||||
|
5. [Redis](https://redis.io)
|
||||||
|
6. [Postgresql](https://www.postgresql.org/)
|
||||||
|
7. [MariaDB](https://mariadb.com/)
|
||||||
|
8. [Minio](https://min.io/)
|
||||||
|
9. [Metabase](https://www.metabase.com/)
|
||||||
|
10. [Radicale](https://radicale.org/v3.html)
|
||||||
|
11. [Navidrome](https://www.navidrome.org/)
|
||||||
|
12. [Roundcube](https://roundcube.net/)
|
||||||
|
13. [Plex](https://www.plex.tv/)
|
||||||
|
|
||||||
|
### Beelink (Ubuntu Server, docker)
|
||||||
|
|
||||||
|
1. [Ripe Atlas](https://github.com/Jamesits/docker-ripe-atlas)
|
||||||
|
2. [Piped](https://github.com/TeamPiped/Piped) (frontend, backend, proxy)
|
||||||
|
3. [SearxNG](https://github.com/searxng/searxng)
|
||||||
|
4. [Nginx Proxy Manager](https://github.com/jc21/nginx-proxy-manager)
|
||||||
|
5. [Pixelfed](https://github.com/pixelfed/pixelfed)
|
||||||
|
6. [Libreddit](https://github.com/spikecodes/libreddit)
|
||||||
|
7. [Mastodon](https://github.com/mastodon/mastodon) (frontend, worker, stream)
|
||||||
|
8. [UISP](https://hub.docker.com/r/nico640/docker-unms)
|
||||||
|
9. [Watchtower](https://github.com/containrrr/watchtower)
|
||||||
|
10. [Umami](https://github.com/mikecao/umami/)
|
||||||
|
11. [The Lounge](https://github.com/thelounge/thelounge)
|
||||||
|
12. [Morty](https://github.com/asciimoo/morty)
|
||||||
|
13. [Espial](https://github.com/jonschoning/espial)
|
||||||
|
14. [Firefly III](https://github.com/firefly-iii/firefly-iii)
|
||||||
|
15. [Ghost](https://github.com/TryGhost/Ghost)
|
||||||
|
16. [Ghost](https://github.com/TryGhost/Ghost)
|
||||||
|
17. [Keyoxide](https://codeberg.org/keyoxide/keyoxide-web)
|
||||||
|
18. [Nitter](https://github.com/zedeus/nitter)
|
||||||
|
|
||||||
|
Selain itu juga menjalankan [blocky](https://github.com/0xERR0R/blocky), [dnsproxy](https://github.com/AdguardTeam/dnsproxy), syncthing, dan cloudflared di mesin ini.
|
||||||
|
|
||||||
|
## Stats
|
||||||
|
|
||||||
|
Karena limitasi dari Cloudflare, berikut ringkasan selama 30 hari analitik dari semua domain (termasuk blog ini) yang menggunakan server rumah gue:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/12/CleanShot-2021-12-27-at-4.00.55.png)
|
||||||
|
Angka tersebut relatif kecil tapi setidaknya server di rumah gue bisa mengatur 413k requests (sekitar 13k/hari) masuk dari pengguna internet!
|
||||||
|
|
||||||
|
## Next steps
|
||||||
|
|
||||||
|
Gue tertarik menjalankan [supabase](https://github.com/supabase/supabase) dan [retool](https://github.com/tryretool/retool-onpremise) tapi melihat *setup *nya lumayan ribet.
|
||||||
|
|
||||||
|
Selain itu gue tertarik menggunakan [TrueNAS Scale](https://www.truenas.com/truenas-scale/) daripada Ubuntu biasa karena dashboard nya yang fancy hahaha.
|
||||||
|
|
||||||
|
Masih di tahap eksperimen, gue bermain-main dengan VPN komersil agar meng-forward traffic *on-demand *untuk layanan yang melakukan *scrapping *seperti SearxNG, Libreddit, Piped, Nitter, dan The Lounge.
|
||||||
|
|
||||||
|
In other side gue belum ada rencana buat nambah server baru karena gue rasa yang sekarang pun sudah cukup untuk kebutuhan gue.
|
||||||
|
|
||||||
|
Jika ingin mengunjungi layanan yang berjalan di server rumah gue (dan bukan yang sangat private), silahkan bermain ke:
|
||||||
|
|
||||||
|
- faultable.dev (ghost)
|
||||||
|
- u.faultable.dev (umami)
|
||||||
|
- faultable.blog (ghost)
|
||||||
|
- dav.rizaldy.club (radicale)
|
||||||
|
- music.rizaldy.club (navidrome)
|
||||||
|
- bookmarks.rizaldy.club (espial)
|
||||||
|
- money.rizaldy.club (firefly iii)
|
||||||
|
- edgy.social (mastodon)
|
||||||
|
- px.edgy.social (pixelfed)
|
||||||
|
- piped.edgy.social (piped)
|
||||||
|
- nitter.edgy.social (nitter)
|
||||||
|
- libreddit.edgy.social (libreddit)
|
||||||
|
- s3.edgy.social (minio)
|
||||||
|
- git.edgy.social (gitea)
|
||||||
|
- id.edgy.social (keyoxide)
|
||||||
|
- init8.lol (wordpress)
|
||||||
|
- uisp.init8.lol (uisp)
|
||||||
|
- irc.edgy.social (the lounge)
|
||||||
|
|
||||||
|
Please jangan nakal apalagi atau subnet lo gue blokir secara permanen nanti :p
|
||||||
|
|
||||||
|
## Biaya
|
||||||
|
|
||||||
|
- Intel NUC: **2,835,900** IDR
|
||||||
|
- Beelink: **2,625,500** IDR
|
||||||
|
- TP-Link TL-SG105E: **394,000** IDR
|
||||||
|
- EdgeRouter X: **1,231,000** IDR
|
||||||
|
- Listrik: 0 IDR (biaya bulanan, dan pemakaiannya luas)
|
||||||
|
- Internet: 0 IDR (kosan, 100Mbps)
|
||||||
|
- Total: **7,086,400** IDR
|
||||||
|
|
||||||
|
## Penutup
|
||||||
|
|
||||||
|
Gue tidak banyak bercerita tentang si switch, intinya gue pakai doi cuman buat VLAN untuk saat ini (tanpa harus reset router gue karena salah konfig).
|
||||||
|
|
||||||
|
Tujuan gue melakukan *[self-hosting](https://github.com/awesome-selfhosted/awesome-selfhosted)*ini adalah selain karena prinsip (anjay moment) juga untuk memastikan bahwa data-data gue berada di tempat yang bisa gue kontrol secara penuh.
|
||||||
|
|
||||||
|
Selain itu, juga untuk mengurangi kebergantungan kepada pihak ketiga (or the cloud) yang menjalankan layanan di internet.
|
||||||
|
|
||||||
|
Jika ada pertanyaan (atau tertarik ingin melakukan self-hosting juga) bisa bermain ke [Discord evilfactorylabs](https://evlfctry.pro/discord) yang hening ini atau bisa [japri](https://s3.rizaldy.club/rizaldy-club-ghost/contact/) seperti biasa.
|
||||||
|
|
||||||
|
Thank you!
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/12/IMG_3314-Large.jpeg)
|
67
content/faultables-home-server-2023.md
Normal file
67
content/faultables-home-server-2023.md
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
---
|
||||||
|
title: faultables home server 2023
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: faultables-home-server-2023
|
||||||
|
date: 2023-10-07T14:49:48.000Z
|
||||||
|
date_updated: 2023-10-07T14:49:48.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
2 tahun berlalu semenjak tulisan [faultable home server 2021](https://s3.rizaldy.club/rizaldy-club-ghost/faultables-home-server-2021/) yang *technically *tidak ada banyak perubahan dengan tulisan itu. Server Beelink GK35 sudah tidak digunakan karena pada saat itu (awal 2022 ig?) completely meninggoy dan sempat gue jadikan asbak (why not) saat masih di Bandung. Router dan Switch masih menggunakan barang yang sama, tapi sistem operasi yang digunakan menjadi Ubuntu 22.04 (Jammy Jellyfish, LTS) dari yang sebelumnya FreeBSD dan tentu saja masih menggunakan Tailscale sebagai VPN.
|
||||||
|
|
||||||
|
Container yang berjalan juga sudah tidak sebrutal kemarin yang sampai 30+, per tulisan ini diterbitkan hanya 18 container yang berjalan. Sebelumnya (circa pertengahan 2022) container berjalan langsung di si NUC, tapi di 5 Oktober 2023 pada akhirnya gue memutuskan untuk menjalankannya di VM via [KVM.](https://www.linux-kvm.org/page/Main_Page)
|
||||||
|
|
||||||
|
## In Alpine Linux we trust
|
||||||
|
|
||||||
|
Ada 5 VM yang berjalan di mesin dengan 2 CPU dan 8 GB memory ini:
|
||||||
|
|
||||||
|
- arabasta (Alpine 3.18), PostgreSQL
|
||||||
|
- dressrosa (Alpine 3.18), MariaDB
|
||||||
|
- vira (Alpine 3.18), Minio
|
||||||
|
- yuki (Alpine 3.18), Redis
|
||||||
|
- water7 (Debian 12, bookworm), App (all containers)
|
||||||
|
|
||||||
|
Yang masing-masing memiliki spec tersendiri.
|
||||||
|
|
||||||
|
Penggunaan sumber daya nya relatif ringan, berikut tampilan dari `htop(1)` di hari yang normal:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2023/10/CleanShot-2023-10-08-at-04.13.44.png)
|
||||||
|
Alpine gue pilih karena [Small, Simple, dan Secure nya](https://alpinelinux.org/about/) (plus masih mempelajari lebih lanjut tentang OS ini) dan ada menggunakan Debian karena berkaitan dengan kompatibilitas dan preferensi pribadi yang mana gue sudah relatif "kenal" dengan OS tersebut dan beberapa program ada yang masih bergantung dengan systemd.
|
||||||
|
|
||||||
|
Host OS tetap menggunakan Ubuntu karena males ganti-ganti lol.
|
||||||
|
|
||||||
|
## Mac mini to the club
|
||||||
|
|
||||||
|
Kapan hari gue iseng membeli Mac Mini M2 dengan spek 8 CPU dan 8 GB memory yang tentu saja dengan arsitektur armv8 (aarch64). Karena dukungan [Asahi Linux](https://asahilinux.org) yang masih minim untuk chipset ini, dengan senang hati gue menggunakan Mac OS Sonoma yang sudah mendukung Virtualization.framework sebagai Hypervisor sejak Mac OS 11 (Big Sur).
|
||||||
|
|
||||||
|
Disini gue menggunakan [Orbstack](https://orbstack.dev) dan menjalankan 5 VM (3 NixOS (devbox) dan 2 Ubuntu (playground) alias Linux VMs) yang tidak kalah blazing-fast™ dengan KVM di Linux, meskipun gue masih meragukan kestabilannya (terlebih masih ada *kendala *terkait dynamic memory allocation di Mac OS).
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2023/10/CleanShot-2023-10-08-at-04.48.09.png)
|
||||||
|
Sejauh ini baru 2 container yang berjalan diatas Orbstack langsung: peertube-runner untuk menjalankan goddamned ffmpeg dan reverse proxy untuk... you know, proxy thing.
|
||||||
|
|
||||||
|
Gue mempertimbangkan menjalankan Linux machine di Mac Mini ini karena gue setup FileVault disini dan setup LUKS di mesin Linux langsung cukup membuat frustasi. Untuk saat ini gue hanya berharap bahwa file qcow2 disana tidak ada yang menganggu jika HDD gue pada suatu hari dicurry.
|
||||||
|
|
||||||
|
## Networking
|
||||||
|
|
||||||
|
Driver yang digunakan masih sama (bridge) dan komunikasi antar VM gue rasa relatif cepat.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2023/10/CleanShot-2023-10-08-at-04.17.44.png)
|
||||||
|
Tidak jauh berbeda dengan komunikasi antar container yang berada di 1 VM yang sama:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2023/10/CleanShot-2023-10-08-at-04.29.57.png)
|
||||||
|
Meskipun memiliki subnet tersendiri (192.168.122.0/24), isolasi penuh belum gue terapkan sehingga koneksi keluar (di LAN yang berbeda subnet) masih terjadi.
|
||||||
|
|
||||||
|
Untuk saat ini koneksi dari internet ke jaringan rumah gue masih bergantung dengan Cloudflare, tentu saja ada rencana untuk keluar, mungkin di akhir tahun?
|
||||||
|
|
||||||
|
## Penutup
|
||||||
|
|
||||||
|
Penampakan terakhir barang-barang di jaringan rumah gue seperti ini (hell yes udah gw setup failover untuk internet di rumah):
|
||||||
|
|
||||||
|
Entah kenapa gue cukup malas buat bersihin debu dari langit jakarta.
|
||||||
|
|
||||||
|
Setup ini tidak scalable (in terms of CPU/memory/storage) tapi setidaknya cukup untuk kebutuhan gue (meskipun selalu ingin lebih).
|
||||||
|
|
||||||
|
Waktu migrasi ke VM, gue kepikiran buat setup OpenStack alih-alih menggunakan virsh yang cukup ribet. Tapi setelah dipikir-pikir saat mandi, gue rasa lebih ribet manage OpenStack daripada mengingat perintah apapun yang ada di [libvirt.](https://www.libvirt.org/manpages/)
|
||||||
|
|
||||||
|
Jika ada yang bertanya kenapa pindah ke VM, alasannya adalah:
|
||||||
|
|
||||||
|
1. Gue ada *concern *dengan data at-rest
|
||||||
|
2. Backup lebih mudah (ehm snapshot VM) meskipun tidak efisien
|
||||||
|
|
||||||
|
Kenapa tidak dari dulu aja migrasi ke VM nya? Well, dapat hidayah nya pas 05 Oktober 2023 gan.
|
165
content/fucking-past.md
Normal file
165
content/fucking-past.md
Normal file
@ -0,0 +1,165 @@
|
|||||||
|
---
|
||||||
|
title: Fucking past
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: fucking-past
|
||||||
|
date: 2021-11-25T12:50:10.000Z
|
||||||
|
date_updated: 2021-11-25T12:50:47.000Z
|
||||||
|
excerpt: but what if we also have a future
|
||||||
|
---
|
||||||
|
|
||||||
|
Jam menunjukkan 11.11 PM, hari ini adalah Kamis yang bertepatan pada tanggal 25 November 2021. Gue sedang berdiri menatap langit sambil menghabiskan sebatang rokok sialan yang selalu memaksa untuk ingin dibakar di setiap harinya.
|
||||||
|
|
||||||
|
Hari cepat berlalu meskipun 1 hari selalu setara dengan 24 jam sampai kapan pun itu.
|
||||||
|
|
||||||
|
Gue memikirkan apa yang terjadi pada hari ini.
|
||||||
|
|
||||||
|
Karena bila hari esok sudah tiba, hari ini sudah menjadi bagian dari masa lalu gue.
|
||||||
|
|
||||||
|
Pikiran gue bepergian dan berandai-andai ke 20 tahun kedepan alias ketika gue berumur 44 tahun. Gue berpikiran *"bagaimana jika ketika gue tua nanti sakit-sakitan dan memiliki penyakit paru-paru?" *besar kemungkinan yang gue salahkan adalah diri gue sendiri pada usia muda yang mana masih aktif merokok.
|
||||||
|
|
||||||
|
Selain itu, gue berpikiran seperti *"bagaimana jika gue nanti sedang tinggal di tempat impian gue bersama seseorang yang gue impikan" *besar kemungkinan gue akan berterima kasih kepada diri gue kala itu yang tidak lelah berjuang untuk hasil yang bisa gue rasakan pada saat ini.
|
||||||
|
|
||||||
|
Diri gue pada 20 tahun nanti ditentukan oleh diri gue pada hari ini — sebuah kalimat yang sebenarnya sudah muak gue dengar dan baca, namun gue rasa begitulah kenyataannya.
|
||||||
|
|
||||||
|
Gue membakar batang kedua sambil lanjut mengetik tulisan ini.
|
||||||
|
|
||||||
|
Setiap orang memiliki banyak masalah dihidupnya, dan beragam. 2 masalah yang paling laku gue rasa adalah karir dan hubungan asmara.
|
||||||
|
|
||||||
|
Brengseknya, 2 masalah tersebut selalu berkaitan dengan masa lalu.
|
||||||
|
|
||||||
|
Mantan narapidana? Good luck mendapatkan pekerjaan yang layak!
|
||||||
|
|
||||||
|
Memiliki track record yang kurang bagus di perusahaan sebelumnya? Berharaplah agar pihak HR tidak mengetahuinya!
|
||||||
|
|
||||||
|
Pernah menjadi korban doxing? Cancelled? Masuk blocklist?
|
||||||
|
|
||||||
|
Pernah merasakan cinta tak terbalas karena peran seseorang di masa lalu?
|
||||||
|
|
||||||
|
Pernah diputuskan hubungan percintaan karena masalah dengan masa lalu?
|
||||||
|
|
||||||
|
Pernah memiliki masalah kepercayaan karena pengalaman di masa lalu?
|
||||||
|
|
||||||
|
Masa lalu bukan berarti selalu mengikuti kita kemanapun kita melangkah, melainkan ia selalu berada disana.
|
||||||
|
|
||||||
|
Menjadi bagian dari diri kita.
|
||||||
|
|
||||||
|
Sampai kapanpun.
|
||||||
|
|
||||||
|
Lalu gue menatap ponsel gue. Ada sedikit goresan dilayarnya dan terdapat beberapa warna yang pudar di silicon case nya. Ponsel ini adalah ponsel yang sama dengan yang gue beli sekitar 8 bulan yang lalu. Meskipun terlihat berbeda dengan yang ketika pertama kali gue beli, nyatanya ini adalah ponsel yang sama.
|
||||||
|
|
||||||
|
Dan masih gue gunakan sampai hari ini.
|
||||||
|
|
||||||
|
Jam 00.57 kemarin gue mendapatkan pesan dari nomor yang tidak ada di kontak gue. Pesan tersebut cukup panjang dan dikirim oleh seseorang yang pernah dekat dengan gue sekitar 4 tahun lalu. Tidak banyak yang diceritakan, namun yang paling gue soroti adalah bagaimana penglihatan dia terhadap diri gue pada saat ini.
|
||||||
|
|
||||||
|
Diri gue pada umur 20 tidak sama dengan diri gue pada umur 24 seperti saat ini. Manusia selalu berubah—terlepas menjadi lebih baik atau sebaliknya—dan tidak jarang juga terus belajar. Apa yang dia lihat terhadap diri gue pada dasarnya tidak salah namun gue yakin sudah tidak relevan lagi karena pengetahuan dan atau pengalaman pada dasarnya bersifat empiris, dan suatu saat akan tiba masanya ketika sudah tidak relevan lagi karena kenyataannya yang sudah berbeda.
|
||||||
|
|
||||||
|
Tapi gue bisa mengerti.
|
||||||
|
|
||||||
|
Sangat mengerti.
|
||||||
|
|
||||||
|
Pada suatu waktu gue duduk berhadapan dengan seseorang yang sudah gue kenal, hanya berdua. Gue sangat hafal dengan wajahnya, suaranya dan ekspresinya ketika berbicara dari orang ini.
|
||||||
|
|
||||||
|
Singkat cerita, kami membahas masa lalu, alias, tentang apa yang sudah terjadi pada diri kami masing-masing yang spesifiknya ketika kami sedang tidak bersama.
|
||||||
|
|
||||||
|
Setelah bercerita, pemandangan kami berdua berubah.
|
||||||
|
|
||||||
|
Dua orang yang sedang duduk di tempat ini pada saat ini tidak terlihat seperti dua orang yang sama ketika sebelum saling bercerita. Pandangan gue terhadap dia terhalang akan kejadian yang baru saja dia ceritakan, begitupula sebaliknya.
|
||||||
|
|
||||||
|
Lalu gue membakar batang rokok ketiga, dan ini adalah aktivitas yang sama ketika gue selesai mendengarkan cerita dari orang tersebut pada waktu itu.
|
||||||
|
|
||||||
|
Gue menghisap rokok dalam-dalam, sangat dalam. Lalu menghembuskannya perlahan sambil berdalih menutupi tarikan nafas panjang yang biasanya menggambarkan akan beratnya realita yang dihadapi.
|
||||||
|
|
||||||
|
Pertanyaan besar yang berada dipikiran kami berdua gue yakin adalah *"bagaimana bila kita tidak saling bercerita?" *namun gue rasa masalah intinya bukan disitu. Melainkan *"bagaimana bila seandainya kita masing-masing tidak melakukan hal itu?"*
|
||||||
|
|
||||||
|
Namun jarum jam terus berjalan, langit semakin gelap, dan apa yang sudah terjadi, sudah terjadi.
|
||||||
|
|
||||||
|
Jangankan memutar ulang waktu, memberhentikannya saja adalah hal yang mustahil dilakukan.
|
||||||
|
|
||||||
|
Lalu lamunan kami terhenti.
|
||||||
|
|
||||||
|
Masih ada waktu tersisa yang bisa dimanfaatkan pada saat ini begitupula masih ada masa depan yang belum kita lalui, baik untuk masing-masing atau apapun itu.
|
||||||
|
|
||||||
|
Obrolan kembali berlanjut sambil menyembunyikan kebimbangan masing-masing sampai kondisi mengharuskan untuk beranjak pergi dari tempat ini.
|
||||||
|
|
||||||
|
Kami berdua gue rasa memutuskan untuk meninggalkan apa yang sudah diceritakan di tempat itu pada waktu itu, disana. Dan tidak akan membahasnya lagi di lain tempat dan di lain waktu.
|
||||||
|
|
||||||
|
Tentu apa yang sudah kami berdua ketahui tersebut sulit untuk dilupakan, apalagi hanya sekadar dihiraukan. Tidak jarang terlintas hal tersebut setiap kali melihat sosok dari diri kami masing-masing.
|
||||||
|
|
||||||
|
Gue membakar batang rokok keempat gue.
|
||||||
|
|
||||||
|
Lagi-lagi menghisapnya sangat dalam dan menghembuskannya secara perlahan.
|
||||||
|
|
||||||
|
Gue pergi ke meja kerja gue di kamar dan membuka laptop sambil melanjutkan tulisan ini.
|
||||||
|
|
||||||
|
Waktu menunjukkan 01.44 AM, sudah 2 jam 33 menit terlewat dari aktivitas ketika gue menatap langit di balkon kamar sampai ke kursi tempat gue duduk sekarang.
|
||||||
|
|
||||||
|
Jika seandainya 2 jam 33 menit tersebut gue gunakan untuk melanjutkan pekerjaan, gue rasa gue bisa menyelesaikan 3 validasi terkait operasi UNION yang sedang gue kembangkan sekarang.
|
||||||
|
|
||||||
|
Tapi sekali lagi, kita tidak bisa memutar ulang waktu.
|
||||||
|
|
||||||
|
Apa yang sudah terjadi, sudah terjadi.
|
||||||
|
|
||||||
|
Dan alih-alih menyesali 2 jam 33 menit yang sudah berlalu tersebut, gue memilih untuk melanjutkan tulisan ini sampai menerbitkannya sehingga mungkin gue bisa kembali melanjutkan pekerjaan sambil menunggu diri gue mengantuk agar bisa merasa bahwa 2 jam 33 menit tersebut tidak terbuang sia-sia.
|
||||||
|
|
||||||
|
Plus, ada beban terkait pekerjaan yang berkurang.
|
||||||
|
|
||||||
|
Proses 'memilih' tersebut tingkat kesulitannya bersifat relatif, namun dibanyak kasus, tingkat kesulitannya mendekati sulit.
|
||||||
|
|
||||||
|
Dan jalan keluarnya gue rasa cuma satu: berdamai dengan hal itu, dan ini bagian paling beratnya.
|
||||||
|
|
||||||
|
Karena melupakan & menghiraukan bukanlah jalan keluar utama, melainkan jalan lain yang bisa dianggap jalan pintas yang mana tidak menyelesaikan masalah utama.
|
||||||
|
|
||||||
|
Gue membakar batang rokok kelima gue.
|
||||||
|
|
||||||
|
Dan lagi-lagi menghisapnya sangat dalam dan menghembuskannya secara perlahan.
|
||||||
|
|
||||||
|
Berdamai—atau mengikhlaskan apa yang sudah terjadi—bukanlah hal yang mudah, dan juga tidak ada yang bilang bahwa itu adalah hal yang mudah.
|
||||||
|
|
||||||
|
Namun terkadang, waktu berperan besar dalam membantu kita untuk melakukan hal itu. Tidak jarang dibantu dengan kejadian-kejadian lain juga yang membuat diri kita terus belajar & berkembang.
|
||||||
|
|
||||||
|
Ada waktunya untuk bisa berdamai dengan hal itu, dan ini tinggal menunggu waktunya.
|
||||||
|
|
||||||
|
Sambil menunggunya, kita bisa melakukan hal-hal lain alih-alih terus terlarut akan hal itu yang berpotensi menjadi bottleneck dalam melanjutkan kehidupan.
|
||||||
|
|
||||||
|
Namun satu hal yang harus gue soroti adalah untuk bisa menghindari melakukan kesalahan besar di masa yang akan datang, khususnya untuk kesalahan yang sama.
|
||||||
|
|
||||||
|
Karena masa lalu seperti pisau bermata dua.
|
||||||
|
|
||||||
|
Ia bisa membantu diri kita di masa sekarang dan masa depan namun di lain sisi bisa juga menghancurkan diri kita di masa sekarang dan masa depan.
|
||||||
|
|
||||||
|
So, do your best for your past, I guess?
|
||||||
|
|
||||||
|
Gue membakar batang rokok keenam gue.
|
||||||
|
|
||||||
|
Jika dihitung dari bangun tidur kemarin, gue rasa ini adalah rokok keenam belas gue yang gue hisap sebelum gue beranjak tidur nanti.
|
||||||
|
|
||||||
|
Kali ini gue menghisapnya biasa aja dan menghembuskannya secara biasa aja. Hanya menikmati perasaan menenangkan berkat nikotin yang meskipun akan menjadi penyakit pada diri gue nanti jika gue tidak berhenti melakukan ini.
|
||||||
|
|
||||||
|
Gue melihat jam, waktu menunjukkan 02:22 AM kali ini.
|
||||||
|
|
||||||
|
Gue tidak tahu apa yang akan terjadi setelah gue bangun tidur nanti tapi gue memiliki rencana sekalipun mungkin rencana gue hanyalah bekerja. Lalu gue mematikkan lampu kamar, menutup jendela, dan menyalakan air purifier untuk membantu mengurangi bekas bau asap rokok.
|
||||||
|
|
||||||
|
Diatas kasur sambil menatap langit-langit kamar yang gelap gue memikirkan kembali kemungkinan-kemungkinan yang terjadi bila seandainya salah satu ataupun masing-masing bila tidak melakukan hal itu.
|
||||||
|
|
||||||
|
Kejadian saling bercerita tersebut terasa seperti baru 1 minggu terlewat, yang pada kenyataannya baru 7 jam yang lalu.
|
||||||
|
|
||||||
|
Gue rasa esok hari akan terasa lebih berat dari biasanya.
|
||||||
|
|
||||||
|
Tapi kabar baiknya gue rasa gue memiliki pilihan untuk melanjutkan hari dan merasa lebih berat dari biasanya ataupun menganggapnya seperti pada biasanya yang mungkin sebagaimana ketika percakapan tersebut tidak terjadi.
|
||||||
|
|
||||||
|
Dan gue bukan berarti mencoba untuk kabur dari masalah, melainkan hanya mengatur prioritas. Lalu menunggu waktu sambil melanjutkan kehidupan serta terus belajar dan berkembang.
|
||||||
|
|
||||||
|
Lalu gue menutup laptop.
|
||||||
|
|
||||||
|
Dan menutup hari dengan beranjak tidur.
|
||||||
|
|
||||||
|
We—as human beings—definitely have a past, a fucking past.
|
||||||
|
|
||||||
|
But we also have a future, right?
|
||||||
|
|
||||||
|
So, stop getting down and let's fuck up the future.
|
||||||
|
|
||||||
|
Masih ada masa depan yang menunggu untuk bisa kita rusak yang pada akhirnya akan menjadi masa lalu kita pada suatu saat nanti.
|
||||||
|
|
||||||
|
Just kidding, unless?
|
153
content/fud.md
Normal file
153
content/fud.md
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
---
|
||||||
|
title: FUD
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: fud
|
||||||
|
date: 2021-10-19T14:37:33.000Z
|
||||||
|
date_updated: 2021-10-19T14:37:33.000Z
|
||||||
|
excerpt: fear, uncertainty, doubt.
|
||||||
|
---
|
||||||
|
|
||||||
|
Setidaknya ada 3 hal yang manusia benci baik sadar maupun tidak sadar: Ketakutan, ketidakpastian, keraguan. Generally speaking, bukan tanpa alasan mengapa terkadang kita berdoa sebelum melakukan perjalanan; menyisihkan uang gaji untuk ber-investasi, membayar lebih demi garansi, ataupun berlangganan pada salah satu produk asuransi.
|
||||||
|
|
||||||
|
Semata-mata untuk melawan 3 hal diatas yang hasilnya membuahkan ketenangan, baik hanya untuk sementara ataupun selama mungkin. Gue pribadi melakukan hal serupa, beribadah sebisa mungkin; membuat anggaran dari uang gaji untuk menabung & ber-investasi (still not sure if it's a *different *thing), dan berlangganan produk asuransi yang ditawarkan oleh kantor.
|
||||||
|
|
||||||
|
Yang tujuannya untuk setidaknya mengurangi ketakutan, ketidakpastian, dan keraguan yang gue miliki dalam hidup karena yang sudah banyak gue memiliki.
|
||||||
|
|
||||||
|
Dari 3 hal diatas, yang paling gue benci adalah ketidakpastian. Manusia selalu dihantui ketidakpastian dari bangun tidur sampai akan tertidur lagi nanti. Apa yang akan terjadi pada hari ini? Apa yang akan terjadi besok? Apakah besok gue masih bangun diatas ranjang atau di alam kubur? Akan ada masalah apa lagi pada hari ini?
|
||||||
|
|
||||||
|
Bagaimanapun ketidakpastian adalah sesuatu yang tidak bisa dihindari, dan biasanya satu hal yang bisa gue lakukan untuk menghadapinya adalah dengan [membiasakan](https://s3.rizaldy.club/rizaldy-club-ghost/que-sera-sera/). Karena sekali lagi, ada sesuatu yang bisa dan tidak bisa kita kontrol, maka apa lagi yang bisa kita lakukan selain pasrah setelah mempersiapkan & berusaha semaksimal mungkin?
|
||||||
|
|
||||||
|
Kembali ke topik FUD, dalam dunia InfoSec topik ini lumayan laris khususnya ketika menanggapi orang-orang yang termakan akan hal itu khususnya oleh penyedia layanan "VPN komersil" yang selalu menyerukan bahwa jaringan internet kita tidak pribadi dan seseorang sedang menguntit kita.
|
||||||
|
|
||||||
|
Meskipun di lain sisi hal diatas sedikit benar, tapi ada satu hal yang jarang sekali orang awam seperti kita perhatikan: Threat model.
|
||||||
|
|
||||||
|
Misal begini, lo naik motor malam-malam sendirian di jakal. Ada satu motor dengan dua penumpang yang mengikuti lo di belakang, lalu apa yang lo pikirkan dan yang paling penting apa yang bakal lo lakukan?
|
||||||
|
|
||||||
|
Banyak kemungkinan yang bisa dipilih: Menyamakan kecepatan lalu menendangnya dari samping, berhenti dan memastikan bahwa mereka tidak mengikuti, ataupun tetap santai dan menganggap tidak ada yang salah.
|
||||||
|
|
||||||
|
Apapun tindakan yang lo pilih, setidaknya lo sudah memikirkannya. Sekarang begini, bagaimana bila mereka memang mengikuti namun dengan maksud baik seperti menemani? Atau mereka pun ternyata merasakan hal yang sama dengan lo? Atau yang memang orang random aja yang lagi jalan-jalan malam?
|
||||||
|
|
||||||
|
Atau bagaimana jika mereka memang gangster?
|
||||||
|
|
||||||
|
Setelah memikirkannya kemungkinan-kemungkinan yang ada, baru lo memikirkan kemungkinan-kemungkinan apa yang akan terjadi bila hal diatas... terjadi.
|
||||||
|
|
||||||
|
Sekarang begini, mengapa orang menabung? Misal, untuk persiapan di masa depan. Lalu bila ada pertanyaan lanjutan yang sekiranya menimbulkan keraguan terhadap kita seperti *bagaimana bila ternyata besok kiamat? Bagaimana bila kita tidak akan pernah menikmati tabungan tersebut? Bagaimana bila hari ini adalah kesempatan terakhir kita untuk hidup? *Dsb.
|
||||||
|
|
||||||
|
Pada dasarnya dalam threat modeling ada 4 pertanyaan yang harus bisa dijawab:
|
||||||
|
|
||||||
|
- Apa yang kita lakukan?
|
||||||
|
- Apa yang sekiranya salah?
|
||||||
|
- Apa yang akan kita lakukan jika suatu hal terjadi?
|
||||||
|
- Apakah yang kita lakukan sudah baik?
|
||||||
|
|
||||||
|
Kita ambil konteks dalam aktivitas menabung, jadi, mari kita jawab 4 pertanyaan diatas:
|
||||||
|
|
||||||
|
- Menggunakan dana dari tabungan untuk dana darurat
|
||||||
|
- Tidak menganggarkan uang darurat juga, mungkin?
|
||||||
|
- Mengambil dana yang ada di tabungan sebagai dana darurat
|
||||||
|
- Kurang efektif, harusnya dana darurat berada di anggaran terpisah sehingga tidak mempengaruhi tujuan dari aktivitas menabung tersebut
|
||||||
|
|
||||||
|
Poin nomor empat diatas terasa sedikit negatif, mari kita buat *counterpart *nya untuk yang sedikit positif:
|
||||||
|
|
||||||
|
- Kurang efektif tapi lumayan efisien, karena masih ada kebutuhan primer lain dan sedangkan prioritas dalam tujuan dari menabung tersebut tidak sepenting apa yang harus dilakukan dengan kebutuhan dana darurat yang dibutuhkan.
|
||||||
|
|
||||||
|
Idk, apakah ini relevan atau tidak dengan Threat Modeling yang ada di dunia InfoSec, sejauh yang gue pahami kira-kira seperti itu. Jawaban-jawaban yang ada bersifat relatif dan disesuaikan dengan keadaan masing-masing.
|
||||||
|
|
||||||
|
## Vulnerability
|
||||||
|
|
||||||
|
Sebagai umat muslim, beribadah—khususnya solat—adalah sebuah kewajiban selama 5 waktu dalam 24 jam. Jawaban dari pertanyaan "*mengapa solat?" *sangat beragam, dari yang tujuan ibadah secara harfiah seperti "untuk mengingat tuhan" sampai ke jawaban klasik seperti "untuk mendapatkan pahala dan terhindar dari dosa".
|
||||||
|
|
||||||
|
Dalam sebuah sistem, ada sebuah konsep bernama "vulnerability" yang tujuannya untuk melakukan exploit. Vulnerability (kerentanan) ini adalah sebuah celah keamanan, dan karena adanya kerentanan tersebut tujuannya dari si penyerang adalah untuk memanfaatkan agar bisa melakukan "eksploitasi" dengan "payload" yang benar.
|
||||||
|
|
||||||
|
Mari kita ambil contoh dari para penyedia layanan VPN komersil yang memasarkan produk mereka. Apa yang mereka gunakan sebagai bahan utama dalam pemasaran? Ancaman. Seruan bahwa privasi di dunia digital kita sedang terancam, dan menggunakan VPN mereka adalah bentuk perlawanannya.
|
||||||
|
|
||||||
|
Bagi yang masih sedikit awam khususnya dalam topik privasi; industri periklanan, data mining, dsb, besar kemungkinan iklan tersebut efektif. Siapa juga yang tidak tenang bila aktivitas ber-internet kita diawasi oleh "pihak ketiga" yang tertarik untuk mengolah data dari aktivitas kita tersebut?
|
||||||
|
|
||||||
|
Siapa juga yang tidak tenang bila ada seorang "hacker" yang berada di jaringan kita dan menguntit (ataupun memodifikasi) data (alias paket internet) yang kita kirim dan terima?
|
||||||
|
|
||||||
|
Dan siapa juga yang tidak risih ketika kita sedang mencari tentang "budget nikah" lalu tidak lama kemudian kita mendapatkan promosi terkait hotel murah di Jogja yang cocok untuk ber-bulan madu?
|
||||||
|
|
||||||
|
Ketakutan dan ketidakpastian adalah hal yang paling laku dijual kepada manusia. Dari promo (hanya minggu ini!), cashback (kapan lagi ya ga?), jaminan (momen bagaimana jika...), dsb adalah hal yang lumrah kita lihat & rasakan pada hari ini.
|
||||||
|
|
||||||
|
Dan ketika sudah berada di titik keraguan, disini eksploitasi bisa mulai dilakukan ketika kita sudah merasa rentan. Dengan "payload" yang pas, maka akan mendapatkan throughput yang diharapkan.
|
||||||
|
|
||||||
|
Yang diuntungkan?
|
||||||
|
|
||||||
|
Entahlah.
|
||||||
|
|
||||||
|
FUD menjadi alat menyerang yang efektif karena tidak ada satupun yang bisa melihat masa depan.
|
||||||
|
|
||||||
|
Dan setidaknya, kita mendapatkan "ketenangan" karena keraguan tersebut mungkin sudah tidak dirasakan lagi kehadirannya.
|
||||||
|
|
||||||
|
Yang berarti kita sebisa mungkin meyakinkan bahwa yang diuntungkan adalah kita, yang mungkin tanpa memikirkan jawaban akan 4 pertanyaan yang pernah disinggung.
|
||||||
|
|
||||||
|
## Penutup
|
||||||
|
|
||||||
|
Tentu saja maksud dan tujuan gue menulis tentang FUD disini topik utamanya bukanlah tentang membahas seputar layanan VPN komersil, InfoSec, bagaimana hacker melakukan hacking, atau apapun itu yang terlihat keren dan pintar.
|
||||||
|
|
||||||
|
Somehow terkadang gue merasa lelah dengan ketidakpastiaan.
|
||||||
|
|
||||||
|
Sampai kapan hidup gue akan terus begini?
|
||||||
|
|
||||||
|
Akan menjadi apa gue pada 5 tahun kedepan nanti?
|
||||||
|
|
||||||
|
Apakah gue masih akan bisa merasakan sesuatu yang bernama kebahagiaan?
|
||||||
|
|
||||||
|
Apakah suatu saat gue dapat mengerti arti dari cinta secara harfiah dan bukan sebatas kiasan semata?
|
||||||
|
|
||||||
|
Apakah gue suatu saat nanti akan wisuda?
|
||||||
|
|
||||||
|
Kapan lulus?
|
||||||
|
|
||||||
|
Kapan skripsi?
|
||||||
|
|
||||||
|
Kapan nikah?
|
||||||
|
|
||||||
|
Kapan punya anak?
|
||||||
|
|
||||||
|
Kapan manusia dapat melihat bentuk asli bumi sehingga tidak ada lagi kubu bumi bulat dan datar?
|
||||||
|
|
||||||
|
Kapan naik gaji lagi???? (ini bercanda tapi kalau HR gue somehow baca tulisan ini mungkin bisa dipertimbangkan ke manajemen karena hampir semua orang suka dengan uang yang banyak hahay)
|
||||||
|
|
||||||
|
Apakah surga dan neraka itu ada?
|
||||||
|
|
||||||
|
Apakah ketika gue tidur sekarang gue akan terbangun lagi?
|
||||||
|
|
||||||
|
Apakah kalau gue beli Mac Mini tahun ini di tahun depan nanti Apple mengeluarkan Mac Mini dengan chip M1 Pro dengan harga yang tidak beda jauh?
|
||||||
|
|
||||||
|
Dan masih banyak lagi ketidakpastian lainnya.
|
||||||
|
|
||||||
|
Oke oke, sekarang kita kembali ke konteks yang sebenarnya.
|
||||||
|
|
||||||
|
Biasalah, kehidupan pribadi.
|
||||||
|
|
||||||
|
Tidak sedikit yang menaruh kepercayaan kepada gue.
|
||||||
|
|
||||||
|
Dari orang tua khususnya sebagai anak pertama, tauladan sebagai kakak paling tua, pekerjaan sebagai karyawan, hubungan sebagai pacar, pertemanan sebagai sahabat, muslim sebagai umatnya, dsb.
|
||||||
|
|
||||||
|
Tentu saja gue tidak pernah meminta untuk mereka melakukan itu, terlebih karena kepercayaan itu seharusnya didapat bukan diminta.
|
||||||
|
|
||||||
|
Dan apalagi yang bisa gue lakukan selain berusaha semaksimal mungkin dan meyakinkan mereka—baik langsung ataupun tidak langsung—bahwa mereka tidak menaruh kepercayaan kepada orang yang salah?
|
||||||
|
|
||||||
|
Tapi sekali lagi, bagaimana bila gue ternyata mengecewakan mereka? Bagaimana bila usaha gue tidak semaksimal itu? Bagaimana bila ternyata hasil yang didapat tidak sesuai dengan harapan gue? Dan masih banyak lagi pertanyaan yang dimulai dengan bagaimana.
|
||||||
|
|
||||||
|
Gue belum mengetahui jawabannya sampai gue mengetik ini.
|
||||||
|
|
||||||
|
Jika sebelumnya gue hanya bisa *[pasrah](https://s3.rizaldy.club/rizaldy-club-ghost/que-sera-sera/)* terkait apa yang terjadi khususnya terhadap apa yang tidak bisa gue kontrol, setidaknya sekarang gue bisa mengetahui jawaban yang bisa membuat gue tenang: mengetahui jawaban dari 4 pertanyaan sialan dalam threat modeling, untuk setiap hal yang sedang gue hadapi.
|
||||||
|
|
||||||
|
Karena setiap manusia pasti memiliki kerentanan, dan celah yang paling rentan adalah di ketakutan, ketidakpastian, dan keraguan.
|
||||||
|
|
||||||
|
Dan gue sudah merasa lelah selalu dihantui 3 hal tersebut sehingga seringkali hari-hari gue selalu diselimuti dengan ketidaktenangan.
|
||||||
|
|
||||||
|
Dan mengetahui jawabannya, somehow memberikan ketenangan.
|
||||||
|
|
||||||
|
Tanpa perlu melakukan pelarian dengan menegak minuman ber-alkohol dengan tidak *responsibly*, tanpa perlu berpura-pura semuanya baik-baik saja dengan membohongi diri sendiri, tanpa perlu meditasi yang tidak menyelesaikan permasalahan utama.
|
||||||
|
|
||||||
|
Cukup dengan mengetahui 4 jawaban terkait pertanyaan-pertanyaan yang ada.
|
||||||
|
|
||||||
|
Dan untuk bagian apakah jawabannya nanti sesuai dengan yang diinginkan atau tidak, itu urusan lain.
|
||||||
|
|
||||||
|
Karena yang terjadi, terjadilah.
|
||||||
|
|
||||||
|
P.S: I'm pretty sure i'm sober as i wrote this. But if you feel otherwise, I'm sorry and take this post as just my conversation with my mind because my only enemies are my ego and myself (and docker too maybe).
|
94
content/hancur-sebelum-berkembang.md
Normal file
94
content/hancur-sebelum-berkembang.md
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
---
|
||||||
|
title: Hancur Sebelum Berkembang
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: hancur-sebelum-berkembang
|
||||||
|
date: 2023-01-10T08:45:38.000Z
|
||||||
|
date_updated: 2023-01-10T08:45:38.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
[Suck-it 26](https://www.reverbnation.com/suckit26) adalah salah satu "band lokal" favorit gue yang berasal dari Serang, sengaja menggunakan tanda kutip karena beberapa orang mungkin kurang familiar dengan sebutan tersebut. Salah satu lagu favorit gue dari Suck-it 26 adalah [Hancur Sebelum Berkembang](https://www.youtube.com/watch?v=csamvKNNuEk). Liriknya sederhana dan agak mellow, tapi nyaman didengar di berbagai suasana. Sesekali gue mendengarkan lagu tersebut khususnya jika sedang teringat kampung halaman.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
10 hari sudah kita memasuki tahun 2023. Jika pergantian tahun dirasa tidak memiliki perbedaan, mungkin bisa pertimbangkan untuk lebih berhati-hati lagi. Mungkin pergantian tahun untuk beberapa orang dianggap bukanlah hal yang spesial; tidak membuat cara kerja dunia berubah, dan hampir setiap tahun dirayakan anyway. Tapi untuk beberapa yang lain, mungkin di tahun baru tersebut mereka berhasil menyelesaikan cicilan untuk memiliki rumah impiannya; atau mungkin di tahun tersebut mereka dinyatakan lulus dari sekolah/kampus/probation, atau mungkin, sebagai pengingat untuk menyingkirkan apapun yang sudah kadaluwarsa.
|
||||||
|
|
||||||
|
Dan untuk sebagian besar orang, tahun baru biasanya menjadi awal untuk memulai sesuatu yang baru. Meskipun untuk memulai sesuatu bisa kapan saja, terkadang segala sesuatu membutuhkan waktu. Atau momen. Dan tidak jarang, pergantian tahun adalah momen yang pas.
|
||||||
|
|
||||||
|
Ada banyak hal yang ingin gue mulai di tahun kemarin, disamping itu, ada banyak juga yang ingin gue selesaikan. Dilema diantara keduanya sama-sama membuat beban pikiran: mulai atau tidak, berhenti atau lanjut. Ketika memulai sesuatu, tantangannya terkadang adalah untuk mempertahankannya selama mungkin (seperti pekerjaan) atau mempertahankannya sesingkat mungkin (seperti kerjaan). Jika tidak memulai sesuatu, simply tidak mendapatkan apapun yang didapat jika melakukan hal tersebut, for better or worse.
|
||||||
|
|
||||||
|
Lalu pikiran terganggu dengan sebuah kutipan dari seorang penyanyi terkenal: *"If she's amazing, she won't be easy. If she's easy, she won't be amazing. If she's worth it, you wont give up. If you give up, you're not worthy. Truth is, everybody is going to hurt you; you just gotta find the ones worth suffering for". *Meskipun kutipan tersebut spesifik tentang seseorang dengan kata ganti *she*, actually itu bisa diganti dengan kata apapun.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Lo sudah mendedikasikan 720 jam untuk menyusun lego, dan lo yakin lego tersebut akan menjadi sesuatu. Selain waktu, sumber daya yang lain pun sudah lo dedikasikan juga dari uang, pikiran, dan tenaga.
|
||||||
|
|
||||||
|
Siapa yang bisa menyangka jika 720 jam adalah waktu yang terlalu singkat? Atau mungkin terlalu lama? Selama menikmati prosesnya, durasi adalah nomor sekian, ehm. Seperti, sekalipun berdurasi lama tapi dinikmati, kita tidak akan kepikiran untuk melihat jam dan tidak menyesal telah menghabiskan waktu sebanyak itu... untuk menamatkan Al-Quran dalam semalam.
|
||||||
|
|
||||||
|
Tapi ada hal-hal yang harus dilakukan sebelum melakukan segala sesuatu. Seperti, upacara sebelum bersekolah di hari senin. Seperti, interview sebelum mendapatkan pekerjaan. Seperti, for... loop dalam programming, i guess?
|
||||||
|
|
||||||
|
"Prework" ini adalah sesuatu yang tidak jarang ingin dihindari dan juga tidak dapat dihindari dalam waktu yang bersamaan. Tidak ada "can we skip to the good part?" sebagaimana cuplikan-cuplikan di platform berbagi video yang seakan tidak ada bagian suffering nya.
|
||||||
|
|
||||||
|
Lalu lo melihat sususan lego lo yang sudah setengah jadi, atau rumah impian lo yang tinggal 50%, atau ribuan kata yang sudah lo tulis dan tinggal beberapa ribu lagi.
|
||||||
|
|
||||||
|
If it were easy, it wouldn't be amazing, you said.
|
||||||
|
|
||||||
|
But is this one worth suffering for?
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Biasanya orang akan menyebutkan "we're just getting started" ketika sudah mencapai sesuatu, karena melakukan sesuatu selalu menjadi estafet: berakhirnya yang satu menjadi awal yang satu lagi. Apakah perlu dilanjutkan atau tidak, itu adalah cerita lain.
|
||||||
|
|
||||||
|
Mungkin dari berhenti meminum alkohol dan rokok demi memulai kehidupan yang lebih sehat, berhenti bermaksiat demi memulai kehidupan yang lebih agamais, berhenti mengejar seseorang demi mendukung pilihannya—ok that was personal.
|
||||||
|
|
||||||
|
Apakah kita ketika "menyelesaikan sesuatu" benar-benar selesai? No, kita baru saja memulai. Akan ada yang lebih parah lagi dari itu. JUST LOOK AT YOUR JIRA LOL LMAO LGTM RTFM ROFL
|
||||||
|
|
||||||
|
Kehilangan terkadang menjadi sesuatu yang baik, atau yang buruk—you have a choice. Diawal akan selalu terasa, dan pada akhirnya akan terbiasa. Sebagaimana mengakhiri sesuatu untuk memulai sesuatu, terkadang, kehilangan sesuatu mengarahkan ke menemukan sesuatu.
|
||||||
|
|
||||||
|
Mungkin seperti menemukan Airpods gen 3 di tokped dan gak sengaja checkout setelah kehilangan sebelah yang pro di Transjakarta?
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Gue pribadi senang mengambil resiko. Dan berdasarkan pengalaman, gue lebih menyesal tidak melakukan sesuatu daripada telah melakukan sesuatu.
|
||||||
|
|
||||||
|
Sejujurnya gue akan lebih menyesal tidak pernah mengambil bangku perkuliahan daripada tidak menyelesaikannya, sekalipun sudah relatif banyak waktu; uang dan tenaga yang keluar. Gue akan lebih menyesal tidak mengirim lamaran ke pekerjaan impian daripada pernah mengirim dan ditolak.
|
||||||
|
|
||||||
|
Tapi mungkin itu adalah bagian yang buruk dari gue: gue hanya akan melakukan sesuatu jika gue pikir itu akan berhasil. Mungkin itulah yang menjadi alasan mengapa gue tidak memiliki gelar SarJaNa KomPuTeR atau tidak mengirim resume ke FAANG. Problemnya adalah, gue bepikir tidak akan berhasil jika gue tidak menikmati prosesnya. Apakah itu sebuah problem?
|
||||||
|
|
||||||
|
Tahun kemarin gagal menerbitkan buku elektronik karena gue pribadi tidak menikmati proses menulis buku... yang struktural. Berkali-kali gagal berhenti merokok karena tidak menikmati proses... menghirup udara segar? Setiap membeli game baru gagal menyelesaikannya sampai tamat karena... males 😎. Different beast. But Zelda BOTW is too cute to finish (ehm, $60).
|
||||||
|
|
||||||
|
Ada satu "WIP" yang sepertinya gue sudah tahu akhirnya akan bagaimana.
|
||||||
|
|
||||||
|
Gue pribadi senang kenal dengan orang baru, dari yang karena memiliki minat yang sama (programming) sampai yang paling random kenal dari aplikasi kencan, tempat kopi, ataupun stasiun mrt.
|
||||||
|
|
||||||
|
Dalam mengenal orang baru gue merasa seperti membaca buku, yang tidak pernah tahu halaman terakhirnya dimana, dan harus mengurutkan sendiri bab yang ada. Dan terkadang, rasa penasaran yang membuat kita tidak berhenti, terus membaca paragraf demi paragraf, membuka lembar demi lembar demi mengira-ngira akhirnya akan bagaimana.
|
||||||
|
|
||||||
|
Bukankah itu alasan mengapa kita sampai di paragraf ini, bukan?
|
||||||
|
|
||||||
|
Tapi ada alasan lain yang mungkin membuat kita berhenti.
|
||||||
|
|
||||||
|
Ya, tidak menikmati prosesnya. Mungkin karena alur cerita dari tulisan yang dibaca terasa stagnan, atau mungkin karena si penulis mUlaI meNggUnaKaN gAyA tuLisAN anAK laYaNgAN, atau mungkin karena si penulis merasa SEPERTI SEDANG MARAH-MARAH KARENA MENGGUNAKAN HURUF KAPITAL SEMUA DAN ITU TERASA MENGGANGU atau mungkin karena di tulisannya tidak ada tanda baca sehingga lo tidak memiliki ruang kapan untuk berhenti dan kapan untuk terus lanjut membaca dan lo sekarang agak capek bernafas dan kemungkinan besar sekarang bernafas manual terlebih juga bila misalnya menggunakan bahasa yang blepotan dan agak sulit dimengerti karena kesana kemari dan tertawa.
|
||||||
|
|
||||||
|
Oke kita selesai main-mainnya.
|
||||||
|
|
||||||
|
Apakah si WIP (work in progress) tersebut layak diperjuangkan? Of course. Apakah amazing? No doubt. Am I not worthy? I guess?
|
||||||
|
|
||||||
|
Kadang gue berpikir: apakah kenikmatan (as in "enjoy" NOT as in "気持ち") layak ditukar dengan perjuangan demi mendapatkan sesuatu? Seperti, mengorbankan jam tidur demi bekerja paruh waktu? Belajar keras demi masuk ke sekolah unggulan? Menggunakan JavaScript demi membuat aplikasi web?
|
||||||
|
|
||||||
|
I know: no pain no gain. High risk high return. What you see is what you get.
|
||||||
|
|
||||||
|
Dan mungkin, membiasakan untuk menikmati lebih baik daripada tidak menikmati sama sekali.
|
||||||
|
|
||||||
|
Lalu kita masih terus membaca buku tersebut, membaca paragraf demi paragraf, lembar demi lembar, dan terus mengira-ngira bagaimana akhir dari buku tersebut.
|
||||||
|
|
||||||
|
Mungkin sampai kita tersadar bahwa kita terus membaca paragraf yang sama dan semua halaman di buku tersebut hanya 1-10, meskipun kita sudah sampai berada di lembar ke 1206.
|
||||||
|
|
||||||
|
Lalu kita membuka lembar terakhir di buku tersebut yang hanya berisi lembar kosong.
|
||||||
|
|
||||||
|
Halaman 10 tidak terlihat seperti akhir cerita, lalu kita memutuskan untuk menulisnya di lembar terakhir yang kosong ini. Angka 11 ditulis di pojok kanan bawah untuk menegaskan bahwa ini halaman yang berbeda.
|
||||||
|
|
||||||
|
Kebanyakan orang menyukai cerita dengan akhir yang bahagia, dan mungkin kita akan menulisnya juga.
|
||||||
|
|
||||||
|
Paragraf pertama di halaman terakhir tersebut dimulai dengan:
|
||||||
|
|
||||||
|
> *[Suck-it 26](https://www.reverbnation.com/suckit26) adalah salah satu "band lokal" favorit gue yang berasal dari Serang, sengaja menggunakan tanda kutip karena beberapa orang mungkin kurang familiar dengan sebutan tersebut. Salah satu lagu favorit gue dari Suck-it 26 adalah [Hancur Sebelum Berkembang](https://www.youtube.com/watch?v=csamvKNNuEk). Liriknya sederhana dan agak mellow, tapi nyaman didengar di berbagai suasana.*
|
31
content/hello-fuckin-world.md
Normal file
31
content/hello-fuckin-world.md
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
---
|
||||||
|
title: hello fuckin world
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: /hello-fuckin-world
|
||||||
|
date: 2021-05-18T19:42:27.000Z
|
||||||
|
date_updated: 2021-05-28T01:24:02.000Z
|
||||||
|
excerpt: nah faultable is at it again
|
||||||
|
---
|
||||||
|
|
||||||
|
kemarenan gaya-gayaan migrasi ke eleventy terus berdalih kalau gue udah males nulis di blog mangkanya pakai *static generator *biar ribet*. *terus gue kepikiran *kayaknya aktivitas menulis adalah hobi gue deh*, terus gue ganti deh dns record yang sebelumnya ngarah ke netlify jadi ke devbox gue, install ghost, dan here we are.
|
||||||
|
|
||||||
|
*terus gimana sama konten-konten yang sebelumnya?*
|
||||||
|
|
||||||
|
i don't know and don't care either.
|
||||||
|
|
||||||
|
orang-orang yang mengikuti kisah gue—kisah gak tuh—di internet udah hafal lah kebiasaan yang sering gue lakukan. migrasi blog dari jekyll, octopress, wordpress, ghost, siteleaf, svbtle, plain markdown, ghost, gridsome, ghost, eleventy, serta tanpa import content adalah sesuatu yang sudah biasa dan tidak pernah gue sesalkan.
|
||||||
|
|
||||||
|
*apakah gue memiliki backup nya?*
|
||||||
|
|
||||||
|
tentu saja (kecuali yang blog satu lagi) terlebih sebagai *coder *aktivitas konversi format bukanlah sesuatu yang relatif sulit *yeah anyways.*
|
||||||
|
|
||||||
|
so here we are, jika melihat ada tombol Signup diatas dan CTA bertulisan "Sign up for more like this." please hiraukan aja karena gue males banget setup stmp dan ga ada rencana buat setup itu terlebih wajib pakai mailgun.
|
||||||
|
|
||||||
|
*bagaimana untuk dapat mengetahui tulisan terbaru yang ada di blog ini?*
|
||||||
|
|
||||||
|
rss gan, rss. klik tautan [faultable.dev/rss](https://s3.rizaldy.club/rizaldy-club-ghost/rss/).
|
||||||
|
|
||||||
|
gue selalu merasa senang dengan aktivitas menulis karena gue rasa like like we always have something worth sharing. gue gak tau apakah tulisan yang gue bagikan layak untuk dibaca atau tidak, tapi jika layak pertimbangkan untuk mendoakan gue agar selalu sehat & dilancarkan rezekinya.
|
||||||
|
|
||||||
|
anyway, bookmark/subscribe blog ini and see u on the next post.
|
29
content/iCloud+.md
Normal file
29
content/iCloud+.md
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
The good
|
||||||
|
|
||||||
|
- Mendukung E2EE jika mengaktifkan Advanced Data Protection (ADP)
|
||||||
|
- Termasuk akses ke fitur Custom Domain untuk penggunaan email secara profesional
|
||||||
|
- Termasuk akses ke fitur Hide My Email (email masking) untuk menyembunyikan alamat email asli
|
||||||
|
- Termasuk akses ke fitur Private Relay (multi-hop, ODoH-based VPN) untuk menyembunyikan aktivitas internet dari siapapun over-the-wire
|
||||||
|
- Tidak membutuhkan aplikasi tambahan khususnya untuk 'penyimpanan awan'
|
||||||
|
|
||||||
|
The bad
|
||||||
|
|
||||||
|
- It's Apple
|
||||||
|
- Bandwidth cukup standar
|
||||||
|
- iCloud email tidak mendukung protokol POP
|
||||||
|
- Menggunakan Apple Mail di berbagai perangkat? HAVE A FUCKING NICE DAY
|
||||||
|
|
||||||
|
The ugly
|
||||||
|
|
||||||
|
- Sangat bergantung dengan akun iCloud (yang mana sekaligus menjadi IdP)
|
||||||
|
- Hanya berjalan di ekosistem Apple
|
||||||
|
|
||||||
|
Sejujurnya gue cukup merekomendasikan menggunakan iCloud+ kepada siapapun semenjak ada ADP, khususnya bila tidak ada perangkat lain yang tidak memiliki logo apel.
|
||||||
|
|
||||||
|
Tidak perlu ribet mengurus RAID[^1], melakukan enkripsi sendiri sebelum file meninggalkan perangkat, dan, damn, bahkan mendukung backup level perangkat out-of-the-box.
|
||||||
|
|
||||||
|
Hanya dengan minimal 15rb/bulan.
|
||||||
|
|
||||||
|
Untuk pengguna Windows, tentu saja jangan gunakan OneDrive. Pengguna GNU/Linux? I know you have `rclone(1)`, or `rsync(1)`, or your magic shell scripts, literally anything works for you.
|
||||||
|
|
||||||
|
[^1]: RAID BUKAN BACKUP!!!
|
230
content/im-turning-24.md
Normal file
230
content/im-turning-24.md
Normal file
@ -0,0 +1,230 @@
|
|||||||
|
---
|
||||||
|
title: I’m turning 24
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: im-turning-24
|
||||||
|
date: 2021-08-10T01:08:50.000Z
|
||||||
|
date_updated: 2021-08-10T01:08:50.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Can't believe I still alive to this day, so, congrats, I guess?
|
||||||
|
|
||||||
|
Setiap orang memiliki cara masing-masing dalam merayakan sesuatu, termasuk dalam merayakan hari keharian. Gue tidak terlalu peduli dengan hari kelahiran karena hanya mengingatkan diri gue bahwa gue semakin bertambah usia yang *in another way *artinya berkurang usia juga.
|
||||||
|
|
||||||
|
Namun gue jadikan hari pertambahan umur ini sebagai *checkpoint *dalam hidup gue yang berarti waktunya ber-muhasabah atau introspeksi terhadap apa yang sudah gue lakukan; alami dan pelajari di kehidupan gue pada umur sebelumnya.
|
||||||
|
|
||||||
|
Tidak jarang gue melakukan instrospeksi dari yang sifatnya bulanan—yang sempat gue bagikan ke publik, dan sekarang gue jadikan pribadi—sampai ke tahunan yang biasanya dilanjutkan dengan membuat resolusi.
|
||||||
|
|
||||||
|
Sampai hari ini gue masih bingung dengan tujuan hidup gue—disamping untuk beribadah kepada Tuhan—namun sekarang gue memiliki jawaban sementara untuk pertanyaan terkait tujuan hidup gue: untuk membahagiakan orang-orang yang menaruh kebahagiaan pada diri gue, semaksimal mungkin.
|
||||||
|
|
||||||
|
Karena gue bahagia melihat orang yang bahagia karena gue merasa bahagia.
|
||||||
|
|
||||||
|
Disini gue ingin berbagi sedikit tentang pelajaran yang gue dapet ketika di umur 23 yang bergantung dengan kondisi pada saat ini. Semoga ada sesuatu yang dapat diambil untuk siapapun yang membaca ini.
|
||||||
|
|
||||||
|
## Tidak ada yang lebih baik
|
||||||
|
|
||||||
|
Gue seperti memikirkan ulang konsep baik-buruk di usia 23. Yang mana, gue rasa, sebenarnya tidak ada yang lebih baik ataupun lebih buruk ketika membandingkan 2 hal atau lebih, mereka hanya menawarkan *trade-off *yang berbeda.
|
||||||
|
|
||||||
|
Ambil contoh, misal dalam konsumsi minuman: teh atau kopi.
|
||||||
|
|
||||||
|
Mana yang lebih baik, teh atau kopi?
|
||||||
|
|
||||||
|
Jawabannya sederhananya, tidak ada yang lebih baik dan tidak ada yang lebih buruk, gue rasa hanya menawarkan *trade-off *yang berbeda.
|
||||||
|
|
||||||
|
Atau yang lebih realistis: langsung bekerja atau menjadi sarjana lalu bekerja.
|
||||||
|
|
||||||
|
Mana yang lebih baik?
|
||||||
|
|
||||||
|
Ketika memilih langsung bekerja, gue menghemat waktu; melakukan pembelajaran secara praktikal, menjalin relasi yang lebih potensial, dsb.
|
||||||
|
|
||||||
|
Ketika memilih menjadi sarjana terlebih dahulu, gue menghabiskan waktu ~4 tahun di kuliah; melakukan pembelajaran dari teori (dan pastinya kurikulum), menjalin relasi untuk kepentingan pribadi dan profesional, dsb.
|
||||||
|
|
||||||
|
Gue rasa tidak ada yang lebih baik ataupun lebih buruk, hanya memiliki *trade-off *yang berbeda aja, kan? Sampai hari ini gue tidak melanjutkan perkuliahan gue, mungkin sekarang semester 12. Sampai hari ini gue bekerja sebagai Software Engineer di salah satu perusahaan yang bergerak di industri data di Jakarta dengan *benefit *yang lumayan untuk ukuran tidak memiliki gelar sarjana; hidup sendiri, dan tinggal di Bandung. Gue yakin jika gue dulu fokus kuliah dan lulus pada tahun 2020, untuk bisa seperti sekarang mungkin memakan waktu 2-3 tahun yang berarti di sekitar 2023.
|
||||||
|
|
||||||
|
Apakah gue menyesal memilih jalan ini?
|
||||||
|
|
||||||
|
Untuk sekarang gue rasa jawabannya 'tidak' dari yang sebelumnya 'mungkin'.
|
||||||
|
|
||||||
|
Karena sekarang gue sudah sadar bahwa arti dibalik *"ini pilihan yang terbaik" *berarti *"ini pilihan yang memiliki trade-off yang mampu lo lalui dan miliki sekalipun untuk seumur hidup".*
|
||||||
|
|
||||||
|
## Konsep takdir
|
||||||
|
|
||||||
|
Gue lupa kapan—dan gak gue save gambarnya—dari sebuah *meme *yang ada di internet gue menemukan sebuah ilustrasi yang paling mudah dipahami untuk menggambarkan konsep takdir, sekalipun *meme *tersebut bersifat, *meme*.
|
||||||
|
|
||||||
|
Gue tidak menyimpan gambarnya dan terlalu males untuk membuat ilustrasinya, intinya, misal, begini, bayangkan lo dihadapkan 3 jalur:
|
||||||
|
|
||||||
|
1. Jalur pertama adalah lo memilih menjadi Software Engineer sebagai jalur karir
|
||||||
|
2. Jalur kedua adalah lo memilih menjadi Arsitek sebagai jalur karir
|
||||||
|
3. Jalur ketiga adalah lo memilih menjadi PNS sebagai jalur karir
|
||||||
|
|
||||||
|
Terlepas jalur mana yang lo pilih, 3 jalur tersebut adalah takdir lo.
|
||||||
|
|
||||||
|
Takdir bukan berarti seperti didikte *lo udah ditetapin jadi A, pada umur sekian B, dan nanti C*, melainkan *ok bro gue kasih lo 3 pilihan, setiap pilihan yang lo pilih memiliki trade-off yang berbeda dan itu rahasia, choose yours, wisely.*
|
||||||
|
|
||||||
|
Nah ini menjawab pertanyaan seperti *kalau gue meninggal pada umur 30 karena X apakah sudah takdir? Tentu saja. Tapi kalau gue hidup sehat dari umur 25, lalu ternyata gue meninggalnya di umur 69 apakah takdir juga? Tentu saja.*
|
||||||
|
|
||||||
|
Ketika gue sekolah dulu, gue belajar kalau takdir ada 2 meskipun gue lupa sebutannya apa dan terlalu malas untuk mencari: Yang bisa diubah dan tidak bisa diubah.
|
||||||
|
|
||||||
|
Contoh takdir yang tidak bisa diubah adalah kelahiran, gue tidak bisa memilih untuk terlahir di Jepang dan dari keluarga tajir melintir yang tidak perlu mengkhawatirkan apa yang akan terjadi besok.
|
||||||
|
|
||||||
|
Kalau yang bisa diubah mah sederhana lah dan sudah pada familiar juga gue rasa.
|
||||||
|
|
||||||
|
Menariknya, ada 3 hal yang tidak jarang dianggap sebagai takdir yang tidak bisa diubah:
|
||||||
|
|
||||||
|
- Kematian
|
||||||
|
- Jodoh
|
||||||
|
- Rezeki
|
||||||
|
|
||||||
|
Merasa familiar dengan kalimat *{jodoh,kematian,rezeki} sudah diatur?*
|
||||||
|
|
||||||
|
Gue setuju, tapi tidak 100%. Ya, kematian; jodoh dan rezeki sudah diatur, tugas gue selanjutnya—sebagai seseorang yang percaya dengan Tuhan yang menjadikan takdir sebagai rukun iman keenam—adalah memilih jalurnya.
|
||||||
|
|
||||||
|
Setiap yang bernyawa pasti mati, terlepas di umur berapa dan karena apa, itu adalah usaha gue.
|
||||||
|
|
||||||
|
Setiap manusia tercipta berpasang-pasangan, terlepas dengan dan jodoh gue siapa, sekali lagi, gue yang harus memperjuangkan.
|
||||||
|
|
||||||
|
Setiap kita terlahir dari keluarga dan lingkungan yang berbeda-beda, terlepas gue terlahir kaya dan mati sebagai orang miskin ataupun sebaliknya, sekali lagi, gue yang harus memperjuangkan.
|
||||||
|
|
||||||
|
Segala sesuatu yang terjadi pada diri kita sampai hari ini, itu sudah menjadi takdir yang kita pilih untuk diperjuangkan. Bahkan sekalipun tidak memperjuangkan apapun, itu adalah takdir, yang kita pilih.
|
||||||
|
|
||||||
|
Mungkin lo bisa membantah dengan membawa 'lauhul mahfudz' yang sederhananya adalah tentang sebuah kitab/buku yang mana segala yang terjadi di kehidupan manusia sudah dicatat oleh Tuhan. Masalahnya, kita hanya tahun konsep 'catat-mencatat' sebatas di level manusia, bukan tuhan, dan akal kita tidak akan pernah sampai untuk mencernanya.
|
||||||
|
|
||||||
|
Dan ini adalah fitur dari umat yang beragama, yang mana tidak semua bisa dicerna oleh logika. Setiap yang bernyawa pasti memiliki keterbatasan, dan itu sudah takdir, karena, kita bukanlah tuhan.
|
||||||
|
|
||||||
|
Sebagai penutup bagian ini, diri gue di 3 tahun mendatang adalah takdir yang gue pilih dan perjuangkan dari hari ini. Jika gue di umur 27 nanti tinggal di Swiss ataupun di Singapura, menjalin hubungan dengan X ataupun Y, sudah stabil secara finansial ataupun belum, itu adalah takdir yang gue pilih & perjuangkan, bukan takdir yang memang sudah menjadi keputusan absolut jika di umur 27 nanti gue blablabla, sekalipun itu mungkin tentang kematian.
|
||||||
|
|
||||||
|
Dan gue ingin merencanakannya pada 3 tahun sebelumnya, bukan di waktu ketika itu terjadi.
|
||||||
|
|
||||||
|
## Kejenuhan
|
||||||
|
|
||||||
|
Jenuh adalah sesuatu yang tidak bisa dihindari, dan di kondisi seperti sekarang yang mana sedang pandemi karena sebuah virus ber-inisial C, hampir setiap lapis masyarakat memikirkan ulang tentang cara mereka hidup.
|
||||||
|
|
||||||
|
Dari cara bekerja, bersosial, beribadah, dsb.
|
||||||
|
|
||||||
|
Bahkan ada sebutan "New Normal" yang sederhananya hal-hal yang dulu normal dilakukan sekarang tergantikan karena itu sudah tidak normal lagi, semoga, setidaknya, sampai pandemi ini berakhir.
|
||||||
|
|
||||||
|
Gue tinggal relatif jauh dari keluarga, dan di tempat tinggal gue sekarang, gue tidak memiliki keluarga disini. Untuk mengatasi kejenuhan, biasanya gue keluar kamar; menikmati suasana, dan mengunjungi tempat umum dari *coffee shop; *taman, jalanan kota, sampai tempat minum untuk yang sudah *legal age*. Terkadang pergi keluar kota juga jika mau.
|
||||||
|
|
||||||
|
Aktivitas tersebut pada tahun ini dianggap bersifat tidak normal, karena normalnya orang-orang berdiam dirumah dan menjalani berbagai aktivitas disana dari aktivitas pribadi ataupun profesional.
|
||||||
|
|
||||||
|
Dan ini membuat gue memikirkan ulang dalam mengatasi kejenuhan.
|
||||||
|
|
||||||
|
Biasanya gue dalam mengatasi kejenuhan ada 3 kategori yang gue bisa gue pilih:
|
||||||
|
|
||||||
|
- Mencari suasana (tempat, orang-orang, pemandangan) baru
|
||||||
|
- Bersenang-senang
|
||||||
|
- Berada di kondisi yang gue tidak memiliki kontrol penuh (perjalanan di bis/kereta/pesawat)
|
||||||
|
|
||||||
|
Yang mana, 3 hal diatas selalu mengarah ke 'tempat umum' yang memiliki bendera merah pada kondisi saat ini.
|
||||||
|
|
||||||
|
Dan terpaksa gue memikirkan ulang cara mengatasi kejenuhan ini dengan membuat diri gue senyaman mungkin untuk tetap berada di penjara bernama rumah, untuk kepentingan bersama & khususnya diri gue sendiri.
|
||||||
|
|
||||||
|
Pertama, gue membiasakan diri untuk menikmati film. Gue tidak terlalu suka menonton film, dan jika sebuah keharusan, pasti itu film dokumenter ataupun film random untuk menyembunyikan suara di kamar gue iykwim.
|
||||||
|
|
||||||
|
Akhir-akhir ini gue mencoba menikmati sebuah film ber-genre Anime. Ketika SD dulu gue senang nonton film kartun, dari yang non-japan seperti dari *channel *Nickelodeon (i.e: SpongeBob); Cartoon Network (i.e: Ben 10), Disney (i.e Mickey fucking Mouse) dan dari jepang yang meskipun gue lupa *channel *nya apa tapi yang gue ingat adalah film: Yugioh, Inuyasha, Hunter x Hunter, Detective Conan, Ragnarok, Dragon Ball, dsb.
|
||||||
|
|
||||||
|
Did I mention yuyu hakusho?
|
||||||
|
|
||||||
|
Anyway, sejak SMP-SMA gue tidak bisa menonton film khususnya kartun karena jenis sekolah yang gue ambil, dan sejak itu gue sudah tidak terlalu antusias dengan hal-hal berbau film. Hmm oke kecuali bokep.
|
||||||
|
|
||||||
|
Dan karena menonton film dokumenter *technically* untuk mendapatkan inspirasi, jadi gue sekarang mencoba untuk menikmati (kembali) film ber-genre Anime, *for fun.*
|
||||||
|
|
||||||
|
Sejauh ini anime yang sudah gue tonton tidak terlalu banyak: Your name, sword art online, 5 cm per seconds, your lie in april, the garden of words dan yang terakhir violet evergarden, dan gue butuh [rekomendasi](https://s3.rizaldy.club/rizaldy-club-ghost/contact) khususnya untuk anime yang tidak memiliki sad ending HAHAHA.
|
||||||
|
|
||||||
|
Lanjut, kedua: bermain *game*.
|
||||||
|
|
||||||
|
Gue tidak pernah menyebut diri gue *gamer*, tapi gue pertama kali tertarik dengan *programming *adalah ketika berurusan dengan [Cheat Engine](https://www.cheatengine.org/) dan membuat "trainer" gue sendiri yang dilanjutkan dengan pertama kali serius belajar *programming *dengan mempelajari sumber kode salah satu *backdoor web shell *yangterkenal dan pernah berjaya pada masanya.
|
||||||
|
|
||||||
|
Konsol pertama yang gue mainkan adalah ehm tendo (gue rasa NES KW sekian) dan game favorit gue adalah Final Fantasy! Dilanjutkan dengan bokap dapet kesempatan buat bawa komputer kantor ke rumah yang game favorit gue adalah Virtua Cop (dan road rash!) lalu PS1 (favorit gue adalah Final fucking Fantasy VII dan harvest moon) dan game-game di N-Gage QD (The Sims ftw!)
|
||||||
|
|
||||||
|
Cerita dikit, gue keinget pertama kali ketika bokap gue membeli komputer pribadi buat di rumah. Dan itu pertama kalinya gue kenal internet dan mengetahui kalau game bisa dibeli dalam bentuk CD. Sejak ada PC di rumah hampir setiap bulan gue meminta buat beli *game *baru dari yang 1 CD berisi ~100 *game *kek di *tendo* sampai ke game yang paling gue inget sampai sekarang: Unreal Tournament.
|
||||||
|
|
||||||
|
Long story short, karena SMP-SMA gue terpisah dari game juga meskipun sesekali gue masih main *game *kalo lagi kabur izin keluar sekolah cuma buat main Ayodance, Seal, ataupun Counter strike.
|
||||||
|
|
||||||
|
Dan sejak SMA gue sudah tidak tertarik dengan game. Gue tidak pernah memiliki PS2, dan kalau lagi keluar pun gue memilih pergi ke warnet daripada ke rental PS. Game di HP pada waktu itu hanyalah Bounce dan di PC rumah cuma ada Cat vs Dog dan hangaroo.
|
||||||
|
|
||||||
|
Lalu pas kuliah, gue coba main game lagi: DoTA, mengingat gue dulu juga sering main Warcraft III (TFT dan RoC), Age of Empires II dan Rise of Nations. Tapi tidak terlalu lama karena gue masih belum terlalu menikmati game *multiplayer* karena terbiasa melawan komputer.
|
||||||
|
|
||||||
|
Dan sekarang, gue mencoba menikmati bermain game kembali!
|
||||||
|
|
||||||
|
Sejauh ini gue bermain Fortnite (flashback Unreal Tournament walaupun UT bukanlah battle royale), Stardew Valley (flashback Harvest Moon) dan Genshin Impact (ini gue rasa kek main SEAL online, tapi gue masih jarang main ini).
|
||||||
|
|
||||||
|
Anyway, game yang gue mainkan haruslah bersifat menenangkan ataupun menyenangkan untuk dimainkan mengingat tujuan gue bermain *game *adalah untuk mengatasi kejenuhan.
|
||||||
|
|
||||||
|
Apakah berhasil? Idk, tapi sejauh ini gue merasa sangat nyaman di kamar menghabiskan waktu bermain Fortnite yang diakhiri dengan bermain Stardew Valley, lalu tidur.
|
||||||
|
|
||||||
|
## 'Terlalu' selalu memiliki *trade-off *yang buruk
|
||||||
|
|
||||||
|
Kita kembali lagi ke topik pembahasan.
|
||||||
|
|
||||||
|
Yang gue yakin, segala sesuatu yang bersifat 'berlebihan' bahkan bisa gue sebut sebagai sesuatu yang buruk.
|
||||||
|
|
||||||
|
Sekalipun hal berlebihan tersebut adalah aktivitas yang baik.
|
||||||
|
|
||||||
|
Misal, terlalu baik dengan orang lain. Terlalu peduli dengan orang lain. Terlalu memikirkan orang lain. Terlalu mementingkan orang lain. Terlalu menyayangi diri sendiri. Terlalu fokus dengan tuhan. Dan berbagai hal lainnya yang diawali dengan terlalu.
|
||||||
|
|
||||||
|
Dan yang gue percaya adalah melakukan secukupnya aja.
|
||||||
|
|
||||||
|
Yang berarti, kita harus memiliki *threshold *untuk sesuatu yang kita lakukan.
|
||||||
|
|
||||||
|
Misal, dalam konteks beragama. Menyembah tuhan cukup dilakukan 5x sehari, meskipun kita bisa melakukannya lebih dari itu dengan mengamalkan ibadah yang bersifat *sunnah*, tapi kehidupan bukan hanya tentang *habluminallah, *melainkan ada *habluminannas *juga dan gue tidak hidup di zaman ketika para Nabi dan Rasul hidup.
|
||||||
|
|
||||||
|
Atau contoh yang lebih realistis lagi: Memperdulikan orang lain.
|
||||||
|
|
||||||
|
Seberapa besar gue peduli dengan orang lain? Entahlah, bahkan tidak jarang gue mencoba membantu orang lain untuk lebih berkembang lagi yang mungkin baik juga untuk dia.
|
||||||
|
|
||||||
|
Yang menjadi masalah adalah ketika gue melakukannya secara berlebihan sampai gue lupa klo ada hal lain yang harus gue fokuskan juga karena kehidupan tidak hanya tentang 1 hal.
|
||||||
|
|
||||||
|
Oke oke ini rada rancu, intinya, lakukan secukupnya dan ketahui *boundary *lo.
|
||||||
|
|
||||||
|
Melakukan hal yang berlebihan bukan hanya tentang ekspektasi, umpan balik atau apapun itu yang bersifat merugikan diri sendiri, namun lebih ke untuk kebaikan orang lain juga.
|
||||||
|
|
||||||
|
Yang paling gue khawatirkan adalah ketika gue/mereka sampai memiliki ketergantungan satu sama lain, dan ini gue rasa kurang baik mengingat manusia tidak akan pernah hidup selamanya.
|
||||||
|
|
||||||
|
Dan melakukan sesuatu secukupnya, gue rasa dapat menghindari kejadian itu, terlepas dalam konteks apapun itu.
|
||||||
|
|
||||||
|
Terakhir, sebagai penutup bagian ini, gue yakin "lebih dari cukup" tidak sama dengan "berlebihan". In my nerd view, lebih dari cukup adalah tentang iterasi (yang mana bersifat *incremental) *sedangkan berlebihan sebatas tentang perulangan. Seperti, lo bisa terus 1000x menampilkan 'hello world' namun dalam iterasi, lo bisa menampilkan 1000x 'hello world' juga, tapi, mungkin, di 1000 bahasa pemrograman yang berbeda.
|
||||||
|
|
||||||
|
Serupa, tapi tak sama.
|
||||||
|
|
||||||
|
## What's next?
|
||||||
|
|
||||||
|
I personally hate this kind of question.
|
||||||
|
|
||||||
|
Seinget gue waktu pas umur 23 gue ingin menjadi pribadi yang lebih kalem dan santai, dan gue rasa gue sudah melakukannya dengan baik.
|
||||||
|
|
||||||
|
Di umur 24 ini gue ingin menjadi pribadi yang lebih kalem lagi dengan melihat sesuatu secara objektif sebisa mungkin serta menyeimbangkan penggunaan antara logika dan perasaan.
|
||||||
|
|
||||||
|
Selain itu gue ingin mencoba (lagi) membuka diri kepada orang lain setelah melewati berhasil-gagal-berhasil-gagal lagi di tahun ini karena masalah kepercayaan dan kenyamanan.
|
||||||
|
|
||||||
|
Dan yang tidak kalah penting: lebih memperhatikan kesehatan mental, khususnya di kondisi seperti ini.
|
||||||
|
|
||||||
|
Kesehatan mental berpengaruh ke kebahagiaan yang berpengaruh ke produktivitas dan menjadi lingkaran setan. Tidak bahagia tidak produktif dan tidak produktif membuat tidak bahagia. Dengan memelihara kesehatan mental yang cukup gue rasa bisa mengurangi kemungkinan terjadinya tidak bahagia ini mengingat hidup tidak selalu tentang kebahagiaan.
|
||||||
|
|
||||||
|
## Penutup
|
||||||
|
|
||||||
|
Selama 24 tahun gue tidak pernah membelikan diri gue kue ulang tahun, jadi hari ini gue beli New York Cheese Cake yang menjadi kue favorit gue ketika lagi kerja di *coffee shop. *Ditambah dengan Caffe Mocha yang mana minuman favorit gue!
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/08/45D6C797-8DD0-4F04-A2DF-5A2363293A2B.jpeg)
|
||||||
|
Dan juga, selama 24 tahun gue tidak pernah membelikan kado untuk diri gue sendiri. Anggap sebagai self-reward tahunan karena setiap hari *technically *gue melakukan this *self-reward thing *karena sudah kebutuhan. Jadi gue habis membeli Nintendo Switch, yeay!
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/08/CE193BF4-202C-4B7E-A2FF-883E2DD5AA4D.jpeg)
|
||||||
|
Gue sudah lama ingin membeli konsol ini, tapi masalah gue adalah gue tidak ingin terjebak di ekosistem si Nintendo yang hanya sebatas game. Meskipun Steam Deck terlihat menjanjikan (yang technically sebuah komputer portabel) tapi gue urungkan karena gue tidak butuh komputer lainnya.
|
||||||
|
|
||||||
|
Mungkin 2022 rilis di Indo, dan kalau emang harus banget banget beli Steam Deck gue rasa tinggal beli gak, sih? Hahaha.
|
||||||
|
|
||||||
|
Sebelumnya gue ingin membelikan Macbook Pro dengan prosesor M1 untuk diri gue sebagai kado, tapi karena gue rasa gue gak butuh-butuh amat laptop pada saat ini (terlebih gak bisa kerja dari luar) dan juga NUC sialan gue udah cukup, jadi gue urungkan dan membeli Switch yang gue rasa bisa menjadi pelarian setelah jam kerja.
|
||||||
|
|
||||||
|
Kode gue adalah SW-3437-7810-2124 jika ada yang peduli, dan display name gue di fornite adalah docker ps -aq, dan mungkin jika ingin co-op di stardew valley kita bisa membuat VLAN entah melalui Zerotier ataupun Wireguard.
|
||||||
|
|
||||||
|
Sebagai penutup, tahun kemarin gue merayakan hari kelahiran gue dengan seseorang, dibelikan kado oleh seseorang, dan menikmati dua kotak pizza sambil meneguk sebotol minuman yang gue rasa sempurna untuk merayakan hari kelahiran mengingat gue masih diberi kesempatan untuk melanjutkan hidup di umur 22.
|
||||||
|
|
||||||
|
Sekarang gue merayakannya sendiri, dengan diri gue sendiri, dibelikan kado oleh diri sendiri dan menikmati kue sendiri. Tanpa minuman alkohol, gue di umur 24 hanya ingin minum *socially* dan itupun harus hanya golongan A.
|
||||||
|
|
||||||
|
Tidak ada yang bisa menduga kehidupan nantinya akan seperti apa, bukan?
|
||||||
|
|
||||||
|
And that's it.
|
||||||
|
|
||||||
|
Terima kasih sudah mendengarkan cerita gue, karena pada saat ini media untuk bercerita adalah blog gue ini.
|
||||||
|
|
||||||
|
Happy birthday, Riz.
|
||||||
|
|
||||||
|
Wish you all the best.
|
BIN
content/images/IMG_0240.jpeg
Normal file
BIN
content/images/IMG_0240.jpeg
Normal file
Binary file not shown.
After Width: | Height: | Size: 395 KiB |
BIN
content/images/Screenshot_20240301_230352.jpg
Normal file
BIN
content/images/Screenshot_20240301_230352.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 184 KiB |
BIN
content/images/mountains-1412683_1280.png
Normal file
BIN
content/images/mountains-1412683_1280.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 552 KiB |
28
content/index.md
Normal file
28
content/index.md
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
---
|
||||||
|
title: "Welcome — 上がってください"
|
||||||
|
date: "2024-01-01"
|
||||||
|
---
|
||||||
|
|
||||||
|
![ilustrasi gunung oleh Michi S dari Pixabay](./images/mountains-1412683_1280.png)
|
||||||
|
|
||||||
|
<div id="pixabay-attribute">
|
||||||
|
<small>Image by <a href="https://pixabay.com/users/moinzon-2433302/?utm_source=link-attribution&utm_medium=referral&utm_campaign=image&utm_content=1412683">Michi S</a> from <a href="https://pixabay.com//?utm_source=link-attribution&utm_medium=referral&utm_campaign=image&utm_content=1412683">Pixabay</a> (with grayscale filter)</small>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
# Welcome — 上がってください
|
||||||
|
|
||||||
|
Selamat datang di sudut kecil internet saya.
|
||||||
|
|
||||||
|
Nama domain ini sebelumnya melayani [blog pribadi](https://s3.rizaldy.club/0x0/CleanShot%202024-02-28%20at%2018.00.34@2x.jpeg) saya yang dijalankan menggunakan [Ghost](https://ghost.org) dan sekarang, menjadi sesuatu yang disebut [[digital garden]]. Segala konten yang ada di blog sebelumnya sudah saya [arsipkan](https://archive.rizaldy.club/public/?q=rizaldy.club) plus saya [tampilkan disini](/tags/blog) juga untuk sementara sambil mengisi konten-konten segar dengan format yang baru ini.
|
||||||
|
|
||||||
|
Jika kamu senang ber-eksplorasi ataupun memiliki jiwa petualang, silahkan berkeliling dan cari tempat favoritmu. Menekan tombol `cmd+k` (atau `ctrl+k` untuk Windows)
|
||||||
|
di _keyboard_ mungkin akan sedikit membantu petualanganmu.
|
||||||
|
|
||||||
|
Jika kamu sedang terburu-buru, atau tidak senang merasa tersesat, silahkan mulai [dari sini](/tags). Atau, kunjungi halaman favorit saya:
|
||||||
|
|
||||||
|
- [[Homelab]]
|
||||||
|
- [[Last Forever]]
|
||||||
|
- [[NAS | Membangun Network-attached Storage (NAS)]]
|
||||||
|
- [[Self-hosting]]
|
||||||
|
|
||||||
|
Bagaimanapun, enjoy your stay.
|
270
content/influencer-economy.md
Normal file
270
content/influencer-economy.md
Normal file
@ -0,0 +1,270 @@
|
|||||||
|
---
|
||||||
|
title: Influencer economy
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: influencer-economy
|
||||||
|
date: 2022-04-24T07:52:12.000Z
|
||||||
|
date_updated: 2022-04-24T07:52:12.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Gue personally kurang suka mendengar kata "influencer" karena pada dasarnya hanyalah sebutan lainnya untuk "pengiklan" dan gue selalu males dengan apapun yang berkaitan dengan iklan. Arti *influencer* sederhananya adalah *pemberi pengaruh*, bagian menariknya adalah *apa pengaruh yang diberikan?*
|
||||||
|
|
||||||
|
In some cases, konteks pengaruh tersebut merujuk ke "to inspire" as in "something to consider" but in most cases, merujuk ke "call to action" as in "something to do".
|
||||||
|
|
||||||
|
Di tulisan ini gue ingin berbagi tentang bagaimana proses "influence" ini bekerja berdasarkan pehamanan gue, jika kamu berniat untuk menyewa jasa influencer ataupun ingin menjadi seoarng influencer, mungkin bisa jadikan tulisan ini sebagai salah satu rujukan.
|
||||||
|
|
||||||
|
## How information flow
|
||||||
|
|
||||||
|
Pemikiran ini gue dapat ketika gue mempelajari lebih dalam tentang iklan dan apa maksud dan tujuan utama dari iklan tersebut.
|
||||||
|
|
||||||
|
Mari kita beralih sejenak ke era dimana untuk mendapatkan informasi yang lebih luas satu-satunya sumber adalah dari koran. Iklan sudah ada sejak penerbitan koran sudah mainstream di Indonesia. Jenis iklannya beragam, namun yang pasti varian iklan akan selalu mengikuti budget yang disediakan.
|
||||||
|
|
||||||
|
Salah satu kelemahan koran adalah informasi yang dibagikan "ahead of time" dan tidak real-time. Seperti, informasi banjir di Serang kemungkinan besar akan diterbitkan di keesokan harinya. Radio adalah salah satu media yang bisa menyiarkan informasi tepat waktu, namun konsumsi radio terbatas hanya menawarkan audio.
|
||||||
|
|
||||||
|
Lalu masyarakat beralih ke TV, tempat dimana informasi dapat disajikan secara real-time dan menggunakan audio-visual dalam menyiarkan informasi. Di televisi terdapat beberapa saluran dan penonton dapat memilihnya sesuai preferensi mereka sendiri. Proses pemindahan saluran sering terjadi ketika pengguna mulai melihat iklan.
|
||||||
|
|
||||||
|
Jika di koran proses melihat iklan terjadi secara opsional dan hanya oleh mereka yang menginginkannya saja, di TV (dan radio) penonton tidak memiliki 100% kontrol penuh dalam melihat iklan yang ditampilkan.
|
||||||
|
|
||||||
|
Terdapat keterbatasan dalam penyebaran informasi melalui TV dan radio ini. Pertama, informasi dikurasi oleh siapapun itu dan yang ditayangkan kemungkinan besar hanyalah informasi yang berpotensi memiliki peminat yang banyak.
|
||||||
|
|
||||||
|
Kedua, informasi dibatasi oleh ruang dan waktu. Ingin mengetahui apa yang sedang terjadi di Jepang pada jam 18.18 waktu Indonesia barat? Semoga berhasil mendapatkanya di televisi!
|
||||||
|
|
||||||
|
Ketiga, informasi dibatasi oleh kebijakan. Ingin menonton film 'layar lebar' dari televisi? Berharaplah ke siapapun yang bertanggung jawab di program 'Bioskop Trans TV'.
|
||||||
|
|
||||||
|
Dan sekarang, informasi menjadi lebih mudah diakses berkat sebuah teknologi bernama Internet. Bagian menarik dari Internet adalah, berbeda dengan saluran TV/radio yang bergantung dengan frekuensi sinyal, di Internet—pada dasarnya—tidak ada yang mengatur distribusi informasi yang ada di internet.
|
||||||
|
|
||||||
|
Selagi memiliki 'paket internet', siapapun dapat mengakses apapun meskipun terkadang terdapat 'censorship' dari penyedia layanan internet, namun itu topik lain.
|
||||||
|
|
||||||
|
Cara masyarakat berperilaku menjadi berubah berkat kehadiran internet. Tidak pernah terbayangkan sebelumnya bagaimana proses beli laptop baru tidak perlu repot-repot pergi ke toko lalu pulang, cukup tunggu dan sampai, namun terjadi secara efektif.
|
||||||
|
|
||||||
|
Karena hal itu, internet menjadi tempat yang menjanjikan.
|
||||||
|
|
||||||
|
Pasar beralih ke internet yang biasa disebut dengan E-Commerce.
|
||||||
|
|
||||||
|
Bioskop beralih ke internet yang biasa disebut VOD (Video On Demand) platform.
|
||||||
|
|
||||||
|
Koran? Tidak perlu disebutkan, sudah banyak situs berita bertebaran di internet.
|
||||||
|
|
||||||
|
Tentu konsumen informasi tidak sebatas ingin mengonsumsi berita, terkadang mereka membutuhkan informasi lain yang bersifat 'menghibur' seperti film; drama, komedi, dsb juga.
|
||||||
|
|
||||||
|
Ada sebuah kutipan yang berbunyi 'no news is good news' yang secara tidak langsung berita kemungkinan besar berisi informasi yang tidak kita harapkan. Siapa juga yang berharap adanya berita gempa bumi?
|
||||||
|
|
||||||
|
Berdasarkan poin diatas, beberapa orang ada yang lebih tertarik untuk mengonsumi 'entertainment' daripada 'news' di media yang menyiarkan informasi. Seperti, gue menyalakan TV untuk menonton di Netflix, bukan untuk mengetahui ada kasus kejahatan apalagi di Indonesia.
|
||||||
|
|
||||||
|
Nah, salah satu bagian menarik dari entertainment ini adalah pada aktornya, disamping alur ceritanya, ya.
|
||||||
|
|
||||||
|
Kamu akan kepikiran Leonardo Dicaprio ketika memikiran Titanic, ataupun kepikiran Titanic ketika memikirkan Leonardo Dicaprio. Tidak heran, jika ada pertanyaan "Siapa pemeran Titanic?" salah satu jawabannya adalah "Leonardo Dicaprio".
|
||||||
|
|
||||||
|
Yang maksudnya, secara tidak langsung, film Titanic dan aktor Leonardo Dicaprio saling membangun brand awareness mereka sendiri. Hasilnya? Saling menguntungkan.
|
||||||
|
|
||||||
|
Nama Leonardo Dicaprio naik dan film Titanic laku dijual.
|
||||||
|
|
||||||
|
Leonardo Dicaprio mendapatkan bayaran dan film Titanic mendapatkan keuntungan.
|
||||||
|
|
||||||
|
Jika kepikiran mengapa aktor dibayar mahal, besar kemungkinan karena keuntungan yang akan didapat akan lebih besar dari itu, jika menggunakan perhitungan ekonomi dasar.
|
||||||
|
|
||||||
|
Oke, sekarang kita ke topik inti. Tidak jarang yang menjadi pemeran di iklan adalah seorang aktor. Selain karena mereka sudah ahli dalam bidangnya, juga karena mereka memiliki popularitas. Kita ingin melihat gambar agnes monica sedang memegang freshcare di kabin pesawat karena kita tahu siapa itu agnes monica. Coba yang megang freshcare tersebut adalah orang random, kemungkinan kita akan menanyakan siapa dia.
|
||||||
|
|
||||||
|
Selain itu, sekali lagi, mereka memberikan pengaruh. Hampir jarang iklan berbunyi "yuk beli ini" secara langsung, tapi dampaknya membuat kamu ingin membeli brand X ketika melihat varian freshcare—karena yang kepikiran olehmu adalah agnes monica.
|
||||||
|
|
||||||
|
Jika sudah mendapatkan maksud dari bagian 'How information flow', mari kita lanjut ke 'How advertising works' sebelum menuju ke topik utama.
|
||||||
|
|
||||||
|
## How advertising works
|
||||||
|
|
||||||
|
Iklan bertebaran dimana-mana. Di baliho jalan, di video, di sidebar, di segmen setelah lagu ketika menggunakan Spotify gratis, di metaverse, dimanapun.
|
||||||
|
|
||||||
|
Bisnis iklan masih laku karena mereka (penyedia iklan) masih menjual produk, yakni produknya adalah sesuatu yang biasa disebut dengan 'pengguna' (gratis). Seperti, jika produk utama dari Facebook adalah sebuah sosial media, no, produk utamanya adalah pengguna Facebook yang dapat menggunakan Facebook tanpa biaya — dan mereka menjual informasi tersebut ke siapapun yang ingin beriklan di platform mereka.
|
||||||
|
|
||||||
|
Setidaknya ada 2 hal yang ingin dituju oleh pengelola bisnis ketika mengiklankan produknya: Membangun brand awareness dan menaikkan penjualan.
|
||||||
|
|
||||||
|
Mari kita bahas brand awareness terlebih dahulu.
|
||||||
|
|
||||||
|
### Brand Awareness
|
||||||
|
|
||||||
|
Ada penyedia layanan untuk berinvestasi reksa dana melalui sebuah aplikasi seluler, nama aplikasi tersebut adalah Bibit. Pertanyaannya ada dua:
|
||||||
|
|
||||||
|
1. Apa yang dipikirkan orang-orang ketika mendengar kata 'Aplikasi untuk investasi reksa dana?'
|
||||||
|
2. Apa yang dipikirkan orang-orang ketika mendengar kata 'Bibit'?
|
||||||
|
|
||||||
|
Brand awareness berperan disitu.
|
||||||
|
|
||||||
|
Bibit menggandeng Raditya Dika sebagai Brand Ambassador. Sudah banyak orang yang mengetahui siapa itu Raditya Dika, baik dari buku yang pernah dia tulis ataupun film yang pernah dia sutradari.
|
||||||
|
|
||||||
|
Raditya Dika sudah memiliki banyak 'penonton' yang biasa disebut dengan 'pengikut' ataupun 'pelanggan', yang sederhananya, jika misalnya Raditya Dika menggelar suatu pentas, dia tidak perlu terlalu memusingkan siapa saja yang akan menontonnya nanti, karena yang 'siapa yang butuh' disini seharusnya sudah bukan Raditya Dika lagi.
|
||||||
|
|
||||||
|
Setelah Bibit dapat menjangkau penontonnya Raditya Dika tersebut, harapannya tentu saja adalah agar beberapa penontonnya Raditya Dika menjadi pengguna Bibit.
|
||||||
|
|
||||||
|
Sehingga dua pertanyaan diatas setidaknya sudah bisa dijawab oleh siapapun yang memiliki pertanyaan tersebut.
|
||||||
|
|
||||||
|
### Sales boosting
|
||||||
|
|
||||||
|
Pernah mendengar 12.12? Atau Waktu Indonesia Belanja?
|
||||||
|
|
||||||
|
Di kampanye tersebut, mereka menghadirkan dua grup penyanyi korea yang cukup populer. Pertanyaan pertama, mengapa grup penyanyi korea dan bukan tim engineering mereka saja? Dan pertanyaan kedua, untuk apa?
|
||||||
|
|
||||||
|
Pertanyaan tersebut hanya intermeso, mari kita fokus ke topik intinya.
|
||||||
|
|
||||||
|
Setiap kampanye dengan iming-iming promosi tujuan utamanya tentu saja adalah untuk meningkatkan penjualan. Kenapa tanggal 12 ataupun 25, pastinya itu adalah strategi masing-masing mereka.
|
||||||
|
|
||||||
|
Pertanyaan kenapa menggunakan grup penyanyi korea, tentu saja itupun bagian dari strategi mereka. Secara teknis tidak ada hubungan langsung sama sekali antara platform E-commerce dan grup penyanyi korea, beda jika konteksnya BTS menjual official merchandise nya eksklusif di Tokopedia sehingga Tokopedia bisa menggunakan slogan 'BTS jualan disini' sebagai andalannya.
|
||||||
|
|
||||||
|
Ada banyak penggemar BTS, dan mungkin maksud dari Tokopedia menggunakan BTS dalam kampanye tersebut adalah untuk menjangkau pengguna (ataupun calon pengguna) Tokopedia yang gemar dengan BTS. Jadi sederhananya bila tidak ada yang ingin melihat kampanye Waktu Indonesia Belanja, setidaknya yang ingin mereka lihat adalah BTS nya.
|
||||||
|
|
||||||
|
Langsung ke topik inti, jika Tokopedia bisa menghabiskan sebegitu banyak uang untuk kampanye tersebut, seharusnya ROI yang diharapkan pun setidaknya lebih besar atau mendekati dari apa yang telah mereka keluarkan tersebut.
|
||||||
|
|
||||||
|
Gue personally gak terlalu peduli pengen tanggal berapa harus belanja, ataupun pengen siapapun itu yang ada di sebuah kampanye. Dan ini sesederhana berarti gue bukan target pasar mereka dari kampanye tersebut.
|
||||||
|
|
||||||
|
Lalu siapa target pasar Tokopedia untuk kampanye tersebut?
|
||||||
|
|
||||||
|
Kamu seharusnya sudah mengetahui jawabannya ;)
|
||||||
|
|
||||||
|
## The so-called Influencer
|
||||||
|
|
||||||
|
Sekarang kita di topik utama.
|
||||||
|
|
||||||
|
Mari kita mulai dengan pertanyaan *Siapa yang disebut dengan influencer?*
|
||||||
|
|
||||||
|
Secara teknis, siapapun bisa disebut dengan influencer just if dia bisa memberi pengaruh. Seperti, jika kamu menganggap sendiri dirimu sebagai 'Programming influencer' dan ada orang-orang yang terpengaruh untuk menggeluti programming karena kamu, then, you are. Congrats.
|
||||||
|
|
||||||
|
Di praktiknya, rata-rata orang-orang yang disebut dengan influencer ini adalah orang-orang yang memiliki banyak penonton, bahkan dari ketika penonton tersebut masih sedikit.
|
||||||
|
|
||||||
|
Penonton tersebut menjadi penonton si influencer ini kemungkinan besar karena mereka menyukai apa yang si influencer ini lakukan. Senang berdonasi? Senang memproduksi lagu? Senang menerbitkan buku? Apapun.
|
||||||
|
|
||||||
|
Aktivitas yang mereka lakukan tersebut biasa disebut dengan 'berkarya'. Salah satu definisi 'karya' sederhananya adalah 'hasil perbuatan', dan untuk pertanyaan terkait apa yang mereka buat, jawabannya selalu tergantung.
|
||||||
|
|
||||||
|
Gue rasa tidak ada influencer yang tidak berkarya, sekalipun karya tersebut adalah sebuah potret dari kerupawanan ciptaan tuhan seseorang, which is fine, just business as usual.
|
||||||
|
|
||||||
|
Pola nya hampir sama: Gelar pentas dan biarkan siapapun dapat melihatnya.
|
||||||
|
|
||||||
|
Ambil contoh Youtube sebagai panggungnya. Kamu suka bermain game? Gelar pentas yakni dengan mengunggah videomu ketika bermain game, dan biarkan orang lain menontonnya.
|
||||||
|
|
||||||
|
Sekalipun tanpa redaksi 'Klik Like dan Subscribe' di setiap akhir video, gue rasa mereka pun akan melakukannya bahkan tanpa instruksi.
|
||||||
|
|
||||||
|
Pertanyaannya, bukan hanya kamu seorang yang mengunggah video ketika bermain game. Ada banyak yang melakukan serupa, namun mengapa mereka harus memilihmu?
|
||||||
|
|
||||||
|
Untuk pertanyaan tersebut, itu topik lain, just a friendly reminder.
|
||||||
|
|
||||||
|
Oke lanjut, misal jika ada seseorang yang membeli dan bermain Elden Ring setelah menonton videomu, you can officially call yourself an 'Influencer' terlebih bila ada yang bilang 'bang gw main game elden ring gegara lu nih", misalnya.
|
||||||
|
|
||||||
|
Sekarang, panggung tersebut sudah cukup banyak. Sebut saja ada Facebook, Twitter, Instagram, TikTok, Snapchat, Reddit, Vimeo, dsb. Biasanya hal yang mereka bagikan adalah aktivitas yang mereka senangi alias hobi, meskipun hobi tidak harus dimonetisasi, seseorang pernah bilang bahwa *"Pekerjaan paling menyenangkan di dunia adalah hobi yang dibayar" *which most likely leads us to the creator economy — which is nice.
|
||||||
|
|
||||||
|
Monetisasi pada dasarnya hanyalah aktivitas menjual.
|
||||||
|
|
||||||
|
Ketika kamu mengunggah video dan menampilkan iklan disana, kamu bukan menjual videomu ke Youtube ataupun ke pengiklan. Melainkan kamu menjual informasi penontonmu di Youtube ke pengiklan, dan kamu mendapat royalti dari hasil penjualan tersebut — which is just business as usual.
|
||||||
|
|
||||||
|
Jika kembali ke topik, apa yang sebenarnya dijual oleh influencer?
|
||||||
|
|
||||||
|
And no, mereka tidak menjual produk yang mereka endorse, before you asking.
|
||||||
|
|
||||||
|
### Endorsement
|
||||||
|
|
||||||
|
And yes, produk utama dari influencer ini adalah endorsement, dan bukan sesuatu yang mereka endorse. Sederhananya, target pasar mereka adalah yang ingin meng-endorse, bukan penonton mereka. Just like Facebook to advertisers not Facebook to users.
|
||||||
|
|
||||||
|
Pertanyaannya adalah, apakah teknik tersebut efektif?
|
||||||
|
|
||||||
|
Jawaban singkatnya adalah, jika tidak efektif, harusnya teknik tersebut sudah tidak laku.
|
||||||
|
|
||||||
|
Jawaban detailnya, mari kita bahas dibawah.
|
||||||
|
|
||||||
|
### Trust
|
||||||
|
|
||||||
|
Jika pembeli membeli sesuatu karena kebutuhan ataupun keinginan, apa yang menjadi alasan pembeli membeli brand X dan bukan Y?
|
||||||
|
|
||||||
|
Sederhananya, karena kepercayaan.
|
||||||
|
|
||||||
|
Pencinta Indomie memilih Indomie daripada Sedaap dkk karena mereka percaya Indomie lebih nikmat.
|
||||||
|
|
||||||
|
Ini sedikit berat, mari kita bahas sedikit tentang kepercayaan.
|
||||||
|
|
||||||
|
Dalam mempercayai sesuatu, setidaknya memiliki 3 tingkatan:
|
||||||
|
|
||||||
|
1. Percaya karena mengetahui dari seseorang
|
||||||
|
2. Percaya karena melihatnya seseorang
|
||||||
|
3. Percaya karena merasakannya langsung
|
||||||
|
|
||||||
|
Jika gue bilang 'Indomie itu enak', dan kamu percaya akan hal itu karena kamu percaya dengan gue, berarti kamu berada di level pertama.
|
||||||
|
|
||||||
|
Jika kamu sudah melihat langsung bagaimana orang-orang makan Indomie dan bilang bahwa Indomie itu enak, berarti kamu berada di level kedua.
|
||||||
|
|
||||||
|
Jika kamu sudah merasakannya langsung bahwa Indomie enak, berarti harusnya tidak ada keraguan dan kamu berada di level ketiga.
|
||||||
|
|
||||||
|
Endorsement pada dasarnya hanyalah 'word of mouth' marketing dengan gaya. Karena secara teknis itu berada di level pertama dan masalahnya adalah tentang apakah kamu (yang meng-endorse) benar-benar merekomendasikan sesuatu tersebut atau tidak. Tapi sekali lagi, it's just business as usual.
|
||||||
|
|
||||||
|
Kembali ke topik, 'seseorang' memilih 'siapa' salah satunya adalah karena faktor kepercayaan.
|
||||||
|
|
||||||
|
Seperti, seseorang membeli iPhone nya Apple daripada Pixel nya Google karena mereka percaya akan value yang diberikan si iPhone tersebut meskipun secara teknis hanyalah sebuah ponsel dengan fitur yang kurang lebih sama.
|
||||||
|
|
||||||
|
Seperti, seseorang membeli iPhone di cuancuan.id (not affiliated) daripada tempat lain karena mereka percaya dengan Arief Muhammad, salah satu orang dibalik brand tersebut.
|
||||||
|
|
||||||
|
Sekarang begini, gue bilang bahwa "gue beli Macbook Air M1 di toko X di Tokopedia dan bener-bener puas banget dengan harga yang cukup kompetitif! Klo pengen beli Macbook Air M1 juga buat ngoding JavaScript, cobain deh beli di toko X, sellernya ramah pisan". Jika kamu (anggap saja):
|
||||||
|
|
||||||
|
1. Baca tulisan ini
|
||||||
|
2. Lagi butuh laptop baru buat ngoding
|
||||||
|
3. Bingung milih laptop yang mana
|
||||||
|
4. Percaya gue
|
||||||
|
|
||||||
|
Besar kemungkinan kamu akan tertarik dan mengunjungi produk yang gue tawarkan tersebut, sekalipun tidak membeli, karena itu udah beda urusan.
|
||||||
|
|
||||||
|
Endorsement dianggap dapat menjalin hubungan yang lebih emosional karena pemasaran melibatkan orang yang kamu (anggap aja) percaya.
|
||||||
|
|
||||||
|
Namun sayangnya, jika hobi kamu review laptop dan berharap menghasilkan sesuatu dari aktivitas tersebut dari tawaran endorsement, perjalanannya masih panjang. Sangat panjang. Baik untuk endorsement dalam bentuk paid promote, ataupun paid endorse.
|
||||||
|
|
||||||
|
Ada alternatif lain yang sedikit lebih mudah dilakukan.
|
||||||
|
|
||||||
|
Dan alternatif ini banyak digunakan oleh ex "Crazy Rich" yang ada di Indonesia.
|
||||||
|
|
||||||
|
### Affiliate
|
||||||
|
|
||||||
|
Monetasi via afiliasi lebih terjangkau daripada endorsement yang mana relatif elit. Siapapun dapat menjadi "affiliator", yang mana sebutan tersebut sekarang relatif berkonotasi negatif.
|
||||||
|
|
||||||
|
Skema pembayaran dari afiliasi ini adalah komisi, umumnya 10% dari harga produk. Jika produk yang kamu rekomendasikan seharga 30,000, kamu mendapatkan 3,000 per-transaksi yang berasal dari link yang mengandung kode afiliasi kamu tersebut.
|
||||||
|
|
||||||
|
Di Tokopedia, per tulisan ini dibuat, komisinya sebesar 10% dengan maksimal komisi 100,000 per-produk **plus **hanya bisa 5x per-hari per-produk. Sederhananya, bila kamu merekomendasikan produk seharga 1,300,000, dan ada 6 orang yang membeli produk tersebut di hari yang sama, berarti kamu seharusnya mendapatkan komisi 500,000 pada hari tersebut. Jika kamu bisa mendapatkan 500,000 untuk satu produk dalam sehari, dalam 30 hari seharusnya kamu bisa mendapatkan 15,000,000, secara pasif.
|
||||||
|
|
||||||
|
...yang anggap jika kamu berhasil merekomendasikan 3 produk dan berhasil mencapai batas, berarti kamu mendapatkan 1,500,000/hari/produk yang dalam 30 hari seharusnya bisa mendapatkan 45,000,000 dari 3 produk tersebut.
|
||||||
|
|
||||||
|
Secara pasif.
|
||||||
|
|
||||||
|
Tanpa modal langsung.
|
||||||
|
|
||||||
|
Terlihat mudah?
|
||||||
|
|
||||||
|
Tentu saja tidak.
|
||||||
|
|
||||||
|
Tapi kita tidak akan pernah tau sampai kita terus mencobanya sampai lihai, bukan?
|
||||||
|
|
||||||
|
And yes, komisi up to 70% totally doesn't make any sense.
|
||||||
|
|
||||||
|
### Building audience
|
||||||
|
|
||||||
|
Ini adalah bagian terakhir sebelum penutup.
|
||||||
|
|
||||||
|
Salah satu rujukan paling favorit gue tentang membangun audiens ini adalah sebuah artikel yang berjudul [1,000 True Fans](https://kk.org/thetechnium/1000-true-fans/).
|
||||||
|
|
||||||
|
Anyway, satu hal yang perlu diketahui dalam membangun audiens ini adalah, sekali kamu dikenal sebagai X, maka kamu akan terus dikenal sebagai X. Ini seperti kontrak penjualan jiwa kita.
|
||||||
|
|
||||||
|
Klo kamu dikenal karena sering mengunggah video tutorial programming, sampai kapanpun kamu akan dikenal sebagai orang tersebut oleh audiensmu. Jika, let's say, kamu somehow berhenti mengunggah video tersebut alih-alih menjadi kanal vlog, mereka harusnya akan mempertanyakan mengapa mereka masih di pentas tersebut karena mereka relatif menjadi penontonmu karena video tutorial programming yang kamu unggah.
|
||||||
|
|
||||||
|
Beberapa kreator memiliki 2 kanal yang membahas hal berbeda, just in case untuk meng-segmentasi dua penonton yang sama namun dengan minat berbeda.
|
||||||
|
|
||||||
|
Gue pernah lihat kondisi yang terjadi pada salah satu grup band favorit gue yakni Bring Me The Horizon. BMTH dikenal sebagai band metal, dan ketika BMTH merilis lagu yang tidak terdengar seperti metal, beberapa fans nya ada yang mempertanyakan kelanjutan band tersebut bahkan ada yang sampai kecewa, karena merasa BMTH yang pada saat itu bukanlah BMTH yang dia "kenal".
|
||||||
|
|
||||||
|
Tapi tentu saja beberapa fans nya ada yang terus mendukung BMTH. Mungkin mereka tidak memusingkan genre apapun yang dibawakan BMTH, as long as itu adalah BMTH, berarti itu BMTH, yang mereka gemari.
|
||||||
|
|
||||||
|
Poin utama dari essay 1,000 true fans tersebut gue rasa seperti: terus berikan yang terbaik kepada para penggemar sejati, sekalipun hanya 1,000 dari 100,000.
|
||||||
|
|
||||||
|
BMTH akan terus dikenal oleh para penggemar sejati tersebut sebagai Bring Me The Horizon, bukan sebatas sebagai grup band beraliran metal ataupun grup brand beraliran pop.
|
||||||
|
|
||||||
|
## Penutup
|
||||||
|
|
||||||
|
Tulisan ini adalah hasil dari sebagian pembahasan yang gue baca dari buku [Side Hustle: From Idea to Income in 27 Days](https://www.goodreads.com/book/show/33585396-side-hustle) nya [Chris Guillebeau](https://www.goodreads.com/author/show/3367145.Chris_Guillebeau). Gue kepikiran untuk mendapatkan passive income tanpa harus meninggalkan pekerjaan utama, dari bila mempertimbangkan berdasarkan kapasitas dan prioritas gue sekarang, sepertinya mendapatkan komisi dari afiliasi adalah usaha yang paling realistis yang bisa gue lakukan untuk mendapatkan pemasukan pasif.
|
||||||
|
|
||||||
|
Tujuan dari tulisan ini adalah personally adalah untuk memastikan apakah gue benar-benar mengerti dari pembahasan yang gue pelajari tersebut (sorry not sorry not telling you at first, just business as usual, you know), dan jika kebetulan memberikan insight ataupun memberikan motivasi untuk melakukan apapun itu yang ada disini, then, you can thank me later.
|
||||||
|
|
||||||
|
Dan jika ragu apakah akan berhasil atau tidak, just start anyway.
|
||||||
|
|
||||||
|
You will know.
|
||||||
|
|
||||||
|
You will learn something.
|
||||||
|
|
||||||
|
[You will found 10,000 ways that won't work.](https://www.brainyquote.com/quotes/thomas_a_edison_132683)
|
108
content/just-if-we-have-another-chance.md
Normal file
108
content/just-if-we-have-another-chance.md
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
---
|
||||||
|
title: Just if we have another chance
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: just-if-we-have-another-chance
|
||||||
|
date: 2022-05-07T13:23:49.000Z
|
||||||
|
date_updated: 2022-05-07T13:23:49.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
We make mistakes. People make mistakes. Everyone make mistakes.
|
||||||
|
|
||||||
|
Dari kesalahan kita mempelajari sesuatu. Membuat kopi terlalu hambar berarti kita mempelajari bahwa airnya terlalu banyak, tersesat karena belok kanan berarti kita mempelajari bahwa jalan yang benar adalah belok kiri, lidah tergigit ketika makan berarti kita mempelajari bahwa jangan terlalu cepat dalam mengunyah makanan.
|
||||||
|
|
||||||
|
Pertanyaannya adalah, apakah kita belajar dari kesalahan tersebut?
|
||||||
|
|
||||||
|
Dan yang paling penting lagi adalah, apakah kita bahkan menyadari ataupun menganggap bahwa itu adalah sebuah kesalahan?
|
||||||
|
|
||||||
|
Hari ini alhamdulillah gue sehat wal-afiat. Masih bisa menikmati kopi dan nikmatnya isapan rokok yang gue bakar. Jika pada suatu hari nanti gue terkena penyakit paru-paru, tentu gue akan kecewa, tapi tidak akan terkejut.
|
||||||
|
|
||||||
|
Dan jika itu terjadi, apa yang akan gue pikirkan nanti selain penyesalan "seandainya dulu gue tidak merokok"?
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Ada setidaknya 3 penyesalan terbesar dalam hidup gue sejauh ini namun gue akan coba generalisasi:
|
||||||
|
|
||||||
|
1. Mengutamakan ego daripada logika
|
||||||
|
2. Mementingkan diri sendiri daripada orang lain
|
||||||
|
3. Mementingkan kepentingan orang lain daripada kepentingan diri sendiri
|
||||||
|
|
||||||
|
Nomor 2 dan 3 sekilas terlihat kontradiksi, tapi pada dasarnya dua hal tersebut adalah hal yang sangat berbeda.
|
||||||
|
|
||||||
|
Dari 3 penyesalan diatas, terkadang gue bertanya-tanya: bagaimana jika pada saat itu gue tidak mengambil keputusan dalam keadaan marah? Bagaimana jika pada saat itu gue menyadari suatu hal dan berhenti menganggap bahwa hal tersebut tidak ada? Bagaimana jika pada saat itu gue mengamini apa yang orang lain inginkan alih-alih bersikeras untuk memilih apa yang gue inginkan?
|
||||||
|
|
||||||
|
Gue tidak akan tahu jawabannya, karena pada dasarnya jalan yang gue ambil adalah hal kontra dari pertanyaan tersebut.
|
||||||
|
|
||||||
|
Ada satu pertanyaan yang tidak jarang menghantui pikiran gue: apa yang akan dilakukan jika memiliki kesempatan lagi?
|
||||||
|
|
||||||
|
*Apa yang akan dilakukan jika memiliki kesempatan lagi?*
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Misal gue diberi kesempatan untuk kembali ke tahun 2018, spesifiknya ke momen ketika gue sedang bermain permainan DoTA setelah jam kantor. Teman gue mengajak ngopi di sebuah tempat kopi di Bandung. Ada seseorang spesial di tempat itu, dianggap spesial karena tidak biasanya orang tersebut hadir, terlebih karena tempat tinggal dia pada saat itu jauh di Yogyakarta.
|
||||||
|
|
||||||
|
Pada saat itu gue beralasan tidak bisa datang karena gue sedang bermain DoTA, yang tentu saja alasan utamanya bukanlah itu. Alasan utamanya adalah karena gue ingin balas dendam. Gue tidak datang untuk balas dendam karena ketika gue ke Jogja tidak jauh dari minggu itu, gue mengajak dia untuk bertemu dan dia tidak bisa mengiyakan karena alasan yang tidak gue ingat namun kurang masuk akal.
|
||||||
|
|
||||||
|
Hasilnya?
|
||||||
|
|
||||||
|
Kontak dan sosial media gue diblokir, hubungan kami—in any way—berjalan kurang baik, dan pada akhirnya gue hanya mendapatkan kepuasan sesaat. I've won, but at what cost?
|
||||||
|
|
||||||
|
Namun apa yang terjadi jika gue memilih untuk mendatangi? Nobody knows.
|
||||||
|
|
||||||
|
Mungkin gue akan tahu alasan dia sebenarnya mengapa tidak bisa bertemu gue? Mungkin kami menjalin sebuah hubungan yang lebih baik? Mungkin dia tidak akan memblokir kontak dan sosial media gue? Mungkin dia tidak akan berpacaran dengan pacarnya saat ini?
|
||||||
|
|
||||||
|
Sekali lagi, tidak ada yang tahu.
|
||||||
|
|
||||||
|
Gue merasa menyesal dengan pilihan yang waktu itu gue pilih, tapi bagaimana jika gue memilih pilihan sebaliknya, justru malah membuat kondisi menjadi lebih buruk daripada seperti sekarang?
|
||||||
|
|
||||||
|
Sekali lagi, tidak ada yang tahu.
|
||||||
|
|
||||||
|
Berdasarkan hal itu, gue memilih untuk tidak kembali untuk "memperbaiki" dan alih-alih memilih untuk merasa cukup dengan belajar dari kesalahan yang gue buat saja. Lebaran kemarin gue iseng mengontak dia berbekal kontak yang dikirim teman, dan ternyata gue sudah tidak diblokir lagi. Dan karena masih lebaran, kami pakai momen ini untuk saling bermaafan. Dia bilang ke gue untuk melupakan kejadian tersebut dan anggap saja sebagai bagian dari "proses menuju dewasa", dan dari sini gue yakin bahwa gue sudah tidak perlu menyesalkan penyesalan yang pertama gue tersebut.
|
||||||
|
|
||||||
|
Gue sudah lama menghindari mengambil keputusan ketika logika dan perasaan sedang merasa kacau berkat belajar dari peristiwa itu.
|
||||||
|
|
||||||
|
Gue tahu bahwa gue tidak akan bisa kembali ke masa lalu.
|
||||||
|
|
||||||
|
Gue tahu bahwa masih ada kesalahan lain yang mungkin belum pernah gue lakukan.
|
||||||
|
|
||||||
|
Gue tahu bahwa, kesempatan, seringkali tidak datang dua kali.
|
||||||
|
|
||||||
|
Dan dalam setiap penyudahan, gue selalu tidak melihat kebelakang.
|
||||||
|
|
||||||
|
Namun jika gue diberi kesempatan untuk dipertemukan kembali dengan yang pernah memutuskan untuk menyudahi, gue tidak akan melihat kebelakang. Beberapa teman dekat gue mengetahui ini, namun mereka ada beda perspesi dengan yang gue maksud.
|
||||||
|
|
||||||
|
Bukan berarti gue tidak akan pernah kembali dengan yang sudah 'pernah', gue hanya tidak ingin kembali bersama dengan seseorang yang sama dengan dia di masa lalu. Karena yang gue yakini, dirinya di masa lalu berbeda dengan dirinya di masa depan nanti, termasuk diri gue juga.
|
||||||
|
|
||||||
|
Tidak ada istilah "mendengarkan lagu lama" dalam kehidupan gue. Mungkin penyanyinya tetap sama, namun nadanya sudah berbeda. Banyak pengetahuan dan pengalaman yang sudah dipelajari, dan manusia pada dasarnya selalu berkembang menjadi lebih baik lagi.
|
||||||
|
|
||||||
|
Dan di konteks asmara, gue selalu mencintai seseorang karena seseorang itu sendiri as a person, bukan karena hal-hal yang gue cintai *kebetulan *berada pada orang tersebut.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Malam ini gue membuka aplikasi Photos sebelum tidur. Ada banyak kenangan yang diabadikan dalam bentuk media foto meskipun kenangan yang paling terbaik selalu berada di ingatan.
|
||||||
|
|
||||||
|
Gue mengingat bagaimana rasanya duduk berdua di Ekologi sambil mengingat betapa kekanak-kanakkannya kami waktu itu.
|
||||||
|
|
||||||
|
Gue mengingat bagaimana rasanya melepas dan mengumpulkan rasa rindu di Stasiun Bandung sambil mengingat betapa bodohnya kami menjalani hubungan yang berat sebelah.
|
||||||
|
|
||||||
|
Gue mengingat bagaimana rasanya berkenalan dengan *stranger *pertama kali sambil mengingat betapa melelahkannya kami dalam menjalin hubungan.
|
||||||
|
|
||||||
|
Semuanya spesial di tempat dan waktunya masing-masing. Tidak pernah gue menuntut apalagi membandingkan. Gue yakin kita hanya melakukan yang terbaik sekalipun pilihan terakhir yang dipilih adalah perpisahan.
|
||||||
|
|
||||||
|
HP gue simpan, sambil menatap langit-langit kamar yang gelap, pikiran gue mengeluarkan pertanyaan *"What if we had another chance to be like we used to be?"*
|
||||||
|
|
||||||
|
Terlepas apakah akan mengulangi kesalahan yang sama lagi atau tidak dan terlepas apakah akan terasa sama atau berbeda, poinnya ada di kesempatannya.
|
||||||
|
|
||||||
|
Karena pasti ada alasannya mengapa diberi kesempatan lagi ataupun tidak diberi kesempatan lagi sama sekali.
|
||||||
|
|
||||||
|
We don't always know the reason but something I believe of is that we gonna learn something else.
|
||||||
|
|
||||||
|
Belajar selalu terasa melelahkan dan kabar buruknya, kita akan terus belajar banyak hal seumur hidup.
|
||||||
|
|
||||||
|
Gue memilih untuk tidak menjawab pertanyaan dari pikiran gue tersebut, gue yakin sang waktu lah yang pantas menjawabnya.
|
||||||
|
|
||||||
|
I do my part, they do theirs.
|
||||||
|
|
||||||
|
Kita hanya memilih takdir kita masing-masing.
|
||||||
|
|
||||||
|
Terlepas usaha apa yang kita lakukan.
|
68
content/keychron-k2.md
Normal file
68
content/keychron-k2.md
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
---
|
||||||
|
title: Keychron K2
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: keychron-k2
|
||||||
|
date: 2021-06-27T09:59:05.000Z
|
||||||
|
date_updated: 2021-06-27T11:10:47.000Z
|
||||||
|
excerpt: Jika mengira tulisan ini adalah tentang review keyboard, lebih baik tutup tab ini karena jawabannya adalah bukan
|
||||||
|
tag:
|
||||||
|
- blog
|
||||||
|
---
|
||||||
|
|
||||||
|
Kala itu 21 Juli 2020, dan gue sedang menjalin hubungan dengan seseorang. Pada jam 12:43 WIB gue dikirim pesan yang berbunyi seperti ini:
|
||||||
|
|
||||||
|
*hmmm krn udah gede, aku suruh milih aja deh*
|
||||||
|
*hadiah km mau kindle apa kibor?*
|
||||||
|
|
||||||
|
Ya, pesannya exactly seperti itu, thanks to [ripgrep(1).](https://github.com/BurntSushi/ripgrep)
|
||||||
|
|
||||||
|
Sebelumnya kami memang sedang membahas *keyboard* dan mungkin karena Agustus adalah bulan kelahiran gue, dia sekaligus menanyakan hal diatas terlebih karena dia pun sedang membeli *keyboard *yang sama dan hari itu adalah 21 Juli.
|
||||||
|
|
||||||
|
Gue teringat betapa antusiasnya ketika menunggu hari ulang tahun gue, dan juga teringat betapa bahagianya gue ketika hari tersebut datang. Kami menjalin hubungan jarak jauh, dia di Jakarta dan gue di Bandung. Pertemuan adalah sesuatu yang selalu kami nantikan meskipun komunikasi daring selalu terjadi hampir setiap hari.
|
||||||
|
|
||||||
|
Ketika hari tersebut tiba, gue bener-bener merasa bahagia; terharu, dan bersyukur. Sejujurnya bukan 100% karena hadiah *keyboard *ini ataupun karena itu adalah hari ulang tahun gue, melainkan karena gue memiliki dia di hidup gue — pada saat itu.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/06/IMG_0650-1-.jpg)[Keychron K2 (RGB, brown switch)](https://www.keychron.com/products/keychron-k2-wireless-mechanical-keyboard?variant=31063869653081)
|
||||||
|
Ini adalah *mechanical keyboard *pertama yang pernah gue miliki, dan mungkin menjadi yang terakhir juga. Gue sangat senang & puas dengan *keyboard *ini dari segi tampilan, pengalaman mengetik, dan penataannya yang sangat rapih & membuat nyaman. Terlebih diberi oleh seseorang spesial di hari yang spesial, kurang sempurna apa lagi gue rasa?
|
||||||
|
|
||||||
|
Dan pada suatu hari, kami memutuskan untuk mengakhiri hubungan kami dan memilih jalan sendiri-sendiri. Sejujurnya gue pada waktu itu merasa sangat terpukul, mungkin dia juga. Kejadian tersebut berdampak ke banyak lapisan di kehidupan gue yang salah satunya adalah gue hilang semangat dalam berurusan dengan hal-hal terkait menulis kode.
|
||||||
|
|
||||||
|
Namun gue memiliki pekerjaan, dan pekerjaan gue adalah menulis kode. Keyboard ini menjadi salah satu alasan gue untuk masih ingin menulis kode karena gue sangat senang & nyaman mengetik menggunakan *keyboard *ini, khususnya untuk di pekerjaan gue.
|
||||||
|
|
||||||
|
## Sometimes shit happens
|
||||||
|
|
||||||
|
Pada suatu waktu *keyboard *ini tidak berjalan sebagaimana mestinya. Dimulai dari adanya latensi yang terasa ketika gue mengetik dengan huruf yang muncul di layar, sampai ke pemunculan huruf yang tidak wajar ketika gue mengetik di baris keempat *keyboard.*
|
||||||
|
|
||||||
|
Latensi tersebut biasanya bisa diselesaikan dengan cara *reconnect bluetooth*, karena si Keychron ini *wired *dan* wireless. *Untuk masalah yang kedua, biasanya juga bisa diselesaikan dengan *restart (power) keyboard*. Di minggu kemarin, masalah kedua tidak menghilang sekalipun sudah gue *restart* berkali-kali, bahkan sampai *factory reset *dan *reinstall firmware.*
|
||||||
|
|
||||||
|
Tentu saja masalah ini bukan karena gue sudah tidak memiliki hubungan dengan si pemberi *keyboard *ini. Keyboard ini gue rasa gue rawat dengan lumayan baik, setiap bulan kemungkinan gue membersihkan *keyboard* ini adalah 60% untuk pembersihan total (gue buka semua *keys* nya) dan 90% untuk pembersihan umum alias hanya *surface *nya aja.
|
||||||
|
|
||||||
|
Dan karena sudah tidak bisa diandalkan lagi (mungkin kecuali kalau gue ganti *board*), serta karena gue sedang butuh banget *keyboard external*, jadi gue putuskan untuk membeli *keyboard *baru dan menyimpan *keyboard *ini sebagai kenang-kenangan.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/06/IMG_0648-1-.jpg)Thank you, Keychron
|
||||||
|
Meskipun secara teknis kepemilikan *keyboard *ini sudah 100% milik gue, namun gue tetap ingin meminta maaf karena tidak bisa menjaga & merawat *keyboard *ini dengan sangat baik, khususnya bila si pemberi *accidentally* membaca tulisan ini.
|
||||||
|
|
||||||
|
## Life must goes on anyway
|
||||||
|
|
||||||
|
Perlahan semangat gue untuk menulis kode (khususnya diluar pekerjaan utama) muncul kembali, bahkan dari sebelum peristiwa si Keychron ini terjadi.
|
||||||
|
|
||||||
|
Gue masih menjadi seorang Programmer, begitupula dengan dia kalau ngeliat dari situs pribadinya.
|
||||||
|
|
||||||
|
Meskipun jalan yang kami pilih sudah tidak sama, bagaimanapun hidup harus terus berjalan. Mungkin dia sekarang sudah menemukan partnernya, karena dia layak mendapatkan yang terbaik. Dan kalau gue saat ini masih fokus ke diri sendiri sambil mempersiapkan sesuatu yang sedang gue perjuangkan.
|
||||||
|
|
||||||
|
Banyak kenangan yang pernah kami alami, dari yang paling menyebalkan sampai yang paling menyenangkan. Dan *keyboard* ini adalah kenangan terakhir dari semua pemberian dia yang pernah gue dapatkan dan yang masih ada dikeseharian gue.
|
||||||
|
|
||||||
|
Ketika gue menatap *keyboard *ini, terkadang terlintas dipikiran gue ketika pertama kali mendapatkan *keyboard *ini.
|
||||||
|
|
||||||
|
Dari harinya, suasananya, sampai ke emosi yang gue rasakan pada saat itu.
|
||||||
|
|
||||||
|
Namun perasaan gue sudah berdamai dan juga gue sudah tidak lagi membenci peristiwa mengenang, berkat seseorang. Tepat sebelum gue mengetik ini, gue baru saja menyimpan *keyboard *beserta kardusnya ke box gue.
|
||||||
|
|
||||||
|
Tidak ada yang berubah setelah gue tidak menggunakan *keyboard *tersebut lagi namun satu: gue sudah tidak bisa menatap *keyboard* tersebut sambil membayangkan momen ketika pertama kali mendapatkannya.
|
||||||
|
|
||||||
|
Dan pada malam ini, izinkan gue untuk mengenang momen itu dan juga dengan momen pertama kali berkomunikasi; dengan momen pertama kali bertemu, dengan kerinduan ketika masih bersama, dengan suaranya yang memiliki 2 versi, dengan usaha saling mendukung ketika berkontribusi ke komunitas, dengan percakapan setiap kali hendak beranjak tidur, dengan semua kebaikannya, dengan omelannya setiap kali gue melewati makan;
|
||||||
|
|
||||||
|
Dengan semuanya.
|
||||||
|
|
||||||
|
Untuk yang terakhir kali.
|
||||||
|
|
||||||
|
Tanpa perlu menatap *Keychron K2.*
|
30
content/known-unknowns.md
Normal file
30
content/known-unknowns.md
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
---
|
||||||
|
title: Known unknowns
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: known-unknowns
|
||||||
|
date: 2022-08-03T15:25:22.000Z
|
||||||
|
date_updated: 2022-08-03T15:25:22.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
I'm always curious when people are daydreaming, so what’s on your mind exactly?
|
||||||
|
|
||||||
|
As you look ahead, do you ever have a question: Where will this path lead? What do I want? What are the costs?
|
||||||
|
|
||||||
|
You may have a vision, but can you feel the blind spot yet?
|
||||||
|
|
||||||
|
If you look ahead, what do you look for when you look back? Something you left behind? A lesson? And why did you do it anyway?
|
||||||
|
|
||||||
|
The future, has always been a mystery. If anything can go wrong, it will. If you repeat the same mistakes, it's a decision. If you have no idea where you're going, you will find it out eventually.
|
||||||
|
|
||||||
|
I wish we could talk. Talking about your day, your life, your dreams.
|
||||||
|
|
||||||
|
If you ever feel we are that far, just spread your hands. You’ll sense my touch and feel my cold hands.
|
||||||
|
|
||||||
|
Maybe you have no idea what’s going on. But have you ever asked why we are here?
|
||||||
|
|
||||||
|
Maybe we're both looking for answers. But do we really know what the question is?
|
||||||
|
|
||||||
|
If you've ever wondered what goes through my mind when I'm daydreaming, now you know.
|
||||||
|
|
||||||
|
Then how is yours?
|
15
content/langganan.md
Normal file
15
content/langganan.md
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
title: Langganan
|
||||||
|
tags:
|
||||||
|
- seed
|
||||||
|
---
|
||||||
|
|
||||||
|
- Jika software, umumnya berbentuk Software As a Service (SaaS)
|
||||||
|
- Selainnya, besar kemungkinan Streaming services. Kecuali membahas tentang XaaS (IaaS, PaaS, FaaS, DBaaS)
|
||||||
|
- Keduanya yang dibayar adalah "lisensi"
|
||||||
|
- Untuk layanan streaming, cukup kontras: media yang dimainkan dilindungi oleh DRM, dan yang dibayar oleh pengguna pada dasarnya adalah lisensi untuk menggunakan software yang melakukan *decryption* terhadap konten DRM tersebut (i.e aplikasi Netflix di mobile)
|
||||||
|
- Fuck DRM
|
||||||
|
- Di model freemium, pada dasarnya yang dibayar adalah "fitur" untuk menghilangkan (sebagian atau keseluruhan) iklan
|
||||||
|
- Fuck DRM
|
||||||
|
- Di model freemium yang lebih masuk akal, umumnya yang dibayar adalah eksklusivitas, dari jenis resolusi; judul yang bisa dimainkan, sampai fitur pelengkap seperti dukungan Dolby Vision dan Atmos
|
||||||
|
- Fuck DRM
|
127
content/lingkungan.md
Normal file
127
content/lingkungan.md
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
---
|
||||||
|
title: Lingkungan
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: lingkungan
|
||||||
|
date: 2023-03-16T15:05:28.000Z
|
||||||
|
date_updated: 2023-03-16T15:05:28.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Pada suatu hari gue dibawa ke Masjid Agung Pandeglang sama bokap, jika tidak salah ingat, itu ketika bokap masih bekerja di instansi yang dekat dengan masjid tersebut dan gue sedang menimba ilmu di sebuah sekolah yang berada di daerah Pandeglang. Disekitar masjid tersebut terdapat pohon kurma, namun tak berbuah. Bokap gue bilang, intinya, pohon kurma itu bisa berbuah jika berada di iklim yang kering seperti Timur Tengah ataupun Afrika Utara, sedangkan Indonesia adalah negara dengan iklim tropis yang relatif lembap.
|
||||||
|
|
||||||
|
Di hari yang lain gue pernah memelihara sebuah kaktus pemberian dari teman kantor gue dulu. Kaktus tersebut gue rawat sebaik mungkin meskipun pada akhirnya mati juga.
|
||||||
|
|
||||||
|
Gue menjadi kepikiran dua hal diatas ketika sedang berjalan pulang dari daerah Kuningan ke kos meskipun gue tidak ingat persisnya apa yang menjadi pemicunya. Dari dua hal diatas, ini membuat gue kepikiran: *dari tidak berbuahnya pohon kurma dan matinya kaktus yang sudah gue rawat, apakah itu 'salah' si kurma/kaktus atau mungkin karena sesuatu lain? *And here we are.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Ada beberapa tren yang mungkin masih menjadi sesuatu sampai hari ini, yakni menyebut dirinya "ex-something" sebagai identitas. Dan yang umum ditemukan di industri teknologi seperti "ex Apple", "ex Meta", "Xoogler", atau bahkan: "Ex-Silicon Valley". Personally gue tidak memusingkan hal tersebut sampai ke pembahasan menjadi subjektif hanya karena sebuah latar belakang yang entah bagaimana tingkat relevansinya.
|
||||||
|
|
||||||
|
Anyway, seiring berjalan waktu, gue menjadi sedikit mengerti mengapa tren tersebut ada, disamping untuk mendapatkan pengakuan. Ada alasan mengapa sebuah tempat menjadi identitas dari seseorang ataupun sesuatu.
|
||||||
|
|
||||||
|
Adalah lingkungan.
|
||||||
|
|
||||||
|
Bukan hanya nama dan letak geografis yang membedakan Silicon Valley dengan Bukit Algoritma, San Francisco dengan Kemang, ITB dengan ((kampus gue yang tidak akan disebut namanya)) dan mungkin Jakarta dengan Serang.
|
||||||
|
|
||||||
|
Gue akan berbagi singkat tentang apa yang gue alami.
|
||||||
|
|
||||||
|
Pertama, dari pengalaman bersekolah 6 tahun di sekolah asrama. Ini mengisolasi muridnya dari dunia (lingkungan) luar. Kasarnya, di sekolah ini, kita melakukan *ini* karena semua orang melakukan *ini*. Seperti, kita bangun pagi sebelum adzan berkumandang karena semua orang disini melakukan itu, baik terpaksa ataupun sudah terbiasa.
|
||||||
|
|
||||||
|
Kedua, dari pengalaman tinggal beberapa tahun di Bandung dengan tinggal beberapa bulan di Jakarta. Di Jakarta, gue jadi terbiasa kemana-mana menggunakan transportasi masal daripada kendaraan pribadi, dari Transjakarta sampai Jakarta MRT. Selain itu, gue menjadi lebih sering bertransaksi non-tunai untuk berbagai kebutuhan, sekalipun untuk bayar *laundry *ataupun membayar nasi goreng depan kos.
|
||||||
|
|
||||||
|
Ketiga, dari bergaul dengan sesama perantau. Ini agak sensitif, tapi gue rasa alasan orang-orang meninggalkan kampung halaman memiliki tujuan yang sama: untuk mengejar sesuatu. Sesuatu yang mungkin tidak ada disana, di kampung halamannya.
|
||||||
|
|
||||||
|
Dari tiga hal diatas, sadar-tidak sadar, lingkungan berperan. Lingkungan membentuk seseorang ataupun sesuatu. Lingkungan seharusnya yang membuat budaya; prasarana, sudut pandang, pengalaman, komunitas, terjadi.
|
||||||
|
|
||||||
|
Sialnya, lingkungan memiliki seleksi. Alasan mengapa tidak semua orang berkesempatan bekerja di Apple, Google, Meta, tinggal di SF, berkuliah di ITB, salah satunya adalah karena bukan "yang terpilih", berdasarkan keterbatasan dan kelebihan nya.
|
||||||
|
|
||||||
|
Bukankah itu tidak adil? Tapi ketidakadilan yang membuat sesuatu menjadi adil, seperti, tidak adil bila semua orang kuliah di ITB dan tidak ada yang kuliah di UI. Benar?
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Apa yang ditanyakan kepada seseorang dengan usia 25 tahun keatas? Jawabannya, selalu tergantung. Dan lingkungan turut berperan dalam pertanyaan yang akan diajukan oleh seseorang tersebut.
|
||||||
|
|
||||||
|
Di kampung halaman, umumnya adalah pertanyaan tentang pernikahan. Dalam kasus gue, alasannya, karena di lingkungan tersebut melakukan hal tersebut. Teman-teman kecil gue yang seumuran yang gue tidak ingat nama-nama nya sudah memiliki keluarga sendiri, juga, beberapa anggota dari keluarga besar gue menikah di umur tersebut. Tidak heran mengapa pertanyaan tersebut keluar dari mereka, dan itu gue rasa bukan sesuatu yang salah ataupun benar. Alasannya kebanyakan adalah "mau cari apalagi?" ataupun "mau tunggu apalagi?" dan mungkin itu pertanyaan yang patut dipertimbangkan untuk dicari jawabannya.
|
||||||
|
|
||||||
|
Jika tadi tentang umur, sekarang kita ambil kasus tentang karir.
|
||||||
|
|
||||||
|
Dalam dunia karir, setidaknya ada yang terobsesi dengan posisi; gaji, ataupun keamanan.
|
||||||
|
|
||||||
|
Ada yang "yang penting sesuai passion", ataupun "yang penting gaji gue 6 figures", dan bahkan "yang penting gue di perusahaan bonafide". Beda cerita jika membahas tentang the so-called entrepreneur fwiw.
|
||||||
|
|
||||||
|
Terkadang, kita tidak bisa mendapatkan ketiganya sekaligus dalam satu waktu. Seperti, hampir tidak mungkin untuk mendapatkan gaji yang setara dengan yang dibayar startup, di perusahaan bonafide, untuk posisi yang sama ataupun lebih tinggi (as the latter provides varied benefits than money).
|
||||||
|
|
||||||
|
Mendengar dari beberapa teman gue yang sudah berkeluarga ataupun lajang, jawabannya cukup bervariasi. Yang sudah berkeluarga cenderung untuk ingin bekerja di perusahaan yang relatif stabil karena alasan yang masuk akal, dan yang lajang cenderung untuk mendaki tangga karir terlebih dahulu terlepas rentang gaji yang diterima ataupun perusahaan yang dilamar, khususnya untuk teman-teman yang baru meniti karir. Beberapa ada yang ingin memulai usaha sendiri sambil mengumpulkan modal yang ada. Dan tidak sedikit teman-teman gue yang sudah berkeluarga cenderung bekerja di startup, karena alasan yang cukup masuk akal, iykyk.
|
||||||
|
|
||||||
|
Anyways, 98% di keluarga besar gue bekerja sebagai ASN. Gampangnya, misal jika ada 10 anggota keluarga, hanya 2 orang yang bekerja sebagai wiraswasta ataupun pengusaha ataupun pengangguran. Dan orang tua gue keduanya adalah ASN.
|
||||||
|
|
||||||
|
Waktu awal bekerja, orang tua gue mendorong untuk dapat bekerja di instansi pemerintahan. Karena, mungkin, semua orang *disini* melakukan itu? Setiap sekian waktu, orang tua gue meminta slip gaji gue, dan biasanya mereka mendorong gue untuk menjadi *seperti* mereka setelah menerima slip gaji gue. Pada suatu waktu, mereka berhenti mendorong gue setelah gue memberikan slip gaji terbaru gue, entah karena mempertimbangkan angkanya atau karena sudah lelah memberi saran ke anaknya yang keras kepala ini. Omongan untuk mempertimbangkan menjadi ASN sudah reda, dan gue memiliki kontrol penuh terhadap karir yang ingin gue pilih.
|
||||||
|
|
||||||
|
...meskipun memikul beban untuk terus meyakinkan bahwa jalan yang gue pilih adalah yang benar untuk gue.
|
||||||
|
|
||||||
|
Jika orang tua gue bukan ASN, mungkin mereka akan mendorong gue ke jalan yang lain. Mungkin agar menjadi pengusaha jika mereka pengusaha, atau menjadi pemuka agama jika mereka pemuka agama. Tidak heran mengapa ada "keluarga dokter", "keluarga seniman", "keluarga kiayi", dll karena salah satunya adalah faktor lingkungan tersebut, yang dalam konteks ini adalah lingkungan keluarga.
|
||||||
|
|
||||||
|
Someone has to break the chain—or not.
|
||||||
|
|
||||||
|
Terkadang, warisan dinilai dengan apa yang diwaris dan siapa yang mewaris.
|
||||||
|
|
||||||
|
Terlepas warisan apapun itu, gue rasa, yang paling berharga adalah memiliki kesempatan untuk memilih.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Gue baru ingat apa yang memicu gue untuk mengingat 2 hal yang dibahas di awal ketika sampai di paragraf ini, yang somehow tidak berkaitan dengan buah kurma ataupun kaktus.
|
||||||
|
|
||||||
|
Melainkan tentang anak, ketika gue melihat sebuah keluarga berada di bis yang sama menuju arah Ragunan. Entah dari sudut pandang "pembuat" anak (is it ethical to call it so?) yang biasa disebut sebagai orang tua atau sebagai seorang anak itu sendiri.
|
||||||
|
|
||||||
|
Jika suatu hari gue berkeluarga, lalu memiliki penerus, gue kepikiran apa yang gue harapkan dari si penerus tersebut? Mungkin ini terlalu jauh, dan jawabannya tidak harus hari ini, tapi ini menganggu pikiran gue. Jika gue tidak mengharapkan apapun, maka apa tujuan gue memiliki penerus nanti? Dan tidak mungkin dianggap sebagai 'kecelakaan' yang terdengar kurang etis bahkan tidak relevan.
|
||||||
|
|
||||||
|
Ini berkaitan dengan sebuah konsep tentang 'anak berbakti', 'anak durhaka', 'gagal menjadi orang tua', dan 'gagal menjadi anak'. Gue merasa menjadi bagian dari pemerannya setelah segala hal yang terjadi di masa lalu. Gue akan coba gambarkan beberapa dilemanya: jika menuruti keinginan ataupun harapan orang tua, dia menjadi anak berbakti. Jika dia menuruti keinginan ataupun harapan nya sendiri, dia menjadi 'anak durhaka' jika bertentangan dengan yang dimiliki si orang tua. Apakah tugas orang tua adalah mendukung apa yang si anak ini inginkan, atau membuat si anak mendukung apa yang orang tua inginkan?
|
||||||
|
|
||||||
|
Gue tidak ingin membuka luka masa lalu, tapi teringat anyway. Orang tua gue sempat bilang bahwa mereka seperti gagal dalam mendidik gue, dan gue selalu menyangkal bahwa itu bukan salah mereka. Mencari siapa yang salah-benar tidak merubah apapun juga. It still hurts, though.
|
||||||
|
|
||||||
|
Kembali ke cerita si kaktus, apakah kaktus gue mati adalah kesalahan si kaktus tersebut? Apakah karena air yang gue siram kurang? Atau kelebihan? Atau apakah karena udaranya kotor? Atau kurang mendapatkan sinar matahari? Atau apakah memang karena si kaktus tidak mempunyai motivasi untuk hidup?
|
||||||
|
|
||||||
|
Tentu manusia berbeda dengan kaktus, manusia memilki akal dan perasaan.
|
||||||
|
|
||||||
|
Mencari siapa yang salah dan benar tidak merubah apapun, tapi kita seharusnya setuju bahwa itu bukan kesalahan si kaktus. Atau kembali ke cerita si pohon kurma, apa kita perlu menyalahkan si pohon karena tidak menghasilkan buah?
|
||||||
|
|
||||||
|
Atau, apakah kita harus setuju bahwa yang salah sebenarnya adalah yang merawat kaktus ataupun yang menanam si pohon tersebut?
|
||||||
|
|
||||||
|
Apakah si kaktus dan si pohon kurma tidak do their best???
|
||||||
|
|
||||||
|
Or... are they?
|
||||||
|
|
||||||
|
Ini membuat gue mengevaluasi, seperti, apakah gue perlu meyakini diri gue bahwa gue tidak salah atau perlu mengakui bahwa diri gue egois dan membenahi apapun yang bisa dibenahi? Mungkin kalian pernah merasakan bagaimana rasanya melawan diri sendiri dan dihantui oleh masa lalu.
|
||||||
|
|
||||||
|
Gue ada pertanyaan sebagai penutup. Apa sesuatu yang membuat gue menjadi seperti ini? Berpikiran seperti ini? Bertindak seperti ini? Mengalami seperti ini?
|
||||||
|
|
||||||
|
Tidak lain dan tidak bukan gue rasa jawabannya adalah lingkungan.
|
||||||
|
|
||||||
|
But *how* exactly?
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Ketika gue menatap langit-langit di kamar yang sudah gelap ini, terdapat bisikan tak bersuara yang mempertanyakan: apa yang gue inginkan?
|
||||||
|
|
||||||
|
Dilema gue selalu tentang memenangkan sesuatu yang gue tahu bahwa tidak bisa memenangkan keduanya secara bersamaan. Seperti lo tidak bisa memenangkan surga dan neraka, lo hanya bisa memenangkan surga dan mengalahkan neraka, atau sebaliknya.
|
||||||
|
|
||||||
|
Dan gue selalu mempertanyakan "apakah mengalah untuk menang" bahkan adalah sebuah sesuatu?
|
||||||
|
|
||||||
|
Pelarian gue selalu tentang terbangun di sebuah tempat yang indah, damai, dan apapun yang menggambarkan sebuah utopia. Melupakan segala prinsip dan mimpi sebelumnya, lalu berpegang kepada filosofi hidup, seperti, Ikigai, mungkin. Tidak ada yang gue kenal selain diri gue sendiri. Tidak terikat kepada apapun dan siapapun. Tidak menginginkan apapun selain kebahagiaan, sampai pada akhirnya habis masa hidup dan mati dengan damai tanpa perlu dikenang siapapun dan apapun.
|
||||||
|
|
||||||
|
Terasa seperti 'lingkungan' yang ideal, gue rasa?
|
||||||
|
|
||||||
|
Masalahnya, gue tidak tahu apakah pelarian tersebut adalah 'surga' atau 'neraka' untuk gue. Manakah surga dan neraka antara realita yang ada dan imajinasi yang tadi? Apakah gue lebih cocok tinggal di 'surga' atau 'neraka' meskipun mungkin gue tidak dibuat dari api dan mungkin tidak ada tanah di surga?
|
||||||
|
|
||||||
|
Atau mungkin ada sesuatu lain yang menjembatani dua tempat tersebut dan gue akan cocok disana, yang mungkin itu adalah lingkungan yang selama ini gue cari?
|
||||||
|
|
||||||
|
Apapun itu, fariz tetap menjadi fariz. Dia tidak butuh apapun saat ini selain mengeluarkan apa yang ada dipikirannya yang hampir penuh, yang sayangnya ditumpahkan ke media ini. Ketika tidur, dia seperti menekan tombol flush di kloset, mengabaikan apa yang sudah dikeluarkan seperti tidak terjadi apapun disana, dan menjalani hidup seperti biasa, jika masih diberi kesempatan.
|
||||||
|
|
||||||
|
Jika suatu hari si fariz membaca ini lagi, ada 2 saran yang bisa dipertimbangkan untuk dipahami:
|
||||||
|
|
||||||
|
- Pahami konsep mengalah untuk menang. Konsep memenangkan pertempuran dengan mengalah dalam pertandingan. Konsep... ada sesuatu yang mungkin lebih berarti daripada nafsu (TODO: is there?)
|
||||||
|
- Pahami bahwa ego sebenarnya adalah musuh dan bukan teman. Cari tahu siapa sebenarnya 'teman' mu dan cari tahu mengapa ego adalah musuh.
|
||||||
|
|
||||||
|
Jika suatu hari masih tidak mengetahui dua poin diatas, cari tahu mengapa lo masih jatuh ke lubang yang sama.
|
||||||
|
|
||||||
|
Dan pertimbangkan apakah lo sebenarnya menjadikan 'lingkungan' hanya sebagai kambing hitam.
|
42
content/log/24.01.md
Normal file
42
content/log/24.01.md
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
---
|
||||||
|
title: "24.01"
|
||||||
|
date: 01/25/2024
|
||||||
|
tags:
|
||||||
|
- log
|
||||||
|
---
|
||||||
|
|
||||||
|
Sedang memikirkan ulang tangga karir di tempat sekarang. Gue yakin jika masih ada masa depan disini
|
||||||
|
dan masih ada satu hal lagi yang bisa gue capai disini. Sebelumnya mempertimbangkan untuk mencari
|
||||||
|
pengalaman baru pada Juni 2023, and yet, I'm still here (let's see till [[24.06]]).
|
||||||
|
|
||||||
|
Bulan ini mulai eksplorasi ke media lain, dan tahun ini adalah kesempatannya [video](https://evilfactorylabs.social).
|
||||||
|
Menjalankan [[platform video|platform video sharing]] adalah hal yang paling menantang di internet mengingat
|
||||||
|
sangat intensif dengan _internet bandwidth_ dan perputaran CPU. Namun tantangan paling beratnya bagaimanapun
|
||||||
|
adalah di pembuatan konten itu sendiri.
|
||||||
|
|
||||||
|
Ini adalah tahun kedua gue menggunakan [[DuckDuckGo]] di semua perangkat dan tidak pernah menggunakan `!g`
|
||||||
|
untuk mengalihkan pencarian ke mesin pencari Google. No regrets, always works.
|
||||||
|
|
||||||
|
Desember kemarin, gue memutuskan untuk membeli Macbook Air M2 (Midnight) karena senang dengan layarnya. Barang
|
||||||
|
tersebut adalah pembelian terbaik pertama gue di tahun 2023 yang dilanjutkan dengan Synology [[NAS]] di posisi kedua
|
||||||
|
dan tas Fjallraven di posisi ketiga. Gue sedang memikirkan untuk hanya memiliki barang yang [[Last Forever| "last forever"]]
|
||||||
|
khususnya di elektronik dan umumnya menghindari "fast fashion" mengingat sandang adalah kebutuhan primer. Meskipun koleksi
|
||||||
|
pakaian gue tidak banyak, tapi tetap, selalu tergoda untuk mengunjungi Zara, Uniqlo, H&M dkk setiap sedang iseng ke mall.
|
||||||
|
|
||||||
|
[[Fragrance]] tahun ini adalah Hermes Terre Eau Givree dari yang sebelumnya Eros Flame nya Versace di tahun 2023 kemarin.
|
||||||
|
Tapi sepertinya gue lebih suka dengan wangi vanilla daripada woody khususnya jika digabungkan dengan harum coklat haha. Yang
|
||||||
|
penting terasa seperti anak muda dan bukan om om, meskipun, yeah.
|
||||||
|
|
||||||
|
Bulan ini juga gue mengakhiri [[langganan]] ke Bilibili, [[Apple Music]] dan [[iCloud+]] setelah memiliki NAS di rumah. Belum ada
|
||||||
|
alasan untuk mengakhiri langganan layanan [[Netflix]], tapi gue ingin menghindari layanan OTT/VOD juga dan mungkin beralih ke TVOD
|
||||||
|
seperti ke Apple TV, Bioskop Online, atau bahkan the good ol' Bioskop.
|
||||||
|
|
||||||
|
Bagaimana untuk media lain seperti musik? Entahlah, mereka tiba-tiba saja ada di HDD. Just kidding, [iTunes Plus](https://www.apple.com/newsroom/2007/05/30Apple-Launches-iTunes-Plus/) is the only answer.
|
||||||
|
|
||||||
|
Hal terakhir yang bisa gue update: Jika kepikiran untuk menjalankan [[Homelab]] dan merasa 5 port di Switch sudah cukup, bohong. 1 port
|
||||||
|
digunakan untuk menghubungkan ke Router atau switch lain, sisa ada empat port. Jika ada satu komputer yang memiliki 2 NIC dan bohong jika tidak butuh
|
||||||
|
bounding, maka sisa 2 port lagi yang bisa digunakan. Dan tahu-tahu 2 port tersebut sudah terisi dan masih ada 2 kabel lagi yang belum terhubung.
|
||||||
|
|
||||||
|
Saran saya (belajar dari pengalaman), belilah setidaknya yang 8 port. 7 port relatif cukup untuk homelab skala kecil, dan gue memutuskan membeli
|
||||||
|
switch dari Netgear (yang unmanaged) karena pada akhirnya "Smart" switch TP-Link gue yang sebelumnya pun minim melakukan "manajemen" selain konfigurasi
|
||||||
|
VLAN dan QoS yang pada akhirnya bisa di konfigurasi di router juga jika router nya mendukung..
|
19
content/log/24.02.md
Normal file
19
content/log/24.02.md
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
---
|
||||||
|
title: "24.02"
|
||||||
|
date: 02/25/2024
|
||||||
|
tags:
|
||||||
|
- log
|
||||||
|
---
|
||||||
|
Tahun ini sepertinya lebih banyak konsumsi [[Kopi|kopi]] dari Fore daripada Kopi Kenangan ataupun toko kopi lain yang berlogo putri duyung. Sempat mencoba Tomoro Coffee, ternyata tidak sesuai dengan selera saya.
|
||||||
|
|
||||||
|
Varian favorit saya di Fore adalah Cafe Malt Latte yang sebelumnya bernama Irish Latte (non-alkohol). Saya agak senang dengan rasa yang creamy.
|
||||||
|
|
||||||
|
Bulan ini saya membeli Hard Disk tambahan dari Western Digital sebesar 2 TB untuk mengatur RAID di [[NAS]] saya untuk keperluan redundansi. RAID bukanlah backup, meskipun sama-sama untuk menghindari data loss. Bulan ini saya kembali ke masa dimana untuk membeli sesuatu harus menabung dulu, jadi, saya kumpulkan uang untuk membeli RAM tambahan untuk NAS saya :)
|
||||||
|
|
||||||
|
Di lain sisi, saya membeli 5 album digital di bulan ini. Harganya 45rb - 75rb rupiah per-album. Saya memang berencana untuk mengoleksi album yang diterbitkan oleh grup tersebut.
|
||||||
|
|
||||||
|
Game baru? [Grim Dawn](https://steamcommunity.com/app/219990). Game ini (Action RPG) dikembangkan oleh Crate Entertainment, dan kebetulan saya senang dengan game RTS yang dikembangkan oleh pengembang yang sama yakni [Farthest Frontier](https://store.steampowered.com/app/1044720/Farthest_Frontier/). Tadinya ingin membeli Last Epoch atau Pathfinder, tapi I guess, mari kita menabung untuk BG3 yang overrated itu.
|
||||||
|
|
||||||
|
Tapi saya sedang mencari game seperti Stardew Valley (simulasi) ataupun Sea Of Stars (RPG), jika ada rekomendasi, let me know.
|
||||||
|
|
||||||
|
Terakhir, memperbarui situs ini (rizaldy.club) adalah backlog terakhir saya sebelum melakukan hal lain yang lebih menantang. Saya berencana untuk melakukannya di tanggal 29 Februari 2024, but let's see!
|
172
content/make-money-grow-on-trees.md
Normal file
172
content/make-money-grow-on-trees.md
Normal file
@ -0,0 +1,172 @@
|
|||||||
|
---
|
||||||
|
title: Make money grow on trees
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: make-money-grow-on-trees
|
||||||
|
date: 2022-04-25T13:05:24.000Z
|
||||||
|
date_updated: 2022-04-25T13:05:24.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Dalam bertahan hidup, kita sebagai masyarakat modern relatif membeli bahan makanan pokok daripada mencari/mendapatkannya secara langsung. Berbeda dengan zaman dulu yang mungkin untuk bertahan hidup mereka harus repot-repot berburu.
|
||||||
|
|
||||||
|
Dan berkat ilmu pengetahuan, pemasokan bahan makanan pokok menjadi lebih efektif dan efisien. Masyarakat mulai mempelajari cara bertani, berternak, berkebun, dsb. Tidak perlu terlalu khawatir akan terjadinya kelangkaan hewan dan tumbuhan, karena masyarakat sekarang tahu bagaimana cara membudidayakannya.
|
||||||
|
|
||||||
|
Untuk dapat bertahan hidup, salah satu cara yang harus kita lakukan adalah dengan memberikan nutrisi kepada tubuh kita. Nutrisi tersebut didapat dari apa yang kita makan, namun bagaimana kita bisa makan? Jawabannya beragam namun yang pasti: dengan memiliki uang, sehingga kita bisa beli bahanan makanan ataupun makanan siap saji.
|
||||||
|
|
||||||
|
Atau sederhananya: kita butuh uang untuk hidup dan untuk melanjutkan hidup.
|
||||||
|
|
||||||
|
Ada banyak cara yang dilakukan untuk mendapatkan uang, cara yang paling favorit adalah dengan bekerja. Ketika kita bekerja dengan orang lain, pada dasarnya hasil yang kita dapatkan (dari usaha yang kita kerahkan) adalah uang yang dimiliki oleh majikan kita. Darimana majikan kita mendapatkan uang? Itu adalah topik lain.
|
||||||
|
|
||||||
|
Anyway, apa tujuan kita memiliki uang? Kemungkinan besar jawabannya adalah untuk dihabiskan. Untuk senang-senang, untuk memenuhi gaya hidup, untuk memenuhi biaya hidup, dsb. Jika tujuan memiliki uang adalah untuk terus dihabiskan, masalahnya, ini akan menjadi perulangan tanpa henti:
|
||||||
|
|
||||||
|
1. Cari uang
|
||||||
|
2. Dapat uang
|
||||||
|
3. Habiskan uang
|
||||||
|
4. Kembali ke nomor 1
|
||||||
|
|
||||||
|
Jika mengambil contoh kenapa kita (pekerja) mendapatkan uang, karena kita telah menghabiskan tenaga dan waktu kita untuk melakukan sesuatu yang mana sesuatu tersebut akan menghasilkan uang untuk majikan kita juga.
|
||||||
|
|
||||||
|
Yang perlu digarisbawahi adalah bagian dari "menghabiskan tenaga dan waktu" diatas.
|
||||||
|
|
||||||
|
Sebagai manusia pada dasarnya kita memiliki 3 hal yang membuat kita bisa terus hidup:
|
||||||
|
|
||||||
|
- Time
|
||||||
|
- Money
|
||||||
|
- Energy
|
||||||
|
|
||||||
|
Yang biasanya diilustrasikan dengan gambar berikut:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/04/0220d4_882b4cdc6d244facb433da82d5c83f47-mv2.png)[Sumber](https://www.profinancepartner.com/post/money-or-time-or-health-what-is-the-most-important)
|
||||||
|
Bagian menariknya adalah jika untuk mendapatkan uang kita harus kehilangan waktu dan energi, bisakah kita mendapatkan uang dengan... kehilangan uang?
|
||||||
|
|
||||||
|
Sehingga kita masih bisa menggunakan waktu dan energi tersebut untuk bekerja dengan majikan kita?
|
||||||
|
|
||||||
|
## Making money work
|
||||||
|
|
||||||
|
Jika kita sudah terbiasa membuat waktu dan energi kita bekerja untuk menghasilkan uang, bagaimana cara membuat uang kita bekerja untuk menghasilkan uang?
|
||||||
|
|
||||||
|
Mendapatkan uang pada dasarnya hanyalah pemindahan uang dari pihak satu ke pihak lain. Misal, dengan jualan barang. Kita mendapatkan uang karena seseorang membeli dari kita. Seseorang tersebut kehilangan sesuatu (uang), namun mendapatkan sesuatu yang dia inginkan (barang).
|
||||||
|
|
||||||
|
Yang mana tidak jauh berbeda dengan kita yang kehilangan sesuatu (waktu dan energi) untuk mendapatkan sesuatu yang kita inginkan (uang).
|
||||||
|
|
||||||
|
Tapi berjualan memakan waktu dan energi juga.
|
||||||
|
|
||||||
|
Dan bahkan membutuhkan uang juga.
|
||||||
|
|
||||||
|
Uang yang didapat dari hasil penjualan dihasikan karena pemasukan (keuntungan) lebih besar dari pengeluaran (biaya produksi). Ini konsep sederhana dan setiap orang pasti sudah hafal dengan konsep untung-rugi.
|
||||||
|
|
||||||
|
Tapi tidak semua orang bisa berjualan, anggap karena keterbatasan waktu, energi, dan uang. Dan keterampilan. Dan kebutuhan.
|
||||||
|
|
||||||
|
Alternatif lain yang cukup terjangkau adalah menabung, spesifiknya menabung di Bank.
|
||||||
|
|
||||||
|
Anggap bank menjanjikan bunga 3% p.a (per annum/per-tahun) yang berarti, jika kita memiliki tabungan sebesar 10,000,000 dalam setahun harusnya menjadi 10,300,000.
|
||||||
|
|
||||||
|
Yang berarti, dengan saldo 10,000,000 kita setidaknya bisa menghasilkan 25,000/bulan ((10000000*3/100)/12).
|
||||||
|
|
||||||
|
Semakin besar saldo yang dimiliki, seharusnya semakin besar pula yang akan didapat.
|
||||||
|
|
||||||
|
Kita setidaknya sudah bisa membuat uang bekerja untuk kita.
|
||||||
|
|
||||||
|
Bagaimana bank bisa memberikan kita bunga? Itu urusan bank, tapi sederhananya dari selisih keuntungan pinjaman. Selain itu, ada biaya administrasi yang harus dibayar oleh nasabah, anggap 10,000. Jadi, penghasilan 25,000/bulan tersebut jika mengambil nilai bersihnya hanyalah 15,000/bulan.
|
||||||
|
|
||||||
|
Yang berarti, keuntungan 300,000 tersebut bersihnya adalah 180.000.
|
||||||
|
|
||||||
|
Pertanyaannya, apakah worth it uang kita menghasilkan 180,000/tahun meskipun kita tidak perlu melakukan apa-apa?
|
||||||
|
|
||||||
|
## Making money grow
|
||||||
|
|
||||||
|
Oke tulisan ini masih hasil dari sebagian pembahasan yang gue baca dari buku [**Side Hustle: From Idea to Income in 27 Days**](https://www.goodreads.com/book/show/33585396-side-hustle) nya [**Chris Guillebeau**](https://www.goodreads.com/author/show/3367145.Chris_Guillebeau)**, **jika lo sudah membaca tulisan gue yang berjudul [Influencer economy.](https://s3.rizaldy.club/rizaldy-club-ghost/influencer-economy/)
|
||||||
|
|
||||||
|
Dari poin 'Making money work' diatas, untuk bisa membuat uang bekerja untuk kita, pada dasarnya kita harus memberikan uang kita kepada siapapun yang ingin menjanjikan keuntungan untuk kita. Kita harus peduli terhadap apa yang akan dia lakukan dengan uang tersebut, sehingga kita bisa mengetahui apakah janjinya bisa terpenuhi dan lain sebagainya.
|
||||||
|
|
||||||
|
Mungkin lo bisa meminjamkan uang tersebut ke teman lo yang ingin membuka usaha, atau mungkin lo bisa menggunakan uang tersebut untuk modal usaha lo nanti, apapun. Setelah kita bisa memikirkan bagaimana mempekerjakan uang untuk mendapatkan uang, sekarang kita pikirkan, bagiamana agar bisa menanam pohon uang untuk menghasilkan uang?
|
||||||
|
|
||||||
|
Dalam menanam pohon, setidaknya ada 3 hal yang harus kita pikirkan:
|
||||||
|
|
||||||
|
- Benih
|
||||||
|
- Waktu
|
||||||
|
- Tempat
|
||||||
|
|
||||||
|
Pohon akan berhasil tumbuh jika kita menggunakan benih yang benar, di waktu yang benar, dan di tempat yang benar. Seperti, ingin menanam pohon kurma di Indonesia yang memiliki iklim tropis untuk menghasilkan buah kurma? Semoga beruntung!
|
||||||
|
|
||||||
|
Anyways, pertanyaannya adalah, pohon apa yang ingin kita tanam?
|
||||||
|
|
||||||
|
Pohon uang!
|
||||||
|
|
||||||
|
Tentu, namun uang adalah 'buah' nya, bukan?
|
||||||
|
|
||||||
|
Apa benihnya? Bagaimana waktunya? Dimana tempatnya?
|
||||||
|
|
||||||
|
## Stock market
|
||||||
|
|
||||||
|
Gue hanya seorang Software Engineer dan bukan seorang trader, tapi pasar saham menurut gue yang paling make sense bagi yang memiliki lebih banyak uang daripada apapun (energi, waktu, kepercayaan, dsb). Pasar saham bukan satu-satunya pilihan, tapi gue taruh di daftar pertama karena konsep ini yang paling mudah dijelaskan.
|
||||||
|
|
||||||
|
Anggap kita ingin membuat uang bekerja dengan meminjamkan uang tersebut namun bukan ke bank. Dan anggap jika dipinjamkan ke bisnis teman mungkin lumayan beresiko.
|
||||||
|
|
||||||
|
Salah satu jalan keluarnya adalah dengan membeli saham. Saham pada dasarnya hanyalah sebuah surat, atau surat 'kepemilikan' perusahaan gampangnya. Jika perusahaan tersebut publik, secara teknis sahamnya dapat diperjual-belikan oleh siapapun.
|
||||||
|
|
||||||
|
Mengapa harus beli saham X dan mengapa perusahaan X menjual sahamnya, itu topik lain. Tapi sederhananya, perusahaan X let's say ingin build something. Pasti mereka butuh dana (let's say biaya produksi), jika dana nya kurang, meminjam dari bank tentu bukan pilihan yang efisien. Mereka menjual saham dengan harapan untuk mendapatkan uang, dan kamu membeli saham mereka dengan harapan untuk mendapatkan uang juga.
|
||||||
|
|
||||||
|
Make sense?
|
||||||
|
|
||||||
|
Anggap kamu ingin membeli saham $AAPL sebesar $160/lembar. Kamu memiliki hak untuk menentukan sesuatu terhadap perusahaan yang kamu 'miliki', namun itu tergantung kebijakan dan topik lain.
|
||||||
|
|
||||||
|
Pertanyaannya, bagaimana angka $160 tersebut dapat naik dan turun?
|
||||||
|
|
||||||
|
Jika kamu membeli 10 lembar, uang yang telah kamu keluarkan adalah $1,600 pada saat itu. Harga saham naik/turun pada dasarnya adalah karena faktor supply-demand, yang menjadi pertanyaannya adalah, kapan demand (sehingga kita bisa mendapatkan keuntungan) naik dan mengapa?
|
||||||
|
|
||||||
|
Itu topik lain tapi akan gue bahas sedikit. Company yang berjenis publik harus melaporkan keuangannya per quarter, jika pendapatannya menurun, berarti something's wrong khususnya bila berturut.
|
||||||
|
|
||||||
|
Dan itu mempengaruhi kepercayaan.
|
||||||
|
|
||||||
|
Mari kita asumsikan: Jika pendapatan menurun, berarti keuntungan tidak sebanyak sebelumnya.
|
||||||
|
|
||||||
|
Worse case scenarionya adalah: anggap pendapatan merah alias rugi.
|
||||||
|
|
||||||
|
Tidak ada keuntungan yang didapat sedangkan masih terus membutuhkan uang untuk operasional. Jika menjual saham, berdasarkan hukum supply-demand seharusnya harga sahamnya akan turun karena supply lebih besar dari demand. Tentu perusahaan memiliki kas, namun ini sebagai contoh saja untuk mempermudah.
|
||||||
|
|
||||||
|
Itu adalah contoh sederhana kenapa harga saham turun.
|
||||||
|
|
||||||
|
Bagaimana untuk naik? Supply-demand juga. Anggap perusahaan mendapatkan keuntungan 2x lipat pada Q1, itu bisa menjadi sinyal dan investor bisa menaruh kepercayaan kepada perusahaan tersebut. Since demand lebih besar dari supply, harga saham akan naik. Akan naik berapa persen sudah pasti tidak ada yang tahu, namun jika naik 10%, $1,600 yang pernah kamu keluarkan untuk membeli 10 lembar, sekarang nilainya menjadi $1,760.
|
||||||
|
|
||||||
|
Meskipun tidak realistis, jika mengambil contoh diatas, dalam satu quarter (4 bulan) kita dapat menghasilkan $160 (~2,300,000 IDR), berbeda dengan bergantung dengan bunga di bank yang mungkin hanya mendapatkan ~693,218 IDR untuk saldo ~23,000,000 IDR ($1,600).
|
||||||
|
|
||||||
|
Tapi resiko berinvestasi di pasar saham sangat tinggi karena relatif bersifat high-risk high-return. Untuk yang ingin bermain lebih aman, bisa ke pasar lain seperti Reksa dana ataupun emas.
|
||||||
|
|
||||||
|
### Mutual Funds
|
||||||
|
|
||||||
|
Reksa Dana cukup menjanjikan dan relatif aman. Sederhananya, jika investasi saham kita langsung mengalokasikan 100% budget kita ke saham manapun yang kita pilih, di Reksa Dana, kita mengalokasikannya kepada siapapun yang ahli dalam bidangnya.
|
||||||
|
|
||||||
|
Gampangnya begini, jika lo masih belum tau kapan harus beli/jual/simpan dan perusahaan apa yang harus lo pilih, instrumen reksa dana gue rasa pilihan yang tepat, karena uangnya kita percayakan ke "manajer investasi" siapapun itu.
|
||||||
|
|
||||||
|
Gue pernah coba setidaknya nabung di reksa dana dalam 11 bulan. Return yang didapat adalah 435,673 dengan total modal 11,500,000. Yang berarti keuntungan gue ~3,8%, itupun mengambil resiko yang moderat. Jika gue bergantung di bank dengan flat interest 3%, keuntungan yang gue dapat selama 11 bulan kasarnya adalah 225,000 dan itu sudah termasuk fee bulanan.
|
||||||
|
|
||||||
|
Segala sesuatu pasti memiliki tradeoffs dan tugas kita sebagai orang dewasa adalah memilih.
|
||||||
|
|
||||||
|
Gue tidak membahas emas apalagi mata uang kripto, selain karena membosankan juga karena pada dasarnya sangat sulit disebut "pohon" uang.
|
||||||
|
|
||||||
|
Sejujurnya ketika gue menulis ini gue seperti dejavu dan merasa seperti pernah menulis ini sebelumnya. But I don't know, ketika gue cek sepertinya tidak ada.
|
||||||
|
|
||||||
|
## Penutup
|
||||||
|
|
||||||
|
Ada 2 layanan yang gue gunakan untuk berinvestasi di pasar saham dan reksa dana, yakni [Gotrade](https://www.heygotrade.com) dan [Bibit.](https://bibit.id) Setelah penggunaan setahun lebih, gue rasa dua layanan tersebut cukup oke mengingat yang sering gue keluhkan di Twitter hanyalah Jenius.
|
||||||
|
|
||||||
|
Anyways, jika lo merasa tulisan ini berguna, bisa daftar pakai kode referal gue untuk 2 layanan tersebut, oke? Di Gotrade akan mendapatkan $2 credit dan kalau di Bibit akan mendapatkan 25,000 secara gratis — daripada gak pakai kode referal!
|
||||||
|
|
||||||
|
Kode referal gue adalah:
|
||||||
|
|
||||||
|
- Gotrade: `[512738](https://heygotrade.com/referral?code=512738)`
|
||||||
|
- Bibit: `faultables`
|
||||||
|
|
||||||
|
Plus, kalau daftar menggunakan kode referal gue, kita bisa ngobrol-ngobrol santai terkait hal ini baik di Discord ataupun [media lain](https://s3.rizaldy.club/rizaldy-club-ghost/contact/) yang gue gunakan.
|
||||||
|
|
||||||
|
Sebagai penutup, untuk membuat uang "tumbuh" di pohon pada dasarnya adalah dengan menambahkan pemasukan pasif, dan untuk yang tidak memiliki cukup waktu dan energi, investasi adalah salah satu kanal yang bisa dipilih mengingat pada dasarnya orang lain yang akan bekerja menggunakan uang kita tersebut.
|
||||||
|
|
||||||
|
Potensi mendapatkan kerugian pasti ada, namun yang pasti: siapapun ingin untung dan tidak ada yang ingin rugi.
|
||||||
|
|
||||||
|
Definisi keuntungan tidak selalu tentang "keuntungan orang lain adalah kerugian dari orang lain", karena itu hanya berlaku di judi (ataupun judi dengan gaya™ seperti binary options) dan judi tidaklah seperti menanam pohon uang.
|
||||||
|
|
||||||
|
Gue biasanya meng-investasikan duit gue untuk diri gue sendiri, untuk belajar; mencoba hal baru, apapun yang gue rasa akan mendapatkan "keuntungan" untuk diri gue dalam bentuk apapun itu.
|
||||||
|
|
||||||
|
Terkadang kita harus mengetahui kapan saatnya melakukan deprioritize something, kapan saatnya berhenti, dan kapan saatnya pivot. Dan I guess, untuk kasus gue disini sudah waktunya untuk gue men-deprioritize investasi kepada diri gue, karena gue rasa sudah cukup.
|
||||||
|
|
||||||
|
And that's why we're here, right?
|
470
content/membuat-ig-stories-ala-ala-menggunakan-pocketbase.md
Normal file
470
content/membuat-ig-stories-ala-ala-menggunakan-pocketbase.md
Normal file
@ -0,0 +1,470 @@
|
|||||||
|
---
|
||||||
|
title: Membuat "IG stories" ala-ala menggunakan PocketBase
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: membuat-ig-stories-ala-ala-menggunakan-pocketbase
|
||||||
|
date: 2023-01-22T11:19:42.000Z
|
||||||
|
date_updated: 2023-01-22T11:19:42.000Z
|
||||||
|
excerpt: klo rame lanjut part 2
|
||||||
|
---
|
||||||
|
|
||||||
|
Bagi yang sering mampir ke blog gak berguna ini, pasti sudah familiar dengan "logo" dari blog ini yang memiliki bingkai warna-warni yang mirip dengan yang ada di salah satu media sosial untuk menandakan adanya pembaruan/status. Dan jika logo tersebut di klik, maka akan muncul sesuatu yang kurang lebih seperti ini:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2023/01/CleanShot-2023-01-21-at-00.21.19.png)
|
||||||
|
Since gue melacak siapapun (selama tidak memblokir skrip umami.js gue) yang melakukan aksi tersebut, gue rasa memiliki fitur "stories" agak potensial, alias, nice to have, jika melihat ke jumlah event yang terlacak. Mungkin ada yang tertarik untuk mengikuti "kabar" harian gue yang eksklusif dalam bentuk media?
|
||||||
|
|
||||||
|
Dan juga, sudah lama gue ingin memiliki fitur "stories" ala-ala yang tidak terlekat dengan platform tertentu, dan dari fitur serupa yang ditawarkan oleh penyedia layanan berbeda ([Instagram Stories](https://help.instagram.com/1660923094227526), [WhatsApp Status](https://faq.whatsapp.com/502161774931737), [Facebook Stories](https://www.facebook.com/help/862926927385914), [Signal Stories](https://signal.org/blog/introducing-stories/), [Snapchat](https://www.snapchat.com), [TikTok Stories](https://support.tiktok.com/en/using-tiktok/creating-videos/tiktok-stories), dll) hanya Instagram Stories yang sering gue gunakan, meskipun hanya untuk shitpost. Effort pertama yang gue lakukan adalah dengan membuat bingkai warna-warni diatas, dan membuat *placeholder *ketika ada yang iseng mengkliknya, lalu lupakan, since gue belum memiliki cukup waktu untuk membuatnya berfungsi.
|
||||||
|
|
||||||
|
Ide dari fitur stories pada dasarnya adalah untuk membagikan sesuatu dalam jangka waktu tertentu yang umumnya berdurasi 24 jam setelah pembaruan tersebut dipublikasikan. That's it. Yang membuatnya kompleks adalah fitur-fitur pendukung seperti stiker, filter, analitik, editor, visibilitas, komentar, reaksi, kompresi, interaksi dsb dsb.
|
||||||
|
|
||||||
|
Di hari Sabtu kemarin ketika sedang iseng buka Github, salah satu [teman gue](https://github.com/kevanantha) memfavoritkan sebuah repositori yang bernama [PocketBase](https://github.com/pocketbase/pocketbase). Gue baca sekilas dokumentasinya dan sepertinya menjanjikan. Setelah menjalankan instance tersebut di server rumah (yang hanya memakan waktu 10 menit, literally segampang itu), gue membuat prototype di Codepen untuk membuat fitur "stories", dan hanya memakan waktu 2 jam.
|
||||||
|
|
||||||
|
Benar-benar segampang itu menggunakan PocketBase.
|
||||||
|
|
||||||
|
Sebelumnya gue menggunakan [Postgrest](https://postgrest.org/en/stable/) untuk membuat "backend" nya dan mempertimbangkan untuk menggunakan [Supabase](https://supabase.com) sebagai alternatif. Pada akhirnya backend tersebut tidak pernah selesai, dan ketika menggunakan PocketBase, hanya memakan waktu sekitar 2 jam yang bahkan bila hanya membuat backend (oversimplified) nya saja tidak lebih dari 10 menit.
|
||||||
|
|
||||||
|
Semenjak hari pertama menjalankan PocketBase gue sudah jatuh cinta dan sepertinya akan sering gue gunakan untuk membuat backend yang tidak memiliki fitur kompleks.
|
||||||
|
|
||||||
|
## Menjalankan Pocketbase
|
||||||
|
|
||||||
|
Basis data yang digunakan PocketBase adalah [SQLite](https://sqlite.org), dan basis data ini sudah lebih dari cukup. Berbicara tentang skalabilitas, SQLite sudah cukup teruji dan untuk "scaling" efektif nya menggunakan vertikal daripada horizontal, kecuali, mungkin, bila menggunakan [Litestream](https://litestream.io). Di banyak kasus, 1 mesin seharusnya cukup jika hanya untuk mengatur trafik keluar-masuk, khususnya bila hanya untuk aplikasi sistem informasi.
|
||||||
|
|
||||||
|
Dengan menggunakan Docker Compose, langkah yang dilakukan adalah membuat berkas seperti berikut:
|
||||||
|
|
||||||
|
version: "3"
|
||||||
|
|
||||||
|
services:
|
||||||
|
pocketbase:
|
||||||
|
restart: always
|
||||||
|
image: ghcr.io/muchobien/pocketbase:latest
|
||||||
|
command:
|
||||||
|
- --encryptionEnv
|
||||||
|
- ENCRYPTION
|
||||||
|
environment:
|
||||||
|
ENCRYPTION: # generate with $(openssl rand -hex 16)
|
||||||
|
networks:
|
||||||
|
- cloudflared
|
||||||
|
volumes:
|
||||||
|
- pocketbase_data:/pb_data
|
||||||
|
healthcheck:
|
||||||
|
test: wget --no-verbose --tries=1 --spider http://127.0.0.1:8090/api/health || exit 1
|
||||||
|
interval: 5s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
pocketbasedata:/pb_data
|
||||||
|
|
||||||
|
networks:
|
||||||
|
cloudflared:
|
||||||
|
|
||||||
|
Dan menjalankan `docker compose up -d` jika berkas tersebut bernama `docker-compose.yml`.
|
||||||
|
|
||||||
|
Lalu "dashboard" bisa diakses via port 8090, yang of course perlu dilindungi dibelakang reverse proxy.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2023/01/CleanShot-2023-01-23-at-00.21.43.png)https://rizaldy.today/_/
|
||||||
|
Jika penasaran dengan konfigurasi Nginx gue, berikut rules nya:
|
||||||
|
|
||||||
|
location /api {
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Forwarded-Host $host;
|
||||||
|
|
||||||
|
proxy_pass http://pocketbase:8090;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /_ {
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Forwarded-Host $host;
|
||||||
|
|
||||||
|
proxy_pass http://pocketbase:8090;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ada alasan khusus mengapa tidak meneruskan semua permintaan ke instance PocketBase, stay tune!
|
||||||
|
|
||||||
|
## Membuat collections
|
||||||
|
|
||||||
|
Kolom yang gue gunakan hanya 3: notes (text), expired (datetime), dan media (file, di handle oleh PocketBase).
|
||||||
|
|
||||||
|
PocketBase mengelola kolom khusus yakni `id`, `created` dan `updated` dan gue perlu kolom `expired` karena di PocketBase belum mendukung advance query seperti `now() - interval '1 day'` nya Postgres.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2023/01/CleanShot-2023-01-23-at-00.26.18.png)
|
||||||
|
Karena umumnya stories hanya berlaku selama 24 jam, di API rules nya gue definisikan seperti ini:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2023/01/CleanShot-2023-01-23-at-00.28.49.png)
|
||||||
|
Agar hanya bisa menampilkan data (stories) yang relevan (last 24h).
|
||||||
|
|
||||||
|
Dan karena menggunakan zona waktu UTC, setidaknya hanya perlu menambahkan 7 jam jika ingin relevan dengan waktu yang digunakan oleh pengguna internet di Indonesia.
|
||||||
|
|
||||||
|
## Setup Minio
|
||||||
|
|
||||||
|
PocketBase menawarkan fitur untuk mengatur unggahan, yang default nya menggunakan file system lokal (jika menggunakan Docker berada di `/pb_public`). Karena gue sudah menggunakan [Minio](https://min.io), gue akan memaksimalkan apa yang sudah ada dan terlebih Minio memiliki fitur advanced yang mungkin akan berguna di kemudian hari.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2023/01/CleanShot-2023-01-23-at-00.32.26.png)
|
||||||
|
Jika menggunakan file system local, mungkin bisa menggunakan `[cron(8)](https://linux.die.net/man/8/cron)` untuk melakukan cleanup setiap hari, jika ingin. Dan karena gue menggunakan Minio, ini bisa diatur di pengaturan Object Lifecycle menggunakan rules Expiry.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2023/01/CleanShot-2023-01-23-at-00.33.52.png)
|
||||||
|
Melakukan cleanup/purging ini bersifat opsional. Umumnya, sistem di sebuah aplikasi menggunakan "soft delete" untuk menandakan data yang ehm "dihapus", ini wajib menggunakan tanda kutip. Jika menggunakan pendekatan gue, objek yang ada di Minio akan benar-benar dihapus dan gue rasa gue akan mematikan rules tersebut HAHAHA.
|
||||||
|
|
||||||
|
## Membuat SDK
|
||||||
|
|
||||||
|
Ini adalah fitur inti dari si stories. Kode ini masih berantakan, bukan dimaksudkan untuk di lingkungan production, tapi setidaknya it works. Tidak ada komentar apapun (selain todo) terkait kode yang gue buat selama 2 jam ini (hackaton level), tapi gue rasa relatif mudah dipahami jika mengerti sedikit bagaimana fitur stories bekerja (pembelaan).
|
||||||
|
|
||||||
|
const triggerer = ".cover-icon";
|
||||||
|
const triggererInner = ".cover-icon-image";
|
||||||
|
|
||||||
|
const API_URL = "https://rizaldy.today/api";
|
||||||
|
const RECORDS = "/collections/stories/records";
|
||||||
|
const FILES = "/files";
|
||||||
|
const STORY_DURATION = 5;
|
||||||
|
|
||||||
|
document.querySelector(triggerer).addEventListener("click", openStories);
|
||||||
|
|
||||||
|
const SELECTOR = {
|
||||||
|
ROOT: "stories",
|
||||||
|
STORIES_WRAPPER: "stories__wrapper",
|
||||||
|
STORIES_ITEM_WRAPPER: "stories__item-wrapper",
|
||||||
|
STORIES_ITEM_BAR_WRAPPER: "stories__item-bar-wrapper",
|
||||||
|
STORIES_ITEM: "stories__item",
|
||||||
|
STORIES_ITEM_IS_SHOW: "stories__item--show",
|
||||||
|
STORIES_ITEM_BAR: "stories__item-bar",
|
||||||
|
STORIES_ITEM_BAR_IS_SEEN: "stories__item-bar--seen",
|
||||||
|
STORIES_ITEM_BAR_IS_PROGRESS: "stories__item-bar--progress",
|
||||||
|
STORIES_MEDIA: "stories__media",
|
||||||
|
STORIES_NOTES: "stories__notes"
|
||||||
|
};
|
||||||
|
|
||||||
|
let activeStory = 0;
|
||||||
|
let ticker = 0;
|
||||||
|
let nice = 0;
|
||||||
|
let stories = [];
|
||||||
|
|
||||||
|
let tick;
|
||||||
|
let wkwk;
|
||||||
|
|
||||||
|
const hasStories = () => stories.length !== 0;
|
||||||
|
const lastStories = () => activeStory > stories.length - 1;
|
||||||
|
|
||||||
|
async function bootstrap() {
|
||||||
|
const root = document.createElement("div");
|
||||||
|
root.classList.add(SELECTOR.ROOT);
|
||||||
|
|
||||||
|
const storiesWrapper = document.createElement("div");
|
||||||
|
storiesWrapper.classList.add(SELECTOR.STORIES_WRAPPER);
|
||||||
|
|
||||||
|
const storiesItemBarWrapper = document.createElement("div");
|
||||||
|
storiesItemBarWrapper.classList.add(SELECTOR.STORIES_ITEM_BAR_WRAPPER);
|
||||||
|
|
||||||
|
const storiesItemWrapper = document.createElement("div");
|
||||||
|
storiesItemWrapper.classList.add(SELECTOR.STORIES_ITEM_WRAPPER);
|
||||||
|
|
||||||
|
storiesWrapper.appendChild(storiesItemBarWrapper);
|
||||||
|
storiesWrapper.appendChild(storiesItemWrapper);
|
||||||
|
|
||||||
|
root.appendChild(storiesWrapper);
|
||||||
|
|
||||||
|
document.body.appendChild(root);
|
||||||
|
}
|
||||||
|
|
||||||
|
function cleanup (withoutSeen) {
|
||||||
|
document.getElementsByClassName(SELECTOR.ROOT)[0].remove();
|
||||||
|
|
||||||
|
if (!withoutSeen) {
|
||||||
|
document.querySelector(triggerer).style.padding = "0px";
|
||||||
|
document.querySelector(triggerer).style.backgroundImage = "none";
|
||||||
|
document.querySelector(triggererInner).style.backgroundColor = "transparent";
|
||||||
|
document.querySelector(triggererInner).style.border = "2px solid #ccc";
|
||||||
|
}
|
||||||
|
|
||||||
|
ticker = 0;
|
||||||
|
nice = 0;
|
||||||
|
activeStory = 0;
|
||||||
|
|
||||||
|
clearInterval(tick);
|
||||||
|
clearInterval(wkwk);
|
||||||
|
}
|
||||||
|
|
||||||
|
window.addEventListener('keydown', e => {
|
||||||
|
const isOpeningStory = document.getElementsByClassName(SELECTOR.ROOT)[0]
|
||||||
|
const isEscape = e.key === 'Escape' || e.key == 'Esc' || e.keyCode === 27
|
||||||
|
|
||||||
|
if (isEscape && isOpeningStory) {
|
||||||
|
e.preventDefault();
|
||||||
|
cleanup(true);
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function renderStoriesBar(stories) {
|
||||||
|
const storiesBarWrapper = document.getElementsByClassName(
|
||||||
|
SELECTOR.STORIES_ITEM_BAR_WRAPPER
|
||||||
|
);
|
||||||
|
|
||||||
|
for (let _story in stories) {
|
||||||
|
const bar = document.createElement("div");
|
||||||
|
|
||||||
|
bar.classList.add(SELECTOR.STORIES_ITEM_BAR);
|
||||||
|
|
||||||
|
storiesBarWrapper[0].appendChild(bar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function renderStories(stories) {
|
||||||
|
const storiesWrapper = document.getElementsByClassName(
|
||||||
|
SELECTOR.STORIES_ITEM_WRAPPER
|
||||||
|
);
|
||||||
|
|
||||||
|
for (let story in stories) {
|
||||||
|
const item = document.createElement("div");
|
||||||
|
item.classList.add(SELECTOR.STORIES_ITEM);
|
||||||
|
|
||||||
|
// TODO: handle non image
|
||||||
|
const media = document.createElement("img");
|
||||||
|
media.classList.add(SELECTOR.STORIES_MEDIA);
|
||||||
|
media.src = `${API_URL}${FILES}/${stories[story].collectionId}/${stories[story].id}/${stories[story].file}`;
|
||||||
|
|
||||||
|
const notesWrapper = document.createElement("div");
|
||||||
|
notesWrapper.classList.add(SELECTOR.STORIES_NOTES);
|
||||||
|
|
||||||
|
const notes = document.createElement("p");
|
||||||
|
notes.innerText = stories[story].notes;
|
||||||
|
|
||||||
|
const timestamp = document.createElement("time");
|
||||||
|
timestamp.innerText = "at " + stories[story].created;
|
||||||
|
|
||||||
|
notesWrapper.appendChild(notes);
|
||||||
|
notesWrapper.appendChild(timestamp);
|
||||||
|
|
||||||
|
item.appendChild(media);
|
||||||
|
item.appendChild(notesWrapper);
|
||||||
|
|
||||||
|
storiesWrapper[0].appendChild(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function getStories() {
|
||||||
|
if (hasStories()) {
|
||||||
|
return stories;
|
||||||
|
}
|
||||||
|
|
||||||
|
const fetchStories = await fetch(API_URL + RECORDS);
|
||||||
|
const json = await fetchStories.json();
|
||||||
|
|
||||||
|
return json.items;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function openStories() {
|
||||||
|
stories = await getStories(stories);
|
||||||
|
|
||||||
|
if (!hasStories()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
await bootstrap();
|
||||||
|
|
||||||
|
if (hasStories()) {
|
||||||
|
renderStoriesBar(stories);
|
||||||
|
renderStories(stories);
|
||||||
|
}
|
||||||
|
|
||||||
|
// first time
|
||||||
|
setTimeout(() => {
|
||||||
|
var x = document.getElementsByClassName(SELECTOR.STORIES_ITEM);
|
||||||
|
|
||||||
|
x[activeStory].classList.add(SELECTOR.STORIES_ITEM_IS_SHOW);
|
||||||
|
}, 10);
|
||||||
|
|
||||||
|
var x = document.getElementsByClassName(SELECTOR.STORIES_ITEM);
|
||||||
|
const storyBar = document.getElementsByClassName(
|
||||||
|
SELECTOR.STORIES_ITEM_BAR
|
||||||
|
);
|
||||||
|
|
||||||
|
wkwk = setInterval(() => {
|
||||||
|
if (storyBar[activeStory]) {
|
||||||
|
storyBar[activeStory].style.setProperty(
|
||||||
|
"--stories-item-bar-width",
|
||||||
|
nice + "%"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
nice++;
|
||||||
|
}, 50);
|
||||||
|
|
||||||
|
if (hasStories()) {
|
||||||
|
tick = setInterval(() => {
|
||||||
|
if (lastStories()) {
|
||||||
|
clearInterval(tick);
|
||||||
|
clearInterval(wkwk);
|
||||||
|
cleanup();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (storyBar[activeStory]) {
|
||||||
|
storyBar[activeStory].classList.add(
|
||||||
|
SELECTOR.STORIES_ITEM_BAR_IS_PROGRESS
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ticker && ticker % STORY_DURATION === 0) {
|
||||||
|
nice = 0;
|
||||||
|
|
||||||
|
if (storyBar[activeStory]) {
|
||||||
|
storyBar[activeStory].classList.remove(
|
||||||
|
SELECTOR.STORIES_ITEM_BAR_IS_PROGRESS
|
||||||
|
);
|
||||||
|
|
||||||
|
storyBar[activeStory].classList.add(
|
||||||
|
SELECTOR.STORIES_ITEM_BAR_IS_SEEN
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (activeStory !== stories.length - 1) {
|
||||||
|
if (x[activeStory]) {
|
||||||
|
x[activeStory].classList.remove(
|
||||||
|
SELECTOR.STORIES_ITEM_IS_SHOW
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
activeStory++;
|
||||||
|
|
||||||
|
if (x[activeStory]) {
|
||||||
|
x[activeStory].classList.add(SELECTOR.STORIES_ITEM_IS_SHOW);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ticker++;
|
||||||
|
}, 1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// i guess?
|
||||||
|
Promise.resolve(getStories()).then(prefetchedStories => {
|
||||||
|
if (prefetchedStories.length) {
|
||||||
|
// todo: prefetch media bcs why not
|
||||||
|
stories = prefetchedStories
|
||||||
|
|
||||||
|
const lalala = document.querySelector(triggerer);
|
||||||
|
const yes = document.querySelector(triggererInner);
|
||||||
|
|
||||||
|
if (lalala) {
|
||||||
|
// todo ni harusnya kek something selector.classList.add('selector--has-stories')
|
||||||
|
lalala.style.backgroundImage = "linear-gradient(rgb(186, 62, 138), #fba051)";
|
||||||
|
lalala.style.padding = "4px";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
Nantinya akan gue buat kode tersebut dapat dimuat via URL sehingga mungkin bisa digunakan oleh siapapun yang tertarik juga.
|
||||||
|
|
||||||
|
Kode CSS nya hanya seperti ini so far:
|
||||||
|
|
||||||
|
.stories {
|
||||||
|
background-color: rgba(0, 0, 0, 0.8);
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100vh;
|
||||||
|
font-family: "Inter", sans-serif;
|
||||||
|
color: #333;
|
||||||
|
z-index: 1337;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stories__wrapper {
|
||||||
|
max-width: 666px;
|
||||||
|
margin: auto;
|
||||||
|
margin-top: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stories__item-wrapper {
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 5px;
|
||||||
|
overflow: hidden;
|
||||||
|
padding-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stories__item {
|
||||||
|
width: 100%;
|
||||||
|
height: 0;
|
||||||
|
opacity: 0;
|
||||||
|
transition: 0.3s opacity;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stories__item--show {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
min-height: 30vh;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stories__notes {
|
||||||
|
padding: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stories__notes p {
|
||||||
|
margin-bottom: 0;
|
||||||
|
line-height: 1.8rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stories__notes time {
|
||||||
|
font-size: 0.7rem;
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stories__media {
|
||||||
|
width: 100%;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stories__item-bar-wrapper {
|
||||||
|
display: flex;
|
||||||
|
gap: 10px;
|
||||||
|
padding: 5px 10px;
|
||||||
|
margin-bottom: -15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stories__item-bar {
|
||||||
|
z-index: 1;
|
||||||
|
height: 6px;
|
||||||
|
background: rgba(0, 0, 0, 0.4);
|
||||||
|
border-radius: 100px;
|
||||||
|
flex: 1;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stories__item-bar--seen::before,
|
||||||
|
.stories__item-bar--progress::before {
|
||||||
|
background-color: #ccc;
|
||||||
|
content: "";
|
||||||
|
height: 6px;
|
||||||
|
display: block;
|
||||||
|
border-radius: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stories__item-bar--seen::before {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stories__item-bar--progress::before {
|
||||||
|
width: var(--stories-item-bar-width, 20%);
|
||||||
|
}
|
||||||
|
|
||||||
|
Semakin lama gue ngoding, semakin gak bener menamakan sesuatu hahaha.
|
||||||
|
|
||||||
|
## Penutup
|
||||||
|
|
||||||
|
Ada beberapa "gotcha" yang sudah masuk ke radar gue.
|
||||||
|
|
||||||
|
Pertama, make sure invalidate cache di reverse proxy ketika sudah waktunya, sehingga media yang seharusnya tidak bisa diakses lagi, tidak bisa diakses lagi.
|
||||||
|
|
||||||
|
Kedua, ini baru berlaku ke media gambar. Untuk video coming soon karena berurusan dengan "ticker" agak tricky (refer ke bagian `setInterval`).
|
||||||
|
|
||||||
|
Ketiga, penampilan media masih ngasal. Untuk sekarang gue menggunakan width 100% dan membiarkan browser untuk mengatur height nya yang menurut doi proporsional. Ini gue rasa akan bermasalah ketika berurusan dengan media yang menggunakan ukuran 1080x1920 (vertikal) sehingga ada scroll yang membuat tampilan tidak a e s t h e t i c.
|
||||||
|
|
||||||
|
Terakhir, belum ada "user preferences" yang bisa dikontrol oleh pengguna. Misal, mematikan fitur stories. Atau mematikan fitur prefetch. Atau memiliki fitur untuk melacak stories apa saja yang sudah dilihat dan yang belum. Ini penting karena pengunjung blog gue memiliki hak untuk dapat menentukan itu.
|
||||||
|
|
||||||
|
Selain itu, tampilan dari stories ini pun tidak terlihat seperti pada umumnya, namun yang penting, sudah tidak lagi menampilkan `alert` bagi siapapun yang mengkliknya lol.
|
||||||
|
|
||||||
|
Sebagai penutup, gue berharap jika suatu saat (atau waktunya berkontribusi?) PocketBase mendukung fitur "object expiration" jika menggunakan Minio yang mana menggunakan [Presigned URLs](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ShareObjectPreSignedURL.html) sehingga masa berlaku diatur berdasarkan signature yang dibuat, yang memungkinkan aktivitas "soft delete" menjadi lebih efektif serta relatif lebih aman.
|
||||||
|
|
||||||
|
Dan maksud utama gue membuat fitur ini adalah untuk berhenti memberi makan server Meta yang layanannya dilindungi autentikasi, tanpa mengorbankan online presence gue yang tidak penting-penting amat.
|
||||||
|
|
||||||
|
Anyway, semoga fitur ini berguna atau mungkin setidaknya menyenangkan.
|
||||||
|
|
||||||
|
See you there!
|
247
content/mempelajari-bahasa-pemrograman-lain-gaya-faultable.md
Normal file
247
content/mempelajari-bahasa-pemrograman-lain-gaya-faultable.md
Normal file
@ -0,0 +1,247 @@
|
|||||||
|
---
|
||||||
|
title: Mempelajari bahasa pemrograman lain gaya @faultable
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: mempelajari-bahasa-pemrograman-lain-gaya-faultable
|
||||||
|
date: 2021-07-16T17:07:00.000Z
|
||||||
|
date_updated: 2021-07-16T17:07:00.000Z
|
||||||
|
excerpt: jika semua yang lo miliki adalah palu, semuanya terlihat seperti paku
|
||||||
|
---
|
||||||
|
|
||||||
|
Berbagi adalah sesuatu yang gratis, setiap orang dapat membagikan apapun yang mereka inginkan terlepas dari latar belakang dan pengalaman. Dan ditulisan ini gue ingin berbagi tentang cara gue mempelajari bahasa pemrograman lain, yang mungkin jika someday gue sudah bukan pemrogram lagi dan somehow gue ingin kembali ke dunia pemrograman, semoga tulisan ini bisa menjadi rujukan gue (dan semoga tetap bisa diakses seumur hidup jaringan internet) sehingga gue bisa mengingat dengan persisnya bagaimana gue mempelajari suatu bahasa pemrograman.
|
||||||
|
|
||||||
|
Sebagai sangkalan, gue bukanlah ahli apalagi ahlinya ahli melainkan hanya seorang acak di internet yang meyakini bahwa menulis program seharusnya menyenangkan dan gak bikin stress.
|
||||||
|
|
||||||
|
## Introduksi
|
||||||
|
|
||||||
|
Gue mengklaim diri gue sendiri bahwa gue adalah seorang Jack of all trades – and master of none, obviously. Di dunia nyata, biasanya kita memiliki "mother/first/native language" seperti Bahasa Indonesia dan Basa Sunda untuk kasus gue. Di dunia perkomputeran, gue kurang yakin apa mother language gue, namun jika boleh meng-generalisir, ia adalah bahasa pemrograman untuk membuat program di internet.
|
||||||
|
|
||||||
|
Bahasa pemrograman itu adalah PHP: Hypertext Preprocessor (PHP), yang gue pelajari sekitar 8 tahun yang lalu dengan mempelajari sumber kode *webshell *(ehm, backdoor) yakni [b374k](https://github.com/b374k/b374k) versi 2.3.
|
||||||
|
|
||||||
|
Setelah dari PHP, gue pindah ke Ruby yang gue pelajari dari Codecademy. Ruby adalah bahasa pemrograman pertama gue ketika gue bekerja dengan orang luar melalui situs *freelancer marketplace *bernama Upwork (oDesk) dan *project *pertama gue adalah membuat CMS(-ish) yang dibuat diatas Jekyll.
|
||||||
|
|
||||||
|
Lalu setelah Ruby gue pindah ke JavaScript, sampai hari ini. Mungkin dari sekitar 2014 ketika gue pindah dari "Fullstack Developer" menjadi "Web Developer" atau yang sekarang disebut dengan Frontend Developer.
|
||||||
|
|
||||||
|
Banyak perkembangan yang gue rasakan ketika menjadi Frontend Developer sampai sekarang dan yang paling terasa adalah sekarang bebannya lebih banyak di kode daripada di design (remember how to fucking slice & sprite?)
|
||||||
|
|
||||||
|
Anyways, ada banyak bahasa pemrograman yang ada di dunia: Python, Java, Scala, Kotlin, Haskell dsb lalu mengapa gue memilih PHP; Ruby, dan JavaScript?
|
||||||
|
|
||||||
|
Secara filosofis adalah karena PHP relatif mudah dipelajari; Ruby relatif menyenangkan untuk ditulis dan JavaScript relatif mudah untuk dijalankan.
|
||||||
|
|
||||||
|
Jika untuk jawaban secara realistis: karena duit.
|
||||||
|
|
||||||
|
I follow where the fuck money goes – at the time.
|
||||||
|
|
||||||
|
## Motivasi
|
||||||
|
|
||||||
|
Meskipun meng-klaim diri gue sebagai Jack of all trades, gue tidak mengklaim diri gue sebagai *polyglot (in programming)*, mungkin lebih sebagai *language-agnostic *kali ye.
|
||||||
|
|
||||||
|
Gue sadar kalau JavaScript itu bahasa yang menyebalkan, dan mungkin akan lebih menyenangkan jika mengembangkan User Interface menggunakan Elm atau TypeScript atau Reason atau mungkin ke yang lebih ekstrim lagi seperti Rust & C++ dengan targetWeb Assembly yang bisa dimengerti oleh *evergreen browser.*
|
||||||
|
|
||||||
|
Tapi, yeah, just [pick the right tool for the job.](https://wiki.c2.com/?PickTheRightToolForTheJob) Dan pada saat ini, *the right tool* yang gue yakinkan untuk pekerjaan gue adalah JavaScript.
|
||||||
|
|
||||||
|
In some cases, gue ada kesempatan dimana gue 'pergi' ke bahasa pemrograman lain. Tujuannya beragam, entah hanya untuk bersenang-senang; studi banding, ataupun hal lain (seperti ngambil side job misalnya hahaha).
|
||||||
|
|
||||||
|
Misal, pergi ke Elixir/Haskell untuk mempelajari paradigma fungsional; pergi ke Go untuk mempelajari pola *concurrency, *pergi ke Rust untuk mempelajari manajemen memory atau pergi ke TypeScript untuk membuat meme.
|
||||||
|
|
||||||
|
Apapun alasannya, intinya gue tidak hanya karena iseng.
|
||||||
|
|
||||||
|
Bagian "Motivasi" disini gue harap bisa membantu untuk mendapatkan jawaban terkait "Motivasi" apa yang membuat lo ingin 'pergi' ke bahasa pemrograman lain – [spoiler] (jika motivasinya karena duit, bisa langsung skip bagian ini) [/spoiler] – sehingga waktu lo tidak banyak dihabiskan untuk melakukan hal yang tanpa alasan dan bisa dialokasikan ke hal lain seperti terus ber-eksplorasi dengan bahasa pemrograman yang sudah lo kuasai sekarang.
|
||||||
|
|
||||||
|
Jika sudah mendapatkan jawabannya, izinkan gue untuk membagikan apa yang gue ketahui & alami terkait mempelajari bahasa pemrograman ini kepada para pembaca budiman sekalian.
|
||||||
|
|
||||||
|
## It always starts with 'predecessor'
|
||||||
|
|
||||||
|
Apapun bahasa pemrograman yang kamu pilih saat ini, pasti adalah sebuah 'bahasa turunan' dari induknya ataupun yang 'terinspirasi' dari bahasa lain.
|
||||||
|
|
||||||
|
Misal, JavaScript. Yang mana terinspirasi dari bahasa pemrograman Java dan Script.
|
||||||
|
|
||||||
|
Hahaha bercanda.
|
||||||
|
|
||||||
|
Oke oke, misal JavaScript yang menurut Wikipedia terinspirasi dari bahasa pemrograman Java, Scheme, AWK, dan HyperTalk. Orang yang sudah mengetahui Java akan terasa familiar melihat JavaScript, dan terkadang ini menjadi jebakan seperti menulis kode JavaScript dengan gaya EnterpriseⓇ sebagaimana pemrogram Java.
|
||||||
|
|
||||||
|
But anyway, Java sendiri terinspirasi dari C++. Jadi gak perlu bertanya mengapa belajar C++ lalu Java di jurusan Teknik Informatika yang kemungkinan penerapannya di dunia nyata untuk ukuran freshgrad sangat kecil, karena salah satunya dua bahasa pemrograman tersebut dapat dijadikan sebagai 'batu loncatan' untuk beranjak ke bahasa pemrograman lain yang lebih realistis.
|
||||||
|
|
||||||
|
Mengetahui bahasa induknya dapat membantu mempermudah mempelajari bahasa pemrograman yang ingin kamu pelajari saat ini. Bahasa pemrograman Python/Ruby akan relatif sulit dimengerti oleh kita yang terbiasa dengan Java/C dan bahasa pemrograman Haskell/Clojure akan relatif sulit dimengerti oleh kita yang terbiasa dengan Python/Ruby dan seterusnya.
|
||||||
|
|
||||||
|
Namun bukan berarti kita harus mempelajari bahasa induknya, melainkan cukup mengetahui saja sehingga tidak perlu heran untuk membuat polymorphism dengan *class *di Go ataupun untuk memutasi variable di Haskell.
|
||||||
|
|
||||||
|
## Paradigm
|
||||||
|
|
||||||
|
Paradigma sederhananya adalah tentang cara pandang, yang mana berpengaruh terhadap cara pikir; bersikap dan bertingkah laku.
|
||||||
|
|
||||||
|
Gue rasa kemungkinan besar orang mempelajari suatu bahasa adalah karena dia terpengaruh dengan apa yang ada didalam bahasa tersebut, bukan murni karena bahasa tersebut itu sendiri.
|
||||||
|
|
||||||
|
Misal, mereka yang tertarik mempelajari bahasa Korea karena menyukai idola mereka, mereka yang tertarik mempelajari bahasa Prancis karena menyukai budaya Prancis, ataupun mereka yang mempelajari bahasa Jepang agar bisa nonton jav tanpa subtitle.
|
||||||
|
|
||||||
|
Apapun alasannya, intinya karena terpengaruh dengan apa yang ada 'didalam' nya tersebut.
|
||||||
|
|
||||||
|
Di bahasa pemrograman, gue rasa juga tidak jauh beda.
|
||||||
|
|
||||||
|
Gue tertarik dengan Rust karena di cara mereka mengatur memori, terpengaruh dengan Go karena di cara mereka memperlakukan banyak pekerjaan di satu waktu dan tertarik dengan Elixir karena pendekatan fungsional yang mereka tawarkan.
|
||||||
|
|
||||||
|
Di kasus umum, paradigma disini biasanya tentang imperatif & deklaratif; static & dynamic typing, data & event driven dsb.
|
||||||
|
|
||||||
|
Dan setiap orang pasti memiliki preferensinya masing-masing. Misal seperti para functional programmer yang membenci hal-hal ribet yang terlihat imperatif dengan cara membungkus apapun yang bisa dibungkus dan yang klo ditanya alasannya kenapa, akan bercerita tentang aljabar, tritunggal dan kaitan antara illuminati & freemasonry.
|
||||||
|
|
||||||
|
Anyways, jika kamu sudah memiliki preferensimu dan paradigma di bahasa pemrograman yang kamu pilih sesuai dengan preferensi, it must be not that hard to learn your next programming language.
|
||||||
|
|
||||||
|
Jika misalnya tidak sesuai dengan preferensimu, gpp. Dunia tidak akan pernah selalu berjalan sebagaimana yang kamu harapkan. Namun kamu memiliki pilihan: tinggalkan & pindah atau terima & biasakan.
|
||||||
|
|
||||||
|
Jika kamu membenci mengapa tidak ada kata kunci `end` di setiap *statement *yang ada di Python ataupun membenci kenapa tidak ada *class *di Go, gue sudah memberikan jalan keluarnya diatas.
|
||||||
|
|
||||||
|
## Vocabulary
|
||||||
|
|
||||||
|
Akhirnya, masuk topik inti.
|
||||||
|
|
||||||
|
Bahasa selalu tentang himpunan kata, begitupula dengan bahasa pemrograman. Mengetahui seberapa banyak "kata" yang ada dapat memberikan gambaran seberapa banyak yang harus kita hafal – sehingga kita tidak menulis `True` di JavaScript untuk literal boolean, sebagai contoh.
|
||||||
|
|
||||||
|
Misal di [JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar), ada lebih dari 50 kata yang harus diingat yang kabar baiknya kita tidak harus mengingat itu semua dalam satu waktu.
|
||||||
|
|
||||||
|
Kata kunci seperti `for`, `if`, `while`, `async`, `yield`, `throw`, `function`, `finally`, `eventually`, `technically`, `literally`, `anyway` dsb adalah kata-kata yang harus kita ketahui dan ingat.
|
||||||
|
|
||||||
|
Kabar baiknya, kebanyakan bahasa pemrograman menggunakan kata kunci yang hampir sama dalam 'menandakan' sesuatu karena pada dasarnya kata-kata yang dipilih menggunakan bahasa Inggris.
|
||||||
|
|
||||||
|
Di sudut pandang kompiler, kata-kata tersebut adalah token. Token disini tidak hanya tentang kata kunci, melainkan juga tentang pengenal; tanda baca, tipe data dan lain sebagainya.
|
||||||
|
|
||||||
|
Namun sekali lagi, token yang ada hampir menggunakan kata yang sama.
|
||||||
|
|
||||||
|
Seperti, hampir semua bahasa pemrograman setuju untuk membuat pengulangan adalah menggunakan kata kunci `for` dan untuk menetapkan nilai pada suatu variabel adalah dengan tanda baca `=` dan bukan `which is`.
|
||||||
|
|
||||||
|
Yang berarti, tidak terlalu banyak yang harus diingat, bukan?
|
||||||
|
|
||||||
|
Namun bahasa bukan hanya tentang kata saja, karena bahasa tidak bermakna bila tanpa tatabahasa.
|
||||||
|
|
||||||
|
Dan disini bagian yang lumayan sulitnya.
|
||||||
|
|
||||||
|
## Grammar
|
||||||
|
|
||||||
|
Dalam bahasa Indonesia, untuk menjelaskan warna suatu daun, mungkin bisa menggunakan kalimat "warna daun itu adalah hijau".
|
||||||
|
|
||||||
|
Dalam bahasa Inggris, mungkin "leaf color is green".
|
||||||
|
|
||||||
|
Dalam JavaScript, mungkin `var leaf = 'green'` dan dalam Java mungkin `private static final String leaf = "green"`.
|
||||||
|
|
||||||
|
Secara bahasa, kalimat diatas hanyalah kumpulan kata yang terdiri dari:
|
||||||
|
|
||||||
|
- Warna
|
||||||
|
- Daun
|
||||||
|
- Itu
|
||||||
|
- Adalah
|
||||||
|
- Hijau
|
||||||
|
|
||||||
|
Yang jika kita urutkan secara alfabet berarti:
|
||||||
|
|
||||||
|
1. Adalah
|
||||||
|
2. Daun
|
||||||
|
3. Hijau
|
||||||
|
4. Itu
|
||||||
|
5. Warna
|
||||||
|
|
||||||
|
Yang tentu saja terlihat tidak memiliki makna.
|
||||||
|
|
||||||
|
Maksudnya, untuk membuat kumpulan kata tersebut bermakna, kita harus merangkainya dengan tatabahasa yang tepat.
|
||||||
|
|
||||||
|
Jika tidak tepat, maka pembacanya tidak akan paham maksudnya.
|
||||||
|
|
||||||
|
Jika pembaca tersebut misalnya kompiler, biasanya terdapat syntax error, karena, yaa, si kompiler gak paham sama yang lo maksud.
|
||||||
|
|
||||||
|
Grammar atau tatabahasa adalah salah satu bagian yang sangat sulit dipahami namun kabar baiknya lagi, tatabahasa pun memiliki pola.
|
||||||
|
|
||||||
|
At least itu yang dikasih tau sama manajer gue.
|
||||||
|
|
||||||
|
Yang artinya, karena pola, berarti bisa dihafal.
|
||||||
|
|
||||||
|
Misal, dalam pernyataan perulangan. Perulangan selalu tentang melakukan hal berkali-kali sampai ke kondisi ketika perulangan itu harus dihentikan (at least di bahasa pemrograman yang turing complete – waktunya bercerita tentang finite-state machine?). Untuk melakukan perulangan, misal dengan kata (kunci) `for`, kalimat tersebut adalah seperti ini di JavaScript:
|
||||||
|
|
||||||
|
for (let dosa = 0; dosa <= 10;) {
|
||||||
|
console.log(`Dosa anda adalah: ${dosa}`);
|
||||||
|
dosa++
|
||||||
|
}
|
||||||
|
|
||||||
|
Yang mana akan terus menampilkan `Dosa anda adalah: <jumlah dosa>` sampai jumlah dosa tersebut bernilai tidak lebih besar atau sama dengan 10.
|
||||||
|
|
||||||
|
Biar lebih menarik, gue akan menggunakan contoh lain yakni di Ruby. Kode di Ruby yang serupa dengan kode diatas kurang lebih seperti ini:
|
||||||
|
|
||||||
|
for dosa in 0..10
|
||||||
|
puts "Dosa anda adalah: #{dosa}"
|
||||||
|
end
|
||||||
|
|
||||||
|
2 kode diatas melakukan hal yang sama dan tata bahasa yang sama, namun memiliki sintaks yang berbeda.
|
||||||
|
|
||||||
|
Sintaks sederhananya adalah tentang "aturan struktur bahasa", yang bila mengambil contoh diatas: Di JavaScript, ketika membuat perulangan menggunakan `for` yang jenisnya jarak suatu angka, kita harus secara eksplisit membuat nilai "pembanding" menjadi seperti "yang dibandingkan" yang mana bila dari contoh diatas adalah dengan menambah 1 angka setiap pengulangan dan sedangkan di Ruby kita bisa menggunakan `..` (ekspresi rentang) untuk menandakan sebuah jarak angka, namun proses pemenuhan perbandingan tersebut dilakukan secara implisit.
|
||||||
|
|
||||||
|
Bagaimana bila kita menggunakan kata kunci `..` di JavaScript? Tentu tidak bisa, karena tidak sesuai aturan yang ada di JavaScript.
|
||||||
|
|
||||||
|
Dan kita harus menghafal "pola-pola" yang ada terkait aturan perstrukturan bahasa ini sehingga kita tidak menulis `for dosa in range(10):` di Ruby sebagai contoh.
|
||||||
|
|
||||||
|
## Standard Library
|
||||||
|
|
||||||
|
Dan ini bagian yang paling terakhir, sejujurnya.
|
||||||
|
|
||||||
|
Kebiasaan buruk gue adalah menyederhanakan sesuatu (my ex will agree) dan bila berbicara untuk konteks bahasa pemrograman, pada dasarnya bahasa pemrograman hanyalah tentang:
|
||||||
|
|
||||||
|
- Tatabahasa
|
||||||
|
- Tipe data
|
||||||
|
- Alur kontrol
|
||||||
|
- Penangan kesalahan
|
||||||
|
- Perulangan
|
||||||
|
- Iterasi
|
||||||
|
- Ekspresi
|
||||||
|
- Operator
|
||||||
|
|
||||||
|
Dibeberapa bahasa pemrograman lain seperti C++, Rust, OCaml, dll mungkin memiliki ekstensi tambahan seperti metaprogramming, macro, generic, dsb namun itu hanyalah ekstensi dan kita tetap bisa membuat program tanpa menggunakan ekstensi tersebut.
|
||||||
|
|
||||||
|
Nah, satu bagian – yang sedikit menjadi – pembeda dalam setiap bahasa pemrograman adalah Standard Library, dan kita harus menaruh perhatian lebih terhadap ini.
|
||||||
|
|
||||||
|
Misal, untuk membuka sebuah berkas yang berada di *disk *di Ruby kita menggunakan `File.open` sedangkan di Python menggunakan `open` dan di JavaScript (Node.js) menggunakan `fs.readFileSync`.
|
||||||
|
|
||||||
|
Bagaimana untuk membaca semua *environment variables *yang terdefinisi host? Bagaimana cara mengetahui jumlah core CPU yang ada di host? Bagaimana cara mendapatkan alamat memori dari variable X?
|
||||||
|
|
||||||
|
Pertanyaan-pertanyaan diatas mungkin bisa dijawab dengan cara RTFM yang biasanya berada di bagian API atau juga bisa didapat dari hasil mesin pencarian jika yang sedang buru-buru.
|
||||||
|
|
||||||
|
Intinya, kita harus mengetahui (dan menghafal) method mana yang harus dipilih untuk melakukan pekerjaan yang kita inginkan (apa yang harus gue pakai antara `strcopy`, `strlcpy` atau `strncopy` untuk menyalin string di C++?) yang sudah disediakan oleh bahasa pemrograman yang kita gunakan.
|
||||||
|
|
||||||
|
## Penutup
|
||||||
|
|
||||||
|
That's it, folks!
|
||||||
|
|
||||||
|
Sejujurnya ketika gue pindah ke bahasa pemrograman lain, yang gue perhatikan hanya 5 hal diatas. Karena, sekali lagi (mohon dimaafkan kebiasaan buruk gue) bahasa pemrograman hanyalah tentang:
|
||||||
|
|
||||||
|
- Tatabahasa
|
||||||
|
- Tipe data
|
||||||
|
- Alur kontrol
|
||||||
|
- Penangan kesalahan
|
||||||
|
- Perulangan
|
||||||
|
- Iterasi
|
||||||
|
- Ekspresi
|
||||||
|
- Operator
|
||||||
|
|
||||||
|
Dan gue rasa, 8 poin diatas adalah "bare minimum" dalam menulis sebuah instruksi menggunakan sebuah bahasa pemrograman.
|
||||||
|
|
||||||
|
Selebihnya, gue rasa kita akan lebih banyak berurusan dengan pola.
|
||||||
|
|
||||||
|
Pola menulis kode yang rapih, pola menulis program yang aman, pola mengatur kode yang mudah dipelihara, pola membuat program yang mengonsumsi sedikit memori, dsb.
|
||||||
|
|
||||||
|
Selain berurusan dengan pola, juga akan banyak berurusan dengan target platform dan jenis program itu sendiri. Membuat aplikasi web? Good luck mempelajari dari cara peramban bekerja sampai ke HTTP, TLS, DNS, dsb.
|
||||||
|
|
||||||
|
Membuat game? Good luck mempelajari GPU, shader, dsb.
|
||||||
|
|
||||||
|
Membuat basis data? Good luck mempelajari RAM, parser, dsb.
|
||||||
|
|
||||||
|
Sebagai penutup, gue tidak menganggap diri gue seorang generalis yang meskipun secara harfiah harusnya itu tidak benar. Jika ada komunitas "pencinta bahasa pemrograman X" dan "pembenci bahasa pemrograman X" gue yakin gue bergabung di 2 komunitas tersebut untuk menentang & membenarkan apa yang mereka cintai dan benci hahaha.
|
||||||
|
|
||||||
|
Disini gue tidak menyinggung tentang "mengapa mempelajari bahasa pemrograman X dan bukan Y ataupun Z" karena itu beda topik. Dan juga, somehow menjadi generalis terkesan kurang baik karena mengetahui banyak dari sedikit hal lebih baik daripada mengetahui sedikit dari banyak hal.
|
||||||
|
|
||||||
|
Namun yang jadi pembelaan gue adalah: menjadi spesialis tidak selalu tentang menjadi ahli dalam menggunakan sebuah alat, melainkan menjadi ahli dalam membuat apa yang ingin dibuat juga termasuk dalam hitungan.
|
||||||
|
|
||||||
|
Mungkin spesialis JavaScript dapat membuat aplikasi web terbaik yang dibuat menggunakan JavaScript, namun seorang spesialis pembuat web yang yakin bahwa aplikasi web tidak hanya tentang JavaScript juga harusnya bisa termasuk dalam hitungan.
|
||||||
|
|
||||||
|
Gue percaya setiap bahasa pemrograman memiliki fitur unik & andalannya masing-masing, namun pada akhirnya, semuanya akan bergantung pada compiler ataupun interpreter, IYKWIM.
|
||||||
|
|
||||||
|
Anyway, just pick the right tool for the job.
|
||||||
|
|
||||||
|
Dan yang paling penting, menulis program seharusnya menjadi aktivitas yang menyenangkan dan bukan memusingkan apalagi membuat stress.
|
||||||
|
|
||||||
|
So, choose your best ;)
|
||||||
|
**money will follow**
|
134
content/mencoba-icloud-email-plus-custom-domains.md
Normal file
134
content/mencoba-icloud-email-plus-custom-domains.md
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
---
|
||||||
|
title: Mencoba iCloud Email (plus custom domains)
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: mencoba-icloud-email-plus-custom-domains
|
||||||
|
date: 2022-02-09T13:30:44.000Z
|
||||||
|
date_updated: 2022-02-09T13:35:08.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Sudah 14 bulan menggunakan layanan email nya [Migadu](https://migadu.com) dan sejauh ini merasa puas dan plus belum pernah mengeluh ke customer support nya. Paket yang gue sewa di Migadu adalah Micro yakni $19/tahun, yang berarti kasarnya perbulan hanya $1,5 yang bahkan lebih murah dari harga rokok favorit gue.
|
||||||
|
|
||||||
|
Didepan Migadu gue menggunakan [SimpleLogin](https://simplelogin.io) dengan paket premium, biayanya sekitar $30/tahun yang berarti kasarnya $2,5/bulan. Again, ini lebih murah dari jatah kopi harian gue.
|
||||||
|
|
||||||
|
Total untuk biaya infrastruktur surel ini adalah $49/tahun alias 702,939 IDR per tanggal 10/02/22. Jika gue beli kopi kenangan tiap hari sekitar 59rb via GoFood (I did), harga tersebut bahkan lebih kecil untuk hitungan tahunan bila dibandingkan dengan biaya infrastruktur surel gue.
|
||||||
|
|
||||||
|
Gue tidak sengaja berlangganan [iCloud+](https://www.apple.com/icloud/) sekitar $0.99/bulan alias 15rb jika menggunakan mata uang Rupiah. Hampir 95% benefit yang ditawarkan oleh iCloud+ tidak gue butuhkan, karena:
|
||||||
|
|
||||||
|
1. Gue menyimpan data-data di server rumah gue yang bisa diakses dari mana aja
|
||||||
|
2. Gue tidak mengaktifkan layanan iCloud (iMessage, Photos, Notes, Reminders, dll) karena rata-rata [tidak di-enkripsi end-to-end](https://support.apple.com/en-us/HT202303), dan gue somehow worried dengan ini
|
||||||
|
3. Layanan "Private Relay" hanya berlaku di Safari dan sedangkan Hide My Email sudah menggunakan layanan dari SimpleLogin
|
||||||
|
|
||||||
|
Biaya 15rb/bulan untuk mendapatkan penyimpanan 50GB di "cloud"terlihat relatif murah. Semua data arsip yang gue simpan di server rumah gue aja cuma ~20GB per tahun 2018-2022. Ini gue iseng berlangganan iCloud+ gegara lagi buka Settings di laptop terus ke bagian iCloud terus gue liat tombol Upgrade dan karena harganya cuman 15rb, kenapa tidak gue lanjutkan aja mengingat saldo gopay gue ada 43rb.
|
||||||
|
|
||||||
|
And here I am. Setelah ~69 menit berlangganan hampir tidak menemukan perbedaan dari 69 menit sebelum gue berlangganan paket tersebut.
|
||||||
|
|
||||||
|
## Mencari benefit
|
||||||
|
|
||||||
|
Gue gak mau 30 hari gue sia-sia. Mau coba "Private Relay" nya Apple sayangnya cuman berlaku di Safari dan gue tidak menggunakan Safari di semua perangkat gue semenjak mendapatkan akses ke [Orion Browser.](https://browser.kagi.com) Dan juga resolusi DNS terjadi di relay server, yang sederhananya, very private very dns sinkhole at home gue bisa tidak terpakai.
|
||||||
|
|
||||||
|
Hal pertama gue mungkin akan menggunakan iCloud Drive nya aja walau external SSD gue yang berukuran 500GB baru terpakai ~20GB (bytes before unencrypted). Itung-itung buat [3-2-1 backup strategies](https://www.backblaze.com/blog/the-3-2-1-backup-strategy/).
|
||||||
|
|
||||||
|
Hal kedua ketika gue membaca dokumentasinya iCloud+, ternyata pelangganan iCloud+ bisa menggunakan [custom domain](https://support.apple.com/en-gb/HT212514) untuk email! Email pada dasarnya tidak dirancang untuk keamanan & privasi yang "advanced" karena jika ingin melakukan itu harusnya berada di layer atasnya (a.k.a application layers/L7).
|
||||||
|
|
||||||
|
Konten email di banyak layanan hanya ter-enkripsi *at rest *meskipun di beberapa layanan menyediakan enkripsi end-to-end yang pastinya less usable klo party nya tidak menggunakan enkripsi end-to-end juga.
|
||||||
|
|
||||||
|
Menariknya menggunakan SimpleLogin, email yang diteruskan dari SimpleLogin bisa di-enkripsi terlebih dahulu oleh signer@simplelogin.io dengan public key yang sudah gue defisiniskan disana. Namun pada akhirnya email keluar selalu tidak ter-enkripsi secara end-to-end (yang biasanya menggunakan GPG) dan sejauh ini gue belum merasakan benefit lebih dari email masuk yang ter-enkripsi selain berkurangnya kekhawatiran.
|
||||||
|
|
||||||
|
## Migadu -> iCloud Email Custom Domains
|
||||||
|
|
||||||
|
Konfigurasi email menggunakan custom domain relatif tidak sulit, hanya membutuhkan:
|
||||||
|
|
||||||
|
1. Bukti kepemilikan alamat domain dengan menambahkan CNAME records unique untuk kita
|
||||||
|
2. Mengatur MX records untuk dapat menerima email masuk
|
||||||
|
3. Mengatur [DMARC](https://postmarkapp.com/guides/dmarc) untuk terhindar dari sistem SPAM
|
||||||
|
4. Mengatur IMAP (untuk email masuk) dan SMTP (untuk email keluar) di mail clients
|
||||||
|
|
||||||
|
And that's it. Setup hampir kurang dari 30 menit jika melakukannya dengan benar (dan authoritative DNS server lo gak sampah). Cara setting custom domains di iCloud Email lumayan mudah, ke menu iCloud > checklist Mail > buka settings di [icloud.com](https://www.icloud.com/settings/) > klik tombol Manage Custom Email Domain.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/02/Untitled.jpg)icloud.com/settings
|
||||||
|
Per domain sejauh ini hanya bisa mendaftarkan 3 alamat, dan per akun gue kurang tau pastinya bisa mendaftarkan berapa domain tapi yang gue tahu bisa lebih dari 1 domain (update: 5 custom domains).
|
||||||
|
|
||||||
|
Di akun Migadu gue setidaknya ada 4 domain yang terdaftar (termasuk punya si [@ri7nz](https://twitter.com/ri7nz) dan [@evilfactorylabs](https://twitter.com/evilfactorylabs)). Untuk kepentingan bisnis (anjay) gue forward ke email internal gue cuman beda mailbox dan folder.
|
||||||
|
|
||||||
|
Confusing part nya adalah di bagian "Add existing email addresses" diatas apakah itu untuk masing-masing mailbox atau 3 alamat akan disatukan menjadi 1 mailbox.
|
||||||
|
|
||||||
|
## SimpleLogin -> Hide My Email
|
||||||
|
|
||||||
|
Sebelumnya gue menggunakan pola `random_words@private.rizaldy.club` untuk alamat email yang gue gunakan untuk membuat akun pada sebuah layanan (E-commerce, SaaS, dsb). Jadi ketika ada data leaks gue bisa tahu dari layanan mana.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/02/Untitled2.jpg)Hide My Email
|
||||||
|
Hide My Email nya Apple pun serupa, tapi menggunakan @icloud.com (atau @privaterelay.appleid.com) alih-alih custom domain yang gue inginkan.
|
||||||
|
|
||||||
|
Jika gue menggunakan layanan ini, ada 2 kehilangan yang harus gue relakan:
|
||||||
|
|
||||||
|
1. Forwarded email yg ter-enkripsi
|
||||||
|
2. Custom domain (yang akan gue bahas lebih detail)
|
||||||
|
|
||||||
|
But anyhow gue tidak terlalu merasa rugi mungkin kecuali untuk poin nomor dua.
|
||||||
|
|
||||||
|
## Tradeoffs
|
||||||
|
|
||||||
|
Oke fuck it.
|
||||||
|
|
||||||
|
Pertama, Apple adalah trillion dollar companies yang bisnis utamanya adalah menjual perangkat keras. Rival terbesar Apple gue rasa adalah dua perusahaan teknologi yang sama-sama membuat perangkat keras juga namun sekaligus mengoperasikan mesin pencari internet.
|
||||||
|
|
||||||
|
Satu hal yang Apple bisa jual kepada pelanggannya yang sekaligus menjadi pembeda dari mereka adalah keamanan & privasi, karena pada dasarnya perusahaan iklan di banyak kasus akan bertentangan dengan hal-hal terkait privasi.
|
||||||
|
|
||||||
|
Penyedia layanan selalu tentang operator dari layanan tersebut. Seperti, jika gue menyediakan layanan public DNS resolvers, siapapun (termasuk gue) harus mempercayakan akan apapun yang gue lakukan dalam mengoperasikan layanan tersebut.
|
||||||
|
|
||||||
|
Berdasarkan hal itu, dalam konteks ini, berarti gue harus mempercayakan apapun yang operator layanan gue lakukan terhadap layanan apapun yang gue gunakan.
|
||||||
|
|
||||||
|
Karena Apple bukanlah perusahaan penyedia iklan (setidaknya belum!) Apple seharusnya tidak memiliki kepentingan untuk mengolah data pengguna yang mereka simpan selain untuk alasan hukum. Berbeda dengan perusahaan lain (yang kebanyakan adalah perusahaan penyedia iklan) yang menampilkan iklan (yang tidak jarang targeted) di web mail clients nya untuk konteks layanan penyedia email ini.
|
||||||
|
|
||||||
|
In short, gue tidak 100% percaya kepada Apple, Inc tapi mengingat hampir semua perangkat yang ada di kamar gue ini berlogo apel, sepertinya secara tidak langsung menaruh kepercayaan kepada perusahaan tersebut.
|
||||||
|
|
||||||
|
Of course gue bukan seorang kriminal apalagi orang penting, tapi privasi adalah hak fundamental manusia terlepas statusnya di masyarakat sebagai apa. Konsepnya, jika orang lain bisa melihat, berarti siapapun bisa melihat.
|
||||||
|
|
||||||
|
Track record Apple dalam merancang keamanan dan melindungi privasi penggunanya sejauh ini gue rasa masih cukup baik, dan gue mempercayakan Apple as a company dalam mengatur persurelan gue yang gak spesial-spesial amat.
|
||||||
|
|
||||||
|
Kedua, ini yang paling chaotic.
|
||||||
|
|
||||||
|
Bukan tanpa alasan gue memiliki alamat domain gue sendiri. Satu hal yang ingin gue miliki adalah sebuah kontrol dalam mengatur identitas di internet, yang sayangnya, sampai hari ini, identitas utama pengguna di internet adalah alamat email (and don't tell me about web3).
|
||||||
|
|
||||||
|
Karena gue punya kontrol terhadap @rizaldy.club, gue bisa sesuka hati bermain dengan domain address tersebut termasuk membuat alamat email yang hanya memiliki 1 huruf sebagai identifier.
|
||||||
|
|
||||||
|
Jika bergantung dengan layanan orang lain, gue harus tunduk dengan kebijakan yang ada pada layanan tersebut. Sebagai contoh, Hide My Email nya Apple hanya bisa menggunakan @icloud.com yang mana memiliki kelebihan sekaligus kekurangan yang akan gue bahas detailnya nanti.
|
||||||
|
|
||||||
|
Selain itu, bagian paling menyebalkannya adalah migrasi. Sampai detik ini gue belum menemukan "catch all address" yang berarti jika gue memiliki 76 akun di layanan yang berbeda-beda menggunakan email yang berbeda (I did) gue harus migrasi semuanya right now untuk menghindari terjadinya email yang gagal diterima.
|
||||||
|
|
||||||
|
Dan begitupula ketika gue suatu saat ingin pindah lagi yang harusnya bakal ngubah dari @icloud.com ke something else HAHAHA.
|
||||||
|
|
||||||
|
## Benefits
|
||||||
|
|
||||||
|
Oke kinda a good news.
|
||||||
|
|
||||||
|
Pertama, biaya. Gue rasa gue bisa seumur hidup bayar 15rb/bulan (alias 180rb/tahun) jika Apple tidak pernah mengganti harga tersebut hahaha.
|
||||||
|
|
||||||
|
Kedua, alamat IP blok yang digunakan Apple secara teori lebih terpercaya oleh "spam system" daripada miliknya Migadu ataupun alternatif lain. Meskipun ini gak terlalu penting khususnya pada hari ini, tapi tetap, internet, as a network architecture, sucks.
|
||||||
|
|
||||||
|
Ketiga, hanya 3 perangkat pintar gue yang hari ini tidak memiliki logo apel: jam (Android), mini pc (Linux), dan server (Linux dan *BSD).
|
||||||
|
|
||||||
|
Dan Nintendo Switch bila itu harus disebut juga.
|
||||||
|
|
||||||
|
Yang maksudnya, by design, Apple membuat perangkat-perangkat yang terhubung (di konteks ini adalah dalam 1 akun iCloud yang sama) dapat terintegrasi dengan cukup baik (walau kadang menyebalkan). Salah satu contohnya adalah Universal Clipboard yang mana gue bisa copy anything dari Mac dan paste di iPhone/iPad (atau sebaliknya), out of the box.
|
||||||
|
|
||||||
|
...klo dari mac ke arch (atau sebaliknya) sih gue bisa pakai scp/rsync.
|
||||||
|
|
||||||
|
Terakhir, karena ini spesifik tentang email, gue pernah menggunakan iCloud emailnya Apple dan tidak pernah mendapatkan masalah sama sekali.
|
||||||
|
|
||||||
|
## Penutup
|
||||||
|
|
||||||
|
Ada satu hal yang gue khawatirkan: Bagaimana jika akun iCloud gue bermasalah, yang misalnya, somehow, diblokir?
|
||||||
|
|
||||||
|
Gue pernah berurusan dengan Apple Support 2x dan tidak pernah mendapatkan pengalaman yang mengecewakan (karena masalah gue sampai benar-benar solved). Yang paling berkesan (sekaligus menyeramkan) adalah ketika mac gue di install ulang *remotely *atas keinginan gue gegara gue install Mac OS Mojave Developer Beta dan somehow gak bisa boot. Dan cuma modal koneksi internet!
|
||||||
|
|
||||||
|
Kembali ke pertanyaan pertama, sejauh ini gue belum menemukan jawabannya berikut dengan dampaknya ke layanan lain seperti apakah bila akun iCloud gue somehow terblokir secara tidak langsung akun email gue juga akan tidak bisa diakses?
|
||||||
|
|
||||||
|
But anyhow, yang gue sedikit kecewakan adalah berarti gue tidak mendukung bisnis (SME) independen seperti Migadu dan SimpleLogin lagi dan alih-alih membayar kepada big corporations.
|
||||||
|
|
||||||
|
Gue tidak melakukan self-hosting email gue sendiri karena, fuck, tantangannya berat banget. Dan yang paling parah, ISP gue memblokir port SMTP dan juga gue tidak ingin email masuk gue tidak keterima karena alasan random (misal, internet kosan lagi aneh disaat ada seseorang yang mengirim gue email).
|
||||||
|
|
||||||
|
Anyways, gue akan coba layanan ini mungkin sekitar 3 bulan kedepan.
|
||||||
|
|
||||||
|
Dan of course akan gue bagikan pengalaman gue dalam menggunakan layanan ini!
|
||||||
|
|
||||||
|
See you later soon!
|
217
content/mengamankan-jaringan-internet-di-rumah.md
Normal file
217
content/mengamankan-jaringan-internet-di-rumah.md
Normal file
@ -0,0 +1,217 @@
|
|||||||
|
---
|
||||||
|
title: Mengamankan jaringan internet di rumah
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: mengamankan-jaringan-internet-di-rumah
|
||||||
|
date: 2021-06-23T06:06:13.000Z
|
||||||
|
date_updated: 2021-06-23T06:06:13.000Z
|
||||||
|
excerpt: DNS edition
|
||||||
|
---
|
||||||
|
|
||||||
|
Rumah adalah tempat yang paling pribadi, dan ketika berbicara tentang pribadi, artinya, ya pribadi.
|
||||||
|
|
||||||
|
Bukan tanpa alasan mengapa rumah memiliki pintu sekalipun dikelilingi pagar setinggi langit. Bukan tanpa alasan mengapa rumah memiliki gorden sekalipun jendela tidak bisa dibuka dan cahaya matahari masuk dari atap.
|
||||||
|
|
||||||
|
Alasannya sederhana: privasi.
|
||||||
|
|
||||||
|
Perihal privasi seringkali dianalogikan seperti aktivitas lo di kamar mandi sebagai contoh yang paling sederhana. Ya, orang-orang tau apa yang lo lakuin di kamar mandi, namun faktanya: orang-orang tidak tau secara persisnya apa yang lo lakuin di kamar mandi. Dan aktivitas yang lo lakuin di kamar mandi tersebut biarlah tetap menjadi rahasia lo karena itu urusan pribadi dan bukan bisnis orang lain.
|
||||||
|
|
||||||
|
Dan apa yang terjadi ketika ada orang lain yang mencoba mengintip aktivitasmu di dalam kamar mandi tersebut sekalipun aktivitas yang kamu lakukan bukanlah aib ataupun kejahatan?
|
||||||
|
|
||||||
|
You know the answer, right?
|
||||||
|
|
||||||
|
Perihal menggunakan internet pun adalah aktivitas pribadi.
|
||||||
|
|
||||||
|
Dan ketika berbicara tentang pribadi, artinya, sekali lagi, ya pribadi.
|
||||||
|
|
||||||
|
Mengapa harus ada orang lain yang peduli ketika gue mencari informasi tentang biaya pernikahan lalu somehow mendapatkan iklan promosi harga cincin dengan diskon 40%? Oke, let's say gue memang butuh dan bukankah iklan tersebut seharusnya membantu gue? Namun poinnya bukan disitu, melainkan iklan tersebut muncul tanpa izin gue dan menggunakan informasi gue tanpa izin gue.
|
||||||
|
|
||||||
|
Kalau memang gue butuh cincin diskonan, gue harusnya tau kata kunci apa yang harus gue pilih, kan?
|
||||||
|
|
||||||
|
Anyway, mari kita berbicara kabar baiknya.
|
||||||
|
|
||||||
|
Sudah ada beberapa vendor yang menggunakan privilege nya untuk membantu melindungi privasi pengguna internet. Kita mulai dari pasar pengguna mobile phone: Apple. Apple menguasai 26.46% (per Mei 2021) pasar HP di dunia menurut [StatCounter](https://gs.statcounter.com/vendor-market-share/mobile). Yang berarti, jika jumlah [pengguna mobile di dunia](https://www.google.com/search?q=total+mobile+users+in+world&source=hp&ei=vv3SYIzODNrw9QPQr5TYCA&iflsig=AINFCbYAAAAAYNMLzlmC-aKB2ul-SFi-XhGpvN0Cgn_y&oq=total+mobile+users+in+world&gs_lcp=Cgdnd3Mtd2l6EAMyAggAMgYIABAWEB4yBggAEBYQHjIGCAAQFhAeMgYIABAWEB4yBggAEBYQHjIGCAAQFhAeMgYIABAWEB46CAgAELEDEIMBOgUIABCxAzoFCC4QsQM6CAguELEDEIMBOgsILhCxAxDHARCjAjoICC4QsQMQkwI6CAguEMcBEK8BOgIILjoLCC4QxwEQrwEQkwJQXFiFHGCSHWgAcAB4AIAB-AGIAdkYkgEHMTMuMTIuMpgBAKABAaoBB2d3cy13aXo&sclient=gws-wiz&ved=0ahUKEwiMpb7Ct63xAhVaeH0KHdAXBYsQ4dUDCAY&uact=5) adalah 5,027,000,000 berarti jumlah pengguna iPhone sekitar 1,329,641,500. Ada 1.5 milyar perangkat yang Apple lindungi terkait privasi pengguna internet tersebut.
|
||||||
|
|
||||||
|
Yang gue suka dari Apple adalah mereka menjual kata [privasi](https://www.apple.com/privacy/) tanpa menjual [FUD](https://en.wikipedia.org/wiki/Fear,_uncertainty,_and_doubt) ke pengguna nya sebagaimana yang biasa dilakukan oleh para penyedia layanan VPN. Menguasai pasar sekitar 26.46% tersebut termasuk privilege, dan Apple menggunakan privilege nya untuk sesuatu yang bagus untuk bisnis nya Apple dan juga pribadi penggunanya: Privacy by default.
|
||||||
|
|
||||||
|
Tidak perlu mengkonfigurasi banyak hal sebagaimana yang dilakukan oleh 'superuser' karena hal tersebut sudah dikonfigurasi, by default.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/06/Screen-Shot-2021-06-23-at-4.33.35-PM.png)tangkapan layar membuka mozilla.org di Safari
|
||||||
|
Tidak perlu memasang uBlock Origin ataupun menggunakan DNS Sinkhole untuk mencegah "web tracker" melacak aktivitasmu, karena di Safari sudah ada fitur [Intelligent Tracking Prevention (ITP)](https://webkit.org/tracking-prevention/) dan opt-in.
|
||||||
|
|
||||||
|
Apple bisa saja menggunakan privilege nya dan menawarkan solusi end-to-end terkait melindungi privasi pengguna nya dengan menjadi ISP juga. [Google Fiber](https://fiber.google.com/) adalah salah satu contoh yang menggunakan privilege nya terkait pengguna produk Google dan infrastruktur yang mereka miliki dengan menjadi ISP.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/06/Screen-Shot-2021-06-23-at-4.39.12-PM.png)situs Google Fiber
|
||||||
|
Namun Apple tidak melakukannya. Melainkan, mereka membuat layanan bernama [Apple Private Relay](https://www.techradar.com/news/what-is-apple-private-relay-and-is-it-worse-than-a-vpn) yang secara teknis adalah [Onion Routing](https://en.wikipedia.org/wiki/Onion_routing) yang hampir sama seperti yang dilakukan oleh [TOR Project](https://www.torproject.org/), namun menggunakan server Apple sebagai "relay" daripada server yang dijalankan oleh komunitas.
|
||||||
|
|
||||||
|
Oke, selesai membagus-baguskan Apple.
|
||||||
|
|
||||||
|
Melindungi privasi pengguna dengan menjadi ISP bukanlah solusi yang efektif khususnya untuk bisnis. Namun berbeda cerita bila perlindungan tersebut berada dilapisan atasnya, seperti yang dilakukan Apple dengan Apple Private Relay nya.
|
||||||
|
|
||||||
|
Dan di tulisan ini, gue akan membahas tentang pendekatan gue membuat lapisan tersebut untuk skala rumahan yang penggunanya sekitar 6 perangkat, bukan 1,329,641,500 yang dimiliki oleh Apple.
|
||||||
|
|
||||||
|
## The internet always starts with a router
|
||||||
|
|
||||||
|
Jaringan Wi-Fi yang kamu gunakan didapat dari sinyal yang dihantarkan oleh router kamu yang tersambung ke router ISP. Begitupula dengan jaringan 4G/5G yang kamu gunakan yang ditenagai oleh Base Transceiver Station (BTS) yang tersambung ke router ISP.
|
||||||
|
|
||||||
|
Dan, ya, internet selalu berawal dari router. Tugas router adalah membuat rute paket dan meneruskannya.
|
||||||
|
|
||||||
|
Topologi jaringan rumah umumnya seperti ini:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/06/Untitled-2021-06-19-1738.png)Topologi-topologian
|
||||||
|
Router tersambung dengan kabel fiber yang intinya mengarah ke ISP yang digunakan.
|
||||||
|
|
||||||
|
Berdasarkan topologi kocak diatas, diasumsikan kita mempercayai paket yang dikirim ataupun diterima oleh router. Perlindungan berada di level tiap perangkat, jika lo ingin memblokir paket yang mengarah ke pornhub.com, berarti harus dilakukan di level perangkat.
|
||||||
|
|
||||||
|
Hampir setiap perangkat bisa menjadi router, sekalipun itu Raspberry Pi.
|
||||||
|
|
||||||
|
Masih ingat kan kalau tugas router adalah merutekan dan meneruskan paket?
|
||||||
|
|
||||||
|
Anggap Raspberry Pi lo bekerja seperti router pada umumnya di pasaran:
|
||||||
|
|
||||||
|
- Bertindak sebagai DHCP server (DHCP/DHCPv6)
|
||||||
|
- Bertindak sebagai DNS server (stub/recursive)
|
||||||
|
- Bertindak sebagai dispatcher (mengantarkan sinyal Wi-Fi misalnya)
|
||||||
|
|
||||||
|
Maka Raspberry Pi lo sudah menjadi router!
|
||||||
|
|
||||||
|
Namun Raspberry Pi adalah "general purpose" berbeda dengan router yang "special purpose" yang dioptimasi untuk mengantarkan paket yang mungkin bisa meneruskan paket 300MB per-detik.
|
||||||
|
|
||||||
|
Beberapa router ada yang sudah dioptimasi untuk keamanan juga (yang biasanya bertindak sebagai Firewall) seperti pfSense nya Netgate ataupun Fortigate nya Fortinet. Apapun itu, mereka bertindak untuk mengamankan jaringan internet.
|
||||||
|
|
||||||
|
Namun pertanyaan yang paling penting adalah: Apa yang diamankan dan dari siapa?
|
||||||
|
|
||||||
|
## Keamanan untuk pribadi/keluarga dalam ber-internet
|
||||||
|
|
||||||
|
Jawaban singkat dari pertanyaan diatas adalah: melindungi bisnis dari serangan "cyber" apapun itu. Botnet? Phishing? DDoS? Literally semuanya.
|
||||||
|
|
||||||
|
Tidak jarang perusahaan mengharuskan karyawannya untuk tersambung ke jaringan pribadi (VPN) kantor, atau mewajibkan untuk menggunakan properti dari kantor yang sudah dikonfigurasi sedemikan rupa.
|
||||||
|
|
||||||
|
Jadi, ketika salah satu karwayan misalnya ada yang terkena soceng dan mengakses situs *phishing*, kemungkinan besar serangan tersebut gagal karena router di VPN tersebut mendeteksi jika situs yang ingin dikunjungi adalah situs phishing dan di peramban nya menampilkan "warning" or something like that misalnya.
|
||||||
|
|
||||||
|
Jika tujuan perusahaan adalah untuk melindungi properti berharganya, sekarang bagaimana kita ke melindungi orang-orang yang kita cintai: keluarga.
|
||||||
|
|
||||||
|
Bagaimana bila mamah kita memasang aplikasi yang mengandung virus? Bagaimana bila komputer adik kita ternyata mengirim berkas yang ada di D:\ setiap jam 20? Bagaimana bila kakak kita login ke situs yang terlihat seperti Tokopedia padahal bukan?
|
||||||
|
|
||||||
|
Apapun itu, [semua bisa saja terjadi](https://www.youtube.com/watch?v=UI2479OFFGY), kalau kata 8 ball.
|
||||||
|
|
||||||
|
Sebagai seseorang yang 'tau' dan 'peduli' tentu terasa naif jika gue hanya memperdulikan diri sendiri.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/06/Screen-Shot-2021-06-23-at-5.49.43-PM.png)ketika mengakses youtuybe.com
|
||||||
|
Ya, browser gue memunculkan warning tersebut ketika gue tidak menggunakan DNS Sinkhole dan gue menggunakan uBlock Origin, tapi bagaimana dengan di perangkat adik gue? Atau nyokap gue?
|
||||||
|
|
||||||
|
Kalau itu untuk keamanan ya, bagaimana bila kamu peduli dengan privasi juga dan membiarkan pacamu "dilacak" oleh siapapun itu ketika sedang mencari seprai baru di Google dan (un)surprisingly mendapatkan iklan seprai juga di Instagram?
|
||||||
|
|
||||||
|
Namun kuncinya bukan di seprai, jika mereka bisa melacak kata kunci 'seprai' dan memanfaatkannya, secara teknis mereka bisa melacak semuanya.
|
||||||
|
|
||||||
|
Jika itu (web tracking) menurutmu bukanlah sebuah ancaman, silahkan pertanyakan:
|
||||||
|
|
||||||
|
- Mengapa Apple membuat Intelligent Tracking Prevention di Safari?
|
||||||
|
- Mengapa Mozilla Firefox (dan [Enhanced Tracking Prevention](https://blog.mozilla.org/futurereleases/2018/08/30/changing-our-approach-to-anti-tracking/)) ada?
|
||||||
|
- Mengapa Cloudflare menawarkan 1.1.1.1 sebagai DNS Resolver secara gratis?
|
||||||
|
- Mengapa gordenmu ditutup ketika malam yang padahal tidak ada cahaya matahari?
|
||||||
|
- Mengapa menutup pintu ketika buang air kecil yang padahal orang lain tau kalau kamu sedang BAK?
|
||||||
|
|
||||||
|
Jika kita simpulkan, yang bisa kita lindungi dari serangan keamanan (dan privasi) yang ada dalam aktivitas ber-internet antara lain:
|
||||||
|
|
||||||
|
- Jaringan iklan & pelacak
|
||||||
|
- Situs scam, phishing dan malvertising
|
||||||
|
- Situs berita palsu
|
||||||
|
- Spyware, malware, dan ransomware
|
||||||
|
|
||||||
|
Hal diatas adalah yang umum, ya.
|
||||||
|
|
||||||
|
Dan serangan diatas bisa dimulai dari DNS. Ya, internet hampir selalu tentang DNS, dan rekomendasi gue adalah:
|
||||||
|
|
||||||
|
- 1.1.1.1 nya [Cloudflare](https://cloudflare-dns.com)
|
||||||
|
- 9.9.9.9 nya [Quad9](https://quad9.net)
|
||||||
|
- 94.140.15.15 nya [AdGuard](https://adguard.com/en/adguard-dns/overview.html)
|
||||||
|
|
||||||
|
Jika router (ataupun perangkatmu) sudah menggunakan DNS yang ada diatas, perangkatmu seharusnya menjadi sedikit aman. Tapi itu untuk pribadi, ya.
|
||||||
|
|
||||||
|
Untuk kepentingan keluarga harusnya sedikit *advance*, ada beberapa aturan tambahan, misalnya:
|
||||||
|
|
||||||
|
- Melindungi dari situs judi, porno dan online dating
|
||||||
|
- Membatasi penggunaan media sosial
|
||||||
|
- Melindungi dari situs piracy
|
||||||
|
- Menggunakan "SafeSearch" untuk Google, DuckDuckGo, YouTube, dsb
|
||||||
|
|
||||||
|
Dan khusus untuk pendekatan diatas bisa menggunakan layanan dari:
|
||||||
|
|
||||||
|
- [NextDNS](https://nextdns.io), premium DNS alternatif rekomendasi gue
|
||||||
|
- [Cloudflare Teams](https://www.cloudflare.com/teams/), basically untuk organisasi namun cocok juga untuk keluarga
|
||||||
|
- [OpenDNS Home](https://signup.opendns.com/homefree/) nya Cisco
|
||||||
|
|
||||||
|
3 layanan diatas dapat mengatur dan memonitor situs apa yang pernah; boleh, terblokir oleh pengguna nya, dan untuk penerapannya tinggal atur DNS yang ada di setiap perangkat anggota keluarga.
|
||||||
|
|
||||||
|
Bagaimana untuk solusi yang lebih sederhana? Baiklah, mari kita masuk ke inti dari tulisan ini!
|
||||||
|
|
||||||
|
## Setup home router & DNS pribadi
|
||||||
|
|
||||||
|
Kalau lo ada akses ke router, bisa menggunakan 3 layanan diatas yang gue sebut sebelumnya. Pengalaman pribadi gue kalau pakai router bawaan dari ISP kurang bagus, ISP membajak DNS query yang dilakukan oleh perangkat gue yang berarti setup akan menjadi sia-sia seolah-olah ISP dapat melindungi kita dari serangan yang ada.
|
||||||
|
|
||||||
|
Namun jika ISP tidak meng-hijack router lo, setup nya sesederhana mengatur alamat IP ke DNS yang sudah dipilih, misal Cloudflare Teams:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/06/Screen-Shot-2021-06-23-at-7.06.54-PM.png)Setup untuk router di Cloudflare Teams (Gateway)
|
||||||
|
Lalu bisa melihat DNS queries apa saja yang terjadi dan mana yang diblokir:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/06/Screen-Shot-2021-06-23-at-7.10.16-PM.png)gambaran menggunakan Cloudflare Gateway
|
||||||
|
Karena Cloudflare Teams Gateway menyediakan query via DoH, gue pakai untuk contoh agar DNS query tidak dijawab oleh DNS Sinkhole gue.
|
||||||
|
|
||||||
|
Cloudflare for teams gratis untuk 50 pengguna, selain menawarkan DNS pribadi juga menawarkan VPN melalui Cloudflare Warp+ nya yang harganya dapat dijangkau oleh kantong plus memiliki performa yang oke.
|
||||||
|
|
||||||
|
Jika ISP kamu meng-hijack DNS query, mungkin kamu harus menggunakan router lain yang "dirancang khusus" untuk melindungi privasi pengguna internet seperti [GL-MT300N](https://s3.rizaldy.club/rizaldy-club-ghost/menjajal-gl-mt300n-v2-mini-smart-router/) dari GL-iNet yang mendukung Encrypted DNS menggunakan 1.1.1.1 nya Cloudflare ataupun NextDNS.
|
||||||
|
|
||||||
|
Jika menggunakan router yang gue cantumkan diatas, cukup tambahkan "Endpoint ID" nya NextDNS di router dan tidak ada langkah kedua!
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/06/Screen-Shot-2021-06-23-at-7.20.20-PM.png)Gambaran menggunakan NextDNS
|
||||||
|
Solusi terakhir untuk superuser adalah dengan menggunakan AdGuardHome dan menjalankannya sendiri. Gue pribadi menggunakan itu, setup gue adalah:
|
||||||
|
|
||||||
|
1. Menjalankan AdGuardHome di Raspberry Pi gue
|
||||||
|
2. Menggunakan [edgyDNS](https://edgy.network/dns) sebagai upstream server sehingga gue tidak perlu maintenance 2x, dan menggunakan encrypted DNS
|
||||||
|
3. Setiap perangkat menggunakan alamat IP Raspberry Pi gue untuk bagian DNS server
|
||||||
|
|
||||||
|
Gambarannya adalah seperti berikut:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/06/Screen-Shot-2021-06-23-at-7.28.48-PM.png)AdGuardHome di Raspberry Pi
|
||||||
|
Gue proxy DNS query gue karena edgyDNS tidak menulis log sedangkan gue butuh itu. Bagian "0 blocked by filter" adalah expected karena sudah diblock oleh edgyDNS :))
|
||||||
|
|
||||||
|
Selain itu Raspberry Pi gue juga tersambung ke VPN (via Tailscale) sehingga ketika gue sedang diluar, gue masih bisa menggunakan DNS server yang ada di Raspberry Pi gue.
|
||||||
|
|
||||||
|
Kenapa gue tidak langsung menembak ke edgyDNS aja? Sentralisasi.
|
||||||
|
|
||||||
|
Gue ingin semua query log yang ada di perangkat gue (termasuk di smart speakers) tercatat di 1 tempat, yang mana itu adalah di Raspberry Pi gue.
|
||||||
|
|
||||||
|
Pendekatan seperti ini so far bekerja untuk gue, gue setup static IP untuk setiap perangkat gue di router jadi bisa gue identifikasi siapa memanggil apa.
|
||||||
|
|
||||||
|
Next nya—ketika gue pulang—gue mau setup juga di router rumah gue karena gue dapet informasi kalau di rumah gue sekarang berlangganan layanan internet.
|
||||||
|
|
||||||
|
...dan menggunakan IndiHome. Mungkin mau gue bawa aja si Raspberry Pi ini ke rumah gue dan berharap indi****home tidak blokir traffic Tailscale gue.
|
||||||
|
|
||||||
|
## Kesimpulan
|
||||||
|
|
||||||
|
Dengan setup router seperti ini kurang lebih berarti kita membawa "Intelligent Tracking Prevention" nya Safari ataupun "Enhanced Tracking Protection" nya Mozilla Firefox di level router yang membuat pengguna dari router tersebut tidak perlu setting apapun.
|
||||||
|
|
||||||
|
Bagian menariknya lagi, bisa bekerja seperti uBlock Origin juga yakni bisa menambah filters yang kita inginkan sesuka hati.
|
||||||
|
|
||||||
|
Gue bisa memastikan bahwa jaringan internet yang ada di rumah (kamar kosan) gue aman (dari siapapun), karena:
|
||||||
|
|
||||||
|
1. DNS query menggunakan encrypted DNS yang tidak bisa dibaca oleh siapapun kecuali DNS Server & DNS stub resolver komputer gue
|
||||||
|
2. DNS yang gue gunakan memblokir situs-situs yang mengarah ke jaringan iklan & tracker, situs scam, situs phishing, dsb
|
||||||
|
3. Gue bisa memonitor perangkat gue memanggil kemana aja
|
||||||
|
|
||||||
|
Untuk bagian terakhir, mungkin untuk level "keluarga" tidak terlalu penting. Karena yang paling penting hanyalah "memanggil apa" bukan "siapa memanggil apa". Kalau untuk pribadi—khususnya yang paranoid seperti gue—itu lumayan penting terlebih karena tidak melanggar ranah privasi siapapun but me.
|
||||||
|
|
||||||
|
Setiap minggu gue melakukan rsync via cronjob untuk log query gue karena retention nya cuma 90 hari. Dan kalau sedang iseng & ada waktu, gue melakukan grep & awk untuk melacak "perusahaan besar" mana saja yang perangkat gue panggil yang mungkin seharusnya ter-blokir.
|
||||||
|
|
||||||
|
Untuk proteksi maksimal, mungkin bisa menggunakan VPN khususnya bila kamu *aware *dengan [hal ini](https://edgy.substack.com/p/deep-packet-fucking-inspection) agar semua paket internet yang keluar & masuk dalam bentuk ter-enkripsi.
|
||||||
|
|
||||||
|
Berbicara tentang [edgyDNS](https://edgy.network/dns), ada sekitar 50k (encrypted) DNS queries setiap harinya dan ada 20k domain yang diblokir dengan waktu proses query rata-rata 100ms.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/06/Screen-Shot-2021-06-23-at-7.48.09-PM.png)https://edgy.network/dns
|
||||||
|
edgyDNS tidak memblokir situs bokep (karena gue rasa penggunanya sudah cukup dewasa) dan angka "Blocked malware/phishing" hanya berlaku jika gue mengaktifkan fitur "Use AdGuard browsing security web service" yang berarti memanggil server nya AdGuard yang berarti gue menggunakan layanan pihak ketiga.
|
||||||
|
|
||||||
|
edgyDNS ini gue bisa menjadi alternatif Quad9 dan Cisco OpenDNS namun dengan filter yang lebih strict (dan terbuka) serta menjadikan pengguna internet di Indonesia sebagai *first-class.*
|
||||||
|
|
||||||
|
Gue tidak bermaksud bias, karena gue rasa setiap pembaca disini sudah mengetahui kalau gue orang dibalik edgyDNS tersebut.
|
||||||
|
|
||||||
|
Sebagai shameless plug, untuk melindungi kamu (ataupun orang-orang tercinta) dari potensi serangan yang ada di internet di level DNS, bisa pertimbangkan menggunakan edgyDNS sebagai upstream DNS server, dan jangan lupa transport layer yang menggunakan enkripsi seperti DoH, DoT dan DNSCrypt.
|
||||||
|
|
||||||
|
Hal-hal yang gue bahas disini tidak menjamin jaringan/aktivitas internet lo 100% aman, karena tidak ada yang aman di jaringan internet. Namun setidaknya membuatnya menjadi lebih sedikit aman dari yang sebelumnya.
|
||||||
|
|
||||||
|
Sebagai penutup, jika dirasa kamu tertarik dengan konten seperti ini, bisa pertimbangkan untuk berlangganan ke newsletter [edgy's frontline.](https://edgy.substack.com) Hampir sama kontennya seperti yang ada disini, namun lebih umum dan dikirimkan ke email kamu 😛
|
||||||
|
|
||||||
|
Anyway, jika kamu butuh bantuan dalam pemasangan AdGuardHome di level kosanmu ataupun rumah atau ingin bertanya-tanya terkait topik ini, bisa kontak saya [disini.](https://s3.rizaldy.club/rizaldy-club-ghost/contact/)
|
||||||
|
|
||||||
|
Tetap jaga kesehatan, keselamatan, dan keamanan teman-teman!
|
253
content/mengatur-keuangan-menggunakan-firefly-iii.md
Normal file
253
content/mengatur-keuangan-menggunakan-firefly-iii.md
Normal file
@ -0,0 +1,253 @@
|
|||||||
|
---
|
||||||
|
title: Mengatur keuangan menggunakan Firefly III
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: mengatur-keuangan-menggunakan-firefly-iii
|
||||||
|
date: 2022-02-25T17:31:36.000Z
|
||||||
|
date_updated: 2022-02-25T17:31:36.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Salah satu hal yang sulit untuk gue lakukan sampai hari ini adalah mengatur uang. Meskipun gue sudah melakukan *budgeting *setiapbulannya menggunakan pendekatan [zero-based budgeting](https://wikiless.org/wiki/Zero-based_budgeting) ala-ala tapi gue tidak memiliki pencatatan untuk setiap transaksi yang gue lakukan dan sayangnya melihat riwayat Mutasi Rekening hanya berlaku untuk 7 hari (I know about myBCA and don't tell me about how cryptocurrencycan* fix* that).
|
||||||
|
|
||||||
|
Ambil contoh, misal gue ada budget bernama "gopay" dengan batas 3jt per-bulan. Ini harus gue urai lagi, karena terkadang gue pakai layanan GoRide; GoCar, GoTagihan, GoPulsa, dan si brengsek GoFood. Sedangkan sumber akunnya masih sama: GoPay. Disamping itu gue menggunakan GoPay untuk sumber dana di akun Apple gue plus untuk melakukan topup dana ke salah satu *exchange *juga.
|
||||||
|
|
||||||
|
Riwayat transaksi tersebar dimana-mana dan tidak *centralized *sehingga mempersulit untuk pelacakan.
|
||||||
|
|
||||||
|
Gue sudah menjalankan *instance *Firefly III sejak akhir 2020 di *server *rumah gue dan sayangnya belum pernah gue sentuh kecuali sampai ke proses pembuatan akun karena sebelumnya catatan keuangan gue lumayan berantakan. Dan pada bulan ini gue dedikasikan akhir pekan gue untuk merapihkan catatan keuangan gue sekaligus untuk mempermudah pelacakan transaksi masuk/keluar yang gue lakukan sekalipun untuk membeli telor gulung 10rb (thanks to Apple Shortcuts).
|
||||||
|
|
||||||
|
Dan karena gue buruk dalam matematika sekaligus gue tidak terlalu tertarik menulis menggunakan buku fisik dan pulpen, gue menggunakan aplikasi [Firefly III](https://www.firefly-iii.org) untuk melakukan pencatatan keuangan gue.
|
||||||
|
|
||||||
|
Jika lo belum/kurang familiar dengan aplikasi Firefly III, inilah alasan mengapa gue menerbitkan tulisan ini: untuk membantu lo mengenal dan memahami aplikasi tersebut. Markicob?
|
||||||
|
|
||||||
|
## Firefly III at a glance
|
||||||
|
|
||||||
|
Firefly III adalah aplikasi web yang ditulis menggunakan PHP, menggunakan RDBMS seperti MySQL/MariaDB/Postgres untuk menyimpan datanya dan Redis untuk menyimpan data ephemeral.
|
||||||
|
|
||||||
|
Tampilan utama (dasbor) nya adalah seperti ini:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/02/CleanShot-2022-02-26-at-3.02.06@2x.png)
|
||||||
|
Ada beberapa terminologi utama yang perlu diketahui yang mungkin sudah familiar di kehidupan nyata, yakni:
|
||||||
|
|
||||||
|
- Accounts
|
||||||
|
- Transactions
|
||||||
|
- Budgets
|
||||||
|
- Bills
|
||||||
|
- Piggy Banks
|
||||||
|
|
||||||
|
Dan juga ada yang opsional seperti Automation dan Classification yang akan kita bahas sedikit nanti. Jika sudah memiliki/mendaftar akun di Firefly III, akan ada 3 akun (rekening) yang terbuat secara otomatis:
|
||||||
|
|
||||||
|
- Asset accounts (default)
|
||||||
|
- Asset accounts (savings)
|
||||||
|
- Cash accounts
|
||||||
|
|
||||||
|
Misal lo menggunakan rekening BCA sebagai rekening utama, berarti asset accounts (default) tersebut adalah BCA dan yang savings nya adalah BCA savings account. Jika lo misalnya tidak menggunakan rekening berbeda untuk menabung (misal seperti tidak menggunakan BCA Tabunganku) di banyak kasus rekening yang akan sering digunakan adalah savings account.
|
||||||
|
|
||||||
|
Jika sudah sedikit terbayang tentang akun (rekening) ini, mari kita bahas lebih dalam tentang penggunaan akun ini yang nantinya akan gue pakai kata "rekening" aja biar lebih gampang.
|
||||||
|
|
||||||
|
### Accounts (rekening)
|
||||||
|
|
||||||
|
Setidaknya ada 4 jenis akun yang ada di Firefly III:
|
||||||
|
|
||||||
|
- Asset accounts
|
||||||
|
- Expense accounts
|
||||||
|
- Revenue accounts
|
||||||
|
- Liabilities
|
||||||
|
|
||||||
|
Khusus untuk asset accounts sudah kita bahas sedikit, intinya, tentang rekening-rekening yang digunakan untuk "menyimpan".
|
||||||
|
|
||||||
|
Expense accounts adalah untuk rekening yang digunakan untuk "pengeluaran".
|
||||||
|
|
||||||
|
Revenue accounts adalah untuk rekening yang digunakan untuk "pemasukan".
|
||||||
|
|
||||||
|
Liabilities ini rekening opsional, katanya sih digunakan untuk hal-hal yang spesifik seperti beasiswa misalnya.
|
||||||
|
|
||||||
|
Oke, sebagai gambaran, misal ada transaksi "gajian Feb 2020". Berarti, ada transaksi dari Revenue accounts (let's say "BCA (kantor)" ke Asset accounts (BCA savings account). Diagramnya misal seperti ini:
|
||||||
|
![](https://kroki.io/mermaid/svg/eNorTi0sTc1LTnXJTEwvSszlUgCCoNSy1LzSVIXE5OT80rySYgUNJ2dHBe_EvJL8Ik1dOzvH4uLUEjTZ4sSyzLz0Yk0rBffErEwFt9QkBSMDIyOweTAAALFcIKY)
|
||||||
|
Lalu gue ingin topup GoPay, berarti ada transaksi dari Asset accounts ke Expense accounts:
|
||||||
|
![](https://kroki.io/mermaid/svg/eNorTi0sTc1LTnXJTEwvSszlUgCCoNSy1LzSVIXE5OT80rySYgUNJ2dHBe_EvJL8Ik1dOzvH4uLUEjTZ4sSyzLz0Yk0rBffErEwFt9QkBSMDIyOwefjUA41zrShIzStGts49PyCxEmhUSH5BaQHYCBgAAMMRNsY)
|
||||||
|
Jika gue mau wd dari Trakteer/Saweria ke GoPay, harusnya diagramnya menjadi seperti ini:
|
||||||
|
![](https://kroki.io/mermaid/svg/eNorTi0sTc1LTnXJTEwvSszlUgCCoNSy1LzSVIXE5OT80rySYgUNJ2dHBe_EvJL8Ik1dOzvH4uLUEjTZ4sSyzLz0Yk0rBffErEwFt9QkBSMDIyOwefjUA41zrShIzStGts49PyCxEmhUSH5BaQEOJ4UUJWaXpKYW4Tch3AWsHQYAfcNLpA)
|
||||||
|
Jika berpikiran sama, harusnya lo lumayan mengerti tentang penggunaan accounts ini. Sebagai pelengkap, berikut contoh tentang Asset; Expense, dan Revenue accounts:
|
||||||
|
|
||||||
|
- BCA: Asset
|
||||||
|
- BCA savings: Asset
|
||||||
|
- Exchange: Asset
|
||||||
|
- GoPay: Expense
|
||||||
|
- Paypal: Expense
|
||||||
|
- BCA (kantor): Revenue
|
||||||
|
- Trakteer: Revenue
|
||||||
|
- Ko-fi: Revenue
|
||||||
|
|
||||||
|
Dan berikut halaman Accounts di aplikasi Firefly III:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/02/CleanShot-2022-02-26-at-3.52.35@2x.png)
|
||||||
|
### Transactions
|
||||||
|
|
||||||
|
Ada 3 jenis transaksi yang ada di Firefly III:
|
||||||
|
|
||||||
|
- Expenses
|
||||||
|
- Revenue/income
|
||||||
|
- Transfers
|
||||||
|
|
||||||
|
Yang harusnya mudah dipahami.
|
||||||
|
|
||||||
|
Transfers ini sederhananya "pindah buku" antar rekening internal. Misal, jika ingin transfer 3,000,000.00 dari BCA (source account) ke Jenius (destination account), transaksi tersebut jenisnya adalah "transfers" dan sedangkan biaya admin 5,000.00 masuknya adalah ke expenses.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/02/CleanShot-2022-02-26-at-4.03.33@2x.png)
|
||||||
|
Kabar baiknya adalah jika lo bingung kapan pakai Expenses/Transfers, kalo lo melakukan expenses dari rekening internal lo ke rekening internal lo yang lain, Firefly III akan mendeteksinya sebagai "transfers". Begitupula bila lo melakukan transfer tapi dari rekening lo ke rekening lain (expenses account) maka dia akan mendeteksinya sebagai "withdraw/expense".
|
||||||
|
|
||||||
|
### Budgets
|
||||||
|
|
||||||
|
Ini bagian favorit gue!
|
||||||
|
|
||||||
|
Dalam zero-based budgeting berarti sederhananya semua dana yang ada di rekening utama harus menjadi nol bagaimanapun caranya, dan ini bukan hal yang relatif sulit khususnya untuk yang pemasukannya memenuhi UMR hahaha.
|
||||||
|
|
||||||
|
Contoh budgets yang gue gunakan adalah:
|
||||||
|
|
||||||
|
- Rokok
|
||||||
|
- Kopi
|
||||||
|
- Investasi
|
||||||
|
- Nabung
|
||||||
|
- Makan
|
||||||
|
- Jajan
|
||||||
|
- Belanja
|
||||||
|
- Bisnis
|
||||||
|
- Hiburan
|
||||||
|
- Edukasi
|
||||||
|
- Kosan
|
||||||
|
- Misc
|
||||||
|
|
||||||
|
Yang mana ada yang disandingkan denga "Bills" seperti bayar sewa kos (Kosan), listrik (Kosan), Apple Music (Hiburan), DigitalOcean (bisnis), dsb.
|
||||||
|
|
||||||
|
Ummmm untuk Misc anggap aja salah satunya adalah "pacaran" hahaha ataupun hal-hal lain yang kurang efektif untuk dibuat budget seperti keperluan "meminjamkan uang" dan "traveling" misalnya.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/02/CleanShot-2022-02-26-at-4.27.09@2x.png)
|
||||||
|
### Bills
|
||||||
|
|
||||||
|
Awal gue mengurangi berlangganan terhadap internet services yang pernah gue gunakan adalah ketika gue mengumpulkan daftar tagihan bulanan gue. Bills disini untuk transaksi (ehm, tagihan) yang bersifatnya berkala, baik bulanan seperti bayar sewa kos dan hosting ataupun tahunan seperti perpanjang alamat domain dan iuran kartu kredit.
|
||||||
|
|
||||||
|
Selain untuk yang berkala, bisa juga untuk yang jenisnya "upcoming" namun tidak berkala seperti pelunasan misalnya.
|
||||||
|
|
||||||
|
Kunci dari bills ini adalah untuk melakukan Automations dan pengingat akan angka yang harus dibayar.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/02/CleanShot-2022-02-26-at-4.42.10@2x.png)
|
||||||
|
Misal untuk transaksi bayar 80,000/bulan untuk sewa VPS di IDCloudHost.
|
||||||
|
|
||||||
|
Ketika membuat Bills, secara otomatis akan membuat Rules juga untuk mendeteksi apakah "tagihan untuk X pada bulan Y" sudah terbayar.
|
||||||
|
|
||||||
|
Misal, gue membuat Expense transactions "IDCloudHost" dengan nilai budget "bisnis". Rules yang paling inti adalah ketika jumlah uang yang gue keluarkan sekitaran 80,000-100,000 (spend limit bulanan gue 100,000 di IDCloudHost dan 80,000 adalah fixed price nya) **dan** di deskripsi transaksinya ada tulisan "IDCloudHost" berarti tagihan untuk bulan tersebut akan dianggap sudah terbayar tanpa perlu secara manual seperti melakukan centang di checkbox!
|
||||||
|
|
||||||
|
### Piggy Banks
|
||||||
|
|
||||||
|
Ini sederhananya adalah seperti "celengan" untuk mengumpulkan dana untuk tujuan tertentu menggunakan rekening tertentu, let's say misalnya untuk... ehm, menikah.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/02/CleanShot-2022-02-26-at-4.51.43@2x.png)
|
||||||
|
Disitu gue menggunakan rekening BCA savings account sebagai rekening sumbernya.
|
||||||
|
|
||||||
|
Untuk menambahkan dana ke Piggy Banks, cukup klik tombol + disamping progress bar, dan dana yang bisa dimasukkan batasnya adalah maksimal dana yang ada di rekening sumber.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/02/CleanShot-2022-02-26-at-4.54.51@2x-1.png)
|
||||||
|
Disitu ada indikator sudah berapa persen progress yang lo lakuin (anjay), berapa dana yang sudah terkumpul, dan tersisa berapa lagi dana yang harus dikumpulkan.
|
||||||
|
|
||||||
|
### Kesimpulan
|
||||||
|
|
||||||
|
Gambaran besar penggunaan Firefly III untuk seseorang yang hidupnya bergantung dengan gaji, kurang lebih diagramnya seperti ini:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/02/CleanShot-2022-02-26-at-5.10.47@2x.png)
|
||||||
|
Perlu diingat bahwa transaksi `Asset -> Asset` akan dianggap sebagai **Transfers** yang berarti tidak memengaruhi data **Balance.**
|
||||||
|
|
||||||
|
Dan karena Firefly III bukanlah aplikasi untuk Stock/portfolio management, jadi untuk perhitungan keuntungan/kerugian dari asset lain yang dimiliki tidak bisa dilakukan disini.
|
||||||
|
|
||||||
|
## Catatan tambahan
|
||||||
|
|
||||||
|
Salah satu hal yang membuat gue sulit memahami dalam menggunakan Firefly III pertama kali adalah konsep ["Double-entry bookkeeping"](https://wikiless.org/wiki/Double-entry_bookkeeping) yang sederhananya:
|
||||||
|
|
||||||
|
- Lo dapet duit, orang lain (i.e: kantor) kehilangan duit
|
||||||
|
- Lo keluarin duit, orang lain (i.e: Starbucks) mendapatkan duit
|
||||||
|
|
||||||
|
Proses pencatatan yang melibatkan dua pihak (rekening) tersebut sebelumnya lumayan sulit dimengertiuntuk gue terlebih karena gue tidak memiliki latar belakang apapun di akuntansi.
|
||||||
|
|
||||||
|
Anyway tujuan gue menerbitkan ini adalah untuk memperkenalkan Firefly III ke lebih banyak peminatnya khususnya bagi yang ingin serius mengatur keuangan pribadinya karena gue rasa aplikasi ini sangat membantu (and maybe you can consider [sponsoring](https://github.com/sponsors/JC5) the maintainer like I used to!).
|
||||||
|
|
||||||
|
## Penutup
|
||||||
|
|
||||||
|
Hal utama yang perlu diketahui yakni Firefly III adalah sebuah aplikasi web dinamis yang membutuhkan basis data untuk menyimpan datanya. Sejauh yang gue tahu tidak ada versi "cloud" nya yang alias versi aplikasi yang dijalankan oleh orang lain yang bisa diakses melalui jaringan internet.
|
||||||
|
|
||||||
|
Firefly III ber-lisensi [AGPL-3.0](https://github.com/firefly-iii/firefly-iii/blob/main/LICENSE), [sumber terbuka](https://github.com/firefly-iii/firefly-iii/), dan sangat mudah untuk dijalankan sendiri (self-host) khususnya bila menggunakan Docker. Hanya butuh 2 container utama (fireflyiii/core dan database) untuk menjalankan aplikasinya. Memory footprint nya pun relatif ringan, rata-rata hanya memakan ~99M dengan peak CPU usage <80% yang kebanyakan idle nya. Dan harusnya tidak masalah jika dijalankan di Raspberry Pi 4 yang memiliki RAM 8GB dan CPU quad core.
|
||||||
|
|
||||||
|
Jika lo hanya ingin menggunakan Firefly III hanya dari laptop/komputer secara on-demand, menjalankannya via localhost pun gue rasa tidak masalah selagi lo komputer lo menjalankan reverse proxy dan DNS yang lo pakai bisa resolve domain yang lo maksud (i.e: firefly.home).
|
||||||
|
|
||||||
|
Jika ingin self-hosting dan butuh bantuan, feel free to [contact me](https://s3.rizaldy.club/rizaldy-club-ghost/dm) dan gue akan bantu sebisa mungkin. Ini gue seperti kontrak secara tidak langsung dengan Firefly III dengan memberikan support cuma-cuma ke penggunanya hahaha and I'm actually fine with that.
|
||||||
|
|
||||||
|
Dan jika ingin menggunakan [instance](https://money.rizaldy.club) yang berjalan di server rumah gue, bisa kontak gue juga walau gue tidak terlalu merekomendasikannya karena data yang disimpan di database tidak sepenuhnya ter-enkripsi yang berarti gue harusnya bisa tau transaksi-transaksi yang terjadi terkait dengan akun lo. Privasi (dan keamanan) adalah alasan utama gue kenapa gue self-hosting Firefly III dan tidak menggunakan solusi yang ditawarkan oleh alternatif yang menyediakan versi "cloud" nya (SaaS) yang harusnya gue tidak perlu ribet-ribet setup dan maintain. Jika lo untuk saat ini tidak terlalu memusingkan hal itu, feel free to contact me. Akan dengan senang hati gue buatkan akun, gratis, no string attached.
|
||||||
|
|
||||||
|
Sebagai penutup, Firefly III hanyalah sebuah tools. Dan tidak ada "real money" yang digunakan di Firefly III karena ini pada dasarnya hanyalah aplikasi pencatatan.
|
||||||
|
|
||||||
|
Firefly III tidak memiliki kontrol penuh untuk mengubah cara lo dalam mengatur keuangan melainkan diri lo sendiri, eventually.
|
||||||
|
|
||||||
|
Tujuan utama gue menggunakan Firefly III bukanlah untuk menghemat pengeluaran ataupun untuk mengurangi keborosan, melainkan untuk mencatat keuangan gue.
|
||||||
|
|
||||||
|
And they did it very well.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Sebagai catatan tambahan, berikut berkas `docker-compose.yml` gue untuk menjalankan Firefly III:
|
||||||
|
|
||||||
|
version: "3"
|
||||||
|
|
||||||
|
services:
|
||||||
|
fireflyiii:
|
||||||
|
restart: always
|
||||||
|
image: fireflyiii/core:latest
|
||||||
|
environment:
|
||||||
|
- APP_KEY= # you can generate with `openssl rand -hex 24`
|
||||||
|
- DB_HOST=postgres
|
||||||
|
- DB_PORT=5432
|
||||||
|
- DB_CONNECTION=pgsql
|
||||||
|
- DB_DATABASE=db_name
|
||||||
|
- DB_USERNAME=db_username
|
||||||
|
- DB_PASSWORD=db_password
|
||||||
|
- APP_ENV=production
|
||||||
|
- APP_DEBUG=false
|
||||||
|
- SITE_OWNER= # fill with your email address, i guess?
|
||||||
|
- TZ=Asia/Jakarta
|
||||||
|
- TRUSTED_PROXIES=**
|
||||||
|
networks:
|
||||||
|
- npm # reverse proxy
|
||||||
|
- postgres
|
||||||
|
volumes:
|
||||||
|
- fireflyiii:/var/www/html/upload
|
||||||
|
|
||||||
|
postgres:
|
||||||
|
restart: always
|
||||||
|
image: postgres:13-alpine
|
||||||
|
environment:
|
||||||
|
- POSTGRES_PASSWORD=db_root_password
|
||||||
|
volumes:
|
||||||
|
- postgres:/var/lib/postgresql/data
|
||||||
|
networks:
|
||||||
|
- postgres
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
fireflyiii:
|
||||||
|
postgres:
|
||||||
|
|
||||||
|
networks:
|
||||||
|
npm:
|
||||||
|
postgres
|
||||||
|
|
||||||
|
Buat database di postgres:
|
||||||
|
|
||||||
|
$ docker-compose exec postgres psql -U postgres
|
||||||
|
|
||||||
|
postgres=# create database fireflyiii;
|
||||||
|
postgres=# create user fireflyiii with encrypted password 'your password here';
|
||||||
|
postgres=# grant all privileges on database fireflyiii to fireflyiii;
|
||||||
|
|
||||||
|
Setup reverse proxy (misal pakai Nginx):
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Forwarded-Host $host;
|
||||||
|
|
||||||
|
// $forward_scheme = http
|
||||||
|
// $server = fireflyiii
|
||||||
|
// $port = 8080
|
||||||
|
proxy_pass $forward_scheme://$server:$port;
|
||||||
|
}
|
||||||
|
|
||||||
|
Dan jalankan:
|
||||||
|
|
||||||
|
$ docker-compose up -d fireflyiii
|
120
content/mengenal-network-address-translation-nat.md
Normal file
120
content/mengenal-network-address-translation-nat.md
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
---
|
||||||
|
title: Mengenal Network Address Translation (NAT)
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: mengenal-network-address-translation-nat
|
||||||
|
date: 2021-05-22T18:44:09.000Z
|
||||||
|
date_updated: 2021-08-01T04:54:01.000Z
|
||||||
|
excerpt: Salah satu bekal untuk yang tertarik membuat apapun yang menggunakan koneksi p2p
|
||||||
|
---
|
||||||
|
|
||||||
|
Pada tulisan sebelumnya yang berjudul [Apa & Mengapa menggunakan Tailscale](https://s3.rizaldy.club/rizaldy-club-ghost/apa-itu-mengapa-menggunakan-tailscale/) gue lumayan banyak menyinggung tentang NAT. Tailscale adalah aplikasi yang lumayan cocok untuk gue jadikan contoh terkait aplikasi yang menggunakan koneksi p2p.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/05/Screen-Shot-2021-05-23-at-04.40.25.png)Tangkapan layar hasil `tailscale status`
|
||||||
|
Disitu terlihat jelas bahwa ada 2 jenis koneksi yang terjalin: direct (p2p) dan relay alias melalui TURN server. Melihat dari gambar diatas, alamat IP 100.122.66.17 berada di jaringan First Media yang tidak di satu daerah sama gue sedangkan untuk mesin yang memiliki prefix `faultables-` berada di 1 jaringan yang sama yakni Biznet alias di router gue yang memiliki alamat IP private 192.168.88.0/24.
|
||||||
|
|
||||||
|
Khusus untuk yang `faultables-devbox` itu berada di jaringan Digital Ocean yang mana gue buka port 41641/udp sehingga untuk koneksi yang mengarah ke mesin tersebut melalui jaringan Tailscale, paket yang ditukar langsung dari mesin tersebut dan tanpa "perantara" dari TURN server nya Tailscale.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/05/Untitled-2021-05-23-0503.png)ilustrasi
|
||||||
|
Nah pertanyaannya, mengapa perangkat `zahra-iphone` yang tidak berada di jaringan yang sama (First Media) dengan `faultables-macbook` (Biznet) tidak bisa berkomunikasi secara langsung sedangkan perangkat `faultables-devbox` yang tidak berada dalam jaringan yang sama juga (Digital Ocean) bisa?
|
||||||
|
|
||||||
|
Karena First Media dan Biznet adalah rival.
|
||||||
|
|
||||||
|
Hahaha tentu bukan karena itu.
|
||||||
|
|
||||||
|
Jika alasannya adalah karena itu, tentu gue tidak perlu capek-capek membuat tulisan ini :))
|
||||||
|
|
||||||
|
## Mengenal NAT
|
||||||
|
|
||||||
|
Kunci utama yang harus diingat dari NAT adalah jika ada lebih dari 1 perangkat berada dalam 1 alamat IP publik yang sama, pasti jaringan tersebut memiliki NAT.
|
||||||
|
|
||||||
|
Ketika komputer gue mencoba untuk PING 1.1.1.1, ilustrasinya (yang disederhanakan) adalah seperti ini:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/05/Untitled-2021-05-23-0503-3.png)ilustrasi NAT
|
||||||
|
Alamat IP 182.253.151.214 adalah alamat IP publik (dinamis) yang diberikan oleh ISP ke router gue pada saat itu dan 1.1.1.1 adalah alamat IP publik statis yang dimiliki oleh jaringan Cloudflare.
|
||||||
|
|
||||||
|
Sekarang kita ke kasus `faultables-macbook` melakukan PING ke `zahra-iphone` melalui Tailscale yang ilustrasinya sederhananya seperti ini:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/05/Untitled-2021-05-23-0503-4.png)masalah pertama di P2P adalah tidak mengetahui alamat IP publik dari peer
|
||||||
|
Anggap di percobaan pertama si `faultables-macbook` tidak mengetahui alamat IP publik dari `zahra-iphone`, dengan bantuan STUN server, perangkat `zahra-iphone` akan memberitahu si STUN server tersebut kalau alamat IP publik dia adalah 140.0.231.60.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/05/Untitled-2021-05-23-0503-5.png)perangkat `zahra-iphone` memberitahu alamat IP publik nya ke Tailscale DERP
|
||||||
|
Oke sekarang si `faultables-macbook` sudah mengetahui alamat IP publik dari `zahra-iphone` yang berarti diagram sebelumnya sekarang menjadi seperti ini:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/05/Untitled-2021-05-23-0503-6.png)masalah kedua di P2P adalah tidak mengetahui kemana paket diteruskan
|
||||||
|
Masalah yang ada di ilustrasi diatas sekarang adalah router tidak mengetahui harus kemana paket tersebut diteruskan. Atau bisa juga karena router memblokir paket yang mau lewat dari port tersebut.
|
||||||
|
|
||||||
|
Alasannya beragam, yang paling gampang dipahami adalah karena sebelumnya belum pernah ada komunikasi yang lewat melalui port tersebut.
|
||||||
|
|
||||||
|
Alasan lain bisa saja port tersebut diblokir oleh Firewall yang berada di router.
|
||||||
|
|
||||||
|
Biasanya program VPN (yang menggunakan protokol UDP) akan melakukan ["hole punching"](https://en.wikipedia.org/wiki/UDP_hole_punching) untuk menentukan port mana yang bisa digunakan oleh 2 peer tersebut. Jika sekiranya tidak memungkinkan (misal karena salah satu peer berada dibelakang NAT yang kompleks) maka mau tidak mau paket tersebut harus diteruskan dari perangkat yang tidak berada dibelakang NAT yang kompleks, yang seringnya adalah melalui relay server atau TURN.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/05/Untitled-2021-05-23-0503-7.png)contoh PING dari 100.107.147.55 ke 100.122.66.17 via 68.183.179.66 (derp3-sin)
|
||||||
|
Sekarang komputer `faultables-macbook` bisa berkomunikasi dengan `zahra-iphone` deh!
|
||||||
|
|
||||||
|
## P2P without TURN
|
||||||
|
|
||||||
|
Hampir tidak mungkin untuk membuat koneksi p2p yang fully decentralized tanpa central server. Masalah utama dari teknologi p2p selain dari kasus "peer routing" diatas (NAT) adalah "peer discovery" alias, bagaimana cara peer A bisa menemukan peer B?
|
||||||
|
|
||||||
|
Misal kita ingin membuat sebuah layanan yang memang benar-benar peer-to-peer yang fully decentralized dan tanpa middleman. Anggap, kita ingin membuat layanan ride sharing seperti Goride nya Gojek namun tanpa central server alias komunikasi terjalin langsung antara pengemudi dan penumpang sehingga tidak ada biaya tambahan untuk jatah preman.
|
||||||
|
|
||||||
|
Untuk dapat mencapai pendekatan diatas, ada beberapa hal yang bisa kita usahakan:
|
||||||
|
|
||||||
|
- Melakukan port forwarding ataupun DMZ di level router yang tentu saja hampir tidak mungkin dilakukan oleh non-power user
|
||||||
|
- Menggunakan cara hacky seperti yang dilakukan oleh [pwnat](https://github.com/samyk/pwnat) yang dapat dipertimbangkan
|
||||||
|
- Melakukan automatic port forwading via uPnP yang sepertinya tidak kompatibel dibeberapa jaringan & juga uPnP dianggap kurang aman
|
||||||
|
- Melakukan "distributed" UDP Hole Punching yang terdengar keren 😛
|
||||||
|
|
||||||
|
Poin-poin diatas dapat membantu untuk melakukan "peer routing" tanpa harus terlalu bergantung dengan TURN server.
|
||||||
|
|
||||||
|
Masalah kedua sekarang ada "peer discovery" dan ini yang paling berat.
|
||||||
|
|
||||||
|
Kasus sederhananya, misal ketika gue ingin memesan Goride dari Ciheulang ke Starbucks Dipatiukur, bagaimana caranya agar si driver mengetahui & dapat mengambil pesanan tersebut sedangkan tidak ada central server sama sekali?
|
||||||
|
|
||||||
|
Dalam proses discovery, setidaknya ada 3 pendekatan yang bisa dilakukan:
|
||||||
|
|
||||||
|
- Multicast DNS alias mDNS. Cara ini sering digunakan bila berada di jaringan lokal yang sama.
|
||||||
|
- Random walk. Cara ini biasanya menggunakan DHT (Distributed Hash Table) lalu mencari peer melalui peer terdekat dengan terus menelusuri ke hash table tersebut.
|
||||||
|
- Bootstrap. Ini yang paling sederhana dan sepertinya banyak dipakai. Sayangnya bila menggunakan pendekatan ini terdapat central server.
|
||||||
|
|
||||||
|
Pendekatan lainnya mungkin bisa menggunakan Node Discovery Protocol v5 yang digunakan oleh sistem Ethereum, but anyway.
|
||||||
|
|
||||||
|
Menggunakan teknologi Bluetooth Low Energi ([BLE](https://en.wikipedia.org/wiki/Bluetooth_Low_Energy#Mesh_profiles)) ataupun Apple AirDrop untuk iOS dan Nearby untuk Android pun sepertinya hampir tidak mungkin untuk kasus kita.
|
||||||
|
|
||||||
|
Gue belum mengetahui solusi dari masalah terkait peer discovery ini, tapi mari kita berimajinasi.
|
||||||
|
|
||||||
|
Pertama, jika melihat kembali tujuan dari kasus khayalan yang kita buat ini, intinya kita ingin menjalankan misi yang mulia™ yakni membuat sebuah layanan yang menghubungkan antara penumpang & pengemudi secara langsung tanpa orang tengah yang meminta fee demi alasan operasional.
|
||||||
|
|
||||||
|
Kedua, dalam sebuah sistem pasti ada operator. Ada moderator. Ada koordinator. Ada komunitas yang andil dalam memelihara sistem tersebut.
|
||||||
|
|
||||||
|
Ketiga, terdapat banyak masalah di sistem yang tersentralisasi dan begitupula di sistem yang terdesentralisasi.
|
||||||
|
|
||||||
|
Mengambil 3 pertimbangan yang ada diatas, bisa kita tarik kesimpulan bahwa kita tetap membutuhkan orang ketiga dalam sistem p2p namun bukan bertindak sebagai *middleman *alias memiliki peran serupa juga dengan penumpang & pengemudi, hanya berbeda tugas aja.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/05/Untitled-2021-05-23-0758.png)
|
||||||
|
Dalam sistem desentralisasi pun kebanyakan memiliki sistem seperti itu. Ada miner di Bitcoin & Ethereum, ada seeder di Bittorrent, dsb.
|
||||||
|
|
||||||
|
Jadi, kembali ke bagian 'NAT without TURN' kesimpulannya adalah almost impossible dengan rancangan khususnya terkait sistem internet yang ada sekarang.
|
||||||
|
|
||||||
|
Yang gue bayangkan adalah si operator ini seperti Root DNS Server namun decentralized yang berperan hanya untuk membalas kalau peer `DrvYyQSo1c1Ym7orWxLYvCrM2EmxFTANf8wXmmE7DWjhx` memiliki alamat `143.198.198.198`. Mungkin seperti [Dynamic DNS](https://www.duckdns.org) namun decentralize gitu.
|
||||||
|
|
||||||
|
> Kenapa gak TURN server aja sih?
|
||||||
|
|
||||||
|
Gak apa-apa, biar panjang aja.
|
||||||
|
|
||||||
|
Hahaha enggak enggak, TURN server ini memang membantu namun masalah yang sedang kita bahas disini kan di peer discovery meskipun TURN server ini sangat penting untuk peer yang berada dibelakang symmetric NAT.
|
||||||
|
|
||||||
|
Kita sudahi pembahasan yang terlalu jauh keluar konteks tentang p2p ini ya.
|
||||||
|
|
||||||
|
Sebenernya masih ada pertanyaan lagi: bagaimana caranya agar peer B mengetahui jika peer A ingin pergi ke Starbucks Dipatiukur dari Ciheulang?
|
||||||
|
|
||||||
|
Tapi karena pertanyaan itu terlalu keluar dari topik, jadi biarkan menjadi misteri saja untuk saat ini.
|
||||||
|
|
||||||
|
## Mengapa harus peduli dengan NAT?
|
||||||
|
|
||||||
|
Karena jika kita ingin membuat koneksi yang terjalin secara peer-to-peer, kita harus tau tentang NAT juga.
|
||||||
|
|
||||||
|
## Kesimpulan & Penutup
|
||||||
|
|
||||||
|
Sebagaimana yang disebutkan di [tulisan sebelumnya](https://s3.rizaldy.club/rizaldy-club-ghost/apa-itu-mengapa-menggunakan-tailscale/) bahwa pada tahun 2021 ini gue tertarik untuk mengulik tentang teknologi P2P terlebih teknologi p2p tidak selalu tentang Real Time Communication.
|
||||||
|
|
||||||
|
Mungkin kata "decentralize" pada tahun ini sedang panas-panasnya, dan gue sejujurnya tidak tau apakah harus senang atau sebaliknya. Sudah lama gue tertarik dengan [Internet/Web 3.0](https://stratechery.com/2021/internet-3-0-and-the-beginning-of-tech-history/) karena gue kurang senang juga dengan apa yang ada di internet sekarang yang terlalu tertutup, tersentralisasi serta dikuasai oleh pemain besar.
|
||||||
|
|
||||||
|
Beberapa gerakan yang ada di internet seperti teknologi Bitcoin & Ethereum yang membuat 'setiap orang adalah bank' possible menjadi langkah awal karena uang adalah salah satu bagian yang paling krusial di masyarakat. Meskipun teknologi tersebut digunakan relatif tersentraliasi—bergantung dengan marketplace/exchange—namun itu tinggal menunggu waktu.
|
||||||
|
|
||||||
|
Anyway, sebenarnya masih banyak yang ingin gue bagikan terkait decentralize tapi karena judul dari tulisan ini adalah tentang NAT jadi mari kita sudahi saja. Pengetahuan terkait NAT sangat penting dalam pembuatan teknologi yang menggunakan teknologi P2P yang mana tidak terlalu bergantung dengan sentral server yang mengatur terlalu banyak tugas.
|
||||||
|
|
||||||
|
Sebagai penutup, jika masih tidak mendapatkan kenapa sistem tersentralisasi itu kurang bagus, silahkan tinggal di Indonesia dan lihat bagaimana *censorship *dan *gatekeeper *berperan disini.
|
139
content/menjadikan-raspberry-pi-sebagai-router.md
Normal file
139
content/menjadikan-raspberry-pi-sebagai-router.md
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
---
|
||||||
|
title: Menjadikan Raspberry Pi sebagai router
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: menjadikan-raspberry-pi-sebagai-router
|
||||||
|
date: 2021-07-07T04:54:53.000Z
|
||||||
|
date_updated: 2021-07-07T04:54:53.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Pada [15 Juni 2021](https://s3.rizaldy.club/rizaldy-club-ghost/menjajal-gl-mt300n-v2-mini-smart-router/) kemarin gue membeli router yang oke banget, doi menggunakan sistem operasi OpenWRT dan juga "menjadikan" privasi dan keamanan sebagai fitur utama (built-in support VPN & DNS encryption).
|
||||||
|
|
||||||
|
Pada dasarnya *router *hanyalah sesuatu yang bertugas untuk meneruskan & merutekan paket, dan sudah gue bahas sedikit di [edgy's frontline](https://edgy.substack.com/p/deep-packet-fucking-inspection) newsletter yang di isu paling pertama. Lalu gue kepikiran gimana kalau Raspberry Pi gue dijadiin router? Spesifikasi Raspberry Pi gue gak terlalu sampah banget: armv7, 4 core CPU dan RAM 4G, dan gue ingin ber-eksplorasi lebih dalam ke *network engineering.*
|
||||||
|
|
||||||
|
Percobaan pertama adalah dengan menjadikan Raspberry Pi (yang akan gue singkat menjadi *raspi*) bekerja sebagaimana *router *pada umumnya, yang berarti menjadi:
|
||||||
|
|
||||||
|
- DHCP server untuk memberikan alamat IP secara dinamis ke klien
|
||||||
|
- DNS (stub) resolver untuk menjawab DNS query oleh klien
|
||||||
|
- Penerus paket ke gateway (raspi gue terhubung ke WAN dan ada 2 router dibelakangnya)
|
||||||
|
|
||||||
|
Berdasarkan 3 poin diatas, minimalnya ada 3 program yang harus berjalan di raspi gue:
|
||||||
|
|
||||||
|
- `hostapd(8)` untuk membuat Access Point (AP) biar *devices *gue bisa terhubung secara *wireless*
|
||||||
|
- `dnsmasq(8)` untuk memberikan alamat IP ke klien sekaligus untuk menjawab *DNS queries *juga
|
||||||
|
- `iptables(8)` untuk mengatur paket yang masuk dan keluar. Biasanya ini sudah terpasang di sistem operasi
|
||||||
|
|
||||||
|
Dan seperti biasa, berikut ilustrasinya:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/07/Untitled-2021-07-05-0019.png)Dibelakang 192.168.88.0/24 masih ada 1 router lagi sebelum nyambung langsung ke ISP, cuman yaudalaya
|
||||||
|
Subnet yang gue pilih adalah 10.3.141.0/24 karena kenapa tidak dan gue tidak menggunakan `dnsmasq(8)` melainkan [AdGuardHome](https://github.com/AdguardTeam/AdGuardHome) karena dia juga bisa bertindak sebagai [DHCP server](https://github.com/AdguardTeam/AdGuardHome/wiki/DHCP). Serta, kalau gue pakai *dnsmasq, *dns queries diforward dari router ke... router. Jadi, kalau si 10.3.141.6 pakai *nameserver *router, si AdGuardHome taunya kalau yang melakukan* query *itu adalah si router itu sendiri bukan dari klien.
|
||||||
|
|
||||||
|
Nah, karena gue ingin tau juga siapa melakukan *query *kemana, jadi gue jadikan AdGuardHome sebagai DHCP server.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/07/Screenshot-from-2021-07-05-00-38-04.png)Setting DHCP server gue
|
||||||
|
Oh iya, si raspi gue untuk yang ini menggunakan sistem operasi [Raspian](https://www.raspbian.org/) karena FreeBSD 13.0 untuk di armv7 tidak mendukung *driver *Wi-Fi yang digunakan di raspi gue.
|
||||||
|
|
||||||
|
Driver untuk Wi-Fi gue adalah `wlan0` dan punya *static ip *10.3.141.1.
|
||||||
|
|
||||||
|
Gue kurang yakin apakah set *gateway IP *diatas menjadi 10.3.141.1 adalah hal yang benar atau salah, tapi bagaimanapun gue pakai `iptables(8)` juga untuk meneruskan paket dari `wlan0` ke `eth0`.
|
||||||
|
|
||||||
|
Untuk memulai, silahkan pasang AdGuardHome di raspi anda, kalau cara gue biasanya gini:
|
||||||
|
|
||||||
|
- `curl -JOL [<link>](https://github.com/AdguardTeam/AdGuardHome/releases)`
|
||||||
|
- `tar -xzvf <nama>`
|
||||||
|
- `sudo mv AdGuardHome/AdGuardHome /usr/local/bin`
|
||||||
|
- `sudo /usr/local/bin/AdGuardHome -s install`
|
||||||
|
|
||||||
|
Lalu akses port 3000, dan jalankan *setup *seperti biasa (next next next next).
|
||||||
|
|
||||||
|
## Setting Access Point
|
||||||
|
|
||||||
|
Sekarang kita ke bagian setting AP menggunakan `hostapd(8)`. Berkas konfigurasinya berada di `/etc/hostapd/hostapd.conf` dan konfigurasi minimalnya seperti ini:
|
||||||
|
|
||||||
|
auth_algs=1
|
||||||
|
wpa_key_mgmt=WPA-PSK
|
||||||
|
beacon_int=100
|
||||||
|
ssid=<nama_wifi>
|
||||||
|
channel=1
|
||||||
|
hw_mode=g
|
||||||
|
ieee80211n=0
|
||||||
|
wpa_passphrase=<password_wifi>
|
||||||
|
interface=wlan0
|
||||||
|
wpa=2
|
||||||
|
wpa_pairwise=CCMP
|
||||||
|
country_code=ID
|
||||||
|
ignore_broadcast_ssid=0
|
||||||
|
|
||||||
|
Apakah gue tau semua maksud dari konfigurasi diatas? Tentu tidak, tapi bukankah kita memiliki mesin pencari? Anyway, intinya konfigurasi diatas untuk setting biar si raspi kita *brodcast *sinyal Wi-Fi yang menggunakan autentikasi via WPA-PSK.
|
||||||
|
|
||||||
|
Dan berikut tampilannya ketika sudah tersambung:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/07/Screenshot-from-2021-07-06-21-18-01.png)Tentu saja signal stength excellent karena router gue disamping pisan
|
||||||
|
Karena gue pakai AdGuardHome sebagai DHCP server, kita bisa tau perangkat apa aja yang tersambung berikut dengan MAC Address dan alamat IP nya:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/07/Screenshot-from-2021-07-06-21-25-34.png)Daftar klien yang tersambung ke raspi gue
|
||||||
|
Gue pakai DHCP static lease karena 2 alasan:
|
||||||
|
|
||||||
|
1. Pengguna router ini umumnya cuma gue
|
||||||
|
2. Fitur "Private Address" nya iOS/iPadOS somehow ngeganggu, yang mana enggak expose *hostname *dan MAC Address asli perangkat gue (which is good) sedangkan gue butuh itu for the sake of a e s t h e t i c ✨ di dasbor AdGuardHome gue
|
||||||
|
|
||||||
|
Setelah si raspi sudah bisa ngasih alamat IP & melakukan DNS query, sekarang waktunya membuatnya bisa meneruskan paket. Seharusnya ini udah berjalan *out of the box *but just in case enggak berjalan, bisa cek peraturan di Firewall ataupun memastikan bahwa nilai `net.ipv4.ip_forward` adalah `1` di `/etc/sysctl.conf`.
|
||||||
|
|
||||||
|
## Install ntop
|
||||||
|
|
||||||
|
Meskipun untuk mengetahui "siapa mengontak siapa" secara teknis sudah bisa dilakukan di level DNS, tapi gue butuh informasi "siapa mengontak apa".
|
||||||
|
|
||||||
|
Dan untuk mengetahui itu gue butuh bantuan `ntopng(8)` yang exactly bekerja sebagai "traffic analyzer". Pikirkan seperti `top(1)` tapi untuk jaringan.
|
||||||
|
|
||||||
|
Untuk pemasangan `ntopng(8)` bisa diunduh melalui situsnya [disini.](https://www.ntop.org/get-started/download/) Dan berikut salah satu tampilannya:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/07/Screenshot-from-2021-07-06-21-45-04.png)Analisa trafik per aplikasi
|
||||||
|
Disitu gue bisa mengetahui perangkat-perangkat gue ini menghubungi siapa aja (Amazon, Twitter, Spotify, dkk) dan apa aja (SSH, mDNS, DNS, dkk) **plus **dengan kategorinya (Tracker/Ads, Fun, Acceptable, dkk).
|
||||||
|
|
||||||
|
Karena ntop adalah Traffic Analyzer, jadi dia pun menganalisa paket apa yang sekiranya dianggap berbahaya ataupun butuh perhatian. Misal ini, gue dapet alert kalau ada paket yang diduga "malicious" dengan kategori [Suspicious DGA](https://en.wikipedia.org/wiki/Domain_generation_algorithm):
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/07/Screenshot-from-2021-07-06-21-50-55.png)gue rasa karena TLD nya .xyz
|
||||||
|
Kita bisa setting "score anomaly" sesuai dengan selera kita sendiri.
|
||||||
|
|
||||||
|
Proses instalasi `ntopng(8)` relatif sederhana, dan satu-satunya konfigurasi yang gue setting sendiri hanyalah agar listen port ke 3003.
|
||||||
|
|
||||||
|
## What's next?
|
||||||
|
|
||||||
|
Tentu saja tunnel!
|
||||||
|
|
||||||
|
DNS queries yang ada di perangkat-perangkat gue dikirimkan melalui *encrypted protocol *yakni HTTPS, TLS, dan QUIC (yang dipilih randomly pakai RR) di AdGuardHome dengan [edgyDNS](https://edgy.network/dns) sebagai upstream DNS.
|
||||||
|
|
||||||
|
Setelah itu gue akan membuat IPv6 tunnel via [TunnelBroker](https://tunnelbroker.net/) nya HE biar router gue mendukung IPv6.
|
||||||
|
|
||||||
|
Lalu gue buat traffic internet gue di proxy ke [edgyPROXY](https://edgy.network/proxy) dan menggunakan QUIC sebagai transport protocol.
|
||||||
|
|
||||||
|
Berdasarkan keterbatasan kepengetahuan gue, jika melihat kebutuhan gue diatas, paket yang di-expose ke router dibelakang gue (dan router ISP tentunya) gue rasa bakal encrypted semua:
|
||||||
|
|
||||||
|
- DoH, DoT dan DoQ untuk DNS queries
|
||||||
|
- Proxy over QUIC untuk Web traffic (goodbye SNI leak, I guess?)
|
||||||
|
|
||||||
|
Dan tentu saja akan terus gue monitor untuk mengetahui mana aja yang miss.
|
||||||
|
|
||||||
|
## VPN?
|
||||||
|
|
||||||
|
Di setup seperti ini gue rasa gue belum butuh full tunnel via VPN.
|
||||||
|
|
||||||
|
Pertama karena gue bisa kontrol secara penuh untuk mengatur DNS dan HTTP traffic dan yang kedua karena bisa gue kontrol, berarti gue bisa milih untuk pakai encrypted transport protocol hahaha.
|
||||||
|
|
||||||
|
Beda ketika gue pakai routernya [GL-inet](https://s3.rizaldy.club/rizaldy-club-ghost/menjajal-gl-mt300n-v2-mini-smart-router/) yang memiliki spek yang minimum. Dia bisa enkripsi paket DNS (built-in support DoT via 1.1.1.1 nya Cloudflare dan NextDNS) tapi gak bisa buat tunnel HTTP packet melalui transport protocol yang aman.
|
||||||
|
|
||||||
|
Kalau gue lagi bekerja diluar rumah (fyi gue udah ~2 minggu gak keluar rumah, dan itu sebuah prestasi untuk gue haha) tentu gue akan pakai si router GL-inet karena portable dan juga tunnel ke VPN server gue selalu tersambung.
|
||||||
|
|
||||||
|
Jadi gue gak perlu cabut-pasang si router itu lagi ketika keluar rumah sambil membiarkan si raspi gak mendapatkan akses ke internet hahaha.
|
||||||
|
|
||||||
|
## Mengapa menjadikan raspi sebagai router?
|
||||||
|
|
||||||
|
Because why not?
|
||||||
|
|
||||||
|
Because we can?
|
||||||
|
|
||||||
|
Anything!
|
||||||
|
|
||||||
|
Sederhananya, apa yang bisa gue lihat adalah apa yang bisa dilihat oleh siapapun juga (ISP misalnya) dan gue tidak ingin siapapun tersebut mengetahui beberapa hal yang memang tidak ingin gue bagikan (seperti paket untuk DNS & HTTP/S misalnya).
|
||||||
|
|
||||||
|
It's fine ISP mengetahui gue berkomunikasi dengan [2001:470:ed00::420]:6969 melalui protokol QUIC, tapi untuk urusan kalau ISP tau gue mengakses pornhub.com, sorry, big no.
|
||||||
|
|
||||||
|
Mungkin gue berlebihan, atau tingkat insecurity gue adalah paranoid.
|
||||||
|
|
||||||
|
Tapi at least gue sudah mengetahui threat model gue, dan pendekatan yang gue lakukan adalah hal-hal yang harus gue pilih untuk threat model yang sudah gue pikirkan tersebut.
|
||||||
|
|
||||||
|
Dan yang terakhir sebagai penutup, I'm just having fun!
|
113
content/menjajal-gl-mt300n-v2-mini-smart-router.md
Normal file
113
content/menjajal-gl-mt300n-v2-mini-smart-router.md
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
---
|
||||||
|
title: Menjajal GL-MT300N-V2 Mini Smart Router
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: menjajal-gl-mt300n-v2-mini-smart-router
|
||||||
|
date: 2021-06-14T18:00:00.000Z
|
||||||
|
date_updated: 2021-08-01T04:53:50.000Z
|
||||||
|
excerpt: "My rating: ⭐️⭐️⭐️⭐️⭐️"
|
||||||
|
---
|
||||||
|
|
||||||
|
Sebelum kita masuk ke pembahasan, gue akan bercerita sedikit kenapa gue beli router ini.
|
||||||
|
|
||||||
|
Sudah lama sebenarnya ingin membeli router sendiri terlebih sekarang di kos gue menggunakan WAN yang setiap kamar dapet jatah 1 router. Dan brengseknya, sejauh yang gue tau cuma router di kamar gue aja yang langsung dihadang Mikrotik yang—kredensialnya hanya sysadmin dan tuhan yang tau—beda dengan kamar-kamar lain ataupun router di teras yang pakai gateway nya dari si router.
|
||||||
|
|
||||||
|
Kedua, perangkat gue 90% selalu terhubung dengan jaringan VPN dan seringnya gue pakai fitur Exit Node nya dari Tailscale untuk meneruskan paket (yang ter-enkripsi) dari perangkat gue ke server yang gue kontrol.
|
||||||
|
|
||||||
|
Ketiga, Captive Portal sangat membenci VPN. Lalu gue sedang riset cara kerja Captive Portal under the hood nya plus cara bypass nya. You know, the hacker mindset: untuk mencegah maling, lo harus tau & paham cara pikir & kerja maling.
|
||||||
|
|
||||||
|
Keempat, gue kepikiran daripada gue setup VPN di semua perangkat gue, kenapa gak di 1 perangkat aja dan semua paket dari perangkat gue diarahkan kesitu.
|
||||||
|
|
||||||
|
Nah, berdasarkan 4 poin diatas, gue bertanya ke teman-teman underground buat rekomendasi router yang yoi & menggunakan openWrt, lalu ada yang merekomendasikan produk dari [GL.iNet](https://www.gl-inet.com/) ini yang setelah gue pelajari banyak produknya, ternyata sangat yoi. Dan gue putuskan membeli ini:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/06/Screen-Shot-2021-06-15-at-12.47.23-AM.png)[Landing page](https://www.gl-inet.com/products/gl-mt300n-v2/) nya
|
||||||
|
Yang asik dari router ini—selain bentuk & warnanya yang imut—adalah built-in VPN support (OpenVPN & Wireguard), DoT (NextDNS & Cloudflare) dan DNSCrypt Proxy.
|
||||||
|
|
||||||
|
Dan aneh sih kalau gue gak beli, lalu gue cek harganya yang cuma $27.90 atau sekitar 397,000 IDR. Lalu gue cek di Tokopedia, dan [menemukan ini](https://www.tokopedia.com/fortunerx/gl-inet-gl-mt300n-v2-portable-mini-wireless-router-mini-mango) yang harganya cuma 345,000 IDR yang bahkan lebih murah dari harga aslinya yang gue yakin dia pake harga grosir.
|
||||||
|
|
||||||
|
Lalu gas lah membeli aaaand here we are!
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/06/E31GziGUcAI9_5X.jpg)Sumber gambar dari [twit](https://twitter.com/faultables/status/1404356515675336705/) gue (actually just Fariz megang router)
|
||||||
|
Dan berikut review ala-ala nya.
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
Ini pretty straightforward, gue rasa gak perlu kerja di Indihome untuk bisa setup router. Si router ini ada 4 mode sebagai AP: WAN, repeater, tethering via smartphone dan modem.
|
||||||
|
|
||||||
|
Karena gue pakai WAN, jadi gue tinggal colok ke port WAN, mengakses 192.168.8.1 dengan kata sandi "goodlife" sebagai default passwordnya, mengatur koneksi WiFi, lalu terhubung seperti biasa.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/06/Screen-Shot-2021-06-15-at-1.36.05-AM.png)Web interface nya yang bisa diakses di 192.168.8.1
|
||||||
|
Fitur pertama yang gue lakukan adalah tentu saja SSH karena pakai openWRT.
|
||||||
|
|
||||||
|
Tinggal `ssh root@192.168.8.1`, lalu masukkan password yang sama dengan yang di Web UI, lalu explore under the hood nya si router ini selagi bisa sambil digunakan sebagai router normal.
|
||||||
|
|
||||||
|
## DoT/DNScrypt Proxy
|
||||||
|
|
||||||
|
Fitur kedua yang mau gue gunakan adalah built-in encrypted DNS ini. Gue cuma benci saat DNS Query gue dijawab sama ISP yang gue pakai. Sayangnya setting custom DNSCrypt proxy lumayan ribet dan juga menggunakan built-in DoT nya hanya dukung NextDNS dan [Cloudflare](https://blog.cloudflare.com/dns-over-tls-built-in/).
|
||||||
|
|
||||||
|
Karena gue menjalankan DNS resolver server sendiri dan kagak lucuk kalo gue gak *dogfooding*, jadi gak gue pakai dulu built-in DoT tersebut kecuali bisa custom via web UI. Nah, karena dia pakai [stubby](https://github.com/getdnsapi/stubby), harusnya lumayan gampang buat set custom upstream untuk built-in DoT nya, tapi karena gue gak ada waktu buat coba-coba jadi gak gue pakai si fitur DoT tersebut.
|
||||||
|
|
||||||
|
So far pas gue pakai DNS nya Cloudflare via DoT tersebut berjalan dengan lancar dan ketika gue cek di [dnsleaktest.com](dnsleaktest.com/) enggak ada DNS resolver lain yang ikutan ngejawab dns query, jadi gue rasa fitur DoT tersebut oke punya kalau lo percaya dengan Cloudflare ataupun punya akun di NextDNS.
|
||||||
|
|
||||||
|
## VPN
|
||||||
|
|
||||||
|
Fitur ketiga yang ingin gue gunakan adalah built-in VPN support nya.
|
||||||
|
|
||||||
|
Karena sekarang tahun 2021, gue pakai Wireguard® daripada OpenVPN terlebih keunggulan Wireguard lebih oke daripada OpenVPN di berbagai aspek, termasuk di throughput.
|
||||||
|
|
||||||
|
Lalu gue spin up VM buat setup Wireguard dan gue pakai Compute Engine nya Google Cloud Platform karena gue punya banyak duit dan terlebih dia ada data center di Indonesia juga, sepertinya worth a try.
|
||||||
|
|
||||||
|
Setup Wireguard relatif mudah, cuma ada 5 langkah yang bisa lo lakukan setelah spin up instance sejauh yang gue tau (in case pakai varian Debian nya GNU/Linux):
|
||||||
|
|
||||||
|
- apt update
|
||||||
|
- apt install wireguard
|
||||||
|
- vim /etc/wireguard/wg0.conf
|
||||||
|
- setup firewall (both di level GCP & VM)
|
||||||
|
- wg-quick up wg0
|
||||||
|
|
||||||
|
And it's done. Untuk bikin konfigurasi Wireguard tinggal buat [dari sini](https://www.wireguardconfig.com/) buat yang males kek gue. Dan gue pakai private subnet 172.16.0.0/24 biar gak bentrok sama VPC nya GCP (10.x.x.x) dan private subnet dari ISP (192.168.x.x).
|
||||||
|
|
||||||
|
Oh iya, kalau pakai GCP harus setup MTU nya jadi `1360` both di server & klien, dan itu known issues. Anyway, berikut hasil Speedtest nya:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/06/Screen-Shot-2021-06-15-at-1.13.45-AM.png)[Link](https://www.speedtest.net/result/11576426186) hasil Speedtest
|
||||||
|
Di setup biasa (langsung pakai router dan tanpa VPN) untuk Download speed tembus sekitar 30Mbps dan Upload speed bisa sampai 50Mbps. Paket internet yang dipakai di kos gue adalah Biznet yang 50Mbps, dan gue rasa kecepatan segitu masih bisa ditoleransi oleh gue as far as masih bisa streaming Netflix ataupun Pornhub di 720p.
|
||||||
|
|
||||||
|
## Encrypted DNS Queries
|
||||||
|
|
||||||
|
Karena gue anaknya dogfooding banget, masalah DoT sebelumnya bisa diselesaikan dengan mengirim DNS Query ke VPN server gue via Wireguard.
|
||||||
|
|
||||||
|
Paket yang dikirim sudah ter-enkripsi, dan di VPN server gue tinggal pakai `[dnsproxy](https://github.com/AdguardTeam/dnsproxy)` yang upstream nya adalah DoT nya [dns.edgy.network](https://s3.rizaldy.club/rizaldy-club-ghost/edgydns-with-more-edgyness/), dan gue rasa cuma ada overhead 1-3ms.
|
||||||
|
|
||||||
|
Caranya relatif sederhana: matikan stub resolver di sistem operasi VPN server sehingga si `dnsproxy` bisa bind ke :53, lalu di VPN client (router) tinggal tambahkan bagian DNS yang mengarah ke private IP nya si Wireguard di VPN server (kalau gue berarti 172.16.0.1).
|
||||||
|
|
||||||
|
Ketika gue cek di [DNSLeaktest](https://dnsleaktest.com/), [strongleaktest](https://strongleakstest.com), [whoer dns leak test](https://whoer.net/dns-leak-test) dan [ESNI checker](https://www.cloudflare.com/ssl/encrypted-sni/) nya Cloudflare, yang menjawab DNS query gue hanya si [dns.edgy.network](https://dns.edgy.network) dan plus DNSSEC bekerja sebagaimana seharusnya, yeay!
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/06/Screen-Shot-2021-06-15-at-1.23.16-AM.png)Hasil strongleakstest.com
|
||||||
|
By the way, gue mematikan DNS Query via Plain DNS di IPv4 for some reason, dan kalau memang terpaksa harus menggunakan Plain DNS, edgyDNS hanya menawarkan via IPv6 yakni:
|
||||||
|
|
||||||
|
- 2001:470:ecbf::53
|
||||||
|
- 2001:470:ecbf::666
|
||||||
|
|
||||||
|
Dan karena ISP gue belum mendukung IPv6 natively, itulah alasan kenapa DNS query nya gue forward ke VPN server daripada langsung dari komputer gue.
|
||||||
|
|
||||||
|
## Penutup
|
||||||
|
|
||||||
|
Ketika gue coba traceroute—ke server nya cloudflare-dns.com (1.1.1.1) sebagai contoh—output nya adalah seperti ini:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/06/Screen-Shot-2021-06-15-at-1.43.01-AM.png)traceroute ke 1.1.1.1
|
||||||
|
Paket diteruskan ke router gue, terus ke VPN server gue, terus somehow tiba lah dia ke server 1.1.1.1 yang bahkan gue tidak melihat komunikasi dengan ISP & IXP sama sekali.
|
||||||
|
|
||||||
|
Eksperimen selanjutnya adalah gue ingin tau apakah si router ini bisa *bypass *atau setidaknya mendeteksi captive portal atau kagak tanpa harus mengubah konfigurasi sekalipun.
|
||||||
|
|
||||||
|
Sebelumnya, setiap kali gue menggunakan public Wi-Fi yang dihadang captive portal, hal yang harus gue lakukan adalah:
|
||||||
|
|
||||||
|
- Disconnect VPN
|
||||||
|
- Revert DNS dari yang pakai Secured DNS nya Big Sur jadi DNS server yang whatever dikasih ISP
|
||||||
|
- Kalau gue lagi pakai Firefox, disable DoH level Firefox
|
||||||
|
- Kalau gue lagi pakai SOCKS5 proxy, disable that too baik di Firefox ataupun system-wide
|
||||||
|
|
||||||
|
Lalu captive portal muncul, dan klik tombol Lanjutkan deh.
|
||||||
|
|
||||||
|
Gue akan membahas panjang lebar seputar captive portal secara under the hood, stay tune untuk yang tertarik!
|
||||||
|
|
||||||
|
Sebagai penutup, sekarang perangkat gue hanya ingin konek ke Wi-Fi yang bernama edgy aja yang mana adalah SSID dari router gue ini. Router ini bisa toggle VPN connectivity via configurable button yang bisa di setting di Web UI, serta menggunakan USB sebagai power source nya (bisa pakai Powerbank!), dan bentukannya lebih kecil dari rokok gue, ada [IGMP Snooping](https://www.cloudflare.com/learning/network-layer/what-is-igmp-snooping/), ada fitur kill-switch buat yang level paranoid nya ekstrim, dan masih banyak lagi yang gak bisa gue sebut satu-satu.
|
||||||
|
|
||||||
|
Dan sekarang gue bisa menggunakan "double VPN" diseluruh perangkat gue karena VPN utama diatur di router dan untuk "internal VPN" sebagaimana yang banyak dipakai di aplikasi iOS/iPadOS bisa gue gunakan secara smooth tanpa harus bentrok dengan Tailscale or something like that.
|
||||||
|
|
||||||
|
Overall gue sangat puas dengan produknya GL.iNET ini dan merekomendasikan produk mereka khususnya jika butuh *router *pribadi yang by design membantu melindungi privasi kita sebagai pengguna internet dalam menggunakan internet.
|
||||||
|
|
||||||
|
Dan selalu akan gue bawa kemanapun gue pergi!
|
97
content/menyembunyikan-email-di-internet.md
Normal file
97
content/menyembunyikan-email-di-internet.md
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
---
|
||||||
|
title: Menyembunyikan email di internet
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: menyembunyikan-email-di-internet
|
||||||
|
date: 2021-05-26T01:58:31.000Z
|
||||||
|
date_updated: 2021-05-26T02:03:58.000Z
|
||||||
|
excerpt: Email adalah identitas utama di internet, well, at least sebelum kita membahas tentang Web 3.0 nanti.
|
||||||
|
---
|
||||||
|
|
||||||
|
Email adalah identitas utama di internet, well, at least sebelum kita membahas tentang Web 3.0 nanti. Setiap layanan yang ada di internet pasti menggunakan email untuk mengautentikasi siapa kita di layanan tersebut.
|
||||||
|
|
||||||
|
Kasus *[data breach](https://haveibeenpwned.com/PwnedWebsites)*bukanlah sesuatu yang baru di internet. Data breach sederhananya adalah sebuah kondisi ketika pihak yang seharusnya tidak memiliki izin untuk mengakses data tersebut dapat mengaksesnya melalui jalan manapun dan biasanya menjualnya ke pembeli yang ada di internet.
|
||||||
|
|
||||||
|
Data yang dijual bervariasi, namun yang paling menarik & laku adalah data pengguna. Salah satu alasannya adalah karena data pengguna bisa digunakan untuk tujuan mendapatkan keuntungan, entah itu untuk melakukan scam; phising, carding, spam, dan lain sebagainya tergantung tujuan & data yang dikantongi.
|
||||||
|
|
||||||
|
Kasus terakhir yang lumayan besar di Indonesia yang gue peduli adalah ketika ~15jt data di [Tokopedia](https://haveibeenpwned.com/PwnedWebsites#Tokopedia) tercuri termasuk data TTL, alamat *email*, jenis kelamin, nama dan kata sandi yang seharusnya dalam bentuk *hashed.*
|
||||||
|
|
||||||
|
Ketika berbicara tentang keamanan & privasi khususnya di internet, kita harus mengetahui *threat model *kita sebagai pengguna. Kalau dari kasus pembobolan sistem Tokopedia, kemungkinan data gue (kalau ada) dipakai untuk melakukan *spam *dan *phising *jika memang si pembeli data ingin melakukannya.
|
||||||
|
|
||||||
|
Anyway, biasanya, dari data breach juga digunakan sebagai gerbang kedua untuk masuk ke gerbang utama: akses ke email kita. Tidak jarang pengguna internet menggunakan kata sandi yang sama; kata sandi yang tidak unik, dsb yang relatif mudah dipecahkan thanks to john the ripper.
|
||||||
|
|
||||||
|
Ketika akun kita berada dalam *data breach *tersebut, biasanya, penyedia layanan akan memberitahukan kita untuk mengganti kata sandi untuk mengurangi resiko penyerangan khususnya dalam pengambil-alihan akun.
|
||||||
|
|
||||||
|
Namun poin nya bukan disitu, melainkan data alamat email utama kita sudah terdampak, dan yang "melakukan sesuatu" terkait data bukan hanya orang yang dianggap jahat untuk melakukan kejahatan saja. Jika pembeli data tersebut adalah perusahaan yang menyediakan layanan untuk bisa mengidentifikasi bahwa 3 pengguna di berbagai layanan dengan data yang berbeda adalah 1 orang yang sama, dan berkat sihir *"machine learning" *yang salah satu sumbernya diambil dari data yang dijual tersebut, kasus tersebut termasuk salah satu dari *threat model *gue dalam berinternet.
|
||||||
|
|
||||||
|
Jangan anggap kasus tersebut hanyalah fantasi belaka, I know exactly this industry :))
|
||||||
|
|
||||||
|
## Private relay
|
||||||
|
|
||||||
|
Mozilla pada kapan lalu menyediakan layanan "private relay" melalui [Firefox Relay](https://relay.firefox.com/) dan Apple [pun melakukan](https://support.apple.com/en-us/HT210425) hal yang hampir sama namun melalui Sign in with Apple nya.
|
||||||
|
|
||||||
|
Bukan tanpa alasan mengapa 2 perusahaan yang *mengaku *sangat peduli dengan privasi menawarkan layanan tersebut ke pengguna nya demi melindungi lebih lanjut identitas pengguna khususnya di internet.
|
||||||
|
|
||||||
|
Private relay ini cara kerjanya relatif sederhana, intinya, hanya menyembunyikan alamat email tujuan asli dibalik alamat email yang diberikan oleh si private relay. Khusus untuk Apple, sejauh yang gue tau private relay di Apple ini skop nya per-aplikasi/domain, jadi alamat `f5cx@...` hanya dapat menerima email dari `@github.com` dan akan auto-reject bila mendapatkan email dari `@gitlab.com`.
|
||||||
|
|
||||||
|
Dari 2 layanan diatas, terdapat pro dan kontra masing-masing.
|
||||||
|
|
||||||
|
Untuk Apple, tentu saja ini terbatas hanya untuk pengguna Apple **dan **terkunci di tembok Apple.
|
||||||
|
|
||||||
|
Untuk Firefox, sejauh yang gue tau hanya bisa membuat 5 alamat private aja namun tidak terkunci di tembok Firefox untuk penggunaannya. **Namun**, Mozilla hobi mematikan layanannya **dan **berdasarkan dari [FAQ](https://relay.firefox.com/faq) nya, jika suatu saat Mozilla mematikan layanan tersebut, satu-satunya cara yang harus dilakukan adalah mengganti alamat email tersebut, karena kamu terkunci di tembok @relay.firefox.com nya Firefox, meskipun kasus tersebut dapat dihindari bila Mozilla menawarkan *custom domain*.
|
||||||
|
|
||||||
|
Sejak [SimpleLogin](https://simplelogin.io/) pertama kali diluncurkan, gue langsung tertarik untuk menggunakannya. Gue pernah pasang di server gue melalui instruksi di README nya yang sangat intuitif, SimpleLogin ini *Open Source* dan berlisensi MIT. Gue pernah kontak *founder *nya untuk menyediakan donasi via GitHub Sponsors karena pada saat itu gue masih ingin menjalankan SimpleLogin di server gue sendiri.
|
||||||
|
|
||||||
|
Setelah insiden [hilangnya data](https://github.com/docker/for-linux/issues/1237) karena Docker, gue memutuskan untuk menggunakan versi berbayar cloud nya yang ditawarkan oleh SimpleLogin pertahun sebagai bentuk sponsor.
|
||||||
|
|
||||||
|
Dan karena itu mengapa tulisan ini ada.
|
||||||
|
|
||||||
|
## Tentang SimpleLogin
|
||||||
|
|
||||||
|
SimpleLogin adalah layanan yang serupa seperti Private relaynya Firefox dan Apple, namun bersumber kode terbuka & berlisensi MIT. Setiap orang dapat menjalankan SimpleLogin di mesinnya sendiri jika memang ehm tidak menghargai waktu mereka.
|
||||||
|
|
||||||
|
SimpleLogin mendukung *custom domain* sehingga proses migrasi dari server gue ke layanan SimpleLogin sesederhana mengganti *record *MX, CNAME, dan TXT ke tempat mereka.
|
||||||
|
|
||||||
|
Dan juga SimpleLogin mendukung "catch-all" yang sangat berguna untuk gue yang tidak memiliki *backup *untuk import daftar email gue ke SimpleLogin yang menggunakan alamat domain yang sama.
|
||||||
|
|
||||||
|
Cara kerja SimpleLogin ini sesederhana hanya melakukan penerusan, tidak ada data email yang disimpan. Gue yakin dengan itu karena gue pernah menjalankannya di server gue sendiri, thanks to Open Source.
|
||||||
|
|
||||||
|
Hal yang menarik dari SimpleLogin adalah email yang di *forward *bisa di-enkripsi terlebih dahulu menggunakan Public PGP key kita. Ini salah satu contohnya:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2021/05/Screen-Shot-2021-05-26-at-15.23.10.png)
|
||||||
|
Email by design tidak menyediakan pilihan enkripsi end-to-end—karena relatif sulit untuk mendeteksi spam—dan juga layanan email yang gue gunakan ([Migadu](https://migadu.com)) tidak menyediakan *encryption at rest*. Dan gue tidak ingin menggunakan POP3 hanya agar server Migadu tidak menyimpan data email gue untuk menghindari kehilangan data lagi.
|
||||||
|
|
||||||
|
Gue sudah lama tidak menggunakan layanan email dari penyedia email gratis karena beberapa alasan dan gue memilih Migadu (you should too!) karena setuju dengan "misi" yang mereka miliki.
|
||||||
|
|
||||||
|
Secara keseluruhan pendekatan gue adalah:
|
||||||
|
|
||||||
|
- Menggunakan email `...@relay.edgy.network` untuk layanan yang gue gunakan di internet yang mengarah ke SimpleLogin.
|
||||||
|
- SimpleLogin akan mengenkripsi lalu meneruskan email tersebut ke email asli gue yang memang hanya ditujukan untuk layanan yang ada di internet
|
||||||
|
- Migadu menerimanya dan dalam bentuk terenkripsi. Di level email client gue sudah setup untuk membuatnya auto-decrypt on demand.
|
||||||
|
|
||||||
|
Pendekatan gue terkesan overkill namun ini membuat aktivitas gue di internet menjadi sedikit terasa aman. Ketika ada data breach, nama; TTL dan berbagai data sensitif lainnya tetap tercuri—yang mungkin bisa digunakan untuk *identity theft—*namun data email utama gue tetap aman. Dan gue tinggal matikan itu alamat (gue satu akun satu alamat email btw) lalu mengganti alamat email & kata sandi dengan yang baru. Profit!
|
||||||
|
|
||||||
|
## Penutup
|
||||||
|
|
||||||
|
Di beberapa kasus gue masih membuka alamat email gue ke publik, seperti `oss@faultable.dev` yang gue gunakan di GitHub dan untuk melakukan *sign commit *juga.
|
||||||
|
|
||||||
|
Tidak ada yang spesial dengan alamat email tersebut, jika terkena pembobolan pun hanya berisi notifikasi dari GitHub dan SourceHut. Selain itu juga, alamat email yang di teruskan dari SimpleLogin sebenarnya hanyalah *alias *yang tidak memiliki kredensial, email utama gue masih menjadi rahasia yang hanya gue dan Migadu tau hahaha.
|
||||||
|
|
||||||
|
Selain itu ada juga `hi@faultable.dev` yang gue gunakan untuk berkomunikasi via email dengan pengguna random internet untuk jalur pribadi.
|
||||||
|
|
||||||
|
Gue tau & sadar kalau internet bukanlah tempat yang aman, gue pernah diposisi menggunakan topi hitam; putih, dan bahkan abu-abu. Sekarang bahkan gue bekerja di industri yang berurusan dengan data, dan gue tau apa yang dilakukan dengan data tersebut :))
|
||||||
|
|
||||||
|
Setiap orang pasti memiliki *threat model *masing-masing, seperti, mungkin beberapa ada yang merasa *insecure *ketika ada seseorang yang mengikuti dia di malam hari & ada yang merasa biasa aja.
|
||||||
|
|
||||||
|
Dan ketika berbicara tentang keamanan & privasi di internet, seharusnya kita sudah mengetahui akan *threat model *kita juga. Khusus untuk *software engineer *pasti sudah familiar-lah dengan *threat model *karena ketika merancang & mengembangkan peranti lunak, kita biasanya sudah memikirkan bagimana mana saja yang bisa menjadi celah keamanan; apa yang sudah dipersiapkan dan belum dipersiapkan, serta apa *worst case scenario *yang sudah terbayang.
|
||||||
|
|
||||||
|
Begitupula dengan manusia, harusnya memikirkan itu juga. Gue tidak membahas detail tentang OpSec disini karena ditulisan ini gue cuma ingin memberitahukan kepuasan gue menggunakan layanan SimpleLogin dan Migadu.
|
||||||
|
|
||||||
|
Email adalah salah satu data sensitif di dunia internet karena mengarah ke identitas seseorang. Setiap orang mungkin berbeda-beda dalam memelihara informasi sensitif, dan gue cuma membagikan cara gue dalam memelihara informasi sensitif di internet.
|
||||||
|
|
||||||
|
Jika suatu saat SimpleLogin menutup layanannya, gue tinggal *export *data yang ada di SimpleLogin dan memindahkan ke alternatif lain yang dirujuk SimpleLogin ataupun menjalankannya sendiri yang tidak memakan waktu 1 jam.
|
||||||
|
|
||||||
|
Jika suatu saat Migadu menutup layanannya, gue tinggal backup data-data email gue dan memindahkannya ke alternatif lain ataupun menjalankannya sendiri yang sedikit ribet.
|
||||||
|
|
||||||
|
Salah satu manfaat dari menggunakan *custom domain *bukan hanya di *self-branding*, melainkan di *ownership-ish *juga, karena internet, by mistake, menggunakan "domain" sebagai "sistem penamaan" thanks to human limit yang tidak bisa menghafal 3,706,452,992 alamat IP public.
|
||||||
|
|
||||||
|
Dan hey, domain tersebut sebenarnya kita hanya menyewanya saja bukan memilikinya secara utuh. Tapi itu pembahasan lain :))
|
136
content/mimpi.md
Normal file
136
content/mimpi.md
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
---
|
||||||
|
title: Mimpi
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: mimpi
|
||||||
|
date: 2022-01-23T14:34:41.000Z
|
||||||
|
date_updated: 2022-01-23T14:34:41.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Pada tahun 2015 lalu di hari pertama kali kuliah, kelas pertama yang gue ikuti adalah kelas Agama. Kala itu hari Senin dan kelas dimulai pada jam 07pm. Satu pertanyaan yang paling gue inget adalah "Apa tujuan manusia terlahir ke dunia?"
|
||||||
|
|
||||||
|
Jawabannya beragam dan setiap mahasiswa mendapat kesempatan untuk membagikan jawabannya. Ada yang menjawab *"untuk membahagiakan orang tua"*,* "untuk menjadi orang yang berguna bagi masyarakat dan keluarga"*, dan sampai ada yang menjawab *"karena takdir"*. Ketika sampai di giliran gue, gue menjawabnya dengan *"untuk beribadah". *Gue tahu jawaban itu adalah jawaban yang ingin dosen gue dengar, dan bukan pertama kali gue mendapatkan pertanyaan tersebut setelah menimba ilmu selama 6 tahun di sebuah sekolah bernama pesantren.
|
||||||
|
|
||||||
|
Setelah semua mahasiswa mendapatkan kesempatan untuk menjawab, dosen gue bilang kalau tujuan manusia terlahir ke dunia adalah untuk beribadah. I know right?
|
||||||
|
|
||||||
|
Pertanyaan dan jawaban tersebut seharusnya terlalu umum, pertama, karena menggunakan "manusia" sebagai subjeknya dan kedua, menggunakan "beribadah" sebagai predikatnya. Jika lebih spesifik, bagaimana pertanyaannya adalah "apa tujuan `<nama lo>` terlahir ke dunia?". Of course, mungkin lo bisa berdalih *"gue tidak pernah meminta untuk dilahirkan"*, but what if jika ternyata lo pernah meminta itu yang mungkin dengan kapasitas yang lo punya sekarang lo tidak bisa mengingat ataupun merasa pernah memintanya?
|
||||||
|
|
||||||
|
Everything must be happens for a reason, right?
|
||||||
|
|
||||||
|
Anggap bila kita tidak memiliki alasan lain untuk hidup di dunia ini and all we do is just survive yang anggap saja karena tidak pernah meminta dan berharap untuk dilahirkan ke dunia. Makan, main, tidur, repeat, seperti beberapa makhluk hidup lainnya yang ada di dunia ini juga.
|
||||||
|
|
||||||
|
Tapi jika memang hidup hanya untuk itu, why do we need to survive anyway?
|
||||||
|
|
||||||
|
Hidup sengan, mati tak mau.
|
||||||
|
|
||||||
|
And when people die, do you know what other people say?
|
||||||
|
|
||||||
|
Rest in peace.
|
||||||
|
|
||||||
|
Like, fuck, even peace is an option.
|
||||||
|
|
||||||
|
## Kebahagiaan
|
||||||
|
|
||||||
|
Ada beberapa orang yang tidak percaya akan kehadiran tuhan yang salah satu alasannya adalah karena ia tidak terlihat. Bagian menariknya adalah, apakah lo bahkan percaya dengan arwah?
|
||||||
|
|
||||||
|
Kebanyakan kita menganggap ada dan tidak adanya sesuatu berdasarkan dengan apa yang bisa kita nalar; dari melihat, mendengar, mengecap, mencium, sampai ke meraba. Dan sampai hari ini kita yakin bahwa hanya ada 2 substansi. Jika terlihat berarti ada, jika tidak terlihat berarti tidak ada. Jika tidak ada cahaya berarti gelap, jika ada berarti terang.
|
||||||
|
|
||||||
|
Hanya ada 0 dan 1 seperti sistem di angka biner, tidak ada yang ditengah, tidak ada substansi lain.
|
||||||
|
|
||||||
|
...and let's pretend quantum computing is not a thing to this day.
|
||||||
|
|
||||||
|
Sekarang gue ingin bertanya, *"apakah lo sekarang bahagia?". *Tebakan gue, pasti jawabannya adalah *"biasa aja, netral"*. Tapi setuju gak karena lo gak jawab *"gue sekarang bahagia" *berarti lo sekarang sedang tidak bahagia?
|
||||||
|
|
||||||
|
*"gak bahagia-bahagia amat sih, yaa sedikit lah"*
|
||||||
|
|
||||||
|
You must understand what I mean, no?
|
||||||
|
|
||||||
|
Gue pernah penasaran dengan makna kebahagiaan, dan kebanyakan orang bijak akan bilang bahwa *"kebahagiaan itu dibuat, bukan dicari". *Of couse, setiap orang memiliki makna kebahagiaannya masing-masing berikut dengan cara untuk mengamalkannya.
|
||||||
|
|
||||||
|
Yang menjadi pertanyaan adalah bagaimana lo bisa tahu jika itu adalah sebuah kebahagiaan? Apakah karena senyum? Karena tertawa? Karena loncat-loncat? I know, jawaban umumnya adalah "karena senang" atau "karena gembira", tapi, gimana cara lo menunjukkan bahwa lo sedang bahagia?
|
||||||
|
|
||||||
|
*"klo terasa mah gak perlu ditunjukkan juga bakal tau sih"*
|
||||||
|
|
||||||
|
You must understand what I mean, no?
|
||||||
|
|
||||||
|
## Masa kecil
|
||||||
|
|
||||||
|
Waktu kecil gue teringat pernah mendapatkan hadiah yakni sebuah "mobile remote" yang diantar oleh om gue ke sekolah ketika menjemput gue. Kala itu gue masih TK, gue tidak ingat persisnya gambarannya seperti apa tapi gue masih ingat persisnya perasaannya seperti apa.
|
||||||
|
|
||||||
|
Gue bahagia, sangat bahagia. Bahkan sampai hari ini masih teringat perasaannya tersebut seperti apa.
|
||||||
|
|
||||||
|
Ketika SD kelas 3, gue masih teringat ketika di rumah pertama kali ada komputer. Sistem operasinya adalah Windows Me. Windows fucking Millenium edition. Dan yang paling bahagia pada saat itu bukanlah gue, melainkan bokap gue. Entahlah, mungkin beliau terharu karena bisa memiliki sebuah komputer di rumahnya?
|
||||||
|
|
||||||
|
Selain itu, ketika kelas 5 SD gue teringat bahwa pertama kalinya gue diantar bokap ke sekolah dengan motor Honda Win 200. Biasanya bokap nganter gue (sekaligus pulang/pergi kerja) menggunakan mobil jimny jangkrik hijau kesayangannya yang entah bagaimana sudah tidak ada di garasi rumah yang bahkan sampai hari ini. Dulu gue tidak terlalu mengerti apa-apa yang gue tau bokap cuma bilang "dibeli sama temen" yang secara teknis tidak salah tapi poinnya adalah alasan dibalik itu.
|
||||||
|
|
||||||
|
Ketika diantar ke sekolah menggunakan honda win pinjaman dari kantor tersebut, entah bagaimana gue merasa bahagia. Sangat bahagia. Bahkan sampai hari ini masih teringat perasaannya tersebut seperti apa. Jika sebelumnya gue merasakan bahagia karena gue mendapatkan mobil remote ataupun mendapatkan ada komputer di rumah, yang bagian ini adalah karena gue melihat bokap gue ketika dia memperlakukan motor tersebut. Entahlah, mungkin karena seperti terharu.
|
||||||
|
|
||||||
|
Terkadang gue kepikiran, seperti, apakah apapun yang gue dapatkan di masa kecil tersebut seperti sebuah "pinjaman" yang harus gue berikan kembali ke orang tua gue dan sekaligus menjadi "warisan" yang harus gue berikan ke keturunan gue nanti?
|
||||||
|
|
||||||
|
Oke itu terlalu kejauhan, bahkan gue belum mengetahui tanggung jawab sebagai orang tua itu apa saja.
|
||||||
|
|
||||||
|
Seiring berjalannya waktu, ada satu hal yang gue pahami dari diri gue tentang konsep sebuah kebahagiaan: gue sangat bahagia ketika melihat orang lain bahagia.
|
||||||
|
|
||||||
|
Tentu saja itu bukanlah satu-satunya cara untuk bahagia bagi gue, tapi itu menjadi cara paling favorit sekalipun modal & tradeoff nya terkadang tidak mudah.
|
||||||
|
|
||||||
|
## Mimpi
|
||||||
|
|
||||||
|
Sejujurnya gue tidak ingat kapan terakhir kali gue mendapatkan mimpi ketika tidur. Termasuk ehm mimpi basah. Bangun tidur seringkali tidak tenang karena langsung mencari jam ataupun mematikan alarm dan untuk beranjak tidur pun terkadang tidak tenang memikirkan apa yang akan terjadi esok hari berikut dengan masalah apa yang harus dihadapi.
|
||||||
|
|
||||||
|
Ketika di pesantren dulu bangun tidur gue pasti sekitar jam 03am (karena sangat dipaksa bangun) dan ketika beranjak tidur pun tidak banyak yang harus dikhawatirkan karena dunia gue pada saat itu hanya sesempit kurang lebih 1 hektar.
|
||||||
|
|
||||||
|
Persamaannya adalah hal yang dilakukan setelah dari bangun tidur hingga beranjak tidur lagi yakni sama-sama melakukan hal sesuai dengan template. Hanya mobilitasnya saja yang sekarang lebih luas.
|
||||||
|
|
||||||
|
Gue belajar pemrograman dari ketika gue SMP. Hampir setiap hari gue kabur dari pesantren hanya untuk pergi ke warnet dan belajar pemrograman. Murni belajar, no game, not even porn. Jam favorit gue adalah ketika kelas setelah istirahat kedua (sekitar jam 10.45) sampai waktu ketika solat dzuhur di rakaat ketiga. Cara gue belajar pada waktu itu adalah dengan mengikuti forum daring, berdiskusi dengan pseudonym random dan mencetak sumber kode yang mereka berikan dan membacanya dimanapun gue bisa.
|
||||||
|
|
||||||
|
Dan itu terasa painful, sangat painful, jika dibandingkan dengan cara gue (ataupun beberapa orang) belajar pada hari ini mengingat sumber dayanya yang sangat sangat terbatas.
|
||||||
|
|
||||||
|
Gue tidak ingin merasakan hal itu lagi dan juga berharap orang lain tidak merasakannya juga. Gambarannya seperti gue ingin menjadi seorang pelaut yang tinggal di sebuah pegunungan dan tidak ada perahu satupun kecuali pohon-pohon besar yang tidak ada kampak disekitarnya.
|
||||||
|
|
||||||
|
## Impian
|
||||||
|
|
||||||
|
Impian pertama gue adalah gue ingin membuat pengetahuan menjadi lebih mudah diakses oleh siapapun dan yang paling penting tidak menjadikan status sebagai batasan. Tentu saja itu bukanlah tanggung jawab gue dan mungkin dunia tidak berjalan seperti itu juga.
|
||||||
|
|
||||||
|
Tapi setidaknya gue bisa mengambil berperan dan juga mungkin di sebatas dunia gue saja. Hal yang paling gue tekankan adalah sebuah pembelajaran dari pengalaman karena pada akhirnya teori pun selalu berdasarkan pengalaman dari orang lain, bukan?
|
||||||
|
|
||||||
|
Gue yakin bahwa setiap orang memiliki sesuatu yang layak dibagikan dan setiap orang berhak mendapatkan pembelajaran dari itu. I know, ini adalah tentang pertanggung jawaban dan, ya, pada akhirnya yang dipertanggung jawabkan juga manusia lagi. Tidak perlu reward seperti sertifikasi seperti gelar ataupun sertifikat untuk menandakan sebuah kelulusan, cukup pelajari; pahami, dan amalkan.
|
||||||
|
|
||||||
|
Impian kedua gue adalah gue ingin membuat orang-orang merasa lebih aman di dunia yang serba digital seperti saat ini. Dari menjaga privasi sampai mengamankan data pribadi.
|
||||||
|
|
||||||
|
Dunia digital—khususnya dunia internet—by nature adalah dunia tanpa bingkai. Siapapun bisa menjadi siapa saja dan bisa berada dimana saja. Internet adalah alam yang liar meskipun yang terlihat hanyalah sebuah dokumen web yang diakses melalui alamat domain.
|
||||||
|
|
||||||
|
Beberapa orang hidup di internet, bergantung dengan internet dan bahkan mencari makan dari internet. Produk utama dari internet adalah informasi yang mana bisa dimanfaatkan menjadi pengetahuan ataupun cara mendapatkan cuan.
|
||||||
|
|
||||||
|
Berita kebocoran data pribadi dari sebuah instansi, pembobolan akun pribadi, perilaku impulsif karena tereksploitasi, sampai ke pencurian identitas diri adalah hal yang terus gue perjuangkan di dunia internet sampai hari ini. Jika dahulu seseorang menyimpan rahasia di pikirannya sendiri, god, mungkin sekarang bertebaran di SSD dan aplikasi.
|
||||||
|
|
||||||
|
Seperti, jika ingin merasa aman dan nyaman ketika buang air kecil adalah dengan menutup pintu sampai terkunci, yang gue perjuangkan adalah menunjukkan bahwa pintu tersebut benar-benar terkunci.
|
||||||
|
|
||||||
|
Impian ketiga gue adalah ingin turut andil dalam membantu orang lain melakukan apa yang mereka sukai namun dengan porsi dan keterbatasan gue. Sederhananya, jika lo sangat suka membuat kopi dan hanya memiliki kopi nya saja, gue akan bantu untuk mendapatkan gelasnya sekalipun harus membuatnya, karena hal itu yang gue bisa. Impian yang ini sangat abstrak, luas, dan panjang. Tapi setidaknya gue memberi sedikit gambaran.
|
||||||
|
|
||||||
|
Impian keempat, dan anggap saja terakhir adalah, ehm, membuat bangga orang tua. Sudah banyak kekecewaan yang mereka dapatkan dari gue, dan karena gue rasa membuat mereka bahagia sudah lumayan sulit, jadi gue ingin setidaknya membuat mereka bangga. Gue tidak bisa dan mungkin sudah gagal untuk menjadi yang mereka harapkan, tapi gue berharap, setidaknya, pada suatu waktu, mereka akan bilang seperti "that's my fucking son!" untuk sesuatu yang sudah gue lakukan.
|
||||||
|
|
||||||
|
## Harapan
|
||||||
|
|
||||||
|
Ini sedikit silly but you know, a man can dream.
|
||||||
|
|
||||||
|
Pertama, gue ingin tinggal dan menghabiskan hidup di sebuah tempat yang membawakan kebahagiaan yang bukan sebatas gue yang membuatnya saja. Tempat tersebut misalnya memiliki pemandangan yang mengangumkan, memiliki lingkungan yang aman, ramah, tentram, dan nyaman, memiliki aturan yang tidak menyulitkan, memiliki udara yang segar, dan sangat terasa kehidupannya. I know it's too good to be true, anggap saja poin tadi adalah "nice to have" bukan "requirements". Tapi gue sudah memiliki daftar yang sekiranya ada yang cocok dengan beberapa poin diatas and I guess all I have to do is to pursue it?
|
||||||
|
|
||||||
|
Kedua, financial freedom. Tidak sebatas "pengen ini tanpa tapi" melainkan gue seperti ingin "growing money on trees" juga untuk berjaga-jaga di hari nanti. Kebanyakan orang pasti menyarankan investasi terlepas instrumen apapun itu, tapi jika ada pilihan lain, I'd love to know!
|
||||||
|
|
||||||
|
Ketiga, yang paling inti, hidup tenang dan bahagia. Gue rasa ini adalah harapan semua orang, dan dua poin diatas gue rasa adalah cara gue untuk mencapai poin ketiga ini.
|
||||||
|
|
||||||
|
## Penutup
|
||||||
|
|
||||||
|
The wise once said *"work in silence, let success make the noise" *and while it was definitely not wrong, but failure is not embarrassing khususnya bila tidak menganggap "kesuksesan" sebagai tujuan utama.
|
||||||
|
|
||||||
|
Why does everyone dream of success as if the "survivorship bias" never existed?
|
||||||
|
|
||||||
|
Inilah salah satu alasan gue mengapa gue menerbitkan tulisan ini, tidak sebatas di aplikasi Things yang berada di perangkat gue.
|
||||||
|
|
||||||
|
Terkadang gue merasa lelah, merasa seperti apa yang gue perjuangkan terlalu jauh ataupun tidak sepadan, merasa seperti gue ingin hidup normal-normal saja dengan kondisi yang mungkin seperti saat ini.
|
||||||
|
|
||||||
|
But, damn, I only live once. And I'm very curious how's life in Switzerland.
|
||||||
|
|
||||||
|
On another hand, gue rasa puncak kebahagiaan adalah ketika mimpi-mimpi yang dimiliki tercapai. So, don't dream too much, I guess?
|
||||||
|
|
||||||
|
I don't know where I am now and I know that the journey is very long and not easy. But I've started already. So, don't stop yet, I guess?
|
150
content/nevertheless.md
Normal file
150
content/nevertheless.md
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
---
|
||||||
|
title: Nevertheless
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: nevertheless
|
||||||
|
date: 2023-07-01T17:07:29.000Z
|
||||||
|
date_updated: 2023-07-03T05:01:37.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Saat sedang mengantri di supermarket, tangan saya reflek merogoh saku celana dan mengambil ponsel. Tidak ada notifikasi ataupun tujuan khusus saat membuka kunci layar menggunakan muka, hanya, entah bagaimana otak saya merasa yakin bila aktivitas yang dilakukan saat mengantri adalah memeriksa ponsel.
|
||||||
|
|
||||||
|
Tingkat urgensi membawa ponsel hari ini hampir setara dengan membawa dompet. Dompet dimaksudkan untuk menyimpan barang-barang yang muat di saku: dari kartu debit, kartu tanda penduduk, kartu SIM, kartu asuransi, kartu keanggotaan, dan tentu saja uang kertas.
|
||||||
|
|
||||||
|
Tidak jarang juga berguna untuk menyimpan benda ajaib yang mungkin dapat digunakan disaat yang acak seperti menyimpan kond—oke skip, tidak lulus redaksi.
|
||||||
|
|
||||||
|
Hari ini, hampir semua isi di dompet ada di ponsel. Of course, kecuali, mungkin, si benda ajaib tersebut. Aktivitas terbanyak yang dilakukan di ponsel saya sendiri adalah untuk bertransaksi, sisanya, sebagaimana tujuan utama dari ponsel itu sendiri: untuk berkomunikasi; mendekatkan yang jauh dan tidak jarang menjauhkan yang dekat.
|
||||||
|
|
||||||
|
Saat ingin bepergian, terkadang saya bepikir mengapa harus membawa dompet. Hanya empat kartu yang berpotensi digunakan, itupun hanya di kondisi spesial seperti ketika ada pemeriksaan di jalan ataupun ketika pembayaran melalui QRIS sedang tidak dapat digunakan. Untuk uang kertas, saya selalu membawa 200rb untuk jaga-jaga bila transaksi elektronik tidak dapat dilakukan.
|
||||||
|
|
||||||
|
Saya memasukkan kembali ponsel dan melakukan pembayaran melalui mesin EDC. Beberapa supermarket belum mendukung pembayaran melalui QRIS karena alasan yang tidak pernah ingin saya ketahui. Transaksi elektronik seperti ini menghilangkan kekhawatiran terkait membawa uang yang kurang ataupun menerima kembalian yang tidak tertatur.
|
||||||
|
|
||||||
|
Transformasi digital mungkin dapat membuat kehidupan manusia menjadi lebih mudah lagi berkat teknologi, khususnya dalam aktivitas transaksi. Namun demikian, apakah sama hal nya dengan membuat manusia menjadi lebih konsumtif lagi berkat kemudahan tersebut?
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Dari 6 series [Black Mirror](https://www.netflix.com/title/70264888), episode favorit saya sejauh ini adalah "Joan is Awful", episode pertama dari series keenam yang tayang pada awal Juni 2023.
|
||||||
|
|
||||||
|
Black Mirror pada dasarnya adalah sebuah film series dan sebagaimana tujuan pembuatan sebuah film pada umumnya, dimaksudkan untuk hiburan. Film adalah media yang relatif sempurna untuk mendongeng karena melibatkan audio dan visual yang cukup membantu dalam proses penceritaan.
|
||||||
|
|
||||||
|
Jika merujuk ke judul dari film tersebut, cukup aman bila film itu dimaksudkan untuk refleksi alih-alih hiburan. "Cermin hitam". Di Indonesia sendiri, jika tidak salah ingat, sekitar tahun 2015-2018 terdapat series berjudul WTF Indonesia yang diterbitkan di platform berbagi video YouTube yang mana membahas topik yang lebih spesifik. Kebanyakan menganggap bahwa series video yang diterbitkan tersebut bertujuan untuk hiburan, namun mungkin akan berbeda jika series Black Mirror menjadi sesuatu seperti sekarang, dan yang mana dikuatkan dengan video terakhir dari series tersebut.
|
||||||
|
|
||||||
|
Episode "Joan is Awful" intinya bercerita tentang sebuah teknologi bernama [deepfake](https://en.wikipedia.org/wiki/Deepfake). Yang membuat episode ini menjadi favorit saya adalah karena melibatkan 3 hal yang anggap cukup saya senangi: rekursifitas, simulasi, dan komputer quantum. Yes, that quantum fucking computers.
|
||||||
|
|
||||||
|
Intinya, ini adalah tentang seseorang (Joan) menonton aktivitas dirinya sendiri di platform streaming video bernama Streamberry, dan "Joan is Awful" ini (di platform streaming video tersebut) adalah series pertama sebagai pengujian.
|
||||||
|
|
||||||
|
Dalam episode ini, ada 3 tingkatan "realita" yang terlibat: Joan sumber yang menonton Joan level 1 (diperankan oleh Anny Murphy) di Joan is Awful dan Joan level 1 yang menonton Joan level 2 (diperankan oleh Salma Hayek) di Joan is Awful. Secara teknis, si Joan level 2 akan menonton si Joan level 3 (yang entah diperankan siapa) namun di episode tersebut, tidak dilihatkan cuplikan si Joan level 2 menonton film Joan is Awful.
|
||||||
|
|
||||||
|
Yang artinya, untuk menyadari bahwa Joan berada dalam simulasi, Joan harus menyadari terlebih dahulu bahwa Joan sadar berada dalam simulasi. Si "Joan sumber" di film tersebut tidak menjamin adalah si Joan "asli", dan sebagaimana sifat dasar dimensi: dimensi diatas bisa melihat ke dimensi dibawahnya namun tidak bisa sebaliknya. Inilah alasan mengapa kita (yang diyakini tinggal di realitas dimensi 3) bisa melihat sesuatu ber-dimensi satu (x); dua (xy) dan tiga (xyz), tapi tidak bisa melihat sesuatu dengan dimensi empat dan seterusnya.
|
||||||
|
|
||||||
|
Yang dalam konteks Joan is Awful, Joan di realita tersebut hanya bisa melihat diperankan siapa namun tidak bisa melihat memerankan siapa.
|
||||||
|
|
||||||
|
Ini menurut saya pribadi bisa dianggap sebagai proyeksi/presentasi dari takdir. Dalam ajaran Islam, segala sesuatu diyakini *sudah* dicatat oleh tuhan dalam kitab [Lauhulmahfudz](https://id.wikipedia.org/wiki/Lauhulmahfuz). Yang gampangnya, segala sesuatu—termasuk aktivitas membaca tulisan ini pada detik ini—sudah tercatat di kitab tersebut. Membaca tulisan ini pada detik ini pada akhirnya adalah takdir yang kamu pilih.
|
||||||
|
|
||||||
|
Jika kita dalam simulasi, sederhananya adalah apa yang kita lakukan di detik ini adalah apa yang dilakukan oleh versi dari diri kita di realita lain. Dalam film Joan is Awful, terdapat jeda beberapa waktu sebelum menayangkan apa yang si Joan tersebut lakukan di film Joan is Awful.
|
||||||
|
|
||||||
|
Bagian menariknya adalah, alasan mengapa tayangan tersebut berjudul "Joan is Awful" yang relatif berkonotasi negatif alih-alih yang berkonotasi positif seperti "Joan is Awesome" adalah karena tayangan yang menunjukkan sisi positif kurang menarik audiens. Saya rasa ini tidak perlu dijelaskan lebih lanjut jika melihat ke "realitas" yang ada.
|
||||||
|
|
||||||
|
Di keseluruhan cerita Joan is Awful, Joan mungkin adalah pribadi yang jahat. Lalu pada suatu titik, dia ingin merubahnya yang dimulai dengan menghancurkan si komputer quantum. Semenjak itu, kehidupan Joan menjadi lebih baik yang ditayangkan dengan sesi terapi saat ditanya bagaimana kehidupan Joan sekarang.
|
||||||
|
|
||||||
|
Dan yang paling penting, tayangan Joan is Awful sudah berakhir, yang mungkin, karena Joan sudah tidak jahat: berdamai dengan dirinya, melakukan yang dia senangi dan memperlakukan karyawannya dengan baik.
|
||||||
|
|
||||||
|
Sounds boring, no?
|
||||||
|
|
||||||
|
Bagian yang saya ambil yang mungkin bisa dijadikan pelajaran, ini adalah tentang muhasabah alias evaluasi. Bedanya dengan di realitas kita, muhasabah dilakukan dengan perenungan atas apapun yang sudah kita lakukan alih-alih menjadi tontonan dalam bentuk film, apalagi sampai menjadi konsumsi yang bisa "dinikmati" oleh khalayak banyak.
|
||||||
|
|
||||||
|
Di lain sisi, dalam ajaran Islam, ada sebuah konsep bernama Padang Mahsyar. Ini adalah tempat dimana manusia dibangkitkan kembali setelah kematiannya, lalu dikumpulkan, dan yang pada akhirnya akan dipertanggungjawabkan perbuatannya ketika hidup di dunia dulu. Kondisi ini disebut juga dengan Hari Perhitungan. Dari pelajaran yang saya dapat, segala perbuatan yang pernah kita lakukan akan di pertontonkan (yang jika tidak salah ingat ke semua manusia) yang sekalipun mata (indera penglihatan) kita sudah terkubur di tanah.
|
||||||
|
|
||||||
|
Awalnya alasan saya memasukkan bagian ini ke tulisan ini adalah untuk menceritakan bagaimana kondisi Joan is Awful bisa terjadi berkat teknologi: tentang pembuatan profil, pelacakan digital, kebijakan privasi, kecerdasan umum buatan, dan apapun yang terlihat tidak mungkin dapat dilakukan dengan sebuah teknologi.
|
||||||
|
|
||||||
|
Tapi saya rasa justru nilai terpentingnya adalah apa yang ada di cermin hitam tersebut. Tentang bagaimana teknologi dapat membangun dan menghancurkan kehidupan seseorang, tentang bagaimana kehidupan seseorang dapat berubah berkat bantuan teknologi.
|
||||||
|
|
||||||
|
Namun demikian, pada akhirnya yang bisa merubah Joan adalah Joan sendiri.
|
||||||
|
|
||||||
|
Di penghujung film saat Joan ragu ingin menghancurkan komputer quantum sialan itu, Joan meyakini dirinya dengan berkata *"Jika aku berdiri di sini, berarti Joan di 'dunia nyata' sudah berdiri disini. Kehendakku tak berarti... Sebab kejadian ini berdasarkan fakta yang telah terjadi. Ini bukan keputusanku. Ini keputusan Joan. Ini harus terjadi. Joan melakukannya."*
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Di kehidupan sekarang, relatif sulit menentukan mana 'yang benar' dan 'yang tidak benar', jika memang peduli. Di beberapa video yang dibagikan di platform media sosial, tidak jarang menemukan komentar seperti 'ini settingan', 'pasti scripted' dsb saat menunjukkan sesuatu yang seperti nyata. Anggap seperti sebuah video 'bertanya ke orang acak lalu memberikan hadiah' sebagai contoh.
|
||||||
|
|
||||||
|
Terlepas 'settingan' ataupun tanpa-skrip-dan-persetujuan, apa sebenarnya yang penting? Apa esensinya? Apa tujuannya?
|
||||||
|
|
||||||
|
Bukankah segala sesuatu yang terjadi bahkan sudah ditulis di lauhulmahfudz?
|
||||||
|
|
||||||
|
Tentu, di banyak kasus, tujuannya adalah untuk hiburan. Dan komentar 'settingan' seharusnya bukanlah sebuah kewajiban. Jika kebenaran dan kebohongan adalah tentang keberadaan sangkalan bahwa video tersebut hanyalah fiktif untuk tujuan hiburan semata, lalu, bagaimana kebenaran yang berdasarkan fakta/realita?
|
||||||
|
|
||||||
|
Gue kepikiran hal ini saat salah satu teman gue bilang bahwa kesenangan yang gue rasakan—saat menceritakan sesuatu—hanyalah kesenangan semu, meskipun gue merasakan bahwa kesenangan itu ada disana.
|
||||||
|
|
||||||
|
Memang bagaimana rasanya 'kesenangan asli' itu? Apa yang memang membuatnya menjadi pembeda? Apa yang penting dari nyata dan semu, anyway?
|
||||||
|
|
||||||
|
Gue akan mencoba menjelaskan. Coba bayangkan lo berada di sebuah tempat yang indah, aman dan nyaman. Tempat impian lo. Bersama dengan seseorang yang lo inginkan dan dikelilingi dengan barang-barang ataupun hal-hal yang lo impikan.
|
||||||
|
|
||||||
|
Apakah lo merasakan kesenangan ketika membayangkannya?
|
||||||
|
|
||||||
|
Jika iya, tentu, mungkin, itu dianggap kesenangan semu. Kesenangan yang didapat dari sesuatu yang tidak terjadi. Yang mungkin, jika terjadi tidak sesuai dengan yang lo bayangkan sebelumnya.
|
||||||
|
|
||||||
|
Tapi apa pentingnya? Hari ini dan hari esok adalah lini waktu yang berbeda. Serta, realita, hanyalah tentang apa yang dipikirkan dan apa yang bisa dijangkau dengan panca indera. Membandingkan membayangkan nikmatnya makan Indomie rebus jam 04:29 WIB dengan merasakan kenyangnya setelah memakannya tentu dua hal yang berbeda, tapi jika rasa nikmatnya saja bisa dibayangkan, apa pentingnya? (brb bikin indomie)
|
||||||
|
|
||||||
|
Atau apakah ini cuma bukti penguat bahwa gue mulai kurang waras?
|
||||||
|
|
||||||
|
Namun demikian, sesuatu yang tidak benar-benar terjadi tidak bisa menjadi landasan khususnya dalam mempertanggungjawabkan sesuatu, apalagi jika ditunggangi untuk suatu kepentingan.
|
||||||
|
|
||||||
|
Dan yang paling penting, kebenaran selalu berdasarkan fakta dan bisa dipertanggungjawabkan karena bisa dibuktikan, dan dapat diterima oleh akal dan indera.
|
||||||
|
|
||||||
|
Mungkin khayalan gue terhadap nikmatnya makan Indomie rebus jam 04:29 WIB tadi adalah sebuah kebohongan dan hanya merasakan kenikmatan yang semu.
|
||||||
|
|
||||||
|
Tapi apa pentingnya di jam 04:56 WIB setelah gue selesai beneran memakannya dan merasa kenyang?
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Jam menunjukkan angka 03:03, udara terasa sangat segar ditambah dengan hembusan angin perlahan-lahan. Kami berdua sedang berbaring di padang rumput sambil memandangi bintang-bintang yang tak tertutup oleh polusi cahaya.
|
||||||
|
|
||||||
|
Tidak ada suara musik, apalagi kendaraan. Sesekali terdengar suara hembusan angin melewati rumput yang menguatkan bagaimana heningnya kondisi saat ini.
|
||||||
|
|
||||||
|
"Bintang indah, ya" ucap seseorang disamping gue, menghapus keheningan.
|
||||||
|
|
||||||
|
"Bintang terkecil berdiameter 10 kali lebih besar dari diameter bumi" ucap gue, "Jika satu bintang jatuh mengarah ke Bumi secara utuh..." gue melanjutkan.
|
||||||
|
|
||||||
|
"Bumi akan hancur?" ucapnya.
|
||||||
|
|
||||||
|
"Harusnya. Tapi entah bagaimana disini ada satu bintang utuh yang bilang 'Bintang indah, ya' " ucap gue sambil bercanda.
|
||||||
|
|
||||||
|
Kami berdua tetawa kecil. Tertawa sinis lebih tepatnya.
|
||||||
|
|
||||||
|
"Kamu sadar kan klo ini cuma mimpi?" tanya gue. Dia menanggapi secara instan dengan pertanyaan lagi: "Mimpi siapa emang?"
|
||||||
|
|
||||||
|
"Aku" ucap gue, singkat.
|
||||||
|
|
||||||
|
"Bagaimana jika ini adalah mimpi orang lain yang kebetulan kita mendapatkan peran dan lalu dipertemukan disini? Bagaimana jika memang aku disana sedang memimpikan hal yang sama juga? Bagaimana jika ini ternyata realita di semesta lain yang entah bagaimana kita mendapatkan peran sekarang? Bagaimana jika..." ucapnya panjang lebar.
|
||||||
|
|
||||||
|
"Oke, oke, oke" gue memotong.
|
||||||
|
|
||||||
|
Disini gue tidak merasakan kelaparan, atau kedinginan, atau bahkan rasa kantuk. Hembusan angin perlahan tidak terasa secara fisik namun gue merasakan kedamaiannya. Sambil memikirkan 3 pertanyaan tersebut, pikiran gue buyar karena mendengar suara yang sama.
|
||||||
|
|
||||||
|
"Kapan kita bangun? Dan dimana?" pertanyaan nya selanjutnya. Rasa penasaran dan keingintahuan nya mengingatkan gue dengan cerita Pandora.
|
||||||
|
|
||||||
|
"Di atas kasur seperti biasa, dan tergantung ketika di alarm keberapa kita terusiknya" jawab gue, realistis.
|
||||||
|
|
||||||
|
"Kita bertemu lagi, kan? Di tempat antah berantah ini?" ucapnya.
|
||||||
|
|
||||||
|
"Entahlah. Disini, di bumi, di semesta lain, jika memang sudah jalannya, tidak ada yang bisa memberhentikan" jawab gue sok bijak.
|
||||||
|
|
||||||
|
Hari sudah mulai terang. Kicauan burung mulai terdengar samar-samar. Kilauan bintang perlahan memudar, segera tertutup cahaya matahari yang mungkin jaraknya lebih dekat dengan bumi.
|
||||||
|
|
||||||
|
"Melihat bintang berarti melihat masa lalu, tau" ucapnya. Lalu dia melanjutkan: "Klo cahaya bintang yang kamu liat jaraknya 100 tahun cahaya dari bumi, maka cahaya yang datang dari bintang tersebut membutuhkan 100 tahun juga untuk mencapai bumi. Berarti, cahaya bintang yang kamu liat itu adalah cahaya bintang dari ratusan tahun lalu" ucapnya panjang lebar.
|
||||||
|
|
||||||
|
Mungkin gue perlu mencari tahu apakah ucapannya berdasarkan data atau hanya sebatas bercandaan sebelum perpisahan.
|
||||||
|
|
||||||
|
"Bagaimana jika kita tidak bertemu lagi? Atau seperti tidak pernah merasa kenal satu sama lain? Bahkan sampai detik ini kita tidak mengetahui nama kita masing-masing" lanjutnya.
|
||||||
|
|
||||||
|
"Namun demikian..." sebelum gue menyelesaikan jawaban, terdengar suara nada yang sangat familiar. Bunyi alarm dari ponsel yang gue simpan diatas meja kerja.
|
||||||
|
|
||||||
|
Cahaya matahari terlihat samar-samar memasuki kamar gue melalui jendela yang tertutup oleh gorden abu-abu.
|
||||||
|
|
||||||
|
"Namun demikian, pada akhirnya kita dipertemukan kembali. Sekalipun tidak pernah berkenalan ataupun mengetahui nama masing-masing sama sekali". Kalimat itulah yang ingin gue ucapkan dengan lengkap.
|
||||||
|
|
||||||
|
Entah bagaimana caranya bertemu dengan seseorang yang tidak pernah dipertemukan sebelumnya. Bahkan, keberadaannya saja mungkin bisa dipertanyakan.
|
||||||
|
|
||||||
|
Dan jika memang sudah jalannya, mari kita mulai dengan "Namun demikian" nanti. Dilanjutkan dengan cerita transaksi elektronik menggunakan QRIS; salah satu episode dari Black Mirror, membayangkan nikmatnya makan Indomie rebus shubuh-shubuh sampai beneran membuatnya, dan diakhiri dengan percakapan 'Bintang indah, ya' yang menjadi awal dari segalanya.
|
||||||
|
|
||||||
|
Sekarang jam menunjukkan 07:07 WIB, waktunya gue memulai hari atau waktunya gue menutup hari di semesta yang lain.
|
20
content/pages/contact.md
Normal file
20
content/pages/contact.md
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
title: /contact
|
||||||
|
tags:
|
||||||
|
- evergreen
|
||||||
|
---
|
||||||
|
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/02/AD24D3DE-DC5B-4F81-800D-9AD40350B2EC.jpg)
|
||||||
|
|
||||||
|
I'm tired of writing emails so feel free to [email me](mailto:me@rizaldy.club) but don't expect anything from me (I read your email anyway). I probably reachable over [Matrix.](https://matrix.to/#/@rizaldy:beeper.com) In any way, I've been more into IRL chats lately so maybe let's have a coffee or two at the nearest Starbucks.
|
||||||
|
|
||||||
|
Sometimes I rant on my own [Mastodon](https://edgy.social/@rizaldy) instance or post random photos on my ~~own [Pixelfed](https://edgy.photo/@rizaldy) instance~~ ["not instagram"](https://ig.rizaldy.club) pages. I currently don't use Instagram, Threads, Twitter, TikTok, Tinder, Bumble, Snapchat, or anything social for personal reasons, in case anyone is asking.
|
||||||
|
|
||||||
|
I have [Instagram](https://instagram.com/faultables) and [Twitter](https://twitter.com/faultables) accounts just to make the username unavailable.
|
||||||
|
|
||||||
|
> [!info] Update 25/02/2024
|
||||||
|
> Apparently I have moods in getting social on internet! Drop me a DM or two on Instagram.
|
||||||
|
|
||||||
|
Did I mention I also [play games](https://steamcommunity.com/id/package-json/) sometimes?
|
||||||
|
|
||||||
|
Kembali ke [[index|beranda]].
|
33
content/pages/now.md
Normal file
33
content/pages/now.md
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
---
|
||||||
|
title: /now
|
||||||
|
tags:
|
||||||
|
- evergreen
|
||||||
|
---
|
||||||
|
|
||||||
|
> [!info]
|
||||||
|
>
|
||||||
|
> Ingin melihat riwayat pembaruan tiap bulan? Kunjungi bagian [[log]].
|
||||||
|
|
||||||
|
## Apa yang sedang saya lakukan sekarang?
|
||||||
|
|
||||||
|
Halaman ini terinspirasi dari ide nya [Derek Sivers](https://sive.rs) dan jika kamu memiliki situs kamu sendiri, harusnya kamu membuat [halaman now](https://nownownow.com) mu juga.
|
||||||
|
|
||||||
|
## Belajar
|
||||||
|
|
||||||
|
- Memperdalam pengetahuan tentang teknologi video
|
||||||
|
- Mempelajari bahasa pemrograman Swift dan kerangka kerja nya (Foundation dan SwiftUI)
|
||||||
|
- Membuat konten video
|
||||||
|
|
||||||
|
## Proyek sampingan
|
||||||
|
|
||||||
|
- Mengembangkan aplikasi iOS untuk [Navidrome](https://navidrome.org)
|
||||||
|
- Mengembangkan aplikasi untuk Beancount/Ledger
|
||||||
|
- Membuat wiki tentang internet
|
||||||
|
|
||||||
|
## Hobi
|
||||||
|
|
||||||
|
- Melakukan arsip terhadap apapun yang saya senangi di internet
|
||||||
|
- Menamatkan buku The Psychology of Money dan Ikigai
|
||||||
|
- Menyelesaikan game Divinity: Original Sin 2
|
||||||
|
|
||||||
|
Kembali ke [[index|beranda]].
|
121
content/pages/uses.md
Normal file
121
content/pages/uses.md
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
---
|
||||||
|
title: /uses
|
||||||
|
tags:
|
||||||
|
- evergreen
|
||||||
|
---
|
||||||
|
|
||||||
|
<!-- ![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2023/06/9555bbe714afd0334d955f7b.jpeg) -->
|
||||||
|
|
||||||
|
> [!info] Disclaimer
|
||||||
|
>
|
||||||
|
> Beberapa tautan dibawah berisi affiliate link di Tokopedia, mungkin saya akan mendapatkan komisi untuk setiap
|
||||||
|
> tautan yang dikunjungi ataupun produk yang dibeli.
|
||||||
|
>
|
||||||
|
> Khusus untuk di bagian Layanan, biasanya kita—saya dan anda—mendapatkan "kredit" tambahan jika mendaftar _dan_ menggunakan
|
||||||
|
> layanan tersebut melalui link referal saya, yang meskipun tidak dapat diuangkan, bagaimanapun itu membantu tagihan saya!
|
||||||
|
|
||||||
|
## Daily drivers
|
||||||
|
|
||||||
|
- [Apple Macbook Air M2 (Midnight, 13-inch)](https://tokopedia.link/g4AXH1huwFb)
|
||||||
|
- [Apple iPhone XS (64 GB)](https://tokopedia.link/35YnyqRNRsb)
|
||||||
|
- [Apple iPad Pro Gen 6 (256 GB, Wi-Fi)](https://tokopedia.link/lw0FL1LVBzb)
|
||||||
|
|
||||||
|
## At my desk
|
||||||
|
|
||||||
|
- [KOORUI 27E1Q 27" 2K FAST-IPS 144Hz](https://tokopedia.link/dIwem0dISzb)
|
||||||
|
- [Roidmi Qukan Wellingtonx Ww1 Kacamata Komputer Anti Blue Light](https://tokopedia.link/sgCCzpnNRsb)
|
||||||
|
- [Nuphy Air 75 Ultra Wireless Mechanical Keyboard (Brown Switch)](https://tokopedia.link/pOOz8nqNRsb)
|
||||||
|
- [Logitech MX Master 3 Wireless Bluetooth Mouse (Graphite)](https://tokopedia.link/BRJ2yAtNRsb)
|
||||||
|
- [Apple Airpods Pro (Gen 2)](https://tokopedia.link/YHnz2JyNRsb)
|
||||||
|
|
||||||
|
## Homelab
|
||||||
|
|
||||||
|
- [Apple Mac Mini M2](https://tokopedia.link/1cWSbnogzHb)
|
||||||
|
- [Intel NUC 7CJYH](https://tokopedia.link/Q8VtQKCgzHb)
|
||||||
|
- [Synology DS224+](https://tokopedia.link/CmyJ0GJgzHb)
|
||||||
|
- [Ubiquiti Edge Router ER-X-SFP](https://tokopedia.link/V4KURrVNRsb)
|
||||||
|
- [TP-Link TL-SG105E Sw](https://tokopedia.link/ISbtLc8NRsb)
|
||||||
|
- [NETGEAR GS308](https://tokopedia.link/DL27N6cgzHb)
|
||||||
|
|
||||||
|
## Studio™
|
||||||
|
|
||||||
|
- [Apple Macbook Air M1 (Rose gold, 13-inch)](https://tokopedia.link/E8NXIp2MRsb)
|
||||||
|
- [Apple Magic Mouse](https://tokopedia.link/N5yS3tpWBzb)
|
||||||
|
- [Apple Magic Keyboard](https://tokopedia.link/ZJiOc5SORsb)
|
||||||
|
- [Avangrade Video Capture Card V114 4K60 fps](https://tokopedia.link/uTa9dPKORsb)
|
||||||
|
- [Razer Seiren Mini](https://tokopedia.link/gUzffnDNRsb)
|
||||||
|
- [Seagate Ultra Touch SSD 500GB](https://tokopedia.link/6AoxRcwORsb)
|
||||||
|
- [Insta360 GO 3 Action Cam](https://tokopedia.link/4yhwsXahzHb)
|
||||||
|
|
||||||
|
## Gaming
|
||||||
|
|
||||||
|
- [Nintendo Switch (Animal Crossing Edition)](https://tokopedia.link/bjc9ifAORsb)
|
||||||
|
- [Steam Deck 256 GB NVMe SSD](https://tokopedia.link/P3qpRIGVBzb)
|
||||||
|
- [8Bitdo Ultimate Controller](https://tokopedia.link/ufW8ZlAWBzb)
|
||||||
|
|
||||||
|
## Misc hardware
|
||||||
|
|
||||||
|
- [Redmi Router AC2100 Gigabit](https://tokopedia.link/vGPo83fORsb)
|
||||||
|
- [GL.Inet GL-MT300N Router Mini (Mango)](https://tokopedia.link/hwsqKP0NRsb)
|
||||||
|
- [TP-Link RE450: AC1750 Wi-Fi Range Extender](https://tokopedia.link/xmR6f54NRsb)
|
||||||
|
- [Apple Homepod Mini (Black)](https://tokopedia.link/M4c9ZSEORsb)
|
||||||
|
- [Apple Pencil 2nd Gen](https://tokopedia.link/UbYgSgvWBzb)
|
||||||
|
- [Yubikey 5 NFC](https://tokopedia.link/7KLOLrrORsb)
|
||||||
|
- [Fujifilm Instax Mini90 Neo 90 Classic](https://tokopedia.link/HDT1TuHORsb)
|
||||||
|
- [Pexio Hervey Kursi Kantor Ergonomis (White)](https://tokopedia.link/7NlG3iVORsb)
|
||||||
|
- [Amazon New Kindle Paperwhite Gen 11th](https://tokopedia.link/Huo2a6FWBzb)
|
||||||
|
|
||||||
|
<!-- ![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2023/07/63208C20-BE4D-4DD2-B68D-7177822EE168.jpeg) -->
|
||||||
|
|
||||||
|
## Software
|
||||||
|
|
||||||
|
What's the point of computers?
|
||||||
|
|
||||||
|
### Development
|
||||||
|
|
||||||
|
- [Kitty](https://sw.kovidgoyal.net/kitty/) (Mac OS, Linux)
|
||||||
|
- [HTTPie](https://httpie.io) (Mac OS)
|
||||||
|
- [Xcode](https://developer.apple.com/xcode/) (Mac OS)
|
||||||
|
- [TablePlus](https://tableplus.com) (Mac OS)
|
||||||
|
- [OrbStack](https://orbstack.dev) (Mac OS)
|
||||||
|
- [Tmux](https://github.com/tmux/tmux) (Mac OS/Linux)
|
||||||
|
- [Neovim](https://neovim.io) (Mac OS/Linux)
|
||||||
|
- [Blink](https://blink.sh) (iPadOS)
|
||||||
|
- [Visual Studio Code](https://code.visualstudio.com) (Mac OS/Linux)
|
||||||
|
|
||||||
|
### Multimedia
|
||||||
|
|
||||||
|
- [OBS Studio](https://obsproject.com) (Mac OS)
|
||||||
|
- [Cleanshot X](https://cleanshot.com) (Mac OS)
|
||||||
|
- [Final Cut Pro for iPad](https://www.apple.com/final-cut-pro-for-ipad/) (iPadOS)
|
||||||
|
|
||||||
|
### Browser
|
||||||
|
|
||||||
|
- [Apple Safari](https://www.apple.com/safari/) (iPadOS/iOS)
|
||||||
|
- [Orion Browser](https://kagi.com/orion/) (Mac OS)
|
||||||
|
- [Mozilla Firefox](https://www.mozilla.org/en-US/firefox/) (Linux)
|
||||||
|
|
||||||
|
### Productivity™
|
||||||
|
|
||||||
|
- [iA Writer](https://ia.net/writer) (Mac OS/iPadOS/iOS)
|
||||||
|
- [Things](https://culturedcode.com/things/) (Mac OS/iPadOS/iOS)
|
||||||
|
- [Raycast](https://www.raycast.com) (Mac OS)
|
||||||
|
|
||||||
|
### Security/Privacy
|
||||||
|
|
||||||
|
- [Bitwarden](https://bitwarden.com) (Mac OS/iPadOS/iOS/Linux)
|
||||||
|
- [Tailscale](https://tailscale.com) (Mac OS/iPadOS/iOS/Linux)
|
||||||
|
- [Transmission](https://transmissionbt.com) (Mac OS/Linux)
|
||||||
|
- [TripMode](https://tripmode.ch) (Mac OS)
|
||||||
|
- [Secretive](https://github.com/maxgoedjen/secretive) (Mac OS)
|
||||||
|
|
||||||
|
## Services
|
||||||
|
|
||||||
|
- [Bunny](https://bunny.net?ref=2jpxrtyw72) (DNS & CDN)
|
||||||
|
- [Linode](https://www.linode.com/lp/refer/?r=6429dc6e97eda216fcd4a685a62bffd510245711) (Public server)
|
||||||
|
- [Cloudflare](https://www.cloudflare.com) (Private tunnel)
|
||||||
|
- [Migadu](https://www.migadu.com) (Incoming email)
|
||||||
|
- [Mailgun](https://www.mailgun.com) (Outgoing email)
|
||||||
|
- [Namecheap](https://www.namecheap.com) (Domain registrar)
|
||||||
|
|
||||||
|
Kembali ke [[index|beranda]].
|
91
content/paradoks-konsistensi-dan-kabut-pelangi.md
Normal file
91
content/paradoks-konsistensi-dan-kabut-pelangi.md
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
---
|
||||||
|
title: Paradoks konsistensi dan kabut pelangi
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: paradoks-konsistensi-dan-kabut-pelangi
|
||||||
|
date: 2023-10-02T15:09:30.000Z
|
||||||
|
date_updated: 2023-10-02T15:09:30.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Bagaimana jika seseorang dapat kembali ke masa lalu, kemudian membunuh kakeknya di masa kecilnya, sehingga orang tua dan bahkan dirinya tidak pernah dilahirkan?
|
||||||
|
|
||||||
|
Paradoks konsistensi terjadi ketika masa lalu diubah dengan cara apapun sehingga menciptakan kontradiksi. Paradoks ini terjadi setiap kali mengubah masa lalu adalah sebuah kemungkinan.
|
||||||
|
|
||||||
|
Pada dasarnya waktu itu relatif. Coba tanyakan jam berapa sekarang ke teman anda yang berada diluar benua Asia, misalnya. Satu-satunya fakta terhadap waktu ini adalah, bagaimanapun, waktu selalu berjalan maju. Yang berarti, perjalanan "ke masa lalu" dapat diyakini tidak memungkinkan.
|
||||||
|
|
||||||
|
Salah satu paradoks lainnya adalah paradoks kembar, yang mana seorang dari dua orang saudara kembar melakukan perjalanan dengan roket kecepatan tinggi dan kemudian kembali lagi ke bumi dan menemukan bahwa saudara kembarnya yang tetap di bumi lebih tua dari dirinya sendiri. Paradoks ini lebih rumit dari yang sebelumnya, namun eksperimen tersebut benar-benar terjadi.
|
||||||
|
|
||||||
|
Gue pribadi cukup tertarik dengan 'konsep waktu' meskipun sampai hari ini belum tertarik membaca buku 'A Brief History of Time' nya lord hawking. Tidak ada alasan khusus apalagi ilmiah atas ketertarikan gue dengan konsep waktu, murni karena rasa penasaran.
|
||||||
|
|
||||||
|
Akhir-akhir ini gue sedang menonton kembali series One Piece dari episode paling awal. Salah satu episode (atau lebih relevannya "arc") nya berjudul "Rainbow Mist" alias kabut pelangi. Meskipun arc tersebut adalah "filler", gue selalu tertarik dengan yang berkaitan dengan paradoks temporal apapun film nya.
|
||||||
|
|
||||||
|
Di arc tersebut, singkatnya seseorang (profesor) ingin menyelamatkan teman-temannya yang menghilang di kabut pelangi. Setelah 50 tahun lamanya, kapal yang digunakan oleh teman-temannya tersebut muncul kembali ke "permukaan" yang keluar dari kabut pelangi.
|
||||||
|
|
||||||
|
Saat tim topi jerami dan si profesor masuk ke kabut pelangi, mereka akhirnya menemukan teman-teman si profesor, namun di umur yang sama saat ketika mereka masuk dan menghilang ke kabut pelangi. Alias, umur si teman-teman profesor ini 50 tahun lebih muda dari si profesor.
|
||||||
|
|
||||||
|
Singkat cerita, tim topi jerami dan si profesor berhasil mengeluarkan mereka dari sana. Dan bagian yang menariknya: teman-teman nya yang tadi diselamatkan, bertemu kembali dengan tim topi jerami dan si profesor diluar kabut pelangi, dan sekarang berumur sama dengan si profesor.
|
||||||
|
|
||||||
|
Saat menonton episode tersebut, gue tersadar dengan paradoks konsistensi alias paradoks kakek di episode ini. Yang gampangnya, jika tim topi jerami dan si profesor tidak pernah atau tidak berhasil menyelamatkan teman-temannya di kabut pelangi, mereka tidak akan pernah saling bertemu di "luar" kabut pelangi. Dan mungkin, Luffy tidak akan pernah terlahir bila dia terbunuh di kabut pelangi tersebut.
|
||||||
|
|
||||||
|
Untuk mempermudah gambarannya, mari kita ilustrasikan. Karena waktu itu relatif, tidak jarang kita perlu menegaskan "berdasarkan perspektif siapa" dan dalam kasus ini, ada 2 perspektif:
|
||||||
|
|
||||||
|
1. Waktu dalam perspektif di luar kabut pelangi (default)
|
||||||
|
2. Waktu dalam perspektif di dalam kabut pelangi
|
||||||
|
|
||||||
|
Berarti, ada 2 "garis waktu" yang bisa kita buat.
|
||||||
|
|
||||||
|
Mari kita buat umur si profesor dan teman-temannya sebagai penghitungnya yang anggap di garis waktu pertama berumur 70. Karena si profesor di umur 70 bertemu dengan teman-temannya di umur (anggap) 10 didalam kabut pelangi, bisa diasumsikan si profesor melakukan "perjalanan waktu" ke masa lalu seperti ini:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2023/10/CleanShot-2023-10-03-at-03.34.45.png)
|
||||||
|
Tapi kembali ke masa lalu adalah hal yang tidak memungkinkan, terlebih, bagaimana menjelaskan ketika si "man teman" di garis waktu "luar kabut" memiliki umur yang sama dengan si profesor?
|
||||||
|
|
||||||
|
Gambaran yang lebih relevan yang menurut gue adalah seperti ini:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2023/10/CleanShot-2023-10-03-at-03.36.11.png)
|
||||||
|
Alias, anggap pada tahun 1970 umur si profesor adalah 70. Gampangnya, 1970 di luar kabut adalah 1920 di dalam kabut. Alias, anggap 1 detik di dalam kabut sama dengan 1 tahun di luar kabut, misalnya.
|
||||||
|
|
||||||
|
Mungkin akan lebih mudah jika menggambarkan nya seperti ini:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2023/10/CleanShot-2023-10-03-at-03.43.17.png)
|
||||||
|
Bagian yang membingungkannya adalah, ketika tim topi jerami dan profesor berhasil menyelamatkan teman-teman nya, umur mereka ketika keluar dari kabut tersebut adalah... 5 — berarti seperti ini?
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2023/10/CleanShot-2023-10-03-at-03.46.39.png)
|
||||||
|
Asumsinya, tim topi jerami dan si profesor datang dari "masa depan" untuk menyelamatkan teman-temannya di "masa lalu", tapi itu kurang relevan, karena, sekali lagi, perjalanan waktu ke masa lalu adalah hal yang tidak memungkinkan.
|
||||||
|
|
||||||
|
Tapi ini kuncinya: siapapun yang masuk ke dalam kabut pada waktu tertentu, maka akan keluar dari kabut tersebut di waktu yang sama.
|
||||||
|
|
||||||
|
Berarti, waktu di dalam kabut tidak berjalan.
|
||||||
|
|
||||||
|
Saat si teman-temannya masuk ke kabut pada tahun 1910 misalnya, maka dia akan keluar di tahun 1910 juga. Begitupula dengan tim topi jerami dan si profesor yang misalnya masuk ke kabut pada tahun 1970, maka dia akan keluar dari kabut di tahun 1970 juga.
|
||||||
|
|
||||||
|
Kesimpulannya: Saat teman-teman si profesor diselamatkan (keluar dari kabut pelangi) oleh tim bajak laut topi jerami, mereka bertekad untuk menjadi marinir. Mereka bisa saja move on lalu melanjutkan hidup, tapi demi romantisme dari sebuah cerita, mereka ingin bertemu dengan si tim topi jerami untuk berterima kasih.
|
||||||
|
|
||||||
|
50 tahun kemudian, mereka dipertemukan di sebuah pulau tempat kabut pelangi tersebut muncul. Dalam perjalanannya, salah satu teman bilang "sesuai sejarah" karena memang begitu sejarahnya: di tahun 1970, tim topi jerami pergi ke sebuah pulau lalu masuk ke kabut pelangi dan entah bagaimana ingin membantu si profesor menyelamatkan teman-temannya yang terjebak disana.
|
||||||
|
|
||||||
|
Bagaimana jika tim topi jerami tidak pergi ke pulau tersebut? Atau tidak masuk ke kabut pelangi? Atau mati di dalam kabut pelangi? Jawabannya adalah: nyatanya, mereka pergi pulau tersebut, masuk ke kabut pelangi, dan tidak mati di dalamnya.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Jenis paradoks konsistensi lainnya adalah lingkaran kausal, yang gampangnya, peristiwa masa depan adalah penyebab peristiwa masa lalu, yang pada gilirannya adalah merupakan penyebab peristiwa masa depan.
|
||||||
|
|
||||||
|
Contoh gampangnya, misal dalam mendapatkan kebahagiaan: Karena kita bahagia, kita ingin membuat orang lain bahagia juga. Lalu karena orang lain bahagia karena kita, itu membuat kita bahagia. Peristiwa dua tidak terjadi bila peristiwa satu tidak terjadi, peristiwa satu tidak terjadi bila peristiwa tiga tidak terjadi. Peristiwa tiga tidak terjadi, bila peristiwa dua tidak terjadi.
|
||||||
|
|
||||||
|
Apa yang bisa diambil dari semua cerita ini? Tidak ada.
|
||||||
|
|
||||||
|
Tapi yang pasti, kembali ke masa lalu adalah hal yang tidak memungkinkan.
|
||||||
|
|
||||||
|
Kadang gue memikirkan untuk beberapa hal-hal yang gue sesalkan: bagaimana jika gue tidak melakukan A? Bagaimana jika gue melakukan B? Tapi pada akhirnya, itulah keputusan yang gue ambil.
|
||||||
|
|
||||||
|
Saat kita membanting cermin, tentu kita tahu dan sadar bahwa cermin tersebut akan pecah dan tidak akan pernah kembali ke bentuk awalnya. Namun ada yang lebih penting: apa yang kita harapkan saat membanting cermin selain hanya akan memecahkan kacanya?
|
||||||
|
|
||||||
|
Sebagai penutup, sudah berapa keputusan yang anda buat pada hari ini? Mengakses blog ini, satu keputusan. Membaca tulisan ini, menjadi dua. Membacanya sampai paragraf ini, sekarang tiga.
|
||||||
|
|
||||||
|
Kepikiran sekarang sudah jam berapa? Selamat, sekarang menjadi empat.
|
||||||
|
|
||||||
|
Lihat, berapa persen baterai hp/laptop mu? Sekarang menjadi lima. Tidak terkecoh untuk melihat persentase baterai? Tetap terhitung menjadi lima.
|
||||||
|
|
||||||
|
Jika kita membuat keputusan setiap detik, berarti kita membuat 86,400 keputusan setiap harinya. Jika dikurang 8 jam untuk tidur, setidaknya ada 57,600 keputusan yang akan kita buat setiap harinya di saat sadar.
|
||||||
|
|
||||||
|
Yang berarti, ada puluhan ribu kesempatan untuk mensyukuri keputusan yang dibuat setiap harinya. Atau menyesalinya, your choice.
|
||||||
|
|
||||||
|
Bagaimanapun, terlepas dari sebab dari akibat dan akibat dari sebab, menyesali keputusan yang dibuat seperti mengharapkan kaca tidak pecah saat membantingnya dengan keras.
|
||||||
|
|
||||||
|
Katanya, hidup adalah tentang belajar; jatuh, bangkit, belajar.
|
||||||
|
|
||||||
|
Tapi bagaimana jika hidup adalah tentang berbaring di padang rumput sambil memandangi bintang-bintang yang tak tertutup oleh polusi cahaya? Ditemani hembusan angin yang datang dan pergi, tanpa memikirkan apakah besok harus meyakinkan diri jika semuanya baik-baik saja?
|
145
content/pembaruan-terkait-edgydns.md
Normal file
145
content/pembaruan-terkait-edgydns.md
Normal file
@ -0,0 +1,145 @@
|
|||||||
|
---
|
||||||
|
title: Pembaruan terkait edgyDNS
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: pembaruan-terkait-edgydns
|
||||||
|
date: 2022-09-05T11:45:15.000Z
|
||||||
|
date_updated: 2022-09-05T11:46:19.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Ini seharusnya pembaruan yang kedua, tapi karena yang pertama entah kemana (yang di domain faultable.dev), jadi setidaknya gue bisa takeover ini slug.
|
||||||
|
|
||||||
|
Sudah sekitar setahun lebih menjalankan [edgyDNS](https://edgy-dns.com) sejak 20 Juni 2021 kemarin. Hasilnya? Biasa saja lol. edgyDNS adalah salah satu infrastruktur terpenting di jaringan rumah gue karena jika doi down, maka internet di rumah gue dianggap down karena gue tidak belum membuat failover nya.
|
||||||
|
|
||||||
|
Pembaruan disini cukup singkat dan lebih ke teknis. Dari sisi pengguna tidak ada yang berubah kecuali latensi yang lebih kecil lagi!
|
||||||
|
|
||||||
|
## Penyedia Cloud
|
||||||
|
|
||||||
|
Sebelumnya edgyDNS berjalan di infrastrukturnya IDCloudHost, namun sayang harus berpindah karena gue kurang puas dengan throughput nya. Untuk menjalankan `shred(1)` yang biasa gue lakukan untuk update Traefik aja kadang lambat banget, sekitar 3 menit jika gue kira-kira.
|
||||||
|
|
||||||
|
Jika melihat ke panel metriks Disk I/O, tertulis 95 MB/s dan bila melakukan microbenchmark dengan `dd(1)`, literally menunggu sampai selamanya, ga muncul keluaran apa-apa setelah menuggu sampai 20 menit.
|
||||||
|
|
||||||
|
Dari segi jaringan, gue tidak menemukan referensi seberapa besar IDCloudHost menjanjikan network bandwidth. Namun jika melakukan Speedtest, gue mendapatkan:
|
||||||
|
|
||||||
|
- Download: ~41 MiB/s (346 Mbps)
|
||||||
|
- Upload: ~36 MiB/s (309 Mbps)
|
||||||
|
|
||||||
|
Yang anyhow setara dengan skala internet residen?
|
||||||
|
|
||||||
|
Alternatifnya gue pindah ke Amazon Web Services dengan region ap-southeast-3 (Jakarta). Meskipun belum menjadi first-class region di Asia, tapi throughput nya cukup oke. Dengan spek yang sama (2 vCPU), gue dijanjikan 61 MiB/s sebagai baseline sampai 5 GiB/s sebagai burst nya.
|
||||||
|
|
||||||
|
Jika melakukan Speedtest, berikut yang gue dapatkan:
|
||||||
|
|
||||||
|
- Download: ~377 MiB/s (3165 Mbps)
|
||||||
|
- Upload: ~292 MiB/s (2450 Mbps)
|
||||||
|
|
||||||
|
Better daripada skala internet rumahan hahaha.
|
||||||
|
|
||||||
|
Throughput jaringan (dan Disk I/O) selalu bergantung dengan jumlah CPU, jika melihat dari metriks Disk I/O di dasbor AWS, gue tidak menemukan apa-apa, dan bila melakukan microbenchmark via `dd(1)`, berikut yang gue dapat:
|
||||||
|
|
||||||
|
- Write: 35.1 MB/s (LOL)
|
||||||
|
- Read: 338 kB/s (LOLLLL)
|
||||||
|
|
||||||
|
Dan ini cukup "oke" untuk gue mengingat instance yang gue gunakan adalah `t3.micro` (free tier gang).
|
||||||
|
|
||||||
|
...dan setidaknya command `dd(1)` kagak berjalan selamanya! (30 mins and still counting).
|
||||||
|
|
||||||
|
Update: Perintah `dd(1)` di IDCloudHost sudah keluar outputnya setelah sekitar 32 menit! Berikut yang gue dapat (sekitar 38 menitan sama nungguin Read):
|
||||||
|
|
||||||
|
- Write: 636 kB/s
|
||||||
|
- Read: 4.4 kB/s
|
||||||
|
|
||||||
|
Dan ini perbandingan dengan laptop ringan gue dengan 8 CPU :)
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/09/CleanShot-2022-09-05-at-23.54.59@2x.png)
|
||||||
|
Dan gue di IDCloudHost dan AWS sama-sama menggunakan SSD yang berbasis NVMe.
|
||||||
|
|
||||||
|
## "Neutral" DNS
|
||||||
|
|
||||||
|
Jika somehow membutuhkan upstream DNS resolver yang murni hanya untuk me-resolve DNS query dan lo somehow mempercayakan ke gue sebagai penyedia, sekarang lo bisa menggunakan `pure.edgy-dns.com` yang hanya tersedia sebagai DoH (DNS Over HTTPS) untuk sekarang.
|
||||||
|
|
||||||
|
Kasus penggunaannya adalah misal lo menjalankan Pi-Hole atau AdGuard Home atau Blocky sendiri di jaringan lo, dan lo membutuhkan *salah satu* upstream DNS resolver.
|
||||||
|
|
||||||
|
Alternatif dari DNS resolver yang gue sediakan yang biasa gue rekomendasikan adalah [Quad9](https://quad9.net/) dan [1.1.1.1](https://1.1.1.1/dns/) nya Cloudflare. Lo bisa gunakan sebanyak mungkin upstream DNS yang digunakan, dan rekomendasi gue menggunakan algoritma something like "query ke semua upstream satu-per-satu, urutkan berdasarkan RTT (Round-trip time), dan prioritaskan yang paling stabil dan rendah RTT nya".
|
||||||
|
|
||||||
|
Biasanya algoritma lain yang digunakan adalah mengambil yang latensinya paling rendah berdasarkan alamat IP dan menggunakan round-robin.
|
||||||
|
|
||||||
|
Gue personally tidak menggunakan Neutral DNS ini, tapi, yaa nice to have lah ;)
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/09/CleanShot-2022-09-06-at-00.27.23@2x.png)
|
||||||
|
Tangkapan layar diatas adalah contoh yang masuk ke daftar "situs berita palsu", dan terlihat bahwa yang "Neutral DNS" dan Cloudflare meresolve domain tersebut sedangkan yang non-netral memblokirnya.
|
||||||
|
|
||||||
|
Untuk mengetahui apakah lo berhasil menggunakan "Neutral DNS" lo bisa coba resolve `coba.pure`. Jika jawabannya `0.0.0.0`, berarti lo sudah berhasil tersambung ke Neutral DNS nya edgyDNS! Umumnya jika menggunakan yang non-neutral menggunakan `coba.dong` yang akan dijawab dengan `10.6.6.6` untuk pengujiannya.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/09/CleanShot-2022-09-06-at-01.07.51@2x.png)
|
||||||
|
Technically ini valid (masih netral) karena `coba.pure` adalah bogus domain.
|
||||||
|
|
||||||
|
## "Clean" DNS
|
||||||
|
|
||||||
|
By default, edgyDNS memblokir query ke:
|
||||||
|
|
||||||
|
- Jaringan iklan
|
||||||
|
- Jaringan pelacak
|
||||||
|
- Situs judi
|
||||||
|
- Situs scam
|
||||||
|
- Situs berita palsu
|
||||||
|
- OS telemetry
|
||||||
|
- Malware (dan malvertising)
|
||||||
|
- Spyware
|
||||||
|
- Ransomware
|
||||||
|
- Cryptojacking
|
||||||
|
|
||||||
|
Yang berdasarkan "kurasi" gue sebagai penyedia.
|
||||||
|
|
||||||
|
Jika terdapat kasus dimana lo tidak ingin fully mengikuti daftar saringan gue, misal, lo memperbolehkan Microsoft mengumpulkan data Windows lo (karena jika tidak melakukan itu, Windows lo berjalan aneh), sekarang lo bisa menggunakan `clean.edgy-dns.com`.
|
||||||
|
|
||||||
|
Pada dasarnya Clean DNS ini melakukan filtering juga, namun hanya untuk Malware dan Ransomware, yang, still, berdasarkan kurasi gue juga (yang bisa di cek di [GitHub](https://github.com/evilfactorylabs/gatekeeper), belum gue update per gue merilis tulisan ini).
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/09/CleanShot-2022-09-06-at-00.38.57@2x.png)
|
||||||
|
Tangkapan layar diatas adalah contoh yang masuk ke daftar "situs malware", dan terlihat bahwa yang "Neutral DNS" meresolve domain tersebut sedangkan yang non-netral dan yang default memblokirnya.
|
||||||
|
|
||||||
|
Jika menggunakan Safari, ada peringatan seperti ini jika mencoba mengakses situs tersebut:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/09/CleanShot-2022-09-06-at-00.40.25@2x.png)
|
||||||
|
Begitupula dengan di Google Chrome:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/09/CleanShot-2022-09-06-at-00.41.04@2x.png)
|
||||||
|
Jadi, seems to work, right?
|
||||||
|
|
||||||
|
Karena di Clean DNS (dan yang Neutral, tentu saja) ini tidak memblokir iklan, jadi, query ke Google Analytics akan diresolve dan komputer lo akan berkomunikasi dengan layanan tersebut!
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/09/CleanShot-2022-09-06-at-00.43.31@2x.png)
|
||||||
|
Clean DNS ini gue rasa cocok untuk yang ingin menggunakan Neutral DNS tapi masih ingin blokir situs Malware dan Ransomware.
|
||||||
|
|
||||||
|
Untuk mengetahui apakah lo berhasil menggunakan "Clean DNS" lo bisa coba resolve `coba.clean`. Jika jawabannya `0.0.0.0`, berarti lo sudah berhasil tersambung ke Clean DNS nya edgyDNS! Umumnya jika menggunakan yang non-neutral menggunakan `coba.dong` yang akan dijawab dengan `10.6.6.6` untuk pengujiannya.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/09/CleanShot-2022-09-06-at-01.10.02@2x.png)
|
||||||
|
Dan of course, gue personally tidak menggunakan Clean DNS ini, tapi, sekali lagi, nice to have lah ;)
|
||||||
|
|
||||||
|
## Update OS
|
||||||
|
|
||||||
|
Sebelumnya edgyDNS ditenagai oleh Ubuntu dan sekarang menggunakan [Amazon Linux 2](https://aws.amazon.com/amazon-linux-2/). Tidak ada perubahan yang signifikan, hanya, setidaknya gue bisa mengaktifkan [SELinux](https://selinuxproject.org/page/Main_Page) disini.
|
||||||
|
|
||||||
|
Pengaturan masih sama: tidak ada log yang ditulis ke disk. Everything goes to `/dev/null`.
|
||||||
|
|
||||||
|
Gue tertarik untuk menjalankan OS nya di ramdisk, dan di inisiasi melalui [`cloud-init`](https://cloudinit.readthedocs.io/en/latest/). Tapi hanya sekadar tertarik aja, dan terkadang tidak semua yang menarik harus dicoba, bukan?
|
||||||
|
|
||||||
|
## Substack
|
||||||
|
|
||||||
|
Gue tidak lupa klo memiliki [newsletter](https://edgy.substack.com) terkait edgyDNS ini, hanya, belum ada konten dan ide baru aja yang mau dibagikan. Rencana mau pakai fitur custom domain nya Substack, tapi, ya, rencana hanyalah rencana (let's see) dan yang paling penting adalah kontennya, bukan?
|
||||||
|
|
||||||
|
## Penutup
|
||||||
|
|
||||||
|
Mungkin ada yang bertanya, "ngapain sih riz lu jalanin DNS resolver sendiri?", selain jawabannya karena dogfooding, juga karena sebuah misi lol.
|
||||||
|
|
||||||
|
Disamping itu, karena gue fun melakukannya.
|
||||||
|
|
||||||
|
Berkat menjalankan DNS resolver sendiri dan menawarkannya ke publik ini gue ada belajar sedikit-sedikit low-level nya DNS dari segi performa; keamanan dsb, bahkan sampai ada security researcher yang japri gue karena edgyDNS ada privacy concerns (sekarang udah ga relevan) yang berkaitan dengan tesis dia tentang [EDNS(0) padding](https://edns0-padding.org/).
|
||||||
|
|
||||||
|
Untuk statistik siapa saja pengguna edgyDNS dan sudah berapa total query yang diresolve adalah:
|
||||||
|
|
||||||
|
- MAU (monthly active users): -
|
||||||
|
- QPM (queries per month): -
|
||||||
|
|
||||||
|
Yes, karena tidak ada log yang ditulis, sekalipun itu "anonymized", "privacy-respecting blabla", "technical-only" whatsoever.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/09/CleanShot-2022-09-06-at-01.33.50@2x.png)
|
||||||
|
Kalau cek log local di raspberry gue untuk 9 hari yang lalu dari tulisan ini dibuat ada sekitar 149,157 ya untuk di jaringan rumah gue. Tapi gue tidak memusingkannya juga.
|
||||||
|
|
||||||
|
Sebagai penutup, silahkan gunakan edgyDNS dan pilih yang sesuai dengan kebutuhan lo!
|
||||||
|
|
||||||
|
Sejauh ini gue tidak ada masalah menggunakan edgyDNS di jaringan rumah gue sebagai upstream, mungkin di next nya gue akan membuat failover thing pakai Multi Zone (yang sekalian bisa gue pakai eksperimen lagi buat [ODoH](https://edgy.substack.com/p/odoh-is-here)).
|
||||||
|
|
||||||
|
Terakhir, enjoy a cleaner, private and secure internet!
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/09/CleanShot-2022-09-06-at-01.44.08@2x.png)
|
78
content/pengunjung-lama.md
Normal file
78
content/pengunjung-lama.md
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
---
|
||||||
|
title: Pengunjung lama?
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
date: 2023-12-31T13:37:00.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Sebelumnya, terima kasih telah menjadi pengunjung tetap situs kecil saya ini. Saya benar-benar serius. Tahun 2023 ada 5.63k akses unik (15/hari) ke situs
|
||||||
|
ini menurut Umami, tidak termasuk pengunjung yang menggunakan ad blocker di perangkat/perambannya. Tentu saja saya butuh pembaca (tidak sebatas pengunjung) untuk
|
||||||
|
situs ini, karena jika tidak, saya tidak akan menerbitkannya ke internet anyway :))
|
||||||
|
|
||||||
|
Situs ini (rizaldy.club) sebelumnya memiliki tagline "Thought, stories, and very ideas" alias tagline bawaan dari [Ghost](https://ghost.org) dan saya hanya menambahkan
|
||||||
|
kata "very" sebelum "ideas" agar terlihat sedikit berbeda. Isi tulisannya beragam, namun bagaimanapun masih relevan dengan tagline tersebut.
|
||||||
|
|
||||||
|
Tulisan-tulisan yang ada diurutkan berdasarkan waktu diterbitkan, yang kemungkinan, berbanding lurus dengan waktu kejadian. Jika pada 02 Oktober 2069 saya menerbitkan
|
||||||
|
tulisan apapun itu tentang planet mars, kemungkinan pada hari itu (atau kemarinnya jika lewat jam 12 am) saya sedang di planet mars.
|
||||||
|
|
||||||
|
Saya tidak keberatan membagikan beberapa yang ada di pikiran saya ke internet, meskipun tidak jarang menyinggung privasi saya ataupun orang lain secara tidak langsung. Saya
|
||||||
|
menganggap seperti saya sedang berbicara kepada sesuatu, dan orang lain kebetulan mendengarkan pembicaraan tersebut. Perihal penting-tidak-penting kembali ke si pembaca/pendengar
|
||||||
|
itu sendiri, namun yang jelas, pasti ada alasan khusus mengapa saya membagikannya.
|
||||||
|
|
||||||
|
Membagikan ketertarikan saya adalah salah satu alasan utama saya menggunakan internet, dan mungkin, hanya mungkin, "jurnal" tidak menjadi bagian tersebut. Tapi menulis jurnal
|
||||||
|
relatif lebih mudah dari yang lain, dan saya belum terbiasa menulis khususnya terkait tulisan yang tidak singkat. Menulis jurnal menjadi batu loncatan saya dalam latihan menulis,
|
||||||
|
dan membagikannya ke internet membantu saya untuk mendapatkan umpan balik dari pembaca.
|
||||||
|
|
||||||
|
Sejauh ini belum mendapatkan umpan balik buruk dari pembaca, entah karena takut atau karena terlalu buruk untuk bahkan dibahas. Entahlah. Beberapa ada yang menyukai dengan
|
||||||
|
gaya tulisan saya, atau nadanya, atau keterbukaannya. Tapi belum ada yang menyukai saya apa adanya. Just kidding, lanjut.
|
||||||
|
|
||||||
|
31 Desember 2023 mungkin menjadi hari terakhir saya membagikan jurnal ke internet. Mari sederhanakan: Hal-hal yang berkaitan secara kronologis. Tentu saya masih tertarik menulis
|
||||||
|
fiksi dan non-fiksi, membagikan kisah cinta saya yang payah ataupun kisah karir saya yang beruntung, hanya, saya merasa memiliki waktu yang lebih sedikit untuk melakukan itu
|
||||||
|
daripada sebelum-sebelumnya. Cara saya menulis adalah "menerbitkan tulisan yang tidak bisa [dikoreksi orang lain](https://xkcd.com/386/)" alias bila saya membahas atau beropini tentang DNS, akan saya cari semua referensinya sekalipun harus ke Ohara. Tentu itu memakan waktu, dan terkadang tidak sedikit. Rasa kesenangan ketika menulis/mengetik masih dan
|
||||||
|
pasti terasa, hanya saja, waktu yang dihabiskan tidak sepadan, di hari ini.
|
||||||
|
|
||||||
|
Mungkin ini tentang prioritas. Jika merujuk ke realita hari ini, ada hal lebih penting yang harus diketik meskipun sama-sama di vim. Ada aktivitas lain yang harus dilakukan
|
||||||
|
selain didepan layar komputer. Ada, uh, entah kesibukan ini adalah sebuah anugerah atau kutukan?
|
||||||
|
|
||||||
|
Bagaimanapun, saya senang memiliki pengunjung tetap dan bahkan sampai berteman dengan mereka di dunia maya dan fisik. Bukan karena "suara" saya ada yang mendengar,
|
||||||
|
tapi karena ada yang [men-trakteer](https://trakteer.id/fariz). Just kidding, unless?
|
||||||
|
|
||||||
|
Seperti, senang saja saat kita membiarkan siapapun berkunjung dan ada yang datang bertamu.
|
||||||
|
|
||||||
|
## Kesimpulan
|
||||||
|
|
||||||
|
Tidak ada tulisan/catatan yang diperbarui dan diurutkan berdasarkan waktu. Tapi saya memberikan "kategori khusus" untuk memberitahu warga internet jika saya masih hidup, ada di bagian
|
||||||
|
/var/log/public disamping. Anggap itu seperti rangkuman tentang apa yang terjadi pada waktu tersebut.
|
||||||
|
|
||||||
|
> "Kak, mana bagian 'kehidupan' nya, nih? Kok sepertinya teknis semua?"
|
||||||
|
>
|
||||||
|
> — nobody
|
||||||
|
|
||||||
|
Entah karena saya se-"nerd" itu atau karena mungkin itulah bagian asli dari kehidupan saya. Salah tiga hal yang saya gunakan sehari-hari selain hal-hal yang berkaitan dengan IT adalah:
|
||||||
|
|
||||||
|
- Kasur untuk tidur
|
||||||
|
- Kursi untuk duduk
|
||||||
|
- Motor untuk beli kopi
|
||||||
|
|
||||||
|
Sisanya, damn, menyalakan AC saja harus "Siri, ..." atau buka aplikasi saat Siri sedang asik dengan dunianya sendiri. Oke-oke, ada hal lain seperti kulkas; meja, botol minum, tas, helm, pakaian, kran air, sajadah, pancuran, piring, sendok, korek, but anyway.
|
||||||
|
|
||||||
|
## Daftar anggota
|
||||||
|
|
||||||
|
Di blog saya sebelumnya yang menggunakan Ghost, dan ada beberapa pembaca tetap saya yang "berlangganan" dan mendaftar sebagai "anggota" dengan salah satu benefit nya mendapatkan tulisan baru melalui email. Alias, saya harus menyimpan data alamat email mereka, dengan aman.
|
||||||
|
|
||||||
|
Sebagai informasi: data tersebut sudah saya hapus. Bahkan, keseluruhan database (menggunakan SQLite) dengan backup-backup nya. Saya hapus dengan `shred(1)` dan bukan `rm(1)` karena why not, siapa peduli disimpan di random access memory? Saya hanya mem-backup tulisan-tulisan (ke format markdown) dan gambar yang saya unggah saja, dan hanya itu. Selainnya, saya hapus dari sejarah.
|
||||||
|
|
||||||
|
Goodbye my poor db.sqlite3.
|
||||||
|
|
||||||
|
## Nada dan suara
|
||||||
|
|
||||||
|
Mungkin ada yang sadar bila saya lebih sering menggunakan "saya" sebagai kata ganti daripada sebelumnya yang lebih sering menggunakan "gue". Apa alasannya? Entahlah, yang pasti bukan
|
||||||
|
karena umur. Harusnya. Mungkin karena hari ini lebih sering menggunakan "saya" di keseharian daripada "gue"?
|
||||||
|
|
||||||
|
Gaya tulisan mungkin masih sama: fuck 8 paragraf lebih, gunakan titik koma dan tanda kutip semau saya, plus, sisipkan sesekali jokes garing/cringe biar si pembaca inget nafas (sekarang silahkan nafas manual, you're welcome). Sejauh ini belum menemukan kata pengganti "lo" yang tepat selain "anda", mungkin "sampean", "ente", "kowe" bisa menjadi kandidat?
|
||||||
|
|
||||||
|
## Penutup
|
||||||
|
|
||||||
|
Nanti kita cerita (lagi) tentang hari ini. Disini atau di ~~kamarmu~~ tempat kopi. Di kehidupan sekarang atau di kehidupan selanjutnya.
|
||||||
|
|
||||||
|
Sampai jumpa lagi kapan-kapan.
|
296
content/platform video.md
Normal file
296
content/platform video.md
Normal file
@ -0,0 +1,296 @@
|
|||||||
|
---
|
||||||
|
title: Platform video
|
||||||
|
tags:
|
||||||
|
- evergreen
|
||||||
|
---
|
||||||
|
Seberapa sulit "memainkan video" di internet? Well:
|
||||||
|
|
||||||
|
- Container format: .mkv, .mp4, .mov, .ts, .3gp (ehm), .webm
|
||||||
|
- Coding format: h.265 (HEVC), h.264 (AVC), vp9, av1
|
||||||
|
- Playback: HTTP Live Streaming (HLS), Adaptive Bitrate Streaming (DASH?), Pseudo-streaming (mp4, webm)
|
||||||
|
|
||||||
|
Let's say ingin memainkan video 5 Centimeters Per Second (2007) dengan spesifikasi:
|
||||||
|
|
||||||
|
- Ukuran: 1.68 GB
|
||||||
|
- Resolusi: 1440p (2560x1440, 2K)
|
||||||
|
- Framerate: 60fps
|
||||||
|
- Container: mkv
|
||||||
|
|
||||||
|
Kasarnya, untuk mengunduh 1.68 GB, dengan kecepatan internet 100 Mbps (12.5 MB/s) saja perlu waktu 135 detik (2m 15s) saat penonton menekan tombol klik. Tapi peramban tidak mengerti mkv, dan umumnya video player yang digunakan menggunakan pendekatan pseudo-streaming alias progressive download.
|
||||||
|
|
||||||
|
Transcoding diperlukan untuk:
|
||||||
|
|
||||||
|
- Mengubah container mkv menjadi ke something yang dimengerti peramban (let's say mp4)
|
||||||
|
- Apa resolusi yang diinginkan (atau ideal) untuk penonton?
|
||||||
|
|
||||||
|
Untuk video 1440p@60 idealnya membutuhkan koneksi 24 Mbps (atau 66-85 Mbps untuk HDR), kasarnya, ukuran file per detiknya bisa dikatakan <= 3 MB. Jika penonton tidak memiliki bandwidth 24 Mbps, kemungkinan harus dilakukan downscaling yang anggap menjadi 1080p (FHD) atau 720p (HD).
|
||||||
|
|
||||||
|
Transcoding membutuhkan biaya, tentunya "the bigger the better". Beberapa platform mendukung "Hardware accelerated video encoding" alias HVA yang mana proses transcoding dilakukan di GPU sehingga CPU tidak terlalu sibuk seperti tetap bisa men-deliver video ke penonton dengan tenang.
|
||||||
|
|
||||||
|
Tergantung platform yang digunakan, sejauh ini ada 4 cara yang bisa digunakan khususnya di OS berbasis GNU/Linux (come on, what else?):
|
||||||
|
|
||||||
|
- [Video Acceleration API](https://en.wikipedia.org/wiki/Video_Acceleration_API "wikipedia:Video Acceleration API") (VAAPI)
|
||||||
|
- [Video Decode and Presentation API for Unix](https://en.wikipedia.org/wiki/VDPAU "wikipedia:VDPAU") (VDPAU)
|
||||||
|
- [Advanced Media Framework](https://gpuopen.com/advanced-media-framework/) (AMF)
|
||||||
|
- [NVDEC](https://en.wikipedia.org/wiki/Nvidia_NVDEC "wikipedia:Nvidia NVDEC")/[NVENC](https://en.wikipedia.org/wiki/Nvidia_NVENC "wikipedia:Nvidia NVENC") (NVIDIA thing)
|
||||||
|
|
||||||
|
Untuk keluarga "Apple Silicon" ini agak ribet, di Mac OS bisa menggunakan [VideoToolbox](https://developer.apple.com/documentation/videotoolbox) dan untuk Asahi Linux, entahlah, tapi di mesin saya memiliki `/dev/dri`. Bagaimanapun saya belum terlalu familiar dengan HVA di keluarga aarch64.
|
||||||
|
|
||||||
|
Biaya untuk transcoding relatif tidak terlalu besar (sekalipun dilakukan di CPU) namun yang menjadi tantangan bila proses tersebut dilakukan on-the-fly terlebih melakukan downscaling ke resolusi yang bervariasi meskipun umumnya ke bentuk yang lebih kecil dari yang asli.
|
||||||
|
|
||||||
|
Anggap video 5 Centimeters Per Second tersebut saya mainkan di 720p@60 dalam container/format mp4, si server harus bisa melakukan transcoding lebih cepat dari yang diminta oleh si penonton, plus harus bisa men-deliver nya secara instan juga. Jika tidak, sesuatu yang disebut "buffering" akan terjadi, karena... terjadi buffer.
|
||||||
|
|
||||||
|
Hal vital lain selain transcoding adalah encoding, ini tentang meng-kompresi video menjadi bentuk yang berukuran lebih "ramping" dari yang asli. Jika pernah mendengar kata "lossless" ataupun "lossy", kemungkinan yang dibahasa adalah tentang encoding (atau compression pada umumnya).
|
||||||
|
|
||||||
|
Saya belum memiliki pengetahuan lebih dalam tentang ini, yang jelas pasti ada tradeoff khususnya di kualitas atau apapun itu yang nantinya akan ditampilkan dan didengar.
|
||||||
|
|
||||||
|
<iframe title="Divinity Original Sin 2 Gameplay — Part 1 [No commentary]" width="560" height="315" src="https://evilfactorylabs.social/videos/embed/56525b64-2ba6-4c75-9c04-3405967cc806" frameborder="0" allowfullscreen="" sandbox="allow-same-origin allow-scripts allow-popups"></iframe>
|
||||||
|
|
||||||
|
Bentuk asli dari video diatas adalah .mov (QuickTime) untuk container nya dengan ukuran ~4 GB. Tanpa transcoding, video tersebut tidak bisa dimainkan khususnya di peramban dan tanpa encoding, video tersebut tidak akan berukuran 2.3 GB untuk 1080p dan 1.2 GB untuk 720p.
|
||||||
|
|
||||||
|
# Peer-to-Peer
|
||||||
|
|
||||||
|
Jika sudah familiar dengan kata "seeders" dan "peers", well, tidak perlu penjelasan lebih detail untuk ini :)
|
||||||
|
|
||||||
|
Jika belum, mari kita buat diagram. Umumnya di arsitektur client-server, diagramnya adalah seperti ini:
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart LR
|
||||||
|
|
||||||
|
p1((client)) --> P[server]
|
||||||
|
|
||||||
|
P --> p1
|
||||||
|
```
|
||||||
|
|
||||||
|
Client (penonton) meminta file, server memberi file. Dalam konteks disini, file tersebut adalah video.
|
||||||
|
|
||||||
|
Jika ada 3 client yang sedang terhubung bersamaan, gambarnya seperti ini:
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart LR
|
||||||
|
|
||||||
|
p1((client1)) --> P[server]
|
||||||
|
|
||||||
|
P --> p1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
p2((client2)) --> P
|
||||||
|
|
||||||
|
P --> p2((client2))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
p3((client3)) --> P
|
||||||
|
|
||||||
|
P --> p3((client3))
|
||||||
|
```
|
||||||
|
|
||||||
|
Sangat standar. Lihat bagaimana server terlihat *overwhelming* mengatur request masuk dan memberikan response kepada client. Pengukurnya adalah *seberapa banyak server dapat meng-handle penonton dalam waktu bersamaan* dan berbicara tentang skalabilitas, umumnya menggunakan pendekatan scale-out dengan cara menambahkan server lagi:
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart LR
|
||||||
|
|
||||||
|
p1((client1)) --> P[server]
|
||||||
|
|
||||||
|
P --> p1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
p2((client2)) --> P
|
||||||
|
|
||||||
|
P --> p2((client2))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
p3((client3)) --> P9[server2]
|
||||||
|
|
||||||
|
P9 --> p3((client3))
|
||||||
|
```
|
||||||
|
|
||||||
|
Di real-world case seperti ini:
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart LR
|
||||||
|
|
||||||
|
p1((client1)) --> LB[Load Balancer]
|
||||||
|
|
||||||
|
p2((client2)) --> LB
|
||||||
|
|
||||||
|
p3((client3)) --> LB
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
LB .-> server1
|
||||||
|
|
||||||
|
LB .-> server2
|
||||||
|
|
||||||
|
LB .-> server1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
server1 .-> LB
|
||||||
|
|
||||||
|
server2 .-> LB
|
||||||
|
|
||||||
|
server1 .-> LB
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
LB --> p1
|
||||||
|
|
||||||
|
LB --> p2
|
||||||
|
|
||||||
|
LB --> p3
|
||||||
|
```
|
||||||
|
|
||||||
|
Terlihat bila beban "Load Balancer" menjadi *overwhelming* namun tenang itu memang sudah tugas doi.
|
||||||
|
|
||||||
|
Dengan teknologi peer-to-peer (p2p), hal seperti ini adalah hal yang mungkin:
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart LR
|
||||||
|
|
||||||
|
p1((client1)) --> P[server]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
P --> p1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
p2((client2)) --> P
|
||||||
|
|
||||||
|
P --> p2((client2))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
p3((client3)) .-> p2
|
||||||
|
|
||||||
|
p2 .-> p3
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
p4((client4)) .-> p1
|
||||||
|
|
||||||
|
p1 .-> p4
|
||||||
|
```
|
||||||
|
|
||||||
|
Dengan catatan:
|
||||||
|
|
||||||
|
- client1 dan client4 menonton video yang sama dengan resolusi yang sama
|
||||||
|
- client2 dan client3 menonton video yang sama dengan resolusi yang sama
|
||||||
|
- Timestamp client4 dibelakang timestamp client1
|
||||||
|
- Timestamp client3 dibelakang timestamp client2
|
||||||
|
|
||||||
|
Dari diagram diatas, `client1` dan `client2` technically menjadi "seeder" yang mana `client3` dan `client4` menjadi "peer". Teknologi ini dapat mengurangi beban kerja server sekaligus mengurangi penggunaan bandwidth yang mahal itu.
|
||||||
|
|
||||||
|
Apa yang terjadi saat `client1` atau `client2` tidak dapat dihubungi (menjadi "leecher", sad)? Sederhana, `client3` dan `client2` akan terhubung langsung ke server and that's it.
|
||||||
|
|
||||||
|
Jika timestamp `client4` lebih depan dari `client1` seperti melakukan *seeking*, well, permintaan akan dijadikan ke `server` seperti ini:
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart LR
|
||||||
|
|
||||||
|
p1((client1)) --> P[server]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
P --> p1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
p2((client2)) --> P
|
||||||
|
|
||||||
|
P --> p2((client2))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
p3((client3)) .-> p2
|
||||||
|
|
||||||
|
p2 .-> p3
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
p4((client4)) --> P
|
||||||
|
|
||||||
|
P --> p4
|
||||||
|
```
|
||||||
|
|
||||||
|
Dan tidak menutup kemungkinan kondisinya berubah menjadi seperti ini:
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart LR
|
||||||
|
|
||||||
|
p1((client1)) .-> p4
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
p4 .-> p1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
p2((client2)) --> P
|
||||||
|
|
||||||
|
P --> p2((client2))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
p3((client3)) .-> p2
|
||||||
|
|
||||||
|
p2 .-> p3
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
p4((client4)) --> P[server]
|
||||||
|
|
||||||
|
P --> p4
|
||||||
|
```
|
||||||
|
|
||||||
|
Yeah hidup kadang jadi seeder kadang jadi leecher.
|
||||||
|
|
||||||
|
Dalam dunia per-video-an, p2p bukanlah teknologi yang baru. Teknologi inilah yang digunakan dalam Real-time Communication (RTC) seperti panggilan suara dan video yang dilakukan melalui jaringan internet. Dalam penerapannya, tentu tidak mudah. Dan anggap saya sedang tidak mood membahas tentang Network Address Translation (NAT).
|
||||||
|
|
||||||
|
Teknologi p2p ini digunakan di platform berbagi video PeerTube, dan tidak hanya untuk VoD, melainkan untuk Live Video juga, which is nice.
|
||||||
|
|
||||||
|
# Transcoding vs Transmuxing
|
||||||
|
|
||||||
|
Di awal kita sempat membahas tentang "Coding Format" yang umumnya digunakan bebarengan dengan istilah "Codecs" alias Compress/Decompress. Juga, tentang "Container Format", alias tentang "pembungkus" si video.
|
||||||
|
|
||||||
|
Membahas tentang kompatibilitas, lapisan nya adalah seperti ini:
|
||||||
|
|
||||||
|
- Container berisi "video", "audio", dan "subtitle"
|
||||||
|
- Server perlu tahu:
|
||||||
|
- Apakah si client/video player dapat "memulai langsung" si video yang ada di server, yang berarti, si client tersebut harus mendukung container dari video tersebut
|
||||||
|
- Apakah si client tersebut mendukung codecs yang digunakan. Video/audio bisa menggunakan codecs yang beragam, misal video menggunakan h.265 dan audio menggunakan DTS
|
||||||
|
- Apakah si client tersebut mampu meng-handle bitrate yang dimiliki melalui koneksi jaringan yang digunakan
|
||||||
|
- Jika ketiga hal diatas terpenuhi, tidak ada hal rumit yang dilakukan alias "direct play" dapat terjadi
|
||||||
|
- Jika si client mendukung container namun tidak mendukung codecs yang digunakan, maka transcoding akan terjadi
|
||||||
|
- Jika si client mendukung codecs namun tidak dengan container, maka transmuxing (remux?) akan terjadi
|
||||||
|
- Jika si client mendukung keduanya namun tidak dengan bitrate, maka transcoding akan terjadi (ke resolusi yang lebih rendah)
|
||||||
|
|
||||||
|
Proses transmuxing (hanya mengubah container, tanpa menyentuh video/audio) umumnya lebih ringan daripada transcoding. Transmuxing mungkin lebih berguna untuk Live Streaming kecuali bila berurusan dengan bitrate yang perlu melakukan transcoding.
|
||||||
|
|
||||||
|
# On-the-fly vs On-demand transcoding
|
||||||
|
|
||||||
|
Di PeerTube, proses transcoding terjadi setelah pengguna mengunggah video (on-demand since selalu mengarah ke konfigurasi resolusi). *Multiplier* nya adalah daftar resolusi yang didukung, sehingga total penyimpanan untuk satu video akan selalu beberapa kali lebih besar tergantung berapa resolusi yang didukung oleh si admin dari instance tersebut.
|
||||||
|
|
||||||
|
Di beberapa tempat lain, terkadang transcoding dilakukan on-the-fly, Jellyfin salah satunya:
|
||||||
|
|
||||||
|
![](./images/IMG_0240.jpeg)
|
||||||
|
|
||||||
|
Disitu terlihat bahwa container—somehow dilaporin sebagai "mkv" dibagian container Original Media Info yang padahal aslinya "webm" alias vp9—**dan** video codec **dan** audio codec yang dimiliki si file tersebut tidak didukung oleh si player. Satu-satunya cara—per-paragraf ini ditulis—untuk direct play di Jellyfin iOS adalah:
|
||||||
|
|
||||||
|
- Container: mp4/mov/ts
|
||||||
|
- Video codec: h.264 8-bit
|
||||||
|
- Audio codec: flac/mp3/aac
|
||||||
|
|
||||||
|
Jellyfin iOS pada dasarnya hanyalah a fucking webview. Gunakan [Swiftin](https://github.com/jellyfin/Swiftfin).
|
||||||
|
|
||||||
|
Berikut bila diakses melalui Mozilla Firefox yang berjalan di Steam Deck saya (GNU/Linux):
|
||||||
|
|
||||||
|
![](./images/Screenshot_20240301_230352.jpg)
|
||||||
|
|
||||||
|
Terlihat bahwa "play method" nya Direct Playing karena Mozilla Firefox di tempat saya mendukung container webm **dan** video codec vp9 **dan** audio codec OPUS.
|
||||||
|
|
||||||
|
Video di-deliver as-is.
|
63
content/que-sera-sera.md
Normal file
63
content/que-sera-sera.md
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
---
|
||||||
|
title: Que sera, sera
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: que-sera-sera
|
||||||
|
date: 2021-09-25T13:49:02.000Z
|
||||||
|
date_updated: 2021-09-25T13:49:02.000Z
|
||||||
|
excerpt: whatever will be, will be
|
||||||
|
---
|
||||||
|
|
||||||
|
Semakin dewasa gue semakin sadar bahwa waktu dan kesempatan yang gue miliki semakin berkurang. Dan somehow udah males dengan adanya drama, entah karena sudah bosan atau karena sudah capek.
|
||||||
|
|
||||||
|
Drama hampir terjadi di berbagai lapisan kehidupan, di pekerjaan; pertemanan, percintaan, keluarga, sampai ke sesederhana internet mati pas lagi netflixan. Ada banyak cara tanggapan yang bisa gue pilih, tapi kebanyakan tanggapan yang gue ambil adalah "yaudah lah ya".
|
||||||
|
|
||||||
|
Sekilas tanggapan tersebut terlihat seperti pasrah, tapi pasrah adalah tentang tidak melakukan apa-apa. Seperti, ketika internet brengsek ini masih mati ketika gue nonton sekarang pada saaat ini sekalipun udah gue cek & restart DNS; cek & restart perangkat, dan cek & restart router, apalagi yang bisa gue lakukan selain yaudah lah ya?
|
||||||
|
|
||||||
|
Dan itu bukan pasrah. Ada sesuatu yang bisa dan tidak bisa kita kontrol, dan gue sudah melakukan bagian gue. Mungkin gue bisa aja bikin drama, marah-marah di Twitter nyalahin penyedia internet yang gue gunakan sambil skrinsut persentase *packet loss *dari hasil ping, tapi pada akhirnya meskipun gue gak marah-marah di Twitter pun internet gue akan kembali normal.
|
||||||
|
|
||||||
|
...seperti saat ini dan gue udah kagak mood buat lanjut nonton lagi.
|
||||||
|
|
||||||
|
Oke somehow marah-marah dapat membuat lega, tapi gue rasa untuk bisa lega marah-marah bukanlah satu-satunya cara.
|
||||||
|
|
||||||
|
Di konteks lain, misal pertemanan. Gue udah males drama-drama di pertemanan, kalau mau berteman dengan gue ya ayo kalau kagak ataupun udah gak mau, yaudah. Kalau ada sesuatu yang bisa diperbaiki mari perbaiki, kalau gak mau diperbaiki, yaudah. Itu hak lo. Gue gak akan menghalangi pintu keluar untuk mereka yang berusaha keras ingin keluar.
|
||||||
|
|
||||||
|
...pertemanan gue sejauh ini lumayan tenang-tenang aja, dan yang tadi cuma sebatas sebagai contoh.
|
||||||
|
|
||||||
|
## The farewell(?)
|
||||||
|
|
||||||
|
Gue dulu memandang buruk sebuah perpisahan, karena gue pribadi membenci itu. Namun pandangan gue berubah saat gue sadar bahwa gue sendiri yang menjadi subjeknya.
|
||||||
|
|
||||||
|
Bermula dari perpisahan dengan orang tua ketika gue menimba ilmu di sebuah sekolah yang menerapkan sistem asrama. Gue ingat pertama kali menginjakkan kaki di sebuah tempat bernama pesantren dan berpisah dengan orang tua gue. Saat gue merasakannya dulu, gue merasa benci. Sangat benci. Tidak ada yang bisa gue lakukan terhadap mengatasi kebencian tersebut selain menangis.
|
||||||
|
|
||||||
|
Gue yakin orang tua gue pun tidak ingin berpisah dengan anak pertamanya selama 6 tahun, tapi bagaimanapun ini adalah pilihan yang terbaik untuk gue dan orang tua gue. Dan sampai hari ini gue merasa tidak menyesal di sekolahkan ke pesantren.
|
||||||
|
|
||||||
|
Dilanjut dengan perginya gue dari kampung halaman ke sebuah kota bernama Bandung yang lagi-lagi untuk menuntut ilmu. Semenjak perpisahan pertama itu, gue sudah berdamai dengan diri gue dan tidak akan menahan seseorang yang berusaha keras untuk pergi, demi kebaikannya.
|
||||||
|
|
||||||
|
Ya, gue tidak menahan diri gue untuk tidak pergi, demi kebaikan gue sendiri.
|
||||||
|
|
||||||
|
Hal yang paling sering dialami dalam urusan "perpisahan" ini pertama di pekerjaan. Manusia datang dan pergi. Ketika ada teman kantor gue yang memutuskan untuk pindah kantor, gue tidak akan merasa sedih dengan keputusan yang sudah dia pilih. Itu pasti keputusan terbaik dia yang sudah dia pikirkan sangat matang. dan yang pasti untuk kebaikan dia juga. Tentu gue merasa sedih—khususnya bila gue sangat dekat dengan dia—karena gue dan dia sudah tidak bisa bekerja bersama kembali, tapi gue akan lebih memilih "good luck for whatever next" daripada "yaah sedih blabla" karena itu adalah sebuah perayaan, bukan perpisahan.
|
||||||
|
|
||||||
|
Gue memikirkan ulang konsep perpisahan yang dibanyak kasus ternyata lebih cocok disebut sebagai perayaan.
|
||||||
|
|
||||||
|
Contoh lain yang sering dialami juga adalah di percintaan. Kasusnya hampir sama dengan paragraf sebelumnya, namun konteks hubungannya adalah perasaan daripada pekerjaan. Terkadang kita merasa sulit untuk meninggalkan ataupun ditinggalkan, namun bagaimanapun mungkin itu adalah jalan yang terbaik.
|
||||||
|
|
||||||
|
Mungkin hubungan yang ada terkesan toxic dan tidak ada yang bisa diubah karena salah satu pihak tidak benar-benar ingin berubah. Mungkin hubungan yang ada berat sebelah sehingga yang merasa diuntungkan hanya satu pihak. Masih banyak lagi kemungkinan yang ada, namun intinya selalu mengarah ke perpisahan yang tidak jarang terasa menyakitkan.
|
||||||
|
|
||||||
|
Entah kita yang menjadi pelaku ataupun korban, bagaimanapun kita tidak bisa terus egois baik terhadap diri sendiri ataupun orang lain, demi kebaikan diri sendiri ataupun orang lain.
|
||||||
|
|
||||||
|
Dan perpisahan adalah bentuk perayaan, untuk kebaikan diri sendiri ataupun orang lain. Segala sesuatu selalu memiliki *tradeoff, *dan tugas kita adalah memilih yang terbaik untuk kita.
|
||||||
|
|
||||||
|
Sebagai penutup, kepada siapapun yang sedang merasakan sakitnya perpisahan, relakanlah. Jangan menutup pintu keluar untuk mereka yang berusaha keras ingin keluar.
|
||||||
|
|
||||||
|
Dan untuk siapapun yang sedang tidak terima dengan apa yang sedang terjadi, berbesar hatilah. Segala sesuatu terjadi pasti karena sebuah alasan dan pasti ada alasannya, dan pada akhirnya kita akan mengetahuinya jika memang itu cukup berdampak.
|
||||||
|
|
||||||
|
Que sera, sera.
|
||||||
|
|
||||||
|
Apa yang terjadi, terjadilah.
|
||||||
|
|
||||||
|
Ketahui apa yang bisa dan tidak bisa diperbaiki serta mana yang bisa dan tidak bisa dikontrol, maka seharusnya kita bisa lebih sedikit mengkhawatirkan atas apa yang akan terjadi, baik yang diharapkan ataupun yang tidak diharapkan.
|
||||||
|
|
||||||
|
The future's not ours to see.
|
||||||
|
|
||||||
|
So, good luck for whatever comes next, everyone!
|
58
content/remote.md
Normal file
58
content/remote.md
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
---
|
||||||
|
title: Remote
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: remote
|
||||||
|
date: 2022-05-25T09:08:24.000Z
|
||||||
|
date_updated: 2022-05-25T09:08:24.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Dream job gue dari pertama kali bekerja adalah ingin bisa bekerja tanpa harus terikat waktu, tempat dan outfit. Sejak kecil sampai hari ini bokap gue berangkat kerja jam 7 dan pulang jam 6, mengingat kantor beliau berada di beda kota. Nyokap berangkat jam 9 dan pulang jam 5, meskipun terkadang di jam istirahat beliau menyempatkan untuk kembali ke rumah, yang biasanya untuk membawakan makanan dari luar untuk penghuni rumah.
|
||||||
|
|
||||||
|
Kedua orang tua gue bekerja menggunakan seragam khusus yang per harinya berbeda-beda, dan di beberapa hari spesial ada seragam/busana khusus seperti ketika hari peringatan ataupun perayaan. Saat SD, gue ada waktu bersama dengan orang tua sekitar 4 jam setiap weekday, dan mungkin lebih lama jika weekend.
|
||||||
|
|
||||||
|
Pekerjaan remote pertama kali gue adalah ketika freelancedi sebuah marketplace bernama Upwork. Klien gue berbasis di US dan gue berada di Bandung. Mereka tidak mempermasalahkan timezone, yang penting mengikuti milestone dan mengisi time sheet. Beberapa bulan bekerja dengan klien tersebut, yang gue lakukan hanyalah berada di depan laptop; menggunakan pakaian yang ingin gue gunakan, dan menyelesaikan sesuatu as usual. Setiap milestone jatuh tempo, mereka akan review pekerjaan dan akan mengirimkan pembayaran jika di approve.
|
||||||
|
|
||||||
|
Jika masa kontrak habis, gue akan melakukan withdraw. And damn, it's real money meskipun memakan waktu ~30 hari jam kerja untuk sampai ke bank gue disekitar tahun 2015.
|
||||||
|
|
||||||
|
Di satu titik gue merasa capek bekerja freelance. Menentukan waktu kerja sendiri adalah sesuatu yang menyenangkan, tapi yang tidak gue dapatkan adalah kepastian. Mungkin bulan ini gue mendapatkan penghasilan untuk menyambung hidup sampai 3 bulan kedepan, dan di bulan keempat bisa saja gue tidak mendapatkan pekerjaan sama sekali. And damn, menulis offering letter tiap kali ingin mengambil pekerjaan adalah hal yang sangat membosankan.
|
||||||
|
|
||||||
|
Lalu gue memutuskan untuk bekerja di sebuah perusahaan startup. Startup terkenal dengan kulturnya yang memberdayakan fleksibilitas; khususnya di waktu, tempat, dan pakaian. Tidak ada yang mempermasalahkan gue mulai bekerja jam 1 siang dan berakhir jam 9 malam, selagi sedang tidak ada yang bergantung dengan gue dan tugas gue selesai, gue hanya melakukan pekerjaan as usual.
|
||||||
|
|
||||||
|
Jika bosan dengan pemandangan tembok kantor, atau bosan tidur di beanbag, atau bosan duduk di kursi kantor, atau ehm persediaan kopi di kantor udah habis, gue bisa melakukan pekerjaan gue dimanapun, biasanya di coffee shop. Kebebasan seperti ini yang ingin gue dapatkan dalam pekerjaan, dan ini menjadi dream job gue sampai hari ini.
|
||||||
|
|
||||||
|
## WFH
|
||||||
|
|
||||||
|
Tahun 2017 lalu orang tua gue masih belum percaya jika gue sudah bekerja sekalipun beberapa kali sudah gue lihatkan slip gaji. Konsep bekerja yang mereka tahu adalah menggunakan seragam, pergi ke kantor, menggunakan lanyard. Ya atau at least name tag lah. Jika tidak, seharusnya gue dianggap seorang pengusaha yang berjualan sesuatu.
|
||||||
|
|
||||||
|
Beberapa tahun berlalu dan pandemi muncul, konsep WFH menjadi cukup populer. Orang tua gue bisa paham dan mengerti jika bekerja tidak harus dilakukan di sesuatu bernama kantor. Bisnis-bisnis mulai menggunakan kata 'WFH' sebagai benefit untuk bisa menarik lebih banyak orang. Gue pribadi tidak terlalu senang dengan konsep Working From Home, but at least konsep bekerja yang ingin gue miliki disebut WFH pada hari ini.
|
||||||
|
|
||||||
|
WFH gue rasa akan cocok untuk yang sudah berkeluarga, atau setidaknya yang sudah memiliki rumah sendiri, atau setidaknya jika tinggal bersama keluarga. Untuk yang tinggal sendiri dan jauh dari keluarga, WFH terasa membosankan. Dan kesepian. Sure lo bisa menikmati kursi herman miller lo di rumah atau bisa menggunakan mechanical keyboard lo tanpa harus khawatir ngeganggu orang lain, tapi lo gak bisa melihat orang berlalu-lalang, tidak bisa duduk dan mengajak ngobrol dengan yang sedang santai juga, dan tidak ada cemilan serta kopi gratis.
|
||||||
|
|
||||||
|
Alternatif lain dari WFH adalah WFA, alias Work From Anywhere. Secara konsep ini mirip dengan WFH, namun biasanya, lebih fleksibel dari WFH. Jika WFH, ada kemungkinan lo wajib ataupun direkomendasikan untuk pergi ke kantor pada waktu tertentu, jika WFA explicitly tidak ada.
|
||||||
|
|
||||||
|
## Remote
|
||||||
|
|
||||||
|
Gue cukup yakin hampir di setiap townhall kalian ada aja yang bertanya "apakah akan WFO lagi?" ataupun something like that, mungkin sudah bosan dengan kerja dari rumah atau hanya untuk memastikan bahwa mereka masih bisa WFH.
|
||||||
|
|
||||||
|
Gue pribadi cukup netral, yang penting memiliki pilihan, seperti, jika ingin WFO silahkan, jika ingin WFH silahkan, selagi tidak ada kewajiban untuk hanya memilih WFO, dan konsep tersebut dikenal dengan "hybrid".
|
||||||
|
|
||||||
|
Work From Office sayangnya memakan biaya yang tidak sedikit; ada perjalanan yang harus ditempuh, ada properti yang harus disewa, dan ada beberapa hal lain yang harus disediakan. Jika fasilitas di "home office" lebih baik dari yang ada di sesuatu bernama kantor, gue rasa sebagian orang akan lebih memilih untuk tetap WFH.
|
||||||
|
|
||||||
|
Tapi sesuatu yang paling gue rindukan dari WFO adalah manusianya, karena jika kopi gue yakin pasti kopinya gak enak. Kadang gue rindu sebat bareng sambil ngomongin masalah pribadi, brainstorming sampe pusing, harum popmie pas lagi produktif-produktifnya, sesi racun-meracun setiap abis tanggal 25, ngegosip, happy hour, pizza after release, perjalanan pulang dari kantor. Walau gue tidak terlalu suka berbaur dengan keramain, but idk, dengan melihat keramaian aja gue merasa kalau gue tidak kesepian.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Gue sempat kepikiran untuk sewa Coworking Space dan bekerja dari sana. Alternatif lain yang sering gue gunakan adalah kerja di Starbucks tapi sayangnya gue tidak bisa menjadikan alamat tersebut buat menerima paket hahaha.
|
||||||
|
|
||||||
|
Tempat orang berkumpul seringkali disebut komunitas, dan mereka memiliki purpose masing-masing. Salah satu kekurangan bekerja di Starbucks (atau coffee shop in general) adalah gue datang dan pergi hanya untuk bekerja. Berbeda dengan coworking space yang kadang ada event, atau sharing session, atau setidaknya ada momen ngobrol dengan strangers ketika sedang sama-sama sebat. Networking bisa terjadi karena gue rasa salah satu alasan mereka memilih coworking space adalah untuk itu.
|
||||||
|
|
||||||
|
Melihat berita sekilas sepertinya kebijakan pemerintah terkait kondisi seperti sekarang ini mulai cukup melonggar. Bahkan sekarang sudah boleh tidak menggunakan masker ketika beraktivitas diluar ruangan, secara resmi. Gue yakin tidak lama lagi kebijakan beberapa bisnis akan menawarkan untuk bisa WFO kembali dari yang sebelumnya full WFH.
|
||||||
|
|
||||||
|
Di tempat sekarang gue full WFH selama 1 tahun 11 bulan. Januari kemarin ada kumpul di Bali ("offsite training") dan senang rasanya mengetahui jika teman-teman kantor gue adalah orang sungguhan, bukan hanya sekadar nama dengan foto random di Google Chat. Sejak awal nego gue mengajukan untuk remote karena gue masih ingin tinggal di Bandung, and guess what, tidak lama kemudian pemerintah mengeluarkan kebijakan WFH.
|
||||||
|
|
||||||
|
Satu hal yang ingin gue lakukan kembali adalah networking, karena melihat ataupun bertemu dengan orang baru—on purpose—sangat menyenangkan, tidak sedikit insight yang bisa gue dapatkan. Tidak jarang juga side job bisa didapatkan karena teman dari si X butuh orang Y. Tidak jarang juga menemukan orang yang memiliki hobi serupa, kegemaran serupa, daerah serupa, dari lingkaran temannya-teman.
|
||||||
|
|
||||||
|
Kadang gue kepikiran untuk mengikuti keinginan orang tua, pekerjaan seperti yang orang tua gue lakukan, keterjaminan seperti yang orang tua miliki.
|
||||||
|
|
||||||
|
But I guess my choice is right, no?
|
75
content/resilience.md
Normal file
75
content/resilience.md
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
---
|
||||||
|
title: Resilience
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: resilience
|
||||||
|
date: 2022-06-19T09:52:24.000Z
|
||||||
|
date_updated: 2022-06-19T09:52:24.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Selama 7+ tahun berkarir di pengembangan perangkat lunak, mempelajari berbagai hal dari pola; prinsip, dan peraktik terbaik baik dari teori maupun implementasi, salah satu pola favorit gue dalam mengembangkan perangkat lunak adalah resiliensi.
|
||||||
|
|
||||||
|
Di bahasa pemrograman Erlang, ada sebuah filosofi yang sederhananya bernama ["Let it crash".](https://wiki.c2.com/?LetItCrash) Merujuk ke [slide](https://files.gotocon.com/uploads/slides/conference_9/352/original/do_dont_error_handling.pdf) yang dibawakan oleh Joe Amstrong (pembuat Erlang, RIP) yang berjudul "The do's and don'ts of error handling", bagian favorit gue adalah di slide pembuka yang menjelaskan *"A system is fault tolerant if it continues working even if something is wrong" *dan dilanjutkan dengan pembahasan tentang komputasi terdistribusi dan konkurensi.
|
||||||
|
|
||||||
|
Dalam praktik pengembangan peranti lunak, kebanyakan dari kita akan selalu fokus ke keberhasilan. Dari menyajikan fitur tanpa bug, membuat validasi, menangani sesuatu ketika terjadi kesalahan, dsb.
|
||||||
|
|
||||||
|
Yang padahal kita semua tahu bahwa kesalahan adalah sesuatu yang tidak bisa dihindari.
|
||||||
|
|
||||||
|
Dalam perspektif pengembangan, usaha yang kita lakukan adalah menangani setiap kemungkinan kesalahan, dan melacak kesalahan yang belum tertangani. Ketika gue mencoba melihat lebih luas lagi khususnya dari perspektif operasional, bagian yang tidak kalah penting selain menangani kesalahan adalah tentang kemampuan dalam mengatasi suatu kesalahan untuk kembali ke status sebelum krisis.
|
||||||
|
|
||||||
|
Atau yang sederhananya disebut dengan resiliensi.
|
||||||
|
|
||||||
|
Contoh sederhananya adalah seperti ini. Misal aplikasi lo harus mengirim 100 email pada jam 13.37 WIB, 17 email sukses dikirim namun terjadi kegagalan ketika ingin mengirim email yang ke-18. Aplikasi terjadi crash karena di satu waktu sedang melakukan pekerjaan yang memakan banyak memori dan CPU.
|
||||||
|
|
||||||
|
Resiliensi yang gue ketahui adalah tentang:
|
||||||
|
|
||||||
|
1. Apa yang terjadi ketika aplikasi tersebut crash?
|
||||||
|
2. Apa yang terjadi setelah aplikasi tersebut crash?
|
||||||
|
|
||||||
|
Jawaban sederhananya adalah dengan memulai kembali aplikasi tersebut, mengingat kita sudah mengetahui sumber masalahnya. Dan jawaban kedua—yang sekaligus menjadi pertanyaan—adalah apakah aplikasi akan melanjutkan pengiriman email yang ke-18 tadi *atau *justru melupakan bahwa dia harus mengirim 100 email?
|
||||||
|
|
||||||
|
Jawabannya selalu tergantung, tapi setidaknya sudah mendapatkan gambaran tentang konteks yang gue maksud.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Diluar dunia aplikasi, ini juga berlaku di kehidupan sehari-hari.
|
||||||
|
|
||||||
|
Kesalahan ataupun kegagalan adalah sesuatu yang *inevitable.* Tidak bisa dihindari. Yang menjadi poin utama gue rasa adalah bukan tentang melakukan kesalahan/kegagalan nya, melainkan tentang bagaimana menghadapi ketika situasi tersebut terjadi.
|
||||||
|
|
||||||
|
Contoh sederhana adalah ketika mempelajari hal baru. Misal, belajar mengendarai sepeda. Anggap kita belajar bersepeda lalu merasakan bagaimana sakitnya jatuh dari sepeda. Bisa saja kita akan kapok belajar bersepeda karena merasakan sakitnya jatuh dari sepeda, tergantung bagaimana kita menyikapinya. Kalau gue dulu karena gengsi: apapun yang terjadi gue harus bisa naik sepeda biar kayak teman-teman gue. And yes, it works. Dan pada akhirnya gue lupa gimana sakitnya jatuh dari sepeda (plus bekas luka gesekan di tangan gue waktu belajar sepeda pada akhirnya pun menghilang).
|
||||||
|
|
||||||
|
Kata orang bijak, kita harus banyak merasakan kegagalan. Of course maknanya lebih luas dari itu, namun di banyak contoh, konteksnya ada di tentang mencoba sesuatu, seperti, *gak apa-apa gagal setidaknya lo sudah mencoba.*
|
||||||
|
|
||||||
|
Kegagalan adalah sebuah paradoks. Di satu sisi adalah sebuah aib, namun di satu sisi adalah sebuah hal yang wajar. Sejak kecil kebanyakan dari kita ditanamkan untuk jangan melakukan kegagalan; dari harus terus naik kelas, harus menghindari mendapatkan ranking terakhir sampai harus meyakini bahwa hidup harus sesuai dengan yang kita inginkan.
|
||||||
|
|
||||||
|
Tentu saja itu tidak salah.
|
||||||
|
|
||||||
|
Tapi gue rasa masih relatif jarang yang menanamkan, seperti, untuk bisa mengatasi bagaimana bila kegagalan tersebut terjadi.
|
||||||
|
|
||||||
|
Toh siapa juga yang ingin melakukan kesalahan?
|
||||||
|
|
||||||
|
Di banyak kasus, yang menanamkan untuk bisa mengatasi bagaimana bila kegagalan tersebut terjadi gue rasa adalah waktu. Lo gagal dalam interview kerja, merasa down, dan klo lo gak tau apa yang bisa membuat lo bangkit kembali, besar kemungkinan tinggal menunggu waktunya saja.
|
||||||
|
|
||||||
|
Gue hampir tidak pernah kapok dalam melakukan sesuatu, kecuali gue tahu kapan harus berhenti. Dalam memulai kembali, lo tidak memulai sesuatu dari nol, melainkan memulai dengan pengalaman. Lo tahu rasanya ketika lamaran lo di reject oleh sebuah perusahaan, lo tahu rasanya ketika putus dalam menjalin hubungan, lo tahu rasanya ketika berada di sebuah kondisi lo butuh pertolongan, namun tidak ada tangan yang bisa lo genggam.
|
||||||
|
|
||||||
|
Rasanya masih sama, yang akan berbeda adalah sikap lo dalam mengatasinya.
|
||||||
|
|
||||||
|
Dalam KPI untuk resiliency, setidaknya ada 4 metriks yang bisa dijadikan acuan: MTBF (mean time between failure), MTTR (mean time to repair), MTTA (mean time to acknowledge), dan MTTF (mean time to failure).
|
||||||
|
|
||||||
|
Tapi di kehidupan sehari-hari, kita tidak perlu 4 metriks tersebut, karena, well, kita bukan sebuah sistem apalagi produk, technically.
|
||||||
|
|
||||||
|
Gue hanya ingin mengingatkan kembali jika pada dasarnya kesalahan adalah sesuatu yang inevitable. Tentu saja bila kesalahan yang sama terus dilakukan jatuhnya adalah menjadi sebuah keputusan, but anyway regardless the problem the main metric you should care about is that fucking MTTR.
|
||||||
|
|
||||||
|
Lo mungkin sedang menyesali sesuatu, atau sedang mengecewakan sesuatu, but the point is, mau sampai kapan?
|
||||||
|
|
||||||
|
Semakin kecil MTTR lo berbanding lurus dengan sikap yang harus lo lakukan ketika kesalahan tersebut terjadi.
|
||||||
|
|
||||||
|
Lo setidaknya jadi tahu jika X, maka Y, berarti harus Z.
|
||||||
|
|
||||||
|
Perihal X dan Y, itu urusan lain.
|
||||||
|
|
||||||
|
Resiliensi adalah tentang si Z ketika X dan Y ter-definisi. Perihal kejadian X terulang lagi, itu urusan lain.
|
||||||
|
|
||||||
|
Setidaknya lo gak perlu menghabiskan banyak energi untuk mencari ataupun menentukan si Z lagi, khususnya dalam pola yang sama.
|
||||||
|
|
||||||
|
And perhaps I should stop reading too much SRE books, I guess?
|
149
content/rumah.md
Normal file
149
content/rumah.md
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
---
|
||||||
|
title: Rumah
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: rumah
|
||||||
|
date: 2021-12-08T14:42:15.000Z
|
||||||
|
date_updated: 2021-12-08T14:42:15.000Z
|
||||||
|
excerpt: ~
|
||||||
|
---
|
||||||
|
|
||||||
|
Tinggal tidak bersama keluarga adalah hal yang lumayan berat namun bagian yang paling menyebalkannya adalah pay my own fucking bills dari listrik, properti, internet, makan, sampai perkara bayar uang kebersihan.
|
||||||
|
|
||||||
|
But anyway, itu adalah sesuatu yang tidak bisa dihindari khususnya sebagai ehm orang dewasa. Dan konteks dari tulisan ini bukan tentang tagihan yang harus dibayar setiap bulan karena hidup di dunia yang brengsek ini lebih brengseknya lagi tidak gratis.
|
||||||
|
|
||||||
|
Melainkan tentang rumah.
|
||||||
|
|
||||||
|
Dan ya, bukan tentang rumah secara fisik apalagi sebuah direktori dengan alias tilde.
|
||||||
|
|
||||||
|
Melainkan sebuah tempat untuk kembali.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Ketika waktu sudah menunjukkan jam 18.00, tempat apa yang akan dikunjungi selanjutnya setelah tempat kerja? Besar kemungkinan jawabannya adalah rumah.
|
||||||
|
|
||||||
|
Rumah adalah tempat untuk pergi dan kembali.
|
||||||
|
|
||||||
|
Ada yang menunggu kepulangan penghuni rumah ketika sedang ditinggalkan, baik itu keluarga; kerabat, dll sekalipun itu adalah sebuah galon yang randomly gue elus-elus ketika mengisi botol dengan air yang mana membantu gue untuk tetap hidup.
|
||||||
|
|
||||||
|
Rumah seharusnya menjadi tempat yang nyaman, menenangkan, dan... selalu dirindukan, pastinya. Kemungkinan besar sisa hidup gue akan dihabiskan di sebuah tempat bernama rumah ini, yang berarti mengapa gue harus berusaha keras untuk tinggal di rumah yang tidak nyaman; tidak menenangkan, apalagi membuat risih untuk pulang alih-alih merindukannya?
|
||||||
|
|
||||||
|
Karena hal itu gue berusaha keras untuk membuat sesuatu yang gue sebut rumah ini senyaman mungkin, semenangkan mungkin, dan membuatnya selalu gue rindukan entah bagaimanapun caranya.
|
||||||
|
|
||||||
|
Rumah tempat gue tinggal pada saat mengetik tulisan ini lebih baik dari yang sebelumnya dalam konteks ruang & privasi. Tidak banyak yang berubah dari yang sebelumnya, hanya TV dan AC yang hanya menambah budget untuk tagihan listrik bulanan gue.
|
||||||
|
|
||||||
|
Tapi gue mendapatkan ruang dan privasi yang lebih luas disini daripada yang sebelumnya — which is nice.
|
||||||
|
|
||||||
|
Tidak banyak perabotan yang ada disini, hanya sampah-sampah gue seperti server; router, ethernet switch, dan nintendo switch serta sebuah layar monitor berikut dengan printilannya seperti webcam dan keyboard.
|
||||||
|
|
||||||
|
Tapi gue nyaman dan merasa tenang.
|
||||||
|
|
||||||
|
Kebosanan gue bisa diakali dengan bermain beberapa permainan di nintendo switch ataupun menonton video random di youtube/netflix, dan sirkulasi suara disini pun lumayan oke jadi lumayan bisa membuat tenang.
|
||||||
|
|
||||||
|
Ada satu hal yang belum gue dapatkan: Gue tidak merindukan tempat ini ketika gue meninggalkan tempat ini.
|
||||||
|
|
||||||
|
Justru adalah tempat lain yang selalu gue rindukan.
|
||||||
|
|
||||||
|
Dan tempat itu menariknya tidak disebut dengan rumah.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Gue memiliki rencana untuk menjadi seorang "nomaden" pada suatu hari nanti. Alasannya sederhana, gue ingin melihat dan mempelajari hal baru dari lingkungan; budaya, dan tempat plus gue rasa pekerjaan gue mendukung untuk bisa melakukan hal itu jadi mengapa tidak.
|
||||||
|
|
||||||
|
Gue sudah terbiasa untuk tinggal disebuah tempat yang bersifat sementara, jadi gue rasa juga menjadi seorang nomaden selama waktu yang belum ditentukan bukanlah hal yang cukup berat.
|
||||||
|
|
||||||
|
Pindah tempat tinggal bukanlah hal yang mudah. Bukan hanya karena ribet, melainkan ada beberapa hal yang nantinya akan ditinggalkan dan yang mana mungkin tidak bisa dirasakan lagi bila sudah di tempat lain.
|
||||||
|
|
||||||
|
Selain itu, belum tentu tempat selanjutnya lebih baik dari yang sebelumnya ataupun setidaknya sama seperti sebelumnya, dan tentu saja kita selalu benci dengan ketidakpastian.
|
||||||
|
|
||||||
|
Tapi bagian yang paling menarik adalah di 'kenangan'. Sudah sekitar 6x gue pindah tempat tinggal, ada kenangan yang masih gue inget dari kejadian yang biasa aja sampai ke kejadian tolol shubuh-shubuh ada yang bisikin gue buat bersihin kamar mandi pas gue lagi anteng menulis kode.
|
||||||
|
|
||||||
|
Namun kenangan biasanya terasa sangat bermakna bukan karena "ngapain" melainkan "siapa".
|
||||||
|
|
||||||
|
Ketika lo melihat salah satu hotel random yang ada di pulau Jawa misalnya, yang terlintas harusnya bukanlah "ngapain disana" melainkan "dengan siapa" nya.
|
||||||
|
|
||||||
|
Saat gue pindah kos, ada orang-orang yang gue tinggalkan. Dari yang pertama teman kampus, lanjut ke teman & ob kantor, teman SMP, sampai ke yang paling terakhir penjaga kosan gue yang gak pernah marahin gue sekalipun sering melanggar peraturan yang dibuat oleh manajemen kosan.
|
||||||
|
|
||||||
|
Bagaimapun people come and go.
|
||||||
|
|
||||||
|
Gue tidak pamit dan bilang 'selamat tinggal' kepada mereka karena gue masih ada di dunia ini sedangkan gue hanya pindah tempat tinggal. Mereka bisa menghubungi gue kapanpun (kalo gue lagi gak males buka hp), mengajak ketemu kapaun (kalau gue lagi gak mager) dan berkomunikasi melalui layanan perpesanan instan sekalipun hanya untuk basa-basi menanyakan kabar (klo lagi gak males buka WhatsApp).
|
||||||
|
|
||||||
|
Jika suatu saat memiliki kesempatan lagi untuk bisa bersama kembali dan selagi pintu tidak tertutup, mengapa memilih untuk tidak masuk?
|
||||||
|
|
||||||
|
Tempat tinggal gue yang sekarang bagaimanapun tidak akan dihuni selamanya.
|
||||||
|
|
||||||
|
Suatu saat, ketika sudah waktunya, gue akan meninggalkan tempat tinggal ini beserta apapun yang sudah terjadi disini lalu berpindah ke tampat lain.
|
||||||
|
|
||||||
|
Sejauh ini tidak ada yang memaksa gue untuk harus tinggal dimana, gue beruntungnya memiliki kontrol untuk bisa/ingin tinggal dimana berikut dengan alasannya.
|
||||||
|
|
||||||
|
Terkadang ada pertanyaan yang terlintas tentang "mengapa pindah tempat tinggal?" yang sejujurnya gue tidak memiliki alasan lain selain mencari "yang lebih".
|
||||||
|
|
||||||
|
Karena bagaimanapun gue akan selalu menemukan yang lebih.
|
||||||
|
|
||||||
|
Lalu, apa yang akan memberhentikan gue nanti?
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Gue melihat ke sekeliling ruangan, ada barang-barang yang menjadi saksi akan perjalanan hidup gue. Dari server, router, laptop, perangkat genggam, sepatu, sleeping mask, keyboard, buku-buku, dsb.
|
||||||
|
|
||||||
|
Sambil mengetik ini, gue membuka direktori bernama `Memories` yang tersimpan di NAS gue. Ada direktori bernama `2019`, `2020`, dan `2021` disana yang berisi berkas-berkas bertipe media yang kebanyakan adalah foto. Bagian yang paling menariknya, foto-foto tersebut, sekali lagi, bukan tentang "ngapain" melainkan "siapa" terlepas di berkas tersebut bergambarkan sedang di Jogja, Jakarta, Malang, Semarang, Bali, dan pastinya Bandung yang mana sedang melakukan aktivitas apapun itu.
|
||||||
|
|
||||||
|
*"Mereka pun termasuk saksi akan perjalanan hidup gue"* ucap gue dalam hati, biar keliatan lebih dramatis aja gue tambahin paragraf ini.
|
||||||
|
|
||||||
|
Dari berbagai manusia yang tersimpan di sebuah foto di direktori tersebut, masing-masing pastinya melanjutkan kehidupannya. Ada yang melanjutkan hidup dengan berkarir di Banten, di Jakarta, di Bandung, ada yang memutuskan untuk berkeluarga, dsb.
|
||||||
|
|
||||||
|
Kehidupan berhenti hanya sebatas di foto tersebut, dari duduk berdua di Ekologi; berpamitan di Stasiun KAI Bandung, mirror selfie di harris fX Sudirman, dsb.
|
||||||
|
|
||||||
|
Mereka pernah menjadi sesuatu yang bisa gue sebut sebagai "rumah" tanpa bermaksud mengobjektifikasi mereka. Mereka pernah menjadi sebuah tempat yang sangat nyaman, menenangkan dan selalu gue rindukan pada masanya.
|
||||||
|
|
||||||
|
Dan seperti rumah, mereka menjadi tempat terakhir dalam menutup hari.
|
||||||
|
|
||||||
|
Sayangnya, hanya sebatas tempat untuk pergi.
|
||||||
|
|
||||||
|
Tanpa kembali.
|
||||||
|
|
||||||
|
Karena tidak memiliki kesempatan lagi untuk bisa bersama dan sayangnya pintunya tertutup.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Hidup seperti nomaden berarti hidup tanpa memiliki tempat tinggal yang biasanya bernama rumah. Melainkan hanya tempat singgah yang biasanya bersifat sementara.
|
||||||
|
|
||||||
|
Gue secara pribadi pada saat ini sudah tidak peduli memiliki rumah termasuk konsep "dream house/home" yang biasanya dimiliki oleh mereka yang memiliki keinginan memiliki rumah.
|
||||||
|
|
||||||
|
Memiliki tempat yang nyaman, menenangkan, selalu dirindukan, adalah hal yang membahagiakan untuk dimiliki. Apalagi memiliki tempat untuk kembali, baik untuk memulai ataupun menutup hari.
|
||||||
|
|
||||||
|
Sayangnya itu bersifat sementara, dan suatu saat gue akan meninggalkannya lagi entah karena alasan apapun itu.
|
||||||
|
|
||||||
|
Sambil bepergian melihat dan mempelajari hal baru, terkadang gue membayangkan ketika ada seseorang yang mengetuk pintu tempat tinggal gue tanpa harus gue tunggu dibalik pintu seperti sebelumnya.
|
||||||
|
|
||||||
|
Lalu gue membuka pintunya dan mengucapkan "welcome home" as it should be karena pada saat ini gue memiliki harapan bahwa dia akan kembali.
|
||||||
|
|
||||||
|
Segalanya membutuhkan waktu dan ini hanyalah tentang waktu.
|
||||||
|
|
||||||
|
Untuk menutup hari gue memejamkan mata sambil membayangkan hal itu lagi pada hari ini.
|
||||||
|
|
||||||
|
*"Knock, knock"* tiba-tiba terdengar seperti suara pintu diketuk.
|
||||||
|
|
||||||
|
Tanpa bertanya *"siapa?"* gue membuka pintu untuk mengetahui siapa sosok dibalik pengetuk pintu tersebut.
|
||||||
|
|
||||||
|
Gue tersenyum.
|
||||||
|
|
||||||
|
Begitupula dia.
|
||||||
|
|
||||||
|
*"Kok bisa masuk kan gerbangnya dikunci?" *tanya gue penasaran.
|
||||||
|
|
||||||
|
*"Aku masih ada kunci dan sepertinya kebetulan gemboknya enggak diganti?" *jawabnya.
|
||||||
|
|
||||||
|
Gue tersenyum.
|
||||||
|
|
||||||
|
Begitupula dia.
|
||||||
|
|
||||||
|
*"Welcome home" *sambut gue.
|
||||||
|
|
||||||
|
*"Aku pulang" *ucapnyayang dilanjutkan dengan masuk ke dalam ruangan gue.
|
||||||
|
|
||||||
|
*"I know"* ucap gue dalam hati.
|
||||||
|
|
||||||
|
Lalu gue mengambil laptop yang berada di meja kerja gue untuk menulis sebuah tulisan yang gue beri judul "Rumah", membuka sebuah aplikasi bernama iA Writer, dan mulai mengetik tulisan tersebut yang diawali dengan:
|
||||||
|
|
||||||
|
*"Tinggal tidak bersama keluarga adalah hal yang lumayan berat namun bagian yang paling menyebalkannya adalah pay my own fucking bills dari listrik, properti, internet, makan, sampai perkara bayar uang kebersihan."*
|
86
content/sebab-dan-segala-akibat-yang-merambat.md
Normal file
86
content/sebab-dan-segala-akibat-yang-merambat.md
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
---
|
||||||
|
title: Sebab dan segala akibat yang merambat
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: sebab-dan-segala-akibat-yang-merambat
|
||||||
|
date: 2023-06-12T15:05:55.000Z
|
||||||
|
date_updated: 2023-06-12T15:05:55.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Adam (atau Nabi Adam a.s) diyakini sebagai manusia pertama yang tinggal di Bumi tempat mayoritas manusia hidup sekarang. Konon, sebelumnya Nabi Adam tinggal di sebuah tempat bernama Taman Eden atau Syurga Adnin sampai beliau dan istrinya memakan "buah terlarang" dari pohon yang digambarkan sebagai "Pohon Pengetahuan Tentang yang Baik dan yang Jahat" karena bujukan syaitan.
|
||||||
|
|
||||||
|
Apa yang dibujuk oleh syaitan? Syaitan membisikkan bahwa buah tersebut menjanjikan keabadian. Setelah mereka terbujuk dan memakannya, Tuhan (Allah SWT) memerintahkan mereka berdua untuk turun dari surga bersama-sama. Kejadian ini tertulis di Al-Quran surat Taha ayat 120-123, dan buah itu disebut dengan "Khuldi" yang mana artinya "Keabadian".
|
||||||
|
|
||||||
|
Dari dua paragraf diatas, ada 3 pertanyaan yang tidak perlu diketahui jawabannya:
|
||||||
|
|
||||||
|
- Mengapa Nabi Adam (a.s) dan Siti Hawa (istrinya) menginginkan keabadian?
|
||||||
|
- Mengapa Nabi Adam (a.s) dan istrinya diturunkan ke Bumi dan bukan planet lain?
|
||||||
|
- Bagaimana jika mereka tidak pernah memakan buah tersebut sejak awal?
|
||||||
|
|
||||||
|
Karena ini realitanya: keabadian yang dijanjikan tersebut hanyalah tipu daya syaitan. Meskipun kita mungkin tidak pernah tahu dimana Nabi Adam (a.s) dan istrinya dimakamkan, tapi mungkin kita setuju bahwa Nabi Adam (a.s) dan istrinya sudah tidak bernyawa.
|
||||||
|
|
||||||
|
Tapi bagaimana jika keabadian yang dimaksud adalah peradaban manusia? Keabadian yang bukan tentang kekekalan sebuah arwah dalam tubuh dalam melewati waktu? Kekekalan yang membuat Nabi Adam (a.s) selalu diingat dan didoakan keselamatan kepadanya oleh umat manusia?
|
||||||
|
|
||||||
|
Apapun teorinya, wallahualam bissawab.
|
||||||
|
|
||||||
|
Namun jika memang Nabi Adam (a.s) tidak akan pernah untuk memakan buah terlarang tersebut, maka tidak akan pernah. Karena "Jadilah, maka jadilah ia", qadarullah.
|
||||||
|
|
||||||
|
## Qada dan Qadar
|
||||||
|
|
||||||
|
Dalam rukun iman (asas-asas di dalam agama Islam yang menjadi dasar pembentukan akidah), iman keenam adalah percaya kepada Qada (ketetapan) dan Qadar (kepastian). Biasanya, iman keenam ini disederhanakan dengan kata "takdir".
|
||||||
|
|
||||||
|
Konsep takdir yang umat muslim ketahui ada dua: Takdir mubram (pasti terjadi) dan Takdir muallaq (mungkin terjadi). Konsep dari Qada dan Qadar bisa disederhanakan dengan seperti ini: Qada adalah takdir muallaq dan Qadar adalah takdir mubram. Pada dasarnya, segala sesuatu sudah ditentukan oleh tuhan, tapi pada akhirnya, manusia memiliki kebebasan dalam memilih tindakan yang akan dilakukan.
|
||||||
|
|
||||||
|
Rukun iman keenam ini dapat diyakini untuk menunjukkan kebesaran dan kekuasaan Allah SWT sebagai tuhan semesta alam.
|
||||||
|
|
||||||
|
Salah dua contoh untuk menggambarkan keduanya adalah ajal (pasti terjadi) dan rezeki (mungkin terjadi): Ajal seseorang sudah dipastikan dan tidak dapat diubah, rezeki seseorang sudah ditetapkan namun dapat diubah. Ini adalah cikal bakal agar manusia berusaha secara sungguh-sungguh untuk memperoleh apa yang dikehendakinya (ikhtiar).
|
||||||
|
|
||||||
|
Dalam keseharian, terdapat perdebatan yang cukup panjang tentang takdir. Tentang mendefinisikan mana yang bisa diubah dan yang tidak bisa. Tentang mengukur usaha, membandingkan, ataupun mengeluh bagaimana tidak adilnya dunia.
|
||||||
|
|
||||||
|
Namun yang paling penting adalah kesadaran tentang pentingnya berusaha dalam hidup.
|
||||||
|
|
||||||
|
Dan keyakinan bahwa tuhan tidak akan mengubah nasib suatu kaum, jika bukan kaum tersebut yang mengubahnya.
|
||||||
|
|
||||||
|
## Kotak Pandora
|
||||||
|
|
||||||
|
Ada sebuah mitologi Yunani tentang diciptakannya seorang perempuan pertama di dunia yang bernama Pandora. Para dewa memberinya hadiah, dari kecantikan; perhiasan, mahkota, kepandaian berbicara dan sampai ke salah satunya adalah memberikan rasa penasaran yang besar kepada Pandora.
|
||||||
|
|
||||||
|
Pada suatu hari Pandora dinikahkan dengan salah satu dewa. Para dewa memberi hadiah berupa sebuah kotak yang indah, dan menariknya, Pandora dilarang untuk membuka kotak tersebut.
|
||||||
|
|
||||||
|
Karena rasa penasarannya, suatu hari Pandora membuka kotak tersebut. Setelah dibuka, tiba-tiba aroma yang menakutkan terasa di udara. Dari dalam kotak itu terdengar suara kerumunan sesuatu yang dengan cepat terbang keluar. Pandora sadar bahwa dia telah melepaskan sesuatu yang mengerikan dan dengan segera menutupnya tapi terlambat, Pandora telah melepaskan teror ke dunia.
|
||||||
|
|
||||||
|
Semua keburukan itu menyebar ke seluruh dunia dan menjangkiti umat manusia. Pandora terkejut dan menyesal atas apa yang telah dilakukannya. Dia kemudian melihat ke dalam kotak dan menyadari bahwa ternyata terdapat satu hal yang tersisa dan tak terlepas dari kotak tersebut, yaitu harapan.
|
||||||
|
|
||||||
|
Harapanlah satu-satunya hal yang dapat menenangkan manusia dari penderitaan yang mereka alami.
|
||||||
|
|
||||||
|
## Harapan dan keacakan yang berperan
|
||||||
|
|
||||||
|
Sebagai seorang pemrogram, kita dituntut untuk berpikir logis. Menariknya, berpikir logis tidak selalu harus realistis. Tidak jarang kita dihadapkan dengan masalah-masalah yang tidak realistis, namun cukup logis untuk dipahami ataupun diselesaikan. Disitulah "rekayasa" berperan.
|
||||||
|
|
||||||
|
Saat berhadapan dengan ketidakpastian, pasti ada sesuatu yang bisa diukur: nilai rata-rata, nilai tengah, persentil, dsb. Aktivitas ini bernama peramalan, atau prediksi jika kata "ramalan" terdengar seperti sihir. Prediksi tidak menjamin akurasi yang kuat, namun setidaknya memberikan relevansi terhadap fakta yang pernah terjadi.
|
||||||
|
|
||||||
|
Pada suatu hari gue kepikiran akan sesuatu yang secara logika tidak mungkin terjadi, tetapi secara realita memiliki kemungkinan 0,0000001%. 6 angka nol setelah koma dipilih karena gue menyukai angka enam.
|
||||||
|
|
||||||
|
Kemungkinan itu gue sebut dengan harapan. Harapan bergantung dengan kesempatan, dan kesempatan selalu berkaitan dengan keacakan alias entropi.
|
||||||
|
|
||||||
|
Berapa kemungkinan kita dapat melihat bintang jatuh dengan mata telanjang? Jawabannya pasti beragam namun bagi yang memiliki keinginan untuk melihatnya, setidaknya 0,0000001%. Mungkin disaat iseng sedang melihat langit di tengah malam, atau tidak sengaja melihat ketika menutup gorden saat hendak tidur, atau seantusias selalu melihat langit selatan selama 8 menit pada jam 22.22 WIB setiap harinya.
|
||||||
|
|
||||||
|
Di lain sisi, bayangkan jika lo tahu pengetahuan tentang meteorid. Mengetahui fakta bahwa "bintang jatuh" bisa terlihat ketika berada ~100 km di atas permukaan laut. Mengetahui bahwa ada setidaknya ~20jt meteorid memasuki atmosfer bumi setiap hari. Menjadi berapa persentase kemungkinannya? Apa yang akan lo lakukan dengan informasi tersebut? Apakah lo masih bergantung penuh dengan keacakan yang ada di dunia ini?
|
||||||
|
|
||||||
|
## Penutup
|
||||||
|
|
||||||
|
Tidak jarang gue melihat kaca dan menatap diri gue. Menanyakan dalam hati pertanyaan yang hanya gue yang tahu jawabannya. Mengumpulkan segala kemungkinan dan ketidakmungkinan, mempertimbangkan segala harapan dan kesempatan.
|
||||||
|
|
||||||
|
Gue tahu bahwa jika tidak pernah mencoba maka tidak akan pernah mengetahui, jika tidak ada usaha maka tidak ada hasil. Perdebatan "klo bukan sekarang, kapan lagi" dan "kenapa harus sekarang dan bukan nanti" selalu menghantui pikiran karena keberhasilan selalu tentang melakukan hal yang tepat di waktu yang tepat dan untuk hal ini gue tidak ingin gagal.
|
||||||
|
|
||||||
|
Lalu gue membuat skenario. Sebelum tidur gue membayangkan, ketika bangun nanti, gue membuka email dan mencari email masuk dari pengirim yang gue nanti.
|
||||||
|
|
||||||
|
Entah usaha apa yang gue lakukan, harapan apa yang gue simpan, dan kesempatan apa yang gue nantikan, setidaknya gue memiliki alasan untuk menanti esok hari. Menantikan pembuatan skenario yang gue buat dalam pikiran sebelum menutup hari. Menantikan momen yang menjelaskan bahwa *strategi* ini adalah hal yang salah ataupun benar.
|
||||||
|
|
||||||
|
Waiting for that damn emails.
|
||||||
|
|
||||||
|
Mengapa email? Entahlah, anggap itu sebuah keacakan.
|
||||||
|
|
||||||
|
Waktu sudah menunjukkan 02:22, tidak ada aktivitas lain yang lebih menyenangkan selain membuat skenario di kepala.
|
||||||
|
|
||||||
|
Lalu terbangun dengan 1 email masuk dari pengirim dengan nama █████, dan bukan karena menerima notifikasi 12+ sebutan dari 5+ spaces di Google Chat apalagi undangan mendadak ke layanan random bernama Microsoft Teams.
|
38
content/see-you-when-i-see-you.md
Normal file
38
content/see-you-when-i-see-you.md
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
---
|
||||||
|
title: See you when I see you
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: see-you-when-i-see-you
|
||||||
|
date: 2022-09-20T12:17:43.000Z
|
||||||
|
date_updated: 2022-09-20T12:17:43.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Sometimes all the complicated things begin from the simple one. From a simple hello turned into romantic visions. From a simple meeting turned into a wedding. From a simple swipe right turned into a blowjob or two.
|
||||||
|
|
||||||
|
We may be wondering about everything: How did it all really begin?
|
||||||
|
|
||||||
|
And why?
|
||||||
|
|
||||||
|
We don't understand and never will. Just that's how the universe works.
|
||||||
|
|
||||||
|
And then life goes on, for the best or the worst. Sometimes we just feel like a piece is missing in some particular time. It's like how the brain yearns for nicotine when you used to smoke. Or the blood longs for caffeine when you used to drink coffee. Or maybe the pain in your back when you used to sit in a very comfortable fucking ergonomic chair.
|
||||||
|
|
||||||
|
That's how addiction works: You feel different when something you're used to is not there.
|
||||||
|
|
||||||
|
Then you stare at the door. Or maybe at your phone. Wondering to meet the things you used to see or find the voice you used to hear. A simple call or meeting may turn into something complicated, either for the best or the worst. That's how it all should have started and not how it all ended.
|
||||||
|
|
||||||
|
And the clock is ticking and always will be.
|
||||||
|
|
||||||
|
You just lock the door or place the phone away.
|
||||||
|
|
||||||
|
Then you close your eyes. You call a name quietly hoping they can hear you back or maybe wondering if they're doing the same.
|
||||||
|
|
||||||
|
"See you when I see you", you both said.
|
||||||
|
|
||||||
|
Maybe in the next life, or in the next day.
|
||||||
|
|
||||||
|
No farewells or promises.
|
||||||
|
|
||||||
|
Just let the universe work,
|
||||||
|
|
||||||
|
and then the clock keeps ticking.
|
164
content/self-hosting.md
Normal file
164
content/self-hosting.md
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
---
|
||||||
|
title: Self-hosting
|
||||||
|
tags:
|
||||||
|
- evergreen
|
||||||
|
- homelab
|
||||||
|
---
|
||||||
|
|
||||||
|
Saya hanya menjalankan aplikasi (di server) yang sumber kode nya terbuka (berdasarkan [definisi OSI](https://opensource.org/osd)), menghargai privasi pengguna, [keduanya](https://www.gnu.org/philosophy/free-sw.en.html), atau diantaranya.
|
||||||
|
|
||||||
|
Saya selalu menghindari aplikasi yang "phone home" tanpa consent (opt-out) apalagi yang dikategorikan sebagai spyware.
|
||||||
|
|
||||||
|
# Infrastruktur
|
||||||
|
|
||||||
|
## Traefik
|
||||||
|
|
||||||
|
https://traefik.io ([Source Code](https://github.com/traefik/traefik))
|
||||||
|
|
||||||
|
Salah satu reverse proxy favorit saya setelah [Caddy](https://caddyserver.com), [OpenResty®](https://openresty.org/en/) dan [HAProxy](https://www.haproxy.org). Reverse proxy
|
||||||
|
bertugas untuk meneruskan permintaan HTTP(s) masuk ke layanan yang dimaksud yang umumnya dikategorikan berdasarkan _virtual hosts_ nya. Dukungan terhadap _TLS termination_ dan
|
||||||
|
penerapan protokol ACME adalah alasan saya mengutamakan Traefik. Juga, karena cara untuk mengkonfigurasi Traefik yang relatif sederhana dan lumayan beragam.
|
||||||
|
|
||||||
|
Untuk case yang relatif sederhana (seperti sebagai sidecar proxy), saya akan memilih Caddy. Untuk case yang membutuhkan dynamic routing (seperti untuk handle proxy di multi-tenant SaaS), saya akan memilih OpenResty, jika bukan keduanya, saya akan memilih Traefik. HAProxy? Anggap hanya ketika ada permintaan khusus.
|
||||||
|
|
||||||
|
No love for Nginx? Anggap [ini tidak terjadi](https://freenginx.org), dan, hey, saya sudah menyebutkan OpenResty®, 'kan?
|
||||||
|
|
||||||
|
## PostgreSQL
|
||||||
|
|
||||||
|
https://www.postgresql.org ([Source Code](https://git.postgresql.org/gitweb/?p=postgresql.git))
|
||||||
|
|
||||||
|
PostgreSQL: The World's Most Advanced Open Source Relational Database, begitulah tagline dari database ini. Postgres dapat diandalkan, menawarkan fitur yang kokoh
|
||||||
|
dan memiliki performa yang dapat diadu. PostgreSQL menjadi database utama saya dan menjadi penentu bila database yang satu ini tidak didukung pada suatu aplikasi yang
|
||||||
|
ingin saya pakai.
|
||||||
|
|
||||||
|
Tidak memiliki alasan lain untuk tidak menggunakan PostgreSQL, dan harus memiliki alasan yang sangat kuat jika harus menggunakan alternatif seperti MySQL/MariaDB dalam
|
||||||
|
memilih RDBMS. Dan jika memang memiliki alasan yang sangat kuat, alternatif itu sudah pasti [SQLite](https://sqlite.org).
|
||||||
|
|
||||||
|
## MinIO
|
||||||
|
|
||||||
|
https://min.io ([Source Code](https://github.com/minio/minio))
|
||||||
|
|
||||||
|
Aturan sudah dibuat: belum cloud-native jika masih bergantung dengan Block Storage sebagai penyimpanan. Object storage menjadi komponen
|
||||||
|
vital untuk mereka yang mengadopsi cloud-native. Berbeda dengan block storage yang menyimpan "data" sebagai... block, object storage menggunakan
|
||||||
|
object ID sebagai metadata nya, yang memungkinkan penyimpanan tidak terbatas karena "besaran block" sudah bukan lagi pengukur.
|
||||||
|
|
||||||
|
Amazon S3 yang ingin menjadi [`malloc` nya internet](https://archive.rizaldy.club/archive/1709220428.901368/index.html) menjadi standar dan pelopor
|
||||||
|
untuk API di Simple Storage Service. Keberadaan tools yang netral sangat dibutuhkan dan yang sudah ada—OpenStack Object Storage (Swift)—tidak kompatibel dengan
|
||||||
|
API yang dimiliki oleh Amazon S3.
|
||||||
|
|
||||||
|
Lalu disini MinIO berperan: sebuah object storage yang berdiri sendiri, open source, dan kompatibel dengan API S3 nya AWS. Selain model deployment nya yang
|
||||||
|
relatif sederhana, MinIO menawarkan performa yang tinggi dengan _footprint_ yang relatif rendah.
|
||||||
|
|
||||||
|
MinIO digunakan dimanapun yang mendukung penyimpanan berbasis object.
|
||||||
|
|
||||||
|
## Gitea
|
||||||
|
|
||||||
|
https://about.gitea.com ([Source Code](https://github.com/go-gitea/gitea))
|
||||||
|
|
||||||
|
Tidak hanya sebagai git server repository, Gitea menawarkan fitur untuk code review; package/container registry dan CI/CD sebagaimana "platform DevOps" pada umumnya. Berbeda dengan
|
||||||
|
alternatif lain seperti [GitLab](https://about.gitlab.com) yang relatif kompleks dalam operasionalnya, Gitea ditulis menggunakan Go dan hanya membutuhkan 1 file binary untuk menjalankannya.
|
||||||
|
|
||||||
|
Selain itu, Gitea relatif cepat dan memiliki _footprint_ yang relatif rendah. Mendukung database populer untuk penyimpanan metadata, begitupula dukungan terhadap object storage.
|
||||||
|
|
||||||
|
## Umami
|
||||||
|
|
||||||
|
https://umami.is ([Source Code](https://github.com/umami-software/umami))
|
||||||
|
|
||||||
|
Hanya sebuah web analytics yang menghargai privasi pengguna. Tidak ada data pribadi—yang mengarah ke "seseorang" di dunia fisik—yang disimpan seperti alamat IP dan geolokasi
|
||||||
|
apalagi sebuah "berkas kecil" bernama [cookies](https://en.wikipedia.org/wiki/HTTP_cookie) yang disimpan di perangkat pengguna.
|
||||||
|
|
||||||
|
Aplikasi umami yang saya jalankan umumnya menghargai pengaturan [Do-Not-Track (DNT)](https://en.wikipedia.org/wiki/Do_Not_Track) di _request header_ dan dipanggil melalui
|
||||||
|
sebuah script bernama `umami.js` yang kemungkinan besar akan diblokir jika menggunakan "ad blocker" populer seperti [uBlock Origin](https://ublockorigin.com) seperti yang
|
||||||
|
saya lakukan juga.
|
||||||
|
|
||||||
|
Web analytics hanyalah pelengkap untuk ego saya dalam mengumpulkan "insight" terhadap situs yang saya kelola dan murni dianggap sebatas vanity metrics.
|
||||||
|
|
||||||
|
# Home Theater PCs (HTPCs)
|
||||||
|
|
||||||
|
## Navidrome
|
||||||
|
|
||||||
|
https://www.navidrome.org ([Source Code](https://github.com/navidrome/navidrome/))
|
||||||
|
|
||||||
|
Sebuah music server dan streamer modern, mendukung audio transcoding (on the fly) dan kompatibel dengan Subsonic API. Memiliki _footprint_ yang relatif rendah dan
|
||||||
|
berjalan hampir di setiap platform.
|
||||||
|
|
||||||
|
Tidak ada alasan untuk tidak menjalankan Navidrome khususnya jika mengoleksi musik dalam bentuk digital. Mendukung integrasi eksternal dengan Last.fm/[ListenBrainz](https://listenbrainz.org) untuk scrobbling dan/atau mengambil metadata khususnya terkait cover art ataupun artis yang dimaksud.
|
||||||
|
|
||||||
|
## Jellyfin
|
||||||
|
|
||||||
|
https://jellyfin.org ([Source Code](https://github.com/jellyfin/jellyfin))
|
||||||
|
|
||||||
|
Penting untuk dicatat bila Jellyfin adalah "fork" dari Emby (3.5.2) yang ditulis menggunakan C#. Ada sedikit perbedaan khususnya di sisi performa/_footprint_ dan ukuran aplikasi
|
||||||
|
jika dibandingkan dengan alternatif nya seperti Plex yang ditulis menggunakan C++ (jika merujuk ke sejarah Plex <- XBMC/Kodi) yang relatif lebih ringan dan memiliki
|
||||||
|
ukuran yang lebih kecil.
|
||||||
|
|
||||||
|
Saya hanya menggunakan Jellyfin untuk kepentingan video, jika ada alternatif lain (selain Kodi), please let me know very soon!
|
||||||
|
|
||||||
|
# Pribadi
|
||||||
|
|
||||||
|
## Vaultwarden
|
||||||
|
|
||||||
|
https://github.com/dani-garcia/vaultwarden/wiki ([Source Code](https://github.com/dani-garcia/vaultwarden))
|
||||||
|
|
||||||
|
Sebuah password manager yang kompatibel dengan API nya Bitwarden, yang mana sebuah password manager juga. Ditulis menggunakan bahasa pemrograman Rust yang menjanjikan _memory safety_ dan _footprint_ yang relatif rendah jika dibandingkan dengan versi resminya yang ditulis menggunakan C#.
|
||||||
|
|
||||||
|
Bitwarden berjalan di hampir semua platform: Windows, GNU/Linux, Mac OS, Android, iOS, Google Chrome, Mozilla Firefox, Safari, x86_64, aarch64, dimanapun. Mungkin
|
||||||
|
berjalan di varian \*BSD juga.
|
||||||
|
|
||||||
|
Password adalah informasi yang sangat sensitif sehingga pengetahuan untuk "mengaturnya" dengan aman dan benar sangat diperlukan. Bitwarden menawarkan ["managed services"](https://bitwarden.com/pricing/) untuk mereka yang kurang familiar ataupun tidak memiliki cukup waktu dengan teknologi tersebut, sehingga tidak perlu menjalankan aplikasi server nya Bitwarden dengan tangan sendiri untuk memulai menggunakan.
|
||||||
|
|
||||||
|
## Synology Photos
|
||||||
|
|
||||||
|
https://www.synology.com/en-global/dsm/feature/photos (Proprietary)
|
||||||
|
|
||||||
|
Menggunakan ini hanya karena memiliki perangkat keras nya, dan sayangnya sangat sesuai dengan kebutuhan saya. Saya hanya membutuhkan: aplikasi yang menampilkan foto/video yang dikategorikan berdasarkan waktu; tempat, album (cukup standar), informasi terkait metadata, dan mendukung HEIV & HEVC (tipikal pengguna Apple).
|
||||||
|
|
||||||
|
Synology Photos mendukung _backup_ juga sehingga dapat mengganti peran aplikasi Photos di perangkat Apple saya.
|
||||||
|
|
||||||
|
## Synology MailPlus
|
||||||
|
|
||||||
|
https://www.synology.com/en-global/dsm/feature/mailplus (Proprietary)
|
||||||
|
|
||||||
|
Sudah lama saya ingin mengarsipkan semual email saya dan mengkategorikannya berdasarkan "mailbox" seperti "IMBOX", "Paper Trail", dan "The Feed", yang mana konsep yang saya ambil dari layanan [Hey](https://hey.com) nya [37signals](https://37signals.com). Di "platform" email modern, ini dapat dicapai menggunakan protokol IMAP, namun "membersihkan" email yang disimpan di komputer pihak ketiga bukanlah pekerjaan yang sederhana.
|
||||||
|
|
||||||
|
Saya menggunakan Migadu dan beruntungnya Migadu mendukung protokol POP. Alurnya sederhana: setiap 1 menit, server saya akan mengambil data email terbaru dari remote server dan menghapusnya setelah terambil. Untuk email keluar? Melalui protokol SMTP, cukup standar! Saya belum menemukan aplikasi serupa yang sesuai dengan kebutuhan saya tersebut
|
||||||
|
selain Synology MailPlus, meskipun aplikasi tersebut cukup _overkill_ untuk kebutuhan saya.
|
||||||
|
|
||||||
|
## ArchiveBox
|
||||||
|
|
||||||
|
https://archivebox.io ([Source Code](https://github.com/ArchiveBox/ArchiveBox))
|
||||||
|
|
||||||
|
Saya ingin mengarsipkan segala hal yang saya minati di internet. Paper, halaman web, apapun yang diakses melalui protokol HTTP(s). Ini nantinya menjadi seperti perpustakaan pribadi
|
||||||
|
digital saya untuk apapun yang ada di internet.
|
||||||
|
|
||||||
|
Seiring berjalannya waktu, "perpustakaan digital" saya tersebut akan menjadi salah satu sumber dari mesin pencari yang akan saya gunakan ([SearXNG](https://github.com/searxng/searxng)) setelah DuckDuckGo (Bing).
|
||||||
|
|
||||||
|
# Komunitas
|
||||||
|
|
||||||
|
## Forem
|
||||||
|
|
||||||
|
https://www.forem.com ([Source Code](https://github.com/forem/forem))
|
||||||
|
|
||||||
|
Platform untuk berbagi tulisan, ditulis menggunakan Ruby diatas kerangka kerja Ruby On Rails. Aplikasi ini mentenagai [evilfactorylabs.org](https://www.evilfactorylabs.org) sejak [Juli 2021 kemarin](https://www.evilfactorylabs.org/root/merangkul-dan-berkolaborasi-3mbb). Aplikasi ini relatif kompleks, setidaknya ada 4 layanan utama yang harus berjalan: Web server, worker (sidekiq), imgproxy, dan OpenResty®. Tentu saja PostgreSQL dan Redis juga.
|
||||||
|
|
||||||
|
Saya tidak terlalu merekomendasikan aplikasi ini untuk kepentingan berkomunitas, namun belum menemukan alternatif serupa yang cukup "bisa diadu" selain Discourse, Apache Answer, dan Flarum.
|
||||||
|
|
||||||
|
## PeerTube
|
||||||
|
|
||||||
|
https://joinpeertube.org ([Source Code](https://github.com/Chocobozzz/PeerTube))
|
||||||
|
|
||||||
|
Platform untuk berbagi video, ditulis menggunakan JavaScript. Mendukung protokol [ActivityPub](https://en.wikipedia.org/wiki/ActivityPub) sehingga dapat "berfederasi" dengan "instance" dan pengguna lain. Menggunakan teknologi peer-to-peer (P2P) di beberapa fitur nya, sehingga dapat mengurangi beban kerja server dengan semangat gotong royong antar penonton.
|
||||||
|
|
||||||
|
Saya masih meng-eksplorasi teknologi ini (khususnya di [[platform-video | platform berbagi video]]) dan akan terus menyelamnya lebih dalam lagi.
|
||||||
|
|
||||||
|
Aplikasi ini mentenagai [evilfactorylabs.social](https://evilfactorylabs.social) sejak Desember 2023 kemarin.
|
||||||
|
|
||||||
|
## Mastodon
|
||||||
|
|
||||||
|
https://joinmastodon.org ([Source Code](https://github.com/mastodon/mastodon))
|
||||||
|
|
||||||
|
Platform untuk berbagi status singkat alias [microblogging](https://en.wikipedia.org/wiki/Microblogging), ditulis menggunakan Ruby diatas kerangka kerja Ruby On Rails (come on, what else?) dan menggunakan protokol ActivityPub untuk fitur sosial nya. Ini adalah salah satu aplikasi terlama yang pernah saya jalankan (Oktober 2021) setelah Forem.
|
||||||
|
|
||||||
|
Kepikiran untuk menjalankan [Bluesky](https://bsky.social/about/) karena konsep dan arsitekturnya (dan ActivityPub sudah ada PeerTube anyway) but let's see.
|
||||||
|
|
||||||
|
Aplikasi ini mentenagai [edgy.social](https://edgy.social) sejak Oktober 2021 kemarin.
|
170
content/sesuatu-yang-membuat-sesuatu-berubah.md
Normal file
170
content/sesuatu-yang-membuat-sesuatu-berubah.md
Normal file
@ -0,0 +1,170 @@
|
|||||||
|
---
|
||||||
|
title: Sesuatu yang membuat sesuatu berubah
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: sesuatu-yang-membuat-sesuatu-berubah
|
||||||
|
date: 2022-08-23T15:13:42.000Z
|
||||||
|
date_updated: 2022-08-23T15:13:42.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Malam ini cukup sunyi, hanya ada suara kipas dari AC yang terdengar. Gue sedang duduk memandangi layar monitor yang gelap, sambil menghabiskan anggur sisa dari dua minggu kemarin.
|
||||||
|
|
||||||
|
Botol anggur ini sebelumnya penuh, sekarang tinggal berisi sekian mililiter yang gue rasa hanya akan memenuhi 1/3 dari gelas yang sedang gue pegang. Dan setelah dituangkan, botol tersebut akan menjadi kosong.
|
||||||
|
|
||||||
|
Dan botol ini akan tetap disebut botol anggur sekalipun tidak ada air anggur didalamnya.
|
||||||
|
|
||||||
|
Tidak terlihat adanya bulan malam ini, namun gue yakin bulan selalu berada di posisinya. Langit terang yang gue lihat 8 jam yang lalu sekarang berubah menjadi gelap karena cahaya matahari yang entah sedang menyinari bagian bumi yang mana.
|
||||||
|
|
||||||
|
Sekilas gue kepikiran, dalam keadaan sadar, apa yang membuat pada waktu ini disebut malam? Apakah karena sekarang—di letak geografis gue—pukul 02:02 WIB atau karena matahari sedang menyinari bagian bumi yang lain sehingga hanya terlihat cahaya dari bulan saja?
|
||||||
|
|
||||||
|
Gue menuangkan tetes terakhir dari botol anggur ini yang nantinya akan hanya menjadi botol kosong.
|
||||||
|
|
||||||
|
Jika botol anggur ini disebut botol anggur karena adanya air anggur, dan jika malam disebut malam karena waktu menunjukkan jam malam, berarti perubahan seharusnya terjadi karena faktor 'keberadaan' dan 'keadaan'.
|
||||||
|
|
||||||
|
Tapi, apakah iya?
|
||||||
|
|
||||||
|
## Keberadaan
|
||||||
|
|
||||||
|
Kamar ini disebut terang ketika ada cahaya lampu, dan disebut gelap ketika tidak adanya cahaya lampu. Keberadaan sesuatu mempengaruhi sebuah keadaan, yang berarti, sebuah perubahan terjadi karena terdapat faktor mempengaruhi tersebut, terang-tidaknya kamar ditentukan oleh keberadaan dari cahaya lampu tersebut.
|
||||||
|
|
||||||
|
Jika memang sesuatu berubah karena keberadaan sesuatu, yang dalam kasus ini adalah ada dan tidak adanya cahaya, mengapa kamar tetap disebut gelap jika cahaya yang dihasilkan oleh lampu tersebut kurang?
|
||||||
|
|
||||||
|
Kamar gelap, menyalakan lampu dengan brightness 1%, dan mengapa masih disebut gelap (tidak disebut terang) padahal cahaya lampunya ada disitu?
|
||||||
|
|
||||||
|
Mungkin ini pertanyaan bodoh atau kesalahan berlogika. Tapi, coba pikirkan ke hal-hal praktis yang mungkin terjadi dikeseharian. Favorit gue adalah merasa kesepian, sebuah kondisi dimana gue merasa... kesepian?
|
||||||
|
|
||||||
|
Jika penyebab kesepian tersebut karena tidak ada orang, come on, puluhan orang berlalu lalang mengurus urusannya sendiri didepan mata gue. Jika penyebab kesepian tersebut karena tidak ada orang untuk diajak berbicara, 3 dari 20 daftar di kontak gue mungkin akan menerima panggilan gue ketika gue menekan sebuah tombol berlogo telefon.
|
||||||
|
|
||||||
|
Jika penyebab kesepian tersebut karena tidak adanya "keberadaan" sesuatu, sesuatu apa yang harus ada sehingga kesepian tersebut bisa berubah menjadi "tidak kesepian" lagi?
|
||||||
|
|
||||||
|
Jika gue tahu jawabannya, gue gak perlu menghabiskan anggur hanya untuk menulis disini tentang ini.
|
||||||
|
|
||||||
|
## Keadaan
|
||||||
|
|
||||||
|
Mari kita kesampingkan keberadaan dan fokus ke keadaan.
|
||||||
|
|
||||||
|
Kamar disebut gelap meskipun ada cahaya lampu karena penerangannya kurang. Jika misalnya brightness gue naikkan menjadi 100%, maka besar kemungkinan kamar ini tidak lagi disebut kamar yang gelap. Masalah terselesaikan.
|
||||||
|
|
||||||
|
Apa ukuran brightness dari cahaya lampu tersebut? Itu urusan lain, dan kita sedang tidak berada di kelas fisika.
|
||||||
|
|
||||||
|
Lalu gue putar warna cahaya lampu dari putih menjadi merah. Dengan tingkat lightness/brightness yang sama, menimbulkan keterangan yang berbeda juga. I really did by the way.
|
||||||
|
|
||||||
|
Kamar menjadi gelap karena warna yang didominasi oleh merah, dan seperti yang kita tahu, merah (ff0000) adalah `hsl(0, 100%, 50%)` yang maksudnya memiliki tingkat warna 0 derajat, dengan tingkat intensitas 100% dan kecerahan 50%.
|
||||||
|
|
||||||
|
Dan putih (ffffff) adalah `hsl(0, 100%, 100%)`. Apapun tingkat warna (hue) dan intensitasnya (saturation), pemeran penting dari sistem pewarnaan ini adalah tingkat kecerahan (lightness) pada warna tersebut.
|
||||||
|
|
||||||
|
Terasa pusing? Sama, bedanya gue karena dalam pengaruh sesuatu.
|
||||||
|
|
||||||
|
Kembali ke masalah kesepian yang sempat kita sebutkan, anggap masalahnya adalah karena tidak adanya seseorang yang bisa diajak berbicara. Lalu ada 3 orang yang bisa gue ajak bicara, dan satu hal yang ada di pikiran besar kemungkinan adalah "3 orang kagak cukup, riz!".
|
||||||
|
|
||||||
|
Lalu kita naikkan angkanya, anggap jadi 10.
|
||||||
|
|
||||||
|
Dan lo harusnya tahu baris ini akan membahas tentang apa.
|
||||||
|
|
||||||
|
Oke lalu kita ganti jadi banyaknya orang berlalu-lalang. Mungkin puluhan kita ganti jadi ratusan. Ada ratusan orang berlalu-lalang didepan mata gue, yang anggap gue sedang di daerah scbd pas jam maksi.
|
||||||
|
|
||||||
|
Dan yes, lo harusnya tahu baris ini akan membahas tentang apa.
|
||||||
|
|
||||||
|
Jika penyebab kesepian tersebut karena tidak memenuhi "keadaan" sesuatu, sesuatu apa yang harus dipenuhi sehingga kesepian tersebut bisa berubah menjadi "tidak kesepian" lagi?
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Masalah utama dari sebagian besar pekerja remote adalah kesepian. Tidak jarang para pekerja remote melakukan pekerjaannya di toko kopi ataupun di sebuah tempat bernama coworking space. Jika tidak yakin, silahkan googling sendiri.
|
||||||
|
|
||||||
|
Tidak merasa kesepian dalam keramaian adalah hal yang wajar, dan tidak jarang seseorang merasa kesepian dalam keramaian. Kesepian sering kali dikaitkan dengan merasa sendirian, yang berarti gampangnya, tidak menemukan orang lain yang melakukan hal serupa dengan kita juga.
|
||||||
|
|
||||||
|
Ketika gue sedang tiduran menatapi langit-langit kamar yang biasa-biasa aja, kadang gue merasa kesepian dan sedangkan tidak memiliki cukup energi untuk melakukan aktivitas lain selain tiduran. Tidak jarang teman gue mengajak bermain permainan bersama, dan disitu gue mulai lupa bahwa beberapa menit yang lalu gue sedang merasa kesepian.
|
||||||
|
|
||||||
|
Jika misalnya gue sedang tiduran dan menatapi langit-langit kamar sialan lalu ada orang lain yang melakukan hal serupa juga, gue yakin gue tidak merasa kesepian, karena gue menemukan orang lain yang melakukan hal serupa juga.
|
||||||
|
|
||||||
|
Yang berarti perubahan terjadi karena sebuah keberadaan. Dan keadaan.
|
||||||
|
|
||||||
|
Problem solved?
|
||||||
|
|
||||||
|
Lalu gue membersihkan botol anggur dan mengisinya dengan air mineral sampai penuh. Gue akan tetap menyebutnya botol anggur meskipun isinya bukanlah air anggur.
|
||||||
|
|
||||||
|
Lampu kamar gue sampai tulisan ini gue ketik masih berwarna merah dengan brightness 100%, dan gue akan tetap menyebutnya kamar yang terang meskipun warna dominannya bukanlah putih.
|
||||||
|
|
||||||
|
Lalu gue menyimpulkan, sesuatu yang membuat sesuatu berubah bukanlah keadaan ataupun keberadaan. Tapi keyakinan.
|
||||||
|
|
||||||
|
Keyakinan biasanya dilandasi dengan pemikiran dan penilaian, dan gue rasa, sampai kapanpun dua hal tersebut selalu berifat relatif karena tidak bisa diukur.
|
||||||
|
|
||||||
|
Gue yakin ini disebut botol anggur dan bukan botol minum air putih karena gue melihat dari stikernya. Dan gue yakin kamar ini disebut terang karena gue masih bisa melihat sesuatu.
|
||||||
|
|
||||||
|
Gue sedang merasa kesepian sekalipun dalam keramaian dan meskipun memiliki orang untuk bisa diajak mengobrol, karena gue yakin kalau gue sedang kesepian.
|
||||||
|
|
||||||
|
Tapi ada faktor dalam keyakinan tersebut.
|
||||||
|
|
||||||
|
Seharusnya ada pemikiran dan penilaian yang menjadi landasan.
|
||||||
|
|
||||||
|
Rukun iman pertama dalam agama Islam adalah percaya kepada tuhan (Allah SWT).
|
||||||
|
|
||||||
|
Sifat wajib pertama tuhan (Allah SWT) di agama Islam adalah wujud, alias ada.
|
||||||
|
|
||||||
|
Dalam melakukan keyakinan, harus ada bukti. Bukti yang bisa dinalar oleh akal (pemikiran) dan bukti yang kebenarannya bersifat mutlak (penilaian).
|
||||||
|
|
||||||
|
Gue sebagai umat Islam secara teknis percaya bahwa adanya tuhan bukan karena sudah seharusnya gue harus percaya itu. Ada bukti-bukti yang bisa dipertanggung jawabkan, dari dalil aqli yang bisa dinalar (i.e: siapa yang menciptakan alam semesta jika bukan tuhan? — *Dan gak perlu debat tentang teori big bang disini*) sampai dalil naqli yang memang no debat (i.e: di kitab suci dalam surat sekian ayat sekian dijelaskan bahwa blablabla).
|
||||||
|
|
||||||
|
Kembali ke pembahasan—sorry not sorry jika tadi membawa topik aqidah by the way—apa yang membuat gue yakin? Hal apa yang membuat gue berpikir dan menilai sesuatu sampai gue meyakini hal tersebut?
|
||||||
|
|
||||||
|
Apakah di hidup ini terkadang ada hal-hal yang bersifat mutlak yang tidak perlu dipertanyakan kejelasannya?
|
||||||
|
|
||||||
|
Dalam sebuah surat Tuhan berfirman bahwa *"terjadi, maka terjadilah" *aliasKun, fayakun.
|
||||||
|
|
||||||
|
Di tempat lain sering disebut dengan Que sera, sera. Whatever will be, will be.
|
||||||
|
|
||||||
|
Gue tidak mungkin bisa seperti "jangan kesepian, maka gue tidak kesepian".
|
||||||
|
|
||||||
|
Jangan malas, maka gue tidak malas.
|
||||||
|
|
||||||
|
Pintarlah, maka gue menjadi pintar.
|
||||||
|
|
||||||
|
Berbahagialah, maka gue akan bahagia.
|
||||||
|
|
||||||
|
Pasti ada sesuatu yang harus mempengaruhi.
|
||||||
|
|
||||||
|
Bukan keadaan, bukan keberadaan, tapi keyakinan.
|
||||||
|
|
||||||
|
Keyakinan untuk tidak merasa kesepian, untuk tidak malas, untuk menjadi pintar untuk bahagia, apapun.
|
||||||
|
|
||||||
|
Anggap lo sekarang sedang haus. Jika tidak haus, yakin aja kalau lo harus meminum air.
|
||||||
|
|
||||||
|
Jika lo melakukannya, apa yang membuat lo terdorong untuk melakukan hal itu?
|
||||||
|
|
||||||
|
Apa yang membuat lo yakin bahwa lo harus meminum air?
|
||||||
|
|
||||||
|
Apa yang membuat lo yang sedang tidak ingin minum berubah menjadi ingin minum meskipun sedang tidak haus?
|
||||||
|
|
||||||
|
Jika gue tahu jawabannya, gue seharusnya tidak perlu panjang lebar menulis 1563 kata di tulisan ini.
|
||||||
|
|
||||||
|
Sebagai penutup, mungkin kita sudah familiar dengan sesuatu bernama entropi.
|
||||||
|
|
||||||
|
Sebuah keacakan, sebuah ketidakteraturan dalam sistem.
|
||||||
|
|
||||||
|
Entropi sering disebut sebagai panah waktu. Alasan es batu di es kopi favorit kita mencair adalah karena peningkatan entropi: molekul air yang terikat dalam kisi kristal mendapatkan lebih banyak energi, menyebar lebih jauh, dan kehilangan struktur untuk membentuk cairan. Setidaknya itu yang gue copas dari artikel random di internet.
|
||||||
|
|
||||||
|
Anggap sesuatu berubah karena entropi, dan bukan karena keyakinan.
|
||||||
|
|
||||||
|
Ada banyak contoh sederhananya, dari kematian; es batu mencair, kulit menjadi keriput, buah menjadi busuk bila lama didiamkan, dsb.
|
||||||
|
|
||||||
|
Bahkan bukankah "keterbiasaan" pun dapat membuat sesuatu berubah?
|
||||||
|
|
||||||
|
Seseorang tidak malas untuk melakukan X jika sudah terbiasa melakukan X.
|
||||||
|
|
||||||
|
Kamar yang gelap tidak terasa gelap jika sudah terbiasa dengan tingkat cahayanya.
|
||||||
|
|
||||||
|
Sesuatu yang membuat sesuatu berubah adalah entropi.
|
||||||
|
|
||||||
|
Apapun itu entropinya, itu sudah bukan urusan gue lagi.
|
||||||
|
|
||||||
|
Mulai sekarang gue akan menyalahkan waktu untuk setiap terjadinya perubahan.
|
||||||
|
|
||||||
|
Dari awal yang gue bingungkan bukanlah mengapa terjadi dan tidak terjadinya sebuah perubahan, melainkan mengapa sesuatu bisa berubah.
|
||||||
|
|
||||||
|
Dan gue rasa, sekali lagi, gue sudah tahu jawabannya.
|
||||||
|
|
||||||
|
Dan untuk menjawab pertanyaan *Apa yang membuat lo yang sedang tidak ingin minum berubah menjadi ingin minum meskipun sedang tidak haus? *tadi, mungkin jawabannya adalah *"karena sudah waktunya". *Terlepas kenapa sudah waktunya, gue tidak memusingkan hal itu.
|
||||||
|
|
||||||
|
Dan terima kasih sudah menemani gue ketika sedang tidak terlalu sadar.
|
||||||
|
|
||||||
|
Dan, ya, gue sudah tahu apa yang akan gue tulis sampai baris ini.
|
205
content/setting-the-indonesian-internet-bar-higher.md
Normal file
205
content/setting-the-indonesian-internet-bar-higher.md
Normal file
@ -0,0 +1,205 @@
|
|||||||
|
---
|
||||||
|
title: Setting the indonesian internet bar higher
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: setting-the-indonesian-internet-bar-higher
|
||||||
|
date: 2022-08-04T12:50:07.000Z
|
||||||
|
date_updated: 2022-08-04T13:03:19.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Akhir-akhir ini pengguna internet sedang cukup ramai mengeluhkan tentang pemblokiran yang terjadi di jaringan internet yang ada di Indonesia. Dari mengutarakan di sosial media, sampai ke grup WhatsApp keluarga. Pemblokiran akses ke layanan yang ada di internet bukanlah sesuatu yang baru di Indonesia, khususnya di jaringan internet itu sendiri.
|
||||||
|
|
||||||
|
Ada sekitar 1,609,729 alamat domain yang terdaftar di [TrustPositif](https://trustpositif.kominfo.go.id/) per tulisan ini diterbitkan, dan pastinya akan terus bertambah. TrustPositif adalah daftar alamat domain yang dianggap [tidak layak](https://trustpositif.kominfo.go.id/Statistik) diakses oleh pengguna internet di Indonesia karena mengandung unsur pornografi; radikalisme, SARA, perjudian dsb, yang mana daftar tersebut dipelihara oleh Subdirektorat Pengendalian Konten Internet dibawah Kementerian Komunikasi dan Informatika.
|
||||||
|
|
||||||
|
Keluhan mulai ramai ketika beberapa pengguna internet mengeluhkan layanan internet favorit mereka tidak dapat diakses—alias diblokir—karena alasan hukum, dari Paypal yang mana layanan untuk mengirim/menerima uang melalui internet sampai ke Steam, layanan hiburan untuk memainkan permainan komputer.
|
||||||
|
|
||||||
|
Oke sekarang mari berhenti bersifat manis. Gue sepenuhnya tidak menyalahkan pemblokiran yang terjadi sekalipun tidak pernah membenarkan pemblokiran itu sendiri. Beberapa orang akan menyinggung tentang "censorship", "kebebasan berekspresi", "privasi", "keamanan" dan apapun itu yang berkaitan dengan hak sebagai individu khususnya sebagai warga negara.
|
||||||
|
|
||||||
|
Biar enak, mari kita fokus ke pemblokiran dulu. Biar lo terlihat edgy di tongkrongan, beri gue waktu 3 menit untuk menjelaskan tentang pemblokiran ini dari motivasinya, mitigasinya, sampai ke cara kerjanya secara high-level. Setelah itu, lo bisa melanjutkan pembahasan yang lebih jauh jika tertarik. Without further ado, take your best seat now.
|
||||||
|
|
||||||
|
## It's always DNS
|
||||||
|
|
||||||
|
Semua selalu bermulai dari DNS. Situs rizaldy.club yang sedang lo akses saat ini, situs twitter.com tempat lo ngeluh tentang teman kerja lo yang kontrol itu, sampai ke youtube.com tempat lo mencari hiburan berbentuk video, adalah tentang DNS.
|
||||||
|
|
||||||
|
DNS adalah sebuah sistem penamaan. Jika lo memiliki aplikasi kontak yang berisi nomor teman-teman dan mantan-mantan lo, cara kerja DNS gampangnya seperti aplikasi kontak tersebut: lo menggunakan nama seseorang untuk mencari sebuah nomor. Seperti, lo akan lebih mudah mengingat kalau nomor Fariz adalah +6287xxx69420 daripada mengingat +6287xxx69420 adalah nomor Fariz.
|
||||||
|
|
||||||
|
Di dunia internet, kasusnya pun tidak jauh berbeda. Lo akan lebih mudah mengingat `google.com` daripada `74.125.68.100`, meskipun dua-dua nya bila diakses akan mengarah ke situs yang sama.
|
||||||
|
|
||||||
|
Mungkin lo bertanya: kenapa butuh DNS?
|
||||||
|
|
||||||
|
Jawabannya adalah: komputer hanya dapat berkomunikasi dengan komputer lainnya menggunakan alamat IP. Angka `74.125.68.100` diatas adalah sebuah alamat IP yang dikelola oleh Google, dan setiap komputer (atau perangkat apapun itu yang bisa tersambung ke jaringan internet) pasti memiliki alamat IP jika tersambung ke sebuah jaringan.
|
||||||
|
|
||||||
|
Ketika lo mengakses situs ini, perangkat lo (dengan IP yang bisa dilihat [disini](https://ifconfig.co)) berkomunikasi dengan komputer gue yang anggap memiliki alamat IP `104.21.87.241`. Perangkat lo bilang *"hey komputer *`104.21.87.241`, *gue akses rizaldy.club lewat Safari nih, beri gue sesuatu"* ke komputer gue, dan komputer gue ngerespon *"hey perangkat `<alamat_ip_lo>`, nih sesuatu yang lo minta"*. Dan munculah halaman yang sedang lo lihat sekarang.
|
||||||
|
|
||||||
|
Pertanyaan selanjutnya adalah: Siapa yang mengatur DNS? DNS pada dasarnya ada 3 jenis, dan DNS yang digunakan oleh pengguna internet adalah DNS Resolver. Lalu siapa yang mengatur DNS resolver tersebut? Besar kemungkinan jawabannya adalah penyedia internet yang lo gunakan (ISP).
|
||||||
|
|
||||||
|
Misal, jika lo menggunakan layanan internet dari Biznet, DNS resolver yang digunakan di jaringan internet lo besar kemungkinan adalah dari Biznet. Jika misalnya perangkat lo tidak bisa mengakses situs vimeo.com, besar kemungkinan DNS resolver yang digunakan tersebut tidak memberikan alamat IP untuk situs vimeo.com tersebut.
|
||||||
|
|
||||||
|
## Pemblokiran layanan internet
|
||||||
|
|
||||||
|
Pemblokiran akses layanan internet paling sederhana berada di level DNS.
|
||||||
|
|
||||||
|
Daftar yang ada di TrustPositif tersebut berisi kumpulan alamat domain, alamat domain adalah sebuah "pengenal" seperti sebuah nama di aplikasi kontak yang berisi nomor telepon.
|
||||||
|
|
||||||
|
Jika lo mengakses vimeo.com dan yang muncul adalah halaman yang menjelaskan bahwa situs tersebut diblokir, berarti DNS resolver lo memberikan alamat IP yang tidak seharusnya, alias palsu. Apa bagian menariknya?
|
||||||
|
|
||||||
|
1. DNS resolver tau situs/layanan apa yang akan lo akses
|
||||||
|
2. DNS resolver memberikan alamat IP palsu
|
||||||
|
|
||||||
|
Silahkan ubah DNS resolver pada poin diatas dengan entitas yang mengoperasikan DNS resolver tersebut.
|
||||||
|
|
||||||
|
DNS resolver tahu bahwa `vimeo.com` berada di daftar blokir mereka yang salah satunya merujuk ke daftar TrustPositif, maka dari itu mereka tidak meneruskan permintaan lo ke situs vimeo.com mungkin karena alasan hukum.
|
||||||
|
|
||||||
|
Cara untuk mitigasi pemblokiran di level DNS ini adalah sesederhana: jangan buat DNS resolver tersebut mengetahui situs apa yang akan lo akses. Yang berarti, lo harus menggunakan DNS resolver lain.
|
||||||
|
|
||||||
|
DNS resolver apa yang harus lo gunakan? Jawabannya tergantung. Saran gue adalah DNS resolver yang netral, cepat, dan aman. Maksud netral disini adalah yang tidak terpengaruhi oleh pihak lain, misal seperti DNS resolver yang digunakan oleh ISP yang ada di Indonesia yang dipengaruhi oleh hukum yang ada di Indonesia.
|
||||||
|
|
||||||
|
DNS resolver rekomendasi gue ada 3:
|
||||||
|
|
||||||
|
- [Quad9](https://www.quad9.net/)
|
||||||
|
- [Cloudflare Public DNS Resolver](https://one.one.one.one/dns/)
|
||||||
|
- [Google Public DNS](https://developers.google.com/speed/public-dns/docs/using)
|
||||||
|
|
||||||
|
Cara konfigurasinya terlihat cukup mudah, hanya perlu mengganti alamat IP untuk entry DNS Servers dan bimsalabim lo sudah menggunakan DNS resolver yang bukan dari ISP tersebut.
|
||||||
|
|
||||||
|
Tapi kebanyakan ISP yang ada disini banyak gaya ;)
|
||||||
|
|
||||||
|
## DNS Hijack
|
||||||
|
|
||||||
|
Lo mungkin mengganti bagian DNS Server di router ataupun di komputer lo dengan `8.8.8.8` nya Google Public DNS, tapi apakah DNS resolver yang lo gunakan tersebut adalah benar-benar Google Public DNS?
|
||||||
|
|
||||||
|
Jika penasaran, lo bisa cek di [halaman ini.](https://dnsleaktest.com) Di halaman tersebut akan memberitahu DNS resolver apa saja yang digunakan di jaringan internet lo. Jika ternyata bukan dari DNS resolver yang lo maksud, besar kemungkinan terdapat "DNS Leak" yang gampangnya permintaan DNS dari komputer/jaringan lo dibajak.
|
||||||
|
|
||||||
|
Siapa yang membajak? Siapa lagi jika bukan yang banyak gaya tersebut.
|
||||||
|
|
||||||
|
Bagaimana mereka bisa membajak? Karena mereka tahu bahwa komputer ataupun router lo mengirimkan permintaan DNS. Dan seperti biasa, untuk memitigasinya sesederhana dengan cara: jangan buat ISP lo mengetahui bahwa komputer ataupun router lo melakukan permintaan DNS.
|
||||||
|
|
||||||
|
Bagaimana caranya? Dengan menggunakan "protokol" yang aman, yang dalam konteks ini adalah protokol yang menggunakan enkripsi. Dari 3 DNS resolver yang sempat gue sebutkan diatas, mereka menyediakan "jalur aman" untuk dapat mengakses DNS resolver mereka, berikut instruksinya:
|
||||||
|
|
||||||
|
- [Quad9](https://support.quad9.net/hc/en-us/categories/360002571772-Configuration)
|
||||||
|
- [Cloudflare Public DNS Resolver](https://developers.cloudflare.com/1.1.1.1/setup/#dns-over-https-doh)
|
||||||
|
- [Google Public DNS](https://developers.google.com/speed/public-dns/docs/doh)
|
||||||
|
|
||||||
|
Sebagai kesimpulan, poin utama dari menghindari pemblokiran di level DNS adalah:
|
||||||
|
|
||||||
|
1. Dengan menggunakan DNS resolver yang netral untuk menghindari "pemalsuan alamat IP"
|
||||||
|
2. Dengan menggunakan protokol yang aman untuk menghindari pembajakan permintaan DNS
|
||||||
|
|
||||||
|
Pemblokiran adalah yang ada di poin nomor satu, dan dikebanyakan kasus, sayangnya pengguna internet terjebak di nomor dua tersebut.
|
||||||
|
|
||||||
|
Jika tidak ingin ribet, bisa gunakan layanan [Warp](https://1.1.1.1) nya [Cloudflare](https://www.cloudflare.com) meskipun gue tidak terlalu merekomendasikannya karena alasan pribadi. Tapi setidaknya itu menjadi satu-satunya langkah yang paling mudah untuk selangkah maju kedepan.
|
||||||
|
|
||||||
|
Just don't forget that you know what you're doing.
|
||||||
|
|
||||||
|
## Commercial VPN
|
||||||
|
|
||||||
|
Tidak sedikit iklan yang menjelaskan bahwa menggunakan VPN akan meningkatkan keamanan dan privasi. Internet, pada dasarnya hanyalah tentang jaringan publik yang saling terhubung. Ketika lo mengakses youtube.com menggunakan layanan internet dari Biznet, sederhananya permintaan lo untuk situs youtube.com diteruskan ke jaringan Biznet dan diteruskan ke siapapun yang akan mengarahkan permintaan lo ke komputer—dengan alamat IP tertentu—yang mana tempat youtube.com berada.
|
||||||
|
|
||||||
|
VPN (atau VPN komersil lebih tepatnya) hanyalah mengganti peran ISP seperti Biznet tersebut. Alih-alih lo mempercayakan ISP untuk meneruskan permintaan lo ke situs youtube.com, lo mempercayakan layanan VPN yang lo gunakan tersebut untuk melakukannya.
|
||||||
|
|
||||||
|
Ketika lo mengakses situs/layanan yang ada di internet menggunakan VPN, yang lo lakukan adalah seperti "hey ISP, teruskan permintaan gue ke jaringan VPN X. Biar dia aja yang ngatur situs/layanan apa yang mau gue akses, dan jangan tanya kenapa karena itu bukan lagi urusan lo. Gue lebih percaya dia daripada lo".
|
||||||
|
|
||||||
|
Berbicara teknis sedikit, VPN pada dasarnya adalah jaringan diatas jaringan, alias jaringan pribadi diatas jaringan publik (internet). VPN umumnya menggunakan protokol yang terenkripsi, sehingga bonusnya sederhananya adalah: ISP tidak mengetahui situs apa yang akan lo akses dan tidak tahu akan permintaan DNS ke situs tujuan lo. Karena informasi tersebut terenkripsi, dan hanya lo dan layanan VPN yang gunakan yang mengetahui informasi tersebut, technically.
|
||||||
|
|
||||||
|
Yang ISP tahu, lo terhubung ke sebuah jaringan yang informasinya terenkripsi. And that's it. Mungkin ISP tahu bahwa lo terhubung ke jaringan penyedia layanan VPN, terlepas apakah mereka akan memblokir atau apapun itu, itu cerita lain.
|
||||||
|
|
||||||
|
Satu hal yang paling laris dijual oleh penyedia layanan VPN adalah fitur "Bypass Geo-blocking", dan jika lo tidak membutuhkan itu, 1337% gue yakin yang lo butuhkan hanyalah permintaan DNS yang dilakukan melalui protokol yang aman kepada DNS resolver yang netral.
|
||||||
|
|
||||||
|
## Mengapa terjadi pemblokiran?
|
||||||
|
|
||||||
|
Jika terkait pribadi, pasti jawabannya adalah preferensi. Jika sudah berkaitan dengan hukum, pasti jawabannya adalah aturan.
|
||||||
|
|
||||||
|
Gue pribadi pun melakukan pemblokiran, termasuk di level DNS. Ke situs judi, situs scam, situs phising, dll. I know there is no porn there. Anyway, gue melakukan itu karena preferensi, tujuannya adalah untuk terhindar dari situs-situs yang ingin mendapatkan keuntungan secara instan dari internet dengan mengeksploitasi pengguna internet itu sendiri.
|
||||||
|
|
||||||
|
Jika sudah berkaitan dengan hukum, gue tidak bisa banyak berbicara karena keterbatasan kapasitas. Gue tahu bahwa setiap negara pasti memiliki aturan, meskipun kurang yakin apakah harus sampai mengatur ke aktivitas pribadi seperti mengakses internet.
|
||||||
|
|
||||||
|
Aturan, yang gue tahu, pada dasarnya dibuat untuk menguntungkan kembali kepada yang taat pada aturan tersebut. Seperti, lo gak bakal di penjara karena mencuri, jika tidak mencuri. Dan lo akan di penjara jika mencuri, karena itu menguntungkan diri lo tapi merugikan orang lain. Kesimpulannya adalah jangan mencuri, benar? Sounds make sense.
|
||||||
|
|
||||||
|
Jika pengguna internet misalnya tidak bisa mengakses Vimeo karena alasan hukum, pertanyaannya adalah siapa yang diuntungkan dan siapa yang dirugikan? Jika Vimeo misalnya diblokir karena alasan administratif, maksud gue, kenapa pengguna internet yang menjadi korban? Yang padahal gue rasa tidak merugikan pengguna internet sepeserpun. Of course mungkin merugikan negara karena let's say mereka tidak membayar pajak, tapi coba baca kembali kalimat tadi, terus baca dengan pelan-pelan.
|
||||||
|
|
||||||
|
Alasan lain terjadinya pemblokiran adalah untuk menghindari terjadinya sesuatu yang tak terduga. Alias, sebagai semacam tindakan antisipasi. Ini sedikit masuk akal, khususnya bila cukup familiar dengan situs yang berisi *hate speech*, SARA, Hoax, penipuan online, investasi ilegal, dsb.
|
||||||
|
|
||||||
|
Internet bagaimanapun seperti pisau bermata dua. Jika pisau bisa digunakan untuk buka tutup galon aqua yang ribet banget, pisau juga bisa digunakan untuk membunuh orang misalnya. Begitupula dengan internet. Jika internet sama-sama mengandung unsur yang mungkin dapat mengancam masyarakat, mengapa kepemilikan pisau tidak dibatasi sebagaimana akses layanan internet?
|
||||||
|
|
||||||
|
Selain karena mungkin sebuah alasan bahwa sudah ada hukum yang mengatur jika seseorang melakukan pembunuhan menggunakan pisau, mungkin belum ada hukum yang mengatur jika seseorang melakukan pembunuhan karena berita *hate speech *yang dia baca judulnya saja.
|
||||||
|
|
||||||
|
Who the fuck is having a will 1) to kill people and 2) with a knife?
|
||||||
|
|
||||||
|
Idk, common sense seems expensive, I guess?
|
||||||
|
|
||||||
|
## Set the bar
|
||||||
|
|
||||||
|
Gue menemukan cuitan menarik yang berkaitan dengan drama pemblokiran ini:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/08/CleanShot-2022-08-05-at-01.36.41@2x.png)https://twitter.com/PapersBoy/status/1553186358365405185
|
||||||
|
Dan gue rasa ini tentang preferensi.
|
||||||
|
|
||||||
|
Narasi "ganti dns" diatas diasumsikan bahwa kita menggunakan setelan bawaan alias default, setuju? Ada alasan mengapa harus tetap dengan setelan bawaan dan ada alasan mengapa harus mengubah setelan bawaan.
|
||||||
|
|
||||||
|
Gue gak peduli apakah cuitan tersebut candaan ataupun sarkas atau memang serius, tapi gue peduli sama yang menelan cuitan tersebut mentah-mentah.
|
||||||
|
|
||||||
|
Pertanyaannya adalah apa yang spesial dari setelan bawaan?
|
||||||
|
|
||||||
|
Dari username admin password admin?
|
||||||
|
|
||||||
|
Dari passcode 12345?
|
||||||
|
|
||||||
|
Dari CPU yang tidak di overclocking?
|
||||||
|
|
||||||
|
Yang spesial dari setelan bawaan adalah standar. Setelan bawaan dianggap terjamin karena sudah mengikuti standar.
|
||||||
|
|
||||||
|
Siapa yang menetapkan standar? Jawabannya selalu tergantung.
|
||||||
|
|
||||||
|
Kembali ke konteks, bayangkan jika standar DNS resolver yang digunakan oleh ISP bawaan adalah:
|
||||||
|
|
||||||
|
- Tidak netral
|
||||||
|
- Menggunakan protokol yang kurang aman
|
||||||
|
|
||||||
|
Dalam hukum murphy, jika sesuatu yang buruk bisa terjadi, maka akan terjadi.
|
||||||
|
|
||||||
|
Jika A dapat memblokir permintaan DNS ke A, maka dapat memblokir ke B, C, D juga.
|
||||||
|
|
||||||
|
Jika A dapat membajak permintaan DNS, maka Y bisa juga.
|
||||||
|
|
||||||
|
Ini bukan tentang survivorship bias. Alasan misalnya perpesanan instan seperti WhatsApp menggunakan enkripsi end-to-end agar pesan hanya bisa dibaca oleh pengirim dan penerima saja bukan karena agar pesan tersebut tidak bisa dibaca oleh agensi 3 huruf misalnya. Jika agensi 3 huruf tersebut dapat membacanya, berarti siapapun memiliki kemungkinan untuk bisa membacanya juga, termasuk seseorang yang sering disebut sebagai hacker.
|
||||||
|
|
||||||
|
Pertanyaan selanjutnya, mengapa terdapat penyedia DNS resolver yang menjanjikan kenetralan dan juga menyediakan protokol yang aman seperti Quad9 misalnya? Bukankah sesuatu hadir karena sebuah alasan?
|
||||||
|
|
||||||
|
Ketika sebuah standar tidak memenuhi standar yang lain, apa yang bisa dilakukan selain menggunakan alternatif yang sesuai standar sendiri jika menaikkan merubah standar yang ada adalah hal yang tidak mungkin?
|
||||||
|
|
||||||
|
## The next apocalypse
|
||||||
|
|
||||||
|
Jika internet selalu dianggap sebagai ancaman, pemblokiran di level DNS hanyalah permulaan. Siapapun yang bersangkutan pasti tahu itu.
|
||||||
|
|
||||||
|
Sempat terjadi pemblokiran untuk layanan streaming Netflix yang bahkan sampai melakukan [Deep Packet Inspection](https://en.wikipedia.org/wiki/Deep_packet_inspection) oleh ISP tertentu pada tahun lalu. Pengguna internet yang membayar untuk berlangganan layanan dari Netflix tidak tahu menahu mengapa mereka tidak bisa mengakses Netflix sekalipun sudah menggunakan DNS Resolver yang netral menggunakan protokol yang aman, sampai mereka sadar bahwa router ISP mereka mengintip paket IP sampai ke header kedua.
|
||||||
|
|
||||||
|
Mimpi buruk internet adalah ketika akses internet dibatasi dan diawasi. Ketika akses internet harus selalui melalui [dinding api](https://en.wikipedia.org/wiki/Great_Firewall) untuk diawasi. Ketika akses internet dibatasi oleh "allowlist" alih-alih "blocklist" seperti sekarang.
|
||||||
|
|
||||||
|
Untuk sebagian orang, ini bukanlah ancaman yang nyata.
|
||||||
|
|
||||||
|
Untuk sebagian orang yang menggantungkan hidupnya pada jaringan internet, ini tentu sebuah mimpi buruk yang kedatangannya tidak pernah pasti apalagi diharapkan.
|
||||||
|
|
||||||
|
You can use a neutral and secure alternative DNS resolvers while still protesting.
|
||||||
|
|
||||||
|
Jika maksud gue hanya untuk bisa membypass blokir di level DNS, tulisan ini tidak akan memiliki 2,457 kata.
|
||||||
|
|
||||||
|
To set the bar, you must know what you're doing.
|
||||||
|
|
||||||
|
And I'm just giving a clue.
|
||||||
|
|
||||||
|
## Penutup
|
||||||
|
|
||||||
|
Sebagai penafian, gue menjalankan DNS Resolver yang **tidak netral **yang dapat digunakan oleh publik. Gue sebut tidak netral karena ada beberapa situs (including the very komxxfo.go.id lol) yang gue blokir berdasarkan preferensi dan "standar" gue yang daftarnya bisa dilihat [disini](https://github.com/evilfactorylabs/gatekeeper)—yang meskipun tidak terlalu up to date.
|
||||||
|
|
||||||
|
Selain itu, DNS Resolver tersebut hanya bisa diakses melalui protokol yang aman (DoH, DoT) atau melalui (encrypted) overlay network IPv6 melalui jaringan yggdrasil jika menggunakan plain UDP.
|
||||||
|
|
||||||
|
Sebagai penutup, lo bisa saja mempercayai "operator" dibalik siapapun yang menjalankan DNS dari Quad9, Cloudflare, Google, atau bahkan DNS Resolver public yang gue gunakan sendiri.
|
||||||
|
|
||||||
|
Termasuk mempercayakan operator dari DNS Resolver yang disediakan oleh ISP yang lo gunakan.
|
||||||
|
|
||||||
|
Internet adalah tentang jaringan, tentang komunitas yang saling terhubung. Dan salah satu fondasi utama dari sebuah komunitas adalah kepercayaan. Sebuah ide. Sebuah prinsip. Sebuah standar.
|
||||||
|
|
||||||
|
DNS tampaknya hal yang remeh, namun bisa menjadi batu loncatan pertama untuk sesuatu yang lebih besar.
|
||||||
|
|
||||||
|
Dan bukankah terkadang kita tidak bisa merasakan sesuatu sampai kita kehilangan sesuatu tersebut?
|
||||||
|
|
||||||
|
At least I can still publish this post now, to my home server behind Cloudflare networks which almost every internet user can access.
|
96
content/spof.md
Normal file
96
content/spof.md
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
---
|
||||||
|
title: SPOF
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: spof
|
||||||
|
date: 2022-12-23T02:18:12.000Z
|
||||||
|
date_updated: 2022-12-23T02:18:12.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Sudah 2 hari dari hari ini transaksi gue yang menggunakan Paypal gagal. Gue kira ada kekurangan saldo (problem utama transaksi) yang meskipun saldo gue... lebih dari cukup. Lalu gue coba menambahkan saldo lagi menjadi... 3x lipat dari saldo pada saat itu?
|
||||||
|
|
||||||
|
Dan ternyata masih gagal.
|
||||||
|
|
||||||
|
Mungkin kendala di penerimaan OTP via SMS, dan gue mengisi kembali pulsa sekalipun pulsa sekarang lebih dari cukup sekalipun untuk menerima 666 OTP.
|
||||||
|
|
||||||
|
Dan ternyata masih gagal.
|
||||||
|
|
||||||
|
Insting sebagai programmer gue mulai bermain: cek devtools. Dari payload yang ada, tidak ada yang penting selain error code `NO_VALID_FUNDING_INSTRUMENT` yang of course hanya orang-orang di industri tersebut yang tau. Bahkan tidak ada pesan apapun di UI Paypal terkait mengapa transaksi gue gagal.
|
||||||
|
|
||||||
|
Melihat riwayat transaksi di Paypal, transaksi terakhir yang berhasil adalah dari Linode di awal Desember 2022 kemarin.
|
||||||
|
|
||||||
|
Mungkin kendala dari penerbit kartunya?
|
||||||
|
|
||||||
|
Transaksi terakhir yang tidak menggunakan Paypal hanya berjarak 12 hari dan bahkan lebih baru, transaksi tersebut ke Replit yang mana menggunakan Stripe.
|
||||||
|
|
||||||
|
Sebagaimana solusi favorit dari ISP kesayangan warga Indonesia, gue mencoba untuk mendaftarkan ulang kartu debit tersebut. Setidaknya di Paypal gue ada MasterCard dan Visa yang diterbitkan oleh dua bank berbeda. Ketika mencoba mendaftarkan ulang salah satu kartu tersebut, yang MasterCard gagal dan tentu saja tidak ada pesan intuitif yang bisa dipahami pengguna akhir terkait kegagalan tersebut.
|
||||||
|
|
||||||
|
Lalu gue baru inget kalau memang tidak ada dana di kartu yang Visa dan menggunakan yang MasterCard sebagai preferred card. Setelah coba mengisi saldo ke yang Visa, transaksi berhasil. Something's wrong dengan yang di MasterCard.
|
||||||
|
|
||||||
|
Setelah menghubungi support dari penerbit kartu tersebut, ternyata memang ada kendala terkait transaksi dengan merchant yang belum mendukung 3DS, dan Paypal salah satunya, meskipun ini agak fishy. Ketika meminta kepastian kapan kendala tersebut selesai dan dimana gue bisa mengikuti kabar kalau problem tersebut sudah terselesaikan, tidak ada balasan lain yang intinya "jika nanti sudah bisa, berarti sudah bisa, kak".
|
||||||
|
|
||||||
|
## Single Point Of Failure (SPOF)
|
||||||
|
|
||||||
|
Dalam infrastruktur, SPOF adalah hal umum yang sering dihadapi. Sebagai tambahan, ada perbedaan tipis antara "fault" dan "failure", dan in fact, username internet gue "faultable(s)" terilhami dari dua hal tersebut. Fault adalah tentang "ketika 1 unit gagal melakukan pekerjaannya" dan failure adalah tentang ketika si fault tersebut menyebabkan seluruh sistem tidak berguna.
|
||||||
|
|
||||||
|
Gampangnya, dalam aplikasi web, misal, sebuah aplikasi gagal mengunggah/menampilkan foto dari pengguna. Itu adalah sebuah fault, dan tidak menyebabkan seluruh sistem tidak berguna. Pengguna masih bisa menggunakan aplikasi tersebut, meskipun tidak ada gambar yang bisa dimuat.
|
||||||
|
|
||||||
|
Contoh fauliure nya adalah misal aplikasi tersebut tidak bisa terhubung ke basis data. Sistem akan menjadi tidak berguna, karena, well, aplikasi hanyalah penghubung untuk menampilkan data yang disimpan di basis data, dan sekarang basis data tersebut tidak dapat diakses.
|
||||||
|
|
||||||
|
Dalam keseharian, kita tidak luput dari SPOF. Misal, jika hidup hanya bergantung dengan gaji, apa yang akan terjadi bila pada saat tertentu, tidak menerima gaji? Atau, kita bergantung dengan listrik. Apa yang terjadi bila pada suatu waktu listrik sedang mati?
|
||||||
|
|
||||||
|
SPOF adalah hal yang tidak bisa dihindari, dan satu-satunya cara untuk menghadapinya adalah dengan memiliki "backup plan". Misal, seperti memiliiki tabungan. Atau, memiliki "pembangkit listrik" sendiri.
|
||||||
|
|
||||||
|
Atau, memiliki 2 kartu yang diterbitkan oleh 2 bank berbeda.
|
||||||
|
|
||||||
|
Pertanyaannya, berapa angka yang tepat untuk strategi "backup plan" tersebut? Tentu jawabannya tergantung, tapi kita memiliki formula.
|
||||||
|
|
||||||
|
## Redundancy
|
||||||
|
|
||||||
|
Dalam sistem penyimpanan, ada sebuah teknologi bernama "RAID" alias "Redundant Array of Inexpensive Disks". RAID adalah sebuah rancangan dimana penyimpanan disebar ke "susunan" penyimpanan yang ada.
|
||||||
|
|
||||||
|
Yang paling mudah adalah RAID 0, ini adalah tentang striping. Gampangnya, ketika menyimpan 1 berkas berukuran 1 MB, setiap penyimpanan masing-masing menyimpan 0.5 MB. Tapi ini solusi lain untuk masalah lain.
|
||||||
|
|
||||||
|
Sekarang yang cukup populer adalah RAID 1, ini adalah tentang mirroring. Gampangnya, ketika menyimpan 1 berkas berukuran 1 MB, setiap penyimpanan masing-masing menyimpan berkas tersebut. Jika 1 penyimpanan terjadi kegagalan, maka bisa menggunakan penyimpanan lainnya.
|
||||||
|
|
||||||
|
Kita belum mendapatkan angka yang tepat, tapi mari kita ambil contoh "praktik terbaik" dalam membuat backup.
|
||||||
|
|
||||||
|
Dalam melakukan backup, ada sebuah strategi bernama [3-2-1](https://www.backblaze.com/blog/the-3-2-1-backup-strategy/). Gampangnya, setidaknya lo harus punya 3 salinan data, yang mana 2 nya berada di penyimpanan lokal tapi di perangkat berbeda, dan 1 nya berada di penyimpanan eksternal.
|
||||||
|
|
||||||
|
Teknik ini sudah lama gue gunakan:
|
||||||
|
|
||||||
|
- Singkronisasi direktori X ke perangkat lain (server linux di rumah) via Syncthing
|
||||||
|
- Singkronisasi direktori X tersebut ke iCloud Drive (E2EE manual via gocryptfs)
|
||||||
|
- Salin direktori X tersebut ke SSD eksternal
|
||||||
|
|
||||||
|
Ini adalah redundancy alias mubazir: gue memiliki 3 barang yang exactly sama di tempat berbeda-beda, dan sampai hari ini masih dianggap mubazir karena tidak ada kasus yang membuat duplikasi tersebut berguna, yang berarti kabar baik.
|
||||||
|
|
||||||
|
SPOF adalah tentang 1 poin yang bila poin tersebut terjadi kegagalan, menyebabkan keseluruhan sistem gagal. Jika laptop adalah satu-satunya media untuk lo bekerja, imagine if someday laptop lo... gak bisa nyala. Atau, terdapat kesalahan di SSD.
|
||||||
|
|
||||||
|
Semua orang tidak ingin berhadapan dengan kegagalan, tapi memiliki backup plan (atau gue pribadi menyebutnya "just in case" plan) adalah satu-satunya cara untuk bersiap jika kegagalan tersebut terjadi.
|
||||||
|
|
||||||
|
## Preventing the unpreventable
|
||||||
|
|
||||||
|
Kembali ke 3-4 bulan yang lalu, kemarin-kemarin tempat kerja gue cukup sibuk untuk mendapatkan sertifikasi. Salah satu kepatuhan yang harus dipenuhi dalam mendapatkan sertifikasi tersebut adalah tentang "pemulihan bencana" alias Disaster Discovery. Tidak ada yang menginginkan bencana terjadi, tapi kita harus memiliki rencana ketika bencana tersebut terjadi.
|
||||||
|
|
||||||
|
Rancangan kita adalah dengan menjalankan setiap aplikasi di 3 zona berbeda (Availability Zone) meskipun di satu region, alias multi-zone, karena memang belum ada kebutuhan untuk multi-region.
|
||||||
|
|
||||||
|
Kasusnya, jika zona a terjadi pemadaman, setidaknya masih ada zona b dan zona c. Semua penyimpanan persisten memiliki klon, as always, untuk kasus "just in case".
|
||||||
|
|
||||||
|
Ini hal yang mubazir dan memakan 3x cost. Bagian menariknya, kita selalu berharap agar kemubaziran tersebut tetap mubazir, means, nothing is wrong.
|
||||||
|
|
||||||
|
Dan jika suatu saat terjadi, kita sudah memiliki rencana. Of course kerugian tidak bisa dihindari, namun setidaknya, tidak akan 'serugi' itu—ingat tentang kemubaziran yang tadi sempat disinggung?
|
||||||
|
|
||||||
|
## Penutup
|
||||||
|
|
||||||
|
Sampai hari ini gue menggunakan 2 bank dan 4 rekening: BCA dan Jenius (BTPN). Sempat kepikiran untuk menutup rekening Jenius, tapi selalu gue urungkan karena pertanyaan "gimana kalau yang BCA gue lagi ga bisa dipakai?" sekalipun gue selalu menghindari menggunakan Jenius sebagaimana warga internet—yang mengenal gue—tau.
|
||||||
|
|
||||||
|
Tidak pernah kepikiran ketika pertama kali menggunakan BCA bahwa kasus di awal tulisan ini bakal terjadi, dan gue sempat melupakan bahwa masalah adalah sesuatu yang tidak bisa dihindari, sekalipun untuk "top-class" ataupun "well-known" company.
|
||||||
|
|
||||||
|
Khususnya ke masalah yang tidak bisa gue kontol (typo yang disengaja) seperti kegagalan transaksi di Paypal tersebut yang membuat salah satu website gue tidak bisa diakses padahal sedang butuh-butuhnya.
|
||||||
|
|
||||||
|
Sebagai penutup, pertimbangkan membuat "just in case" plan jika memang belum. Entah backup atau asuransi, yang penting jika menyebabkan kerugian, setidaknya tidak serugi itu.
|
||||||
|
|
||||||
|
Membayar feesible 10rb/bulan, membeli token listrik 2x lebih banyak dari pemakaian umum, membeli kebutuhan pokok 2x lebih banyak, memiliki simpanan 2x lebih besar dari gaji bulanan, dan menyimpan data yang sama 2x di tempat berbeda bukanlah sebuah masalah.
|
||||||
|
|
||||||
|
Dan gue hanya sedang meyakinkan kembali diri gue.
|
118
content/stabilitas.md
Normal file
118
content/stabilitas.md
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
---
|
||||||
|
title: Stabilitas
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: stabilitas
|
||||||
|
date: 2022-01-18T15:53:21.000Z
|
||||||
|
date_updated: 2022-01-18T15:53:21.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Bagian yang paling sulit dalam memulai adalah mengakhiri yang meskipun di beberapa kasus ataupun kondisi terlihat relatif mudah, namun gue rasa tidak untuk dibanyak kasus. Memulai sesuatu adalah seperti berhadapan dengan banyak pintu, disini lo seperti harus memilih pintu mana dulu yang ingin dimasuki dari sekian banyak pintu yang dimiliki.
|
||||||
|
|
||||||
|
Pada akhirnya, hanya satu pintu yang akan dimasuki dalam satu waktu. Dan ketika masuk ke ruangan dibalik pintu tersebut, brengseknya, terdapat banyak jalan keluar yang berbeda-beda.
|
||||||
|
|
||||||
|
Dan ini seperti masuk ke labirin namun memiliki jalan keluar lebih dari satu.
|
||||||
|
|
||||||
|
Lebih brengseknya lagi, terkadang jalan keluar yang dipilih mengarah ke pintu masuk lainnya. Dan yang paling brengsek, tidak ada jalan untuk kembali. Dan yang paling menyebalkan adalah ketika sadar bahwa lo ternyata sudah terkurung dalam labirin tersebut dari pintu yang paling pertama yang lo masuki, yang bahkan lo tidak memiliki kontrol dalam memasuki pintu pertama tersebut.
|
||||||
|
|
||||||
|
Dan tidak ada jalan untuk keluar selain dijemput oleh *sesuatu* yang tugasnya hanyalah untuk menjemput lo.
|
||||||
|
|
||||||
|
## Iterasi
|
||||||
|
|
||||||
|
Yang menarik dari membuat teh adalah sekali teh terbuat, cepat atau lambat ia akan habis. Meskipun proses pembuatan teh bisa terus terulang, pada akhirnya, hasil dari proses tersebut bisa dianggap selesai yang dalam konteks ini adalah ketika teh tersebut habis diminum ataupun dibuang.
|
||||||
|
|
||||||
|
Mengambil contoh lain adalah dalam membuat program, atau aplikasi bila menggunakan bahasa yang umum diketahui. Membuat aplikasi brengseknya bukanlah proses yang sekali jadi lalu selesai meskipun sama-sama untuk dikonsumsi. Google sebagai salah satu mesin pencari yang ada di internet saja berumur sekitar 26 tahun di tahun 2022. Sudah 25 tahun program tersebut ditulis dan dikembangkan sampai hari ini yang mungkin sampai akhir dari internet nanti.
|
||||||
|
|
||||||
|
Tampilan dan performanya selalu berubah dari tahun ke tahun, yang pasti harapannya selalu mengarah ke perubahan yang lebih baik dari yang sebelumnya.
|
||||||
|
|
||||||
|
Yang menjadi pertanyaan adalah "Kapan Google akan berhenti merilis versi baru?"
|
||||||
|
|
||||||
|
Tidak ada yang tahu pastinya, namun dibanyak kasus, jawaban objektifnya adalah "ketika akan memberhentikan operasionalnya".
|
||||||
|
|
||||||
|
Yang berarti, dia akan berhenti memperbaiki "bug" yang ada ataupun yang akan ada di aplikasi tersebut dan di lain sisi, dia juga akan berhenti membuat sesuatu (yang dalam konteks ini adalah fitur) menjadi lebih baik lagi.
|
||||||
|
|
||||||
|
## Stabilitas
|
||||||
|
|
||||||
|
Mungkin tidak jarang kita mendengar kata "stabil", dari kata "stabilsecara finansial", "kondisi mental sudah kembali stabil", "menggunakan versi aplikasi yang stabil", apapun.
|
||||||
|
|
||||||
|
Jika mengambil arti dari KBBI, arti dari stabil adalah: **1****mantap**; **kukuh**; **tidak goyah** (tentang bangunan, pemerintah, dan sebagainya): *situasi politik dalam negeri kita --; ***2****tetap jalannya**; **tenang**; **tidak goyang** (tentang kendaraan, kapal, dan sebagainya): *setelah barang-barang dibuang ke laut, kapal -- kembali*; **3****tidak berubah-ubah**; **tetap**; **tidak naik turun** (tentang harga barang, nilai uang, dan sebagainya): *harga kopra sekarang mulai --;*
|
||||||
|
|
||||||
|
Mari kita ambil kesimpulan bahwa stabil artinya adalah **sebuah****kondisi yang bersifat netral dan berada di tengah. **Tidak cenderung ke A ataupun ke B.
|
||||||
|
|
||||||
|
Pertama, gue ingin mengambil contoh dari rilis aplikasi. Aplikasi dirilis ke versi stabil sederhananya ketika sudah memenuhi tes penerimaan pengguna. Versi tersebut tidak harus sempurna, namun setidaknya pengguna dapat menerima pembaruan dari versi tersebut.
|
||||||
|
|
||||||
|
Dan gue rasa bukan berarti di versi tersebut bebas dari kesalahan, mungkin setidaknya kesalahan tersebut tidak (terlalu) mengganggu pengguna jika memang ada.
|
||||||
|
|
||||||
|
Kedua, gue ingin mengambil contoh dari finansial. Seseorang dikatakan "stabil secara finansial" ketika misalnya seseorang tersebut tidak khawatir membayar tagihan karena seseorang tersebut tahu bahwa dia akan memiliki uang yang cukup.
|
||||||
|
|
||||||
|
Dan gue rasa bukan berarti bila seseorang tersebut misalnya memiliki tagihan, dia dianggap tidak stabil secara finansial.
|
||||||
|
|
||||||
|
Ketiga, gue ingin mengambil contoh dari kesehatan. Seseorang dikatakan "kesehatannya stabil" ketika misalnya seseorang tersebut tidak merasa sakit.
|
||||||
|
|
||||||
|
Dan gue rasa bukan berarti bila seseorang tersebut misalnya tidak memiliki penyakit apapun di tubuhnya.
|
||||||
|
|
||||||
|
Berdasarkan tiga contoh diatas, bisa disimpulkan bahwa kestabilan selalu memiliki tolak ukur dan juga nilainya tidak cenderung ke salah satu ukuran.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Sejujurnya gue baru tahu tentang adanya konsep "healthy relationship" di dunia ini. Sebelumnya gue tidak tahu bahwa ternyata ada "healthy" dan "unhealthy" dalam sebuah relationship.
|
||||||
|
|
||||||
|
Sebuah hubungan singkatnya dianggap "healthy" ketika suatu hubungan yang dijalani oleh dua pihak tersebut menjadi stabil dan yang mana adalah "kesalingan" sebagai tolak ukurnya.
|
||||||
|
|
||||||
|
Sederhananya, mungkin, bila dua belah pihak tersebut saling percaya; saling berjuang, saling mendukung, saling menjaga kepercayaan, saling mengerti, dan sebagainya, hubungan tersebut mungkin bisa disebut sebagai hubungan yang sehat.
|
||||||
|
|
||||||
|
Pasti ada kondisi ketika "kesalingan" tersebut cenderung ke salah satu pihak, dan PR nya kemungkinan besar adalah bagaimana membuat kondisi tersebut kembali menjadi stabil alias kondisi "kesalingan" tersebut berarti kembali lagi ke yang mungkin tanpa kecenderungan ke salah satu pihak.
|
||||||
|
|
||||||
|
Tapi gue rasa PR tersulitnya bukanlah itu.
|
||||||
|
|
||||||
|
Melainkan di mempertahankan "kestabilan" tersebut selama mungkin dan mengembalikannya kembali ketika sedang tidak.
|
||||||
|
|
||||||
|
Karena bukankah perubahan adalah sesuatu yang tidak dapat dihindari?
|
||||||
|
|
||||||
|
Yang berarti, gue rasa, peran terbesar dari kondisi diatas adalah di "bagaimana menyikapinya".
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Berhubungan adalah salah satu hal yang tidak bisa dihindari.
|
||||||
|
|
||||||
|
Dari hubungan dengan keluarga, teman, rekan kerja, ataupun orang lain secara umum. Atau dengan *kekasih *bila memiliki.
|
||||||
|
|
||||||
|
Pasti ada saja hal yang membuat hubungan tersebut... berjalan tidak semestinya.
|
||||||
|
|
||||||
|
Apapun alasannya, penyebab utamanya adalah selalu tentang sesuatu yang disebut dengan 'kesalahan'.
|
||||||
|
|
||||||
|
Dan pilihannya gue rasa ada dua: mengembalikan keadaan tersebut menjadi seperti semula, atau membiarkannya apa adanya sampai keadaan 'semula' tersebut sudah memiliki bentuk berbeda.
|
||||||
|
|
||||||
|
Jika berurusan dengan lebih dari satu pihak, berarti harus ada "kesalingan" dalam sesuatu untuk mencapai sesuatu. Dalam konteks hubungan, mungkin sesuatu tersebut adalah saling maaf dan memaafkan.
|
||||||
|
|
||||||
|
Namun yang paling berat justru di saling "menyetujui" untuk meminta maaf dan memaafkan.
|
||||||
|
|
||||||
|
Dan bagian yang ingin gue soroti adalah: kata "menyetujui" diatas ialah bentuk dari sebuah penyikapan. Dan sayangnya tidak ada kata "keterpaksaan" dari sebuah "kesalingan".
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Gue kepikiran menulis ini ketika sedang kepikiran tentang konsep "healthy relationship" and for what it's worth I'm not good on this relationship thing but I learn over time.
|
||||||
|
|
||||||
|
Satu hal yang paling penting dari "kestabilan" gue rasa adalah *resilience*. Like, it doesn't really matter how stable or unstable the thing was as long as it could recover.
|
||||||
|
|
||||||
|
Hubungan bukanlah seperti sesuatu yang sudah dibuat lalu selesai. Semoga masih ingat pembahasan tentang teh yang berada peragraf awal sebelumnya. Melainkan hubungan adalah sesuatu yang diharapkan berlangsung selama mungkin, jika memang kata 'selamanya' lebih terdengar seperti omong kosong.
|
||||||
|
|
||||||
|
Dan berbicara tentang "kelangsungan" pastinya tidak lepas dengan "proses".
|
||||||
|
|
||||||
|
Dan mungkin proses tersebut sedang stabil, atau sedang di titik rendah, atau sedang berada di puncak. Terlepas sedang berada di titik mana, sikap yang harus dilakukan untuk sesuatu yang diharapkan berlangsung selama mungkin adalah mempertahankan "kestabilan" tersebut selama mungkin dan mengembalikannya kembali ketika sedang tidak.
|
||||||
|
|
||||||
|
Ya, yang mana adalah PR terberat yang tadi sudah disinggung sebelumnya.
|
||||||
|
|
||||||
|
Sejujurnya gue belum pernah menjalin hubungan seperti konsep healthy relationship ini jika memang tanda-tandanya adalah seperti yang dijabarkan di artikel *10 Tanda Kamu Sudah Berhasil Menjalankan Healthy Relationship* versi [IDN Times](https://www.idntimes.com/life/relationship/mia-rahmawati/10-tanda-kamu-sudah-berhasil-menjalankan-healthy-relationship-c1c2/) karena beberapa poinnya pernah ada yang tidak terpenuhi.
|
||||||
|
|
||||||
|
Tapi arti healthy relationship menurut gue sederhana: sebuah hubungan yang terjalin selama mungkin, karena memang dari awal tujuannya adalah untuk itu.
|
||||||
|
|
||||||
|
Ada beragam cara untuk membuatnya tetap healthy, dan ada beragam cara juga untuk membuatnya kembali stabil. Cara yang gue pakai untuk membuat tetap healthy sampai hari ini adalah dengan tidak melakukan sesuatu yang membuat unhealthy, dan cara untuk membuatnya kembali stabil... I don't know, saling maaf dan memaafkan? Mencari solusi bersama? Glad that I'm not in that state yet, but I'm always ready for anything.
|
||||||
|
|
||||||
|
Anyway my relationship today is pretty stable after long fluctuations as in the cryptocurrencies market, and I'm glad we made it through.
|
||||||
|
|
||||||
|
Maintaining stability is not an easy job yet nobody said it was easy at the first place.
|
||||||
|
|
||||||
|
And I usually write here when I have a somewhat big problem, but apparently someone is looking for some reading so here we are as you always give me energy.
|
||||||
|
|
||||||
|
Thank you for having me.
|
0
content/tags.md
Normal file
0
content/tags.md
Normal file
15
content/tags/blog.md
Normal file
15
content/tags/blog.md
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
title: "03.03 AM"
|
||||||
|
description: sometimes cringe, sometimes silly — it is what it is.
|
||||||
|
---
|
||||||
|
|
||||||
|
sometimes cringe, sometimes silly — it is what it is.
|
||||||
|
|
||||||
|
|
||||||
|
> [!info] Dear curious readers
|
||||||
|
>
|
||||||
|
> Ini adalah arsip dari tulisan-tulisan yang diterbitkan di **blog lama** saya.
|
||||||
|
>
|
||||||
|
> Keberadaan konten-konten yang terdaftar dibawah tidak terjamin akan selalu berada disini selamanya namun dijamin akan selalu berada di *instance* [ArchiveBox](https://archive.rizaldy.club/public/?q=rizaldy.club) saya, jika memang masih memiliki keperluan untuk mengakses konten yang berada di blog lama saya tersebut.
|
||||||
|
>
|
||||||
|
> Tautan permanen (permalink) untuk daftar yang ada dibawah diusahakan akan dipelihara selama mungkin untuk menghindari permintaan 404 Page Not Found yang biasanya berasal dari Bookmark ataupun _cache_ dari mesin pencari
|
4
content/tags/evergreen.md
Normal file
4
content/tags/evergreen.md
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
title: 🌲 Evergreen
|
||||||
|
---
|
||||||
|
Kumpulan catatan yang selalu relevan dan tetap diperbarui, terus bertumbuh sepanjang waktu.
|
1
content/tags/homelab.md
Normal file
1
content/tags/homelab.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
Sebuah hobi yang aneh. Kunjungi r/homelab di Reddit untuk gambar porno
|
6
content/tags/log.md
Normal file
6
content/tags/log.md
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
title: "/var/log/public"
|
||||||
|
---
|
||||||
|
|
||||||
|
Terkadang saya membagikan pembaruan terkait kehidupan saya dalam jangka waktu bulanan, ke publik. Ini hanyalah "hadiah" dari saya
|
||||||
|
dan jangan berharap lebih seperti konsisten membagikannya tiap bulan.
|
4
content/tags/seed.md
Normal file
4
content/tags/seed.md
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
title: 🌱 Seed
|
||||||
|
---
|
||||||
|
Brain dump. Hal-hal (yang saya memiliki ketertarikan) yang muncul secara instan
|
157
content/tailscale-dan-magic.md
Normal file
157
content/tailscale-dan-magic.md
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
---
|
||||||
|
title: Tailscale dan Magic
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: tailscale-dan-magic
|
||||||
|
date: 2022-09-02T15:32:24.000Z
|
||||||
|
date_updated: 2022-09-02T15:32:24.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Sudah satu tahun lebih menggunakan Tailscale (daftar pada 22 Maret 2021) dan gue adalah happy users yang dengan senang hati akan [merekomendasikan](https://s3.rizaldy.club/rizaldy-club-ghost/apa-itu-mengapa-menggunakan-tailscale/) Tailscale untuk berbagai kebutuhan. Tailscale adalah sebuah layanan yang menawarkan VPN, dan dibuat diatas Wireguard. Awalnya yang dijual oleh Tailscale adalah solusi VPN tanpa ribet + SSO, seiring berjalan waktu, terdapat fitur-fitur pemanis yang "nice to have" yang salah satunya adalah MagicDNS.
|
||||||
|
|
||||||
|
Setiap komputer pasti memiliki nama, yang gampangnya sebut saja sebuah hostname. Komputer yang sedang gue pakai sekarang bernama `macbook-air` dan dengan mDNS, komputer/perangkat lain dapat mengetahui alamat IP gue tanpa perlu mengkonfigurasi apapun khususnya terkait DNS. Di perangkat Apple sudah terpasang [Zeroconf](http://www.zeroconf.org) by default, yang berarti, gampangnya, iPhone gue bisa mengakses port 80 di laptop gue melalui Safari dengan mengakses `http://macbook-air.local` tanpa setup apapun selagi berada dalam satu jaringan lokal yang sama.
|
||||||
|
|
||||||
|
Fitur MagicDNS nya Tailscale pun tidak jauh berbeda. Gue bisa mengakses Raspberry Pi gue dari mana saja tanpa perlu mengetahui ataupun mengingat alamat IP dari si raspi tersebut. Misal, bila ingin SSH, gue semudah menjalankan `ssh rizaldy@raspi.rizaldy.club.beta.tailscale.net` misalnya, tanpa perlu mengatur apapun, khususnya menambahkankan entri ke DNS.
|
||||||
|
|
||||||
|
Tailscale menawarkan fitur lain yakni HTTPS Certificates. Benefitnya ada 2:
|
||||||
|
|
||||||
|
1. Tidak ada "browser warning" ketika mengakses hostname yang menggunakan alamat IP dari Tailnet gue jika menggunakan protokol HTTPS
|
||||||
|
2. Tidak perlu menulis `device.tailnet.beta.tailscale.net` panjang-panjang
|
||||||
|
|
||||||
|
Nama alternatif dari Tailnet gue adalah `tailnet-fdxx` (redacted), jadi gue bisa menggunakan `ssh rizaldy@raspi.tailnet-fdxx` yang menghemat beberapa huruf.
|
||||||
|
|
||||||
|
Bagian menariknya lagi adalah bila mengaktifkan MagicDNS, di berkas `/etc/resolv.conf` kita akan terdapat entri tambahan (search) yang digunakan untuk "meng-append". Let's say gue menjalankan `ssh rizaldy@raspi`, berdasarkan entry search yang ada di berkas tersebut, komputer gue akan mencoba `raspi.xx`, `raspi.xxx`, `raspi.xxxx` sampai ter-resolve.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/09/CleanShot-2022-09-03-at-03.02.05@2x.png)
|
||||||
|
Di kasus gue, ketika gue menjalankan `ping iphone-xs`, komputer gue akan mencoba:
|
||||||
|
|
||||||
|
- iphone-xs.tailnet-xxxx.ts.net
|
||||||
|
- iphone-xs.rizaldy.club.beta.tailscale.net
|
||||||
|
- iphone-xs.lan
|
||||||
|
|
||||||
|
Sampai berhasil satu dari 3 pilihan diatas berhasil.
|
||||||
|
|
||||||
|
## MagicDNS
|
||||||
|
|
||||||
|
Sekilas ini hanyalah sistem DNS biasa, namun bagian menariknya adalah TLD `*.ts.net` dan `*.beta.tailscale.net` hanya bisa di-resolve oleh perangkat yang berada di Tailnet yang sama. Seperti, jika perangkat gue berada di tailnet `rizaldy.club` dan sedangkan gue ingin mendapatkan alamat IP dari perangkat yang berada di Tailnet `delman.io` misalnya, DNS tidak akan meresponse apa-apa.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/09/CleanShot-2022-09-03-at-03.12.20@2x.png)
|
||||||
|
Kasus diatas terjadi karena komputer `fariz-devbox` berada di Tailnet yang sama (di delman.io dan rizaldy.club), in fact, Tailscale memiliki fitur "Share machine" yang tujuan gue adalah agar tidak perlu switch account.
|
||||||
|
|
||||||
|
Disitu terlihat bahwa di `fariz-devbox` bisa resolve domain `.delman.io` tapi tidak bisa resolve domain `.rizaldy.club`. Sedangkan di `workstation`, disitu bisa resolve `.rizaldy.club` dan `fariz-devbox.delman.io.beta.tailscale.net`, namun tidak bisa resolve `desxxxxxxxgnr.delman.io.beta.tailscale.net`, karena sesederhana mesin tersebut tidak berada di satu Tailnet dengan gue.
|
||||||
|
|
||||||
|
## MagicDNS + HTTPS
|
||||||
|
|
||||||
|
Di NUC gue ada menjalankan Nginx Proxy Manager yang berjalan di port 80 dan 443, Jika gue ingin mengaksesnya, maka beginilah tampilannya:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/09/CleanShot-2022-09-03-at-03.19.24@2x.png)
|
||||||
|
Dan ini expected. Umumnya peringatan This Connection Is Not Private terjadi karena 2 hal:
|
||||||
|
|
||||||
|
1. Penerbit sertifikat SSL yang digunakan tidak terpercaya
|
||||||
|
2. Sertifikat SSL yang ada bukan untuk domain tersebut
|
||||||
|
|
||||||
|
Untuk poin nomor satu, ini biasanya menggunakan self-signed certificate. Umumnya terjadi di jaringan yang ingin mengintip aktivitas berinternet lo mengingat koneksi HTTPS menggunakan enkripsi end-to-end. Yang gampangnya, proses dekripsi bukan berada di komputer lo langsung, melainkan di somewhere (in the middle) yang tertarik dengan aktivitas berinternet lo.
|
||||||
|
|
||||||
|
Untuk nomor dua juga kurang lebih sama. Tapi terkadang memang karena kesalahan dari si admin yang memberikan sertifikat SSL yang salah meskipun domain yang berbeda berada di satu mesin yang sama.
|
||||||
|
|
||||||
|
Kembali ke pembahasan, secara teknis, pesan peringatan diatas kurang relevan karena koneksi ke `nuc.rizaldy.club.xxx` tersebut ter-enkripsi secara end to end (via Wireguard). Namun masalah utamanya adalah penerbit sertifikat yang digunakan—menurut si peramban (Safari)—tidak terpercaya karena hanya beberapa penerbit saja yang dia percaya, dan ini normal.
|
||||||
|
|
||||||
|
Tailscale menawarkan fitur HTTPS Certificate yang sederhananya mereka akan memberikan sertifikat SSL yang diterbitkan oleh penerbit terpercaya untuk beberapa peramban, yang mana dalam kasus ini penerbitnya adalah [Let's Encrypt.](https://letsencrypt.org)
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/09/CleanShot-2022-09-03-at-03.30.16@2x.png)
|
||||||
|
Sehingga pesan annoying sebelumnya menghilang!
|
||||||
|
|
||||||
|
Jika menggunakan fitur HTTPS Certificates, Tailscale akan menyediakan domain alternatif (seperti `tailnet-fxxx.ts.net`) alih-alih menggunakan `delman.io.beta.tailscale.net` misalnya.
|
||||||
|
|
||||||
|
Ini memberikan tiga keuntungan:
|
||||||
|
|
||||||
|
1. Gue tidak perlu setting DNS untuk devbox gue
|
||||||
|
2. Gue tidak mendapatkan pesan "Connection is not secure" di peramban favorit gue
|
||||||
|
3. Hostname/domain yang gue gunakan tersebut terjamin hanya bisa diakses oleh perangkat yang berada di satu Tailnet dengan gue
|
||||||
|
|
||||||
|
Karena hal itu, gue bisa menggunakan hostname tersebut sebagai virtual hosts di reverse proxy yang berada di devbox gue tersebut, misal seperti ini:
|
||||||
|
|
||||||
|
fariz-devbox.tailnet-fxxx.ts.net {
|
||||||
|
reverse_proxy /grafana* http://grafana
|
||||||
|
reverse_proxy /console* http://wetty
|
||||||
|
|
||||||
|
reverse_proxy * http://code-server
|
||||||
|
}
|
||||||
|
|
||||||
|
## SNI Gotcha
|
||||||
|
|
||||||
|
Masalah klasik dari VPN adalah "perimeter security", yang gampangnya, segala sesuatu yang berada dalam VPN, otomatis dianggap aman. Silahkan gunakan poin nomor tiga—yang sempat gue sebutkan diatas—sebagai contoh.
|
||||||
|
|
||||||
|
Kasus sederhananya adalah akses ke aplikasi web yang menggunakan reverse proxy. Of course gue sadar dengan adanya reverse proxy saja sudah mengurangi keamanan, tapi sayangnya menggunakan reverse proxy adalah hal yang umum sekarang.
|
||||||
|
|
||||||
|
Masalah terjadi ketika si penyerang mengetahui alamat IP publik dari perangkat gue. Meskipun kemungkinannya sangat kecil, namun attack vector dari threat model ini adalah "ex-employee", misalnya.
|
||||||
|
|
||||||
|
Misal ada aplikasi internal yang hanya bisa diakses via VPN, namun gue tahu alamat IP publik tempat si aplikasi internal tersebut berjalan. Kita gunakan `fariz-devbox` sebagai contoh agar lebih mudah.
|
||||||
|
|
||||||
|
Yang mana aplikasi internal tersebut berjalan di `fariz-devbox.tailnet-fxxx.ts.net`.
|
||||||
|
|
||||||
|
Karena penyerang sudah bukan lagi karyawan di perusahaan, maka akses SSO sudah dicabut. Karyawan sudah tidak bisa melakukan autentikasi via Google Workspace.
|
||||||
|
|
||||||
|
Yang berarti, sudah tidak bisa lagi berada di Tailnet perusahaan tersebut, yang mana berguna untuk bisa me-resolve `.ts.net` dengan fitur MagicDNS nya Tailscale.
|
||||||
|
|
||||||
|
Tapi DNS hanyalah DNS. DNS hanyalah sebuah sistem untuk mendapatkan alamat IP dari hostname yang dimaksud.
|
||||||
|
|
||||||
|
Dengan MagicDNS, response alamat IP yang akan diberikan adalah alamat IP private si Tailnet, dan ini intended. Dengan menggunakan DNS sederhana melalui `/etc/hosts`, kita secara teknis bisa akses aplikasi internal tersebut sekalipun berada diluar Tailnet perusahaan.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/09/Unknown.png)
|
||||||
|
Disitu terlihat bahwa gue menggunakan custom DNS dan gue mematikan Tailscale gue setelah menambahkan entri di `/etc/hosts`. Dan ini aplikasi yang gue akses:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/09/CleanShot-2022-09-03-at-04.06.00@2x.png)
|
||||||
|
Yes, sebuah terminal. Tanpa autentikasi.
|
||||||
|
|
||||||
|
Tentu ini kesalahan sysadmin. Sysadmin tidak menggunakan middleware untuk memfilter "IP allowlist". Dan setelah menggunakan middleware, berikut tampilannya:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/09/CleanShot-2022-09-03-at-04.19.45@2x.png)
|
||||||
|
Karena akses ke aplikasi internal tersebut seharusnya berasal dari VPN (Tailscale menggunakan subnet 100.64.0.0/10), maka seharusnya berasal dari IP tersebut.
|
||||||
|
|
||||||
|
## Penutup
|
||||||
|
|
||||||
|
Gue agak bosan mendengar celotehan "ini cuma bisa diakses via VPN kok, jadi aman lah". VPN pada dasarnya hanyalah overlay network, sebuah jaringan pribadi diatas dibawah jaringan publik (internet). Celotehan selanjutnya adalah tentang ["firewall berlapis"](https://twitter.com/evilfactorylabs/status/1565271233209307136), silahkan Googling sendiri, pasti dapat sumbernya :))
|
||||||
|
|
||||||
|
Asumsi "menggunakan VPN = aman" menurut gue karena 3 hal:
|
||||||
|
|
||||||
|
1. Koneksi terenkripsi
|
||||||
|
2. Menggunakan IP private
|
||||||
|
3. Untuk tersambung ke VPN, lo harus autentikasi dulu
|
||||||
|
|
||||||
|
Dan ini dapat dimengerti.
|
||||||
|
|
||||||
|
Nyatanya, di sistem yang menggunakan VPN dan fiReWaLL berLaPiS pun masih saja ada yang kebobolan.
|
||||||
|
|
||||||
|
Mungkin gue compare nya tidak fair. Biasanya VPN paling berguna untuk menghubungkan mesin yang air gap. Yang untuk bisa mengakses ke mesin tersebut harus melalui "jumphost" yang berada di VPN.
|
||||||
|
|
||||||
|
Dan jika mesin jumphost tersebut kebobolan? Ya [jumping](https://www.google.com/search?q=web+shell+jumping) kita.
|
||||||
|
|
||||||
|
Alternatif dari VPN adalah ada sebuah konsep bernama Zero Trust, yang mana dipopulerkan oleh [BeyondCorp](https://cloud.google.com/beyondcorp) nya Google. Model dari Zero Trust ini adalah "Trust but verify" dan salah satu penerapannya ada di IAP atau Identity-Aware Proxy yang mana termasuk dalam kategori Zero Trust Access.
|
||||||
|
|
||||||
|
Mengambil contoh gue yang sebelumnya, salah satu faktor yang gue gunakan adalah gue berasumsi bahwa aplikasi hanya bisa diakses dari jaringan tertentu, yang mana dari subnet 100.64.0.0/10. Jika menerapkan zeRo trUsT ini, gue tidak mengambil "jaringan tertentu" tersebut sebagai salah satu faktor. Umumnya di zero trust model ini faktornya adalah si pengguna dan perangkatnya. Bukan tentang si perangkat dengan alamat IP 100.86.101.4.
|
||||||
|
|
||||||
|
Jika pengguna dengan alamat email me@rizaldy.club boleh mengakses B, maka bisa mengakses B. Tapi misalnya hanya boleh dari perangkat X (macbook) dan tidak bisa dari perangkat lain sekalipun penggunanya adalah me@rizaldy.club.
|
||||||
|
|
||||||
|
Tailscale menggunakan pendekatan yang sedikit berbeda.
|
||||||
|
|
||||||
|
Jika model zero trust umumnya tidak peduli berada di jaringan mana (sekalipun itu internet), Tailscale tetap menggunakan pendekatan VPN + model zero trust yang sempat disinggung.
|
||||||
|
|
||||||
|
Namun berbeda dengan solusi VPN pada umumnya, Tailscale menggunakan model peer-to-peer dan tanpa VPN gateway. Technically Tailscale (sebagai penyedia layanan) memiliki control plane tapi tidak bertindak sebagai VPN gateway.
|
||||||
|
|
||||||
|
Gue personally tidak "mendewakan" Tailscale. Dalam praktiknya gue menggunakan solusi lain juga seperti Cloudflare Access dan Pomerium. Tapi jika masalah yang gue miliki bisa diselesaikan oleh Tailscale, maka gue akan berhenti disitu dan tidak melanjutkan mempertimbangkan Cloudflare Access lalu ke Pomerium.
|
||||||
|
|
||||||
|
Sebagai penutup, kasus yang gue angkat di tulisan ini adalah kasus yang agak umum terjadi di VPN yang tidak menggunakan pendekatan "BeyondCorp" ini. Solusi VPN yang menjual "Zero Trust" dan "Beyond Corp" biasanya menggunakan reverse proxy, in fact, di bagian [comparisons](https://tailscale.com/compare/) nya Tailscale rata-rata alternatifnya menggunakan reverse proxy sebagai pengganti VPN.
|
||||||
|
|
||||||
|
...yang tentu saja masih menggunakan VPN untuk menghubungkan 2 jaringan berbeda, yang mungkin sekarang lebih relevan disebut "VPC".
|
||||||
|
|
||||||
|
Anyways, jika membutuhkan solusi untuk "akses layanan dari mana saja", give Tailscale a try. You deserve it.
|
||||||
|
|
||||||
|
Ingin akses Pi-hole di rumah dari mana saja? Akses Firefly-III di server rumah dari mana saja? Akses SSH di cloud tanpa ribet ngurus SSH keys dari mana saja?
|
||||||
|
|
||||||
|
Bulan lalu gue ada pekerjaan untuk menghubungkan infrastruktur yang ada di GCP dan AWS. Beberapa layanan berada di VPC nya GCP, dan infrastruktur di AWS perlu terhubung ke layanan tersebut. Tentu saja kasus ini membutuhkan VPN untuk menghubungkan 2 jaringan berbeda.
|
||||||
|
|
||||||
|
Dan jika VPN tersebut tidak menggunakan Tailscale, gue rasa gue akan lebih stress daripada sekarang.
|
||||||
|
|
||||||
|
Karena berurusan dengan VPN selalu membuat stress.
|
||||||
|
|
||||||
|
Dan menggunakan Tailscale, membuatnya menjadi less stress.
|
||||||
|
|
||||||
|
Tetep stress, cuman lebih sedikit.
|
||||||
|
|
||||||
|
Sekarang sudah tidak terlalu stress.
|
||||||
|
|
||||||
|
Karena sudah tidak ada VPN diantara kita HAHAHA.
|
152
content/tailscale-vs-pomerium.md
Normal file
152
content/tailscale-vs-pomerium.md
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
---
|
||||||
|
title: Tailscale vs Pomerium
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: tailscale-vs-pomerium
|
||||||
|
date: 2022-12-18T04:20:50.000Z
|
||||||
|
date_updated: 2022-12-18T04:20:50.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Beberapa dari pembaca blog ini pasti sudah tahu jika [gue](https://init8.lol/expose-web-services-at-home-via-tailscale-for-fun/)[adalah](https://init8.lol/syncthing-anywhere-with-tailscale/)[fans](https://s3.rizaldy.club/rizaldy-club-ghost/tailscale-dan-magic/)[berat](https://s3.rizaldy.club/rizaldy-club-ghost/apa-itu-mengapa-menggunakan-tailscale/)[Tailscale](https://tailscale.com). Bukan hanya Wireguard mengubah pendekatan untuk membuat VPN, tapi kombinasi dari solusi yang ditawarkan Tailscale mengubah cara pandang tentang bagaimana memperlakukan jaringan private. Dari yang sebelumnya hanya menggunakan Tailscale untuk keperluan pribadi, pada bulan April kemarin, di kantor gue resmi berlangganan Tailscale sampai hari ini dan seterusnya.
|
||||||
|
|
||||||
|
VPN sederhananya adalah tentang menghubungkan jaringan pribadi diatas jaringan publik (internet). Misal, jika ingin menghubungkan jaringan rumah gue (192.168.100.0/24) dengan komputer gue somewhere di GCP, setidaknya ada 2 pilihan:
|
||||||
|
|
||||||
|
1. Hubungkan router gue dengan ke router yang ada di data center GCP lewat kabel
|
||||||
|
2. Bikin VPN
|
||||||
|
|
||||||
|
Pilihan nomor satu tentu tidak mungkin, menghubungkan router gue dari Cilandak ke somewhere `asia-southeast-2` lewat kabel adalah lelucon. Dan of course, tidak akan pernah terjadi sekalipun di kondisi "bisa aja".
|
||||||
|
|
||||||
|
Pilihan nomor dua adalah yang paling masuk akal. Komputer gue terhubung ke komputer yang ada di data center GCP secara virtual, melalui jaringan internet. Kabel penghubung dari VPN dalam konteks ini adalah transport protocol alias apapun yang berada di layer 4. Dengan setup tertentu, komputer gue di GCP yang memiliki alamat IP private `10.184.0.18` dapat berkomunikasi dengan komputer gue di rumah yang memiliki alamat IP `192.168.100.46` yang mana berada di subnet berbeda.
|
||||||
|
|
||||||
|
Sepertinya cukup untuk pengenalan VPN secara singkat, dan sepertinya gue tidak perlu membahas tentang mengapa menggunakan Tailscale. Melainkan, kita akan bahas tentang apa yang menjadi judul dari tulisan ini.
|
||||||
|
|
||||||
|
## Sekilas tentang Pomerium
|
||||||
|
|
||||||
|
Singkatnya, Pomerium adalah sebuah reverse proxy. Hal yang sama ketika lo mengakses blog ini, blog ini berjalan di jaringan rumah gue, dan agar bisa diakses oleh pengguna internet, reverse proxy yang berjalan di jaringan Cloudflare meneruskan request ke server rumah gue dari komputer lo, dan sebaliknya.
|
||||||
|
|
||||||
|
Seperti reverse proxy lainnya dari Nginx; OpenResty, HAProxy, Traefik, H2O, Caddy, dsb.
|
||||||
|
|
||||||
|
Yang berbeda dari Pomerium adalah Pomerium terintegrasi dengan IdP by... design? or default? Di [tulisan ini](https://s3.rizaldy.club/rizaldy-club-ghost/tailscale-dan-magic/) sekilas gue bahas tentang bagaimana serangan DNS rebinding dapat terjadi berikut dengan pencegahannya yang mana dengan menggunakan middleware untuk memasukkan `100.64.0.0/10` ke allowlist secara eksplisit, yang technically ini kesalahan admin, dan masalah terkait VPN pada umumnya adalah *semua yang berada di jaringan VPN dianggap terpercaya.*
|
||||||
|
|
||||||
|
Autentikasi di Tailscale adalah per perangkat. Setiap perangkat harus melakukan autentikasi melalui IdP yang digunakan, misal, Google SSO. Jika koneksi tersambung end-to-end antar perangkat, kita harus mempercayakan Tailscale sebagai control plane nya.
|
||||||
|
|
||||||
|
Tailscale juga menawarkan ACL, ini adalah tentang siapa dapat mengakses apa. Misal, ada internal services yang hanya boleh diakses oleh grup `finance`, dan ada yang hanya boleh diakses melalui grup `engineering`. Disamping itu, hanya grup `devops` dan `admin` yang dapat akses apapun sekalipun ke port 22.
|
||||||
|
|
||||||
|
Problem dari Tailscale adalah bagaimana bila seseorang tanpa VPN client ingin mengakses internal services tersebut?
|
||||||
|
|
||||||
|
...tanpa mengorbankan sisi keamanan.
|
||||||
|
|
||||||
|
Salah satu internal services yang paling banyak diakses oleh developers di tempat gue sekarang adalah `ddl-backdoor`, ini adalah codename tempat "VSCode in browser" berjalan. Services ini menjalankan container (podman) dalam container (containerd), siapapun—khususnya yang sedang on-call—dapat mengakses lingkungan production yang hanya diperuntukkan untuk keperluan bisnis.
|
||||||
|
|
||||||
|
Services ini berjalan di VPC khusus yang sama dengan production. Untuk dapat mengakses services tersebut, setidaknya ada 3 hal yang bisa dipilih:
|
||||||
|
|
||||||
|
1. Membuat VM ephemeral yang berada di VPC tersebut. Ini impossible, karena pada akhirnya tidak ada akses SSH kesana :)
|
||||||
|
2. Menjalankan Tailscale sebagai sidecar
|
||||||
|
3. Menggunakan reverse proxy sebagai penghubung antara internet dengan internal services tersebut
|
||||||
|
|
||||||
|
Nomor 2 tidak kita pilih, karena goals nya adalah untuk bisa mengakses services tersebut tanpa software tambahan, dalam kasus ini berarti VPN client (Tailscale).
|
||||||
|
|
||||||
|
Untuk nomor 3, kita harus memastikan bahwa hanya pengguna internet tertentu yang dapat mengaksesnya. Daripada membuat "authentication layer" sendiri yang tidak ISO compliant, kita ingin menggunakan Google SSO, sebagaimana ketika mendaftarkan device di jaringan Tailscale.
|
||||||
|
|
||||||
|
Pomerium exactly melakukan hal tersebut.
|
||||||
|
|
||||||
|
Ketika siapapun mengakses services internal tersebut, dia akan diarahkan ke SSO provider terlebih dahulu. Pomerium menawarkan ACL serupa meskipun tidak head-to-head sama dengan Tailscale. Hanya orang-orang dengan alamat email yang sudah ditentukan yang dapat mengakses services tersebut, sisanya denied.
|
||||||
|
|
||||||
|
Disini gue harus mempercayakan Pomerium sebagai control plane, dan kabar baiknya, Pomerium adalah produk Open Source dan dapat dijalankan self-hosted.
|
||||||
|
|
||||||
|
## Pomerium & Tailscale
|
||||||
|
|
||||||
|
Pada dasarnya ini adalah dua hal berbeda: Pomerium adalah reverse proxy dan Tailscale adalah VPN. Meskipun sama-sama menawarkan akses dan keamanan, ini memiliki 2 pendekatan berbeda.
|
||||||
|
|
||||||
|
Misal untuk menghubungkan 2 subnet berbeda (point-to-point). Untuk menghubungkan jaringan `10.0.10.0/24` dengan `10.0.9.0/24`, kedua gateway tersebut setidaknya harus terhubung di satu switch/router yang sama. Jika tidak memungkinkan secara fisik, tentu saja alternatifnya dengan menghubungkannya secara virtual. Yang berarti, membuat VPN.
|
||||||
|
|
||||||
|
Meskipun Pomerium mendukung [TCP proxy](https://www.pomerium.com/docs/capabilities/tcp) (TCP over HTTP), ini membutuhkan software/klien tambahan dan yang paling penting, tidak menyelesaikan masalah sebelumnya.
|
||||||
|
|
||||||
|
Yang berarti, jika dihadapkan pertanyaan "Mending menggunakan Tailscale atau Pomerium?" jawabannya adalah "yes".
|
||||||
|
|
||||||
|
Pilih keduanya.
|
||||||
|
|
||||||
|
## Tailscale Funnel
|
||||||
|
|
||||||
|
Pada tanggal 17 November 2022 kemarin, Tailscale [mengumumkan](https://tailscale.com/blog/introducing-tailscale-funnel/) fitur baru bernama [Tailscale Funnel](https://tailscale.com/kb/1223/tailscale-funnel/). Fitur ini masih dalam status alpha dan invite-only, tapi ini [invite link](https://login.tailscale.com/admin/feature/qVzX87HY4mK) nya jika ingin mencoba.
|
||||||
|
|
||||||
|
Tailscale Funnel memungkinkan apa yang dilakukan oleh Pomerium. Karena masih dalam status alpha, ada beberapa limitasi:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/12/CleanShot-2022-12-18-at-16.27.27.png)
|
||||||
|
Dan yang harus digaris bawahi adalah yang pertama: DNS hanya bisa di resolve oleh perangkat yang berada dalam 1 tailnet. Tapi untuk demo, kita bisa berbuat curang sedikit untuk mendapatkan gambaran.
|
||||||
|
|
||||||
|
Setelah mengaktifkan funnel, layanan gue bisa diakses di `colima.tailnet-ead2.ts.net`.
|
||||||
|
|
||||||
|
Ini adalah "mesin" yang ingin gue gunakan untuk mengakses layanan tersebut:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/12/CleanShot-2022-12-18-at-16.40.23.png)
|
||||||
|
Disitu terlihat bahwa tidak ada interface `tailscale0` atau apapun yang bertanggung jawab untuk melakukan routing ke `100.64.0.0/10` (Tailscale). Berdasarkan hasil traceroute diatas, gampangnya:
|
||||||
|
|
||||||
|
1. Request ke 100.64.0.0/10 akan di handle oleh si gateway di docker network (172.19.0.1)
|
||||||
|
2. Si gateway tersebut meneruskan request ke gateway lain yang mana ip di mesin gue 192.168.5.2
|
||||||
|
3. Seharusnya request selanjutnya diarahkan ke container dengan ip 172.17.0.2, tempat si Tailscale Funnel gue berjalan. Disini gue menggunakan user-space networking karena si Tailscale berjalan di container
|
||||||
|
|
||||||
|
Setup diatas agak valid untuk menggambarkan "tidak ada Tailscale yang berjalan di mesin A" ketika si mesin A mencoba akses port 443 ke mesin B via `colima.tailnet-ead2.ts.net`.
|
||||||
|
|
||||||
|
Dan berikut tampilannya:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/12/CleanShot-2022-12-18-at-16.47.45.png)
|
||||||
|
## Tailscale funnel wishlist
|
||||||
|
|
||||||
|
Gue belum mencoba apakah menambahkan CNAME ke `target.tailnet-xxxx.ts.net` dapat berhasil. Di setup kantor gue, gue menggunakan wildcard domain (*.something.io) untuk internal services, yang mana merujuk ke IP si ingress, yang kemudian meneruskan request nya ke si Pomerium.
|
||||||
|
|
||||||
|
Jika hal tersebut memungkinkan, ini sangat menarik. Seperti, untuk akses ke `backdoor.x.something.io` diarahkan ke `backdoor.tailnet-xxxx.ts.net` , jika diakses melalui device yang terpasang Tailscale dan berada dalam 1 tailnet, ini bisa langsung terhubung tanpa harus login ke SSO lagi.
|
||||||
|
|
||||||
|
Jika tidak, gue rasa akan diarahkan melalui `ingress-xxx-xx.tailscale.com` yang mana per tulisan ini dibuat memiliki IP `208.111.34.11` untuk `ingress-sfo-01.tailscale.com`, dan semoga login melalui SSO memungkinkan. Yang semoga juga Tailscale menawarkan "bring your own ingress" sebagaimana fitur "bring your own DERP" yang sudah gue lakukan sejak lama.
|
||||||
|
|
||||||
|
Jika dua hal diatas memungkinkan, ini bisa menghapus ketergantungan gue ke Pomerium. ACL dapat dilakukan di level Tailscale, misal, seperti:
|
||||||
|
|
||||||
|
"acls": [
|
||||||
|
{
|
||||||
|
"action": "accept",
|
||||||
|
"src" : ["@something.io"],
|
||||||
|
"dst" : ["funnel:443"],
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
Yang maksudnya, setiap request yang datang dari seseorang yang terautentikasi sebagai `@something.io`, dapat mengakses port 443 di semua hosts yang berada di grup `funnel`.
|
||||||
|
|
||||||
|
Tapi disini ada bias. Strategi pricing Tailscale adalah per user. Paket Team nya memungkinkan untuk 4 users (identitas) terhubung ke Tailnet. Yang berarti, 4 users tersebut adalah:
|
||||||
|
|
||||||
|
- user-a@something.io
|
||||||
|
- user-b@something.io
|
||||||
|
- user-c@something.io
|
||||||
|
- user-d@something.io
|
||||||
|
|
||||||
|
Setiap users mendapatkan jatah 5 devices, yang berarti, untuk paket Team, setidaknya ada maksimal 20 devices yang bisa didaftarkan. Addons nya adalah $5/user jika sudah masuk ke limit users atau $4.20/10 devices jika limit nya ada di devices.
|
||||||
|
|
||||||
|
Jika "Login with SSO" ketika mengakses Tailscale Funnel (jika memang ada) dihitung berdasarkan users, ini kurang fair. Pertama, alasan utama menggunakan Tailscale Funnel adalah agar users yang tidak memasang Tailscale di perangkatnya masih bisa mengakses something. Karena poin pertama tersebut, jika kondisi *"daftar tapi tidak perlu memasang tailscale"* memungkinkan, ini masih kurang fair, karena total devices selalu dihitung dari total users.
|
||||||
|
|
||||||
|
Menurut gue perhitungan yang paling fair adalah dengan menggunakan pool bandwidth, sebagaimana poin 3 dari bagian "Limitations" nya. Misal, bila 1 device memiliki jatah 10 GB bandwidth, setidaknya paket plan memiliki 50 GB bandwidth pool, yang mana cukup fair. Jika melebihi limit, alih-alih harus menambahkan users/devices, alternatifnya bisa membeli addons, misal, $4.20/20 GB. Ini gue rasa win-to-win karena tidak ada redundant users/devices, dan bandwidth tersebut untuk membayar si "ingress".
|
||||||
|
|
||||||
|
Disamping itu ACL pun menjadi barang yang dijual Tailscale. Untuk paket Team, mereka mendapatkan 5 unique users in ACLs. Addons nya adalah $5/users. Dilemanya ada 2:
|
||||||
|
|
||||||
|
1. Ada built-in ACL untuk non-tailscale users yang mengakses Funnel, yang mana digeneralisir misal menjadi `funnel@something.io`, yang berarti tidak ada unique users in ACLs (setiap users dengan @something.io dapat mengakses funnel apapun)
|
||||||
|
2. Tidak ada "built-in ACL untuk non-tailscale users" alias semuanya dianggap as is
|
||||||
|
|
||||||
|
Poin pertama ini make sense diterapkan karena, sekali lagi, ACL adalah salah satu barang yang dijual Tailscale. Dilemanya adalah jika setiap users yang mengakses funnel dianggap as is sebagaimana di poin kedua, dan gue belum menemukan win-win solution untuk hal itu.
|
||||||
|
|
||||||
|
## Penutup
|
||||||
|
|
||||||
|
Jika suatu saat nanti Tailscale Funnel sudah tidak di status Alpha/Beta, dan menawarkan:
|
||||||
|
|
||||||
|
- Fitur Login with SSO secara opsional ketika mengakses Funnel
|
||||||
|
- Dapat membedakan tailnet users dan non-tailnet users
|
||||||
|
- Dapat menjalankan ingress sendiri
|
||||||
|
- Harga ditentukan berdasarkan bandwidth, yang tidak bergantung dengan total users/devices
|
||||||
|
|
||||||
|
Sudah pasti gue akan menghapus ketergantungan dengan Pomerium. Jika salah satu atau keempat poin diatas tidak memungkinkan, mungkin gue akan menggunakan Tailscale Funnel untuk kebutuhan pribadi aja, seperti, menghapus ketergantungan dengan Cloudflare Access.
|
||||||
|
|
||||||
|
Untuk saat ini gue masih menyimpan kepercayaan terhadap Pomerium, dan masih menggunakan Tailscale untuk melakukan apa yang tidak bisa Pomerium lakukan.
|
||||||
|
|
||||||
|
Kehadiran Tailscale Funnel membuat "Tailscale bisa melakukan apa yang Pomerium tidak bisa lakukan" yang mana menjadi nilai plus Tailscale, dari yang sebelumnya "Pomerium bisa melakukan apa yang Tailscale tidak bisa lakukan" yakni melakukan HTTP(s) proxy dengan prinsip ZeRO trUsT.
|
||||||
|
|
||||||
|
Kompetitor utama Tailscale yang menurut gue paling potensial adalah [Twingate](https://www.twingate.com), meskipun gue belum pernah mencobanya.
|
||||||
|
|
||||||
|
...dan tentu saja Cloudflare.
|
||||||
|
|
||||||
|
Pomerium adalah solusi lain untuk masalah lain, tapi gue rasa, Pomerium tidak bisa memberikan solusi yang Tailscale berikan, **kecuali, **mengubah direksi menjadi "solusi ZTNA dengan pendekatan berbeda lainnya".
|
||||||
|
|
||||||
|
Dan dari persaingan VPN dan ZTNA ini, gue hanya ingin melihat Tailscale menang.
|
134
content/technology-reality.md
Normal file
134
content/technology-reality.md
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
---
|
||||||
|
title: Technology & Reality
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: technology-reality
|
||||||
|
date: 2023-01-27T15:40:08.000Z
|
||||||
|
date_updated: 2023-01-27T15:40:08.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Pada 28 Oktober 2022 kemarin, sebuah platform hasil karya anak bangsa™ dengan iming-iming "metaverse" [diluncurkan](https://archive.md/hmooO). Platform tersebut cukup besar, mengingat "terhubung dengan IKN Nusantara" menjadi daya jual utamanya. Tidak sedikit yang percaya dan yakin jika Metaverse adalah masa depan terlepas pro dan kontra yang ada.
|
||||||
|
|
||||||
|
Prasarana untuk memfasilitasi teknologi tersebut terus bertumbuh dan berkembang, dan rebranding teknologi VR menjadi Metaverse adalah sebuah keharusan karena Metaverse diyakini tidak hanya sebatas tentang realitas virtual.
|
||||||
|
|
||||||
|
Yang diiringi dengan rebranding sebuah perusahaan yang kebetulan memiliki nama yang sama dan juga mempopulerkan teknologi serupa.
|
||||||
|
|
||||||
|
Sebelum zaman informasi seperti sekarang, ruang dan waktu selalu menjadi batasan. Hampir tidak mungkin untuk mengucapkan "selamat pagi" ke orang acak yang berada di benua berbeda, apalagi jika bisa diterima 5 detik setelah ucapan tersebut dilontarkan. Percakapan tatap muka dulu hanya bisa terjadi jika dua atau lebih orang berkumpul di tempat yang sama dan di waktu yang sama.
|
||||||
|
|
||||||
|
Berkat teknologi informasi, batasan-batasan tersebut perlahan menjadi mitos. Layanan perpesanan instan hampir dimiliki oleh setiap pengguna ponsel pintar, dan tidak jarang mendukung fitur untuk memfasilitasi percakapan tatap muka melalui media video yang mana sudah menjadi "gold standard" dalam bersosial di dunia digital.
|
||||||
|
|
||||||
|
Dan juga, sekarang kita menjadi bisa tahu bila di bagian Indonesia yang lain sedang terjadi banjir misalnya, bahkan mungkin beberapa menit setelah banjir tersebut terjadi.
|
||||||
|
|
||||||
|
Mungkin suatu saat nanti bahkan menjadi secepat kedipan mata, ketika setiap milidetik manusia mungkin terasa sangat berharga.
|
||||||
|
|
||||||
|
## Demistifikasi realitas
|
||||||
|
|
||||||
|
Realita sederhananya adalah kenyataan yang benar-benar ada dan terjadi. Lawan kata dari realita sendiri yang paling populer adalah khayalan, yakni sesuatu yang sebenarnya tidak terjadi.
|
||||||
|
|
||||||
|
Dua hal ini cukup abstrak, tapi fondasinya tetap satu: kepercayaan.
|
||||||
|
|
||||||
|
Dalam kepercayaan, setidaknya ada tiga tingkat yang gue ingat dari salah satu pelajaraan ketika di pesantren dulu yang sejujurnya gue lupa pelajaran apa:
|
||||||
|
|
||||||
|
1. Percaya karena berdasarkan kesaksian orang lain
|
||||||
|
2. Percaya karena melihatnya sendiri
|
||||||
|
3. Percaya karena merasakannya sendiri
|
||||||
|
|
||||||
|
Contoh sederhana ketika ingin mencoba makanan yang enak, misalnya. Ketika tidak tahu bagaimana rasanya, kita cenderung akan mencari "review" dari siapapun yang pernah merasakannya.
|
||||||
|
|
||||||
|
Jika masih belum percaya, mungkin kita perlu melihatnya langsung wujud dari makan tersebut. Jika masih ragu, kita mungkin bisa memakannya dan menilai jika makanan tersebut enak ataupun sebaliknya.
|
||||||
|
|
||||||
|
Realita, umumnya berkaitan dengan sebuah kejadian. Untuk dapat menentukan apakah kejadian tersebut benar-benar ada ataupun ternyata tidak terjadi, setidaknya perlu sebuah kesaksian. Seperti, kita tidak akan ingin mempercayai seseorang yang bilang "makanan ini enak" yang padahal dia belum pernah makan makanan tersebut sama sekali.
|
||||||
|
|
||||||
|
Dalam kesaksian, setidaknya melibatkan indera. Baik itu indera penglihat, pendengar, pencium, pengecap, ataupun peraba. Pembeda kontras dari sesuatu yang terjadi adalah kita bisa merasakan bagaimana sesuatu itu terjadi, berkat indera. Jika kita menggambarkan/menyaksikan sesuatu tanpa bisa menjelaskan bagaimana bentuknya; suaranya, harumnya, rasanya ataupun teksturnya, besar kemungkinan sesuatu tersebut sebatas khayalan.
|
||||||
|
|
||||||
|
Di dunia digital, segala sesuatu hanyalah tentang 0 dan 1. Setidaknya sebelum komputasi quantum menjadi sesuatu. Merdunya suara yang terdengar di pengeras suara dan indahnya citra yang dilihat dilayar, adalah kumpulan informasi yang terdiri dari 0 dan 1 yang menginstruksikan sesuatu untuk mengeluarkan sinyal ataupun untuk menampilkan piksel.
|
||||||
|
|
||||||
|
Di dunia fisik, segala sesuatu yang bersifat fisik menjadi batasan. Seperti, untuk membuat kursi kayu, setidaknya harus memiliki kayu terlebih dahulu. Berbeda dengan dunia digital yang keterbatasannya pada dasarnya hanyalah kreativitas, tidak ada yang bisa memberhentikan seseorang di dunia digital untuk menjadikan elang sebagai alat transportasi jika bisa membuatnya terjadi.
|
||||||
|
|
||||||
|
Lalu, apakah sesuatu yang dilihat tersebut bersifat khayalan hanya karena tidak pernah terjadi di dunia fisik?
|
||||||
|
|
||||||
|
Jadi, apakah "dunia fisik" yang dijalani sekarang adalah "dunia nyata" dan bukan... idk, fatamorgana?
|
||||||
|
|
||||||
|
## Rekonstruksi realitas
|
||||||
|
|
||||||
|
Ada satu bagian di buku [Sapiens](https://www.goodreads.com/book/show/23692271-sapiens) yang menjelaskan tentang sesuatu yang membuat manusia bisa hidup sampai hari ini dan menjadi "penguasa" di planet ini adalah kemampuannya untuk mempercayai sesuatu yang tidak ada, jika tidak salah ingat ataupun salah paham.
|
||||||
|
|
||||||
|
Dan pada dasarnya, kita manusia selalu memperjuangkan sesuatu yang tidak ada untuk membuatnya menjadi ada.
|
||||||
|
|
||||||
|
Misal, kebahagiaan. Kondisi "tidak bahagia" simply karena kita tidak memiliki... rasa bahagia? Siapapun yang ingin bahagia, dia akan berusaha untuk mencari ataupun membuat sendiri sesuatu yang bisa membuat dia memiliki rasa bahagia tersebut.
|
||||||
|
|
||||||
|
Cerita sedikit, salah satu tempat favorit gue di pesantren adalah loteng, hanya orang-orang tertentu yang bisa dan mau pergi kesana. Loteng adalah tempat yang "sakral" dan terlarang dan siapapun akan dihukum berat jika ketahuan berada disana dan tidak memiliki kepentingan. Hidup dalam keseharian yang didikte dengan pukulan lonceng dan tatapan pengurus, loteng menjadi surga bagi siapapun yang ingin beristirahat dari hiruk pikuk aturan pesantren yang berjilid-jilid.
|
||||||
|
|
||||||
|
Jika sedang di loteng, gue menciptakan dunia gue sendiri. Dunia yang damai, dunia yang tidak peduli jarum jam, dunia tempat dimana melakukan sesuatu yang mustahil, bisa terjadi. Santri macam apa yang sedang merokok dan meminum kopi good day sambil tiduran menatap langit ketika masyarakat lain sedang khusyuk berdzikir?
|
||||||
|
|
||||||
|
Karena hidup pada akhirnya adalah tentang pilihan, setidaknya kita memiliki 2 opsi: membuat atau mengikuti.
|
||||||
|
|
||||||
|
Bagi yang kreatif, mereka akan cenderung untuk membuat daripada mengikuti. Menciptakan makna kebahagiaan sendiri, menciptakan makna kesuksesan sendiri, menciptakan dunia nya sendiri. Bagi yang rasional, mereka akan cenderung sebaliknya, yang tidak jarang menggunakan kata "realistis" sebagai kartu as.
|
||||||
|
|
||||||
|
Bagian menariknya adalah dua hal tersebut saling ketergantungan. Tidak akan ada pembuat jika tidak ada pengikut, begitupula sebaliknya.
|
||||||
|
|
||||||
|
Kehadiran teknologi informasi membuat peluang dan kesempatan baru untuk apapun yang sebelumnya tidak ada menjadi ada. Butuh waktu yang tidak sebentar untuk mendapatkan kabar terbaru dari belahan dunia, yang sekarang, sekali lagi, mungkin hanya membutuhkan sekian menit. Untuk mendapatkan hiburan pun sudah tidak lagi harus berada di tempat hiburan, karena tempat tersebut sekarang mungkin hanya berjarak 5 cm dari pandangan, entah di samping tangan ataupun di saku celana.
|
||||||
|
|
||||||
|
Ada realita baru yang menjadi bagian hidup dari manusia: sebuah benda yang menjadi dunia mereka itu sendiri.
|
||||||
|
|
||||||
|
Dari benda tersebut mereka bisa mendapatkan kebahagiaan; kesedihan, pengetahuan, hiburan, bahkan uang makan. Tidak sedikit yang menggantungkan nasib dan hidupnya pada benda tersebut, termasuk seseorang yang menerbitkan tulisan yang ada di layar kalian pada saat ini.
|
||||||
|
|
||||||
|
Terlepas si pembuat atau pengikut, setiap orang akan mengambil peran.
|
||||||
|
|
||||||
|
Dan jika tidak, besar kemungkinan akan disebut "ketinggalan zaman" yang tidak jarang diartikan sebagai "kemunduran" alih-alih, idk, bertahan?
|
||||||
|
|
||||||
|
## Realitas virtual
|
||||||
|
|
||||||
|
Bangun pagi di hari kerja untuk "orang kantoran" umumnya diawali dengan mandi, sarapan, lalu mulai bepergian ke sebuah tempat bernama kantor. Jalanan macet adalah pemandangan sehari-hari, dan teriknya cuaca beserta kotornya udara adalah keluhan umum untuk yang mengadu nasib di perkotaan.
|
||||||
|
|
||||||
|
Lalu pada suatu hari para pekerja kantoran tersebut sudah tidak perlu lagi bepergian. Jarak tempuh antara rumah dan "kantor" hanya disekat oleh pintu. Ada sebuah benda aneh di kepalanya, dan dalam sekejap dia berada di ruangan meeting lengkap dengan fasilitas untuk menunjang pekerjaan.
|
||||||
|
|
||||||
|
Tidak ada terik matahari yang dipantulkan dari bangunan berkaca yang membakar kulitnya, tidak ada udara yang bercampur dengan asap dari kendaraan berbahan bakar minyak yang dihirup, dan tidak ada waktu yang terbuang di perjalanan.
|
||||||
|
|
||||||
|
Disamping itu, tidak ada keluarga yang ditinggalkan ketika sudah masuk jam kerja.
|
||||||
|
|
||||||
|
Menikmati hiburan pun mungkin sudah tidak perlu pergi ke bioskop, atau pergi ke bar, atau pergi ke pantai. Semuanya dapat dijangkau melalui benda aneh yang dipasang di kepala tersebut, sekalipun terkadang ruang menjadi batasan untuk di beberapa kondisi.
|
||||||
|
|
||||||
|
Namun pada akhirnya tidak ada yang bisa dilakukan di dunia fisik mustahil dilakukan di dunia virtual.
|
||||||
|
|
||||||
|
Teknologi realita virtual sejauh ini hanya bisa memproyeksi apa yang bisa dilihat & didengar, dan mungkin tinggal menunggu waktu untuk bisa membuat penciuman; pengecapan dan perabaan terjadi.
|
||||||
|
|
||||||
|
Salah satu perubahan yang disebabkan oleh teknologi yang pernah gue alami adalah dalam menikmati hiburan berbentuk video di rumah. Sebelumnya, video umumnya dimainkan di sebuah alat bernama "CD/DVD player" menggunakan sebuah media dalam bentuk piringan. Siapa yang menyangka jika video tersebut sekarang dapat dimainkan melalui sebuah sinyal yang ditransmisi melalui kabel, yang terhubung ke sebuah perangkat, dan tanpa perlu alat khusus untuk memutarnya?
|
||||||
|
|
||||||
|
Mungkin 30 tahun yang lalu kondisi tersebut hanyalah sebatas khayalan.
|
||||||
|
|
||||||
|
Kembali ke realita virtual, salah satu alasan mengapa Metaverse diyakini bukan hanya sebatas teknologi realita virtual adalah metaverse dimaksudkan menjadi sebuah... semesta. Tempat segala peradaban, pengalaman, sejarah, dan keadaan terjadi.
|
||||||
|
|
||||||
|
Aktivitas yang umum dilakukan di dunia fisik, dari bersosial; bekerja, bersenang-senang, apapun, dapat terjadi di dunia virtual ini.
|
||||||
|
|
||||||
|
Jika di realita dunia fisik adalah tentang dunia yang dikelilingi oleh benda-benda fisik, seharusnya sudah tahu jawabannya jika untuk di dunia virtual.
|
||||||
|
|
||||||
|
## Penutup
|
||||||
|
|
||||||
|
Gue salah satu yang pesimis dengan dunia virtual. Atau realita virtual. Atau Metaverse. Terlepas pro dan kontra yang ada.
|
||||||
|
|
||||||
|
Mungkin teknologi informasi membuat hidup manusia menjadi lebih baik, dan sebagaimana dalam menyambut inovasi, akan terdapat banyak peluang dan kesempatan yang seharusnya muncul.
|
||||||
|
|
||||||
|
Jika teknologi informasi memang membuat hidup manusia menjadi lebih baik, gue mempertanyakan mengapa banyak nasihat untuk "going offline", "living off the grid", dan apapun gaya hidup yang memisahkan manusia dengan teknologi, cukup populer?
|
||||||
|
|
||||||
|
Mengapa "kecanduan teknologi" menjadi sesuatu?
|
||||||
|
|
||||||
|
Dan, goooood, dimana ada kolom komentar disitu ada peperangan. Media sosial lebih terlihat seperti platform pemecahan sosial alih-alih untuk menghubungkan.
|
||||||
|
|
||||||
|
Tapi teknologi tidak hanya sebatas dunia digital, dan dunia digital tidak hanya sebatas internet, dan internet, tidak hanya sebatas media sosial.
|
||||||
|
|
||||||
|
Ada sisi lain dari hal diatas yang lebih baik, buruk, dan yang paling buruk.
|
||||||
|
|
||||||
|
Penyakit umum dari sesuatu yang baru adalah takut perubahan. Beberapa yakin ini mengarah ke "takut keluar dari zona nyaman" tapi beberapa yakin ini adalah tentang mempertimbangkan "perubahan yang mengarah ke yang lebih baik atau ke yang lebih buruk".
|
||||||
|
|
||||||
|
Sebagai penutup, gue sedang memerhatikan sebuah benda berwarna hitam yang disebut ponsel. 15 tahun yang lalu, benda ini terlarang. Tidak ada yang boleh membawa benda ini, dan akan dihancurkan dengan palu bagi siapapun yang melanggarnya.
|
||||||
|
|
||||||
|
Benda ini dapat menghasilkan kebahagiaan; kesedihan, kekhawatiran. Benda ini menjadi dunia untuk sebagian orang. Benda ini dimaksudkan sebagai alat untuk menghubungkan manusia, tapi ada banyak kesempatan dan peluang yang dapat dieksplorasi alih-alih hanya sebatas sebagai alat komunikasi.
|
||||||
|
|
||||||
|
Di beberapa kasus, benda ini mengubah makna realita menjadi tentang apa yang ditangkap oleh kamera, bukan sebatas apa yang dilihat oleh indera penglihat. Dan keluarannya membuatnya menjadi lebih liar.
|
||||||
|
|
||||||
|
Teknologi diyakini seperti pisau bermata dua, in fact, segala sesuatu pasti seperti pisau bermata dua.
|
||||||
|
|
||||||
|
Jika suatu hari realita adalah kenyataan yang benar-benar ada dan terjadi di dunia virtual dan apa yang ada di dunia fisik hanyalah khayalan, entahlah, tidak ada lagi alasan untuk menolak dogma jika dunia ini hanyalah fatamorgana.
|
||||||
|
|
||||||
|
Dan bagaimanapun, perubahan zaman pada akhirnya adalah sesuatu yang tidak dapat dihindari.
|
6
content/templates/blog.md
Normal file
6
content/templates/blog.md
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
title: "{{title}}"
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
date: "{{date}}"
|
||||||
|
---
|
52
content/that-gaze.md
Normal file
52
content/that-gaze.md
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
---
|
||||||
|
title: That gaze
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: that-gaze
|
||||||
|
date: 2022-05-08T07:41:38.000Z
|
||||||
|
date_updated: 2022-05-08T07:41:38.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
I once sat with friends while enjoying some coffee and discourse at one of the coffee shops in my hometown, Serang. One of my eyes felt like something—or someone, specifically—was watching towards me yet I was too deep in my friend's story.
|
||||||
|
|
||||||
|
I once peeked to my left and she turned away, I could barely see her full face as my first look was always to the eyes.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
From a distance I saw her standing behind what I used to know "PoS", which stands for "Point of Sales". I see her eyes, the way she looked, and gazed. It reminds me of someone who has that serious look while still maintaining her cute face. She looks kind, and friendly. Her voice sounds like a woman while her outfit looked more than that.
|
||||||
|
|
||||||
|
My mouth wanted to say "hi" but my inner me prevented to do so.
|
||||||
|
|
||||||
|
My soul feels empty yet there is something that still resides there.
|
||||||
|
|
||||||
|
And my conversation with myself disappeared when my friend surprised me.
|
||||||
|
|
||||||
|
They saw what I saw, asked me something to validate, and did something like a friend would normally do. I didn't hear it, I just felt like I was staring someone at someone else, so they didn't have to bother.
|
||||||
|
|
||||||
|
I know I just miss.
|
||||||
|
|
||||||
|
I miss her gaze.
|
||||||
|
|
||||||
|
I miss her eyes.
|
||||||
|
|
||||||
|
I miss her voice.
|
||||||
|
|
||||||
|
Not that gaze, not that eyes, not that voice.
|
||||||
|
|
||||||
|
But her.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
I wanted to ask her favorite song, her current watchlist, her favorite coffee, her favorite book, her day, anything but names.
|
||||||
|
|
||||||
|
It's kinda nice to know someone without ever knowing the name.
|
||||||
|
|
||||||
|
So she probably won't have to wait for the name she wants to hear, while I leave my hometown yet never knowing when I will ever back.
|
||||||
|
|
||||||
|
And I probably won't have to add a new name to my Contacts app, while my contacts only have 13 names.
|
||||||
|
|
||||||
|
And we probably won't have to say "see you later", while we wanted to do so.
|
||||||
|
|
||||||
|
Then life will still goes on,
|
||||||
|
|
||||||
|
without having to say *"goodbye, <name>"*
|
120
content/the-bitter-truth.md
Normal file
120
content/the-bitter-truth.md
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
---
|
||||||
|
title: The bitter truth
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: the-bitter-truth
|
||||||
|
date: 2022-05-17T11:30:48.000Z
|
||||||
|
date_updated: 2022-05-17T11:30:48.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Tahun 2015 gue memutuskan untuk mengambil pendidikan di bangku kuliah mengambil studi Teknik Informatika, jurusan yang seharusnya *related *dengan gue. Kampus yang gue pilih berada di Bandung yang sekaligus menjadi alasan mengapa gue sudah tinggal selama 7 tahun di kota ini.
|
||||||
|
|
||||||
|
Jurusan tersebut, sekali lagi, *related* dengan gue. Hampir semua yang dipelajari seharusnya akan berguna ketika lulus dan berkarir di industri nanti. Beberapa kampus menginginkan lulusan Teknik Informatika menjadi seorang "System Analyst" yang gue rasa sudah kurang relevan khususnya di tahun 2022 seperti sekarang.
|
||||||
|
|
||||||
|
Di tahun kedua yakni 2017, gue mulai berkarir penuh waktu dengan bekerja sebagai Frontend Developer di salah satu *startup *yang berbasis di Bandung. Sebelumnya gue hanya pekerja lepas di [Upwork](https://www.upwork.com/) dengan spesialisasi Fullstack Developer dan System Administrator, dan cukup berpengalaman "bekerja remote" dari sebelum WFH menjadi sesuatu.
|
||||||
|
|
||||||
|
Di tahun tersebut gue masih bisa menyeimbangkan antara pekerjaan dan pendidikan. Bahkan gue masih menyempatkan untuk berkomunitas juga. Seiring berjalan waktu, beban kerja semakin berat dan tanggung jawab semakin banyak. Energi banyak terkuras di pekerjaan sehingga gue harus mengorbankan sesuatu. Yang gue korbankan pada waktu itu adalah pendidikan, alih-alih kesehatan ataupun pekerjaan gue.
|
||||||
|
|
||||||
|
Waktu terus berjalan, dan mengambil kelas karyawan pun tidak efektif sekalipun bayaran semester lebih mahal 1jt dari kelas biasa serta berbagai alasan lainnya. Beberapa mata kuliah ada yang mengulang karena ketidak-becusan gue dalam mempelajari mata kuliah tersebut, dan setiap semester gue kebanyakan mengambil ulang mata kuliah di semester ganjil ataupun semester genap, more or less.
|
||||||
|
|
||||||
|
Pada tahun 2019, gue benar-benar siap untuk meninggalkan dunia perkuliahan.
|
||||||
|
|
||||||
|
Pertimbangan utamanya adalah kesombongan gue. Gue merasa yakin kalau gue hanya mempelajari sesuatu yang sudah gue tahu. Untuk beberapa orang, justru ini bagus yang berarti seharusnya gue bisa mendapatkan nilai yang yoi jika memang gue sudah mengetahui apa yang akan dipelajari.
|
||||||
|
|
||||||
|
Untuk gue, karena kesombongan gue tersebut, gue malah merasa seperti buang-buang waktu. Gue merasa, seperti kurang worth it bila menggadaikan waktu; tenaga dan uang gue hanya untuk mendapatkan nilai yang dianggap idaman setiap orang itu.
|
||||||
|
|
||||||
|
Ada 2 hal yang berada di depan gue dan yang mana salah satunya harus dikorbankan: pekerjaan dan pendidikan. Karena jika gue tidak mengorbankan salah satu dari 2 hal tersebut, seharusnya yang akan gue korbankan nanti adalah kesehatan gue.
|
||||||
|
|
||||||
|
I might still continue my career while still getting the degree, but at what cost?
|
||||||
|
|
||||||
|
Satu hari umumnya ada 2 mata kuliah, dan anggap total ada 5 SKS setiap hari. Normalnya kerja 8 jam, ditambah 5 jam untuk kuliah tok. Tidak jarang ada tugas, anggap 2 jam setiap tugas walaupun angka tersebut mustahil. Sudah 15 jam budget waktu gue terhabiskan. Masih ada sisa 9 jam, anggap gue tidur 8 jam per-hari. Ada 1 jam tersisa. Mau dipakai apa? Makan? Mandi? Chill? Makan sambil mandi sambil chill?
|
||||||
|
|
||||||
|
Tentu itu tidak setiap hari, setidaknya hanya 20 hari dalam sebulan tidak termasuk libur nasional. Untuk sekarang yang hanya bekerja 8 jam per-hari yang jarak dari tempat kerja ke rumah cuman ~250m plus kerjanya cuman didepan laptop aja udah cukup kerasa capeknya, mostly di capek pikiran. Apalagi jika gue masih mengambil kuliah?
|
||||||
|
|
||||||
|
Dulu pernah diingatkan sama nyokap untuk tetap fokus di kuliah dulu daripada langsung berkarir, dan ternyata apa yang beliau khawatirkan 6 tahun yang lalu terjadi.
|
||||||
|
|
||||||
|
Meninggalkan pendidikan perkuliahan adalah keputusan terberat yang pernah gue ambil, meskipun gue tidak pernah menyesali keputusan yang sudah gue pikirkan sangat matang. Penyesalannya bukan karena gue sudah menghabiskan yang tidak sedikit secara sia-sia, ataupun tidak memiliki gelar setelah nama gue, ataupun status sosial gue berbeda dengan mereka yang memiliki gelar.
|
||||||
|
|
||||||
|
Namun kekecewaan orang lain yang harus gue hadapi nanti.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
5 tahun gue menyembunyikan kebenaran.
|
||||||
|
|
||||||
|
Seharusnya gue tidak pernah berbohong karena secara teknis pada saat itu gue masih bayar kuliah ketika ditanya "gimana kuliahnya?" sama nyokap. Sampai suatu saat orang tua gue sudah tidak pernah bertanya tentang itu lagi semenjak gue sering menghindar jika akan berkaitan dengan pertanyaan itu.
|
||||||
|
|
||||||
|
Komunikasi dengan orang tua menjadi cukup renggang, dan seperti biasa, jika terdapat kurangnya komunikasi, berarti ada sesuatu yang disembunyikan. Ada sesuatu yang tidak beres. Ada sesuatu, yang, tinggal menunggu momentumnya untuk diberitahukan.
|
||||||
|
|
||||||
|
Gue pada saat itu bisa saja berubah. Seperti, meskipun komunikasi masih renggang, tiba-tiba gue mengabari orang tua gue kalau gue mau wisuda. Kerengganan komunikasi terasa "worth it" karena menjadi solusi win-to-win untuk kedua belah pihak. Tapi kenyataannya, bukan itu pilihan yang gue ambil.
|
||||||
|
|
||||||
|
Gue tidak bisa memutuskan; mengambil apalagi memperjuangkan pilihan tersebut. Gue mengambil keputusan gue sendiri karena gue merasa yakin kalau gue pun berhak untuk membuat keputusan gue sendiri. Keputusan ini beresiko, bahkan sangat beresiko. Tidak ada yang mengambil ataupun mendukung keputusan gue yang ini selain diri gue sendiri. Semua keluarga, rekan kerja, dan orang-orang yang pernah memilih hubungan dengan gue selalu menyarankan untuk mengambil sebaliknya, dan itu dapat dimengerti. Jika alasan utama mereka adalah karena gue harus memikirkan orang tua gue, tapi mengapa mereka tidak memikirkan gue juga?
|
||||||
|
|
||||||
|
I mean, tentu saja gue pun mau menyelesaikan studi gue. Mendapatkan gelar, merasakan wisuda, membahagiakan orang tua. Jika gue sanggup melakukannya, pada akhirnya pasti akan gue lakukan juga. Gue orang yang cukup keras kepala dan merasa memiliki pendirian, dan jika gue sudah menyerah, harusnya gue memang tidak sanggup melakukannya terlepas alasannya apa.
|
||||||
|
|
||||||
|
Tidak jarang gue memaksakan suatu kehendak, sampai gue tahu kapan harus berhenti. Gue gak peduli berapa kali gue gagal dalam mencoba sesuatu, karena gue akan berhenti jika memang sudah berhasil ataupun sudah mendapatkan momen kapan harus berhenti.
|
||||||
|
|
||||||
|
Alias, bukan tentang seberapa banyaknya.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Idul Fitri tahun 2022 kemarin, gue harus bilang ke orang tua gue. Bagaimanapun gue tidak boleh terus egois. Mereka harus mengetahuinya, sekalipun gue sudah tahu apa yang akan terjadi setelahnya.
|
||||||
|
|
||||||
|
Gue tidak ingin terus memberikan harapan palsu kepada mereka. Gue tidak ingin mereka merasa tenang dengan kesemuan. Gue hanya menunggu momentum, dan gue rasa Idul Fitri tahun 2022 adalah waktu yang pas.
|
||||||
|
|
||||||
|
Lalu gue ceritakan kepada orang tua gue, meyakinkan mereka bahwa yang salah bukanlah mereka, dan meyakinkan mereka bahwa gue sudah cukup dewasa untuk membuat keputusan. Gue tidak menuntut apapun selain dukungan mereka terhadap keputusan yang gue pilih.
|
||||||
|
|
||||||
|
Tidak ada yang berubah setelah itu selain kekecewaan yang mendalam.
|
||||||
|
|
||||||
|
Bokap gue sudah melepas gue cukup lama, dan gue rasa beliau sudah menerimanya sejak lama juga. Nyokap gue terkadang masih melamun setiap melihat gue, atau setiap melihat foto yang ada di dinding Tidak jarang matanya mengeluarkan air mata sedikit meskipun gue yakin kalau ditanya jawabannya selalu "ngantuk", mengingat ini bukan kali pertama gue mengecewakan beliau.
|
||||||
|
|
||||||
|
Kekecewaan terbesar nyokap gue sepertinya adalah merasa bahwa doanya tidak dikabulkan oleh tuhan (atau bijaknya "dikabulkan dengan cara yang lain") mengingat beliau selalu mendoakan gue dalam perkuliahan gue.
|
||||||
|
|
||||||
|
Sekarang mereka sudah mengetahui kebenarannya.
|
||||||
|
|
||||||
|
Gue tidak perlu menghindar dalam berkomunikasi, tidak perlu merasa berat ketika hendak pulang ke rumah orang tua, dan tidak perlu memberikan harapan palsu lagi kepada mereka.
|
||||||
|
|
||||||
|
Semua keluarga gue sudah tahu. Dan sekarang, siapapun yang membaca ini pun sudah tahu karena gue rasa ini sudah bukan lagi menjadi rahasia.
|
||||||
|
|
||||||
|
Ketika gue hendak kembali ke Bandung, bagian ini yang paling berat. Mata gue panas dan dada gue sangat sesak melihat mamah gue. Perasaan gue campur aduk karena gue tidak tahu apa yang mamah gue pikirkan dan rasakan.
|
||||||
|
|
||||||
|
Terdapat air mata di kedua mata mamah, dan ketika beliau berbicara untuk bilang "hati-hati a" secara terbata-bata, hati gue hancur.
|
||||||
|
|
||||||
|
Gue tahu bahwa mamah gue menahan tangisan yang sangat dalam, sampai gue beranjak dari pekarangan rumah.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Di jalan, pikiran gue tidak tenang, tentu saja. Tidak ada pesan "cepet selesain kuliahnya" sebagaimana biasanya setiap kali gue kembali ke Bandung.
|
||||||
|
|
||||||
|
Satu-satu alasannya gue mengapa tinggal di Bandung adalah karena alasan studi, sekaligus menjadi alasan mengapa gue menunda untuk memberitahukan mereka tentang kebenaran dari perkuliahan gue karena gue belum ingin kembali melanjutkan hidup di Serang.
|
||||||
|
|
||||||
|
PR terberat gue hari ini adalah membuktikan bahwa keputusan yang gue pilih adalah keputusan yang tepat. Membuktikan, bahwa, apa yang mereka takutkan tidak akan terjadi. Membuktikan, bahwa, mereka, adalah orang tua terbaik yang pernah gue miliki.
|
||||||
|
|
||||||
|
Tidak banyak yang gue butuhkan dari mereka selain dukungan dan doa.
|
||||||
|
|
||||||
|
Gue rasa gue belum gagal untuk bisa menjadi panutan terhadap adik-adik gue sebagai anak pertama. Gue rasa gue masih punya kesempatan untuk mendapatkan "tuh kayak si aa" alih-alih "jangan kayak si aa", kecuali di urusan perkuliahan. Gue rasa, gue masih memiliki kesempatan untuk bisa dibanggakan oleh orang tua gue.
|
||||||
|
|
||||||
|
Ketika gue sampai di Bandung, tidak lama setelah itu mamah gue menyarankan untuk beli rumah di Bandung. Beliau menyebutkan nama tempat, dan hampir adik-adik beliau (om gue) menyebut daerah yang sama yang gue rasa mungkin mereka memiliki kenangan disana ataupun karena memang daerah tersebut terkenal karena huniannya.
|
||||||
|
|
||||||
|
Gue sedikit senang yang berarti mamah gue mendukung gue untuk tidak harus kembali ke Serang, karena gue pernah memberikan alasannya yang mana terkait karir.
|
||||||
|
|
||||||
|
Dan sekarang, pesan mamah dan papah gue menjadi sama: Jangan tinggalin solat.
|
||||||
|
|
||||||
|
Yang membuat gue berpikir bahwa sesayang itu mereka dengan anak-anaknya.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Dulu gue paling dekat dengan papah, mungkin karena waktu gue banyak dihabiskan dengan beliau mengingat ketika sekolah gue sering diantar dan dijenguk beliau.
|
||||||
|
|
||||||
|
Hampir setiap anak-anaknya lebih dekat dengan beliau, dan terkadang gue memilih mengalah karena mamah gue kadang tidak mendapatkan dukungan khususnya dari anak-anaknya.
|
||||||
|
|
||||||
|
Keluarga gue dulu hampir berantakan sampai pada akhirnya mereka memilih untuk tetap bertahan bersama. Ada satu sisi yang disembunyikan oleh mamah gue yang gue lihat, meskipun mamah gue mungkin cukup kuat untuk menahannya, tapi gue yakin ada hal yang beliau sembunyikan dibalik ketegarannya tersebut.
|
||||||
|
|
||||||
|
Gue sangat ingin membahagiakan mamah gue, menghilangkan sedikit kesedihan-kesedihannya yang selama ini beliau rasakan, dan memberikan sebanyak yang gue bisa akan apapun yang beliau ingin dan layak untuk didapatkan.
|
||||||
|
|
||||||
|
Kadang gue sedikit sedih jika mamah membuat story di WhatsApp, atau ketika mendengarkan mereka berdiskusi ataupun berdebat. Ingin sekali gue membawa mamah ke tempat yang beliau inginkan, dan mengucapkan "mamah masih punya aldy" sekalipun tidak ada yang ikut dengan kami.
|
||||||
|
|
||||||
|
Gue tidak terlalu masalah jika beliau pernah ataupun sering kecewa dengan gue, tapi setidaknya gue ingin membuat beliau merasa bangga karena pernah melahirkan seorang anak bernama Fariz Rizaldy.
|
||||||
|
|
||||||
|
Sehingga perjuangan beliau dari proses mengandung, melahirkan, dan membesarkan, terbayar setimpal atau lebih.
|
||||||
|
|
||||||
|
Sekalipun seorang anak mungkin tidak pernah meminta untuk dilahirkan.
|
150
content/the-dip.md
Normal file
150
content/the-dip.md
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
---
|
||||||
|
title: The Dip
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: the-dip
|
||||||
|
date: 2022-07-16T15:36:02.000Z
|
||||||
|
date_updated: 2022-07-16T15:36:02.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Sekitar sebulan yang lalu gue membeli buku berjudul [The Dip](https://www.amazon.com/Dip-Little-Book-Teaches-Stick/dp/1591841666) yang ditulis oleh salah satu penulis favorit gue yakni mas [Seth Godin](https://seths.blog), walaupun gue jarang banget mampir ke blog nya untuk membaca tulisannya secara langsung lol.
|
||||||
|
|
||||||
|
Buku ini cukup ringkas, hanya 93 lembar secara keseluruhan. Versi yang gue baca adalah yang bahasa Indonesia, dan sejujurnya penerjemahannya cukup membosankan untuk seseorang yang lebih menyukai bahasa yang santai dan lugas.
|
||||||
|
|
||||||
|
Topik utama dari buku ini intinya adalah tentang "Kapan harus berhenti dan kapan harus terus". Dan mungkin untuk beberapa orang—khususnya mereka yang terjun ke perdagangan mata uang kripto—sudah cukup familiar dengan istilah "The Dip" ini, berikut adalah contoh *meme *nya:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/07/image.png)is this even a meme lol
|
||||||
|
Dari gambar diatas diasumsikan bahwa seseorang *terus *membeli sebuah koin sekalipun kondisi pasar sedang brengsek-brengseknya.
|
||||||
|
|
||||||
|
Dalam penentuan "kapan harus berhenti dan kapan harus terus" tersebut, setidaknya ada 2 parameter yang berperan: Usaha dan hasil. Jika digambarkan dalam sebuah kurva, pola the dip adalah seperti ini:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/07/image-1.png)The Dip
|
||||||
|
Bagi yang kurang familiar dengan grafik kurva diatas, jika terdapat 2 sumbu seperti sumbu x (yang kasus diatas adalah Effort) dan y (yang kasus diatas adalah Results), biasanya sifatnya adalah perbandingan. Maksud kurva the dip diatas adalah, di awal-awal usaha, hasilnya terlihat cukup menjanjikan. Namun ketika semakin lama/besar berusaha, justru hasilnya malah terlihat menjadi meragukan dan terus meragukan.
|
||||||
|
|
||||||
|
Dari dua sumbu tersebut kita jadi bisa membandingkan *"apakah usaha yang sudah kita lakukan sebanding dengan hasil yang kita dapatkan?"*. Jawabannya selalu tergantung, namun dengan mengetahui pola The Dip ini, ia bisa membantu kita untuk menjawab pertanyaan tersebut daripada hanya sebatas berdasarkan perasaan.
|
||||||
|
|
||||||
|
## Hukum Rimba
|
||||||
|
|
||||||
|
Pada dasarnya, the dip ini sekilas berkaitan dengan hukum rimba: yang kuat, yang bertahan. Seperti, sebagaimana singa menjadi penguasa hutan dan hiu menjadi penguasa lautan. Dari kasus hukum rimba tersebut, usahanya adalah bertahan hidup dan hasilnya adalah menjadi penguasa.
|
||||||
|
|
||||||
|
Di kasus yang lebih nyata, anggap lo sedang memperjuangkan sesuatu. Mungkin tangga karir, atau hubungan asmara, atau jalan kaki dari mekkah ke madinah.
|
||||||
|
|
||||||
|
Oke anggap tangga karir yang relatif mudah digambarkan. Lo sudah memutuskan untuk ingin menjadi seorang supervisor, congrats! Banyak pertimbangan yang sudah lo buat sehingga lo bisa berada di titik untuk menentukan keputusan tersebut. Terlepas apapun pertimbangannya, dua faktor utama tersebut adalah yang pertama karena lo mampu dan kedua karena lo pantas mendapatkannya.
|
||||||
|
|
||||||
|
Lalu lo mulai melakukan usaha. Dari mempelajari apa yang biasa supervisor lakukan sampai ke mencobanya. Lambat laun, hasil sudah mulai terlihat. Mungkin lo mendapatkan kesempatan wawancara untuk mendapatkan promosi jabatan, dan itu sebuah progress dari usaha yang sudah dikerahkan.
|
||||||
|
|
||||||
|
Anggap hasil dari wawancara tersebut tidak sesuai harapan lo. Hasil wawancaranya adalah lo gagal menjadi seorang supervisor karena ada orang lain yang lebih pantas mendapatkannya pada saat itu. Ya, karena jika sesuai harapan kita harusnya tidak perlu membahas panjang lebar tentang the dip ini HAHAHA.
|
||||||
|
|
||||||
|
Anyway, dari sini, pola the dip akan mulai terlihat. Dari yang sebelumnya usaha berbanding lurus (linear) dengan hasil di korelasi positif (menaik), sekarang malah menjadi korelasi negatif (menurun) karena hasilnya terlihat tak *sesuai* dengan usaha yang sudah lo keluarkan.
|
||||||
|
|
||||||
|
The dip disini mulai berperan.
|
||||||
|
|
||||||
|
Lo bisa memilih berhenti dan menguburkan keinginan untuk menjadi seorang supervisor.
|
||||||
|
|
||||||
|
Atau lo bisa memilih untuk gas terus sampai bisa menjadi seorang supervisor.
|
||||||
|
|
||||||
|
Dan sekarang kita mulai masuk ke topik utama.
|
||||||
|
|
||||||
|
Yakni jawaban "Apa pertimbangan dalam memilih keputusan tersebut?"
|
||||||
|
|
||||||
|
## Knowing the curve
|
||||||
|
|
||||||
|
Faktor utama dari the dip adalah mengetahui bentuk kurva yang akan dilalui tersebut. Gampangnya, mari kita coba cari tahu bentuk kurva yang seharusnya bukan the dip. Ambil contoh ada dua: stagnan dan berbanding terbalik. Contoh stagnan gampangnya adalah "gitu-gitu aja", seperti, sebuah kondisi dimana lo selamanya akan menjadi programmer kalo yang terus lo lakuin hanyalah menulis kode, unless lo mendapatkan keberuntungan, tentu saja.
|
||||||
|
|
||||||
|
Contoh yang berbanding terbalik, gampangnya adalah justru bentuk kurvanya malah terus menurun. Usaha lo sudah besar tapi entah bagaimana hasilnya malah tidak sebanding dan selalu menurun karena satu dan lain hal. Seperti, misal lo menjual makanan sehat untuk nyamuk. Sekeras apapun usaha yang lo lakukan untuk membuat produk tersebut menjadi yang terbaik, sebesar apapun pemasaran yang sudah lo lakukan untuk membuat nyamuk-nyamuk tertarik, kalau nyamuk tersebut tidak butuh, ya tidak bakal terjual.
|
||||||
|
|
||||||
|
Dan lo harusnya tahu itu sih kalau memang kasusnya itu. Ini hanya contoh.
|
||||||
|
|
||||||
|
Anyway, dari situ kebayang sedikit lah ya tentang mengetahui bentuk kurva yang akan dilalui tersebut. Yang intinya, setidaknya lo tahu kalau bentuknya tidak akan staganan ataupun berbanding terbalik.
|
||||||
|
|
||||||
|
Gue ada sebuah kisah (anjay) ketika waktu gue dulu belajar di pesantren. Ada satu teman gue yang usahanya cukup keras dalam menghafal namun justru hasilnya entah bagaimana malah terus lupa. Salah satu pelajarannya adalah Mutholaah, gampangnya itu adalah pelajaran yang pada dasarnya hanyalah sebuah cerita namun menggunakan bahasa Arab. Ujiannya, lo harus melanjutkan sebuah cerita, dan pelajaran mutholaah ini yang paling menyebalkan karena umumnya lo harus menghafal persis kata demi katanya. Literally tidak ada yang lo pelajari dari pelajaran ini selain menghafal.
|
||||||
|
|
||||||
|
Teman gue mengambil jalur alternatif. Dia bisa lulus ujian lisan mutholaah karena yang dia hafal adalah alur ceritanya. Misalnya jika cerita lengkapnya adalah *"ketika itu Muhammad sedang tidur di kasurnya, sedangkan jam (menunjukkan pukul) sepuluh. Malam sudah diliputi kegelapan dan kedinginan. Suasana pun sepi..."* dia menceritakannya dengan *"ketika Muhammad tidur diatas kasur. Di jam 10 malam. Malam tersebut gelap dan dingin..."* sampai ke kejadian kebakaran dan menolong temannya (ini [cerita](https://www.putrakapuas.com/2019/12/mutholaah-kelas-2-kmi-dan-terjemahannya-1.html) lengkapnya, just in case penasaran).
|
||||||
|
|
||||||
|
Teman gue berdalih ke penguji bahwa yang dia harus hafal bukanlah ayat Al-Quran (yang mana harus benar-benar sesuai secara literal) dan since Ujian Lisan adalah tentang ujian mental dan dia bisa mempertanggung jawabkan keyakinannya, so it works?
|
||||||
|
|
||||||
|
...mengingat dia sekarang sudah lulus juga hahaha.
|
||||||
|
|
||||||
|
Dari kisah teman gue tersebut gue rasa bisa digambarkan sebagai The Dip. Bentuk kurvanya adalah dia sudah berusaha untuk terus menghafal namun seringkali lupa (menurun). Yang dia lakukan di "the dip" tersebut adalah mengambil alternatif (memahami alur cerita dan menghafal kosa kata yang gampang diingat) alih-alih "gue cabut dari pesantren aja kali ye mutholaah kaga kepake juga klo gue jadi dpr" alias berhenti berusaha.
|
||||||
|
|
||||||
|
## Survivorship Bias
|
||||||
|
|
||||||
|
Karena The Dip salah satunya adalah tentang "the chosen one", topik survivorship bias tentunya harus disinggung. Survivorship bias atau bias bertahan hidup ini adalah pemikiran yang cenderung hanya melihat sesuatu yang diketahui saja dan mengesampingkan sesuatu yang belum diketahui. Survivorship bias ini gampangnya seperti "kalau dia bisa, gue juga pasti bisa" dan ini diyakini memiliki dampak yang negatif.
|
||||||
|
|
||||||
|
Ambil contoh misal lo melihat teman SMA lo yang sudah bisa memiliki rumah di umur 25. Yang lo lihat (ketahui) hanyalah dia adalah teman SMA lo dan umurnya sama-sama 25. Yang tidak lo lihat mungkin adalah usahanya dalam mengumpulkan dana, penghematannya untuk mengurangi pengeluaran yang tidak perlu dan realita bahwa orang tuanya kaya.
|
||||||
|
|
||||||
|
Kalo hanya karena dia sama-sama satu SMA sama lo dan sama-sama berumur 25, bukan berarti lo pun bisa mendapatkan apa yang dia dapatkan juga.
|
||||||
|
|
||||||
|
Silahkan ganti konteks umur ataupun SMA tersebut misalnya menjadi "sarjana" atau "top tier university", atau apapun yang mungkin relate dengan kondisi lo.
|
||||||
|
|
||||||
|
Salah satu yang dibahas oleh Seth Godin dalam bukunya ini adalah tentang "menjadi nomor satu" alias tentang "menjadi yang terbaik" alias tentang "menjadi rata-rata hanyalah untuk pecundang".
|
||||||
|
|
||||||
|
Tentang, jika lo bisa melalui the dip, berarti lo adalah yang terbaik.
|
||||||
|
|
||||||
|
Alias, tentang menjadi yang terpilih.
|
||||||
|
|
||||||
|
Seperti, jika lo melamar ke perusahaan X, kenapa orang yang harus dipilih untuk posisi Y adalah lo dan bukan 69 pelamar lainnya?
|
||||||
|
|
||||||
|
Jawabannya mungkin adalah karena lo kandidat yang terbaik.
|
||||||
|
|
||||||
|
Nah, pada dasarnya, the dip ini adalah sebuah kondisi dimana lo bisa bertahan dan menjadi yang terbaik. Kalau **misalnya** salah satu spek "kandidat terbaik" tersebut adalah memiliki banyak sertifikasi dari berbagai pelatihan di bidangnya, lo menjadi yang terbaik karena berhasil memiliki lebih banyak sertifikasi disaat orang lain gagal memiliki lebih banyak sertifikasi dari lo.
|
||||||
|
|
||||||
|
The dip nya berarti dalam mengambil sertifikasi untuk menjadi salah satu yang terbaik, misalnya.
|
||||||
|
|
||||||
|
## Opportunity Cost
|
||||||
|
|
||||||
|
Dalam kehidupan, tidak jarang kita akan menghadapi dilema dalam "bertahan atau berhenti".
|
||||||
|
|
||||||
|
Bayangkan harus dropout setelah menghabiskan sekian juta untuk biaya studi.
|
||||||
|
|
||||||
|
Bayangkan masih terus beroperasi meskipun tahu pengeluaran selalu lebih besar dari pemasukan.
|
||||||
|
|
||||||
|
Salah satu kunci untuk mengetahui bentuk the dip adalah: jika memang layak dilakukan, mungkin saja akan ada the dip.
|
||||||
|
|
||||||
|
Dan tantangan terbesarnya justru bukanlah di memutuskan untuk terus, melainkan di memutuskan untuk berhenti.
|
||||||
|
|
||||||
|
You know, *"when you feel like giving up, remember why you started™* thing.
|
||||||
|
|
||||||
|
Sebagai penutup, mari kita kembali ke pernyataan "jika memang layak dilakukan, mungkin saja akan ada the dip". Ada sebuah istilah yang disebut "opportunity cost", gampangnya ini adalah tentang "merelakan suatu kesempatan demi mengambil kesempatan lain". Misal, lo rela begadang demi bisa menyelesaikan kerjaan minggu kemarin. Pertanyaannya, gampangnya, ada dua:
|
||||||
|
|
||||||
|
- Apa yang akan terjadi jika lo mengorbankan jam tidur?
|
||||||
|
- Apa yang akan terjadi jika lo tidak mengorbankan jam tidur?
|
||||||
|
|
||||||
|
Opportunity cost ini biasanya terjadi ketika dihadapkan dengan sesuatu yang sifatnya terbatas. Dalam kasus ini, misalnya waktu yang setiap harinya hanya memiliki 24 jam, dan tidak bisa ditambah.
|
||||||
|
|
||||||
|
Misal jawaban dari pertanyaan pertama adalah "kurang tidur tapi setidaknya kerjaan kelar" dan jawaban dari pertanyaan kedua adalah "bisa cukup istirahat dan kerjaan mah bisa nunggu lah". Terlepas bagaimanapun realitanya (misal: kurang tidur tapi ternyata kerjaan masih belum kelar ataupun tunda pekerjaan dan ternyata masih kurang tidur) itu adalah cerita lain.
|
||||||
|
|
||||||
|
Setidaknya lo sudah memilih peluang yang ada berikut dengan resikonya.
|
||||||
|
|
||||||
|
Kembali ke topik, dalam memutuskan untuk "terus atau berhenti", coba pertanyakan:
|
||||||
|
|
||||||
|
- Apa yang akan terjadi jika terus?
|
||||||
|
- Apa yang akan terjadi jika berhenti?
|
||||||
|
|
||||||
|
Jika "biaya" dalam mengambil keputusan tersebut layak "dibayar" demi mendapatkan sesuatu yang diinginkan, what is stopping you from doing so, I guess?
|
||||||
|
|
||||||
|
Bulan-bulan kemarin teman gue curhat tentang ngerasa capek dalam mengejar seseorang, you know, relationship thing. Gue tidak pandai dalam hal seperti ini, tapi setidaknya gue tahu usaha dia. Dari awal. Dia minta saran ke gue tentang langkah selanjutnya yang akan dia ambil, dan gue hanya memberi pertanyaan: Lu bakal lebih capek ngejar ini orang atau bakal lebih capek kalau ngejar orang baru?
|
||||||
|
|
||||||
|
Pada 05/07/2022 kemarin, dia telfon gue di WhatsApp.
|
||||||
|
|
||||||
|
Dari salam pembukanya terdengar seperti ingin menyampaikan kabar gembira, dan nyatanya memang benar. Dia sudah mengorbankan kesempatan untuk mencari dan mengejar orang baru demi bisa terus mendapatkan hati seseorang yang sudah dia pilih, meskipun mungkin terasa cukup melelahkan.
|
||||||
|
|
||||||
|
Tapi dia berhasil melewati the gip nya.
|
||||||
|
|
||||||
|
Dia bisa bertahan, dan dia tahu jika tidak memilih berhenti adalah sesuatu yang dia yakini benar.
|
||||||
|
|
||||||
|
Dan kabar baiknya lagi, sepertinya hati orang tuanya orang yang teman gue kejar ini juga udah dia dapet lol. Can't wait for more good news at the of the year to be honest (sehingga keluhan-keluhan temen gue kaga sia-sia sering gue denger HAHAHA)
|
||||||
|
|
||||||
|
CTO gue pernah bilang ketika 1:1 dulu kalau *segala sesuatu pasti memiliki tradeoff*. Sepertinya memilih apa yang harus dikorbankan demi mendapatkan sesuatu yang lain adalah sebuah skill yang harus terus diasah, khususnya ketika berhadapan dengan sesuatu yang memiliki batas (which is everything, I guess?)
|
||||||
|
|
||||||
|
Once I was in one of my own dips and wondered what hurt the most: holding on or letting go. I couldn't hold on any longer yet knowing the feeling of letting go was painful.
|
||||||
|
|
||||||
|
I chose to [quit.](https://s3.rizaldy.club/rizaldy-club-ghost/the-bitter-truth/)
|
||||||
|
|
||||||
|
My objective is nothing but to get on with my life.
|
||||||
|
|
||||||
|
I don't know if my decision was the best yet I know I only regretted my own decision twice.
|
||||||
|
|
||||||
|
And the later one doesn't even count.
|
||||||
|
|
||||||
|
Despite it still hurts to this day,
|
||||||
|
|
||||||
|
at least my life goes on now.
|
101
content/the-missing-pieces.md
Normal file
101
content/the-missing-pieces.md
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
---
|
||||||
|
title: The missing pieces
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: the-missing-pieces
|
||||||
|
date: 2021-12-16T10:22:57.000Z
|
||||||
|
date_updated: 2021-12-16T10:22:57.000Z
|
||||||
|
excerpt: —
|
||||||
|
---
|
||||||
|
|
||||||
|
Ketika gue mempelajari gaya hidup "minimalis" ada salah satu aturan ketika hendak memiliki suatu barang baru: Beri waktu setidaknya selama 12 hari dulu, jika selama itu masih tetap kepikiran, mungkin bisa dipertimbangkan untuk membeli. Angka 12 tersebut bisa diubah sesuai kebutuhan, ada yang menggunakan 30 jam (khususnya yang menggunakan 30/30 rule)s atau mungkin bisa juga selama 24 hari, anything what works for you.
|
||||||
|
|
||||||
|
Disamping itu, ada sebuah mitos tentang "pembentukan kebiasaan" yang mana setidaknya memakan [21 hari](https://jamesclear.com/new-habit) untuk membuat "hal baru" menjadi hal yang biasa.
|
||||||
|
|
||||||
|
Hubungan antara 2 hal diatas tersebut adalah satu: waktu. It takes time, a fucking time.
|
||||||
|
|
||||||
|
Ketika pindah ke tempat kerja baru, hampir segala sesuatu terlihat berbeda. Orang-orangnya, lingkungannya, alat-alat nya, budayanya, apapun. Selama seminggu mungkin masih terasa seperti orang asing sampai tak terasa sudah 30 hari bekerja di perusahaan tersebut dan menggunakan kata ganti "gue" dari yang sebelumnya "saya" karena sudah merasa tidak berkomunikasi dengan orang asing.
|
||||||
|
|
||||||
|
Begitupula ketika pindah ke tempat tinggal baru. Hampir segalanya terasa asing, dari perabotan; gaya dinding, bentuk ruang, suhu udara, dsb. Namun pada akhirnya pun akan terbiasa karena betah dan tidak betah adalah tentang pilihan.
|
||||||
|
|
||||||
|
Ketika pertama kali menginjakkan kaki di Bandung pada tahun 2015 lalu, cara gue hidup lumayan banyak berubah. Dari yang sebelumnya makan tinggal turun kamar tanpa mengkhawatirkan apa yang bisa dimakan hari ini, menutup hari tinggal tidur tanpa mengkhawatirkan apakah pintu sudah terkunci, sampai ke yang sebelumnya menjalani hidup tinggal hidup tanpa harus memikirkan tagihan listrik, biaya sewa kamar dan hal-hal lain yang harus dibayar setiap akhir bulan.
|
||||||
|
|
||||||
|
Namun pada akhirnya gue terbiasa, meskipun tidak merasa senang juga. Karena pada akhirnya itu adalah realita yang harus gue hadapi, apapun yang terjadi, sampai kapanpun nanti.
|
||||||
|
|
||||||
|
Kata "biasa" tidak lepas dari "kebiasaan" ataupun "terbiasa". Dua hal tersebut seperti sama namun gue rasa memiliki maksud yang berbeda. Kata "terbiasa" terdengar seperti sesuatu yang dilakukan karena suatu keadaan sedangkan "kebiasaan" seperti sesuatu yang dilakukan secara otomatis terlepas dalam keadaan apapun itu.
|
||||||
|
|
||||||
|
Gue rasa tidak ada yang salah dengan dua hal tersebut selain karena kita memiliki pilihan disamping itu terdapat sesuatu yang tidak bisa kita kontrol. Gue terbiasa menjadi morning person pada weekdays sedangkan kebiasaan gue adalah tidur larut karena sebuah alasan (biasanya gara-gara susah tidur karena kebanyakan konsumsi kafein). Gue bisa memilih untuk menjadikan bangun tidur pagi sebagai kebiasaan gue dan menghindari susah tidur di malam hari dengan mengurangi konsumsi kafein.
|
||||||
|
|
||||||
|
Atau mungkin gue bisa aja memilih untuk bekerja di perusahaan yang memiliki zona waktu yang berbeda dengan tempat tinggal gue sekarang lalu melanjutkan kebiasaan tidur larut tanpa harus ribet-ribet mengurangi konsumsi kafein. Selalu ada pilihan, bukan?
|
||||||
|
|
||||||
|
But anyways. Salah satu hal yang gue *malesin* dari hal-hal terkait kebiasaan ini adalah di momen transisi. Entah di kondisi ketika membiasakan akan adanya sesuatu ataupun membiasakan ketika tidak adanya sesuatu.
|
||||||
|
|
||||||
|
Kedua kondisi tersebut melakukan hal yang berbeda namun memiliki pengalaman yang sama: kehilangan.
|
||||||
|
|
||||||
|
Have I written the title of this blog post, yet?
|
||||||
|
|
||||||
|
## Transisi
|
||||||
|
|
||||||
|
Arti transisi menurut KBBI adalah peralihan dari keadaan (tempat, tindakan, dan sebagainya) pada yang lain, just in case my fellow CSS nerds read this shit. Proses transisi relatif tidak mudah sekalipun hanya untuk bisa menampilkan 60 frame dalam satu detik.
|
||||||
|
|
||||||
|
Terdapat alasan yang beragam mengapa transisi berjalan tidak lancar namun yang pasti adalah karena satu: adanya bottleneck alias penghambat.
|
||||||
|
|
||||||
|
Di kasus nyata, penghambat tersebut bisa saja adanya peristiwa singkronus yang menghambat thread utama yang bertugas menggambar piksel ke layar; atau bisa saja karena CPU yang sedang kewalahan memproses banyak hal dalam waktu yang sama, atau bisa saja karena terjebak di ruang nostalgia ataupun meyakini sesuatu yang tingkat kepastiaannya tidak jelas padahal dilain sisi sudah jelas.
|
||||||
|
|
||||||
|
Ehm.
|
||||||
|
|
||||||
|
Bentar bentar gue ngambil rokok dulu.
|
||||||
|
|
||||||
|
Oke I'm back.
|
||||||
|
|
||||||
|
Dalam proses penggambaran piksel, ada sebuah aturan bahwasannya bila sesuatu dapat menampilkan sesuatu setidaknya 60 gambar per-detik, maka transisi terhadap pergantian gambar-gambar tersebut akan terasa lancar. Gambaran sederhananya, bila lo berada di kondisi ingin menyelamatkan hp lo yang jatuh, pikiran lo udah menginstruksikan untuk menangkapya sedangkan tangan lo baru merespon di waktu ketika hp lo sudah terbanting ke lantai.
|
||||||
|
|
||||||
|
Tapi kehidupan nyata tidak hanya tentang mengambar sesuatu dalam bentuk piksel, namun yang pasti ada aturannya juga. Misal, ketika gue pindah ke Bandung, gue harus berhenti membandingkan kondisi Serang dengan Bandung. Gue tidak bisa semena-mena bilang "sorry bahasa Sunda gue kasar, soalnya di Banten ini halus" melainkan gue harus membiasakan menggunakan bahasa Sunda yang digunakan di Bandung karena ini bukan Banten dan silahkan balik ke Banten kalau memang gue tidak ingin melepas Banten.
|
||||||
|
|
||||||
|
I guess you guys got the point.
|
||||||
|
|
||||||
|
Agar proses transisi gue diatas terasa lancar, gue bisa mengambil beberapa pendekatan misal dimulai dengan tidak berbicara bahasa sunda, dilanjutkan dengan belajar sedikit-sedikit bahasa Sunda yang umum digunakan di Bandung lalu sedikit-sedikit mempraktikan sekalipun misalnya menggunakan kalimat "abdi atos makan euy" dari yang sebelumnya "aing gues dahar, anjing"
|
||||||
|
|
||||||
|
Just kidding (kecuali klo lagi komunikasi sama si wildan).
|
||||||
|
|
||||||
|
Ada satu hal yang penting dari transisi ini: alasannya.
|
||||||
|
|
||||||
|
Karena berbicara tentang alasan, pasti berkaitan dengan sebuah pertanyaan. Dari pertanyaan "haruskah?" sampai ke "is it worth it?".
|
||||||
|
|
||||||
|
But, regardless of the answer, you have a choice, once again.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Ada penggalan lirik favorit gue dari lagu berjudul 1x1 yang dibawakan oleh Bring Me The Horizon yang mana berbunyi: "I don't know what hurts the most, holding on or letting go".
|
||||||
|
|
||||||
|
Di kebanyakan kondisi, peristiwa yang terasa "menyakitkan" selalu di ketika "meninggalkan" namun di lain sisi justru ketika tidak meninggalkan itu sama sekali.
|
||||||
|
|
||||||
|
Seperti, jika teman kantor gue berpindah ke perusahaan lain, mungkin itu adalah keputusan terbaik yang dia pilih. Kehilangan adalah hal yang sudah pasti, namun ada hal yang lebih besar lagi yang mungkin harus dihadapi yang tidak bisa dilihat apalagi dirasakan oleh orang lain.
|
||||||
|
|
||||||
|
Atau, bahkan ada yang terus bertahan bekerja selama 20 tahun ditempat yang sama alih-alih pindah dan menghadapi lingkungan dan kemungkinan lain yang kurang pasti.
|
||||||
|
|
||||||
|
Apapun.
|
||||||
|
|
||||||
|
Masih banyak contoh lain tapi waktu sudah menunjukkan jam 11.57 PM, jadi mari kita persingkat.
|
||||||
|
|
||||||
|
Dalam masa transisi, pasti ada hal yang membuat seperti menemukan hal yang hilang.
|
||||||
|
|
||||||
|
Yang biasanya menyebabkan terjadinya membuat perbandingan, dari "kok ini ada A padahal biasanya ga ada" sampai ke "kok ini ga ada X padahal biasanya ada X".
|
||||||
|
|
||||||
|
Pendekatan gue ketika dihadapi kondisi tersebut adalah mempertanyakan kembali keputusan gue: "is it worth it?".
|
||||||
|
|
||||||
|
Dilanjutkan dengan mengingat kembali alasan gue mengambil keputusan tersebut.
|
||||||
|
|
||||||
|
Lalu teringat akan apa yang telah terjadi dan apa yang akan terjadi bila gue tidak mengambil keputusan tersebut.
|
||||||
|
|
||||||
|
Dan mendapatkan jawaban yang selalu sama sekalipun sedang ragu: "It's worth it, I deserve this".
|
||||||
|
|
||||||
|
Lalu gue tersadar bahwa gue bukan meragukan keputusan gue, melainkan hanya belum terbiasa dan hanya membutuhkan waktu.
|
||||||
|
|
||||||
|
I know there's a missing piece, but I know I don't need that.
|
||||||
|
|
||||||
|
Sometimes having something you need is far better than something you want.
|
||||||
|
|
||||||
|
Is it worth it?
|
||||||
|
|
||||||
|
You already know the answer.
|
163
content/the-tale-of-devbox.md
Normal file
163
content/the-tale-of-devbox.md
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
---
|
||||||
|
title: The tale of devbox
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: the-tale-of-devbox
|
||||||
|
date: 2022-12-17T06:17:22.000Z
|
||||||
|
date_updated: 2022-12-17T11:48:57.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Ada 20 devbox yang berjalan di tempat kerja gue sekarang per tulisan ini dibuat. Mesin paling minimum yang digunakan adalah `e2-standard-2` yang seharga $42/bulan. Berarti, untuk 20 devbox dengan mesin tersebut saja setidaknya memakan $840/bulan. Tidak semua menggunakan `e2-standard-2`, beberapa ada yang `e2-standard-4` dan juga ada VM Windows, tapi itu cerita lain.
|
||||||
|
|
||||||
|
Untuk block storage, paling minimum adalah 30 GB. Ini masih relatif murah, sekitar $0,187/GB/bulan. Untuk 20 devbox, berarti sekitar 600 GB, yang mana memakan $112/bulan. Beberapa ada yang menggunakan 50-60 GB, tapi gue ambil angka yang paling kecilnya aja.
|
||||||
|
|
||||||
|
Terakhir, static IP. Ini relatif murah juga, $0,004/IP/bulan harusnya. Untuk 20 devbox, berarti seharusnya hanya $0,08/bulan.
|
||||||
|
|
||||||
|
Total biaya untuk 20 devbox tersebut setidaknya sekitar $952,08/bulan alias $31,74/hari.
|
||||||
|
|
||||||
|
Dengan $950/bulan, setidaknya bisa mendapatkan `e2-highmem-16` (16 vCPU, 128 GB) seharga $709, hemat ~$240/bulan atau $8/hari untuk hitungan 1 bulan = 30 hari. Penghematan 3,7jt IDR/bulan adalah angka yang relatif kecil, namun topik utama dari tulisan ini bukanlah tentang penghematan.
|
||||||
|
|
||||||
|
## Utilization trend
|
||||||
|
|
||||||
|
Beberapa devbox ada yang normal, ada yang under dan ada yang over utilization.
|
||||||
|
|
||||||
|
Jika mengambil threshold 75% untuk status "normal", gampangnya, dengan `e2-standard-2`, itu berarti rata-rata hanya menggunakan 1500 mCPU dan 9 GiB memory (plus swap). Untuk under/over berarti dibawah/diatas itu.
|
||||||
|
|
||||||
|
Beberapa kali GCP (Google Cloud Provider) menyarankan untuk melakukan something yang bisa menghemat cost untuk devbox tertentu. Di lain hari, devbox tersebut malah menjadi over utilization atau bahkan menjadi normal.
|
||||||
|
|
||||||
|
Dalam sebulan, setidaknya devbox efektif digunakan selama 186 jam (31/4*24), yang umumnya, jika work-life balance (LOL) seharusnya hanya 62 jam (31/4*8). Jika ambil nilai tengah, safe to say sekitar 78 jam jika sehari mendedikasikan waktu selama 10 jam.
|
||||||
|
|
||||||
|
Problem pertama yang ingin gue coba solve adalah mencari jalan tengah untuk tidak over/under utilization, dan opsi pertama gue adalah dengan cara menjadikannya satu.
|
||||||
|
|
||||||
|
Dengan mesin `e2-highmem-16`, setidaknya ada 16000 mCPU dan 192 GiB memory (plus swap) pool yang bisa digunakan. Ambil threshold 75%, berarti 12000 mCPU dan 144 GiB memory. Untuk 20 developers (1 devbox=1 developer), minimum resource yang bisa dialokasi adalah 600 mCPU dan 7,2 GiB memory. Jika rata-rata penggunaan resource **setiap developer **adalah sebagaimana yang disebutkan, seharusnya dalam 30 hari, mesin `e2-highmem-16` tidak akan over/under utilization.
|
||||||
|
|
||||||
|
## Maintenance nightmare
|
||||||
|
|
||||||
|
Disamping itu gue rasa tidak semua 20 developers peduli dengan maintenance VM. I mean, upaya untuk memelihara VM mereka selain melakukan penghematan sumber daya seperti CPU/memory/block storage. Ada kernel yang harus dipelihara, keamanan, dependensi, apapun. Rata-rata devbox sudah berjalan selama 4752 jam (198 hari), untuk gue pribadi yang agak sedikit rajin memelihara VM, per tulisan ini dibuat saja ada 77 updates yang harus dilakukan dan kernel gue menggunakan versi 5.15 (LTS).
|
||||||
|
|
||||||
|
Untuk keamanan, setup firewall di level VPC (Virtual Private Cloud) sudah agak membantu. Hanya inbound connection ke 22/tcp, 80/tcp, 443/tcp yang diperbolehkan, tapi untuk outbound, ya semua jenis. Ada beberapa kasus yang bisa membuat setup ini menjadi rentan, tapi kita bahas di lain waktu saja.
|
||||||
|
|
||||||
|
Selain itu, tidak ada rotation terkait SSH key.
|
||||||
|
|
||||||
|
Berdoa saja tidak ada private key yang tercuri.
|
||||||
|
|
||||||
|
## RFC 1: gigantic devbox
|
||||||
|
|
||||||
|
Ambil contoh mesin `e2-highmem-16`, setiap developer secara teori akan mendapatkan maksimal 800 mCPU dan 9,6 GiB memory. Untuk workload gue rasa paling banyak di I/O bound, dan maksimal CPU yang bisa digunakan dalam satu cycle anggap 75% dari total yakni 12 vCPU.
|
||||||
|
|
||||||
|
Dengan 1 gigantic devbox, berarti hanya 1 mesin dan 1 static IP. Mungkin bisa menggunakan 1 block storage juga.
|
||||||
|
|
||||||
|
Gampangnya, gue bisa hanya memelihara dan *hardening *1 mesin dan 1 IP.
|
||||||
|
|
||||||
|
Dan tentunya bisa lebih mudah untuk beriterasi mencari angka yang tepat untuk tidak over/under utilization.
|
||||||
|
|
||||||
|
Problemnya, GCP melakukan charge menggunakan model pay per use (which is good). Dilemanya, jika 1 mesin raksasa tersebut tidak pernah mati, kita perlu membayar full per bulannya. Jika mesin tersebut dimatikan secara periodic, mungkin akan mengganggu alur kerja beberapa developer.
|
||||||
|
|
||||||
|
Penghematan ~3jt tetaplah penghematan, tapi at what cost?
|
||||||
|
|
||||||
|
Challenge lain, gue perlu membuat abstraksi khususnya untuk melakukan port forwarding. Rencanannya setiap developer akan mendapatkan "container khusus", dan gue perlu melakukan port forwarding di level host. Seperti, jika container B publish port 80, gue harus make sure port 80 tersebut tidak di publish di host, tapi bisa diakses via `container-b-80.box.dev` misalnya.
|
||||||
|
|
||||||
|
## RFC 2: Kubernetes (uh)
|
||||||
|
|
||||||
|
Alih-alih menggunakan mesin raksasa, mungkin bisa menggunakan 25% dari mesin tersebut. Misal, mesin `e2-highmem-8` yang memiliki 8 vCPU dan 64 GiB memory. Untuk 20 developer, berarti setidaknya ada 4 node yang berjalan.
|
||||||
|
|
||||||
|
Biaya untuk `e2-highmem-8` adalah $177/bulan, jika ada empat, setidaknya berarti seharga $708, lebih murah $1 dari yang sebelumnya lol.
|
||||||
|
|
||||||
|
Problem di Kubernetes kita tidak bisa membuat swap, tapi setidaknya kita bisa mengalokasikan 14-15 GB memory dan ~1800 mCPU per container.
|
||||||
|
|
||||||
|
Tantangannya tentu ada. Pertama, gue perlu make sure—harus bener-bener yakin—apakah container tersebut memang benar-benar sedang tidak digunakan. Misal, jika tidak ada aktivitas selama 2 jam (waktu yang relatif pas) berarti container tersebut akan dimatikan. Tantangannya, gue perlu cari tahu untuk mengetahui ada/tidak adanya aktivitas tersebut.
|
||||||
|
|
||||||
|
Kedua, akan lebih mudah bila menggunakan node pool yang spesifikasinya sama dengan devbox mereka sebelumnya, misal `e2-standard-2`, alias, 1 container = 1 devbox. Ini secara teori tidak akan menganggu workload lain, dan hal-hal lain seperti port forwarding relatif lebih mudah dilakukan. Problemnya adalah jika resource yang digunakan melebihi jumlah resource yang dialokasikan, yang seharusnya hanya masalah memory (OOM thing). Mungkin dengan mesin `e2-highmem-2` masalah tersebut bisa diselesaikan, tapi perbedaan antara 4 `e2-highmem-8` dengan 20 `e2-highmem-2` adalah ~$1000, jika hitung-hitungan gue benar.
|
||||||
|
|
||||||
|
Yang bahkan lebih besar dari biaya 1 vm = 1 developer, jika container tersebut somehow tidak pernah mati.
|
||||||
|
|
||||||
|
Tertantang jadi orang DevOps?
|
||||||
|
|
||||||
|
### Different pools for different beasts
|
||||||
|
|
||||||
|
Since gue punya kontrol terhadap apa yang akan berjalan, memiliki node pool yang bervariasi mungkin bisa menjadi solusi. Misal, untuk warga frontend dan PM bisa menggunakan `e2-highmem-2` dan/atau `e2-highmem-4` dan sisanya menggunakan `e2-standard-2`, misalnya. Ini secara teori bisa menyelesaian masalah perbedaan ~$1000 tersebut, problemnya, adalah, what if, si pool `e2-standard-2` pada suatu waktu membutuhkan lebih dari 8 GiB memory?
|
||||||
|
|
||||||
|
Pertanyaan *what if* memang selalu menyebalkan.
|
||||||
|
|
||||||
|
## Stick with Kubernetes?
|
||||||
|
|
||||||
|
Anggap gue memilih Kubernetes, dan berikut pool yang ada:
|
||||||
|
|
||||||
|
- frontend: e2-highmem-4
|
||||||
|
- pm: e2-highmem-2
|
||||||
|
- backend: e2-standard-2
|
||||||
|
|
||||||
|
Konsumsi memori backend berdasarkan yang gue lakukan tidak terlalu besar karena tidak menjalankan ehm Node.js dan/atau Cypress, but YMMV.
|
||||||
|
|
||||||
|
Setiap "devbox" menggunakan container yang gue maintain, dan setiap reboot, doi akan update tanpa menyentuh persistent storage yang ada. Ini gue rasa bisa menghemat space, seperti, bayangkan setiap "devbox" memiliki `/var/lib/docker/image` dan mungkin `/var/lib/docker/buildkit` dan atau `/var/lib/docker/overlay2` yang sama? Problemnya perlu make sure masalah permission (e.g `docker system/image prune`), tapi itu cerita lain.
|
||||||
|
|
||||||
|
Dan yang paling penting, hanya memiliki 1 IP dan tidak perlu maintain apapun yang berkaitan dengan OS dari kernel dan versi docker.
|
||||||
|
|
||||||
|
Mungkin gambarannya seperti ini:
|
||||||
|
|
||||||
|
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
|
||||||
|
│ Ingress ├───────────►│ Service ├─────────►│ Workload │
|
||||||
|
└───────────────┘ └───────────────┘ └───────────────┘
|
||||||
|
*.box.dev username-port.box.dev username.svc.cluster.local:port
|
||||||
|
|
||||||
|
|
||||||
|
Jadi gue harus buat proxy ketika developer:
|
||||||
|
|
||||||
|
- ssh user@username.box.dev
|
||||||
|
- Handle request dari `fariz-8080.box.dev` ke `fariz.svc.cluster.local:8080`
|
||||||
|
|
||||||
|
Seems promising, meskipun sudah ada solusi lain dari [Coder](https://coder.com) dan [Gitpod](https://www.gitpod.io) misalnya.
|
||||||
|
|
||||||
|
## Scheduling
|
||||||
|
|
||||||
|
Jika belum terlalu familiar dengan container orchestration seperti Kubernetes dan Nomad, pada dasarnya yang mereka lakukan adalah scheduling. Seperti, setiap 5s cek apakah perlu melakukan replica, setiap 3m apakah perlu menurunkan replica, atau bahkan sampai 0.
|
||||||
|
|
||||||
|
Dalam kasus devbox ini, ini agak menantang. Metriks nya mungkin "kapan terakhir command dijalankan oleh developer?" jika ternyata 2 jam yang lalu, maka matikan si container.
|
||||||
|
|
||||||
|
Yang paling menantang adalah untuk PM. Mungkin mereka akan ada mengubah something seperti berkas `docker-compose.yml`, masalahnya, jika di kemudian waktu tidak ada yang diubah dan container dinyalakan karena ada traffic masuk, bagaimana cara mematikannya di kemudian hari? Of course bisa melihat ke traffic, misal, jika dalam 2 jam hanya menerima 120 traffic, matikan container.
|
||||||
|
|
||||||
|
Iterasi berlanjut perlu dilakukan, seperti biasa. Hadeh.
|
||||||
|
|
||||||
|
## Persistent storage
|
||||||
|
|
||||||
|
Ini agak tricky juga.
|
||||||
|
|
||||||
|
Tapi yang paling aman adalah dengan menggunakan 1 container = 1 PV.
|
||||||
|
|
||||||
|
Dengan block storage 30 GB sebelumnya, setidaknya ~2.5 GB digunakan untuk OS itu sendiri (Ubuntu) dan ~500 MB untuk Docker. 10% overhead berasal dari OS.
|
||||||
|
|
||||||
|
Yang paling banyak berkontribusi adalah Docker image. Dan bila Docker image tersimpan di penyimpanan khusus, gue rasa ini bisa membantu. Sumber kode dari satu repositori per tulisan ini dibuat gue rasa adalah ~3GB, sudah termasuk `.next` dan `node_modules`, you know lah yang mana. Yang berarti, 30 GB per container gue rasa cukup untuk menyimpan semuanya termasuk data-data di "sub container" yang dijalankan. Bahkan mungkin 10-20 GB saja cukup.
|
||||||
|
|
||||||
|
## Objektif & key results
|
||||||
|
|
||||||
|
Tentu saja yang ingin gue capai adalah mengurangi maintenance overhead. Setiap developer tidak perlu melakukan maintenance terhadap VM yang digunakan.
|
||||||
|
|
||||||
|
Selain itu, cost, tentu saja. Jika asumsinya sebelumnya menghabiskan $840/bulan untuk mesin (spoiler: aslinya lebih dari itu), dengan setup:
|
||||||
|
|
||||||
|
- e2-highmem-4: 4
|
||||||
|
- e2-highmem-2: 3
|
||||||
|
- e2-standard-2: 13
|
||||||
|
|
||||||
|
Setidaknya berubah menjadi $1729/bulan—lah kok makin besar?
|
||||||
|
|
||||||
|
Jika selama sebulan hanya berjalan 200 jam (10 jam/hari alias 50 jam/minggu), berarti harusnya menjadi $477/bulan, dari yang sebelumnya yang setidaknya $840/bulan khusus untuk VM. Turun sekitar 43.3% alias hemat 5,6jt yang mana mungkin bisa dialokasikan ke hal lain yang lebih produktif seperti ke salary gue misalnya hehehe (hehe he).
|
||||||
|
|
||||||
|
Selain itu bisa berkurang juga biaya lain dari persistent storage dan static IP. Concern gue sebenarnya hanya di static IP, dan ini bukan masalah cost. Memiliki lebih sedikit yang harus di maintenance adalah ultimate goals yang ingin dicapai.
|
||||||
|
|
||||||
|
Dan yang paling penting adalah produktifitas developer. Tentu langkah ini tidak menambah produktivitas developer, namun setidaknya jangan membuatnya menjadi turun.
|
||||||
|
|
||||||
|
Per hari ini, upaya gue dalam membuat developer melupakan adanya server somewhat works. Atau setidaknya, tidak ada yang resign hanya karena hal yang gue lakukan lol. Developer sudah tidak lagi perlu memikirkan terkait server di lingkungan production dan staging, atau gampangnya, tidak ada akses SSH kesana. Segala hal yang ingin dilakukan harus eksplisit, jika sebelumnya melakukan SSH hanya untuk melihat log dari container, sekarang ada cara lain untuk melakukan hal serupa.
|
||||||
|
|
||||||
|
Dari perspektif keamanan, ini mengurangi attack surface. Dengan akses SSH, bukan hanya siapapun yang memiliki akses dapat melihat log container, tapi bisa shutdown server & menghapus data production juga. Who knows.
|
||||||
|
|
||||||
|
Selain itu, ini memudahkan untuk memelihara kepercayaan untuk setiap pihak. Setiap developer yang ingin mengakses lingkungan production, harus memiliki tujuan jelas, yang kemungkinan besar hanya untuk keperluan bisnis. Setiap akses ke layanan internal yang berhubungan langsung dengan lingkungan production akan direkam dan dilindungi SSO, ini membantu untuk menjaga data pengguna karena dari perspektif keamanan, ancaman yang paling besar adalah dari internal.
|
||||||
|
|
||||||
|
Dan kita menerapkan Zero Trust™ untuk selalu trust but verify.
|
||||||
|
|
||||||
|
Kembali ke pembahasan, jika ini berhasil diterapkan, artinya, devbox sudah tidak perlu lagi diperlakukan sebagai VM. Yang mana seharusnya hanya do one thing and do it well: menyelesaikan pekerjaan.
|
||||||
|
|
||||||
|
Terakhir, tujuan paling penting yang ingin dicapai adalah membuat semua orang happy. Developer happy, manajemen happy, DevOps happy.
|
||||||
|
|
||||||
|
Mungkin ini akan mempersulit gue dalam membuat laporan tren utilitas mengingat sistem "on-demand" yang diterapkan, jika RFC 1 tidak gue pilih.
|
||||||
|
|
||||||
|
Tapi tidak masalah, selagi tidak ada laporan "overutilized" yang terjadi.
|
77
content/there-must-be-a-reason.md
Normal file
77
content/there-must-be-a-reason.md
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
---
|
||||||
|
title: There must be a reason
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: there-must-be-a-reason
|
||||||
|
date: 2021-11-28T11:54:42.000Z
|
||||||
|
date_updated: 2021-11-28T12:42:21.000Z
|
||||||
|
excerpt: probably
|
||||||
|
---
|
||||||
|
|
||||||
|
It was a sunny day, my friend and I were on the bus to go somewhere. I don't know exactly why I am here while I know how to get to my destination and this path is not the way.
|
||||||
|
|
||||||
|
"Turun disini aja, yuk?" I somehow asked my friend when the bus operator said we were in Sawah Besar right now.
|
||||||
|
|
||||||
|
"Lah, kenapa?" He replied suspiciously.
|
||||||
|
|
||||||
|
I know this place more than anywhere. Nothing special about this place but I know the name of a place after this. After debating with my own mind for the X time, I eventually decided to get off at Mangga Besar which is the stop after this station, and I know exactly what the name is.
|
||||||
|
|
||||||
|
"It's been 1 year, I guess". I was talking to myself as we arrived and walked to the Starbucks which was near our stop.
|
||||||
|
|
||||||
|
I can't think anything but something that has a 0.1% chance.
|
||||||
|
|
||||||
|
I know this Starbucks and so does the "Grand Paragon mall" which is the building in front of it. I'm not doing anything here but waiting.
|
||||||
|
|
||||||
|
Waiting for nothing, to be exact.
|
||||||
|
|
||||||
|
"Makan yuk? Deket sini ada KFC" I suggested my friend for lunch.
|
||||||
|
|
||||||
|
It's 3pm and I'm still waiting for nothing, but we're now at KFC, at least.
|
||||||
|
|
||||||
|
I have a schedule to go *home* at 5.30 pm but I am still stuck in this place since 2 pm.
|
||||||
|
|
||||||
|
Or maybe since late 2020? Idk.
|
||||||
|
|
||||||
|
Eventually we decided to go. I'm going back to Bandung today and my friend is going to his hometown in Tangerang. Before I went to the bus station I decided to take a little walk to the place I used to love.
|
||||||
|
|
||||||
|
In the distance I saw someone who looked very much like the one I used to know.
|
||||||
|
|
||||||
|
I walked towards her.
|
||||||
|
|
||||||
|
Damn, she *is* her.
|
||||||
|
|
||||||
|
I don't know what to say as this happened by chance.
|
||||||
|
|
||||||
|
"Masih kenal aku?" I asked her, as an opening. Just in case she really can't realize who I am as a human being.
|
||||||
|
|
||||||
|
"Masih".
|
||||||
|
|
||||||
|
There wasn't much conversation going on, just 3 words overall. She was waiting for her taxi when I looked over at her phone. Not much has changed in her, I should know this person.
|
||||||
|
|
||||||
|
I really miss her and inner her.
|
||||||
|
|
||||||
|
"Ngapain?", she said.
|
||||||
|
|
||||||
|
I don't know why I'm here and accidentally run into someone I've probably been waiting for since 2 hours ago.
|
||||||
|
|
||||||
|
I lied, since a very long time ago.
|
||||||
|
|
||||||
|
I couldn't answer her question but playing phone for no reason as I was so nervous that I accidentally meet her here.
|
||||||
|
|
||||||
|
"There must be a reason" I talked to myself.
|
||||||
|
|
||||||
|
And then she left me and got in the car shortly after, she didn't seem to care about my answer.
|
||||||
|
|
||||||
|
My brain and body seemed to stop working.
|
||||||
|
|
||||||
|
I couldn't do anything but watching her leaving.
|
||||||
|
|
||||||
|
I let her go again.
|
||||||
|
|
||||||
|
I burned my cigarette as usual and didn't move an inch while wondering why she left me without any farewell or something.
|
||||||
|
|
||||||
|
"There must be a reason" I talked to myself.
|
||||||
|
|
||||||
|
I let her go again.
|
||||||
|
|
||||||
|
[Probably](https://s3.rizaldy.club/rizaldy-club-ghost/probably/).
|
80
content/this-too-shall-pass.md
Normal file
80
content/this-too-shall-pass.md
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
---
|
||||||
|
title: This too shall pass
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: this-too-shall-pass
|
||||||
|
date: 2021-10-23T08:29:24.000Z
|
||||||
|
date_updated: 2021-10-23T08:29:24.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Kapan terakhir kali kamu bahagia?
|
||||||
|
|
||||||
|
Atau sedih? Stress? Pusing? Tidak memiliki semangat hidup? Sangat produktif? Merasa aman? Merasa tidak aman?
|
||||||
|
|
||||||
|
Apapun jawabannya, satu hal yang bisa kita setujui adalah: Tidak akan bertahan selamanya.
|
||||||
|
|
||||||
|
Kemarin malam gue berkumpul dengan teman-teman yang pernah satu sekolah dengan gue pada 12 tahun silam yang mana beberapa melanjutkan studinya di Bandung tempat gue tinggal sampai hari ini. Gue tidak menyangka mereka masih tetap ingin berteman dengan gue sekalipun gue sudah brengsek kepada mereka dengan putus kontak dan menganggap diri gue tidak ada di Bandung.
|
||||||
|
|
||||||
|
Tidak banyak yang kita bicarakan, namun yang pasti, kita berkumpul sambil membawa masalah kita masing-masing. Dari masalah karir, hubungan dengan keluarga, perihal asmara, sampai problematika dunia perkucingan yang senang buang *sampah *sembarangan. Tentu saja ada cerita yang membuat sedih dan sulit namun pada malam itu kita akan berfokus pada satu hal: melupakan sejenak masalah yang ada dan fokus bersenang-senang.
|
||||||
|
|
||||||
|
Bagaimanapun kita selalu memiliki masalah, bahkan terkadang gue merasa kehidupan sedang seperti tidak baik-baik saja ketika kehidupan gue justru sedang baik-baik saja. This must be a trap or something, curiga gue.
|
||||||
|
|
||||||
|
Anyways, pada tahun 2018 gue memiliki cerita cinta yang tak tersampaikan. Pada 2019 memiliki cerita penolakan dari tempat kerja impian gue, pada 2020 memiliki cerita tentang berakhirnya hubungan yang pernah kami buat dan bangun bersama dengan seseorang. Tentu saja banyak perasaan campur aduk yang gue rasakan pada waktu itu, dari penyesalan; marah, kekecewaan, dsb.
|
||||||
|
|
||||||
|
Tindakan tolol yang gue lakukan sebagai bentuk pelarian?
|
||||||
|
|
||||||
|
Tentu saja ada.
|
||||||
|
|
||||||
|
Gue membenci bermain DoTA, membenci pekerjaan gue sebagai Software Engineer, membenci *mechanical keyboard, *dsb hanya karena satu hal: Hal-hal tersebut membuat gue teringat akan kejadian yang pernah terjadi.
|
||||||
|
|
||||||
|
Dan itu membuat gue merasakan perasaan yang gue rasa pada waktu itu.
|
||||||
|
|
||||||
|
Lama kelamaan ada satu hal yang gue pelajari: membenci sesuatu yang pernah terjadi tidak akan merubah apapun, apalagi kondisi. Ia hanya berguna untuk memenuhi ego, dan setelah ego terpenuhi, tidak ada hal lain yang gue dapatkan selain perasaan ketika gue merasakan kejadian yang pernah terjadi tersebut.
|
||||||
|
|
||||||
|
Alias, pertanyaan yang paling penting sebenarnya adalah *apa yang sebenarnya gue inginkan dalam proses membenci tersebut?*
|
||||||
|
|
||||||
|
Damn, gue benci banget diri gue pada waktu itu yang sangat tolol. Gue benci juga sama seseorang yang memutuskan hubungan dengan gue tanpa memberikan kesempatan lagi ke gue untuk memperbaiki masalah yang ada. Gue benci juga dengan diri gue yang merasa sok pintar dan sok tahu.
|
||||||
|
|
||||||
|
Tapi detik waktu terus berjalan.
|
||||||
|
|
||||||
|
Terus menyesali kesalahan gue tidak merubah apapun, terus benci dengan keputusan yang ada pun tidak merubah apapun, dan terus membenci diri gue sendiri karena sudah merasa sok pintar dan sok tahu? Tentu saja, sekali lagi, tidak akan merubah apapun.
|
||||||
|
|
||||||
|
Lalu gue jadikan segalanya sebagai pelajaran dan beberapa sebagai pengalaman. Karena pelajaran & pengalaman tersebut gue belajar, berubah, dan terus berkembang. Bukan untuk mereka, melainkan untuk diri gue sendiri agar menjadi pribadi yang terus lebih baik lagi.
|
||||||
|
|
||||||
|
Dan lalu gue tersadar, tanpa mereka, mungkin gue tidak akan mendapatkan pelajaran & pengalaman ini. Tanpa mereka mungkin gue tidak akan pernah tau letak kesalahan gue selama ini ataupun tidak akan pernah tau mana pilihan yang menurut gue benar dan ternyata salah, dan masih banyak hal lagi.
|
||||||
|
|
||||||
|
Justru seharusnya gue berterima kasih kepada mereka, bukan malah membencinya. Karena yang mereka lakukan bukanlah hal yang mudah, apalagi dalam perkara jujur dan memberitahu letak kesalahan. Dan yang paling penting, itu berguna untuk gue ber-introspeksi dan mengenal diri gue lebih dalam lagi, so, thank you very much, I guess?
|
||||||
|
|
||||||
|
Gue tersadar dari lamunan gue ketika diajak bersulang oleh teman gue.
|
||||||
|
|
||||||
|
*"Udah lah gak usah terlalu dipikirin"*, ucapnya.
|
||||||
|
|
||||||
|
Yang sedangkan gue sedang memikirkan *draft *dari tulisan ini yang sedang kamu baca sampai paragraf ini.
|
||||||
|
|
||||||
|
Gue cuma balas senyum, lalu bersulang.
|
||||||
|
|
||||||
|
Dalam hati gue bermumam, *malam yang menyenangkan ini akan berlalu.*
|
||||||
|
|
||||||
|
*Keramaian ini akan berlalu.*
|
||||||
|
|
||||||
|
*Dan kebersamaan ini pun akan berlalu.*
|
||||||
|
|
||||||
|
Sekarang gue sedang menulis tulisan ini dengan perasaan netral, ditemani lagu dari aplikasi Apple Music, dan duduk sendiri di kamar gue yang sempit ini.
|
||||||
|
|
||||||
|
Lalu setiap orang melanjutkan kehidupannya kembali, dengan masalah yang mereka miliki masing-masing, yang diselesaikan dengan cara mereka masing-masing.
|
||||||
|
|
||||||
|
Baik itu perasaan senang atau sedih, stress atau relax, produktif atau malas, aman atau tidak aman, apapun itu, yang pasti, tidak akan bertahan selamanya.
|
||||||
|
|
||||||
|
Semua akan berlalu.
|
||||||
|
|
||||||
|
Termasuk perasaanmu yang sedang kamu rasakan pada saat ini.
|
||||||
|
|
||||||
|
I can't help anything or anyone.
|
||||||
|
|
||||||
|
Tapi jika ada sesuatu yang bisa kamu ceritakan yang sekiranya aku adalah orang tepat untuk mengetahuinya, my contact is [here.](https://s3.rizaldy.club/rizaldy-club-ghost/contact/)
|
||||||
|
|
||||||
|
Nothing last forever.
|
||||||
|
|
||||||
|
This too shall pass.
|
||||||
|
|
||||||
|
And life goes on, and on, and on, and on, and on, and on, and on, and on.
|
166
content/time-is-money.md
Normal file
166
content/time-is-money.md
Normal file
@ -0,0 +1,166 @@
|
|||||||
|
---
|
||||||
|
title: Time is money
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: time-is-money
|
||||||
|
date: 2022-04-26T11:45:30.000Z
|
||||||
|
date_updated: 2022-04-26T11:45:30.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Ini adalah seri terakhir dari brainstorming gue dalam memilih side hustle, sebelumnya gue sudah menerbitkan 2 tulisan yang berkaitan dengan series ini yang bisa diakses disini just in case kalau lo belum sempat membacanya:
|
||||||
|
|
||||||
|
- [Influencer economy](https://s3.rizaldy.club/rizaldy-club-ghost/influencer-economy/)
|
||||||
|
- [Make money grow on trees](https://s3.rizaldy.club/rizaldy-club-ghost/make-money-grow-on-trees/)
|
||||||
|
|
||||||
|
Di kondisi gue seperti sekarang ini yang sedang jenuh berurusan dengan dunia perkodingan diluar jam kerja membuat gue sedikit produktif dalam menulis daripada biasanya hahaha.
|
||||||
|
|
||||||
|
Anyways, without further ado let's start with 'Why time is money?'
|
||||||
|
|
||||||
|
## Why time is money?
|
||||||
|
|
||||||
|
Setidaknya ada 4 aplikasi media sosial yang terpasang di ponsel gue: Instagram, Twitter, Mastodon dan TikTok. Selain untuk melihat kabar teman yang tidak mengabari langsung ke gue, 3 aplikasi diatas berguna sebagai tempat membuang waktu gue untuk berpindah ke aktivitas lain di lain waktu.
|
||||||
|
|
||||||
|
Kita semua tahu bahwa 3 aplikasi diatas (Instagram, Twitter dan TikTok) dapat digunakan secara gratis oleh siapapun. Tidak sepeserpun ada uang yang harus kita keluarkan, sedangkan ada jutaan dollar yang dikeluarkan tiap bulan oleh mereka untuk membayar biaya infrastruktur. Belum lagi biaya lain seperti operasional.
|
||||||
|
|
||||||
|
Hampir 20% total waktu yang gue miliki per-hari gue habiskan untuk membuka aplikasi diatas, yang berarti anggap 4,8 jam sehari. Mereka (perusahaan yang mengoperasikan "media sosial") ingin penggunanya berlama-lama menggunakan layanan mereka, karena mereka tahu, time is money.
|
||||||
|
|
||||||
|
Berbagai cara dilakukan namun yang paling laris adalah di sistem rekomendasi, sesuatu yang biasa disebut "algoritma" oleh sebagian orang. Semakin relevan rekomendasi tersebut, semakin besar pula potensi pengguna "hooked" atau terlena dengan apa yang sistem rekomendasikan. Alasannya sederhana, pengguna tidak harus mengeluarkan usaha hanya untuk memilih apa yang ingin mereka lihat. Dan FYP nya TikTok, Explore nya Twitter, dan "Older posts" nya Instagram gue rasa menjadi bukti akan alasan tersebut, mengingat fitur-fitur tersebut masih ada dan bahkan memiliki prioritas yang lebih tinggi dari yang lain.
|
||||||
|
|
||||||
|
Apa tujuan mereka ingin penggunanya berlama-lama di platform mereka? Tentu saja uang. Semakin lama disana, semakin banyak potensi iklan yang bisa dilihat oleh pengguna mereka. Sederhana.
|
||||||
|
|
||||||
|
Sekarang, bagaimana bila kita—sebagai pengguna—ingin mengambil kesempatan itu juga? I mean, dalam platform UGC (User-generated Content), pengguna—atau lebih spesifiknya "kreator"—adalah "aset" utama mereka. Tidak ada kreator, tidak ada konten. Sederhana.
|
||||||
|
|
||||||
|
Mereka akan berusaha sekeras mungkin untuk tetap membuat platform mereka memiliki banyak konten, karena itulah yang penggunanya cari. Lihat Twitter dengan fitur "Space" nya, atau TikTok dengan filter terbarunya, dan begitupula dengan Instagram. Mereka memberikan fasilitas ke kreator agar kreator terus membuat konten. Pada dasarnya mereka tidak peduli jika konten tersebut bukan milik mereka (alias, konten yang diunggah ke platform mereka, adalah properti si kreator) karena aset utama mereka adalah kreator nya, bukan kontennya.
|
||||||
|
|
||||||
|
Berdasarkan hal itu, tentu tidak fair rasanya bila si pemilik panggung mendapatkan keuntungan sedangkan si pemeran tidak mendapatkan apa-apa selain vanity metrics seperti followers dan likes. Lihat YouTube, pengunggah video di YouTube (atau seseorang yang biasa disebut "Youtuber") memiliki motivasi untuk terus mengunggah disana (dan mungkin ada yang bergantung hidup disana) karena YouTube menjanjikan loyalti dari partner program yang mereka miliki.
|
||||||
|
|
||||||
|
Misal, kita ambil contoh TikTok. Mengapa di TikTok tidak ada sesuatu seperti yang ditawarkan oleh YouTube? Sekarang bayangkan jika ada platform lain seperti TikTok namun kreator mendapatkan loyalti. Kemungkinannya ada dua:
|
||||||
|
|
||||||
|
1. Kreator akan pindah ke platform tersebut
|
||||||
|
2. TikTok akan memiliki program tersebut juga
|
||||||
|
|
||||||
|
Yang berarti, about time, just in case anyone is curious.
|
||||||
|
|
||||||
|
Oke mungkin sekarang kita sudah kepikiran tentang kenapa waktu adalah uang. Sekarang mari kita bahas, bagaimana waktu adalah uang?
|
||||||
|
|
||||||
|
## How time is money
|
||||||
|
|
||||||
|
Apa alasanmu membaca tulisan ini? Apa alasanmu melihat vlog orang lain? Apa alasanmu menonton kursus berbentuk video tentang membuat aplikasi iOS menggunakan React Native? Jawabannya beragam, bisa karena "mencari hiburan", "mencari hal baru", "belajar", "iseng", ataupun "untuk bahan".
|
||||||
|
|
||||||
|
Tahukah dimana bagian yang paling menariknya?
|
||||||
|
|
||||||
|
"Mengapa"
|
||||||
|
|
||||||
|
Mengapa mereka ingin meluangkan waktu mereka untuk melakukan hal itu.
|
||||||
|
|
||||||
|
Mengapa mereka ingin terus melakukannya.
|
||||||
|
|
||||||
|
Mengapa mereka memilih kamu dan bukan orang lain.
|
||||||
|
|
||||||
|
Jawabannya beragam, namun yang pasti, mereka merasa bahwa waktu yang mereka sudah mereka buang tersebut setimpal.
|
||||||
|
|
||||||
|
Atau bahasa kerennya "worth it".
|
||||||
|
|
||||||
|
Ada yang rela menghabiskan 2 jam sehari untuk menonton kursus pemrograman di Udemy, karena mereka rasa 2 jam tersebut setimpal dengan apa yang akan mereka dapatkan.
|
||||||
|
|
||||||
|
Ada yang rela menghabiskan 1 jam sehari untuk *menonton *podcast di YouTube, dan alasannya masih sama.
|
||||||
|
|
||||||
|
Ada yang rela menghabiskan 1 jam sehari untuk membaca buku, membaca Al-Qur'an, menonton film, berolahraga, apapun. Dan alasannya masih sama.
|
||||||
|
|
||||||
|
Apapun tujuannya, alasannya pasti sama: karena waktu yang mereka habiskan setimpal dengan apa yang akan mereka dapat terlepas untuk mendapatkan hiburan, pengetahuan, bahan, apapun.
|
||||||
|
|
||||||
|
Sekarang kita sudah mengetahui sedikit bagaimana waktu adalah uang.
|
||||||
|
|
||||||
|
Oke mungkin kecuali bagian membaca Al-Qur'an diatas yang secara teori tidak mendapatkan materi berbentuk uang, berbeda dengan, misalnya, berolahraga yang tujuannya untuk dapat terhindari dari penyakit sehingga tidak perlu mengeluarkan uang ketika sakit.
|
||||||
|
|
||||||
|
Kita sudah membahas sedikit tentang "Mengapa mereka ingin meluangkan waktu mereka untuk melakukan hal itu", untuk jawaban "Mengapa mereka ingin terus melakukannya" beragam, namun yang gue yakin karena faktor kebutuhan.
|
||||||
|
|
||||||
|
Untuk jawaban "Mengapa mereka memilih kamu dan bukan orang lain" pun gue rasa beragam, namun yang gue yakin karena faktor preferensi.
|
||||||
|
|
||||||
|
Pertanyaan selanjutnya yang sekaligus menjadi topik inti disini adalah: Jika waktu yang sudah mereka buang tersebut setimpal, bagaimana caranya membuat waktu kita (sebagai kreator) setimpal juga?
|
||||||
|
|
||||||
|
Gue menyebut diri gue kreator karena gue menulis blog, dan konten yang gue buat adalah tulisan sebagaimana yang sedang kamu baca saat ini.
|
||||||
|
|
||||||
|
Then, if your time is money, so is my time.
|
||||||
|
|
||||||
|
## Defining goals
|
||||||
|
|
||||||
|
Jika tujuan gue menulis blog just for fun, sekalipun mungkin gue tidak pernah memikirkan hal itu, secara eksplisit goals yang ingin gue capai dalam menulis blog adalah... untuk bersenang-senang.
|
||||||
|
|
||||||
|
What if I'm not happy with it anymore? Itu pembahasan lain.
|
||||||
|
|
||||||
|
Tapi tujuan gue menulis blog bukan sebatas just for fun. I mean, come on, itu hanya salah satu tujuannya aja.
|
||||||
|
|
||||||
|
Tujuan utama gue menulis blog adalah untuk berbagi. Pemikiran, ide, dan cerita. Oke technically berbagi apa yang ingin gue bagikan aja, dan gue rasa tidak ada yang keberatan akan hal itu.
|
||||||
|
|
||||||
|
Apakah ada yang membaca tulisan-tulisan di blog gue?
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/04/CleanShot-2022-04-27-at-00.37.30@2x.png)Fuck that Bounce rate and Avg visit time
|
||||||
|
I guess?
|
||||||
|
|
||||||
|
Sejujurnya gue tidak peduli ada yang baca atau tidak. Tujuan utama gue adalah berbagi, bukan ingin dibaca.
|
||||||
|
|
||||||
|
Berbicara tentang tujuan pasti harus berbicara tentang harapan juga. Apa yang gue harapkan dari berbagi tersebut? I don't know, it's nice to have something to share, I guess?
|
||||||
|
|
||||||
|
Oke oke, jika yang gue bagikan adalah "ide", harapan gue adalah ada someone yang mungkin ter-inspirasi dengan ide gue (regardless of giving credits) dan membuat ide tersebut menjadi kenyataan.
|
||||||
|
|
||||||
|
Jika yang gue bagikan adalah "pemikiran", gue rasa gue ingin memberitahu tentang bagaimana cara gue... berpikir? Menyikapi sesuatu? Menanggapi sesuatu? Idk, you name it.
|
||||||
|
|
||||||
|
Jika yang gue bagikan adalah "cerita", gue rasa gue ingin berbagi tentang apa yang gue rasa aja. Gue kurang yakin apakah gue berhasil atau gagal dalam menyalurkan apa yang gue rasa melalui tulisan ke pembaca, tapi ini bisa jadi salah satu validasi? HAHAHA
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2022/04/CleanShot-2022-04-27-at-00.44.48@2x.png)via [Trakteer](https://trakteer.id/fariz) — FWIW Radisa is one of my longtime supporters!
|
||||||
|
Kembali ke topik, goals gue dalam menulis blog adalah untuk berlatih tentang bagaimana gue menulis dan bercerita. Jika gue menguasai 2 hal tersebut, in business terms secara teori gue bisa membuat seseorang "do action" dari apa yang ingin gue lakukan—would you [Trakteer](https://trakteer.id/fariz) me for more validation, anyone?
|
||||||
|
|
||||||
|
Oke, dampak dari orang-orang sudah tahu tentang bagaimana gue menulis bercerita, harapannya, jika gue menulis sesuatu dimanapun itu, mereka sudah terbayang terkait apa yang akan mereka dapatkan. Imagine gue menulis sesuatu di [blog nya Tailscale](https://tailscale.com/blog/), lo udah tau bagaimana cara gue menulis dan bercerita dan lo merasa "worth it" untuk melakukannya. You get something, I get metrics.
|
||||||
|
|
||||||
|
Everyone wins, right?
|
||||||
|
|
||||||
|
Mendefinisikan goals, gue rasa, selain berguna untuk menentukan ROI juga berguna untuk menjaga konsistensi. Konsistensi disini beragam, tapi dalam kasus gue adalah seperti "what would you expect from reading my blog" dan "what would I expect from writing blogs". Bagi pembaca setia (HAHAHA) blog gue yang ini, lo pasti merasa ga bisa expect gue akan menerbitkan tentang apa. Tentang programming? Tentang network administration? Tentang cinta? Tentang duit?
|
||||||
|
|
||||||
|
Random aja gitu, dan itu intended.
|
||||||
|
|
||||||
|
Justru gue gak expect kalau misalnya ada yang bisa menentukan seperti "besok si faultables pasti nulis tentang React", like, tf man I don't even know it hahaha.
|
||||||
|
|
||||||
|
Lalu apa yang gue expect? Like, nothing. Untuk blog ini ya.
|
||||||
|
|
||||||
|
Ada yang baca, ya bagus, ada yang share, ya alhamdulillah, ada yang merasa mendapatkan wawasan, ya thank you, ada yang merasa klo waktunya ternyata terbuang sia-sia, ya sorry.
|
||||||
|
|
||||||
|
Oke oke balik lagi ke topik, mendefinisikan goals disini gue rasa tidak harus realistis. Like, what is realistic when we haven't reached it yet, anyway? Some people may be confused with "unrealistic goals" when they don't even define any milestone yet. Dan gue rasa bukan hak gue untuk membahas tentang KPI dan OKR, oke mungkin belum.
|
||||||
|
|
||||||
|
Let's be honest, gue ingin menulis buku. I know I know ini seperti "just another faultables bullshit" but take my word untuk saat ini gue serius. Gue terlalu fokus di ingin "menulis buku yang ingin gue tulis" dalam menerbitkan sebuah buku sedangkan milestone yang harus gue capai terlebih dahulu gue rasa harusnya adalah "menulis buku yang ingin pembaca gue baca".
|
||||||
|
|
||||||
|
Ada 3 jenis buku yang kepikiran ingin gue tulis:
|
||||||
|
|
||||||
|
- Novel fiksi (based on my life)
|
||||||
|
- Buku teknis tentang infrastruktur (DevOps for Programmers)
|
||||||
|
- Buku teknis tentang programming (Why programmers... program?)
|
||||||
|
|
||||||
|
Sooooo can you guys pick one for me? Please?
|
||||||
|
|
||||||
|
[Novel Fiksi](javascript:void(0))
|
||||||
|
|
||||||
|
[Buku teknis tentang infra](javascript:void(0))
|
||||||
|
|
||||||
|
[Buku teknis tentang programming](javascript:void(0))
|
||||||
|
|
||||||
|
Voting bersifat anonim dan make sure Adblock lo kagak block script umami gue ya ;)
|
||||||
|
|
||||||
|
## Penutup
|
||||||
|
|
||||||
|
Gue kepikiran bikin tulisan ini ketika mencoba memahami "mengapa orang-orang menyawer orang yang live streaming". Tentu jawaban "karena gue (ingin) support dia bang" saja tidak cukup dan jawaban "because they deserve it" terlalu misterius. Setelah gue pelajari, gue rasa jawabannya adalah "karena worth it" itu.
|
||||||
|
|
||||||
|
Waktu yang mereka luangkan untuk menonton live streaming kreator favoritnya dan uang yang mereka keluarkan untuk mendukung kreator favoritnya terasa "worth it" dengan apa yang mereka dapat: entah itu hiburan, pengetahuan, apapun.
|
||||||
|
|
||||||
|
Semoga sampai sini sudah mengerti maksud dan tujuan gue menulis ini, ya?
|
||||||
|
|
||||||
|
Okay so, why are we still here?
|
||||||
|
|
||||||
|
Still reading down to here?
|
||||||
|
|
||||||
|
How much time did you spend reading this?
|
||||||
|
|
||||||
|
Is it worth it?
|
||||||
|
|
||||||
|
If so, consider to clicking the button below.
|
||||||
|
|
||||||
|
So I know if my time is worth writing this, for this time.
|
||||||
|
|
||||||
|
And then everyone wins.
|
132
content/to-not-giving-a-fuck.md
Normal file
132
content/to-not-giving-a-fuck.md
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
---
|
||||||
|
title: To not giving a fuck
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: to-not-giving-a-fuck
|
||||||
|
date: 2022-04-05T14:44:59.000Z
|
||||||
|
date_updated: 2022-04-05T14:44:59.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Atensi adalah salah satu mata uang di internet. Ruang kosong dibagian kanan halaman di hampir setiap situs berita; *overlay* dibawah video di Youtube, ataupun video *autoplay *setiap kali membuka aplikasi TikTok, menginginkan satu hal: Atensi.
|
||||||
|
|
||||||
|
Dilihat saja sudah menambah metriks, apalagi jika ada action yang dilakukan.
|
||||||
|
|
||||||
|
Pada tahun 2019 kemarin ada satu buku bagus yang berhasil gue baca: The Subtle Art of Not Giving a Fuck. Bukunya ringkas, bahasanya sederhana, dan somehow gue sangat menikmatinya. Bila merefleksikan diri gue di masa lalu, pada saat itu gue relatif banyak memberikan perhatian gue kepada banyak hal; dari yang penting sampai ke yang biasa aja.
|
||||||
|
|
||||||
|
Setelah membaca buku tersebut pikiran gue terbukakan bahwasanya gue tidak bisa peduli ke banyak hal, pada akhirnya. Bagaimanapun gue memiliki urusan dan masalah juga, tidak jarang banyak, dan sayangnya setiap orang memiliki waktu yang sama yakni 24 jam dalam sehari, tidak kurang dan tidak lebih. Namun waktu bukanlah yang menjadi alasan utama gue, melainkan "umpan balik" yang didapat ketika gue memberikan waktu gue untuk sesuatu yang harus gue pedulikan tersebut.
|
||||||
|
|
||||||
|
Apa yang gue rasakan ketika 10 menit gue dihabiskan untuk melihat pembaruan Instagram Stories dari teman-teman gue?
|
||||||
|
|
||||||
|
Apa yang gue rasakan ketika 30 menit membuka Twitter dan melihat pembaruan di lini masa gue?
|
||||||
|
|
||||||
|
Jawabannya beragam namun seringnya gue merasa capek; bingung, dan terkadang marah. Namun dari buku tersebut gue belajar bahwa salah satu seni untuk tidak memperdulikan adalah bukan dengan "menutupnya" namun dengan... menghiraukannya.
|
||||||
|
|
||||||
|
Seperti, alih-alih lo menutupi jendela dengan gorden karena merasa keterangan akan cahaya matahari yang masuk, melainkan lo menghindarinya dengan tidak melihat ke jendela tersebut.
|
||||||
|
|
||||||
|
You lose the battle but you win the war.
|
||||||
|
|
||||||
|
## The game of giving a fuck
|
||||||
|
|
||||||
|
Pernah suatu ketika gue sedang diganggu oleh seseorang. Tidak secara langsung, namun siapapun akan tau jika itu ditunjukkan untuk gue.
|
||||||
|
|
||||||
|
Seseorang tersebut jelas membutuhkan atensi dari gue, terlepas tujuannya apa. Jika tujuan adanya banner iklan adalah agar diklik oleh siapapun yang melihatnya, yang ini adalah agar gue memberikan waktu gue untuk menggubrisnya.
|
||||||
|
|
||||||
|
Sesuatu yang dia lakukan adalah aktivitas yang setiap orang tidak inginkan, bukan hanya gue. Lalu gue seperti diajak bermain yang mana dia membuat kondisi dimana gue adalah penjahat dan alasan dia melakukan hal tersebut adalah gue.
|
||||||
|
|
||||||
|
Gampangnya seperti ini. Lo mencuri makanan karena lo lapar, ketika lo ditangkap, alasan lo mencuri adalah karena gue tidak memberikan makanan. Disitu gue seakan-akan seperti penjahat yang membuat orang lain berpikir *"Jahat banget dia gak ngasih makanan" *dan seharusnya membuat gue berpikir seperti *"Andai gue kasih dia makanan, pasti dia gak melakukan hal itu".*
|
||||||
|
|
||||||
|
Yang padahal, tindakan "mencuri makanan" tersebut murni dilakukan oleh orang tersebut. Tidak ada satupun yang menyuruh dia untuk melakukannya, dan masih banyak cara lain yang mungkin bisa dilakukan tanpa harus merugikan siapapun.
|
||||||
|
|
||||||
|
Jika tindakan yang dia yakini adalah hal yang benar, silahkan bayangkan dunia dimana setiap orang menghalalkan segara cara untuk selalu bisa mendapatkan apa yang dia inginkan.
|
||||||
|
|
||||||
|
## The cost of giving a fuck
|
||||||
|
|
||||||
|
Sekarang begini, anggap gue memberikan atensi yang dia butuhkan. Apa yang dia dapat?
|
||||||
|
|
||||||
|
Kepuasan.
|
||||||
|
|
||||||
|
Seperti lo sedang ingin minum, meminta air ke gue, lalu gue memberikannya.
|
||||||
|
|
||||||
|
Yang padahal lo sedang tidak haus sama sekali sedangkan gue membutuhkan air tersebut untuk hal lain.
|
||||||
|
|
||||||
|
Hal ini merugikan siapapun. Pertama, ini merugikan diri lo sendiri. Sesuatu yang lo anggap benar tersebut mendapatkan validasi bahwasannya anggapan tersebut sudah menjadi fakta. Sehingga lo akan terus melakukan hal tersebut karena tidak ada yang menganggap hal tersebut adalah sebuah kesalahan.
|
||||||
|
|
||||||
|
Kedua, itu merugikan orang lain, tentu saja.
|
||||||
|
|
||||||
|
Harusnya aneh jika lo tidak mengerti poin ini.
|
||||||
|
|
||||||
|
## Are you just lacking empathy?
|
||||||
|
|
||||||
|
Begini, bukan berarti lo tidak menolong orang sama dengan lo tidak memiliki empati. Lihat sekeliling lo, lalu lihat ke yang lebih luas; peperangan, keterbatasan makanan, pandemi yang tak kunjung selesai, pemanasan global.
|
||||||
|
|
||||||
|
Apakah lo peduli dengan hal itu? Tentu.
|
||||||
|
|
||||||
|
Tapi apa yang bisa lo lakukan? Hanya melakukan yang lo mampu.
|
||||||
|
|
||||||
|
Pertanyaannya, apakah lo tidak memiliki masalah juga? Besar kemungkinan jawabannya adalah punya. Terlepas masalah tersebut besar atau kecil, masalah tetaplah masalah.
|
||||||
|
|
||||||
|
Dan gue merasa lucu dengan kondisi menomor satukan orang lain dan menomor duakan diri sendiri. Mungkin gue nya aja yang terlalu individualis, tapi, sebagai contoh, meminjamkan uang ke teman sedangkan kita membutuhkan uang tersebut adalah hanya memindahkan masalah teman lo tersebut ke diri lo sendiri.
|
||||||
|
|
||||||
|
Siapa yang akan membantu lo?
|
||||||
|
|
||||||
|
Teman lo lagi?
|
||||||
|
|
||||||
|
Lalu membuat skema Ponzi dimana orang yang terakhir yang paling rugi? Atau mendapat keberuntungan karena orang terakhir tajir melintir?
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Dalam belajar dari pengalaman, ada dua tipe yang sejauh ini gue ketahui: belajar dari pengalaman orang lain dan belajar dari pengalaman diri sendiri.
|
||||||
|
|
||||||
|
Untuk dapat mengira bagaimana seseorang tersebut belajar, lo setidaknya bisa lihat dari cara dia mendengar. Jika dia hanya ingin mendengar apa yang ingin dia dengar, besar kemungkinan orang tersebut adalah tipe yang hanya ingin belajar dari pengalamannya sendiri. Dia tidak akan percaya bahwa duri itu tajam sampai tangan dia sendiri yang berdarah ketika menyentuhnya.
|
||||||
|
|
||||||
|
Di masa lalu ada seseorang yang menyakiti dirinya sendiri yang dengan maksud ingin mendapatkan perhatian dari diri gue, yang gue rasa agar gue merasa bersalah. Jika memang tujuannya bukan itu, toh dia bisa menyakiti diri sendiri tanpa harus memberitahukan kepada siapapun.
|
||||||
|
|
||||||
|
Gue tidak terbayang jika dia menyayat tangannya setiap kali ingin mendapatkan apa yang dia inginkan, akan seperti apa tangan tersebut? Bayangkan ketika dia butuh perhatian gue, lalu gue tidak merespon. Lalu dia menyayat tangannya dan membagikannya ke media sosial, lalu gue respon. Apalagi yang ada di pikirannya jika bukan *"Oh gini caranya biar dapet perhatian dari lo"?*
|
||||||
|
|
||||||
|
Dan gue membiarkannya.
|
||||||
|
|
||||||
|
Gue ingin memberitahu bahwa *cutting *tidak menyelesaikan apapun dan masih banyak cara yang bisa dilakukan untuk mendapatkan "ketenangan sesaat" tanpa harus menyakiti diri sendiri.
|
||||||
|
|
||||||
|
Gue ingin memberitahu bahwa yang punya masalah ataupun yang menderita di dunia ini bukan hanya dia.
|
||||||
|
|
||||||
|
Gue ingin memberitahu bahwa yang tidak mendapatkan apa yang diingkan bukan hanya dia.
|
||||||
|
|
||||||
|
Dan gue bukan bermaksud balas dendam akan apa yang pernah dan atau sedang gue rasakan.
|
||||||
|
|
||||||
|
Sekali lagi setiap orang berbeda-beda dalam belajar dari pengalaman, dan gue hanya membantunya untuk memahami.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Jika lo merasa sedang dalam peperangan, lo harus fokus bahwa yang harus lo lakuin adalah menang dalam peperangan, bukan pertempurannya.
|
||||||
|
|
||||||
|
Jika serangan yang didapat dirasa menganggu, jelas itu tujuan mereka.
|
||||||
|
|
||||||
|
Dalam peperangan, tidak ada yang menang atau kalah. Hanya rugi dan yang paling merugi. Since waktu adalah uang, siapapun yang merasa paling banyak dihabiskan waktunya, dialah yang dirasa paling merugi.
|
||||||
|
|
||||||
|
Meskipun jalan keluar dari peperangan dingin adalah dengan berbicara, terkadang memilih diam adalah jalan keluar untuk menghindari peperangan yang memakan kerugian yang lebih besar. Tidak ada yang menang ataupun kalah, hanya yang rugi dan yang paling rugi.
|
||||||
|
|
||||||
|
Jika sesuatu akan berhenti ketika sudah mendapatkan apa yang diinginkan, seharusnya sesuatu tersebut bisa berhenti juga ketika tidak mendapatkan apa yang diinginkan.
|
||||||
|
|
||||||
|
Kapan akan berhenti? Biasanya ketika merasa apa yang didapat tidak sebanding dengan apa yang dikeluarkan.
|
||||||
|
|
||||||
|
Mungkin lo tidak percaya, sampai lo merasakannya sendiri.
|
||||||
|
|
||||||
|
Dalam melakukan hal yang merugikan orang lain, gue tidak jarang berpikir seperti *"Bagaimana bila orang tersebut adalah gue?" *lalu mengurungkannya karena percaya bahwa karma itu ada, khususnya untuk karma buruk.
|
||||||
|
|
||||||
|
Dan bila ternyata orang tersebut adalah gue, mau tidak mau gue akan menjadi bagian dari karma buruk seseorang tersebut, demi kebaikan dia sendiri, jika memang dia ingin membenah diri.
|
||||||
|
|
||||||
|
Sebagai penutup, peperangan sendiri tidak akan ada jika tidak ada yang memulai.
|
||||||
|
|
||||||
|
Namun jika sudah terlanjur termulai, gue sudah memberikan salah satu cara untuk memenangkannya.
|
||||||
|
|
||||||
|
Dan salah satu penyebab dimulainya adalah ketika giving a fuck.
|
||||||
|
|
||||||
|
Membandingkan orang lain dengan diri sendiri.
|
||||||
|
|
||||||
|
Mempertanyakan keberhasilan orang lain dengan kegagalan diri sendiri.
|
||||||
|
|
||||||
|
Mencari kesalahan orang lain untuk mendapatkan pembenaran terhadap diri sendiri.
|
||||||
|
|
||||||
|
Dan tujuannya sudah jelas bukan sebagai bahan evaluasi ataupun motivasi, karena lo tahu mana langkah yang harus lo ambil ketika yang lo tuju adalah hal tersebut.
|
||||||
|
|
||||||
|
Some people might not realize it, now you did.
|
76
content/tulisan.md
Normal file
76
content/tulisan.md
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
---
|
||||||
|
title: Tulisan
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: tulisan
|
||||||
|
date: 2023-05-07T15:05:05.000Z
|
||||||
|
date_updated: 2023-05-07T15:05:05.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Hari Sabtu kemarin diajak teman untuk bertemu di salah satu tempat kopi berlogo putri duyung (as always) di kawasan Jakarta Selatan. Terakhir bertemu dengan dia mungkin sekitar akhir Desember 2022 kemarin sebelum gue pindah ke tempat tinggal.
|
||||||
|
|
||||||
|
Karena doi memiliki *platform *yang bergerak di *creator economy*, kita berbagi insight terkait bagaimana kondisi saat ini khususnya di Indonesia, yang dilanjutkan dengan cerita tentang kehidupan tanpa adu nasib haha. Anyways, dari berbagai insight yang didapat, yang bisa dibagikan kurang lebih adalah ini:
|
||||||
|
|
||||||
|
- Tren *streaming *masih di puncak, tapi tidak senaik ketika masa PPKM
|
||||||
|
- Challenge selanjutnya dari pengelola platform adalah menyesuaikan dengan kondisi paska PPKM tidak seketat sebelumnya ataupun sudah usai
|
||||||
|
- Ini yang paling menarik: Media tulisan masih cukup laku meskipun berada di posisi kedua
|
||||||
|
|
||||||
|
Ditengah gempuran media berbagi video singkat, justru gue agak pesimis dengan media tulisan yang relatif statis dan memakan waktu yang lebih banyak. Coba bandingkan dengan penjelasan "Apa itu Docker?" di media tulisan yang mungkin memakan 1000 kata lebih (dengan 40 wpm berarti akan memakan waktu 25 menit) dengan video di TikTok/Reels yang berdurasi tidak lebih dari 5 menit.
|
||||||
|
|
||||||
|
Of course jelas perbedaannya khususnya di cakupan penjelasan, tapi bukan itu poinnya.
|
||||||
|
|
||||||
|
Secara pribadi, gue lebih memilih media tulisan untuk kebanyakan kasus. Jika sedang buru-buru, di media tulisan gue bisa lebih mudah untuk mencari apa yang diinginkan daripada harus mengira-ngira di menit keberapa sesuatu yang gue cari ada. Tidak jarang juga gue menikmati lebih banyak hiburan dari media tulisan daripada menonton video yang entah mungkin karena terasa lebih intim.
|
||||||
|
|
||||||
|
Tapi ada beberapa alasan pribadi lain yang menurut gue adalah kekurangan, tapi sekaligus menjadi kelebihan tersendiri dari media tulisan ini.
|
||||||
|
|
||||||
|
## Information tokens
|
||||||
|
|
||||||
|
Semenjak informasi menjadi lebih mudah didapatkan dan tak terbatas, kurasi diperlukan untuk mendapatkan lebih banyak signal daripada noise. Gue kurang yakin apakah otak/ingatan itu terbatas, tapi gue hampir lupa apa yang gue lakukan di jam 15.00 sampai sebelumnya tadi sore. Tapi ada beberapa informasi yang gue masih ingat yang terjadi di hari ini: Teman dekat gue lamaran, dan 2 teman gue ada yang melaksanakan pesta menikah. Jika tidak salah ingat, ada teman gue yang sedang merayakan syukuran kelahiran juga.
|
||||||
|
|
||||||
|
Itu adalah 3 informasi yang gue dapat hari ini. Informasi lain? Gue membaca tentang Burnout yang dirasakan oleh *programmer *kondang yang gue langganan RSS feed nya, gue membaca pendapat tentang mengapa HTMX adalah masa depan, terus... apa lagi, ya? Apakah informasi tersebut penting? Jawabannya selalu tergantung.
|
||||||
|
|
||||||
|
Anggap dalam sehari kita membuat budget 1 jam untuk mencari informasi. Di media tulisan yang misalnya memiliki waktu baca rata-rata 10 menit, setidaknya gue bisa mendapatkan 6 informasi per-hari. 2 informasi diatas gue dapat dari Instagram Story dari 4 orang (15s/story), total 21 menit gue sudah digunakan untuk mendapatkan informasi di hari ini. Kadang, masalahnya bukan di seberapa lama, tapi di seberapa banyak. Jika sumber informasi hanya dari Instagram Story, dengan budget 1 jam setidaknya bisa mendapatkan 900 informasi jika memang berdedikasi untuk melakukannya. Atau jika misalnya dari Reels, bisa mendapatkan 60 informasi jika masing-masing video hanya berdurasi 1 menit.
|
||||||
|
|
||||||
|
Apakah 60 atau 900 informasi pada hari tersebut layak untuk diketahui? Tergantung, as always.
|
||||||
|
|
||||||
|
Kadang gue udah merasa capek jika dalam sehari sudah melihat 3 story yang isinya foto pernikahan. Atau, setelah iseng membaca satu thread yang lagi rame di Twitter. Kadang juga, gak kerasa nonton series 5 jam non-stop karena why not. Pada dasarnya segala sesuatu yang didapat dari indera adalah informasi, bukan? Bukan hanya tentang fakta atau peristiwa.
|
||||||
|
|
||||||
|
Kembali ke pembahasan, dengan cukup pede gue kuat mendapatkan informasi (khususnya melalui media tulisan) maksimal 45 menit (3 batang sampoerna mild) per sesi. Selebihnya, jika mata gue belum capek harusnya pikiran gue udah gak fokus. Sesi ini agak beragam, bisa ketika pas di kamar mandi (1-2 batang); pas di perjalanan (~30 menit pasming-kuningan), pas makan dan abis makan (1-2 batang), dll. Paling banyak kalo abis mandi di akhir pekan dan gak kemana-mana (3 batang).
|
||||||
|
|
||||||
|
Keterbatasan ini memaksa gue memiliki jeda untuk melakukan hal lain mungkin seperti istirahat atau melakukan hal penting seperti memindahkan handuk dari kasur ke kursi. Di media video, relatif sulit untuk mendapatkan jeda karena tidak merasakan sesuatu yang membuat harus memiliki jeda. Seperti menonton serial Suits yang bisa sampai 6 seri atau The Chainsaw Man yang gue selesaikan dalam satu sesi. Tanpa merasa capek. Tanpa merasa lapar. Tanpa merasa jarum detik terus berjalan.
|
||||||
|
|
||||||
|
Yang bisa dianggap, perhari gue memiliki maksimal 4 "information tokens" yang bisa gue maksimalkan. Sumber informasi yang gue pilih sebenarnya hanya 2: [Hacker News](https://news.ycombinator.com) yang dikurasi dari Front Page nya dan beberapa blog yang tidak setiap hari ada pembaruan. Bahkan gue berlangganan ke beberapa *newsletter *seperti dari Deno, Tailscale, dan APNIC yang hanya didapat mingguan dan bulanan.
|
||||||
|
|
||||||
|
Kadang sehari gak cari informasi apapun kalau lagi sibuk main permainan, dan gue tidak menyesali itu.
|
||||||
|
|
||||||
|
Sebagai kesimpulan: media tulisan terkadang membosankan dan melelahkan, tapi justru itu gue buat sebagai "kelebihan" untuk memberikan jeda. Pernah gue menonton video happy happy happy di reels yang tidak terasa sudah 3 jam berada di Instagram.
|
||||||
|
|
||||||
|
## The indescribable
|
||||||
|
|
||||||
|
Terkadang ada beberapa hal yang tidak bisa ataupun tidak relevan digambarkan.
|
||||||
|
|
||||||
|
Di media tulisan, pada dasarnya kita tidak dipaksa untuk membuat representasi visual tentang apa yang ingin kita utarakan. Bahkan jika lo sedang marah dan ingin meluapkannya ke media tulisan, dan tidak tahu harus menulis apa, sekalipun hanya berisi ljsdkghdilfungvsodi;jeirvn fksjvhlkfs fvelfsjnvskontol setidaknya sudah sedikit menggambarkan apa yang dirasa dan tidak jarang juga akan merasa baikkan karena sudah meluapkan.
|
||||||
|
|
||||||
|
kontooooool
|
||||||
|
|
||||||
|
Kalimat diatas hanya contoh yang bisa digunakan untuk menggambarkan kondisi baru sadar belum matiin AC setelah pergi dari kamar selama 8 jam dan bardi lo offline.
|
||||||
|
|
||||||
|
Selain mengekspresikan perasaan yang tidak bisa digambar, media tulisan terkadang memiliki zat adiktif aneh yang tidak didapat dari sinyal yang mengeluarkan bunyi di *speaker* ataupun yang menampilkan kumpulan piksel yang membentuk grafis 2D di layar. Seperti, entahlah. Mungkin dari cara menulis? Cara membuat komunikasi dengan si pembaca? Atau, fantasi yang dibebaskan ke pembaca tentang apa yang diutarakan oleh si penulis? Ya, mungkin itu bagian terbaiknya: kita sendiri yang menggambarkan apa yang ada dipikirannya, bukan sebaliknya.
|
||||||
|
|
||||||
|
Bahkan gue pernah ikut senyum ketika membaca kalimat yang bertuliskan "hehe" karena membayangkan si penulis berbicara "hehe" tersebut. Sangat liar. Dan si penulis tersebut adalah
|
||||||
|
|
||||||
|
## Penutup
|
||||||
|
|
||||||
|
Sebelumnya gue sangat senang menulis karena media ini dirasa tepat untuk menumpahkan apa yang ada dipikiran. Gue tidak perlu memikirkan lawan bicara, tidak perlu memikirkan responnya, tidak perlu memusingkan isi pikirannya. Teman gue yang sempat disinggung di awal tulisan sempat bertanya "sekarang nulis dimana nih?" yang meskipun terdengar basa-basi, setidaknya menggambarkan bahwa gue dikenal karena sebuah tulisan.
|
||||||
|
|
||||||
|
Gue jawab "sibuk nulis di VS Code" sambil bercanda.
|
||||||
|
|
||||||
|
Ada banyak yang ingin gue tulis, ada banyak yang ingin gue bagikan. Ada banyak isi pikiran yang ingin gue tumpahkan ke media tulisan ini. Namun gue memiliki pelarian lain. Media lain.
|
||||||
|
|
||||||
|
Pelarian itu adalah tidur.
|
||||||
|
|
||||||
|
Ketika telah mengetik beberapa paragraf dan menuangkan beberapa isi pikiran ke media dalam bentuk tulisan, gue sudah tidak ingat apa yang terjadi ditengah tulisan tersebut. Lalu mendengar suara alarm, mencuci muka, dan kembali menulis di VS Code. Atau sudah berada di google meet jika hari akan terasa panjang.
|
||||||
|
|
||||||
|
Per tulisan ini dibuat, setidaknya ada 48 tulisan yang menjadi berakhir di drafts. Semoga ini tidak menjadi yang ke 49.
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2023/05/0c65c2ce67e8f7493be7ceaf44235a5a.jpeg)
|
||||||
|
Yang seharusnya akan diterbitkan di jam 05.05 nanti.
|
32
content/underrated-jkt48-songs.md
Normal file
32
content/underrated-jkt48-songs.md
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
---
|
||||||
|
title: Underrated JKT48 songs
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: underrated-jkt48-songs
|
||||||
|
date: 2023-09-14T12:48:00.000Z
|
||||||
|
date_updated: 2023-10-31T11:26:13.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
So this happened. I went too far down the rabbit hole and let myself drown in ngidol. Even though I've never been to the "Theater" (despite fX Sudirman is often my go-to place after work) I know that they—the idol group—have something called a "setlist" a.k.a [Lagu Panggung](https://jkt48.com/theater/song) from [Pajama Drive](https://jkt48.com/theater/song-list/id/1) to [Cara Meminum Ramune.](https://jkt48.com/theater/song-list/id/20)
|
||||||
|
|
||||||
|
Some songs are not available on mainstream music streaming platforms like Spotify and Apple Music for some reason, so it's actually understandable why some of the songs here are relatively underrated. I found it partly from concerts/festivals and the rest is from my free time while waiting for the CI/CD pipeline to complete.
|
||||||
|
|
||||||
|
This is an "evergreen list" and I will update it as soon as I find it and play it at least 48 times a day. I share it _to_ the internet as I have no reason to keep it to myself.
|
||||||
|
|
||||||
|
1. [Kereta Kedewasaan](https://music.youtube.com/watch?v=yFjMaGg_GGk)[^1]
|
||||||
|
2. [Musim Yang Selanjutnya](https://music.youtube.com/watch?v=QjQnWaJQSi4)[^1]
|
||||||
|
3. [Fajar Sang Idola](https://music.youtube.com/watch?v=HTWkbbcAZ0Q)[^1]
|
||||||
|
4. [Jiwaru Days](https://music.youtube.com/watch?v=VQEJ239C2ZY)[^2]
|
||||||
|
5. [Kesimpulan yang sedikit membuatku malu setelah beberapa hari berpikir akan berubah seperti apakah hubungan kita jika di jalan yang penuh pohon rindang kukatakan Indahnya senyum manismu dalam mimpiku](https://music.youtube.com/watch?v=RH_2pLlHN8Y)[^2]
|
||||||
|
6. [Seventeen](https://music.youtube.com/watch?v=JvGpGRzJ38U)[^2]
|
||||||
|
7. [Value Milikku Saja](https://music.youtube.com/watch?v=ghlDCbl_O3I)[^1]
|
||||||
|
8. [Musim Panas Sounds Good](https://music.youtube.com/watch?v=4ARoGLlZQmw)[^1]
|
||||||
|
9. [New Ship](https://music.youtube.com/watch?v=gIcQfEMjDXg)[^3]
|
||||||
|
|
||||||
|
JKT48 is a sister group of 48 groups, so some songs are adaptions of the original with slight adjustments from the arrangement to the lyrics.
|
||||||
|
|
||||||
|
I know that my taste in music (or everything in my life) is questionable. But whenever I'm down, getting lost in JKT48 songs sometimes becomes my sweet escape. In joy and sorrow.
|
||||||
|
|
||||||
|
[^1]: Update 17/09/2023: Available on Apple Music, finally.
|
||||||
|
[^2]: Update 29/10/2023: Available on Apple Music, finally. Thanks, JOT.
|
||||||
|
[^3]: Update 01/11/2023: Available on Apple Music (under Mahagita Vol. 2).
|
130
content/walled-garden.md
Normal file
130
content/walled-garden.md
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
---
|
||||||
|
title: Walled garden
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: walled-garden
|
||||||
|
date: 2023-01-15T07:02:58.000Z
|
||||||
|
date_updated: 2023-01-15T07:02:58.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Pada 30 Oktober 2020 kemarin gue pergi ke sebuah tempat bernama Farmhouse di daerah Lembang. Selain menjadi salah satu alasan jalan Lembang-Setiabudi macet di akhir pekan, Farmhouse masih menjadi destinasi wisata favorit untuk mereka yang sedang berlibur di kota Bandung.
|
||||||
|
|
||||||
|
Tiket masuk ke farmhouse relatif murah untuk dua orang meskipun gue lupa berapa tepatnya. Tiket tersebut nantinya dapat ditukar dengan food/beverage eksklusif seperti Susu atau Sosis jika gue tidak salah ingat. Jika dilihat dari aktivitas pengunjung di tempat tersebut, bisa disimpulkan bahwa yang dijual dari tempat ini adalah pemandangan, baik untuk dinikmati pribadi atau diabadikan di instagram story.
|
||||||
|
|
||||||
|
## Gardening
|
||||||
|
|
||||||
|
Berkebun adalah salah satu hobi, tidak sedikit yang menikmati aktivitas merawat dari apa yang ditanam tersebut karena selain menyenangkan juga terkadang menenangkan. Tidak jarang aktivitas berkebun juga membuahkan hasil berbentuk materi, dan Farmhouse Susu Lembang salah satu contohnya. Meskipun aktivitas berkebun relatif umum, salah dua yang membedakan Farmhouse dengan kebun-kebun lainnya adalah aksesibilitas, dan tentu saja keindahannya yang lebih unggul dari kebun-kebun lain.
|
||||||
|
|
||||||
|
Orang tua gue juga memelihara tanaman di rumahnya meskipun relatif sedikit. Di sekian hari setiap pagi/sore, mereka menyiram tanaman-tanaman tersebut di belakang rumah, depan, dalam, dan terkadang samping. Meskipun membutuhkan mobilitas, tampaknya mereka menikmatinya.
|
||||||
|
|
||||||
|
Dan aroma dari tanah yang basah oleh air sejujurnya lebih enak dihirup daripada aroma asap yang keluar dari hasil pembakaran tembakau dan kertas.
|
||||||
|
|
||||||
|
## Digital Gardening
|
||||||
|
|
||||||
|
Sebutan ini sudah menjadi sesuatu. Pembeda kontras antara kebun di dunia fisik dan digital adalah apa yang ditanam: kebun di dunia digital, yang ditanam (bibit) adalah "pemikiran" mengingat "dunia digital" erat kaitannya dengan informasi.
|
||||||
|
|
||||||
|
Salah satu bentuk kebun digital yang cukup populer adalah Wiki, yang umumnya tentang apapun yang menjadi ketertarikan dari si "tukang kebun" tersebut. Seperti, jika si tukang kebun tersebut tertarik dengan "kultur jepang" mereka akan mengumpulkan informasi yang berkaitan dengan ketertarikan tersebut.
|
||||||
|
|
||||||
|
Sounds familiar?
|
||||||
|
|
||||||
|
Informasi yang dikumpulkan tersebut pada dasarnya saling terhubung dan dipetakan sebagai grafik. Jika cukup familiar dengan [Mind Map](https://en.wikipedia.org/wiki/Mind_map) dan atau [Knowledge Graph](https://en.wikipedia.org/wiki/Knowledge_graph), pada dasarnya bentuk "digital garden" ini seperti gabungan antara Wiki dan Mind Map: semua informasi dipetakan, namun dalam bentuk tekstual daripada visual, plus, saling terhubung.
|
||||||
|
|
||||||
|
Contohnya grafiknya adalah seperti ini:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2023/01/CleanShot-2023-01-15-at-17.19.06.png)[Sumber](https://integralguide.com)
|
||||||
|
Dan jika kita klik misalnya "Pokemon Go" akan menjadi seperti ini:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2023/01/CleanShot-2023-01-15-at-17.19.59.png)[Sumber](https://integralguide.com)
|
||||||
|
Dan jika kita coba klik "ADHD" akan menjadi seperti ini:
|
||||||
|
![](https://s3.rizaldy.club/rizaldy-club-ghost/content/images/2023/01/CleanShot-2023-01-15-at-17.20.55.png)[Sumber](https://integralguide.com)
|
||||||
|
Maksud dari 3 tangkapan layar diatas adalah untuk menampilkan segala sesuatu yang berkaitan dengan "Gamification", "Pokemon Go", dan "ADHD". Yang berarti, jika misalnya, misalnya nih, lo teridentifikasi **oleh profesional** memiliki ADHD, mungkin lo harus menghindari bermain Pokemon Go karena game tersebut menggunakan Gamification... dan Gamification meng-trigger ADHD.
|
||||||
|
|
||||||
|
Informasi-informasi yang ada di wiki tersebut bersifat evergreen, gampangnya, akan terus selalu di-update sebagaimana aktivitas dari "perawatan" dalam berkebun pada umumnya.
|
||||||
|
|
||||||
|
Dan setiap orang tidak jarang memiliki makna indah sendiri, tapi kita setuju bahwa sesuatu yang indah adalah yang sesuatu yang dapat dinikmati.
|
||||||
|
|
||||||
|
## Social Media
|
||||||
|
|
||||||
|
Sadar tidak sadar ataupun setuju tidak setuju, media sosial adalah salah satu bentuk dari kebun digital. Sebagaimana aktivitas berkebun di dunia fisik, tidak ada yang mendikte harus bagaimana kebun tersebut. Mungkin ada yang lebih senang membuat kebun yang dipenuhi tanaman bonsai seperti tetangga gue, atau mungkin pohon kaktus, atau beringin, atau kumpulan janda... bolong.
|
||||||
|
|
||||||
|
Your garden your rules anyway.
|
||||||
|
|
||||||
|
Ambil contoh Instagram, mungkin profile lo dipenuhi dengan 1 foto candid berukuran 1024x1024 yang dibagi menjadi 9 foto. Atau mungkin dipenuhi foto langit ketika senja. Atau mungkin dipenuhi foto tutorial cara membuat website. Atau mungkin dipenuhi video dengan tulisan i'm addicted to sebagai sampul.
|
||||||
|
|
||||||
|
Atau mungkin kumpulan foto-foto random dengan filter grayscale.
|
||||||
|
|
||||||
|
Apapun.
|
||||||
|
|
||||||
|
Tujuannya selalu beragam, tapi mari kita generalisir untuk menunjukkan ketertarikan. Jika profile tersebut dipenuhi dengan foto langit, mungkin dia memiliki ketertarikan khusus dengan langit, begitupula mungkin jika dipenuhi foto selfie, candid, plandid yang mungkin memiliki ketertarikan khusus dengan dirinya sendiri.
|
||||||
|
|
||||||
|
Foto-foto tersebut ditangkap menggunakan kamera yang dimiliki penggunanya, yang berarti, seharusnya foto tersebut adalah milik si pengguna. Terlepas apakah yang ditangkap dari kamera tersebut milik si penangkap atau bukan, itu cerita lain.
|
||||||
|
|
||||||
|
Instagram selaku penyedia layanan (untuk berbagi media dalam bentuk foto/video) memberikan tempat untuk aktivitas berbagi tersebut. Gampangnya, mereka memiliki "tanah" dan siapapun dapat menanam apapun di tanah tersebut *selama* tidak melanggar persyaratan layanan dan panduan komunitas.
|
||||||
|
|
||||||
|
Pertukarannya adalah lo mendapatkan vanity metrics yang memuaskan lo dan Instagram mendapatkan metrics yang menghasilkan profit. Pertukaran ini win-win solution, siapa pula yang ingin menjalankan "Instagram nya sendiri" dan berurusan dengan server; firewall, block storage, backup, databases, domain, dns, reverse proxy, docker, blablabla blablabla.
|
||||||
|
|
||||||
|
Instagram hanya salah satu contoh dan ini berlaku ke penyedia layanan lain yang menawarkan layanan serupa seperti Facebook, Twitter, Quora, Medium, Foursquare Swarm, Snapchat, Ask.fm, OnlyFans, Behance, Dribbble, LinkedIn dan sebagainya.
|
||||||
|
|
||||||
|
Setiap penggunanya merawat kebun yang entah penuh dengan informasi, inspirasi, wawasan, keindahan, atau mungkin yang dapat menaikkan gairah.
|
||||||
|
|
||||||
|
Terlepas tujuan yang ingin dicapai: bersenang-senang, iseng, membangun portfolio, pamer, berjualan, berbagi pengetahuan, berbagi pengalaman, atau mempromosikan jualan orang.
|
||||||
|
|
||||||
|
## Walled Garden
|
||||||
|
|
||||||
|
Jarak tempuh dari Cilandak (Jakarta Selatan) ke Farmhouse Susu Lembang (Bandung Barat) menggunakan kendaraan roda empat adalah 158 KM jika merujuk ke Google Maps menggunakan opsi jalur tol. Berkat Farmhouse setidaknya kita bisa melihat langsung salah satu bentuk kebun yang indah sekalipun ada perjalanan yang harus ditempuh.
|
||||||
|
|
||||||
|
Meskipun masuk ke farmhouse tersebut tidak gratis, setidaknya biaya yang dikeluarkan berputar lagi ke farmhouse untuk operasi dan pemeliharaan.
|
||||||
|
|
||||||
|
Plus, tiket tersebut dapat ditukar dengan food/beverage :))
|
||||||
|
|
||||||
|
Di dunia digital, jarak tempuh bukanlah rintangan. Akses ke server yang berada di Singapore dari Jakarta Selatan membutuhkan waktu <50ms untuk terhubung menggunakan jaringan dengan bandwidth 20Mbps alias 2.5 MB/s. Meskipun round trip tidak dapat dihindari, di tahun 2023 seharusnya memakan <800ms untuk sampai ke Time to First Byte (TTFB).
|
||||||
|
|
||||||
|
Tidak berbeda dengan kebun fisik, kebun digital pun membutuhkan sesuatu untuk operasi dan pemeliharaan. Ada waktu, uang, dan tenaga yang harus dialokasikan untuk membuat kebun tersebut hidup.
|
||||||
|
|
||||||
|
Seseorang harus membuat kebun tersebut tetap hidup.
|
||||||
|
|
||||||
|
Di dunia digital, yang paling mainstream adalah dengan menjual ruang untuk menampilkan iklan, yang sebenarnya, berlaku di dunia fisik juga. Beriklan di dunia digital secara teknis lebih efektif, karena si pengiklan dapat menentukan target penonton yang diharapkan, dan pada akhirnya tujuan iklan adalah agar yang melihatnya melakukan sesuatu.
|
||||||
|
|
||||||
|
Dan untuk melakukan sesuatu tersebut, setidaknya iklan tersebut harus ditayangkan ke/di sesuatu yang relevan. Seperti, hampir tidak mungkin mengharapkan seseorang menggunakan promo BOGO untuk produk kopi melalui iklan, jika yang melihat iklannya bukanlah peminum kopi.
|
||||||
|
|
||||||
|
Ini adalah awal dari walled garden.
|
||||||
|
|
||||||
|
Sebuah kebun indah yang bertembok.
|
||||||
|
|
||||||
|
Walled garden adalah ekosistem yang tertutup dengan prinsip yang relatif sederhana: operasional diatur oleh si penyelenggara, demi tujuan tertentu.
|
||||||
|
|
||||||
|
Salah satu contohnya adalah Instagram. Jika ingin melihat kumpulan foto dan tidak memiliki akun disana, di kasus yang langka, dibatasi hanya dapat melihat 12 foto (salah satu alasan mengapa unggahan gue di IG hanya 12) dan di kasus yang sering terjadi, akan diarahkan ke halaman login tanpa memiliki kesempatan untuk melihat 12 foto tersebut.
|
||||||
|
|
||||||
|
Pengguna di IG tidak memiliki kontrol terhadap itu, meskipun media-media yang diunggah milik penggunanya, karena diambil dari perangkat yang penggunanya *miliki*.
|
||||||
|
|
||||||
|
Tujuannya, ehm, cukup beragam. Jawaban politisnya adalah untuk melindungi konten yang dimiliki pengguna, berikut dengan penggunanya. Bayangkan jika konten-konten (media) yang diunggah pengguna *dicuri *dan pihak IG tidak mengetahui siapa yang mencurinya.
|
||||||
|
|
||||||
|
Namun pada akhirnya, ini hanya tentang bisnis seperti biasa. Iklan hanya bisa tampil ke pengguna terdaftar, semakin besar jumlah penggunanya, semakin besar pula jumlah iklan yang bisa dijual. Di samping itu, pengguna secara sukarela akan menambahkan informasi-informasi yang sebenarnya opsional, dari lokasi; akun terkait, tagar, dsb. Informasi tersebut membantu dalam menyusun konteks, sebagaimana grafik yang sebelumnya dilampirkan yang menggambarkan tentang informasi yang saling terhubung. Lengkap sudah, bukan?
|
||||||
|
|
||||||
|
Esensinya tidak ada yang dirugikan dari model walled garden ini, tapi setidaknya bertentangan dengan tujuan internet yang menjanjikan "informasi terbuka" kepada siapapun.
|
||||||
|
|
||||||
|
Jika tanpa tembok "garden" tersebut seperti "lihat kebunku dan siapapun dapat melihatnya!", dalam model walled garden, gampangnya seperti "lihat kebunku dan siapapun (selagi berada di dalam *tembok*) dapat melihatnya!"
|
||||||
|
|
||||||
|
## Penutup
|
||||||
|
|
||||||
|
Mengetahui bila otak gue memiliki batas, ada beberapa hal yang berada di otak gue (pikiran) yang harus gue simpan di suatu tempat. Ada yang gue tuang dalam bentuk [daftar tautan](https://bookmarks.rizaldy.club), ada yang dalam bentuk tulisan seperti di [blog ini](https://s3.rizaldy.club/rizaldy-club-ghost/)[ini](https://www.evilfactorylabs.org/rizaldy)[ini](https://init8.lol) dan [ini](https://chaosplane.com), ada yang dalam bentuk "status" seperti [disini](https://edgy.social/@rizaldy), ada yang di tempat pribadi yang tidak terhubung ke jaringan internet, di buku fisik, atau dimanapun itu selagi bukan di otak gue.
|
||||||
|
|
||||||
|
Blog salah satu "kebun digital" gue yang tidak bersifat evergreen. Anggap seperti menanam sesuatu yang tidak pernah mati, dan setiap tulisan adalah bibit nya. Hampir tidak pernah gue melakukan penyuntingan terhadap tulisan yang pernah diterbitkan, tapi di banyak kasus, tulisan-tulisan setelahnya terkadang berkaitan ataupun "berdasarkan" dari tulisan yang sebelumnya pernah gue terbitkan.
|
||||||
|
|
||||||
|
Setiap orang dengan akses internet bisa melihat kebun digital gue, tanpa batas, tanpa biaya. Jika menikmati kebun gue, ada tombol berwarna merah melayang dibawah dan tidak ada kewajiban untuk menekannya. Jika tidak menikmatinya, mengapa kita masih berada di paragraf ini?
|
||||||
|
|
||||||
|
Yang memiliki kontrol terhadap kebun digital ini adalah gue, si pemilik kebun. Gue memiliki kontrol penuh terhadap apa yang bisa dan tidak bisa dilihat, bertanggung jawab dalam pemeliharaannya, dan bertanggung jawab untuk terus membuatnya hidup.
|
||||||
|
|
||||||
|
Jika menikmati ataupun mendapatkan sesuatu dari yang gue tanam, then good for you. Namun jika tidak, itu tidak menjadikan alasan untuk gue agar berhenti "menanam" di kebun ini. My garden my rules, right?
|
||||||
|
|
||||||
|
Mungkin gue akan mempertimbangkan untuk menerbitkan evergreen "digital garden beneran" gue ke internet dari yang sebelumnya hanya bisa diakses dari iA Writer gue. Yang berisi dari {Sysadmin|DevOps|SRE|SWE} 101, sampai ke benang merah organisasi hitam Detective Conan, konspirasi "the matrix" dan teori dimensi 4, everything about X, dsb.
|
||||||
|
|
||||||
|
Mungkin setelah memisahkan hal-hal yang bersifat NSFW haha.
|
||||||
|
|
||||||
|
Sebagai penutup, jika tertarik untuk memulai (atau sedang) memelihara "kebun digital" sendiri, mungkin bisa pertimbangkan untuk menghindari kebun yang dikelilingi oleh tembok.
|
||||||
|
|
||||||
|
Alasan utama gue menulis tulisan sebanyak 1.5k kata ini setelah teman gue membagikan tautan di grup yang no idea tentang apaan kecuali gue harus "login" atau memintanya untuk menangkap/merekam layar. Tentu gue bisa saja login, atau meminta dia untuk merekam layar, atau cukup menghiraukannya saja.
|
||||||
|
|
||||||
|
Dan pilihan yang gue ambil adalah menerbitkan tulisan ini.
|
||||||
|
|
||||||
|
Karena salah satu ketertarikan gue adalah gue tertarik untuk mengikuti kabar orang lain yang gue peduli.
|
||||||
|
|
||||||
|
Dan mereka pikir kita pasti berada di dalam tembok yang sama.
|
78
content/yet-another-adulting-sucks-yaas-part-i.md
Normal file
78
content/yet-another-adulting-sucks-yaas-part-i.md
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
---
|
||||||
|
title: "Yet another adulting sucks (YAAS): Part I"
|
||||||
|
tags:
|
||||||
|
- blog
|
||||||
|
slug: yet-another-adulting-sucks-yaas-part-i
|
||||||
|
date: 2022-06-02T11:02:28.000Z
|
||||||
|
date_updated: 2022-06-02T11:02:28.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Ah, paling males gue ngebahas ini. Tapi bagaimanapun ini adalah sesuatu yang pasti gue hadapi nanti, jika memang diberi umur panjang. Setidaknya ada 3 hal yang ingin gue bahas di part 1 ini: Retirement dan property. Dua hal ini sering gue pikirkan seiring dengan berjalannya waktu.
|
||||||
|
|
||||||
|
## Retirement
|
||||||
|
|
||||||
|
Gue mau bahas yang paling berat dulu: masa pensiun. Ini sering gue pikirin mengingat bokap gue akan berada di masa ini. Parameter yang perlu diketahu ada dua: umur ingin mengambil pensiun dan perkiraan meninggal. Anggap gue ingin mengambil pensiun di umur 50 dan akan meninggal di umur [65 tahun](https://www.alodokter.com/angka-harapan-hidup-masyarakat-indonesia-dan-cara-memperpanjangnya) jika merujuk ke gaya hidup gue sekarang, berarti setidaknya gue harus memiliki uang pensiun untuk bisa hidup selama 15 tahun alias 180 bulan. Itupun jika pensiun di umur 50 (faster is better!)
|
||||||
|
|
||||||
|
Anggap gue ingin menikmati sisa hidup gue dengan pengeluaran 8jt/bulan, berarti setidaknya gue harus memiliki tabungan 1,440,000,000 (180*8jt) pada saat itu. Dengan 4 anggota keluarga, setidaknya setiap anggota mendapat jatah 2jt secara rata dengan asumsi anak pertama sudah mandiri. Apakah cukup? I don't know.
|
||||||
|
|
||||||
|
Untuk dapat mengumpulkan 1,4M dari umur 25 sampai 50 (300 bulan), setidaknya setiap bulan gue harus mengumpulkan 5jt (300*5jt) untuk mendapatkan angka 1,500,000,000. Anggap gue konsisten menabung 5jt/bulan selama 5 tahun (60 bulan), yang harusnya sudah terkumpul 300.000.000. Dan anggap uang tersebut gue tabung di bank dengan p.a 3%, berarti kurang lebih sekitar 309,000,000 yang terkumpul di umur 30, yang sepertinya sudah 21%.
|
||||||
|
|
||||||
|
Bila menggunakan [50/30/20 rules,](https://www.nerdwallet.com/article/finance/how-to-budget) untuk dapat menabung 20% dari gaji setidaknya pemasukan gue harus 25jt/bulan. Itupun jika hanya untuk tabungan pensiun. Beberapa orang menekankan untuk memiliki dana darurat, yang katanya sih setidaknya 3x dari rata-rata pengeluaran bulanan. Anggap setengah dari 50% diatas, berarti, 6,250,000 (is this even realistic for me? lol). Yang artinya, setidaknya gue harus ada tabungan sekitar 18,750,000 yang terpisah khusus untuk dana darurat.
|
||||||
|
|
||||||
|
30% dari 25jt adalah 7,500,000. Katanya dana ini bisa digunakan untuk "something you want". Anggap lo mau beli kendaraan seharga 300jt, dengan menabung 7,5jt/bulan, untuk bisa terkumpul 300jt lo setidaknya harus konsisten menabung selama 3,5 tahun alias 40 bulan.
|
||||||
|
|
||||||
|
Lah mana buat foya-foya nya ya by the way?
|
||||||
|
|
||||||
|
Ralat.
|
||||||
|
|
||||||
|
Anggap gue ingin mengalokasikan 2jt/bulan dari 30% tersebut untuk foya-foya alias gaya hidup, berarti budgetnya sekarang adalah 5,5jt/bulan. Berarti gue harus mengumpulkan selama 4,5 tahun alias 55 bulan. Alias, baru tercapai di umur 33.
|
||||||
|
|
||||||
|
You still here? Cool.
|
||||||
|
|
||||||
|
Cara untuk mengurangi rentang waktu tersebut adalah antara dengan menurunkan biaya & gaya hidup atau dengan menambah digit angka.
|
||||||
|
|
||||||
|
Tapi yang paling penting, are we at 25jt/mo yet?
|
||||||
|
|
||||||
|
## Property
|
||||||
|
|
||||||
|
Ambil dari yang paling dasarnya dulu: rumah. Beberapa so-called entrepreneur memberikan perbandingan antara memiliki properti atau menyewanya, tapi tentu saja perbandingan untuk konteks tersebut tidak selalu hanya tentang angka.
|
||||||
|
|
||||||
|
Anyways, ambil rata-rata harga rumah di perkotaan adalah 600jt, and yes I know KPR. Umumnya jika mengambil KPR, uang muka nya adalah 30%, berarti 180,000,000. Dana yang ingin kita pinjam berarti 420,000,000. Anggap kita mengambil tenor 25 tahun, estimasi bunga pinjaman adalah 784,360,598 jika merujuk ke [Simulasi KPR konvensional](https://www.rumah123.com/cari-kpr/konvensional/). Untuk membayar uang muka (plus angsuran pertama) sendiri membutuhkan 208,303,763, dan tiap bulan selama 25 tahun membayar cicilan 4,242,228 jika menggunakan masa kredit floating atau 3,103,763 jika menggunakan masa kredit fix per tulisan ini diterbitkan.
|
||||||
|
|
||||||
|
Tentu ada KPR syariah, namun gue rasa angka bunga pinjaman (di syariah disebutnya "margin pinjaman" jika tidak salah ingat) tidak terlalu beda jauh dengan yang konvensional. Dan by the way, dari mana angka 364,360,598 (784,360,598 - 420,000,000) tersebut? I don't know.
|
||||||
|
|
||||||
|
Anyway anggap kita ubah "something you need" nya menjadi DP rumah, dan untuk mengumpulkan 209,000,000 dari 5,5jt/bulan, setidaknya membutuhkan waktu 38 bulan alias 3,1 tahun.
|
||||||
|
|
||||||
|
Angka 600jt sebelumnya gue merujuk ke tipe rumah yang full furnished.
|
||||||
|
|
||||||
|
Tapi apakah gue butuh rumah?
|
||||||
|
|
||||||
|
Dan apakah jika gue tidak memiliki rumah—selain ehm dari warisan—akan dianggap homeless?
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Gaji rata-rata Software Engineer untuk tingkatan mid-senior anggap 16-30jt untuk daerah Jakarta. 25jt keatas gue rasa untuk tingkatan senior unless di perusahaan yang cukup stabil. Gaji untuk DevOps Engineer sendiri (jika mengambil dari situs ehm, para head hunter) di rentang 15-35jt, yang anggap mid-senior range nya 20-30jt.
|
||||||
|
|
||||||
|
Jika merujuk ke negara tetangga, angka rata-ratanya untuk [Software Engineer](https://www.glassdoor.sg/Salaries/software-engineer-salary-SRCH_KO0,17.htm) (starter) adalah $5,000 (USD) berarti 72,238,500/bulan. Dan untuk [DevOps Engineer](https://www.glassdoor.sg/Salaries/devops-engineer-salary-SRCH_KO0,15.htm) (starter) rata-ratanya sekitar $6,500 (USD) alias 93,910,050/bulan untuk starter.
|
||||||
|
|
||||||
|
Berpindah jalur karir adalah salah satu tujuan gue (beside my very passion) untuk ehm earn more. Taruhan gue adalah selama Cloud Computing masih ada, maka DevOps Engineer pun masih ada. Dan anyway, konteks "earn more" tadi merujuk ke setidaknya ingin bisa mendapatkan kompensasi yang lebih "kompetitif" sehingga mungkin tulisan ini tidak perlu ada HAHAHA.
|
||||||
|
|
||||||
|
Apakah seorang Software Engineer dan atau DevOps Engineer di Indonesia underpaid ataupun overpaid? Tergantung. Gue pernah dapat nasihat dari senior gue dulu, katanya (dengan bahasa gue) "kalo angka lo tidak sesuai dengan mereka, berarti lo bukan target pasar mereka". Satu-satunya yang bisa mengukur value lo adalah diri lo sendiri, ketika lo memasang angka sekian karena merasa lo pantas dengan angka tersebut, ya karena memang lo pantas. Tentu harus riset harga pasar dan evaluasi diri, tapi gue rasa angka tersebut tidak muncul tiba-tiba kek lotre.
|
||||||
|
|
||||||
|
Dan, yes yes, rezeki sudah ada yang mengatur. Terlebih katanya juga kan "jika memang rezeki ya kan di transfer juga". Sama seperti siang dan malam, sudah ada yang mengatur juga. Tapi apa yang lo lakukan diantara siang dan malam tersebut, lo sendiri yang menentukannya.
|
||||||
|
|
||||||
|
Sebagai penutup, dulu gue tidak terlalu memusingkan masalah angka. Of course gue memikirkan apa yang terjadi untuk 5 tahun kedepan, tapi yang tidak kepikiran adalah kebutuhan di masa mendatang. Angka yang gue tawarkan biasanya angka untuk hidup pada saat itu dan maybe at least untuk 1 tahun kedepan, dan gue baru tersadar bahwa gue hanyalah karyawan swasta yang tidak memiliki tabungan untuk pensiun.
|
||||||
|
|
||||||
|
Dulu gue mikirnya YOLO: Bagaimana jika gue tidak bisa menikmati tabungan gue karena keburu mati?
|
||||||
|
|
||||||
|
Dan masalahnya: Bagaimana jika ternyata gue tidak punya tabungan yang cukup sedangkan umur terus bertambah dan gue masih diberi kesempatan hidup? Haruskah gue menyalahkan mereka yang mendoakan gue untuk berumur panjang?
|
||||||
|
|
||||||
|
Anyways, yes, adulting sucks.
|
||||||
|
|
||||||
|
Setidaknya sudah dua teman kantor gue yang bertestimoni seperti itu dengan catatan mereka sudah berkeluarga dan ekonomi mereka jauh lebih stabil.
|
||||||
|
|
||||||
|
But, still, adulting sucks.
|
||||||
|
|
||||||
|
Fuuckkkkkk
|
||||||
|
|
||||||
|
Fuuuuucccccckkkkkk
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user