Ngobrolin LocalFirst - Ngobrolin WEB
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.
Ringkasan Episode
Bantu KoreksiEpisode 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
0:16Halo, halo, halo. Selamat malam.
0:19Harusnya lagunya "Countdown" itu kita sambil joget-joget tau gak sih?
0:24Biar daripada orang nungguin cuma "Countdown" kita sambil joget-joget gitu.
0:28- Jangan dong. - Jangan mau nonton.
0:30- Kabur semua. - Nanti pada kabur.
0:33Kan podcast bergoyang gitu. Mungkin kita bisa ganti nafas.
0:39Nanti masuk TikTok. TikTok udah di-ban. Eh udah di-ban, gak jadi di-ban lagi sekarang ya.
0:44- Udah bisa di-access lagi. - Gimana sih?
0:47Bisa di-access lagi.
0:49- Kok boleh? - Gak tau. Itu ceritanya gimana.
0:52- Udah politik, politik negara. - Lobby-lobby lah itu.
0:56Politis sekali ya. Berjumpa lagi bersama kita bertiga.
1:01Kembali ke format 3 web-web. Ada Eka yang jago UI, CSS.
1:08Ada Ivan yang jago performance, dan ada saya Riza yang...
1:13- Jago apa? - Yang jago.
1:15Yang tidak jago-jago aman.
1:17Riza itu jago semuanya.
1:23- Apa itu namanya? Yang master of none itu? - Jack of all trades.
1:31Jack of all trades, master of none.
1:34None itu ini tau gak sih makanan di India itu? None.
1:38- Iya, iya. - Master of meal.
1:42- Master of meal. - Enggak. None itu kalau kita satu tambah satu, tapi satunya string.
1:49- Satu tambah. - Iya, seneng deh bangga.
1:53Bagus, bagus, bagus. Sudah mulai ini ya. Sudah mulai ini ya, jokes-nya sudah mulai masuknya.
2:02Sudah mulai menyesuaikan dengan jokes-nya JavaScript ya.
2:08Jadi malam hari ini adalah episode ke 114. Udah 114 ya.
2:15Karena kita hampir setiap minggu live, dan di episode ini kita akan membahas tentang sebuah paradigma, bukan paradigma.
2:29- Phenomena. - Phenomena yang namanya Lokal First.
2:35Tadi kita hampir membahas topik ini sebelum live. - Tadi kita sempat debat loh. - Ini bahasnya pas live, bukan di batik layar.
2:48- Jadi mungkin sedikit background dulu. Awalnya saya tahu tentang Lokal First ini dari sebuah aplikasi yang namanya Actual Budget.
Lihat transkrip lengkap
2:57Yang 2 minggu lalu ya, kalau gak salah kita sempat omongin ya, Actual Budget.
3:02Jadi Actual Budget ini kayak personal finance app lah ya, aplikasi finansial, aplikasi pengatur keuangan.
3:13Tapi dia formatnya web, aplikasi web, dan open source. Bisa di deploy sendiri, bisa dijalankan di localhost sendiri.
3:23Tapi dia tidak bergantung kepada server, jadi bisa dijalankan di local.
3:34Karena ini personal finance, gak ada kebutuhan untuk kolaborasi dan lain-lain, jadi datanya tidak di share, datanya berada di komputer kita.
3:46Saya tahu saya, makanya disini kan ada you own your data. Tapi juga bisa, tetap bisa syncing.
3:56Karena bisa aja aplikasinya bukan hanya diakses di desktop, tapi juga di mobile.
4:01Itu datanya gimana, datanya berada dimana, yang jadi master-nya yang mana, yang jadi replicate-nya yang mana, kita harus cari tahu lebih dalam sih.
4:15Itu awalnya saya tahu tentang istilah local first. Ternyata semakin kesini semakin berkembang dan definisinya juga bermacam-macam ya.
4:26Mungkin ada penjurusan. Kalau dari Ivan gimana?
4:32Awalnya kan ini kan kayak aplikasi yang dijalankan, yang semuanya dijalankan di device-nya masing-masing.
4:47Contohnya kayak local first, kalau di dunianya WordPress kita ada playground namanya.
4:53Saya coba contohin itu. Oke sebentar. Yes, copy.
5:05Oh ini yang pakai, yang pakai container itu bukan ya?
5:10Ya ini pakai Wasm, terus dia pakai SQL, pakai Wasm, pakai SQLite, untuk menjalankan proses PHP,
5:22web server di browser.
5:25Tapi ini bisa diakses secara offline.
5:29Kalau sudah selesai di load, sudah di download sama kayak actual budget kan, kalau sudah di load semua filenya bisa diakses di local.
5:43Atau maksudnya lebih tepatnya bisa diakses tanpa internetnya, itu maksudnya ya.
5:50Dan ketika kalau misalkan aplikasi kayak actual budget, ketika kita kembali konek ke internet, dia akan kembali syncing lagi gitu kan ya?
6:00Kalau ini, murmi hanya untuk playground saja.
6:07Cuma kalau di reload-reload, datanya tetap disimpan di SQLite yang ada di storage, jadi di browser.
6:16Jadi datanya bisa tetap di reload.
6:20Ngomong-ngomong kok berdiri di tengah.
6:22Lanjut, lanjut, lanjut.
6:26Nah ini kan seperti sebuah instalasi, sebuah WordPress, tetapi ada di browser.
6:35Ini sudah pernah kita cerita-cerita, waktu kita bahas Wasm.
6:41Nah ini juga termasuk local first.
6:44Nah, ada satu paradigma yang saya nonton sebuah seminernya, saya lupa, saya pernah bagikan di grupnya kita.
6:55Tapi saya lupa nama mbaknya itu siapa, nanti saya coba cari ya setelah saya sampaikan.
7:03Apa namanya, sebuah paradigma itu seperti ini.
7:09Local first itu bukan artinya hanya database atau storage saja yang ada di lokal.
7:20Jadi aplikasinya jalan di lokal, database ada di lokal, dan yang mana nggak cuma,
7:29maksudnya aplikasi itu nggak cuma, batasannya bukan cuma storage.
7:34Nah lebih tepatnya gitu, batasannya bukan cuma storage.
7:37Tetapi lokal itu artinya, lokal first itu artinya adalah aplikasi ini diperentukan untuk personal dan orang-orang di sekitarmu saja.
7:49Jadi bukan kalau Facebook atau Twitter kan bukan lokal first, dia udah sosial, lokal, dunia first, global first.
8:00Kalau kita bikin CMS, WordPress untuk dipublish itu bukan lokal first, itu public first gitu ya, internet first.
8:09Sedangkan kalau lokal first itu adalah aplikasi yang kita bangun hanya untuk di lokal kita sendiri.
8:16Contohnya pernah tau, siapa tau ada sini teman-teman yang suka bermain dulu mainan bikin aplikasi,
8:29aplikasi yang.. apa bahasanya kalau.. yang desktop, aplikasi desktop lah contohnya ya,
8:37yang hanya untuk dipakai di lokal, contohnya intranet, Microsoft Office yang.. DB apa itu database?
8:49Akses, nah itu lokal first. Bisa dikategorikan lokal first. Bisa di share nggak? Bisa.
8:58Bisa, bisa di share. Bisa, pakai network, tapi diperentukan waktu dibuat dia hanya untuk di lokal, untuk di komputer masing-masing.
9:08Kalau kita mau pakai aplikasinya kita kopi aja, aksesnya buka sendiri di komputer kita gitu kan ya?
9:14Betul, jadi di kopi ke flash disk, di insert tampak lain, jatahnya berbeda jadi pakai untuk di..
9:23Nah, tapi di akalin nanti suatu saat kalau dari dulu akses itu dibikin jadi storage.
9:32Jadi dua komputernya berbeda bisa akses database yang sama, bisa akses yang sama, ya.
9:37Jadi yang disampaikan si Mbak itu di.. nanti saya kasih link YouTube-nya ya.
9:45Maggie Appleton bukan? Maggie Appleton?
9:47Kayaknya sih ya, betul, betul, betul. Yang pernah saya share, Maggie Appleton, betul.
9:53Yang pernah share banyak.
9:56Iya banyak banget ya.
9:58Nah, jadi aplikasi yang dibangun untuk personal dan untuk orang-orang di sekitarnya.
10:13Oh iya, kayak ini juga termasuk kiosk, kayak informasi atau kita mau pesen tiket di sebuah..
10:21Misalkan, ya kalau bioskop sekarang kan udah ada komputernya kan, kalau misalkan ada kiosk gitu,
10:31mau ngambil nomor antrian, mau pesen tiket, itu termasuk lokal first kali ya?
10:38Kayak ini kali ya? Iya, iya. Kayak untuk antrian di rumah sakit, misalnya mau masuk ke polyklinik mana, pencer, atau bank, atau bank.
10:48Nomor antrian sekian.
10:50Ya, nomor antrian untuk customer service, untuk tailor, yang mana, gitu kan.
10:54Sedangkan nomor antrian itu kan, meski mumpahnya sama, nggak butuh synchronize ke cabang lain.
11:01Iya, betul.
11:03Itu lokal first yang sudut pandangnya, jadi nggak cuma storage.
11:11Oke, dan juga bukan lokal host ya, kita develop lokal host.
11:15Bukan lokal host.
11:17Bukan.
11:19Iya.
11:21Nah, mungkin pendapat Eka atau pendapat Mas Risa gimana?
11:26Nah, nggak, kalau gue sih nyorotinya, ini kan, apa ya, bukan spesifikasi teknis.
11:33E, lokal first itu kan, yaitu tadi bisa dibilang filosofi lah, paradigma lah.
11:38Jadi maksudnya, ya kalau Maggie Appleton misalnya, atau siapapun lah,
11:44mau, ya misalnya di conference talk, present, itu kan sebetulnya perspektif dia tentang lokal first.
11:52Jadi kan sebetulnya orang lain atau perusahaan lain atau organisasi lain bikin product
11:59yang nggak sepenuhnya ngikutin perspektifnya, apa, ngikutin definisi-definisinya si Maggie Appleton itu ya.
12:07Dan tetap menyebut itu lokal first kan sebenarnya sah-sah aja.
12:11Karena lagi-lagi kalau, kecuali kalau apa ya, kalau protokol kayak HTTP itu kan udah ditulis,
12:18ada teknis, apa, spesifikasi teknis, dan semua pihak terkait tuh harus setuju dulu kan,
12:24sama misalnya web API lah, atau apa, misalnya fetch itu behavior-nya gimana.
12:29Itu kan nggak bisa orang, ya dulu bisa ada yang bikin fetch ala-ala,
12:34tapi maksudnya teknologi-teknologi kayak gitu kan udah ada definisi,
12:38yang kalau kita mau menyebut sesuatu sebagai A, berarti itu harus begini-gini-gini.
12:43Kalau nggak memenuhi ini, berarti bukan A.
12:47Kalau lokal first kan nggak seseklek itu ya, kayak contoh aja tadi misalnya apa yang disebut,
12:53yang dipropos oleh Maggie Appleton itu sesuatu yang dibuat untuk lokal kita sendiri
13:01atau lingkungan sekitar kita sendiri, kayak contohnya kiosk atau mungkin IoT.
13:07Tapi misalnya yang salah satu, gue pribadi apa, pertama kali denger tentang istilah lokal first ini
13:16dari Linear. Linear itu aplikasi kita pernah bahas sekilas juga ya, 2 episode lalu,
13:23itu aplikasi semacam Jira lah untuk project management, tapi UI-heavy.
13:28Itu pakai React, UI-heavy ya standar lah, tau kan, kalau tiket bisa digeser,
13:34bisa ada kayak waterfall timeline-nya. - Ada tambahan board-nya atau apa gitu ya.
13:40- Itu yang saling nge-blocking ya, pokoknya emang UI-heavy banget, dan bisa dibayangin ya
13:47kalau aplikasi project management kemungkinan besar nggak dibikin oleh satu orang,
13:52nggak digunakan oleh satu orang, dan itu orang-orang yang menggunakan biasanya di lokasi yang berbeda-beda.
14:00Jadi tetap ada central database-nya, tapi yang sea linear ini mengedepankan banget
14:07tentang konsep offline first, mungkin ya itu salah satu pengbeda mereka dari Jira
14:14atau software project management lain ya, dan karena itu pakai React,
14:19jadi mereka sering ngasih talk kayak di, apalah, React, Helsinki, Meetup, blablabla,
14:25tentang gimana mereka menghandle. Nah, tapi tetap aja, karena balik lagi itu kan sebetulnya
14:31kayak project management konvensional lainnya, tetap ada central database-nya,
14:37tapi ada juga, jadi ada kesamaan dan ada perbedaan dari konsep-konsep
14:44yang tadi dijelasin Ivan, seperti yang di-propos oleh Maggie Appleton, kayak semua jalan di lokal,
14:50jadi misalnya nggak selalu internet mati, tapi mungkin internet nggak lancar atau apalah,
14:55jadi nggak bolak-balik ngasih, lebih enak aja, lebih snack, kita ngetik, ngetik isi tiket,
15:01geser sana-sini secara periodik di sync, ada sync engine-nya.
15:06Jadi maksudnya, tetap ada suatu kayak keunggulan dari filosofi local first itu,
15:13walaupun implementasinya, maksudnya kayak definisi untuk apanya, penggunaannya,
15:18nggak sakok-sakok banget dalam satu definisi yang sama kan sebenarnya itu agak, penampilannya agak berbeda,
15:25tapi ada keunggulan, kayak ada kesamaan-kesamaannya juga. Itu menarik sih.
15:32Kayaknya Git juga local first, Git itu kan dibangun local first,
15:41karena semua kopi, semua di local kita kan di .git. Betul. Datanya, ya itu yang mau saya highlight adalah
15:51benar tadi setuju dengan pernyataan Ivan yang menyatakan bahwa bukan aplikasi yang tidak membutuhkan internet,
16:01internet pasti dibutuhkan, tapi lebih ke yang tadi ya ada, yang penggunaannya ya kita sendiri atau orang-orang terdekat,
16:10kemudian kalau saya lebih menghighlight lebih ke data ownership-nya.
16:16Kemungkinan kalau kita menggunakan aplikasi yang local first, mungkin juga nggak.
16:21Kayak misalkan kayak tadi yang dicontohkan Eka linear itu data ownership-nya bukan di kita,
16:28tapi tetap bisa kita pakai pada saat internetnya, misalkan kita lagi di pesawat misalkan,
16:35kita mau pindahin aja kita harus nunggu internet gitu kan.
16:37Contohnya lagi misalkan kayak pencatatan kayak note taking, misalkan Notion dibandingkan dengan Obsidian.
16:46Notion butuh koneksi internet gitu kan. Kita mau edit-edit aja mungkin harus buka dulu kan,
16:53begitu kita buka harus dia loading dulu, dia synchronize datanya dulu baru kita bisa pakai walaupun misalkan offline bisa mungkin ya,
17:00tapi dalam waktu singkat gitu. Tapi kalau misalkan kayak Obsidian atau kayak Git tadi meskipun kita berada di apa nggak pakai koneksi sama sekali,
17:10ketika kita mau ubah baru kita push gitu kan. Obsidian juga sama, datanya ada di lokal kita,
17:15tapi kalau kita mau sync ya bisa gitu. Jadi lebih ke sana, lebih ke arah mungkin kalau ngomongin ya memang bukan hanya data,
17:24tapi kalau mau ngomongin data, datanya ada di lokal ada replikasinya juga di server.
17:30Kayak Git kan kita mau push berarti kita butuh server kan, butuh hosting ya GitHub atau Bitbucket dan lain-lain.
17:39Nah jadi kesamaannya itu ada faktor data, kita mengontrol data, ada faktor kayak UX kan, UX bahwa kita nggak bergantung pada koneksi internet
17:58dan 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.
18:10Iya, kalau jaman dulu Evernote ya, tapi Evernote juga datanya ada di servernya mereka kan ya, sama kayak Notion ya.
18:19Cuma Evernote itu kan nggak tahu dulu pakenya yang natif ya, nggak tahu kalau web appnya,
18:25kalau yang natif ya sebetulnya agak mirip Obsidian datanya kayak ada semacam tem di lokal,
18:33jadi kalau internet mati atau apa ya semua data kita di situ, di lokal.
18:40Jadi kembali lagi kayak PWA ya?
18:47Iya, awal bukanya tetap butuh internet tapi setelah itu mungkin tetap butuh untuk syncing kalau aplikasinya butuh synchronization ya.
18:58Jadi sebenarnya kuncinya itu ada di beberapa teknologi sebenarnya ya.
19:03Yang pertama kalau misalkan butuh database ya, butuh database yang bisa jalan di lokal.
19:08Ada local storage, ada remote storage, tapi remote storage-nya kan opsional kalau pake definisinya Maggie Appleton tadi.
19:18Betul, betul.
19:20Dan kalau di Bras, harus ada storage di lokal.
19:22Ada 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.
19:39Yang ada versi lokalnya, ada versi offline-nya, bukan on-line-nya.
19:43CausedDB. CausedDB itu pouchedDB.
19:52PouchedDB, kalau pouchedDB itu sebenarnya dia wrapper di atas IndexDB sebenarnya.
20:01Cuman dengan sintasnya causedDB aja.
20:04Memubahkan syncing kan, in case kita mousing.
20:08Ada apa, ada mekanisme bagaimana caranya untuk mengatasi conflict, conflict resolution.
20:14Istilah kerennya itu conflict free replicated data type, CRDT.
20:20CRDT.
20:22Jadi 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.
20:38Yang mana yang ada mekanismenya, yang terbaru kah, atau yang apa gitu, ada macem-macem ya.
20:46Nah itu sepertinya salah satu fitur yang apa ya, bisa dibilang inti ya dari local-verse.
20:55Walaupun kalau, lagi-lagi kalau ikut definisinya Mike Giappolten tadi, yang nggak harus bisa aja, nggak harus di sini, ke mana pun, ke remote.
21:02Tapi ya istilah rata-rata pada umumnya,
21:05kalau 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.
21:17Gak itu ke pusat kan, misalnya kita punya 100 cabang gitu, ya mungkin aja itu use case yang wajar banget.
21:25Suatu saat, walaupun nggak harus terus menerus nih, nggak harus terus-terusan kayak linear, ya tetap aja ada kalanya perlu di sync.
21:32Jadi kelihatannya sync teknologi untuk sync storage antara storage si lokal dan somewhere remote storage tuh kayaknya salah satu kuncian.
21:43Betul. Kayak obsidian aja, obsidian kita pakai di lokal kan.
21:48Tapi tetap butuh sync, syncnya juga ke handphone, ke device kita juga gitu.
21:54Kita pusing kan, gitu kan. - Kan servernya obsidian, ke device kita yang satunya kan harus lewat server dia, server remote.
22:02- Betul. Tapi untungnya karena dia pakai file system, kita bisa pakai kayak Google Drive, pakai Dropbox, atau pakai S3 gitu,
22:12kalau yang mau di cloud, atau macem-macem lah gitu. Dan CRDT-nya itu sudah dihandle sama aplikasi-aplikasi itu.
22:23- Layanan yang kita pakai. - Layanan yang kita pakai. Jadi dia cuma nebeng aja.
22:28- Nah, tapi kan obsidian juga premiumnya dia punya layanan cloud sendiri. - Ada sync, ya ada. Ada sync sendiri.
22:34- Yang, maksudnya salah satu yang dijual keunggulannya adalah ya itu kayak nge-mungkin handling, apa?
22:40Jadi di HP kita bisa pakai aplikasi obsidian juga, yang mana mungkin user kan lebih udah familiar, lebih enak pakenya,
22:48editan kita di HP misalnya, dengan editan kita di laptop, ya si obsidiannya yang punya aplikasi proprietary
22:58yang nge-handling resolusi konflik antara data-data yang di sync itu, ya itu berbayar.
23:04Maksudnya itu additional service kalau kita nggak mau pakai, kita mau nge-sync pakai Dropbox, atau bahkan pakai Git, atau pakai apapun.
23:12Bisa, tetap bisa karena file system. Nah, tadi udah lah database, kemudian ada CRDT,
23:21Config Free Replicated Data Types, terus kalau yang berdasarkan definisi Ivan tadi yang digunakan oleh kita dan orang-orang sekitar,
23:31berarti itu butuh protokol untuk koneksi peer-to-peer. Entah itu pakai WebRTC, atau WebSocket, atau ada satu database juga
23:45yang memang tujuannya untuk itu, dulu kayaknya sempat hype deh namanya GunJS, ada yang tau nggak?
23:51Gun, wepon-wepon GunJS. Gun, Gun itu kan JavaScript engine. Namanya hidup-hidup semua sih.
24:03Ya, bentar ya kita share. Ini decentralized database. Dulu ini lumayan red juga karena benar-benar bisa diakses
24:20di front-end dan bisa sync tanpa perlu server, dan kalau ada server, dia bisa sync. Jadi kayak cause DB dan post DB juga.
24:32- Lama-lama kita jadi web tree dong ya. - Ini kan dia udah nulis nih, distributed ad.
24:39Kayaknya dia peruntukannya kesana ya. We're going to build a peer-to-peer the app.
24:45Oh sekarang namanya gun.eco. Udah beda lagi namanya.
24:52Ya nggak, itu domain-nya doang. Masih active nggak sih? Masih active.
25:03Oh iya, coba kita lihat ya, udah berapa apa ini.
25:05Documetation GitHub. Masih active nggak ya? 2 bulan yang lalu. - Oh masih, tapi ritminya doang sih.
25:15Tapi ya lumayan lah, active. - Open-source cybersecurity protocol for syncing.
25:21- Ya hooknya sih 9 tahun, tapi ya nggak apa-apa. Kalau source-nya tahun lalu.
25:28- Tahun lalu. Oh udah nggak begitu ya berarti. Nggak terlalu active lah ya.
25:33- Tapi mungkin ya... - Puritasnya masih banyak, tapi nggak dimers.
25:39- Mungkin itu ini kali. Apa namanya, coba kalau diklik bisa jadi itu.
25:44Oh bukan, gue kira ini. Apa namanya yang dependable.
25:49- Oh dependable semua. - Gak ada nih.
25:53- Gak ada, nggak ada. Disini juga banyak.
26:00Oke, lanjut lanjut. Berarti itu tadi ya, jadi ada untuk koneksi peer-to-peer.
26:10Berarti bisa pakai ini juga dong. Ini nggak tahu ya ceritanya benar atau nggak kabarnya.
26:17Spotify itu menggunakan peer-to-peer seperti torrent.
26:22Jadi 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.
26:33- Itu kan jamannya dulu, sebelum Spotify, apa ya jamannya dulu? - Napster.
26:43- Napster itu kan? - Iya, modelnya kayak gitu. Cuman kan ini kan dibungkus biar nggak kelihatan seperti, biar nggak kelihatan illegal gitu.
26:53Nggak bisa di-download kan sebenarnya kan. File-nya ya kalau dicari mungkin bisa, tapi susah, sulit.
27:03Tapi kan sebenarnya kalau legal-illegal cuma perkara kayak hak-haknya darin aja kan, tapi teknologinya, teknisnya itu gimana ya?
27:13Teknisnya, kan torrent itu dipakai untuk share file-file ukuran besar kan, kayak distro, ores.
27:21Ukuran kecil juga bisa. Bisa-bisa jadi torrent server sekarang, mas Rizal sedot untuk file-file yang legal misalnya nggak masalah.
27:29- Itu nggak masalah, betul. - Cuma misalnya aplikasi torrent kan kita emang masukin, kita buka direktori lokal kita,
27:38itu emang di-upload kan, jadi internetnya harus kita nyalain juga kan, harus kita jual.
27:44Nah berarti Spotify itu kayak semacam dia bikin kayak temporary atau cache diri di lokal kita,
27:50itu tuh kalau misalnya kita idle atau nggak ngapa-ngapain, dia berarti ngirim terus kan, maksudnya sambil nge-upload kan.
27:57Ya nggak tahu coba siapa yang pakai Spotify. Coba teman-teman yang pakai Spotify, install Wireshark dulu.
28:06- Nanti gue coba sih. - Lihat traffic yang lewat.
28:11- Lihat di-slidikin aja, tapi K-Pop nanti coba. - Sekarang nggak tahu masih seperti itu
28:20atau dia udah pakai mekanisme lain, tapi dulu kabarnya seperti itu.
28:24- Yang saya tahu Youtube begitu. - Youtube begitu?
28:29- Tapi bukan Youtube-nya menyediakan, tetapi si provider internet, contohnya provider internet yang kayak..
28:38- Akamai? - Nggak, kayak indie, provider indie internet.
28:46- Piring-piring itu, islinya Piri itu dia taro sesuatu di server, di ISP, internet service provider.
28:56- ISP biasanya di daerah mana? - Oh biar cepat.
29:01- Youtube-nya di-cache sama dia pakai Switch. - Oh iya benar-benar, itu juga.
29:07- Itu lucu juga sih. - Ini konsepnya kayak CDN kali ya, tapi jadi lebih dekat gitu ya.
29:15- Iya jadi per-neighborhood gitu. - Iya per data center.
29:22- Ya kalau jaman saya dulu, jaman saya di kantor, saya suka pakai Squid.
29:30- Squid, pernah denger? - Nggak pernah, dengernya Squid Game.
29:36- Squid network proxy, eh salah saya yang percaya, squid cache itu jaman saya, jadi supaya saya mempercepat internet kantor dulu,
29:48saya pakai squid network proxy, jadi semua internet itu melewati squid proxy dulu di cache,
29:56jadi kalau ada yang Facebookan, ada yang Youtube-an segala macam.
30:00- Halaman Facebook-nya sama? Oh nggak? - Nggak, tapi aset-asetnya aja.
30:06- Aset-asetnya itu jadi jauh lebih cepat, karena CDN-nya di kantor lah ya.
30:11- Iya udah pernah di-download, iya iya iya. - Berarti itu omak first to be...
30:16- Iya dulu pakai juga di kantor sih. - Nggak tahu jaman-jaman masih memakainya yang ginian.
30:24Ini teknologi 20 tahun lalu ini. - Ini masih aktif nggak sih?
30:31- Nggak tahu. - Dia open source nggak?
30:34- Open source? - Open source kan ya?
30:37- GENU GPL tuh jelas tuh dia tulis tuh. - Mana itunya source-nya?
30:44- Iya source-nya mana? - Dia mana pakai github mas? - Iya kan ada kan?
30:54- Mak github itu dari tahun berapa sih? - Mereka pakai, nggak tahu pakai apa ya.
31:01- Maksudnya ada source-nya nggak kelihatan di share gaya?
31:09Coba lihat aja bugzilla database. - Bugzilla database.
31:17- Dia terakhir ininya kosong. - Udah nggak ada bugs.
31:24- Gak ada bugs bisa berarti... - Paling bawah tadi ada developer resource.
31:31- Bisa berarti nggak ada yang pakai. - Paling bawah itu support developer resources.
31:37- Ini selenius developer resource. - Tuh kiri-kiri atas.
31:42- Oke kodnya dimana tuh? - Repository github.
31:49- Oh github? - Dua hari yang lalu.
31:53- Masih dia maintain, masih aktif. - Dua hari yang lalu gile, mantap.
31:57- Amanko itu scriptnya 3 minggu lalu. - Tapi pakai macbook-nya M4.
32:04- M4 itu apa ya? - M4, nggak tahu apa itu.
32:11- Ada C++ ada C++. - Request, tapi nggak ada isu ya.
32:16Dia nggak nerima isu. Kalau mau langsung request aja.
32:20- Mereka isunya mungkin mailing list kali. - Iya mailing list.
32:24Versi 6 minggu yang lalu. Berarti masih banyak yang pakai.
32:31- Tuh dari tahun 1996 tuh. - Tapi copyrightnya nggak diganti sampe tahun 2023.
32:37- Nggak bisa dinamis ya gantinya? - Nggak bisa pake variable.
32:43Jadi 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
33:03jadi dia downloadnya ke kita aja, semakin populer musiknya semakin cepat ya di play gitu ya.
33:10Itu kan ada filmnya kan ya? Si Spotify itu ada ceritanya difilmkan antara fiksi atau non-fiksi gitu lah pokoknya.
33:22- Tapi berarti itu udah keluar dari paradigma lokal first juga ya? - Iya itu bukan lokal first.
33:29- Karena bergantung ke banyak spot yang seeding. - Itu bukan lokal first, tapi dia lebih ke...
33:34Gimana caranya musiknya nggak buffer gitu, dia menyelesaikan masalah itu.
33:41- Itu sebetulnya cuma take over kan dulu Napster, Kaza, bukan banyak musik cuman dulu semua kayak gitu.
33:48Cuma bedanya cuma sumber kontennya aja kan. Kalo dulu tuh jadi ilegal karena kan kita nge-share file mp3 yang kita punya.
33:58Karena secara hukum kan kita nggak authorize buat ngebagiin itu, ya maksudnya masuk ranah virus sih.
34:07Cuma kalau dalam kasus Spotify kan dari awal bisa punya file itu juga dari Spotify kan, yang mana Spotify udah punya dealing legalnya.
34:16Jadi Napster itu dianggap ilegal karena banyak yang share adalah file, banyak yang nge-share musik-musik yang bukan free royalty.
34:29- Iya, kalau dulu kita beda masukin folder kita sendiri. Napsternya cuma bikin teknologinya, tapi memfasilitasi kan.
34:39Yang waktu awal-awal misalnya diperhentukan kayak semuanya bebas membagikan musik yang mereka buat sebenarnya.
34:48Contohnya kayak indie, kayak DJ, indie kreator.
34:54- 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.
35:02Contohnya kalau dulu saya suka nonton film itu di Popcorn Desktop, pernah dengar? Popcorn Time.
35:10Popcorn Time itu juga salah satu pir-pir yang bisa langsung nonton.
35:17- Oh, itu toren bukan bass-nya? - Iya, toren bass.
35:22- Bass kan? - Sama. Kalau Napster kan music bass, kalau Popcorn Time dia movie bass.
35:32Dan itu aplikasinya masih ada di GitHub dan bebas-bebas aja.
35:38Ya tergantung kalau misalnya mau nontonnya yang film berbayar ditonton di situ bisa, asal tahu cara.
35:46- Mau yang royalty free juga bisa. - Yang royalty free juga bisa.
35:51- Oke. Nah, ini ada yang nggak kebayang bikin sing engine. Kalau bukan SBA plus Jason.
36:02- Itu tadi harus pakai CRDT. - Ya CRDT.
36:06- Nah, yang sulit itu kan, jadi balik ke local first lagi kayak misalnya kan harus ngecek,
36:13kayak div, berarti kan misalnya ada konflik, yang pertama kita cari kan perbedaannya, terus kayak timestampnya.
36:21- Salah. Sorry, sorry. - Lanjut, lanjut, lanjut.
36:27- Apa ya? Cuma definisi sing engine sendiri apa sih?
36:32- Nah, sebelum ke sing engine nih ada framework untuk CRDT. Salah satunya ada JS.
36:38- Saya pernah sampaikan ini kan ya. - Pernah ya?
36:42- Dulu. Pernah. Waktu saya lagi bangun bikin collaborative editing di WordPress.
36:47- Oh iya, collaborative editing ini cocok. Jadi pada saat user A lagi ngetik, user B juga ngetik di tempat yang berbeda,
36:58gimana cara resolusi supaya bisa jadi merge dua-duanya, nggak hilang datanya.
37:06Karena kan berada di lokasi dan mengedit hal yang berbeda, tapi masih satu dokumen.
37:14- Nah, itu div-nya pusing apa, ngecek difference-nya misalnya gini deh, ngedit string aja, ada kata saya,
37:22S-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,
37:31saya ditambahin ND jadi sayang. Nah, sedangkan user satunya nggak hapus itu, kan itu kayak dua action yang berbeda sama sekali,
37:42itu div-nya pusing ya, itu di handle sama framework-nya berarti.
37:47- Salah satunya ya. - Caranya kalau, saya lagi nyari videonya, kok nggak kelihatan sih kalau lagi begini.
37:55- Google Style Editing in Gutenberg, ini? - Kayak gitu, saya belum pernah publish ini.
38:06- Oh, demo-nya di sini. - Di Code Mirror bisa, kalau mau di test.
38:12- Secara teknis di belakang, itu dia lakukan seperti per-commit, jadi semua...
38:24semua text itu akan dijadikan vector, jadi graph, dan itu waktu ada perubahan di-commit dan perubahan itu
38:37akan digabung ke vector-vector itu, jadi bisa, misalnya kayak Eka tadi bilang ini S-A-Y-A,
38:46tambah N-G, tapi di tengah S-A, itu ditambahin satu, jadi S-A satu yang itu bisa, itu bisa di-merge kayak gitu.
38:54- Karena setiap ada perubahan, dianggap sebagai satu commit gitu ya? - Kayak ada snapshot,
39:00jadi kayaknya dia bikin snapshot kayak di Git gitu kan, setiap di tengah save file.
39:05- Ada, nanti di sini, di CRDT Implementation-nya itu dia ada dua paper yang dia terbikin bagaimana cara...
39:14- Pake paper. - Algoritm.
39:16- Iya, udah pake paper-nya. - Harus pake paper sih, karena ada algoritmanya,
39:20kan maksudnya ada logic-nya sendiri kan, itu tadi kan kita cuma...
39:24- Itu kalau mau, kita mau demo, mencet aja tuh demonya. Salah satu demonya mungkin,
39:31Prosmirror atau Codemirror atau Seradeh. Coba kasih link-nya ke temen-temen atau ke kita.
39:46- Ayo kita ketik sama-sama, oh ini ada orang lain muncul kan ya?
39:53- Iya, semua yang ketik disana. - Semua yang lagi nonton kita.
39:59- Selamat malam Mas Ricky. - Apus lah.
40:09- Nah, cursor itu juga nanti namanya Awareness. Jadi ada datanya ada dua nih di sini.
40:19Datanya ada data content sama data awareness. Awareness inilah yang membuat user.
40:27Jadi EKA user-nya yang mana, cursor-nya yang mana, itu yang akan mengirimkan datanya.
40:38- Ini local storage bukan? - Mungkin ada local storage-nya.
40:44- Nggak ada. - Ini ada 3 binder, ada binder-nya.
40:49- Ah Firebase, local storage DB. Waduh, waduh, waduh. - Itu pakai apa sih? Websocket?
40:59- Nggak ada, nggak ada. - Bisa jadi pakai Websocket.
41:03- Tapi cepet banget. - Dia bisa WebRTC juga.
41:12- Oh iya, Websocket. Ini mesejnya tuh. Tapi pakai binary dia, nggak bisa dibaca.
41:19- Wow. - Siapa sih yang bikin subscribe, guys, subscribe, guys, subscribe, guys?
41:25- Bukan gue. - Nggak tahu.
41:29- Oke, sudah, sudah, sudah. Lanjut, lanjut, lanjut pembahasannya.
41:40- Nah itu untuk ini tadi ya, kalau misalnya mau synchronize, bisa pakai Yjs.
41:49Pakainya nggak straightforward, harus kalian bikin binder-nya sendiri, binding-nya.
41:55Ada caranya API-nya ada, sudah lengkap bagus, dokumentasinya bagus.
42:06Tapi momenya itu nanti saat mulai memikirkan user-nya banyak, gimana, artist-nya gimana,
42:15synchronize apa, scaling-nya, scaling, scaling susah.
42:21Dan kadang dia ada nge-bug, kalau misalnya dia nggak bisa conflict, sudah terlalu ribet conflict resolution-nya,
42:29dia akan reset ke initial state. - Kok harus reset?
42:39- Dia udah bingung. Nah, udah. - Menarik.
42:47- Macau juga ya. - Ke initial state sebelum ini ya, sebelum session itu dimulai ya, maksudnya.
42:54- Ya, kalau mulai dari kosong, enggak. - Iya, maksudnya initial state, kan.
43:03- Initial waktu kita nggak initialize objek Yjs. - Aplikasi itu.
43:09- Iya, ibaratnya kosong, misalnya kita collaborative editing, kita udah nulis 3 paragraf,
43:14cuma maksudnya pada reset ngeditnya, berarti kan itu kayak kosong lagi kan, kalau skenario-nya gitu.
43:21- Bisa diakalin dengan autosave, kan bisa. - Oh, ada autosave-nya.
43:26- Kalau misalnya ada fallback-nya, ada masalah, dia reset, ambil lah yang dari local storage.
43:32- Ya, dan itu kita yang nge-handle sendiri, kan? - Iya.
43:36- Ada fitur autosave-nya, tapi untuk ngaktifkan input dan manage fitur kemana.
43:43- Iya, ini adalah contoh video yang lumayan bagus tentang Yjs, dia bikin aplikasi to-do,
43:53tapi bisa offline dan real-time pakai Phoenix Live View, Svelte dan Gjs.
43:59Siapa tahu ada yang mau lihat gimana kira penggunaannya.
44:04- Oh, ini nggak bisa dihilangin ya? Oh, gini ya. - Mau dong, gue mau belajar Phoenix,
44:10gue mau belajar Svelte. - Nah, ini di sini dia ada kasih lihat nih contohnya nih,
44:16to-do yang di kiri, yang di kanan itu bisa sync, kalau lagi offline gimana,
44:20terus kalau dia update lewat API, ininya berubah langsung gimana,
44:27jadi bisa kalau ada yang mau belajar Yjs juga bisa cek di video ini.
44:32- Oke. - Keren, keren. - Nah, selain selanjutnya, tadi kan conflict resolution-nya,
44:43terus juga ya ini tadi, apa namanya, sync engine jadinya, larinya ke sync engine,
44:48salah satunya ya Zero, ada Electric SQL, ada Power Sync, ada macem-macem.
44:56Dan itu udah termasuk conflict resolution nggak? - Nggak, conflict resolution itu beda.
45:02- Nggak ya? - Oh, nggak tahu, kalau Zero bisa conflict.
45:04- Beda sendiri? - Saya nggak tahu.
45:06- Kalau Zero nggak tahu, tapi kalau Power Sync sama Electric SQL, udah ada fitur itunya.
45:10- Iya, kalau nggak salah sih, mungkin beberapa ada, beberapa yang mungkin nggak ada gitu ya,
45:18harus di cek juga. Ini Power Sync, dia database-nya, kayaknya selama SQL aman ya database-nya,
45:27ini ada gambar apa nih, monggo dibi, ada ikan paus apa nih, oh pausnya dia ada,
45:32MySQL ya, MySQL. Berarti database yang umum digunakan, tapi dia menggunakan SQLite
45:38sebagai embedded database-nya di lokal, iya. - Jadi dia agnostik, apa teknologi agnostik lah
45:46ibaratnya di lokalnya, kita mau bikin pakai set-up yang umum lah,
45:52yang penting bisa nulis ke SQLite. Dan kalau Power Sync itu, sempat lihat-lihat sih,
46:00senang karena dokumentasinya bagus aja, kayak relatif, mudah dimengerti, web dev,
46:07terutama yang front-end ya, yang nggak biasa begini-gini, itu kalau harus bikin,
46:12harus pakai itu kelihatannya bakal relatif, mudah lah, banyak SDK-nya, wrapper-nya juga.
46:20- Power Sync, belum pernah dengar ya ini? - Iya.
46:26- Iya, tadi dia pakai yang tadi tuduh tadi? - Bukan.
46:35- Beda lagi. - Cuma dia branding-nya adalah sync engine untuk lokal first dan offline first.
46:43Nah, perkara implementasi detail-nya gimana kan bukan urusan dia apanya dia ngurus data storage
46:49antara di client, di device, sama di remote. - Oke.
46:56- Ada lagi namanya electric SQL. Di electric SQL ini, sebenarnya di Postgre kan ya?
47:05- Entah, itu yang mana tuh? - Ada lagi. Sekarang banyak lagi nge-trend.
47:12- Nge-trend, ya. Jadi sync subset of your Postgre data into local apps and services.
47:21- Terus abis itu dia bikin project namanya PG Lite yang bisa jalan di browser dengan Wasm.
47:30- Nah, jadi ini gimmick-nya adalah syncing, jadi ya itu tadi tagline-nya jadi kayak cuma,
47:41nah ini pernah lihat, kayaknya lihat YouTube tentang ini atau apa, cuma pas itu karena buru-buru nggak paham,
47:47serius, cuma kayaknya yang gue tangkap sekilas adalah yang nge-diff itu nge-check perbedaannya apa,
47:52terus ya mungkin dia punya settingan conflict resolution, macem-macem.
47:56Ya pokoknya dia meng-update sisanya apa yang berubah, apa yang berbeda aja.
48:02Tetep nggak ngerti sih, tetep belum ngerti karena belum nyoba beneran.
48:07Ya itu, dan lagi-lagi gimmick-nya adalah dia kayak environment agnostik, ya itu kayak bisa di lokal,
48:14bisa di, apalah serverless, bisa di server biasa.
48:19Gimana? Kayak tadi lagi bisa nge-tick royokan.
48:24- Bukan nge-tick, ini gambar nih kayaknya. Loh, gimana gambarnya?
48:28- Belum muncul, belum loading. - Oh, belum loading ya? Belum loading.
48:34Reload. Loh, lo pake VT. - Gak bisa.
48:40- Gak bisa. Eh, ada plus. - Gak bisa.
48:45- Error apa? - Udah muncul color picker.
48:49Error itu buka console. - Error ya.
48:52- Pit request, tadi bikin demo, error. - Error.
48:57- Itu ada notes tuh, pake YJS juga. - Notes.
49:01- Nah menariknya, Sunking C Linear itu udah linear app itu udah dianggap sebagai apa, kayak pelopor lah,
49:10yang paling beken dalam gimmick local first. Itu kan tadi demonya ada clone-nya linear.
49:15- Gak bisa juga. Oh, ada clone-nya linear. Gak bisa juga.
49:20Gak complete. Kayaknya CDN-nya atau apa, error gitu ya. Ya gitu lah, electric SQL.
49:26- Linear light. Tapi intinya punya, apa konsepnya? - Makin banyak ya.
49:33- Sinking. - Oh, ini ya.
49:35- Maksudnya, ininya tools-tools untuk mendukung kita untuk membangun local first app itu
49:44makin banyak yang bisa dipakai. - Iya.
49:47- Trend-nya mungkin keadaan sana kali ya. - Iya, nah itu keliatannya.
49:52- Dan terakhir, ada Zero. - Iya.
49:59- Zero ini, kalau gak salah, bisa pakai Prisma ya, kalau gak salah ya.
50:05Kalau gak salah. Ada ininya. Jadi dari database SQL bisa di-convert ke Zero SQL namanya.
50:15- ZQL. - Nah ini dia.
50:22Jadi aplikasi web kita di sini, ada klien-nya, dia connect pakai Websocket, ada kids-nya,
50:27kemudian ada replikasi, baik itu ke Postgre atau MySQL.
50:31Nah, koneksinya itu apa, perintah-perintahnya itu menggunakan ZQL.
50:36Jadi, tapi ada projek yang bisa mengubah atau migrasi data dari ORM seperti Prisma
50:49atau Drizzle ke ZQL. - Dunia lagi berbalik ya.
50:56Dari yang Microsoft Access, jadi SQL Server, sekarang balik lagi ke MySQL Access.
51:04- Tapi bisa single-nice. - Dari yang lokal-only,
51:11yang gak ada koneksi internet kemana-mana, terus langsung global semuanya terpusat,
51:18client-server, terus balik lagi lokal, terus bisa terpusat juga, bisa dua-duanya hybrid ya.
51:27- Nadi show notes tuh gue nulis gitu kan, kalau dulu, dulu banget kan paradigma-nya adalah kalau aplikasi native,
51:34ya kayak apa lah, gak usah Microsoft Access atau apa yang terlalu sulit, Microsoft Word lah,
51:39yang semua orang punya kan dulu, walaupun bajakan, Microsoft Word, Notepad, itu semua kan by default pasti offline first,
51:47karena ya apa, home user belum tentu punya internet juga, intranet paling ya kayak ada di kampus atau di manapun.
51:56Terus sekian tahun kemudian, web, kalau aplikasi web, web app by default pasti online only kan,
52:05online only, karena untuk kebuka harus dari web browser.
52:08Nah itu kan dulu kayaknya terpisah kayak gitu, cuma lama-lama ya aplikasi native juga kan semua service-nya
52:16harus connect ke online, kayak sekarang Adobe kan makin banyak, kayak Adobe Photoshop atau apa, makin online based kan.
52:24Nah, sekarang tuh baik aplikasi web atau native semua online, kayak bergantung banget sama online,
52:33tapi ternyata buktinya apa, dua tahunan ini makin, makin gencar paradigma offline first, berarti kan dua-duanya ini bakal,
52:43bisa aja bakal mengarah ke offline first. Trend itu berarti...
52:47Online itu, trendnya itu berarti ada hubungannya sama perkembangan SaaS, software access service kan,
52:54jadi semuanya terpusat kan. Kalau ada update kita nggak perlu, ya cloud,
52:59kalau ada update kita nggak perlu ngirimin CD atau flash disk untuk update di lokal gitu kan, jadi udah langsung gitu.
53:06- Nggak harus mimpah file-nya. - Iya, malah perusahaan-perusahaan kayak yang tadinya offline,
53:12kayak Photoshop, Adobe lah ya Adobe, terus apa lagi, Microsoft dan lain-lain itu juga sekarang udah ke arah sana kan,
53:20jadi kalau ada update, ada dan access-nya juga bisa dari web gitu ya.
53:25Nah, ini yang menarik juga si Zero ini dia bikin aplikasi contoh, tapi beneran dipakai namanya Bugs Zero.
53:40- Bugs Zero, jadi buat pendekatan bugs. - Zero bugs, zero bugs, zero bugs.
53:44Oh, zero bugs, balik ya. Iya, zero bugs. Ini bisa offline nggak ya?
53:49- Bugs Bunny. - Ini bisa di... Oh, di klik doang.
53:55- Tapi kalau aja... - Coba klik kanan.
53:58- Ini kayaknya Inspire Bilinear juga deh. - Kayaknya.
54:02- Ke kanan, Inspect, Network, Offline. - Offline.
54:11- Oke, let's see. - Tadah!
54:15- Di Reload. - Di Reload nggak bisa.
54:18- Reload? Nggak lah. - Nggak bisa.
54:21- Nggak bisa. - Ya, berarti belum.
54:23Nggak lah, jadi begitu di sini baru dia datanya disimpan semua kan.
54:28Jadi kalau misalkan mau ngedit-ngedit, misalkan kalau mau... Oh, harus login. Ini beneran udah, Tia?
54:34- Iya. Coba klik. - Bug beneran.
54:37- Bugs beneran. - Bugs beneran.
54:40- Bisa. Yang paling bawah deh ya. Yang paling bawah ya. - Yang paling bawah ya.
54:44- Cepet banget ya. Dan offline. - Snappy.
54:48Snappy. Filter, filter. Filter by?
54:53- Riza. - Oh, nggak keluarnya.
54:56- Status. Status. - Ini nggak keluarnya. Status.
55:00Filter by status. Label.
55:04Tuh.
55:07Oke. Websocket.
55:11- Jaman dulu jQuery UI juga. - UI.
55:16- Bisa begini. - Bakal download semua datanya.
55:19- Terus baru diproses. - Tapi lambat.
55:24- Dropbox. Dropbox. Apa? Dropdown. JQuery dropdown itu apa namanya? - Dropdown.
55:27Select to. Select to. Select to.
55:32Label bugs. Modified. Oh, ini udah bisa kita ini ya.
55:37Close. Yang all.
55:42- Keren ya. - Coba kasih, itu kasih emoji. Emoji.
55:46- Emoji? - Ini tuh ada...
55:48Apa response? Oh, nggak bisa lah login.
55:54Kalau pacar login?
55:56- Ya login. - Kalau pacar login.
55:58- Nggak, bakal... - Oh, pakai GitHub.
56:02Ya, pakai GitHub.
56:05- Pakai OAuth terus. - Tuh, udah ada pasiki tuh GitHub tuh.
56:09Lah, emang udah. Udah 2 tahun.
56:14- Yang pertama. - Zero salah satu yang ini ya.
56:18Ayo 2025. Local only app di era scraping AI.
56:25- Jadi masih ke lisensi lagi. - Nanti bakal banyak yang bikin keygen lagi.
56:31- Keygen. - Masukin keygen.
56:35Kayak bajakan. Kayak software bajakan 10 tahun lalu.
56:39Mungkin lebih ke arah aplikasinya tetap bisa di update over the air.
56:45Tapi datanya bisa di ases lokal. Mungkin gitu ya.
56:49- Kalau sekarang ya. - Iya.
56:53Jadi kayak itu tadi kembali lagi ke personal finance yang tadi. Apa namanya?
56:59- Actual. - Actual budget.
57:03Data adalah milik kita sendiri.
57:07Ya, you own your data.
57:12- Sampai sama seperti... - Kayak kembali jamannya di microsoft access.
57:16Di desktop masing-masing. Udah.
57:20Nah enggak, cuma kalau implementasinya, kalau aplikasi modern kayak gini,
57:25Berarti kan sebenarnya kasarnya kita, ya data punya kita, oke data kita yang control.
57:30Kita ngehosting data kita kan, terserah dimana.
57:33Sebenarnya suka-suka kita, tapi kita ngehosting data kita somewhere kan.
57:38Ya, ya, ya.
57:41Sebenarnya ya tadi data ownership itu.
57:45Makanya si Obsidian juga dia bilang datanya itu milik kita.
57:49- Kalau misalkan kita nulis... - Software-nya proprietary.
57:52Tapi konten file-nya suka-suka kita.
57:55Mau beneran literally di Macbook kita misalnya.
57:58Atau mau kita sync ke iCloud service-nya Macbook bawaan.
58:02Kalau kita pakai Linux ya nggak, nggak di sync ke mana-mana bisa aja.
58:06Atau misalnya kita mau pakai Dropbox atau Google Drive atau GitHub.
58:11Atau layanan Git apapun, kontrolnya ada di kita.
58:16Ya, itu untuk menghindari juga, apa namanya, vendor login.
58:23Jadi kalau misalkan kita mau migrasi, ya udah file markdown aja gitu.
58:28Ya, silahkan pindah ke aplikasi lain gitu.
58:32Kalau misalkan kita mau pindah dari Notion kan harus export-import dulu kan ya.
58:37- Dan belum juga compatible kan. - Yang mana format JSON-nya ya kurang user-friendly.
58:43Berbeda. Apalagi kalau mau import dari misalkan kayak Evernote gitu.
58:48Itu lebih sulit lagi kan.
58:51Jadi semuanya itu kan dia database-nya ada di mereka gitu.
58:55Jadi yang kita bergantung kepada mereka.
58:58Kalau seandainya sebuah notes, aplikasi notes yang kita pakai
59:03terus tiba-tiba mereka berhenti, service-nya berhenti, ya kita pindahnya juga bingung kan.
59:10Kalau ini, kalau pun berhenti misalkan nggak dikembangin lagi kita mau pindah ke tempat yang lain.
59:15Atau ke aplikasi yang lain ya udah pindah aja, datanya punya kita kok.
59:20Aplikasi apapun yang bisa ngedit plaintext.
59:25Apakah diskusi ini tentang offline first app juga seperti MongoDB, Realm Sync?
59:31- Kita baru tahu nih. - Iya, cuma kita belum tahu Realm Sync.
59:37Belum sampai ke MongoDB.
59:39Tapi ya tadi yang sejenis tapi pakai SQL, ada kan tadi udah dibahas.
59:44Mungkin ya sambil di-search aja, MongoDB, Realm Sync.
59:50Kok nggak ada di mongodb.com-nya?
59:56- Iya, kita tadi untuk jawab, Mas Yuda, kita bahas local first application. - Local first application.
1:00:06- Bukan offline. - Bisa lah, kan terkait juga.
1:00:10MongoDB, Realm Sync, is a feature that allow developer to build application that sync data seamlessly.
1:00:17Masih ada kesamanya kan, walaupun pakai terminologinya.
1:00:21Mau tahu info-nya gimana ya, official, ini Android, Realm SDK.
1:00:30Oh iya, eh 404, product, Atlas. Atlas itu cloud-nya kan ya.
1:00:42Realm tadi, di-search aja gimana? Apa maksudnya search?
1:00:48- Realm. - Realm Sync.
1:00:52Search apa as AI? Udah nggak ada.
1:01:00- Mana banyak? - Ayo.
1:01:02- Ayo. - Bentar, bentar, bentar. Tadi artikelnya, artikel tahun berapa nih?
1:01:06- Ada, ada. - 2021.
1:01:08- Iya. - Ya.
1:01:10- Maksudnya sudah ada gitu, MongoDB, Realm tuh.
1:01:16- Iya, udah nggak ada. Tuh, ke Atlas dia, device SDK jatohnya.
1:01:21- Oh. - Ini ya, tadi kan saya klik yang gini nih,
1:01:26docs.mongodb.com/realm, larinya ke sini, ke SDK.
1:01:31- Mungkin. - Apakah sudah ganti nama?
1:01:35- Eh tuh, kiri-kiri, Realm Studio, Realm Query Language, toah bawa, iya.
1:01:41- Ini. Ini maksudnya Realm. - Iya, device sync.
1:01:45- Iya. - Gak tahu.
1:01:46- Itu view data with device sync. - Tapi ada tulisannya device sync.
1:01:49- Iya, tadi ada device sync. Yang ini kan? - Memang salah satu fiturnya.
1:01:53- Iya. - Kayaknya udah di-combine ke,
1:01:57di-combine ke fitur lain kali ya? - Mungkin.
1:02:01- Deprecated. - Deprecated.
1:02:03- Oh. - Berarti yang tadi. Realm Studio.
1:02:08Realm Studio is visual tool, bukan.
1:02:13Also using device sync. RxDB Creator. Oh iya, RxDB juga ada.
1:02:23RxDB juga salah satu library untuk membuat offline first,
1:02:29bukan offline first, local first. Realm.
1:02:34Kok udah gak ada ya, berarti ya? Deprecation.
1:02:37- Itu dijelasin di komen. - Udah gak ada, senjata.
1:02:41RxDB. Oh, expired. Ada penggantinya gak? Gak ada ya.
1:02:46Realm library language. Oke, berarti gak ada yang pakai kali ini.
1:02:51- SDK. - Iya, iya, iya.
1:02:55Ada gak engine sync eskelat dari Wasm? Jadi gak perlu docker buat install engine sync.
1:03:02Cuman butuh file Wasm, eskelat, dan aplikasi kita saja lebih kompet, gak perlu entitas luar lain.
1:03:08Ada. Contohnya yang tadi, actual budget mereka pakai SQLite,
1:03:12kalau gak salah, eskelat yang Wasm. Makanya orang yang bikin, siapa namanya,
1:03:18yang pertama kali dia bikin. Sekarang kan udah banyak nih.
1:03:21Ini, si James Long ini juga bikin library untuk akses SQL dari Wasm.
1:03:32Jadi bisa dilihat saja di sini. Upset SCL.
1:03:42Ini awal banget. Awal banget sebelum Wasm, eskelat bisa jalan di Wasm.
1:03:49Kalau sekarang kan udah banyak yang bikin ya. Kalau ini dia awal-awal banget tuh.
1:03:53Itu 4 tahun yang lalu. - Palsdb-kalsdb masih ada yang pakai gak ya? - Masih, masih aktif kok.
1:04:03- Masih ya? - Masih, masih aktif.
1:04:05Masih? Kan kita pernah buka waktu bahas apa ya? Waktu itu udah lama.
1:04:11Bahas database. Oh, emang bahas database.
1:04:17- Ini palsdb. - Emang maksudnya apa? Mineroversen-nya juga naik terus?
1:04:25Naik terus, ya. Ini sebenarnya adalah ini, apa namanya?
1:04:31Rapper ya, di atasnya database yang di browser indexdb atau localstress atau apa gitu.
1:04:44Bukan API-nya menyurupai kalsdb.
1:04:48Biar streamline ya, antara local sama remote tuh enak.
1:04:55Ini open source ya. Kalsdb juga open source ya?
1:04:59Ya, udah dibeli apa aja sekarang? Apa aja?
1:05:03- Kalsdb. Apa aja? - Ya, lagunya sih Rose. Apa aja? Apa aja?
1:05:13Nah, inilah fungsinya font effect.
1:05:17Mana? Issue tracker pull request.
1:05:21Masih ya? Aman ya? Aman ya? 4 hari yang lalu? Aman?
1:05:26- Masih kok. - Kalsdb...
1:05:28Emang maksudnya kayak gini kan emang gak cepet-cepet banget.
1:05:31Masih apa? Cycle update-nya gak ekstrim release terus kan.
1:05:37Cuma masih tetap aktif di-maintain.
1:05:40Kalsdb salah satu database NoSQL yang cukup layak dicoba sih. Keren-keren.
1:05:48Kalau gak salah dulu juga ada tuh Meteor.
1:05:52Dia pakai MongoDB di back-end-nya.
1:05:56Di front-end-nya kita dikasih library namanya Minimongo.
1:06:00Syntaxnya mirip MongoDB tapi dia indexdb juga.
1:06:05- Masih ada? Di-open gak ya? - Meteor.js masih hidup.
1:06:10- Masih? - Masih.
1:06:13- Ini bukan? Oh bukan. - Client-side in memory MongoDB.
1:06:19Tapi bukan ini. Dia ternyata gak di-open kayaknya ya.
1:06:26- Itu Meteor Minimongo Explorer. - Iya. Ada.
1:06:34Jadi dia cuma bikin supaya streamline.
1:06:38Jadi antara back-end sama front-end-nya, syntaxnya tetap sama.
1:06:42- Tapi sebenarnya di belakang itu... - Indexdb?
1:06:47- Indexdb juga ya? Rapper aja. - Iya.
1:06:50Cuma ada CRDT, ada replicate, ada mekanisme seperti itu
1:06:56yang membuat kalau misalkan ada konflik, dia akan coba di-resolve.
1:07:02Cuma mau bring up aja, meskipun katanya sudah ada CRDT,
1:07:08conflict free, resolution data type, bukan berarti semuanya magically.
1:07:16- Pasti di-complete. - Iya.
1:07:18Kalau sudah di-production, banyak kenanya itu dari YGS.
1:07:23Maksudnya tetap ada gitu masalahnya, jadi tetap butuh penahanan.
1:07:28Itu nggak magic.
1:07:33Ya, berarti kita mikirnya kayak git aja sih.
1:07:36Maksudnya git, conflict resolution itu kan kita dibantu dengan...
1:07:41kita dikasih list apa saja yang conflict.
1:07:46- Dia nggak peduli. - Caranya jelasinnya gimana.
1:07:48Git, kalau konflik dia dari konsep awal berpikirnya,
1:07:57kalau ada konflik, dia tidak menyelesaikan itu.
1:08:00Tapi kan dia marking kita yang bikin ngambil keputusan,
1:08:04mau accept yang incoming atau mau pakai yang present.
1:08:08Maksudnya kan kita udah punya mindset kayak gitu.
1:08:11Nah, kalau gitu tadi berarti dia supposedly nge-solve,
1:08:15tapi belum tentu semua kesolve.
1:08:17Bisa nggak sengaja malah memecahkan masalah dengan masalah berarti.
1:08:21Logsek juga gitu dia kayak git, jadi kalau misalkan ada konflik,
1:08:26dia akan kasih tau mau pakai yang versi ini atau pakai yang versi ini,
1:08:29tapi nggak bisa di-combine dua-duanya, pilih salah satu.
1:08:32Jadi itu mungkin masih yang sederhana ya, conflict resolutionnya masih sederhana.
1:08:37Mau pilih punya yang sebelumnya atau yang terbaru atau gimana gitu.
1:08:42Itu jaman saya pakai FTP dulu, Mas.
1:08:46Kalau ada both modified, pilih mana?
1:08:50-Override, yes. -Cancel dulu, terus di-zip ya, di-backup.
1:09:00Terus abis itu begitu salah, ya mana tadi ya zip-nya.
1:09:07-Atau langsung di-copy file-nya di server, copy new, new, new, new, new 2x, new 3.
1:09:17-Di kanan duplicate gitu dia langsung new, ada tulisan new-nya.
1:09:24Jadi kayaknya 2025 semakin banyak yang mengarah ke arah Localverse ini.
1:09:34-Saya bahkan mau fokuskan tahun ini mau belajar Localverse.
1:09:42-Ini ada komunitasnya namanya Localverse. -Ada meet-up-nya juga.
1:09:50-Ada meet-up-nya. Yang lucu ini ada tadi saya sempat baca satu artikel.
1:09:57Mana dia artikelnya, ada nggak artikelnya?
1:10:00-Ini lucu banget sih kategorisasinya ada learn, build, join in.
1:10:05Ada dia, ah ini dia. -Accidentally started community.
1:10:15-Static web page and accidentally started community.
1:10:20Jadi dia bikin static web aja, terus tiba-tiba jadi komunitas.
1:10:25Nah disini juga sebenarnya kita bisa belajar banyak ya dari YouTube-nya ada termasuk yang tadi.
1:10:30Terus juga misalkan mau tahu, ya ini belajar, ni learn, ada yang bisa dibaca,
1:10:39ada yang bisa di tonton. -And to end, it's important to end.
1:10:42-Iya, mau benchmark CRDT-nya juga bisa, ada podcast-nya.
1:10:51Terus kalau mau bikin tuh ada pilihannya kalau mau storing datanya dimana.
1:10:56Tadi ya, electric, atau pakai Goon, atau pakai apa lagi tadi?
1:11:02Pause DB, rammer storage, ada, kok ini GitHub ya?
1:11:10Watermelon DB. Terus kalau mau sync datanya bisa pakai Amplify Data Store,
1:11:21bisa pakai AutoMerge, tadi juga ada Ditto, ya Mas Yuda ya.
1:11:26Ada Ditto, ada YGS. -Mas Ditto ya?
1:11:32-Bukan, Mas Yuda. -Ditto nama software-nya.
1:11:39-Nama software-nya. Ada Porsing tadi kita udah liat juga, ada RepliKage, ada YGS.
1:11:45Ada macam-macam ya. Ada contohnya juga.
1:11:50Terus kalau mau join komunitas bisa dimana, Lovie, Discord.
1:11:56Ada aplikasi. -Lovie ya?
1:12:01-Lovie ya, Lovie. Nggak, Lovie, karena First.
1:12:06-Lovie. -Lovie.
1:12:10-Oh, yang apa, ada kalau temen-temen punya aplikasi yang sudara,
1:12:15local first bisa pull request, bisa di sini ya. -Dan open source, Excalibro masuk ya.
1:12:20-Excalibro masuk, aktual. Terus apa lagi nih? Ada yang kita tahu nggak? Tender.
1:12:27Legend. -Cuma kenal Excalibro 2.
1:12:32-Iya, Excalibro. Berarti Excalibro bisa offline walaupun fitur
1:12:37pelaburasi ini juga nggak bisa ya. Oke, ada lagi yang mau dibahas?
1:12:46-Apa ya? Ini artikel. -Artikel?
1:12:51-Cuma dia pake istilah offline first, yang atas, yang offline first landscape.
1:12:56-Landscape, oke. -Ya kayak recap yang bagus saja sih.
1:13:01Kalau pengen TLDR-nya. Barusan banget baca ini.
1:13:12-WatermelonDB, oh tadi ada ya WatermelonDB ya.
1:13:19-Betabit agnostik. PowerSync. -Belum di-share, Mas Tiza.
1:13:31-Oh iya, sorry. -Oh iya, belum.
1:13:34-Maaf, maaf. -Jadi ini konteksnya adalah mereka mau bikin suatu
1:13:38aplikasi. Ya, pokoknya ada requirement-nya, blablabla, namanya Marco.
1:13:44Pokoknya sih nggak penting, cuma maksudnya keputusannya dia decision making.
1:13:49-Jadi kayak ini ya, jadi kayak Thunderbolt, jadi kayak email client ya,
1:13:54local first itu ya. -Oh iya benar juga.
1:13:58-Kaya IMap, IMap-based. -Oh iya benar, benar, benar.
1:14:03-Iya, iya, iya. Itu juga aplikasi untuk baca email kan dia local first kan ya.
1:14:11-Iya, kita bisa baca, kita nge-click reply, kita nge-tick dulu, tapi nanti kalau misalnya
1:14:15mau nge-fetch, mau manggil email baru dan kita mau ngirim baru.
1:14:20-Iya benar, benar, benar. Bahkan kita sudah selesai nge-tick send,
1:14:25meskipun nggak ada internet, dia tetap akan masuk di outbox, outgo.
1:14:29Nanti kalau udah synchronize ke internet, dia baru kekirim.
1:14:34-Iya, nggak kepikiran ya, ternyata sudah lama sih, emang dari awal local only ya.
1:14:43-Cuma kita kan sekarang nggak mikirnya sampai situ, kita nggak mikir ke mindset
1:14:47sesuatu yang udah familiar dan udah lama banget.
1:14:51-Iya, apalagi kan kita mikirnya kan ini, aplikasinya aplikasi web biasanya,
1:14:55umumnya, nggak mesti tapi umumnya. Tapi kan ini juga tidak terbatas ke
1:15:01aplikasi web aja kan, aplikasi CLI misalkan, kayak terminal,
1:15:05aplikasi terminal, bisa aja kan? -Bisa, ya git itu.
1:15:10-Iya git tadi ya, benar, benar. Terus ini starting pointnya database-nya
1:15:16Watermelon, alasannya karena open source, database agnostik dan sudah lama.
1:15:25Terus untuk syncing-nya pakai PowerSync. -PowerSync.
1:15:31-Oh PowerSync itu cell-hosted ya? Oh bisa bayar juga ya, ada cloud-nya ya.
1:15:37Very complex architecture, both changes to post-greed and separated
1:15:43ha-apah, ha-proxy ya, MongoDB, deployment cluster, oh pakai MongoDB.
1:15:50Terus electric SQL, look interesting but was in the middle of the complete rewrite.
1:15:58-Oh jadi elektric SQL-nya. -Iya dia percimbangkan tiga itu,
1:16:05pertimbangannya apa aja. Tapi kan berarti tiga-tiganya bisa dipakai
1:16:09buat offline first. -Terus dia akhirnya milih Watermelon.
1:16:14-Oh menarik. -Kapan ini blog-nya?
1:16:20-Barusan Januari 2020. -Januari? Seminggu sepuluh hari yang lalu.
1:16:26-Oke. -Oh kok jadi menarik ya si Watermelon.
1:16:34-Terus maksudnya dia ngasih gambaran tentang landscape-nya yang lebih luas sih setel-nya ini.
1:16:44-Apa nih? We discovered a host of new wave, offline first implementation.
1:16:51Apa nih maksudnya offline first implementation? -Belum sempat nulik nyampe situ,
1:16:58cuma tadi liat si artikel ini sejelas kayaknya. -Confection pernah denger deh.
1:17:04-Missing half of your react. Tagline-nya menarik-menarik ya dari tadi.
1:17:10-Open source reactive database. -Database.
1:17:14-Oh firebase kah? Firebase atau supabase ya temen-temen? Oh ada mutation, action.
1:17:28Ya database lah pokoknya ya. Not just database. -Dijawab gitu.
1:17:34-Real time. Ini dia pakai apa? Maksudnya kalau misalkan kita mau...
1:17:47-Storing data tapi bisa automatic synchron, bisa search gitu loh maksudnya.
1:17:52-Terus bisa koleksi socket, jadi kayaknya tuh real time blablabla.
1:17:56-Kalau kita pakai firebase atau supabase gitu berarti kita belum bisa syncing ya, hanya sebatas.
1:18:05-Firebase sudah synchron. -Bisa kan ya?
1:18:10Misalkan nih kita bikin aplikasi pakai firebase, terus kita lagi ngedit-nedit,
1:18:16atau kita lagi buat posting baru untuk CMS, terus habis itu tiba-tiba internetnya mati.
1:18:23Itu datanya di-cache dulu, habis itu begitu internetnya connect dia syncing ke firebase atau gimana?
1:18:29Nggak tahu ya. -Nanti kita tanya si Dennis Alun ya.
1:18:34-Oh iya udah-udah. Oh iya bener juga kita belum undang anak-anak firebase.
1:18:40Bener, bisa nih. Kebetulan dia di Bali, jadi kan idlenya bagus.
1:18:47-Idenya bagus. -Gua nggak bisa pencet.
1:18:53-What makes convex real time?
1:19:05Dependencies for every query function, whenever any definition change,
1:19:10including any database rows, convex rerun the query function and trigger an update to any active subscription.
1:19:17Oh udah sampe Pub/Sub segala dia ya, udah include ya.
1:19:23Where do convex function run? Convex function run server side.
1:19:28-Dia punya server sendiri. -In an isolated distribution environment.
1:19:33-Can I try? Yes. -Local first. -Bukan local first.
1:19:41-Local first atau nggak kan gimana yang bangun arsitektur seluruhan app-nya kan,
1:19:49cuma convexnya menawarkan layanan di server side-nya dia, blablabla.
1:19:57To convex is instead an entire machine solution, ada API endpoints, blablabla.
1:20:03Tapi dari perspektif yang bikin app yang dipakai user kan tetap aja bisa menterik itu sebagai local first.
1:20:10-And 100% long into kalau convex. -WatermelonDB cuman react ya, sayang sekali ya.
1:20:19-Itu convex juga ternyata react kan? -Iya, kurang agnostik jadinya ya.
1:20:27-Mengkater ke react karena kelihatan kalau front-end di dominasi. -Betul sekali.
1:20:35Terus akhirnya dia pilih apa? Problem, problem, problem.
1:20:45-Why so many problems? -Replication.
1:20:50Ya ampun, lucu sekali nih artikelnya.
1:20:55-Kalau semua orang brengsek berarti ada kemungkinan. -Replication.
1:20:59-You yang brengsek. -Ujung-ujungnya replication.
1:21:07Ini buat syncing engine juga ya.
1:21:15Tapi cara kerjanya.
1:21:19Bring your own back-end, BYOB tadi dia cuman sediain untuk synchronization aja yang dibati ya.
1:21:29On a user first visit replication download the initial chunk of data and store persistently in browser.
1:21:35Jadi ada di browsernya ada database-nya ya.
1:21:42The application reads and writes only to its local copy of the data.
1:21:47Thus the application respond instantly to our interaction by default.
1:21:52Ini kan masih di lokal nih. Terus dia syncingnya gimana nih?
1:21:57Additional data is downloaded as necessary, synchronizes changes to the server and other clients continuously in the background.
1:22:09Mereka syncing lah ya, syncing di background gitu ya.
1:22:16Tiba-tiba ada muncul data baru-data baru gitu ya.
1:22:21Terus setelah itu, wah ini penjelasannya menarik ya.
1:22:27Conflict happen if two users edit data concurrently.
1:22:34Replicate, merge, and conflict using a form of server reconciliation.
1:22:43Intuitive and powerful technique from multiplayer games.
1:22:48Gak dibahas dia pakai apa gitu ya.
1:22:52If this can happen, because the server is down, there is no network, changes are queued persistently until the servers come back.
1:23:01Replica app can smoothly transit online, offline, and other available networks.
1:23:07Testimonial paling atas dari boss new server.
1:23:14Oh, berbayar. Replyless free to use for non-commercial project or company with less than 200k revenue and less than 500k funding.
1:23:31Bisa lah ya.
1:23:34Bisa, bisa.
1:23:36Free tapi tidak free.
1:23:39Gak completely. F-O-S-S.
1:23:44Get started, oh start learning.
1:23:49Tidak usah urus juga pasti ya.
1:23:53Tapi Rosicorp juga. Sama yang Zero tadi Rosicorp kan ya.
1:24:01Oh iya, iya. Dia memonopoly ekosistem lokal first.
1:24:10Build your own backend.
1:24:13Disample ya. Nanti kita korek-korek lebih lanjut ya.
1:24:17Bisa jadi ini sendiri. Oh iya, ini khusus react ya. Sayang sekali.
1:24:24Oke, ada lagi kah yang belum dibahas?
1:24:28Sudah.
1:24:29Sudah?
1:24:30Nanti paling, abis ini pengen ngerenungin isi artiklenya si Marco Epp ini lagi sih.
1:24:36Maksudnya lebih ke inside, bukan ditiru persis dia pakai apa, tapi kayak cara dia ngeproc.
1:24:43Oh ini tuh begini. Gak cocok karena ini kayak itu seru aja sih.
1:24:47Dan ternyata maksudnya apa ya, ekosistem lokal first itu se luas itu.
1:24:53Dan kayak solusi-solusinya aja tadi yang di landing page-nya si lokal first community itu udah banyak banget kan pilihannya.
1:25:03Iya betul.
1:25:06Ya cuman itu ya. Mereka bisa, setelahnya bisa, oh kita punya problem ini.
1:25:13Bisa dapat solusinya. Oh pilihannya ini, ini.
1:25:16Kadang-kadang kan kita gak tahu harus mencari apa. Mencari kata kuncinya.
1:25:21Nah kalau dia open dan dicoba kayaknya deh.
1:25:26Kayak dari beberapa opsi yang paling atas, ya dicoba.
1:25:30Kayak dicoba tapi kayak gak terus-terusan, jadi kayak cuma buat ngejudge, oh ini berhasil mecahin.
1:25:36Kayak punya matrik-matrik kunci yang buat dijadikan patokan, terus oh decide.
1:25:43Gak deh, gak ini, I'm a next.
1:25:46Tapi dari apa artikelnya? Kayak open source project tertentu atau software tertentu, oh ini lagi dalam sedang rewrite.
1:25:55Di mana dia baca ya kayak gitu-gitu ya?
1:25:57Kalau powersync atau electric SQL kan emang di dokumentasinya di-nounce kok.
1:26:02SQL ada announcementnya, emang pernah lihat. Ya waktu dia lagi ngulik. Di dokumentasi.
1:26:16Waktu dia, ini, kelihatannya itu deh. Knowing beta.
1:26:23Ya mungkin tanggal 11 kemarin atau kapan lah dia nulis, dia explore itu kan pasti sekian hari atau sekian minggu sebelum nulis artikel itu kan.
1:26:35Mungkin waktu itu masih fail nih, masih fail.
1:26:39Coba klik, coba klik.
1:26:41Saya sekarang udah beta.
1:26:43Deploy examplenya gagal.
1:26:46Biasa.
1:26:49Pakai eliksir loh.
1:26:53Iya. Kan SuperBiz juga pakai eliksir kan ya.
1:27:00Mana yang rewrite-rewrite itu ada gak? Penasaran? B-issue kali ya?
1:27:06Ada sih pernah lihat. Maksudnya lupa dimana, cuma emang ada major rewrite di-elected SQL.
1:27:15Kalau only mode, gak ada.
1:27:19Gak kelihatan. Gak, gak terbaca sih. Iya, gitulah.
1:27:25"Pertama kali kenal Localverse dari Anytype yang pakai anysing." Oh Anytype itu notes ya?
1:27:33Anytype.
1:27:36Oh dia Localverse juga, oh baru tau.
1:27:40Ya, pernah denger, pengen coba tapi somehow gak jadi.
1:27:49"Localverse everything app."
1:27:54Coba tetap akhir ujung-ujungnya, tetap pakai Obsidian kalau gue.
1:28:00Coba iseng pengen coba ini aja sih. Karena gue gak pernah butuh.
1:28:04Obsidian itu Markdown-based ya?
1:28:10Iya, plaintext biasa. Dan maksudnya performanya cepet sih, snappy banget.
1:28:17Obsidian maksudnya gak ada yang ngalahin.
1:28:19Iya. Cuman aplikasinya tidak open source.
1:28:24Aplikasinya proprietary, trust not believe, block-based.
1:28:32Itu malah seneng sama landing page-nya aja sih, kayak oh desainnya bisa bagus gini.
1:28:37Ini namanya cloning-annya Notion, tapi yang offline first ya, versi Notion yang offline first ya.
1:28:46Kurang lebih kayak gitu ya.
1:28:48Oke, menarik, menarik.
1:28:52"Get the app."
1:28:54Aplikasinya ada apa aja?
1:28:59Mac, ada platform? Linux, Windows?
1:29:03Macam-macam kok.
1:29:04Oh, belum ada mobile ya? Baru di desktop ya?
1:29:07Ada, mobil juga ada.
1:29:10Mana?
1:29:11Dia ada di lingkungan itu, atau scroll ke bawah coba.
1:29:15"Get the app" yang tadi?
1:29:17Ada pokoknya.
1:29:18Ada? Oh, baru tahu.
1:29:21Gak tahu ya kalau beta atau forever kena nyoba soal. Nah, ini dia.
1:29:29Oh, ada. Oh, ada di Google Play.
1:29:35Oh, iya. Kok nggak di situ ya?
1:29:41Gak tahu ya, masih beta atau apa-apa.
1:29:44Karena nge-access-nya pakai buat desktop.
1:29:47Oh, ditutup ya sama dia ya.
1:29:50Ini ada Swift juga, berarti ada buat iOS.
1:29:53Oh, udah lengkap ya.
1:29:56Oh, menarik, dicoba nih.
1:30:00Pindah lagi.
1:30:03Gak selesai-selesai, nggak produktif-produktif.
1:30:05Gak selesai-selesai.
1:30:07Dari dulu pakenya bare doang, bare writer, udah nggak pernah...
1:30:13Wah, kalau bare itu udah paling top.
1:30:17Cuman masalahnya iOS only.
1:30:19Apple only.
1:30:22Sebagai pengguna HP Android.
1:30:25Sebagai pengguna HP murahan.
1:30:27Ya, murahan.
1:30:29Tidak mampu untuk menjangkau-nya.
1:30:33IPFS. Oh, si Anytype ini pakai IPFS ya?
1:30:38IPFS itu Web3 bukan sih?
1:30:43Gak tahu, belum ngulik sampai situ sih.
1:30:47Kapan-kapan bahas alat testing?
1:30:52Pernah nggak sih?
1:30:54Testing pernah, tapi end-to-end dong.
1:30:56Pernah tapi nggak mendalam banget.
1:30:58Iya, belum bahas kayak apa, Papetir.
1:31:01Papetir pernah ya.
1:31:03Gak bisa, belum bulas.
1:31:05Ya, Papetir pernah.
1:31:07Yang Microsoft punya itu apa, Papetir?
1:31:10Cypress.
1:31:12Bukan, setelah Cypress, yang Microsoft.
1:31:17Bukan Cypress, Microsoft.
1:31:20Cypress dong.
1:31:21Lupa namanya.
1:31:23Bukan Cypress apaan, Playwright.
1:31:27Playwright.
1:31:30Cypress kan sebelum itu.
1:31:33Boleh, boleh, boleh.
1:31:35Terima kasih ya.
1:31:36Eh, episode 12 belas, pernah lagi.
1:31:39Pernah ya, episode 12 belas, 2023.
1:31:43Tapi kan nggak mendalam kan?
1:31:45Ya, nggak mendalam karena banyak yang dibahas.
1:31:49Berarti mungkin besok-besok kita potong-potong
1:31:51kalau misalnya unit testing doang, end-to-end doang.
1:31:54Yang kayak biar di-deep dive.
1:31:57Oh, kalau yang ini kayaknya kita mostly
1:31:59banyakan bahas tentang, iyalah, semua ya?
1:32:02Ya, genis-genis testing.
1:32:04Kalo yang waktu itu kayak overall aja, kayak general.
1:32:09Boleh tuh, jadi bagus.
1:32:12Jadi bagus, dari Bali.
1:32:14Terima kasih.
1:32:15Kita dari Bali.
1:32:16Efraim, Efraim, oke.
1:32:18Kita masukkan ke wishlist ya.
1:32:21Oke, cukup mungkin untuk malam ini.
1:32:23Terima kasih banyak buat semuanya
1:32:25yang sudah hadir dan meramaikan.
1:32:27Kita ketemu lagi minggu depan
1:32:29dengan topik yang berbeda.
1:32:30Selamat malam.
1:32:31Sampai jumpa, bye-bye.
1:32:33Bye-bye.
Suka episode ini?
Langganan untuk update episode terbaru setiap Selasa malam!
Episode Terkait
13 Okt 2025
File Upload Strategy - Ngobrolin WEB
🗣️🕸️ Selasa malam waktunya #ngobrolinWEB! Malam ini akan mendiskusikan topik yang dikirimkan oleh penonton setia kita ...
17 Des 2024
Ngobrolin Desktop App - Ngobrolin WEB
Yuk mari kita diskusi dan ngobrol ngalor-ngidul tentang dunia web. Agar tetap up-to-date dengan teknologi web terkini. ...
27 Jan 2026
Agentic Coding Tools - Ngobrolin WEB
🗣️🕸️ Selasa malam waktunya #NgobrolinWEB! Malam ini kita akan berbagi bagaimana Eka dan Ivan menggunakan AI Agentic C...