Lompat ke konten utama
EP 113

Ngobrolin LocalFirst

Ringkasan Episode

Bantu Koreksi

Episode ini membahas tentang paradigma Local First dalam pengembangan aplikasi modern. Diskusi dimulai dari pengalaman menggunakan Actual Budget, aplikasi personal finance yang berjalan secara lokal dan dapat diakses offline. Trio host membahas definisi Local First menurut Maggie Appleton yang bukan hanya tentang storage lokal, tetapi aplikasi yang dibangun untuk penggunaan personal dan lingkungan sekitar. Episode ini juga mengeksplorasi berbagai teknologi pendukung seperti database lokal (IndexedDB, PouchDB, SQLite dengan WebAssembly), CRDT (Conflict-Free Replicated Data Types) untuk resolusi konflik, serta sync engine modern seperti PowerSync, ElectricSQL, dan Zero. Diskusi juga menyentuh tren evolusi dari aplikasi offline-first era desktop, ke online-first saat web booming, dan kembali ke hybrid offline/online dengan tetap mempertahankan kepemilikan data (data ownership).

Poin-poin Utama

  • •Local First adalah paradigma di mana aplikasi dibangun untuk penggunaan personal dan lingkungan sekitar, bukan hanya tentang storage lokal atau dapat berjalan offline
  • •Data ownership adalah aspek kunci dari Local First - pengguna memiliki kontrol penuh atas data mereka dan dapat memindahkannya antar perangkat atau layanan tanpa ketergantungan pada vendor tertentu
  • •CRDT (Conflict-Free Replicated Data Types) adalah teknologi penting yang menangani resolusi konflik secara otomatis ketika data disinkronisasi antar perangkat
  • •Berbagai sync engine modern mendukung pengembangan aplikasi Local First seperti PowerSync, ElectricSQL, Zero, dan Yjs untuk collaborative editing
  • •SQLite dengan WebAssembly memungkinkan database SQL berjalan langsung di browser, memungkinkan aplikasi yang sebelumnya hanya bisa berjalan di server untuk berjalan di klien
  • •Evolusi tren aplikasi: offline-first (era desktop) → online-first (era web) → hybrid offline/online dengan Local First yang menggabungkan keunggulan keduanya
  • •Contoh aplikasi Local First termasuk Git, Obsidian, Actual Budget, dan Linear yang memberikan pengalaman responsif (snappy) karena tidak bergantung pada koneksi internet untuk operasi dasar

Halo, halo, halo. Selamat malam.

Harusnya lagunya "Countdown" itu kita sambil joget-joget tau gak sih?

Biar daripada orang nungguin cuma "Countdown" kita sambil joget-joget gitu.

- Jangan dong. - Jangan mau nonton.

- Kabur semua. - Nanti pada kabur.

Kan podcast bergoyang gitu. Mungkin kita bisa ganti nafas.

Nanti masuk TikTok. TikTok udah di-ban. Eh udah di-ban, gak jadi di-ban lagi sekarang ya.

- Udah bisa di-access lagi. - Gimana sih?

Bisa di-access lagi.

- Kok boleh? - Gak tau. Itu ceritanya gimana.

- Udah politik, politik negara. - Lobby-lobby lah itu.

Politis sekali ya. Berjumpa lagi bersama kita bertiga.

Kembali ke format 3 web-web. Ada Eka yang jago UI, CSS.

Ada Ivan yang jago performance, dan ada saya Riza yang...

- Jago apa? - Yang jago.

Yang tidak jago-jago aman.

Riza itu jago semuanya.

- Apa itu namanya? Yang master of none itu? - Jack of all trades.

Jack of all trades, master of none.

None itu ini tau gak sih makanan di India itu? None.

- Iya, iya. - Master of meal.

- Master of meal. - Enggak. None itu kalau kita satu tambah satu, tapi satunya string.

- Satu tambah. - Iya, seneng deh bangga.

Bagus, bagus, bagus. Sudah mulai ini ya. Sudah mulai ini ya, jokes-nya sudah mulai masuknya.

Sudah mulai menyesuaikan dengan jokes-nya JavaScript ya.

Jadi malam hari ini adalah episode ke 114. Udah 114 ya.

Karena kita hampir setiap minggu live, dan di episode ini kita akan membahas tentang sebuah paradigma, bukan paradigma.

- Phenomena. - Phenomena yang namanya Lokal First.

Tadi kita hampir membahas topik ini sebelum live. - Tadi kita sempat debat loh. - Ini bahasnya pas live, bukan di batik layar.

- Jadi mungkin sedikit background dulu. Awalnya saya tahu tentang Lokal First ini dari sebuah aplikasi yang namanya Actual Budget.

Lihat transkrip lengkap (887 segmen lagi)

Yang 2 minggu lalu ya, kalau gak salah kita sempat omongin ya, Actual Budget.

Jadi Actual Budget ini kayak personal finance app lah ya, aplikasi finansial, aplikasi pengatur keuangan.

Tapi dia formatnya web, aplikasi web, dan open source. Bisa di deploy sendiri, bisa dijalankan di localhost sendiri.

Tapi dia tidak bergantung kepada server, jadi bisa dijalankan di local.

Karena ini personal finance, gak ada kebutuhan untuk kolaborasi dan lain-lain, jadi datanya tidak di share, datanya berada di komputer kita.

Saya tahu saya, makanya disini kan ada you own your data. Tapi juga bisa, tetap bisa syncing.

Karena bisa aja aplikasinya bukan hanya diakses di desktop, tapi juga di mobile.

Itu datanya gimana, datanya berada dimana, yang jadi master-nya yang mana, yang jadi replicate-nya yang mana, kita harus cari tahu lebih dalam sih.

Itu awalnya saya tahu tentang istilah local first. Ternyata semakin kesini semakin berkembang dan definisinya juga bermacam-macam ya.

Mungkin ada penjurusan. Kalau dari Ivan gimana?

Awalnya kan ini kan kayak aplikasi yang dijalankan, yang semuanya dijalankan di device-nya masing-masing.

Contohnya kayak local first, kalau di dunianya WordPress kita ada playground namanya.

Saya coba contohin itu. Oke sebentar. Yes, copy.

Oh ini yang pakai, yang pakai container itu bukan ya?

Ya ini pakai Wasm, terus dia pakai SQL, pakai Wasm, pakai SQLite, untuk menjalankan proses PHP,

web server di browser.

Tapi ini bisa diakses secara offline.

Kalau sudah selesai di load, sudah di download sama kayak actual budget kan, kalau sudah di load semua filenya bisa diakses di local.

Atau maksudnya lebih tepatnya bisa diakses tanpa internetnya, itu maksudnya ya.

Dan ketika kalau misalkan aplikasi kayak actual budget, ketika kita kembali konek ke internet, dia akan kembali syncing lagi gitu kan ya?

Kalau ini, murmi hanya untuk playground saja.

Cuma kalau di reload-reload, datanya tetap disimpan di SQLite yang ada di storage, jadi di browser.

Jadi datanya bisa tetap di reload.

Ngomong-ngomong kok berdiri di tengah.

Lanjut, lanjut, lanjut.

Nah ini kan seperti sebuah instalasi, sebuah WordPress, tetapi ada di browser.

Ini sudah pernah kita cerita-cerita, waktu kita bahas Wasm.

Nah ini juga termasuk local first.

Nah, ada satu paradigma yang saya nonton sebuah seminernya, saya lupa, saya pernah bagikan di grupnya kita.

Tapi saya lupa nama mbaknya itu siapa, nanti saya coba cari ya setelah saya sampaikan.

Apa namanya, sebuah paradigma itu seperti ini.

Local first itu bukan artinya hanya database atau storage saja yang ada di lokal.

Jadi aplikasinya jalan di lokal, database ada di lokal, dan yang mana nggak cuma,

maksudnya aplikasi itu nggak cuma, batasannya bukan cuma storage.

Nah lebih tepatnya gitu, batasannya bukan cuma storage.

Tetapi lokal itu artinya, lokal first itu artinya adalah aplikasi ini diperentukan untuk personal dan orang-orang di sekitarmu saja.

Jadi bukan kalau Facebook atau Twitter kan bukan lokal first, dia udah sosial, lokal, dunia first, global first.

Kalau kita bikin CMS, WordPress untuk dipublish itu bukan lokal first, itu public first gitu ya, internet first.

Sedangkan kalau lokal first itu adalah aplikasi yang kita bangun hanya untuk di lokal kita sendiri.

Contohnya pernah tau, siapa tau ada sini teman-teman yang suka bermain dulu mainan bikin aplikasi,

aplikasi yang.. apa bahasanya kalau.. yang desktop, aplikasi desktop lah contohnya ya,

yang hanya untuk dipakai di lokal, contohnya intranet, Microsoft Office yang.. DB apa itu database?

Akses, nah itu lokal first. Bisa dikategorikan lokal first. Bisa di share nggak? Bisa.

Bisa, bisa di share. Bisa, pakai network, tapi diperentukan waktu dibuat dia hanya untuk di lokal, untuk di komputer masing-masing.

Kalau kita mau pakai aplikasinya kita kopi aja, aksesnya buka sendiri di komputer kita gitu kan ya?

Betul, jadi di kopi ke flash disk, di insert tampak lain, jatahnya berbeda jadi pakai untuk di..

Nah, tapi di akalin nanti suatu saat kalau dari dulu akses itu dibikin jadi storage.

Jadi dua komputernya berbeda bisa akses database yang sama, bisa akses yang sama, ya.

Jadi yang disampaikan si Mbak itu di.. nanti saya kasih link YouTube-nya ya.

Maggie Appleton bukan? Maggie Appleton?

Kayaknya sih ya, betul, betul, betul. Yang pernah saya share, Maggie Appleton, betul.

Yang pernah share banyak.

Iya banyak banget ya.

Nah, jadi aplikasi yang dibangun untuk personal dan untuk orang-orang di sekitarnya.

Oh iya, kayak ini juga termasuk kiosk, kayak informasi atau kita mau pesen tiket di sebuah..

Misalkan, ya kalau bioskop sekarang kan udah ada komputernya kan, kalau misalkan ada kiosk gitu,

mau ngambil nomor antrian, mau pesen tiket, itu termasuk lokal first kali ya?

Kayak ini kali ya? Iya, iya. Kayak untuk antrian di rumah sakit, misalnya mau masuk ke polyklinik mana, pencer, atau bank, atau bank.

Nomor antrian sekian.

Ya, nomor antrian untuk customer service, untuk tailor, yang mana, gitu kan.

Sedangkan nomor antrian itu kan, meski mumpahnya sama, nggak butuh synchronize ke cabang lain.

Iya, betul.

Itu lokal first yang sudut pandangnya, jadi nggak cuma storage.

Oke, dan juga bukan lokal host ya, kita develop lokal host.

Bukan lokal host.

Bukan.

Iya.

Nah, mungkin pendapat Eka atau pendapat Mas Risa gimana?

Nah, nggak, kalau gue sih nyorotinya, ini kan, apa ya, bukan spesifikasi teknis.

E, lokal first itu kan, yaitu tadi bisa dibilang filosofi lah, paradigma lah.

Jadi maksudnya, ya kalau Maggie Appleton misalnya, atau siapapun lah,

mau, ya misalnya di conference talk, present, itu kan sebetulnya perspektif dia tentang lokal first.

Jadi kan sebetulnya orang lain atau perusahaan lain atau organisasi lain bikin product

yang nggak sepenuhnya ngikutin perspektifnya, apa, ngikutin definisi-definisinya si Maggie Appleton itu ya.

Dan tetap menyebut itu lokal first kan sebenarnya sah-sah aja.

Karena lagi-lagi kalau, kecuali kalau apa ya, kalau protokol kayak HTTP itu kan udah ditulis,

ada teknis, apa, spesifikasi teknis, dan semua pihak terkait tuh harus setuju dulu kan,

sama misalnya web API lah, atau apa, misalnya fetch itu behavior-nya gimana.

Itu kan nggak bisa orang, ya dulu bisa ada yang bikin fetch ala-ala,

tapi maksudnya teknologi-teknologi kayak gitu kan udah ada definisi,

yang kalau kita mau menyebut sesuatu sebagai A, berarti itu harus begini-gini-gini.

Kalau nggak memenuhi ini, berarti bukan A.

Kalau lokal first kan nggak seseklek itu ya, kayak contoh aja tadi misalnya apa yang disebut,

yang dipropos oleh Maggie Appleton itu sesuatu yang dibuat untuk lokal kita sendiri

atau lingkungan sekitar kita sendiri, kayak contohnya kiosk atau mungkin IoT.

Tapi misalnya yang salah satu, gue pribadi apa, pertama kali denger tentang istilah lokal first ini

dari Linear. Linear itu aplikasi kita pernah bahas sekilas juga ya, 2 episode lalu,

itu aplikasi semacam Jira lah untuk project management, tapi UI-heavy.

Itu pakai React, UI-heavy ya standar lah, tau kan, kalau tiket bisa digeser,

bisa ada kayak waterfall timeline-nya. - Ada tambahan board-nya atau apa gitu ya.

- Itu yang saling nge-blocking ya, pokoknya emang UI-heavy banget, dan bisa dibayangin ya

kalau aplikasi project management kemungkinan besar nggak dibikin oleh satu orang,

nggak digunakan oleh satu orang, dan itu orang-orang yang menggunakan biasanya di lokasi yang berbeda-beda.

Jadi tetap ada central database-nya, tapi yang sea linear ini mengedepankan banget

tentang konsep offline first, mungkin ya itu salah satu pengbeda mereka dari Jira

atau software project management lain ya, dan karena itu pakai React,

jadi mereka sering ngasih talk kayak di, apalah, React, Helsinki, Meetup, blablabla,

tentang gimana mereka menghandle. Nah, tapi tetap aja, karena balik lagi itu kan sebetulnya

kayak project management konvensional lainnya, tetap ada central database-nya,

tapi ada juga, jadi ada kesamaan dan ada perbedaan dari konsep-konsep

yang tadi dijelasin Ivan, seperti yang di-propos oleh Maggie Appleton, kayak semua jalan di lokal,

jadi misalnya nggak selalu internet mati, tapi mungkin internet nggak lancar atau apalah,

jadi nggak bolak-balik ngasih, lebih enak aja, lebih snack, kita ngetik, ngetik isi tiket,

geser sana-sini secara periodik di sync, ada sync engine-nya.

Jadi maksudnya, tetap ada suatu kayak keunggulan dari filosofi local first itu,

walaupun implementasinya, maksudnya kayak definisi untuk apanya, penggunaannya,

nggak sakok-sakok banget dalam satu definisi yang sama kan sebenarnya itu agak, penampilannya agak berbeda,

tapi ada keunggulan, kayak ada kesamaan-kesamaannya juga. Itu menarik sih.

Kayaknya Git juga local first, Git itu kan dibangun local first,

karena semua kopi, semua di local kita kan di .git. Betul. Datanya, ya itu yang mau saya highlight adalah

benar tadi setuju dengan pernyataan Ivan yang menyatakan bahwa bukan aplikasi yang tidak membutuhkan internet,

internet pasti dibutuhkan, tapi lebih ke yang tadi ya ada, yang penggunaannya ya kita sendiri atau orang-orang terdekat,

kemudian kalau saya lebih menghighlight lebih ke data ownership-nya.

Kemungkinan kalau kita menggunakan aplikasi yang local first, mungkin juga nggak.

Kayak misalkan kayak tadi yang dicontohkan Eka linear itu data ownership-nya bukan di kita,

tapi tetap bisa kita pakai pada saat internetnya, misalkan kita lagi di pesawat misalkan,

kita mau pindahin aja kita harus nunggu internet gitu kan.

Contohnya lagi misalkan kayak pencatatan kayak note taking, misalkan Notion dibandingkan dengan Obsidian.

Notion butuh koneksi internet gitu kan. Kita mau edit-edit aja mungkin harus buka dulu kan,

begitu kita buka harus dia loading dulu, dia synchronize datanya dulu baru kita bisa pakai walaupun misalkan offline bisa mungkin ya,

tapi dalam waktu singkat gitu. Tapi kalau misalkan kayak Obsidian atau kayak Git tadi meskipun kita berada di apa nggak pakai koneksi sama sekali,

ketika kita mau ubah baru kita push gitu kan. Obsidian juga sama, datanya ada di lokal kita,

tapi kalau kita mau sync ya bisa gitu. Jadi lebih ke sana, lebih ke arah mungkin kalau ngomongin ya memang bukan hanya data,

tapi kalau mau ngomongin data, datanya ada di lokal ada replikasinya juga di server.

Kayak Git kan kita mau push berarti kita butuh server kan, butuh hosting ya GitHub atau Bitbucket dan lain-lain.

Nah jadi kesamaannya itu ada faktor data, kita mengontrol data, ada faktor kayak UX kan, UX bahwa kita nggak bergantung pada koneksi internet

dan nggak bolak-balik, harus mesing, pokoknya kita ngelakuin suatu action, suatu task tuh bisa dengan mudah lah sama alat yang kita punya, yang kita pakai.

Iya, kalau jaman dulu Evernote ya, tapi Evernote juga datanya ada di servernya mereka kan ya, sama kayak Notion ya.

Cuma Evernote itu kan nggak tahu dulu pakenya yang natif ya, nggak tahu kalau web appnya,

kalau yang natif ya sebetulnya agak mirip Obsidian datanya kayak ada semacam tem di lokal,

jadi kalau internet mati atau apa ya semua data kita di situ, di lokal.

Jadi kembali lagi kayak PWA ya?

Iya, awal bukanya tetap butuh internet tapi setelah itu mungkin tetap butuh untuk syncing kalau aplikasinya butuh synchronization ya.

Jadi sebenarnya kuncinya itu ada di beberapa teknologi sebenarnya ya.

Yang pertama kalau misalkan butuh database ya, butuh database yang bisa jalan di lokal.

Ada local storage, ada remote storage, tapi remote storage-nya kan opsional kalau pake definisinya Maggie Appleton tadi.

Betul, betul.

Dan kalau di Bras, harus ada storage di lokal.

Ada IndexDB kan ya, nggak mesti harus pakai, apa yang kemarin lokal first, nggak ada satu lagi yang Lucene, bukan Lucene, yang database yang bisa untuk lokal.

Yang ada versi lokalnya, ada versi offline-nya, bukan on-line-nya.

CausedDB. CausedDB itu pouchedDB.

PouchedDB, kalau pouchedDB itu sebenarnya dia wrapper di atas IndexDB sebenarnya.

Cuman dengan sintasnya causedDB aja.

Memubahkan syncing kan, in case kita mousing.

Ada apa, ada mekanisme bagaimana caranya untuk mengatasi conflict, conflict resolution.

Istilah kerennya itu conflict free replicated data type, CRDT.

CRDT.

Jadi kalau misalnya ada conflict kan, kalau di Git itu kan kita harus manusia yang ngecek kan, oh ini yang kita ambil, ini yang kita buang gitu kan. Nah kalau CRDT itu ya secara otomatis gitu.

Yang mana yang ada mekanismenya, yang terbaru kah, atau yang apa gitu, ada macem-macem ya.

Nah itu sepertinya salah satu fitur yang apa ya, bisa dibilang inti ya dari local-verse.

Walaupun kalau, lagi-lagi kalau ikut definisinya Mike Giappolten tadi, yang nggak harus bisa aja, nggak harus di sini, ke mana pun, ke remote.

Tapi ya istilah rata-rata pada umumnya,

kalau pun use case yang tadi kayak Antriana atau Kiosk at the end of the day, kemungkinan ada yang bakal meminta, membutuhkan apa, bisa aja ada yang ke sini.

Gak itu ke pusat kan, misalnya kita punya 100 cabang gitu, ya mungkin aja itu use case yang wajar banget.

Suatu saat, walaupun nggak harus terus menerus nih, nggak harus terus-terusan kayak linear, ya tetap aja ada kalanya perlu di sync.

Jadi kelihatannya sync teknologi untuk sync storage antara storage si lokal dan somewhere remote storage tuh kayaknya salah satu kuncian.

Betul. Kayak obsidian aja, obsidian kita pakai di lokal kan.

Tapi tetap butuh sync, syncnya juga ke handphone, ke device kita juga gitu.

Kita pusing kan, gitu kan. - Kan servernya obsidian, ke device kita yang satunya kan harus lewat server dia, server remote.

- Betul. Tapi untungnya karena dia pakai file system, kita bisa pakai kayak Google Drive, pakai Dropbox, atau pakai S3 gitu,

kalau yang mau di cloud, atau macem-macem lah gitu. Dan CRDT-nya itu sudah dihandle sama aplikasi-aplikasi itu.

- Layanan yang kita pakai. - Layanan yang kita pakai. Jadi dia cuma nebeng aja.

- Nah, tapi kan obsidian juga premiumnya dia punya layanan cloud sendiri. - Ada sync, ya ada. Ada sync sendiri.

- Yang, maksudnya salah satu yang dijual keunggulannya adalah ya itu kayak nge-mungkin handling, apa?

Jadi di HP kita bisa pakai aplikasi obsidian juga, yang mana mungkin user kan lebih udah familiar, lebih enak pakenya,

editan kita di HP misalnya, dengan editan kita di laptop, ya si obsidiannya yang punya aplikasi proprietary

yang nge-handling resolusi konflik antara data-data yang di sync itu, ya itu berbayar.

Maksudnya itu additional service kalau kita nggak mau pakai, kita mau nge-sync pakai Dropbox, atau bahkan pakai Git, atau pakai apapun.

Bisa, tetap bisa karena file system. Nah, tadi udah lah database, kemudian ada CRDT,

Config Free Replicated Data Types, terus kalau yang berdasarkan definisi Ivan tadi yang digunakan oleh kita dan orang-orang sekitar,

berarti itu butuh protokol untuk koneksi peer-to-peer. Entah itu pakai WebRTC, atau WebSocket, atau ada satu database juga

yang memang tujuannya untuk itu, dulu kayaknya sempat hype deh namanya GunJS, ada yang tau nggak?

Gun, wepon-wepon GunJS. Gun, Gun itu kan JavaScript engine. Namanya hidup-hidup semua sih.

Ya, bentar ya kita share. Ini decentralized database. Dulu ini lumayan red juga karena benar-benar bisa diakses

di front-end dan bisa sync tanpa perlu server, dan kalau ada server, dia bisa sync. Jadi kayak cause DB dan post DB juga.

- Lama-lama kita jadi web tree dong ya. - Ini kan dia udah nulis nih, distributed ad.

Kayaknya dia peruntukannya kesana ya. We're going to build a peer-to-peer the app.

Oh sekarang namanya gun.eco. Udah beda lagi namanya.

Ya nggak, itu domain-nya doang. Masih active nggak sih? Masih active.

Oh iya, coba kita lihat ya, udah berapa apa ini.

Documetation GitHub. Masih active nggak ya? 2 bulan yang lalu. - Oh masih, tapi ritminya doang sih.

Tapi ya lumayan lah, active. - Open-source cybersecurity protocol for syncing.

- Ya hooknya sih 9 tahun, tapi ya nggak apa-apa. Kalau source-nya tahun lalu.

- Tahun lalu. Oh udah nggak begitu ya berarti. Nggak terlalu active lah ya.

- Tapi mungkin ya... - Puritasnya masih banyak, tapi nggak dimers.

- Mungkin itu ini kali. Apa namanya, coba kalau diklik bisa jadi itu.

Oh bukan, gue kira ini. Apa namanya yang dependable.

- Oh dependable semua. - Gak ada nih.

- Gak ada, nggak ada. Disini juga banyak.

Oke, lanjut lanjut. Berarti itu tadi ya, jadi ada untuk koneksi peer-to-peer.

Berarti bisa pakai ini juga dong. Ini nggak tahu ya ceritanya benar atau nggak kabarnya.

Spotify itu menggunakan peer-to-peer seperti torrent.

Jadi kalau misalkan kita muter musik yang A, terus ada mungkin tetangga kita atau orang di dekat kita itu jauh lebih cepat karena kita udah pernah download.

- Itu kan jamannya dulu, sebelum Spotify, apa ya jamannya dulu? - Napster.

- Napster itu kan? - Iya, modelnya kayak gitu. Cuman kan ini kan dibungkus biar nggak kelihatan seperti, biar nggak kelihatan illegal gitu.

Nggak bisa di-download kan sebenarnya kan. File-nya ya kalau dicari mungkin bisa, tapi susah, sulit.

Tapi kan sebenarnya kalau legal-illegal cuma perkara kayak hak-haknya darin aja kan, tapi teknologinya, teknisnya itu gimana ya?

Teknisnya, kan torrent itu dipakai untuk share file-file ukuran besar kan, kayak distro, ores.

Ukuran kecil juga bisa. Bisa-bisa jadi torrent server sekarang, mas Rizal sedot untuk file-file yang legal misalnya nggak masalah.

- Itu nggak masalah, betul. - Cuma misalnya aplikasi torrent kan kita emang masukin, kita buka direktori lokal kita,

itu emang di-upload kan, jadi internetnya harus kita nyalain juga kan, harus kita jual.

Nah berarti Spotify itu kayak semacam dia bikin kayak temporary atau cache diri di lokal kita,

itu tuh kalau misalnya kita idle atau nggak ngapa-ngapain, dia berarti ngirim terus kan, maksudnya sambil nge-upload kan.

Ya nggak tahu coba siapa yang pakai Spotify. Coba teman-teman yang pakai Spotify, install Wireshark dulu.

- Nanti gue coba sih. - Lihat traffic yang lewat.

- Lihat di-slidikin aja, tapi K-Pop nanti coba. - Sekarang nggak tahu masih seperti itu

atau dia udah pakai mekanisme lain, tapi dulu kabarnya seperti itu.

- Yang saya tahu Youtube begitu. - Youtube begitu?

- Tapi bukan Youtube-nya menyediakan, tetapi si provider internet, contohnya provider internet yang kayak..

- Akamai? - Nggak, kayak indie, provider indie internet.

- Piring-piring itu, islinya Piri itu dia taro sesuatu di server, di ISP, internet service provider.

- ISP biasanya di daerah mana? - Oh biar cepat.

- Youtube-nya di-cache sama dia pakai Switch. - Oh iya benar-benar, itu juga.

- Itu lucu juga sih. - Ini konsepnya kayak CDN kali ya, tapi jadi lebih dekat gitu ya.

- Iya jadi per-neighborhood gitu. - Iya per data center.

- Ya kalau jaman saya dulu, jaman saya di kantor, saya suka pakai Squid.

- Squid, pernah denger? - Nggak pernah, dengernya Squid Game.

- Squid network proxy, eh salah saya yang percaya, squid cache itu jaman saya, jadi supaya saya mempercepat internet kantor dulu,

saya pakai squid network proxy, jadi semua internet itu melewati squid proxy dulu di cache,

jadi kalau ada yang Facebookan, ada yang Youtube-an segala macam.

- Halaman Facebook-nya sama? Oh nggak? - Nggak, tapi aset-asetnya aja.

- Aset-asetnya itu jadi jauh lebih cepat, karena CDN-nya di kantor lah ya.

- Iya udah pernah di-download, iya iya iya. - Berarti itu omak first to be...

- Iya dulu pakai juga di kantor sih. - Nggak tahu jaman-jaman masih memakainya yang ginian.

Ini teknologi 20 tahun lalu ini. - Ini masih aktif nggak sih?

- Nggak tahu. - Dia open source nggak?

- Open source? - Open source kan ya?

- GENU GPL tuh jelas tuh dia tulis tuh. - Mana itunya source-nya?

- Iya source-nya mana? - Dia mana pakai github mas? - Iya kan ada kan?

- Mak github itu dari tahun berapa sih? - Mereka pakai, nggak tahu pakai apa ya.

- Maksudnya ada source-nya nggak kelihatan di share gaya?

Coba lihat aja bugzilla database. - Bugzilla database.

- Dia terakhir ininya kosong. - Udah nggak ada bugs.

- Gak ada bugs bisa berarti... - Paling bawah tadi ada developer resource.

- Bisa berarti nggak ada yang pakai. - Paling bawah itu support developer resources.

- Ini selenius developer resource. - Tuh kiri-kiri atas.

- Oke kodnya dimana tuh? - Repository github.

- Oh github? - Dua hari yang lalu.

- Masih dia maintain, masih aktif. - Dua hari yang lalu gile, mantap.

- Amanko itu scriptnya 3 minggu lalu. - Tapi pakai macbook-nya M4.

- M4 itu apa ya? - M4, nggak tahu apa itu.

- Ada C++ ada C++. - Request, tapi nggak ada isu ya.

Dia nggak nerima isu. Kalau mau langsung request aja.

- Mereka isunya mungkin mailing list kali. - Iya mailing list.

Versi 6 minggu yang lalu. Berarti masih banyak yang pakai.

- Tuh dari tahun 1996 tuh. - Tapi copyrightnya nggak diganti sampe tahun 2023.

- Nggak bisa dinamis ya gantinya? - Nggak bisa pake variable.

Jadi kayak gitu lah ya ada yang di cage, youtube taruhnya mungkin di ESP, kalau misalkan aplikasi musik mungkin peer-to-peer supaya kalau ada satu orang yang sudah pernah mendengarkan

jadi dia downloadnya ke kita aja, semakin populer musiknya semakin cepat ya di play gitu ya.

Itu kan ada filmnya kan ya? Si Spotify itu ada ceritanya difilmkan antara fiksi atau non-fiksi gitu lah pokoknya.

- Tapi berarti itu udah keluar dari paradigma lokal first juga ya? - Iya itu bukan lokal first.

- Karena bergantung ke banyak spot yang seeding. - Itu bukan lokal first, tapi dia lebih ke...

Gimana caranya musiknya nggak buffer gitu, dia menyelesaikan masalah itu.

- Itu sebetulnya cuma take over kan dulu Napster, Kaza, bukan banyak musik cuman dulu semua kayak gitu.

Cuma bedanya cuma sumber kontennya aja kan. Kalo dulu tuh jadi ilegal karena kan kita nge-share file mp3 yang kita punya.

Karena secara hukum kan kita nggak authorize buat ngebagiin itu, ya maksudnya masuk ranah virus sih.

Cuma kalau dalam kasus Spotify kan dari awal bisa punya file itu juga dari Spotify kan, yang mana Spotify udah punya dealing legalnya.

Jadi Napster itu dianggap ilegal karena banyak yang share adalah file, banyak yang nge-share musik-musik yang bukan free royalty.

- Iya, kalau dulu kita beda masukin folder kita sendiri. Napsternya cuma bikin teknologinya, tapi memfasilitasi kan.

Yang waktu awal-awal misalnya diperhentukan kayak semuanya bebas membagikan musik yang mereka buat sebenarnya.

Contohnya kayak indie, kayak DJ, indie kreator.

- Ya atau kita bikin apa misalnya pribadi, buat keperluan pribadi kita bikin lagu sendiri, ya boleh-boleh aja kan kita bagi ke temen atau siapa pun.

Contohnya kalau dulu saya suka nonton film itu di Popcorn Desktop, pernah dengar? Popcorn Time.

Popcorn Time itu juga salah satu pir-pir yang bisa langsung nonton.

- Oh, itu toren bukan bass-nya? - Iya, toren bass.

- Bass kan? - Sama. Kalau Napster kan music bass, kalau Popcorn Time dia movie bass.

Dan itu aplikasinya masih ada di GitHub dan bebas-bebas aja.

Ya tergantung kalau misalnya mau nontonnya yang film berbayar ditonton di situ bisa, asal tahu cara.

- Mau yang royalty free juga bisa. - Yang royalty free juga bisa.

- Oke. Nah, ini ada yang nggak kebayang bikin sing engine. Kalau bukan SBA plus Jason.

- Itu tadi harus pakai CRDT. - Ya CRDT.

- Nah, yang sulit itu kan, jadi balik ke local first lagi kayak misalnya kan harus ngecek,

kayak div, berarti kan misalnya ada konflik, yang pertama kita cari kan perbedaannya, terus kayak timestampnya.

- Salah. Sorry, sorry. - Lanjut, lanjut, lanjut.

- Apa ya? Cuma definisi sing engine sendiri apa sih?

- Nah, sebelum ke sing engine nih ada framework untuk CRDT. Salah satunya ada JS.

- Saya pernah sampaikan ini kan ya. - Pernah ya?

- Dulu. Pernah. Waktu saya lagi bangun bikin collaborative editing di WordPress.

- Oh iya, collaborative editing ini cocok. Jadi pada saat user A lagi ngetik, user B juga ngetik di tempat yang berbeda,

gimana cara resolusi supaya bisa jadi merge dua-duanya, nggak hilang datanya.

Karena kan berada di lokasi dan mengedit hal yang berbeda, tapi masih satu dokumen.

- Nah, itu div-nya pusing apa, ngecek difference-nya misalnya gini deh, ngedit string aja, ada kata saya,

S-A-Y-A. Nah, user A nggak ubah kata saya, string S-A-Y-A-nya tetap, tapi dia masukin kursor di ujung kata saya,

saya ditambahin ND jadi sayang. Nah, sedangkan user satunya nggak hapus itu, kan itu kayak dua action yang berbeda sama sekali,

itu div-nya pusing ya, itu di handle sama framework-nya berarti.

- Salah satunya ya. - Caranya kalau, saya lagi nyari videonya, kok nggak kelihatan sih kalau lagi begini.

- Google Style Editing in Gutenberg, ini? - Kayak gitu, saya belum pernah publish ini.

- Oh, demo-nya di sini. - Di Code Mirror bisa, kalau mau di test.

- Secara teknis di belakang, itu dia lakukan seperti per-commit, jadi semua...

semua text itu akan dijadikan vector, jadi graph, dan itu waktu ada perubahan di-commit dan perubahan itu

akan digabung ke vector-vector itu, jadi bisa, misalnya kayak Eka tadi bilang ini S-A-Y-A,

tambah N-G, tapi di tengah S-A, itu ditambahin satu, jadi S-A satu yang itu bisa, itu bisa di-merge kayak gitu.

- Karena setiap ada perubahan, dianggap sebagai satu commit gitu ya? - Kayak ada snapshot,

jadi kayaknya dia bikin snapshot kayak di Git gitu kan, setiap di tengah save file.

- Ada, nanti di sini, di CRDT Implementation-nya itu dia ada dua paper yang dia terbikin bagaimana cara...

- Pake paper. - Algoritm.

- Iya, udah pake paper-nya. - Harus pake paper sih, karena ada algoritmanya,

kan maksudnya ada logic-nya sendiri kan, itu tadi kan kita cuma...

- Itu kalau mau, kita mau demo, mencet aja tuh demonya. Salah satu demonya mungkin,

Prosmirror atau Codemirror atau Seradeh. Coba kasih link-nya ke temen-temen atau ke kita.

- Ayo kita ketik sama-sama, oh ini ada orang lain muncul kan ya?

- Iya, semua yang ketik disana. - Semua yang lagi nonton kita.

- Selamat malam Mas Ricky. - Apus lah.

- Nah, cursor itu juga nanti namanya Awareness. Jadi ada datanya ada dua nih di sini.

Datanya ada data content sama data awareness. Awareness inilah yang membuat user.

Jadi EKA user-nya yang mana, cursor-nya yang mana, itu yang akan mengirimkan datanya.

- Ini local storage bukan? - Mungkin ada local storage-nya.

- Nggak ada. - Ini ada 3 binder, ada binder-nya.

- Ah Firebase, local storage DB. Waduh, waduh, waduh. - Itu pakai apa sih? Websocket?

- Nggak ada, nggak ada. - Bisa jadi pakai Websocket.

- Tapi cepet banget. - Dia bisa WebRTC juga.

- Oh iya, Websocket. Ini mesejnya tuh. Tapi pakai binary dia, nggak bisa dibaca.

- Wow. - Siapa sih yang bikin subscribe, guys, subscribe, guys, subscribe, guys?

- Bukan gue. - Nggak tahu.

- Oke, sudah, sudah, sudah. Lanjut, lanjut, lanjut pembahasannya.

- Nah itu untuk ini tadi ya, kalau misalnya mau synchronize, bisa pakai Yjs.

Pakainya nggak straightforward, harus kalian bikin binder-nya sendiri, binding-nya.

Ada caranya API-nya ada, sudah lengkap bagus, dokumentasinya bagus.

Tapi momenya itu nanti saat mulai memikirkan user-nya banyak, gimana, artist-nya gimana,

synchronize apa, scaling-nya, scaling, scaling susah.

Dan kadang dia ada nge-bug, kalau misalnya dia nggak bisa conflict, sudah terlalu ribet conflict resolution-nya,

dia akan reset ke initial state. - Kok harus reset?

- Dia udah bingung. Nah, udah. - Menarik.

- Macau juga ya. - Ke initial state sebelum ini ya, sebelum session itu dimulai ya, maksudnya.

- Ya, kalau mulai dari kosong, enggak. - Iya, maksudnya initial state, kan.

- Initial waktu kita nggak initialize objek Yjs. - Aplikasi itu.

- Iya, ibaratnya kosong, misalnya kita collaborative editing, kita udah nulis 3 paragraf,

cuma maksudnya pada reset ngeditnya, berarti kan itu kayak kosong lagi kan, kalau skenario-nya gitu.

- Bisa diakalin dengan autosave, kan bisa. - Oh, ada autosave-nya.

- Kalau misalnya ada fallback-nya, ada masalah, dia reset, ambil lah yang dari local storage.

- Ya, dan itu kita yang nge-handle sendiri, kan? - Iya.

- Ada fitur autosave-nya, tapi untuk ngaktifkan input dan manage fitur kemana.

- Iya, ini adalah contoh video yang lumayan bagus tentang Yjs, dia bikin aplikasi to-do,

tapi bisa offline dan real-time pakai Phoenix Live View, Svelte dan Gjs.

Siapa tahu ada yang mau lihat gimana kira penggunaannya.

- Oh, ini nggak bisa dihilangin ya? Oh, gini ya. - Mau dong, gue mau belajar Phoenix,

gue mau belajar Svelte. - Nah, ini di sini dia ada kasih lihat nih contohnya nih,

to-do yang di kiri, yang di kanan itu bisa sync, kalau lagi offline gimana,

terus kalau dia update lewat API, ininya berubah langsung gimana,

jadi bisa kalau ada yang mau belajar Yjs juga bisa cek di video ini.

- Oke. - Keren, keren. - Nah, selain selanjutnya, tadi kan conflict resolution-nya,

terus juga ya ini tadi, apa namanya, sync engine jadinya, larinya ke sync engine,

salah satunya ya Zero, ada Electric SQL, ada Power Sync, ada macem-macem.

Dan itu udah termasuk conflict resolution nggak? - Nggak, conflict resolution itu beda.

- Nggak ya? - Oh, nggak tahu, kalau Zero bisa conflict.

- Beda sendiri? - Saya nggak tahu.

- Kalau Zero nggak tahu, tapi kalau Power Sync sama Electric SQL, udah ada fitur itunya.

- Iya, kalau nggak salah sih, mungkin beberapa ada, beberapa yang mungkin nggak ada gitu ya,

harus di cek juga. Ini Power Sync, dia database-nya, kayaknya selama SQL aman ya database-nya,

ini ada gambar apa nih, monggo dibi, ada ikan paus apa nih, oh pausnya dia ada,

MySQL ya, MySQL. Berarti database yang umum digunakan, tapi dia menggunakan SQLite

sebagai embedded database-nya di lokal, iya. - Jadi dia agnostik, apa teknologi agnostik lah

ibaratnya di lokalnya, kita mau bikin pakai set-up yang umum lah,

yang penting bisa nulis ke SQLite. Dan kalau Power Sync itu, sempat lihat-lihat sih,

senang karena dokumentasinya bagus aja, kayak relatif, mudah dimengerti, web dev,

terutama yang front-end ya, yang nggak biasa begini-gini, itu kalau harus bikin,

harus pakai itu kelihatannya bakal relatif, mudah lah, banyak SDK-nya, wrapper-nya juga.

- Power Sync, belum pernah dengar ya ini? - Iya.

- Iya, tadi dia pakai yang tadi tuduh tadi? - Bukan.

- Beda lagi. - Cuma dia branding-nya adalah sync engine untuk lokal first dan offline first.

Nah, perkara implementasi detail-nya gimana kan bukan urusan dia apanya dia ngurus data storage

antara di client, di device, sama di remote. - Oke.

- Ada lagi namanya electric SQL. Di electric SQL ini, sebenarnya di Postgre kan ya?

- Entah, itu yang mana tuh? - Ada lagi. Sekarang banyak lagi nge-trend.

- Nge-trend, ya. Jadi sync subset of your Postgre data into local apps and services.

- Terus abis itu dia bikin project namanya PG Lite yang bisa jalan di browser dengan Wasm.

- Nah, jadi ini gimmick-nya adalah syncing, jadi ya itu tadi tagline-nya jadi kayak cuma,

nah ini pernah lihat, kayaknya lihat YouTube tentang ini atau apa, cuma pas itu karena buru-buru nggak paham,

serius, cuma kayaknya yang gue tangkap sekilas adalah yang nge-diff itu nge-check perbedaannya apa,

terus ya mungkin dia punya settingan conflict resolution, macem-macem.

Ya pokoknya dia meng-update sisanya apa yang berubah, apa yang berbeda aja.

Tetep nggak ngerti sih, tetep belum ngerti karena belum nyoba beneran.

Ya itu, dan lagi-lagi gimmick-nya adalah dia kayak environment agnostik, ya itu kayak bisa di lokal,

bisa di, apalah serverless, bisa di server biasa.

Gimana? Kayak tadi lagi bisa nge-tick royokan.

- Bukan nge-tick, ini gambar nih kayaknya. Loh, gimana gambarnya?

- Belum muncul, belum loading. - Oh, belum loading ya? Belum loading.

Reload. Loh, lo pake VT. - Gak bisa.

- Gak bisa. Eh, ada plus. - Gak bisa.

- Error apa? - Udah muncul color picker.

Error itu buka console. - Error ya.

- Pit request, tadi bikin demo, error. - Error.

- Itu ada notes tuh, pake YJS juga. - Notes.

- Nah menariknya, Sunking C Linear itu udah linear app itu udah dianggap sebagai apa, kayak pelopor lah,

yang paling beken dalam gimmick local first. Itu kan tadi demonya ada clone-nya linear.

- Gak bisa juga. Oh, ada clone-nya linear. Gak bisa juga.

Gak complete. Kayaknya CDN-nya atau apa, error gitu ya. Ya gitu lah, electric SQL.

- Linear light. Tapi intinya punya, apa konsepnya? - Makin banyak ya.

- Sinking. - Oh, ini ya.

- Maksudnya, ininya tools-tools untuk mendukung kita untuk membangun local first app itu

makin banyak yang bisa dipakai. - Iya.

- Trend-nya mungkin keadaan sana kali ya. - Iya, nah itu keliatannya.

- Dan terakhir, ada Zero. - Iya.

- Zero ini, kalau gak salah, bisa pakai Prisma ya, kalau gak salah ya.

Kalau gak salah. Ada ininya. Jadi dari database SQL bisa di-convert ke Zero SQL namanya.

- ZQL. - Nah ini dia.

Jadi aplikasi web kita di sini, ada klien-nya, dia connect pakai Websocket, ada kids-nya,

kemudian ada replikasi, baik itu ke Postgre atau MySQL.

Nah, koneksinya itu apa, perintah-perintahnya itu menggunakan ZQL.

Jadi, tapi ada projek yang bisa mengubah atau migrasi data dari ORM seperti Prisma

atau Drizzle ke ZQL. - Dunia lagi berbalik ya.

Dari yang Microsoft Access, jadi SQL Server, sekarang balik lagi ke MySQL Access.

- Tapi bisa single-nice. - Dari yang lokal-only,

yang gak ada koneksi internet kemana-mana, terus langsung global semuanya terpusat,

client-server, terus balik lagi lokal, terus bisa terpusat juga, bisa dua-duanya hybrid ya.

- Nadi show notes tuh gue nulis gitu kan, kalau dulu, dulu banget kan paradigma-nya adalah kalau aplikasi native,

ya kayak apa lah, gak usah Microsoft Access atau apa yang terlalu sulit, Microsoft Word lah,

yang semua orang punya kan dulu, walaupun bajakan, Microsoft Word, Notepad, itu semua kan by default pasti offline first,

karena ya apa, home user belum tentu punya internet juga, intranet paling ya kayak ada di kampus atau di manapun.

Terus sekian tahun kemudian, web, kalau aplikasi web, web app by default pasti online only kan,

online only, karena untuk kebuka harus dari web browser.

Nah itu kan dulu kayaknya terpisah kayak gitu, cuma lama-lama ya aplikasi native juga kan semua service-nya

harus connect ke online, kayak sekarang Adobe kan makin banyak, kayak Adobe Photoshop atau apa, makin online based kan.

Nah, sekarang tuh baik aplikasi web atau native semua online, kayak bergantung banget sama online,

tapi ternyata buktinya apa, dua tahunan ini makin, makin gencar paradigma offline first, berarti kan dua-duanya ini bakal,

bisa aja bakal mengarah ke offline first. Trend itu berarti...

Online itu, trendnya itu berarti ada hubungannya sama perkembangan SaaS, software access service kan,

jadi semuanya terpusat kan. Kalau ada update kita nggak perlu, ya cloud,

kalau ada update kita nggak perlu ngirimin CD atau flash disk untuk update di lokal gitu kan, jadi udah langsung gitu.

- Nggak harus mimpah file-nya. - Iya, malah perusahaan-perusahaan kayak yang tadinya offline,

kayak Photoshop, Adobe lah ya Adobe, terus apa lagi, Microsoft dan lain-lain itu juga sekarang udah ke arah sana kan,

jadi kalau ada update, ada dan access-nya juga bisa dari web gitu ya.

Nah, ini yang menarik juga si Zero ini dia bikin aplikasi contoh, tapi beneran dipakai namanya Bugs Zero.

- Bugs Zero, jadi buat pendekatan bugs. - Zero bugs, zero bugs, zero bugs.

Oh, zero bugs, balik ya. Iya, zero bugs. Ini bisa offline nggak ya?

- Bugs Bunny. - Ini bisa di... Oh, di klik doang.

- Tapi kalau aja... - Coba klik kanan.

- Ini kayaknya Inspire Bilinear juga deh. - Kayaknya.

- Ke kanan, Inspect, Network, Offline. - Offline.

- Oke, let's see. - Tadah!

- Di Reload. - Di Reload nggak bisa.

- Reload? Nggak lah. - Nggak bisa.

- Nggak bisa. - Ya, berarti belum.

Nggak lah, jadi begitu di sini baru dia datanya disimpan semua kan.

Jadi kalau misalkan mau ngedit-ngedit, misalkan kalau mau... Oh, harus login. Ini beneran udah, Tia?

- Iya. Coba klik. - Bug beneran.

- Bugs beneran. - Bugs beneran.

- Bisa. Yang paling bawah deh ya. Yang paling bawah ya. - Yang paling bawah ya.

- Cepet banget ya. Dan offline. - Snappy.

Snappy. Filter, filter. Filter by?

- Riza. - Oh, nggak keluarnya.

- Status. Status. - Ini nggak keluarnya. Status.

Filter by status. Label.

Tuh.

Oke. Websocket.

- Jaman dulu jQuery UI juga. - UI.

- Bisa begini. - Bakal download semua datanya.

- Terus baru diproses. - Tapi lambat.

- Dropbox. Dropbox. Apa? Dropdown. JQuery dropdown itu apa namanya? - Dropdown.

Select to. Select to. Select to.

Label bugs. Modified. Oh, ini udah bisa kita ini ya.

Close. Yang all.

- Keren ya. - Coba kasih, itu kasih emoji. Emoji.

- Emoji? - Ini tuh ada...

Apa response? Oh, nggak bisa lah login.

Kalau pacar login?

- Ya login. - Kalau pacar login.

- Nggak, bakal... - Oh, pakai GitHub.

Ya, pakai GitHub.

- Pakai OAuth terus. - Tuh, udah ada pasiki tuh GitHub tuh.

Lah, emang udah. Udah 2 tahun.

- Yang pertama. - Zero salah satu yang ini ya.

Ayo 2025. Local only app di era scraping AI.

- Jadi masih ke lisensi lagi. - Nanti bakal banyak yang bikin keygen lagi.

- Keygen. - Masukin keygen.

Kayak bajakan. Kayak software bajakan 10 tahun lalu.

Mungkin lebih ke arah aplikasinya tetap bisa di update over the air.

Tapi datanya bisa di ases lokal. Mungkin gitu ya.

- Kalau sekarang ya. - Iya.

Jadi kayak itu tadi kembali lagi ke personal finance yang tadi. Apa namanya?

- Actual. - Actual budget.

Data adalah milik kita sendiri.

Ya, you own your data.

- Sampai sama seperti... - Kayak kembali jamannya di microsoft access.

Di desktop masing-masing. Udah.

Nah enggak, cuma kalau implementasinya, kalau aplikasi modern kayak gini,

Berarti kan sebenarnya kasarnya kita, ya data punya kita, oke data kita yang control.

Kita ngehosting data kita kan, terserah dimana.

Sebenarnya suka-suka kita, tapi kita ngehosting data kita somewhere kan.

Ya, ya, ya.

Sebenarnya ya tadi data ownership itu.

Makanya si Obsidian juga dia bilang datanya itu milik kita.

- Kalau misalkan kita nulis... - Software-nya proprietary.

Tapi konten file-nya suka-suka kita.

Mau beneran literally di Macbook kita misalnya.

Atau mau kita sync ke iCloud service-nya Macbook bawaan.

Kalau kita pakai Linux ya nggak, nggak di sync ke mana-mana bisa aja.

Atau misalnya kita mau pakai Dropbox atau Google Drive atau GitHub.

Atau layanan Git apapun, kontrolnya ada di kita.

Ya, itu untuk menghindari juga, apa namanya, vendor login.

Jadi kalau misalkan kita mau migrasi, ya udah file markdown aja gitu.

Ya, silahkan pindah ke aplikasi lain gitu.

Kalau misalkan kita mau pindah dari Notion kan harus export-import dulu kan ya.

- Dan belum juga compatible kan. - Yang mana format JSON-nya ya kurang user-friendly.

Berbeda. Apalagi kalau mau import dari misalkan kayak Evernote gitu.

Itu lebih sulit lagi kan.

Jadi semuanya itu kan dia database-nya ada di mereka gitu.

Jadi yang kita bergantung kepada mereka.

Kalau seandainya sebuah notes, aplikasi notes yang kita pakai

terus tiba-tiba mereka berhenti, service-nya berhenti, ya kita pindahnya juga bingung kan.

Kalau ini, kalau pun berhenti misalkan nggak dikembangin lagi kita mau pindah ke tempat yang lain.

Atau ke aplikasi yang lain ya udah pindah aja, datanya punya kita kok.

Aplikasi apapun yang bisa ngedit plaintext.

Apakah diskusi ini tentang offline first app juga seperti MongoDB, Realm Sync?

- Kita baru tahu nih. - Iya, cuma kita belum tahu Realm Sync.

Belum sampai ke MongoDB.

Tapi ya tadi yang sejenis tapi pakai SQL, ada kan tadi udah dibahas.

Mungkin ya sambil di-search aja, MongoDB, Realm Sync.

Kok nggak ada di mongodb.com-nya?

- Iya, kita tadi untuk jawab, Mas Yuda, kita bahas local first application. - Local first application.

- Bukan offline. - Bisa lah, kan terkait juga.

MongoDB, Realm Sync, is a feature that allow developer to build application that sync data seamlessly.

Masih ada kesamanya kan, walaupun pakai terminologinya.

Mau tahu info-nya gimana ya, official, ini Android, Realm SDK.

Oh iya, eh 404, product, Atlas. Atlas itu cloud-nya kan ya.

Realm tadi, di-search aja gimana? Apa maksudnya search?

- Realm. - Realm Sync.

Search apa as AI? Udah nggak ada.

- Mana banyak? - Ayo.

- Ayo. - Bentar, bentar, bentar. Tadi artikelnya, artikel tahun berapa nih?

- Ada, ada. - 2021.

- Iya. - Ya.

- Maksudnya sudah ada gitu, MongoDB, Realm tuh.

- Iya, udah nggak ada. Tuh, ke Atlas dia, device SDK jatohnya.

- Oh. - Ini ya, tadi kan saya klik yang gini nih,

docs.mongodb.com/realm, larinya ke sini, ke SDK.

- Mungkin. - Apakah sudah ganti nama?

- Eh tuh, kiri-kiri, Realm Studio, Realm Query Language, toah bawa, iya.

- Ini. Ini maksudnya Realm. - Iya, device sync.

- Iya. - Gak tahu.

- Itu view data with device sync. - Tapi ada tulisannya device sync.

- Iya, tadi ada device sync. Yang ini kan? - Memang salah satu fiturnya.

- Iya. - Kayaknya udah di-combine ke,

di-combine ke fitur lain kali ya? - Mungkin.

- Deprecated. - Deprecated.

- Oh. - Berarti yang tadi. Realm Studio.

Realm Studio is visual tool, bukan.

Also using device sync. RxDB Creator. Oh iya, RxDB juga ada.

RxDB juga salah satu library untuk membuat offline first,

bukan offline first, local first. Realm.

Kok udah gak ada ya, berarti ya? Deprecation.

- Itu dijelasin di komen. - Udah gak ada, senjata.

RxDB. Oh, expired. Ada penggantinya gak? Gak ada ya.

Realm library language. Oke, berarti gak ada yang pakai kali ini.

- SDK. - Iya, iya, iya.

Ada gak engine sync eskelat dari Wasm? Jadi gak perlu docker buat install engine sync.

Cuman butuh file Wasm, eskelat, dan aplikasi kita saja lebih kompet, gak perlu entitas luar lain.

Ada. Contohnya yang tadi, actual budget mereka pakai SQLite,

kalau gak salah, eskelat yang Wasm. Makanya orang yang bikin, siapa namanya,

yang pertama kali dia bikin. Sekarang kan udah banyak nih.

Ini, si James Long ini juga bikin library untuk akses SQL dari Wasm.

Jadi bisa dilihat saja di sini. Upset SCL.

Ini awal banget. Awal banget sebelum Wasm, eskelat bisa jalan di Wasm.

Kalau sekarang kan udah banyak yang bikin ya. Kalau ini dia awal-awal banget tuh.

Itu 4 tahun yang lalu. - Palsdb-kalsdb masih ada yang pakai gak ya? - Masih, masih aktif kok.

- Masih ya? - Masih, masih aktif.

Masih? Kan kita pernah buka waktu bahas apa ya? Waktu itu udah lama.

Bahas database. Oh, emang bahas database.

- Ini palsdb. - Emang maksudnya apa? Mineroversen-nya juga naik terus?

Naik terus, ya. Ini sebenarnya adalah ini, apa namanya?

Rapper ya, di atasnya database yang di browser indexdb atau localstress atau apa gitu.

Bukan API-nya menyurupai kalsdb.

Biar streamline ya, antara local sama remote tuh enak.

Ini open source ya. Kalsdb juga open source ya?

Ya, udah dibeli apa aja sekarang? Apa aja?

- Kalsdb. Apa aja? - Ya, lagunya sih Rose. Apa aja? Apa aja?

Nah, inilah fungsinya font effect.

Mana? Issue tracker pull request.

Masih ya? Aman ya? Aman ya? 4 hari yang lalu? Aman?

- Masih kok. - Kalsdb...

Emang maksudnya kayak gini kan emang gak cepet-cepet banget.

Masih apa? Cycle update-nya gak ekstrim release terus kan.

Cuma masih tetap aktif di-maintain.

Kalsdb salah satu database NoSQL yang cukup layak dicoba sih. Keren-keren.

Kalau gak salah dulu juga ada tuh Meteor.

Dia pakai MongoDB di back-end-nya.

Di front-end-nya kita dikasih library namanya Minimongo.

Syntaxnya mirip MongoDB tapi dia indexdb juga.

- Masih ada? Di-open gak ya? - Meteor.js masih hidup.

- Masih? - Masih.

- Ini bukan? Oh bukan. - Client-side in memory MongoDB.

Tapi bukan ini. Dia ternyata gak di-open kayaknya ya.

- Itu Meteor Minimongo Explorer. - Iya. Ada.

Jadi dia cuma bikin supaya streamline.

Jadi antara back-end sama front-end-nya, syntaxnya tetap sama.

- Tapi sebenarnya di belakang itu... - Indexdb?

- Indexdb juga ya? Rapper aja. - Iya.

Cuma ada CRDT, ada replicate, ada mekanisme seperti itu

yang membuat kalau misalkan ada konflik, dia akan coba di-resolve.

Cuma mau bring up aja, meskipun katanya sudah ada CRDT,

conflict free, resolution data type, bukan berarti semuanya magically.

- Pasti di-complete. - Iya.

Kalau sudah di-production, banyak kenanya itu dari YGS.

Maksudnya tetap ada gitu masalahnya, jadi tetap butuh penahanan.

Itu nggak magic.

Ya, berarti kita mikirnya kayak git aja sih.

Maksudnya git, conflict resolution itu kan kita dibantu dengan...

kita dikasih list apa saja yang conflict.

- Dia nggak peduli. - Caranya jelasinnya gimana.

Git, kalau konflik dia dari konsep awal berpikirnya,

kalau ada konflik, dia tidak menyelesaikan itu.

Tapi kan dia marking kita yang bikin ngambil keputusan,

mau accept yang incoming atau mau pakai yang present.

Maksudnya kan kita udah punya mindset kayak gitu.

Nah, kalau gitu tadi berarti dia supposedly nge-solve,

tapi belum tentu semua kesolve.

Bisa nggak sengaja malah memecahkan masalah dengan masalah berarti.

Logsek juga gitu dia kayak git, jadi kalau misalkan ada konflik,

dia akan kasih tau mau pakai yang versi ini atau pakai yang versi ini,

tapi nggak bisa di-combine dua-duanya, pilih salah satu.

Jadi itu mungkin masih yang sederhana ya, conflict resolutionnya masih sederhana.

Mau pilih punya yang sebelumnya atau yang terbaru atau gimana gitu.

Itu jaman saya pakai FTP dulu, Mas.

Kalau ada both modified, pilih mana?

-Override, yes. -Cancel dulu, terus di-zip ya, di-backup.

Terus abis itu begitu salah, ya mana tadi ya zip-nya.

-Atau langsung di-copy file-nya di server, copy new, new, new, new, new 2x, new 3.

-Di kanan duplicate gitu dia langsung new, ada tulisan new-nya.

Jadi kayaknya 2025 semakin banyak yang mengarah ke arah Localverse ini.

-Saya bahkan mau fokuskan tahun ini mau belajar Localverse.

-Ini ada komunitasnya namanya Localverse. -Ada meet-up-nya juga.

-Ada meet-up-nya. Yang lucu ini ada tadi saya sempat baca satu artikel.

Mana dia artikelnya, ada nggak artikelnya?

-Ini lucu banget sih kategorisasinya ada learn, build, join in.

Ada dia, ah ini dia. -Accidentally started community.

-Static web page and accidentally started community.

Jadi dia bikin static web aja, terus tiba-tiba jadi komunitas.

Nah disini juga sebenarnya kita bisa belajar banyak ya dari YouTube-nya ada termasuk yang tadi.

Terus juga misalkan mau tahu, ya ini belajar, ni learn, ada yang bisa dibaca,

ada yang bisa di tonton. -And to end, it's important to end.

-Iya, mau benchmark CRDT-nya juga bisa, ada podcast-nya.

Terus kalau mau bikin tuh ada pilihannya kalau mau storing datanya dimana.

Tadi ya, electric, atau pakai Goon, atau pakai apa lagi tadi?

Pause DB, rammer storage, ada, kok ini GitHub ya?

Watermelon DB. Terus kalau mau sync datanya bisa pakai Amplify Data Store,

bisa pakai AutoMerge, tadi juga ada Ditto, ya Mas Yuda ya.

Ada Ditto, ada YGS. -Mas Ditto ya?

-Bukan, Mas Yuda. -Ditto nama software-nya.

-Nama software-nya. Ada Porsing tadi kita udah liat juga, ada RepliKage, ada YGS.

Ada macam-macam ya. Ada contohnya juga.

Terus kalau mau join komunitas bisa dimana, Lovie, Discord.

Ada aplikasi. -Lovie ya?

-Lovie ya, Lovie. Nggak, Lovie, karena First.

-Lovie. -Lovie.

-Oh, yang apa, ada kalau temen-temen punya aplikasi yang sudara,

local first bisa pull request, bisa di sini ya. -Dan open source, Excalibro masuk ya.

-Excalibro masuk, aktual. Terus apa lagi nih? Ada yang kita tahu nggak? Tender.

Legend. -Cuma kenal Excalibro 2.

-Iya, Excalibro. Berarti Excalibro bisa offline walaupun fitur

pelaburasi ini juga nggak bisa ya. Oke, ada lagi yang mau dibahas?

-Apa ya? Ini artikel. -Artikel?

-Cuma dia pake istilah offline first, yang atas, yang offline first landscape.

-Landscape, oke. -Ya kayak recap yang bagus saja sih.

Kalau pengen TLDR-nya. Barusan banget baca ini.

-WatermelonDB, oh tadi ada ya WatermelonDB ya.

-Betabit agnostik. PowerSync. -Belum di-share, Mas Tiza.

-Oh iya, sorry. -Oh iya, belum.

-Maaf, maaf. -Jadi ini konteksnya adalah mereka mau bikin suatu

aplikasi. Ya, pokoknya ada requirement-nya, blablabla, namanya Marco.

Pokoknya sih nggak penting, cuma maksudnya keputusannya dia decision making.

-Jadi kayak ini ya, jadi kayak Thunderbolt, jadi kayak email client ya,

local first itu ya. -Oh iya benar juga.

-Kaya IMap, IMap-based. -Oh iya benar, benar, benar.

-Iya, iya, iya. Itu juga aplikasi untuk baca email kan dia local first kan ya.

-Iya, kita bisa baca, kita nge-click reply, kita nge-tick dulu, tapi nanti kalau misalnya

mau nge-fetch, mau manggil email baru dan kita mau ngirim baru.

-Iya benar, benar, benar. Bahkan kita sudah selesai nge-tick send,

meskipun nggak ada internet, dia tetap akan masuk di outbox, outgo.

Nanti kalau udah synchronize ke internet, dia baru kekirim.

-Iya, nggak kepikiran ya, ternyata sudah lama sih, emang dari awal local only ya.

-Cuma kita kan sekarang nggak mikirnya sampai situ, kita nggak mikir ke mindset

sesuatu yang udah familiar dan udah lama banget.

-Iya, apalagi kan kita mikirnya kan ini, aplikasinya aplikasi web biasanya,

umumnya, nggak mesti tapi umumnya. Tapi kan ini juga tidak terbatas ke

aplikasi web aja kan, aplikasi CLI misalkan, kayak terminal,

aplikasi terminal, bisa aja kan? -Bisa, ya git itu.

-Iya git tadi ya, benar, benar. Terus ini starting pointnya database-nya

Watermelon, alasannya karena open source, database agnostik dan sudah lama.

Terus untuk syncing-nya pakai PowerSync. -PowerSync.

-Oh PowerSync itu cell-hosted ya? Oh bisa bayar juga ya, ada cloud-nya ya.

Very complex architecture, both changes to post-greed and separated

ha-apah, ha-proxy ya, MongoDB, deployment cluster, oh pakai MongoDB.

Terus electric SQL, look interesting but was in the middle of the complete rewrite.

-Oh jadi elektric SQL-nya. -Iya dia percimbangkan tiga itu,

pertimbangannya apa aja. Tapi kan berarti tiga-tiganya bisa dipakai

buat offline first. -Terus dia akhirnya milih Watermelon.

-Oh menarik. -Kapan ini blog-nya?

-Barusan Januari 2020. -Januari? Seminggu sepuluh hari yang lalu.

-Oke. -Oh kok jadi menarik ya si Watermelon.

-Terus maksudnya dia ngasih gambaran tentang landscape-nya yang lebih luas sih setel-nya ini.

-Apa nih? We discovered a host of new wave, offline first implementation.

Apa nih maksudnya offline first implementation? -Belum sempat nulik nyampe situ,

cuma tadi liat si artikel ini sejelas kayaknya. -Confection pernah denger deh.

-Missing half of your react. Tagline-nya menarik-menarik ya dari tadi.

-Open source reactive database. -Database.

-Oh firebase kah? Firebase atau supabase ya temen-temen? Oh ada mutation, action.

Ya database lah pokoknya ya. Not just database. -Dijawab gitu.

-Real time. Ini dia pakai apa? Maksudnya kalau misalkan kita mau...

-Storing data tapi bisa automatic synchron, bisa search gitu loh maksudnya.

-Terus bisa koleksi socket, jadi kayaknya tuh real time blablabla.

-Kalau kita pakai firebase atau supabase gitu berarti kita belum bisa syncing ya, hanya sebatas.

-Firebase sudah synchron. -Bisa kan ya?

Misalkan nih kita bikin aplikasi pakai firebase, terus kita lagi ngedit-nedit,

atau kita lagi buat posting baru untuk CMS, terus habis itu tiba-tiba internetnya mati.

Itu datanya di-cache dulu, habis itu begitu internetnya connect dia syncing ke firebase atau gimana?

Nggak tahu ya. -Nanti kita tanya si Dennis Alun ya.

-Oh iya udah-udah. Oh iya bener juga kita belum undang anak-anak firebase.

Bener, bisa nih. Kebetulan dia di Bali, jadi kan idlenya bagus.

-Idenya bagus. -Gua nggak bisa pencet.

-What makes convex real time?

Dependencies for every query function, whenever any definition change,

including any database rows, convex rerun the query function and trigger an update to any active subscription.

Oh udah sampe Pub/Sub segala dia ya, udah include ya.

Where do convex function run? Convex function run server side.

-Dia punya server sendiri. -In an isolated distribution environment.

-Can I try? Yes. -Local first. -Bukan local first.

-Local first atau nggak kan gimana yang bangun arsitektur seluruhan app-nya kan,

cuma convexnya menawarkan layanan di server side-nya dia, blablabla.

To convex is instead an entire machine solution, ada API endpoints, blablabla.

Tapi dari perspektif yang bikin app yang dipakai user kan tetap aja bisa menterik itu sebagai local first.

-And 100% long into kalau convex. -WatermelonDB cuman react ya, sayang sekali ya.

-Itu convex juga ternyata react kan? -Iya, kurang agnostik jadinya ya.

-Mengkater ke react karena kelihatan kalau front-end di dominasi. -Betul sekali.

Terus akhirnya dia pilih apa? Problem, problem, problem.

-Why so many problems? -Replication.

Ya ampun, lucu sekali nih artikelnya.

-Kalau semua orang brengsek berarti ada kemungkinan. -Replication.

-You yang brengsek. -Ujung-ujungnya replication.

Ini buat syncing engine juga ya.

Tapi cara kerjanya.

Bring your own back-end, BYOB tadi dia cuman sediain untuk synchronization aja yang dibati ya.

On a user first visit replication download the initial chunk of data and store persistently in browser.

Jadi ada di browsernya ada database-nya ya.

The application reads and writes only to its local copy of the data.

Thus the application respond instantly to our interaction by default.

Ini kan masih di lokal nih. Terus dia syncingnya gimana nih?

Additional data is downloaded as necessary, synchronizes changes to the server and other clients continuously in the background.

Mereka syncing lah ya, syncing di background gitu ya.

Tiba-tiba ada muncul data baru-data baru gitu ya.

Terus setelah itu, wah ini penjelasannya menarik ya.

Conflict happen if two users edit data concurrently.

Replicate, merge, and conflict using a form of server reconciliation.

Intuitive and powerful technique from multiplayer games.

Gak dibahas dia pakai apa gitu ya.

If this can happen, because the server is down, there is no network, changes are queued persistently until the servers come back.

Replica app can smoothly transit online, offline, and other available networks.

Testimonial paling atas dari boss new server.

Oh, berbayar. Replyless free to use for non-commercial project or company with less than 200k revenue and less than 500k funding.

Bisa lah ya.

Bisa, bisa.

Free tapi tidak free.

Gak completely. F-O-S-S.

Get started, oh start learning.

Tidak usah urus juga pasti ya.

Tapi Rosicorp juga. Sama yang Zero tadi Rosicorp kan ya.

Oh iya, iya. Dia memonopoly ekosistem lokal first.

Build your own backend.

Disample ya. Nanti kita korek-korek lebih lanjut ya.

Bisa jadi ini sendiri. Oh iya, ini khusus react ya. Sayang sekali.

Oke, ada lagi kah yang belum dibahas?

Sudah.

Sudah?

Nanti paling, abis ini pengen ngerenungin isi artiklenya si Marco Epp ini lagi sih.

Maksudnya lebih ke inside, bukan ditiru persis dia pakai apa, tapi kayak cara dia ngeproc.

Oh ini tuh begini. Gak cocok karena ini kayak itu seru aja sih.

Dan ternyata maksudnya apa ya, ekosistem lokal first itu se luas itu.

Dan kayak solusi-solusinya aja tadi yang di landing page-nya si lokal first community itu udah banyak banget kan pilihannya.

Iya betul.

Ya cuman itu ya. Mereka bisa, setelahnya bisa, oh kita punya problem ini.

Bisa dapat solusinya. Oh pilihannya ini, ini.

Kadang-kadang kan kita gak tahu harus mencari apa. Mencari kata kuncinya.

Nah kalau dia open dan dicoba kayaknya deh.

Kayak dari beberapa opsi yang paling atas, ya dicoba.

Kayak dicoba tapi kayak gak terus-terusan, jadi kayak cuma buat ngejudge, oh ini berhasil mecahin.

Kayak punya matrik-matrik kunci yang buat dijadikan patokan, terus oh decide.

Gak deh, gak ini, I'm a next.

Tapi dari apa artikelnya? Kayak open source project tertentu atau software tertentu, oh ini lagi dalam sedang rewrite.

Di mana dia baca ya kayak gitu-gitu ya?

Kalau powersync atau electric SQL kan emang di dokumentasinya di-nounce kok.

SQL ada announcementnya, emang pernah lihat. Ya waktu dia lagi ngulik. Di dokumentasi.

Waktu dia, ini, kelihatannya itu deh. Knowing beta.

Ya mungkin tanggal 11 kemarin atau kapan lah dia nulis, dia explore itu kan pasti sekian hari atau sekian minggu sebelum nulis artikel itu kan.

Mungkin waktu itu masih fail nih, masih fail.

Coba klik, coba klik.

Saya sekarang udah beta.

Deploy examplenya gagal.

Biasa.

Pakai eliksir loh.

Iya. Kan SuperBiz juga pakai eliksir kan ya.

Mana yang rewrite-rewrite itu ada gak? Penasaran? B-issue kali ya?

Ada sih pernah lihat. Maksudnya lupa dimana, cuma emang ada major rewrite di-elected SQL.

Kalau only mode, gak ada.

Gak kelihatan. Gak, gak terbaca sih. Iya, gitulah.

"Pertama kali kenal Localverse dari Anytype yang pakai anysing." Oh Anytype itu notes ya?

Anytype.

Oh dia Localverse juga, oh baru tau.

Ya, pernah denger, pengen coba tapi somehow gak jadi.

"Localverse everything app."

Coba tetap akhir ujung-ujungnya, tetap pakai Obsidian kalau gue.

Coba iseng pengen coba ini aja sih. Karena gue gak pernah butuh.

Obsidian itu Markdown-based ya?

Iya, plaintext biasa. Dan maksudnya performanya cepet sih, snappy banget.

Obsidian maksudnya gak ada yang ngalahin.

Iya. Cuman aplikasinya tidak open source.

Aplikasinya proprietary, trust not believe, block-based.

Itu malah seneng sama landing page-nya aja sih, kayak oh desainnya bisa bagus gini.

Ini namanya cloning-annya Notion, tapi yang offline first ya, versi Notion yang offline first ya.

Kurang lebih kayak gitu ya.

Oke, menarik, menarik.

"Get the app."

Aplikasinya ada apa aja?

Mac, ada platform? Linux, Windows?

Macam-macam kok.

Oh, belum ada mobile ya? Baru di desktop ya?

Ada, mobil juga ada.

Mana?

Dia ada di lingkungan itu, atau scroll ke bawah coba.

"Get the app" yang tadi?

Ada pokoknya.

Ada? Oh, baru tahu.

Gak tahu ya kalau beta atau forever kena nyoba soal. Nah, ini dia.

Oh, ada. Oh, ada di Google Play.

Oh, iya. Kok nggak di situ ya?

Gak tahu ya, masih beta atau apa-apa.

Karena nge-access-nya pakai buat desktop.

Oh, ditutup ya sama dia ya.

Ini ada Swift juga, berarti ada buat iOS.

Oh, udah lengkap ya.

Oh, menarik, dicoba nih.

Pindah lagi.

Gak selesai-selesai, nggak produktif-produktif.

Gak selesai-selesai.

Dari dulu pakenya bare doang, bare writer, udah nggak pernah...

Wah, kalau bare itu udah paling top.

Cuman masalahnya iOS only.

Apple only.

Sebagai pengguna HP Android.

Sebagai pengguna HP murahan.

Ya, murahan.

Tidak mampu untuk menjangkau-nya.

IPFS. Oh, si Anytype ini pakai IPFS ya?

IPFS itu Web3 bukan sih?

Gak tahu, belum ngulik sampai situ sih.

Kapan-kapan bahas alat testing?

Pernah nggak sih?

Testing pernah, tapi end-to-end dong.

Pernah tapi nggak mendalam banget.

Iya, belum bahas kayak apa, Papetir.

Papetir pernah ya.

Gak bisa, belum bulas.

Ya, Papetir pernah.

Yang Microsoft punya itu apa, Papetir?

Cypress.

Bukan, setelah Cypress, yang Microsoft.

Bukan Cypress, Microsoft.

Cypress dong.

Lupa namanya.

Bukan Cypress apaan, Playwright.

Playwright.

Cypress kan sebelum itu.

Boleh, boleh, boleh.

Terima kasih ya.

Eh, episode 12 belas, pernah lagi.

Pernah ya, episode 12 belas, 2023.

Tapi kan nggak mendalam kan?

Ya, nggak mendalam karena banyak yang dibahas.

Berarti mungkin besok-besok kita potong-potong

kalau misalnya unit testing doang, end-to-end doang.

Yang kayak biar di-deep dive.

Oh, kalau yang ini kayaknya kita mostly

banyakan bahas tentang, iyalah, semua ya?

Ya, genis-genis testing.

Kalo yang waktu itu kayak overall aja, kayak general.

Boleh tuh, jadi bagus.

Jadi bagus, dari Bali.

Terima kasih.

Kita dari Bali.

Efraim, Efraim, oke.

Kita masukkan ke wishlist ya.

Oke, cukup mungkin untuk malam ini.

Terima kasih banyak buat semuanya

yang sudah hadir dan meramaikan.

Kita ketemu lagi minggu depan

dengan topik yang berbeda.

Selamat malam.

Sampai jumpa, bye-bye.

Bye-bye.

Deskripsi asli dari YouTube

Yuk mari kita diskusi dan ngobrol ngalor-ngidul tentang dunia web. Agar tetap up-to-date dengan teknologi web terkini. Topik, tautan dan pertanyaan menarik bisa dilayangkan ke https://ksana.in/ngobrolinweb Kunjungi https://ngobrol.in untuk catatan, tautan dan informasi topik lainnya.

Episode Terkait

Bagikan:

Suka episode ini?

Episode baru setiap Selasa malam. Dengarkan lewat YouTube, Spotify, atau feed podcast favoritmu.

Pilih Cara Langganan

Memuat komentar dari GitHub Discussions...

Jika komentar tidak muncul karena ekstensi privasi / adblocker, kamu bisa berdiskusi langsung di GitHub Discussions .