Lompat ke konten utama
EP 149

Kisah-kisah Menyeramkan dgn @zainfathoni

Ringkasan Episode

Bantu Koreksi

Episode spesial "Kisah-kisah Diiramakan" ini menghadirkan Mas Zain yang berbagi cerita horor pengalamannya sebagai engineer. Dua insiden utama dibahas: pertama tentang MIME type error yang menyebabkan JavaScript tidak dieksekusi sama sekali, dan kedua tentang masalah intermiten pada asset loading akibat konfigurasi double CDN. Diskusi juga mencakup pentingnya dokumentasi sebelum melakukan perubahan konfigurasi, serta pembelajaran dari insiden yang berlangsung hampir setahun sebelum akar masalah ditemukan.

Poin-poin Utama

  • β€’Silent error adalah salah satu error yang paling sulit didiagnosa karena tidak menampilkan pesan error di console
  • β€’MIME type salah (text/plain instead of application/javascript) membuat browser menolak untuk mengeksekusi JavaScript tanpa ada pesan error
  • β€’Setelah upgrade CI/CD, konfigurasi default server mungkin berubah dan perlu diset secara eksplisit
  • β€’Double CDN (Cloudflare di depan CloudFront) menyebabkan cache invalidation issues dan race conditions
  • β€’Splitting bundle terlalu banyak meningkatkan frekuensi kejadian error intermiten
  • β€’Screenshot atau dokumentasi sebelum melakukan perubahan konfigurasi sangat krusial untuk recovery
  • β€’Cache adalah pedang bermata dua - mempercepat performa tapi juga menjadi sumber masalah kompleks

[musik]

Dapatkan hanya di Domain Asia

[musik]

[musik]

Nani, kok nggak ada Nani?

Kok nggak seronok sih? Nah ini dong

[tertawa]

[musik]

Sehat, sehat. Kok nggak bisa ini ya?

Kok nggak bisa, kita juga nggak bisa pakai juga.

[tertawa]

Bisa lah, tapi harus dulu tuh yang kita bahas kemarin.

[tertawa]

[tertawa]

Udah gimana tuh?

[tertawa]

Gak bisa banget.

[tertawa]

Mas Zain dia submit cerita lho. Mas Zain mau ceritain sendiri nggak?

Kalau mau saya share lewat WhatsApp nih.

Terimiatnya, diundang langsung buat menceritakan gitu ya.

[tertawa]

Iya, eh tapi dengar-dengar dari bocoran katanya mau ngisi ini ya.

Deves ya, oh oke saya siap ya.

Boleh, asik, asik, asik, asik.

Ketemu di Jogja ya sama Ivan ya.

Apa kabar di teman-teman semua?

Mudah-mudahan sehat.

Intro dulu dong, kenapa episode ini jadi kisah-kisah diiramkan?

Kenapa ya?

Lihat transkrip lengkap (3046 segmen lagi)

Karena hari ini Selasak Liwun, malam Selasak Liwun.

Malam Selasak Liwun itu, kan kita mau nyari Jumat Liwun, tapi kan kita live-nya Selasa.

Ternyata Selasak Liwun itu juga ada sesuatu, ada sesuatu yang spesial.

Ada mitosnya.

Sebentar, ya ada mitosnya. Sebentar saya screen dulu ya.

Awalnya kan kita mau Halloween ya, Halloween cuman Halloween kan bukan budaya kita.

Bukan kalifat lokal ceritanya.

Jadi biasakan Jumat Liwun itu yang angker kan ternyata.

Selasak Liwun juga ada.

Hari Selasak Liwun dinamakan Anggara Kasi dan dianggap sebagai hari istimewa dalam budaya Jawa dan Bali.

Oh gitu.

Jam 9 ada meeting, gak apa-apa Mas.

Silahkan, sudah saya share ya linknya kalau mau diceritakan langsung.

Ceritanya menarik juga.

Ide siapa sih yang cerita orang, kalau gak salah ada yang submit di GitHub ya.

Di GitHub isu Eka awalnya.

Kita pernah bahas itu, terus ya kayak Syntax FM atau podcast lainnya kan.

Ya Syntax FM kemarin tuh seru banget.

Sampai mereka bikin lagu.

Sampai dua episode lagi.

Single nya.

Oh oh, seru banget.

Kalau mereka emang niat perut, ngapa-ngapain.

Kita minimal.

At least tadi mukanya udah serem.

Sisanya Mas, sebenarnya kita gak ngapa-ngapain, gak pake kostum.

Serem.

Udah serem.

Ya, ya, ya.

Nah, jadi sebelum kita memulai ya, kita membuka dengan ini ya.

Ini keseremannya terjadi.

Ini juga serem sih.

Oh ini kostum ya, kostum Halloween.

Ya ternyata ya, masih bergantung kepada US E1 ya.

Kalau ada yang kena ya.

Berarti maksudnya itu waktu US E1 error.

Ya, down kan.

Yang lain udah takut.

Betul, jadi biar gak kena temen-temen.

Bisa itu aja pake VPS nya Dominesia.

Pasti gak kena.

Karena data center-nya kan di E1.

Coba promonya apa dulu, Nish?

Jadi kalau mau pakai VPS nya Dominesia,

itu temen-temen bisa pakai cloud VPS Turbo.

Itu dapat diskon 50%.

Pakai promokod ngobrolin VPS DN.

Ngobrolin VPS DN.

Dan itu bisa dipake berulang kali, nggak perlu bikin akun baru,

pakai akun yang lama juga bisa.

Kalau misalkan mau yang lebih simple,

kayak kemarin saya cobain hosting yang bisa diinstall Node.js,

itu bisa juga, tapi diskon-nya lebih murah.

Diskon-nya 10%.

Pakai promokod ngobrolin web DN.

Jadi sekali lagi terima kasih buat Dominesia.

Sudah bersedia untuk berkolaborasi di episode kali ini.

Nah, pas banget nih.

Ada orangnya langsung yang mau menceritakan.

Jadi langsung aja kita invite.

Tepuk tangan dong.

Sanggup-sanggup.

Sanggup tepuk tangan lah.

Cerita horor.

Kenapa pencet?

Nah, cerita horor.

Atau horor.

Pasti semua mengalami kan ya.

Pasti semua mengalami.

Biasanya tuh kayak apa ya?

Kayak perpeluncoan ya,

kalau di dunia akademis ya.

Biasa selalu aja ada terjadi kesalahan-kesalahan konyol gitu ya.

Kesalahan konyol.

Nah, kalau Mas Zain sendiri,

pernah punya cerita apa nih yang bisa dibagikan?

Belum bisa jadi ini ya.

Belum bisa jadi server engineer kalau belum pernah.

Iya, belum bisa jadi senior engineer

kalau belum drop data base production.

Waduh.

Ngeri banget ya.

Gimana nih ceritanya Mas Zain?

Dulu waktu saya di Ninja Fan itu sempat...

Kan ini Jumat Suri ya.

Siang juga ya.

Horor itu waktu-waktu horor ya.

Jadi lucunya saya lupa alasannya waktu itu.

Kalau nggak salah karena waktu itu kayak Gatsby JS kan.

Gatsby itu kan.

Oh, nge-buildnya lama karena banyak gambarnya.

Atau banyak assetnya.

Waktu itu sih belum...

Masalah build belum lama sih kayaknya.

Masalahnya bukan di build yang lama.

Tapi ya udah lumayan banyak sih gambarnya.

Cuman kayaknya nggak selama.

Karena masih awal-awal jadi belum banyak lagi.

Tapi terus karena waktu itu ada kebutuhan update content kalau nggak salah.

Dan kan setiap update kan harus di rebuild kan.

Jadi dari tim yang ubah kontennya udah bilang ini benar di-update.

Oke udah di-update dari CMS-nya, udah di-update kan.

Dari headless CMS-nya.

Terus kita rebuild deh itu.

Kan tekniknya nggak ada perubahan kode ya.

Jadi harusnya nggak rusak.

Terus tau-tau di deploy nggak bisa dipake.

Jadi deploy tetap, HTML-nya bisa dibuka tapi nggak bisa diteraksikan.

Sedangkan kan Gatsby waktu itu kan masih belum...

Static site-nya masih sangat-sangat mengandalkan...

Ini belum progressive enhancement.

Jadi maksudnya kayak...

Mungkin pindah, link-nya udah bisa ya, pindah-pindah.

Kalau dari situlah ke halaman lain kan bisa pindah.

Routing-nya sudah benar.

Cuman begitu buka halaman itu kan kalau mau interaksi kan...

Harus pakai JavaScript juga pada akhirnya.

Ada tombol klik, ada komentar gitu ya.

Apalagi kalau routing-nya tain site, di-click nggak bisa.

Kalau dibuka halamannya langsung bisa.

Karena yang di-load kan HTML-nya.

Kalau dari nge-click link, soft link, soft navigation nggak bisa dong.

Seram.

Jadi ada beberapa navigasi yang soft itu jadi nggak bisa gitu.

Ada yang main menu-nya masih bisa kan, header biasa gitu.

Header link, soft link biasa.

Berarti.

Masalahnya ini website komport itu.

Website utamanya perusahaan logistik.

Jadi pasti ada butuh tracking kan.

Tracking kan pasti pakai JavaScript.

Oh, tracking pengiriman barang ya.

Iya, bahkan kalau pake...

Ngetikin paket daftar tracking-nya itu.

Sebenernya kan tekniknya cuman buka query params.

Terus query paramsnya ntar kita patch lagi, ada JavaScript yang patch dulu kan.

Kan belum server render kan.

Kalau di server render mungkin bisa.

Karena masih ala-ala kan, masih sumi-sumi.

Jadi cuman yang lencet, cuman static, cuman gitu aja.

Template-nya awalnya terus, satu buat nampilin hasilnya kan harus pakai JavaScript.

Itu nggak jalan, jadi semua fungsinya pasti yang membutuhkan JavaScript mati.

Bingung, udah repeat, udah ulang kali mau repeat kembali sebelumnya sebagainya.

Ini kenapa nggak, nggak jadi-jadi gitu.

Masalahnya di konten.

Jadi itu rebuild kan kita.

Kita rebuild, nggak bisa.

Mau report, nggak bisa karena somehow ICD-nya habis historinya.

Tapi kalau report kan bisa pakai asset yang udah di place dulu kan.

Ini kan saatnya klik build kan.

Jadi ada build yang kemarin, kemarinnya gitu kan.

Kan sebenarnya tekniknya tinggal diquail yang udah di build kemarin.

Kan bisa gitu.

Masalahnya semenjak saya klik itu, sebelumnya nggak ada historinya lagi gitu.

Entah kenapa aku ilang.

Jadinya, jadi kita nggak bisa report gitu kan.

Terus karena ternyata itu terjadi setelah teman-teman infra ngerombak ICD-nya.

Jadi cache build yang sebelumnya udah ilang duluan.

Jadi mau nggak mau harus ditemukan masalahnya, harus diselesaikan.

Saat itu juga.

Jadi nggak bisa diselesaikan.

Masalahnya tau kan JavaScript-nya nggak jalan kan.

Itu tau kan masalahnya kan.

Tapi kenapanya ya?

Kenapanya kita nggak tau.

Pada perubahannya cuma konten ya.

Tapi gara-gara rebuild itu ya, perubahan CD-CD ya.

Ya udah kita nggak tau ini kenapa nggak jalan.

Kenapa semua yang berhubungan dengan JavaScript aja nggak jalan.

Ya namanya saya anak baru front-end.

Meskipun titlenya udah senyap.

Tapi kan sebenarnya baru aja pindah ke front-end.

Iya, sebelumnya back-end ya?

Iya, jadi belum punya itu intuisi tau-tau oh, mind type-nya.

Belum kebayang itu.

Jadi ya udah setelah berjam-jam, terlalu lewat malam.

Ada bagi terus kan.

Tahun-tahun satu pagi, persian gitu nggak ada.

Ini mind type-nya ternyata.

Mind type-nya?

Ya, jadi ternyata waktu teman-teman ini peranggubah.

Kalau salah mind type, nggak dirender.

Nggak di-execute ya?

Nggak dijalani atau nggak dipanggil?

Browser akan menolok untuk menjalankan.

Jadi kan sama artinya harus text.

Harus, kalau nggak salah itu application stress.

Application stress.

Ada dua atau tiga mind type-nya yang diterima oleh browser.

Ada yang legacy, ada yang baru.

Nah, waktu itu mind type-nya salah kayaknya mungkin cuman text.

Jadi akhirnya nggak...

Oh, text, ya.

Textnya TML lagi.

Plain text, plain text.

Jadi jelas gitu ya.

Nggak di-execute.

Ketika server menghantar file JavaScript dengan tipe incorrect mind.

Misalnya kalau kirinya text plain atau text TML

instead of application stress JavaScript

atau text stress JavaScript,

browser akan...

Nggak di-execute sih.

Iya, nggak di-execute sih.

Jadi nggak akan...

Jadi nggak ada error juga ya.

Console error juga nggak ada soalnya.

Kadang nggak di-execute juga.

Soal error pasti.

Tapi penyebabnya nggak ada.

Atau ada? Atau nggak ada?

Mesejnya kriptik sih.

Seingat saya malah nggak ada seingat saya.

Nggak ada.

Karena dia ignored aja.

JavaScript itu yang susah.

Jatuhnya silent error.

Silent error itu yang mematikan sih silent error.

Paling susah itu ngadibatnya.

Ada dua error yang horror itu adalah silent error atau interneten.

Ya.

Kadang bisa, kadang tidak.

Itu susah.

Nggak bisa di-reproduce ya.

Iya.

Itu interneten itu saya juga ada.

Gimana itu interneten?

Oke.

Sebentar, sebentar.

Ini belum selesai, belum selesai.

Ini kan udah ketahuan nih.

Meme nya salah, mime nya salah.

Itu penyebabnya apa?

Gara-gara bangun ulang CI/CD itu?

Tim infra nya atau gimana?

Saya sih nggak tau persisnya apa yang dilakukan teman-teman infra ya.

Cuman kan mungkin upgrade sih.

Saya tuh upgrade versi server nya gitu.

Cuman kan setelah upgrade kan mungkin biasa lah ya.

Kan namanya upgrade persen kan mungkin ada breaking changes.

Harus konfigurasi ulang.

Atau ada beberapa konfigurasi default yang

mungkin by default dia akan serve JS

sebagai timetap yang benar.

Terus jadi exterior.

Harus dibuat eksplisit.

Karena hal-hal kayak gitu kan kadang memang nggak bisa

langsung diteksi atau dikenali secara awal.

Ya nggak, nggak nyalain juga.

Ya akhirnya karena udah tau solusi masalahnya

tinggal bilang ke tim infra buat yang tau.

Oh ini selesai.

Tim infra ngecek.

Setelah dicek benar ya.

Bahkan bukan rebuild, bahkan redeploy aja.

Tinggal redeploy.

Redeploy nggak ya?

Bahkan nggak kayaknya redeploy.

Oh berarti ini platform sendiri ya?

Platform sendiri ya?

Bukan kayak Netlify atau apa bukan ya?

Oke.

Bukan.

Oh CACD-nya.

Ya under the wood sih kan masih pakai cloud ya.

Kalau lupa waktu itu AWS ada di situ.

Oke.

Ya S3 aja sebenarnya ya S3.

Cuman dari S3-nya kan di teman-teman infralight.

Ya nggak tau tuh.

Bukan cloud phone sih.

Iya lupa.

Iya ada cloud phone ya.

Ini yang konferensi di area-area sana itu.

Ya pernah lebih gitu lah.

Jadi setelah dibutuhin main tab-nya ya udah jalan lagi lah.

Jalan lagi normal ya.

Itu dukat kan.

Sampai ke sabtu berarti itu apa namanya lembur.

Atau gimana.

Ya hitungannya lembur.

Tapi kan nggak ada belakang lembur juga kan.

Tapi nggak sampai nginep di kantor.

Oh nggak itu lemburnya.

Nah kan remote kan.

Ya remote ya.

Waktu itu.

Di Singapura kan.

Waktu itu kantor.

Singapura.

Singapura.

Itu kayaknya sebelum pandemi deh kayaknya.

Sebelum pandemi ya.

Berarti kantor ya jumatnya tuh kantor gitu ya.

Iya di kantor jumatnya tuh.

Karena saya masih ingat kejadiannya di kursi itu.

Masih teringangnya.

Jadi deploy di hari jumat nih ya.

Bukan deploy bukan ribut bukan ya.

Bukan deploy kan ya.

Cuma push content aja kan ya.

Technical deploy.

Technical deploy ya.

Ya publish.

Terus di widget dislike hari sabtu nya.

Enggak kan ketahuan nya udah dari jumat ya.

Baru tau masalahnya sabtu gitu.

Enggak jumatnya.

Jadi setelah jumat itu udah langsung ketahuan.

Cuma ya itu kenapa? Karena silent error.

Ya betul lah.

Karena silent error.

Yang menemukan masalahnya di meme types itu siapa?

Waktu itu saya teman saya sih bukan saya.

Oke.

Jadi sama-sama inspect gitu ya.

Ngari-nyari tau.

Kita berdua ini sama-sama.

Sama-sama bergadang.

Siapa duluan yang nemulah gitu.

Oke.

Waduh ngeri juga ya.

Yang lagi tambahannya ini di lokal jalan.

Di lokal gak apa-apa.

Pasti jalan.

Oh iya pasti.

Kode production di lokal jalan nih.

Iya.

Sama kayak itu ya kasusnya ya.

Kayak use case penggunaan docker ya.

Di lokal saya jalan.

Tapi di server enggak ya.

Oh ini karena mungkin karena SSG juga ya.

Server Site Generator itu.

Kalau setiap ada artikel baru.

Mau gak mau ya harus deploy semua kan.

Berubah semua ya.

Kan belum ISG kan.

Belum incremental.

Belum apa namanya incremental ya.

Ya saya lupa ispanya tadi.

DSG ya.

Ya incremental.

Oke.

Wah.

Ngeri juga ya.

Oke.

Yang intermiten.

Oh boleh silahkan.

Gimana.

Dapat bonus kita.

Dapat bonus.

Intermiten itu bukan yang bikin down lama.

Tapi lebih ke barang.

Tapi kita gak tahu solusinya apa.

Oh tapi itu juga kotak sih.

Sebetulnya sempat bikin down juga.

Di perusahaan yang sama.

Bukan beda lagi.

Oh beda lagi oke.

Oh yang sekarang.

Jadi ada bug.

Bugnya itu intermiten.

Jadi dari ratusan aset JS yang kita serve.

Itu somehow ada aja.

Ada beberapa klien yang komplain.

Bahwa aset termo itu gak bisa dulu.

Itu JS ya maksudnya ya.

JS atau JS gitu.

Ya karena ada JS yang.

Ya karena ada JS yang.

Atau CSS juga itu artinya ya aplikasinya jadi rusak.

Yang simple kan aplikasi SPA sekarang kan ya ringki ya maksudnya.

Dari ratusan itu satu aja yang gak gelut juga bisa.

Atau semua kan.

Bisa.

Jadi ada berbagai report.

Yang makin bikin curiga adalah karena waktu itu kan ada proses optimasi rendering ya.

Karena tadinya itu build chunk-nya gede banget.

Terus kita split build kan.

Split perat jadi pakai dynamic imports itu.

Sehingga jadi ratusan modulnya.

Dengan bertambah banyak jumlah modul.

Makin tinggi itu kejadiannya, frekuensinya.

Jadi sekarang misalnya kalau kata-kata 1% aja modul yang gak gelut.

Kalau chunk-nya cuma 5 kan.

Kita menunggu ada 500 tunggu 6 baru kejadian 1, 2.

Tapi begitu chunk-nya ada 50.

10 orang gelut.

1 dari 10 udah kejadian.

Jadi makin sering kejadiannya.

Setelah itu kita.

Ya itu kita gak tau apa ya.

Menetap juga di situ sebenarnya.

Gak tau dari situ sebenarnya.

Terus di satu momen ada ketahuan tuh.

Ternyata kemungkinan besar karena ada masalah di cloud platform-nya.

Di casing-nya gitu.

Lebih tepatnya di...

Kalau di cloud store.

Cloud store kan dari AWS-nya ya?

Iya.

Nah ini di...

Di front of platform.

Itu kita pakai platform juga.

Double CDN.

CDN ke CDN.

Ya ini juga kita...

Ini legacy app.

Jadi somehow kok udah di situ seperti itu yaudahlah.

Akhirnya kita pakai aja.

Oh...

Kita terus ini tuh kan.

Double caching.

Kok ada double caching ini?

Ini masalah ini kan.

Satu-satunya adalah matiin satu gitu kan.

Yang kita matiin ini di depan.

Nah ini horornya mulai di sini.

Kita matiin lagi di depan.

Sound effect loh.

Tering.

Itu saya WFC.

WFC tuh saya tuh.

WFC tuh tanya-tanya sama temen informasi.

Nah anaknya, temen yang DevOps lah.

"Mas gimana ini mas?"

"Iya ini harusnya nggak double CDN."

"Iya sih kita di sini juga supakat."

"Di casing internal juga supakat."

"Belau ini harusnya nggak double."

"Coba aja matiin platform-nya."

Jadi dua-duanya dimatiin dong?

Satu aja yang...

Oh satu.

Yang cloud front-nya. Yang cloudflare-nya nggak.

Sebaliknya yang cloudflare-nya dimatiin.

Bukan dimatiin.

Cloudflare itu kan ada konfigurasi cache.

Sorry ada cache dan DNS only ya.

Proxy.

Proxy VFC.

Proxy-nya dimatiin.

Proxy-nya dimatiin.

Saya tahu ujungnya kemana ini.

Terang alamin juga ya.

Terang alamin juga ya.

Karena kita nggak bisa kalau matiin.

Kalau proxy-nya dimatiin, berarti rule-rule yang lain.

Forwarding rule, redirect rule, segala macam yang dimatiin.

Hilang semua.

Terang ini cuma mematiin cache.

Termasuk SSL-nya mati.

SSL cache.

SSL apa?

Oh, satelit S-nya.

SSL di depan.

Jadi nggak disetak.

Padahal yang udah disetak.

Di berbagai... yang udah disetak.

SSL-nya tuh di depannya.

Ternyata kalau di depannya.

Ternyata kayaknya...

Mungkin asal dipasang aja atau gimana.

Nggak ada konfigurasi itu.

Iya.

Nah, karena ini masalah DNS ya.

Maksudnya kan nggak langsung efek kan.

Jadi pas saya matiin.

Saya cek, oh, aman.

Oh, iya, aman.

Masih ada cache soalnya di browser samtian.

Iya, di belakang juga ada cache.

Terlang seburu 15 menit.

Semerang seburu.

Ya, iya, iya.

Ini langsung di...

Di...

Ini langsung di...

Di...

Di...

Di...

Di...

Di...

Di...

Di...

Di...

Di...

Oh, snap.

Iya, nggak boleh.

Iya, iya, iya.

Gak bisa TTP.

Terus, ya udah jadinya.

Ya, karena itu

saya yang tahu.

Saya penyebabnya kan.

Ya udah, akhirnya langsung saya report.

Cuman kan nge-report juga nggak segampang itu karena ada...

Harus tahu konfigurasi sebelumnya.

Untungnya saya screenshot sebelumnya.

Jadi before afternya di screenshot.

Oh, untung.

Kalau sudah senior.

Gitu tuh.

Ada dokumentasinya harus catat.

Kalau ini action berbahaya

di screenshot semua step.

Iya, iya, iya.

Ya udah, saya benerin. Klik, benerin.

Tapi itu kan namanya DNS kan ya.

Dibenerin, nggak langsung benerin.

Iya,

nunggu dulu, nunggu dulu.

Nunggu propagate.

Iya.

Tapi ya dari situ

jadinya tetam. Ini kira-kira durasi incidentnya setengah jaman.

Untungnya

ini kan company-nya

base-nya US ya.

Tapi kelihatannya global sih.

Pas orang sana tidur?

Waktu itu siang.

Jadi kalau ada complain, mungkin siangnya kita

itu kan kalau di time zone itu kan nggak begitu

belum banyak negara.

Banyak ya.

Kebanyakan kan di Amerika

masih berada tidur.

Terus yang di Kuala Lumpur juga mungkin masih pagi banget.

Jadi belum ini, belum banyak

belum banget lah.

Ya udah, akhirnya.

Tapi kok bisa ya

CDN, di atas CDN?

Soalnya ada clausur kontraknya si CloudFront itu

nggak boleh loh.

Nggak boleh ada CDN

in front of another CDN

dari kontraknya si AWS.

Saya nggak tahu kontraknya gimana.

Bahkan kalau kita pakai

Netlify pun ya.

Yang bukan kontrak, kayak kan saya masih pakai inkerdisan.

Jadi Netlify kan juga disarankan.

Jangan pakai CDN aja.

Iya, nggak boleh.

Saya tahu bahwa itu bukan

spurt practice sih.

Udah ada incident ini.

Legacy.

Warisan ya, warisan.

Warisan.

Terus bertahan dulu nih,

biar dapet langsung dulu nih.

Mastiin gimana.

Iya.

Itu

banyak sih masalahnya memang

CDN, CDN lagi.

Aduh, banyak banget masalah gitu tuh.

Kacau.

Ya, sementara saat itu teman saya yang

anak DevOps dia udah nggak berani nyaranin-nyaranin lagi.

Amateri jadi kayak begini.

Langsung berayah.

Keselamatkan oleh

screenshot berarti ya.

Sebenernya pelajaran pentingnya ya itu ya.

Harus dicatat ya apa

langkah-langkah yang kita lakukan ya.

Sumpah itu screenshot atau tulisan

atau apa gitu ya.

Itu juga sempat kejadian lagi tuh

beratangan ini.

Tapi bukan sama saya dan orang lain juga.

Tapi sama, karena dia udah screenshot

jadi juga lebih gampang.

Seringnya kalau kita mau nyaksin berbahaya,

apalah disimpan lah.

Kalau misalnya cardet habis ya mungkin didump dulu.

Jadi ada break up-nya.

Oke, oke.

Tapi lagi-lagi ini masalah intinya belum selesai.

Masalah inti yang saya bingung intermukan itu ya.

Akhirnya kita mencegah dulu di Katara.

Terus kita revert lagi dari

yang kadang kita bundle tanking-nya.

Apa kita smitkan.

Kita bundle-nya ya

kita revert lagi.

Jadi ya, mending jadi

bundle gede-gede dulu, yang penting

kejadiannya sedikit.

Tapi itu baru selesai.

Ini hampir setahun kemudian.

Kita baru tahu masalah intinya apa.

Udah ketemu?

Udah ketemu, tapi masih kejadiannya kita.

Intermittent.

Padahal resolusinya ya,

kita selalu

page, menu juga ada ya.

Itu yang kita pasang di quarter buat

selalu di deployment.

Kayaknya antara

komunikasi si node-nya si Cloudflare

sama node-nya si

Cloudfront

itu serisi cache

time-nya itu dan ada

raise condition aja.

Jadi kalau misalnya ini pas lagi nge-request kesini

terus ini call cache, dia

minta dulu dan

kayak

bisa, mungkin ada itu

stale-while-revalidate juga sih mas

stale-while-revalidate. Yang di-serve ini

yang stalnya.

Dan yang di depan itu sudah dapat

seri yang baru, bukan

hash-nya ada yang baru nih.

Yang baru dia minta kesini

dan disini belum ada, dan lagi minta.

Jadi sih mungkin 404.

Ya antara 2 ini, 2 node

antara si Cloudfront sama si

Cloudflare.

Makanya nggak boleh numpuk, sedih ya

kan ideanya. Iya.

Enggak boleh.

Yang di-bypassed Cloudfront aja

kalau mau sementara.

Cache-invasion itu adalah satu

masalah terbesar, salah satu masalah terbesar

dalam programming. Ini kita

tumpuk 2.

Dua kali lipat.

Potensi issue.

Cache itu adalah

pedang bermata 2.

Dia yang menyalahmati

dia juga yang mau bikin

kusing. Kalau ditumpuk 2

bermata 4 berarti.

Bermata 4 dong di kali 2 ya.

Itulah.

Itu sih buka aib dari saya.

Itu tuh, yang ke-2 ini

ya film horror, Mas.

Scream atau Final Destination

atau apa yang sequel-nya banyak, yang sampai

bertahun-tahun kemudian masih ada

masalahnya.

Ada masalah.

Oh iya.

Ini Mas Zain kan jam 9 mau meeting.

Nah sebelum Mas Zain

cabut, ini

udah confirm ya di Jogja ya, mau ngisi

Devast ya?

Insyaallah sudah.

Boleh bocorin

topiknya ga? Boleh bocorin topiknya ga?

Kita belum tentukan sih

kayaknya.

Kita belum tentukan.

Cuma ada CDN.

Belum saya, kepikiran nya sih pengen

disambungin sama MCP.

Kemarin kan saya belum ngisi

di Road to

Devast-nya kan, hari Minggu kemarin.

Oke, wah menarik ya.

Belajar bikin MCP, pengennya sih

disambungin ke situ, jadi

something about MCP, cuman

prosesnya masih belum tau mau ambil dari situ.

Sabtu bikin acara yuk,

lucu-lucuan aja.

Eh, temen-temen yang nonton

di LinkedIn, di Youtube, mungkin

ada yang orang Jogja, kita Kopdar

yuk Kopdar. Kita Traktir

Mas Zain, udah sering ditodong

untuk ikutan acara ngobrolin

tapi belum pernah dapet

benefit dari kita. Traktir, traktir.

Nanti kita traktir lah ya.

Kita main di Jogja.

Kita main ke Jogja.

Ayo.

Bikin itu yang jalanin

ke Kopdar Bapak-Bapak itu lho, apa?

Kopdar Bapak-Bapak?

Ada, Mas Zain.

Bikin ini, saya bikin

BapakCerdas.com

BapakCerdas.com?

Iya, BapakCerdas.com

Tapi Eka gimana dong?

Eka gapapa lah.

Jalan Pencari Bapak.

Jalan Pencari Bapak.

Jalan Pencari Bapak.

Pencari Bapak untuk

anak-anaknya.

Beda ini sih, beda circle itu.

Nyamar lah jadi Bapak-Bapak datang

pakai Komismasum.

Kita teman-teman

komunitasnya aja.

Ada banyak yang develop.

Siap, siap, siap.

Oke, mungkin

Terima kasih buat Mas Zain. Silahkan kalau mau

nyelengkrong disini, kalau mau cabut juga

gak apa-apa. Kita mau lanjut ngobrol apa?

Mau lanjut cerita horror, teman-teman yang menikmati.

Cerita horornya.

Soundboard nya dong, sound effect yang serem ada gak?

Soundboard nya? Yang serem? Apa ya?

Effect serem ada gak?

Effect serem, ini?

Ini apa sih?

Ini apa sih?

Kurang serem?

Apa lagi? Gak serem juga.

Apa lagi? Gak serem ya?

Itulah X-File, X-File.

Bener ya?

Bener ya?

Oke, siap.

Ini tukang soundboardnya

kurang profesional.

Aku pilih satu deh nih.

Cerita selanjutnya.

Dari Mas atau Mbak Eka ya?

Dari Mas atau Mbak Eka ya?

Ceritanya adalah

pada suatu hari

leo

menjalankan query Big Query

tanpa web

yang spesifik dan termonitor.

Big Query, Big Query, oke.

Tanpa web

yang spesifik dan termonitor.

Tapi belum, belum, belum.

Ini belum bagian paling seremnya.

Bentar, bentar.

Tanpa web yang spesifik

dan termonitor

jalan 4 hari

dan tanpa disadari

pemakan biaya sebanyak

70 juta rupiah.

Nah.

Ini baru serem.

Horor, horor.

Aduh, jahat gak sih

kalau gue ketawa?

Nggak, tapi ini untungnya. Ini happy ending.

Cerita, contoh cerita horor.

Tapi happy ending respon dari bos.

Jangan sampai terjadi lagi ya.

Jadi gak apa-apa.

Oh, pasti bosnya pernah ngalamin ini.

Bosnya pernah ngalamin.

Jadi empatinya muncul.

Berapa peta byte itu?

70 juta.

Oh my God.

Iya, ianya 70 juta.

Karena query-nya tanpa

web close. Jadi jalan terus kali ya.

Intinya karena gak ada kondisinya.

Iya.

Iya, BigQuery kan datanya

gede banget.

Makanya jadi big dia disana.

Ya, username-nya jadi

maksimal. Kayak nama samaranya

itu komputasi awan.

Ya, oke.

Komputasi awan.

Risiko horor

dari komputasi awan ya

jalan terus. Beneran

kalau query-nya salah

atau gak dekondisionalnya, beneran bisa

jalan terus non-stop.

Sampai biayanya 70 juta.

Untung bosnya baik.

Baik hati ya.

Dan tidak sombong kali ya.

Dan tidak sombong.

Mungkin dia nyombongin.

Waktu itu anak gue saya

salah bikin kudingan

sampai 70 juta.

Saya biarin, saya maafin ya kali dia

sombong tapi baik hati.

Sombong tapi baik hati.

Kita

tadi mulai jam 8.

Raihan punya cerita gak?

Kalau mau

bercerita boleh lah ya.

Siapa lagi? Ivan?

Mau cerita apa?

Mau pilih cerita yang mana?

Banyak nih.

Mau cerita sendiri lagi apa?

Lagi nyari screenshotnya dimana gitu.

Oh cerita diri sendiri.

Iya.

Udah nemu?

Ivan sekarang.

Cerita pribadi nih?

Cerita pribadi.

Oke.

Jadi suatu hari

ini kasusnya unik

sekali.

Ada web performance.

Jadi kita

di WordPress

dan kita udah push

deploy

sempurna

flowless nyantai.

Tetapi

gak lama kemudian mulai satu-satu

dari tim editorial

mengeluhkan

saya tidak, begitu

login

terus

Chrome nya nge-freeze.

Kayak kehabisan memori.

Kayak unresponsive gitu loh.

Kalau Chrome nya sudah lambat

terus dia muncul

this page is unresponsive.

This tab is unresponsive ya.

Terus disuruh close.

Dan begitu pencet close

gak ada yang bisa di close karena

freeze semua. Semua tabnya freeze.

Oh kayak itu ya. Kayak Windows ya.

Windows managernya entas ya.

Seharusnya gak sih. Karena

jamannya Chrome

itu memperbaiki

masalahnya si Firefox.

Firefox kan.

But somehow this issue

gak tahu kenapa.

Begitu dia sudah kayak, oh snap itu

memang masih bisa pindah tab. Tapi tab yang lain

gak bisa di click. Gak bisa ngapa-ngapain.

Sampe harus close. Oh udah berat banget gitu ya.

Iya. Sudah kayak kehabisan CPU lah

ceritanya.

Dahsyat.

Masalahnya gak

semua user.

Terus

saya gak bisa

reproduce. Sama sekali gak bisa.

Waduh. Saya tanya

teman sekantor. Gak bisa

juga. Saya tanya yang lain.

Gak bisa juga. Saya

sampai

lebih dari

2 jam, 3 jam apa

masalahnya. Sampe mau

makan nasi pun susah.

Mikir terus.

Makan nasi doang susah.

Makan mie. Makan roti

gak apa-apa. Bisa. Makan lontong bisa.

Sampe

nyarah juga. Sampe ke esokannya.

Ke esokannya gak bisa

nih. Saya harus face to face

call sama kliennya. Ayo

lo coba buka depan gue.

Apa masalahnya?

Karena sudah ditanya dia juga

harus tau. Nah, masalahnya

karena ini

kliennya sangat

financial institution ya.

Jadi gak bisa sebarangan

buka DevTool. DevTool itu

di lock.

Di lock.

Di lock ya.

Yes. Terus

jadi kita harus approval

dulu ke networknya

mereka. Minta dibukain

supaya bisa DevTool sementara.

Panjang ceritanya, tetapi akhirnya

bisa. Itu

gak ada horornya. Cuma tinggal

request, approve, sementara

done. Gitu ya. Akhirnya bisa

dipakai buat buka DevTool.

Oke. Saya

tunjukin ininya.

Yang terjadi.

Karena begitu saya bilang, oke

saya bukain

apa namanya?

Dibukain DevToolnya.

Ini yang terjadi.

Siap-siap sound work.

Oh, ini yang di

IOX kemarin ya?

Iya, saya sudah pernah share ini. Ini yang terjadi.

Mana? Nggak ada?

Oh, bentar. Remove dulu.

Ivan, coba lagi.

Remove, add to

stage. Dah.

Oke.

Apa? Boleh diceritakan?

Mengerti dengan

gambar ini?

Enggak. Coba

dijelaskan.

Oke.

Kayaknya dia ngerti, Mas Zain.

Ada apa yang

ngeblokir main thread?

Keep rendering.

Iya, ini. Keep rendering.

Ini CPU

100%. Setelah load,

setelah load,

setelah Windows

.load, dia

terjadi

CPU 100%.

Dan ini terjadi

terjadi.

Sekian banyaknya. Halaman webnya

itu halaman apa?

Hanya halaman WordPress

admin. In

WordPress admin dashboard doang.

Dashboard? Oh, dashboard.

Nggak. Nggak mesti apapun.

Pokoknya apapun. Pokoknya masuk dalam

WordPress admin. Apapun halamannya begini?

Langsung meledak begini.

Dan mulai bermuncul-munculan.

Kadang ada yang bisa,

aman, kadang

tidak bisa.

Begitu dia login

rusak, login rusak. Terus

nanti user yang lain, "Gua nggak, gua baik-baik

saja."

Yang bilang, "Gua baik-baik saja."

Satu jam kemudian kena lagi.

Tetapi ada yang tadinya bisa,

yang nggak bisa. Terus bilang,

"Nggak, sekarang, eh, sudah semu,

udah bagus-bagus saja."

Tapi satu jam lagi kena lagi.

Apa coba?

Saya nggak bisa nge-reproduce sama sekali.

Satu kali pun tidak bisa.

Tetapi user kena.

Di sini,

yang terjadi di sini adalah

ada yang namanya

mutation callback.

Jadi ada

rogue

script

yang memanggil

mutation

callback.

Jadi, kayak,

kalau misalnya terjadi mutation,

dia melakukan event apa?

Ya, mutation observer, betul.

Dia pakai mutation observer.

Masalahnya,

mutation observer,

terus kemudian saya punya yang namanya

debug tool

yang kayak

ada fire, ininya itu loh, kayak

kecil-kecil, kayak elemen kecil-kecil

buat menunjukkan

grafik

berapa banyak

callback yang terjadi.

Ya, ada debug tool itu.

Tapi yang masalahnya adalah mutation callback itu

memutate

elemen lain.

Jadi, recursive ya?

Ya, jadi mutasi recursive kan.

Dia mau mutate elemen lain,

jadi mutasi, dia ketrigger, ya.

Terus, ya udah, gitu aja terus.

Tapi itu tidak menjawab

kenapa satu user bisa,

kadang bisa, kadang tidak.

Ada yang kena, ada yang tidak.

Jawabannya, race condition.

Jadi, kalau script A

duluan dipanggil atau baru script B,

aman.

Tapi kalau script B,

duluan atau baru A,

hancur.

Nah,

yang terjadi,

yang terjadi,

kalau

komputernya yang bagus,

dari kantor,

speknya bagus,

race conditionnya bagus,

sesuai dengan,

sesuai dengan yang kita inginkan,

urutan.

Tapi, kalau

kalau komputernya,

speknya, spek kantor,

yang buat admin aja,

hanya buat editorial,

belum tentu itu terjadi.

Jadi, bisa jadi

B duluan, baru A.

Justru dia yang kena 100 persen.

Harusnya yang

komputer yang bagus yang kena 100 persen,

masih kuat. Ini yang

terkena juga.

Dua hari saya

murad-murad

mendebak ini.

Jadi saya nggak bisa nge-debug langsung,

karena nggak bisa reproduce.

Saya nge-debug itu di kepala.

Di kepala. Apa ini?

Apa ini? Sampai saya lihat-lihat.

Dan hanya bisa satu kali ini,

karena dev tool-nya hanya dibuka jam.

Hanya per jam aja.

Cuma sementara doang dikasihnya.

Karena nggak boleh.

Apalagi, ini harus direcord.

Karena saya nggak bisa ngasih,

eh, tolong lo type script ini

jalankan di console-nya lo.

Itu dilarang banget.

Nggak boleh.

Jadi saya bisa lihat,

oke, tunjuk ini, tunjuk itu.

Dia udah. Saya boleh screenshot ini nggak?

Boleh.

Dan inilah yang terjadi.

Jadi saya perhatikan apa yang terjadi di sini.

Apa yang terjadi di sini.

Satu-satu saya lihatin,

pantengin terus. Sampai tidur.

Inget-inget ini.

Berusaha mensimulasikan di kepala.

Ini mimpi.

Impinya mimpi dev tool.

Akhirnya.

Akhirnya ketemu, ketemu ini gimana?

Gimana akhirnya, oh ini gitu.

Iya, saya kayak

bisa, oh,

kayaknya ini.

Lihat-lihat, satu per satu

javascript yang terparti

atau gimana gitu.

Oh, dia ada mutation callback.

Oh, sial.

Langsung kayak, saya langsung cari

apa ini. Langsung

dan coba nge-debug

mutation callback-nya berapa banyak.

Dan ini dia.

Mutation callback

yang bisa saya reproduce. Akhirnya

bisa saya reproduce.

Bentar ya. Kayaknya nggak bisa

pakai screen capture.

Kalau junior yang handle pasti

udah copot.

Ini dia.

Mutation callback yang terjadi

adalah, ini yang

berhasil saya reproduce di lokal.

Mutation record-nya bisa

terjadi.

36.620-an kali.

Ya, ini di lokal saya ya.

Ya, ini di lokal saya ya.

Saya debug.

Oh ini nih, this is it. Pasti ini.

Terus saya coba, saya ubah urutannya.

Saya coba men-trigger kalau

terjadi kayak gini.

This is it.

This is mutation.

Si nama ini simple bar.

Oh iya, jelas.

Jadi saya safe ya, jawab

saya ya.

Sebenarnya yang

mutation observer itu melakukan

apa sih, fungsinya apa sih di

halaman itu atau di aplikasi

itu?

Inget nggak? Atau nggak boleh

dikasih tahu?

Open source kok simple bar itu saya nggak tahu

gunanya apa.

Somehow dia memutasi third party.

Jadi si third party itu yang

kalau-kalau duluan dia

bersalah.

Jadi kayak plugin gitu ya, pluginnya

WordPress. Dan itu bukan

third party bahkan kayak

plugin lain

atau plugin yang

yang kita upload kan, extension kan

yang kita upload kan. Extension ya.

Plugin-plugin

kalau user install

itu jadi di-load kan, beserta

semua. Yes. Dan simple bar itu

bukan kita yang tulis, bukan

siapa. Jadi third party

yang masuk aja dan

unfortunate aja dia punya

begitu. Jadi rest condition.

Terus

apa diperbaiki berarti

kode yang di upload itu yang

diubah atau alus pull request dulu

atau gimana? Oh pull request harus.

Simple barnya.

Nggak, saya buang aja

simple bar yang ngapain pakai. Nggak dipake juga.

Oh.

Jadi itu sebenarnya nggak kepake.

Sebenarnya nggak terlalu kepake.

Nggak ada fungsi yang

signifikan.

Nest to have aja ya.

Udah buang aja.

Pluginnya buang aja.

Untungnya cukup simple

untungnya ya.

Di kasus saya itu jadi hal yang

bikin sebenarnya.

Jadi kan. Gimana maksudnya rutin?

Tim saya kan sekarang

manage-nya aplikasi Shopify ya.

Hmm.

Oke.

Ya kita punya aplikasi yang itu jalan

untuk Shopify, namun ya

idealnya begitu seperti ini. Cuman

sering ada kasus, dimana

tidak berjalan sebegimana biasa, nyatakan ya

terserahannya terjadi di mereka.

Dan mana kan kalau mereka bukan orang teknis

kan mereka juga nggak tahu kan. Jadi ya

udah jadi rutinitas. Ya

kalau saya pribadi sih mungkin

frekuensinya mungkin hampir bulanan

lain. Atau kadang kalau agak sering bisa

semingguan juga. Biasanya ada

klien ini nggak bisa karena apa.

Ya udah akhirnya kita buat nge-debugging kayak mas

Ivan tadi. Terus di. Kan

eventuallnya solusinya bukan kode

pasifan kan. Solusinya kan plug-in lain

yang diubah atau dihapus. Iya

terpasti.

Bisa jadi

ke orang lain juga bisa kena kayak

dependensi yang lain gitu.

Bisa jadi bunyi. Yang sering terjadi adalah

yang paling sering kasusnya adalah

mereka override

patch.

Oh.

Seperti nxds ya.

Seperti nxds.

Terus di global.

Iya intinya.

Iya iya iya iya.

Kita kan extension untuk top 5.

Mereka kan kadang juga pengen nambah extension

lain. One of this extension

ada yang nakal. Maksudnya mereka

pake override.

Tering banget sih. Jadi kalau sampe

udah jadi intuisi tuh. Oh kalau ada masalah dia

gak bisa patch. Nah ini mah gara-gara

gara-gara ini. Jadi oh ini kita tinggal

bantu aja buka di console.

Ketika dibuka di console kita buka aja. Ini patch

ini dari mana asalnya nih.

Jadi bukan patch yang. Oh dia overriding

patch, patch

vanillanya ya. Iya kan jadi tau

kan. Ini yang override

script mana. Jadi script itu. Saya kasih tau aja

ke pelayan. Ini jangan

pake plug-innya atau jangan pake extension ini.

Karena dia nyalahi

apa ya. Tatakrama

sesama plug-in dilarang

sambil nge-operate. Percaya tuh tatakrama nya gitu ya.

Dilarang operative

functions gitu ya.

Dilarang sambil nge-operate.

Tapi itu tricky juga.

Sistem yang kayak gitu yang ada

apa. Maksudnya open

plug-in system. Maksudnya

kan kaya Crest atau Shopify

atau apapun. Si end

usernya masing-masing bisa

apa install plug-in apapun

entah dari mana pun

yang kombinasinya gak bisa

kita expect kan. Itu

gak ada abis ya dong isu.

Makanya makin kesini Shopify

pendekatannya makin

bisa dibilang makin strict dalam arti

mereka ingin semua

interactive itu di

kalau bisa kita ngejalanin kodonya

Shopify. Dalam arti

kita

kalau misalnya komponen nih

yaudah kita pake komponen yang di perfect Shopify gitu.

Atau kalau misalnya

kita mau munculin modal atau munculin

interactivity

elemen ya. Itu kita

panggil, kita dispatch event. Eventnya

Shopify yang ngejalanin.

Dengan begitu kan harapannya

kan meminimalisir stepping

on top of each other.

Di HTCC itu

bagus untuk Shopify. Tapi

di HTCC ya jadinya kita jadi

nempel banget. Aplikasinya jadi sangat-sangat

attach sama Shopify kan. Padahal kan mungkin ada

juga kita punya aspirasi

ini bisa di port ke yang lain dan sebagainya.

Tantangan tersentiri

kalau numpang di atas platform.

Ya itu

resikonya terparti ya.

Makanya kan

NPM itu

itu tadi pisau

bermata dua.

Satu sisi bagus, semua

ada gitu ya. Di sisi yang lain

resiko kita install

sembarangan juga cukup besar.

Iya hati-hati dengan dependensis.

Dependensis.

Setiap kali NPM install

berarti menambah resiko ya.

Ada yang kita nggak tahu. Bahkan

Taipo aja kadang-kadang bisa

berbahaya kan.

Taipo apa maksudnya? Taipo

bahkan NPM install

monggus gitu. O nya 3

bukan O nya 2.

Taunya beneran ada, ada yang bikin

gitu.

Tapi niatnya udah jelek

gitu.

Karena kan berawal dari open

kan. Semuanya di open jadi ya

semua orang bebas submit terparti

nggak ada

kurasi gitu kan.

Nah cuma bedanya kalau

apa NPM dependensi

ini kan apa ya

kita punya package JSON ya.

Sebahaya-bahayanya

kita masih bisa kontrol, kita masih

bisa ngecek. Tapi kalau yang contoh tadi kan

apa kayak ekosistem

WordPress atau Shopify plugin

masih-masing user kan install

entah apa, dari mana

kombinasinya apa nggak tahu kan.

Nggak bisa dikontrol.

Bahkan kode yang kita baca.

Bahkan kode yang kita baca

kan udah off skated

maksudnya bukan

kode yang bisa

dibaca.

Iya kita nggak bisa kontrol

jangan install ini, jangan install itu

gitu ya. Atau

nggak ada catatannya ya

nggak ada dependensi list, dependensi

listnya nggak ada ya.

Cuma ya itu berarti kan case by case

yang kayak tadi Mas Zain bilang kan

ngomong sama user

berarti ini di konsol cek, kalian

pakai plugin apa aja, oh berarti plugin ini

nggak boleh dipakai ya, kayak harus

each time kayak gitu kan.

Iya, iya, iya, iya.

Sudah ada

CI/CD kayak

tools-tools kayak snike

atau gigguardian

yang bisa ngecek

dependensi

vulnerability kan.

Kita bisa minta

bantuan service

ya

depan the bot setelah terjadi

setelah frekuensi

kalau kayak

snike.io misalnya

kita saat

pull request dibuka, dia bisa

lalu snike dulu

ngecek dulu sebelum bisa

di merge.

Oke, next cerita.

Cerita selanjutnya.

Oke.

Oh iya, terima kasih Mas Zain.

Terima kasih.

Sampai ketemu di Jogja.

Mudah-mudahan kita ketemu, bye-bye.

Oke.

Bye.

Lanjut.

Ini

yang mana ya? Mas Zain mana nih?

Dipilih, dipilih.

Oke.

Kau mau pakai atau nggak?

Bagus itu

ceritanya.

Susah dengarnya.

Iya, nggak jelas ya.

Oke lah.

Saya mau bacakan

cerita yang

dikirimkan oleh Mas Didik. Mas Didik

ada nggak ya? Kayaknya belum ya.

Wicak Sono nih.

Iya, sering hadir juga. Beberapa kali

hadir. Jadi

Mas Didik ini share-nya dari

Twitter ya.

Udah nyubut nama nih, harusnya nyubut

handle-nya aja ya. @did1k

Didik.

Mirip seperti kasus

ya saya cerita kan di Twitter

saya cerita kalau saya pernah melakukan

update tapi lupa where.

Ya mirip katanya.

Tapi kasusnya delete, delete user.

Waduh.

Ceritanya

Mas Didik sedang

menghapus banyak user

yang follow ke satu user. Jadi

ada satu user, mau dihapus nih

follower-nya.

Itu kan. Nah, kalau

di Ruby itu, Ruby

on Rails, itu kan ada, dia

pakai ORM kan namanya

active record.

Mungkin juga.

Mungkin juga. Kayaknya sih

kemungkinan besar ya.

Oke. Jangan dibocorin lah.

Oke.

Jadi,

kalau operasi sederhan nya kan user.follower.destroy_all

Itu ada fungsinya

kalau di ORM-nya

si Ruby on Rails kan.

Jadi

ternyata user.follower

itu bukan

menghapus

followers-nya

si user yang tadi.

Tapi mengacu ke user-nya

yang bukan ke follow record-nya.

Kayaknya bukan memutuskan rantainya.

Iya.

Bukan relasinya yang dihapus

user follower-nya yang dihapus.

Iya.

Sembur, Pak.

Iya.

Bukan unfollow, bukan unfollow.

Bukan menghapus relasi.

Destroy all user

yang merupakan follower

si user ini.

Oh-oh.

Tapi

ini, apa, happy ending.

Karena setiap operasi

ORM, ya,

salah satu keuntungannya ya, ORM

di sini, dalam hal ini,

itu dia ada transaction.

Ya, jadi

ngerti kan?

Habis itu kan ada transaction kan.

Jadi harus sampai selesai semuanya.

Baru commit.

Misalkan contoh

simpelnya itu kalau misalkan kita bikin

kayak ATM gitu ya.

Pas mau ngambil uang

ternyata saldo-nya nggak cukup.

Kan uangnya nggak dikurangin kan.

Padahal kita udah ngambil 50 ribu

ternyata saldo-nya 40 ribu.

Nah itu kan proses pengurangan saldo itu

tidak akan terjadi karena

di rollback, dibalikin lagi ke step

sebelumnya.

Pengennya setelah duitnya keluar terus di rollback.

Di rollback.

Maunya itu.

Ya nggak bisa kan gak ada duitnya.

Kan nggak bisa.

Kan pengennya ada duitnya, setelah

duitnya keluar, di rollback.

Terus duitnya masuk

lagi gitu.

Atau ada yang install,

tiap hari ada

cronjob, nambah 100 juta,

nambah 100 juta, tiap jam 12 malam.

Adminnya,

salah nginstal, dia

nginstal deep freeze ke

server.

Jadi begitu restart, balik lagi

database-nya.

Balik lagi state hour.

State hour enggak, dong.

Ini kayaknya

yang nonton kita nggak ada yang tahu

deep freeze itu apa ya.

Warnet.

Ada warnet yang tahu.

Kayaknya ada warnet.

Warnet tumba-lumba.

Warnet tumba-lumba.

Ya, jadi

untungnya setiap operasi

di ORM itu

ada transaction. Jadi kalau operasi

delete, belum di-commit,

jadi bisa dibatalkan di rollback.

Dan problem

kayak gini kan rentan ya. Karena kan kita

kayak kalau

masuk ke server

atau masuk ke

ya itulah buka

repel gitu kan.

Dan bisa menjalankan ini kan kalau di

rubi gitu kan.

Jadi kita ketik user.followers.destroyall.

Udah, kapus semua itu.

Karena

rentan,

maka apalagi kalau misalkan

dapat access SSH ke server,

lebih parah lagi ya.

Jadi semenjak

kejadian ini,

akhirnya kalau developer mau jalanin

script seperti tadi,

itu harus lewat web application.

Jadi dibikinin web applicationnya.

Dan kalau mau

menjalankan, harus ada

proses reviewnya dulu.

Gak bisa sembarangan ya.

Ya, sama lah ya. Kalau misalkan update

lupaware itu juga, kan kita

mengases database-nya langsung kan.

Ya, walaupun di localhost atau di

server development gitu ya.

Apalagi server production gitu.

Dan itu kan gak boleh kan harusnya ya.

Kalau mau jalanin script-script kayak gitu,

yang boleh melakukan ya harus

pihak-pihak tertentu aja.

Gak boleh semua orang.

Apalagi tanpa supervisi.

Tidak bisa dilakukan.

Harus dalam pengawasan ya.

Harus dengan pengawasan.

Gak boleh sembarangan.

Begitulah.

Nah, kalau Mas Zain tau ya.

Immutable.

Anti-virus.

Betul. Betul inget terus.

Dulu, apa, numpang bikin tugas

apa, internet,

samirul bikin tugas.

Cari inham, ngetik.

Dulu masih kuliah sastra.

Jadi tugasnya ya, tulis pakai

bahasa manusia, dipanjang-panjang.

Terus dapet ide.

Terus cari kodnya

online.

Terus lupa. Gak di-copy

ke flash disk.

Ilang.

Ya, dulu belum jangan di-unboxkan.

Kalau Microsoft

ilang semua.

Mau nangis.

Lucu nih.

Lucu nih Mas Zain.

Mas Zain masuk lagi.

Gara-gara. Ini bukan horror ya.

Bukan horror ya.

Ini komedi situasi.

Ini selalu terjadi.

Ini adalah

kejadian yang selalu terjadi

setiap daylight saving time.

Atau di akhir daylight saving time.

Orang Amerika jamnya

nambah satu jam.

Atau

mundur satu jam.

Jamnya juga jadi berubah kan.

Kayak nanti tuh

Champions League jadi jam tiga.

Tadinya jam dua. Ya, pokoknya

jadi berubah jamnya kan.

Tapi kan lain-lain. Di Eropa sama

di Amerika juga daylight saving time-nya

lain-lain.

Tanggal berapa ini.

Dan US juga

gak semua state.

Tapi ya, US by state.

Kalau Eropa itu kayak ada

apalah kayak Uni Eropa.

Cuma ya maksudnya bukan Uni Eropa sih.

Yang ikut CET sama CEST.

Central Europe Standard Time.

Jadi sekian negara sama

ada yang...

Saya gak pernah berusaha sampai sekarang

tidak pernah mau berusaha mengerti

urusan timezone.

Setiap kali mau liat timezone, saya liat dulu world time body.

Ini gimana?

Gak pernah mau...

Jelimet.

Itu bisa jadi ide itu

kapan-kapan bahas ya punya

handling time.

Karena waktu itu ternyata bisa

berubah-ubah. Beneran maksudnya

waktu itu social

political construct juga.

Time is

relative kata

Einstein. Time itu bukan absolute.

Oke.

Ya.

Siapa lagi ini? Eka. Eka. Eka pilih.

Oke. Bentar. Gua pilih dulu ya.

Pilih-pilih.

Banyak yang mirip-mirip yang tadi sih. Kayak kurang if

atau kurang where. Coba cari yang

varian lain ya.

Ini dari sekian banyak

yang mengirimkan.

Ada satu yang beneran horror.

Bukan horror develop.

Beneran horror.

Bacain, bacain.

Ada yang panjang.

Panjang, panjang.

Yang panjang.

Nanti penutup.

Yang depannya ini sih beneran horror.

Nah ini aja

yang agak panjang.

Dari Panadol. Nama itu ya.

Nama samaranya.

Pusing pasti.

Pusing.

Ini lumayan panjang ceritanya.

Seru sih. Biar kayak film horror beneran.

Awalnya kantor saya

memiliki sepuluh.

Sepuluh BPS di Digital Ocean.

Yang mayoritas isinya

WordPress dan beberapa

aplikasi PHP.

Karena ada kenaikan harga bulanan

Digital Ocean itu berdampak

juga ke pengeluaran bulanan kantor.

Akhirnya dengan inisiatif

sendiri, nah ini key word.

Ini awal-awalnya film horror kan

suka gitu kan. Akhirnya dengan

inisiatif sendiri sebagai IT

yang ditugasi mengurusi.

Saya coba bersihkan web-web lama yang

udah tidak terpakai. Nah so far kayaknya

masih cukup.

Dan saya gabungkan beberapa web

ke VPS yang ada.

Sehingga tersisa 5 VPS saja.

Namun di antara

5 VPS ini ada

satu VPS yang umurnya

cukup tua dan masih menggunakan

Ubuntu 16.

Jadi VPS ini banyak celah

keamanan. Dan kebetulan

VPS ini punya storage yang paling besar.

Padahal dengan tagihan yang sama

VPS baru tidak mendapat storage

sebesar VPS

lama ini. Singkat cerita

untuk mengatasi problem keamanan

saya harus upgrade VPS

lama ini. Nah ini juga

ini juga mulai kalau horror itu

udah mulai tanda-tanda ini.

Nah lanjut. Saya harus

upgrade VPS lama ini dengan install

ulang VPS-nya

menggunakan Image OS Ubuntu

terbaru. Kenapa harus install ulang?

Kan bisa VPS baru aja.

Waktu itu saya berpikiran

saya harus pertahankan VPS

lama ini. Karena storage-nya besar.

Terus kamu beli VPS

baru dengan ukuran storage lama

maka harganya jadi lebih mahal.

Saya putuskan. Saya beli

satu VPS untuk

jadi server sementara atau server

backup. Jadi semua web

di VPS lama saya pindah ke

VPS backup. Sebenernya

kami sudah pakai run cloud. Jadi

lebih mudah migrasi antar server.

Dari 40 web yang ada waktu itu

ada 3 aplikasi yang bukan WordPress

tapi web app berbasis

PHP. Dan 3 aplikasi

ini berkendala saat saya migrasi

menggunakan run cloud.

Sehingga saya harus migrasi manual.

Nah makin serem ini.

Oke lanjut.

Waktu itu saya

dam satu database menjadi

file db.gzip.gz

di direktori

4 aplikasi pertama.

Dan aplikasi pertama saya

kompres ke tar.gzip.

Lalu saya SCP

ke server backup.

Proses transfer file ini agak

lama. Saat itu saya berpikiran

ingin segera menyelesaikan

semua proses ini agar

tagihan server backup nanti tidak

mahal. Nah ini juga sudah tanda-tanda.

Akhirnya saya bikin

session SSH baru

untuk backup aplikasi kedua dan ketiga.

Kebetulan yang ini

memang agak rumit. Jadi saya

harus pelajari dulu struktur

direktorinya. Oke setelah itu

saya dam database kedua

aplikasi ini. Lalu saya kompres

direktori dan SCP ke

server backup. Prosesnya cepat.

Setelah semua web

sudah ada di PPS backup

saya merasa semua sudah aman.

Nah saya lanjut

install ulang PPS lama tadi.

Dan setelah itu saya ketapa

saya kecewa. Karena ternyata setelah

ulang ukuran storage-nya

ikut menyusut

menyesuaikan dengan

harga terbaru. Ini

semikomedi ya.

Setelah install ulang ukuran

storage-nya ikut menyusut

dengan harga terbaru.

Aduh berarti

tadi dua paragraf di atas

perjumpa.

Ya lanjut.

Karena PPS

backup saya tadi harganya

lebih mahal.

Ya karena

tadi harganya lebih mahal, saya harus

kembalikan data web app ke

PPS lama. Memang ini rencana awal

saya dengan asumsi storage

PPS lama tidak ikut

menyusut.

Dan yang pertama kali saya kembalikan adalah

tiga website yang saya backup manual

tadi. Karena hanya tiga website

ini yang kondisinya offline.

Yang lain tetap online walaupun

ada di server backup.

Website pertama oke lancar.

Hanya ada sedikit kendala di

file dem SQL. Karena nampaknya

ada query yang pernah ditambah hacker

yang menyebabkan error.

Tapi semua pasti bisa di atas sih.

Dan ketika

memerlukan website kedua dan ketiga

saya terlalu sangat kaget.

Karena saya

tidak...

karena

saya tidak menemukan file dem

SQL database-nya.

Ayo lo hilang.

Ditambah tadi

saya juga sudah hapus

backup-backup SQL sebelumnya.

Karena saya pikir sudah ada yang

baru. Jujur

saya langsung keringat dingin.

Saya nggak percaya. Karena hal ini

semestinya bisa saya hindari.

Saya cek sampai

dua tiga kali.

Dan ternyata saya baru sadar.

Saya tadi

ngedam directory parent apa

titik dua kali dot dot slash

website saya.

Sementara yang saya

backup

directory titik slash

website saya.

Jadi salah lokasinya.

Salah apa?

Salah path.

Waktu ditar gesit

semua nggak ikut.

Enggak ikut. Yang

levelnya apa yang level di atasnya ya?

directory parent-nya.

Yang tempat yang idam datanya.

Patah saja. Tadi proses SVP-nya

cepat. Karena file demam

database tidak terinput.

Saya lapor atasan terkait

incident ini dengan

persiapkan diri kalau saya bakal kena marah.

Untungnya atasan tidak

marah. Web ini sebenarnya

juga sudah nggak terlalu digunakan.

Tapi ada database penjualan

dari tahun 2018

yang tentunya sangat penting.

Untungnya lagi

ada backup data user

di Google Sheets. Mencakup

90% data user yang ada.

Happy ending

lumayan. Saya menyesal

sudah terburu-buru dalam proses migrasi.

Dalam pikiran saya

mending tagihan mahal daripada

terburu-buru. Terus data hilang.

Nah, habis ini, ini

moralnya. Saya kena mental karena

kejadian ini. Tapi saya juga

jadi belajar kalau hati-hati lebih

penting daripada terburu-buru.

Semoga dengan pelajaran ini saya

tidak akan ulangi kesalahan yang sama

lagi. Jangan lupa untuk

selalu cek file backup sebelum file

asli kamu hapus atau kamu

akan menyesal.

Sekian.

Moral yang bagus.

Jadi

hal yang cukup sering ya.

Hal yang cukup sering terjadi

adalah kita

ngedam tapi kita gak coba

untuk ngerestore.

Itu sering.

Yang pertama dulu kita nge-kompres

tapi gak coba nge-kompres.

Dikompres.

Ternyata

kompresnya susah.

Ternyata salah.

Yang dikompres salah folder.

Jadi

pelajarannya luar biasa ya.

Mantap-mantap.

Cuma tadi kirain ordernya

gara-gara urusan VPS-nya. Kenapa?

Cuma nggak, VPS-nya kan cuma zon

aja. Tadinya setengah mati mau ngirit.

Ternyata setelah di-install ulang ya

harganya sama aja.

Tapi ya gak apa-apa. Emang kayak gitu.

Cuma ternyata masalahnya karena

keburu-buru

jadi salah lokasi backup.

Oke.

Apa lagi?

Mas Zain atau

Mas Nisa atau saya.

Kalau saya. Kedengeran.

Kedengeran, aman.

Dari Twitter nanti lagi yang

serem.

Untung geser time-zonenya

ke belakang. Kalo ke depan

tadi kita...

Emang lebih...

Emang lebih, apalagi yang April nanti.

Yang April nanti kayak lebih

sering diwanti-wanti sih. Karena jadi bisa

tinggalan. Harusnya meeting, kan?

Terus...

Ternyata live streaming kan.

Sangat-sangat tidak

profesional.

Malu.

Ada yang keburu gitu, ada yang

ngelaporin loh.

Ada yang ngelaporin.

Mereka nggak meeting, melainkan live streaming.

Ini kita bacain

dari Angga Dwi.

Di Medsos ya.

Angga. Dari X juga.

Mas Angga.

Kita bacain.

Awal mulai kerja

atau magang, nge-merge PR

tapi base developnya nggak update.

Jadi, kerjaan senior dev-nya

hilang.

Hampir dimakan satu ping itu

kayaknya.

Niat mau delete, duplicate.

Jadi, awal kerja magang,

nge-merge PR,

tapi base developnya nggak update.

Belum deface gitu, belum dipool.

Dev branch-nya belum deface.

Ya, kok bisa ya?

Harusnya kan conflict.

Harusnya nggak bisa nge-pool.

Oh, kecuali force.

Terus resolve-nya mungkin.

Resolve-nya dia salah.

Antara resolve atau dia

force push?

Ya, force push.

Biasanya kalau dev branch-nya,

ya branch-nya apapun belum di

fetch latest,

belum fetch sama gitpool, kan nggak bisa

lagi kan ditolak.

Dan tapi kalau pun force push kan

harusnya nggak mau di recover sih.

Kan bisa pakai git develop.

Iya, masih bisa sih.

Terus yang kedua,

niat mau delete, duplicate roles

di production, pakai post gray,

malah ngehapus 80% data.

Ini beneran serem sih.

Ini langsung ya,

berarti ware-nya

keliru kali ya? Logika ware-nya kali ya?

Iya, ware-nya sekeliru.

Git blame.

Git blame sangat membantu.

Kalau yang beda

lagi apa ya?

Satu tema yang menurut saya perlu di ceritakan juga,

kita sebagai supervisor,

atasan atau lead,

kalau nggak mau dibilang manager.

Kalau ada junior kita

yang lakukan misalnya itu,

dia pernah di posisi,

waktu itu sempat jadi manager kan,

walaupun udah kapal terus sekarang jadi IT lagi.

Tapi misalnya di posisi itu

waktu jadi manager,

saya sempat juga tuh ada yang melakukan

kesalahan di production, tapi itu

dari keripu saya.

Itu gimana ya, jadi lebih,

mungkin karena saya sudah pengalaman tadi,

udah pengalaman bikin production besar.

Ya, udah pernah mengalami ya.

Ada empatinya ya.

Iya, bisa lebih berempati.

Yang penting kan proses post-mortem-nya

sama ya kayak apa,

ya pertama yang nyas break down dulu kan,

kenapa bisa kayak gitu,

terus gimana biar nggak terjadi lagi.

Tidak terulang,

yang penting itu.

Itu pernah kejadian dua kali sih, misalnya satu di

junior member yang permanen, satu lagi di

anak intern. Ini anak intern yang

bukan AI ya?

Bukan AI.

Bukan AI, anak intern.

AI, anak intern.

Kita bisa toleransi lah.

Selama kita punya

blameless acara budaya yang tidak

sering

menyalahkan,

mau dari mana pun itu bersumber,

selama kita bisa menambil pacar dari situ ya,

misalnya.

Saya ada cerita yang bagus lagi sih, masalah cerita ikhlas.

Wah ini seru banget.

Banyak amat cerita horor.

Tapi ini bukan saya

persangkanya ya,

ini lebih ke

change of unfortunate event.

Jadi,

ini ada katanya sama 0 day

attack.

Jadi,

menarik nih.

Sama-sama ring.

Ini mungkin

ntar akan jadi ketahuan juga

pakai stacknya,

jadi kon

perusahaan,

sebuah perusahaan ya,

yang pernah ada disana.

Itu pakai produknya

salah satu,

kita sebut aja, atrasian ya.

Susah mau nyari

samaran ya. Ini perupahan atrasian.

Cuman kan atrasian ada yang versi self-hosted,

ada yang versi cloud.

Nah, karena

cari yang murah, pakai yang self-hosted.

Kalau udah aba baca yang murah,

biasanya agak-agak ini.

Cuman namanya software kan pasti,

tadi yang masalah VPS

tadi kan juga ada,

ketika ubuntu servernya ketinggalan,

pasti ada kekhawatiran security.

Makanya kita harus selalu update.

Ini masalahnya adalah,

ternyata ada sebuah versi patch

yang itu dirilis,

buru-buru,

segera dirilis,

sehari setelah ada

apa yang announced dulu,

bahwa ada 0D incident di situ.

Jadi ini ada sebuah

vulnerability yang sangat signifikan.

Terus,

akhirnya semua yang pakai

self-hosted harus upgrade.

Berarti kan itu orang infiltranya harus aktif.

Jadi kita

dapet notifikasi tuh, tim infiltranya dapet notifikasi.

Ini saya juga gak tau kejadiannya,

saya tahu dari post-mortemnya ya.

Jadi saya mau menyampaikan kembali.

Sayangnya saat,

jadi ada gap tuh, kalo gak salah hari Jumat

diumumkan.

Jadi idealnya ya kalo mau cepet karena yang diuruskan,

ya sebetulnya harus dikejarin.

Cuman masalahnya kalo gak salah waktu itu

lagi cuti orang infiltranya.

Jadi lagi cuti,

terus ya...

Ini juga udah tanda-tanda horror,

ada unsur buru-buru,

terus orang yang biasanya in charge

paham banget lagi cuti,

ini udah 2 komponen cerita horror.

Ya gitu.

Terus, kan sebenernya kalo kita

ada backup-nya, cuman backup-nya juga

waktu itu gak unavailable, saya lupa gimana ceritanya.

Pokoknya intinya semua orang yang seharusnya bertanggung jawab

upgrade itu

lagi gak bisa dan

selama ini sih gak ada masalah berarti ya.

Kita kadang telah satu hari, dua hari, oke lah ya.

Nah,

ternyata

apesnya adalah

dalam rentang waktu itu,

ternyata server-nya kena serang.

Ternyata server-nya itu kena serang.

Serangannya itu

meng-encrypsi

semua

meng-encrypsi semua AC database

di...

bukan, meng-encrypsi

volumenya,

meng-encrypsi volume

VPS siapa sih?

di storage, saya gak tau.

Volume ini,

storage-storage kan?

Iya, volume storage-nya.

Ini yang volumenya ter-encrypsi, sehingga

kan jadi gak bisa di access kita tanya-tanya.

Akhirnya rusak,

coba di restore dengan berapa macam, dengan back-up segala macam.

Gak bisa juga karena apa saya juga

aku bilang tuh kalau salah,

saya lupa kenapa back-up jadi gak bisa di restore ya.

Yang jelas back-up yang terakhir bisa di restore itu

adalah back-up 6 bulan sebelumnya.

Atau bahkan kalau gak salah setahun sebelumnya bahkan.

Saya lupa, pokoknya jauh banget.

Waduh.

Dan itu produknya produk confluence.

Jadi,

sehingga yang terjadi adalah dokumen,

dokumen selama setahun terakhir itu hilang.

Hilang.

Nah ini sound, apa soundboard

perlul train

narus.

Iya namanya, itu kena ransomware atau di-encrypt?

Kena ransomware gak?

Seingat saya,

sepertinya ransomware,

seingat saya, cuman entah

akhirnya ada yang mengontak buat

minta an-encrypt atau enggak, saya lupa juga sih.

Tapi pada akhirnya,

gak bisa di-an-encrypt juga pada

dan semua

akhirnya macam-macam itu solusinya.

Kan yang hilang dokumen ya.

Jadi, sebenernya gak kritikal

langsung ke bisnis ya. Jadi bisnisnya masih bisa berjalan lantar.

Soalnya kan, ya namanya dokumen kan

itu kan banyak keputusan yang di situ kan.

Konfluence jika hilang semua berarti.

Konfluence doang untungnya yang hilang. Jadi jira masih aman.

Nah,

ya akhirnya selama itu,

bahkan disampai berbulan-bulan

selanjutnya kita hidup dengan

gak ada hidup seperti itu, sehingga

kita harus menulis ulang.

Kalau butuh, menulis ulang seingat-ingatnya.

Lalu ada juga upaya untuk ke-backup

dari email. Jadi kan setiap

perubahan konfluence kan kita ada email ya.

Nah itu ada yang cobain bikin script

buat patch.

Given the list of email, given emailnya datanya

bisa di-patch, jadi

restructure kembali ya dokumennya.

Tapi ya, akhirnya ini mesti keberhasilan.

Gara-gara itu,

saya akhirnya, karena saya sudah gak

percaya konfluence lagi.

Semua dokumen saya saya taruh di markdown.

Saya push di gitu.

Jadi mau kena force push, mau kena

apa, kan kita bisa revlog lagi.

Ada sejarahnya, ada

historinya. Plain text.

It's the best.

Dan historinya ada di semua.

Ada di semua, iya.

Komputer gitu kan. Jadi bahkan

kalau setengah komputer kebakaran masih ada

setengah komputer lain gitu.

Distribusi.

Udah kayak bitcoin aja.

Bisa terlogis.

Iya, iya, iya, iya.

Masalahnya adalah jadinya kita

jadi bisa tau,

misalnya kita mau nge-link pull request ini

kait kemana,

atau bahkan kalau kita

kode pun jadi gampang nyambungnya

ke dokumen. Itu pokoknya sih.

Cuman kelemahannya ini hanya solusi yang bisa

dipakai untuk para developer juga kan.

Karena waktu itu kan yang kena kan gak

banyak developer. Banyak orang bisnis yang

mengambil diri sama git.

Saya baru ingat yang horror ini

gara-gara denger ada

upgrade kecil. Karena ini bener-bener kecil.

Jadi ini bener-bener cuma jadar sehari-dua hari.

Cuman in that patah cuma weekend aja.

Tau-tau senin, konfluence

hilang aja dulu.

Oke.

Saya baru ini juga ada satu kisah

yang benar-benar horror.

Bentar, ini ada yang cerita juga nih

di komentar. Aku pernah salah

klik drop data production.

Padahal niatnya drop staging.

Untuknya ada backup.

Nah ini, yang kejadian-kejadian

kayak gini tuh

klik itu di mana? Di aplikasi

desktop kah? Atau di PHP MyAdmin?

Kalau zaman dulu PHP MyAdmin.

Biasanya sih kayak gini tuh

PHP MyAdmin kayak gini ya.

Atau

sip panel.

Atau panel-panel.

Biasanya juga sip panel

mungkin satu account ya.

Hostnya, production sama stagingnya

satu account.

Beda database gitu.

Di database-nya ada di sebelah kiri itu

ada dua gitu ya.

Ada banyak gitu ya.

Ivan mau cerita?

Iya, ada beneran horror

ini baru inget.

Saking horonnya tuh

karena terlalu sering

kena horror, jadi kadang ya sudahlah

jalan aja.

Yang penyebabnya

bukan saya.

Saya adalah orang yang ga risk horror.

Tunggu, ini scary movie berarti ya?

Horror cuma komedi.

Udah jalanin aja.

Gimana kejadiannya?

Berawal dari update

dan itu menggunakan

arcing, tau ya?

Minus-minus delete.

Ini pakai

Gatsby ya.

Gatsby lagi.

Gatsby lagi.

Gatsby.

Jadi ada

change request yang dilakukan

oleh tim yang lain. Tim yang di

sebelah sana.

Di belahan dunia yang berbeda.

Tapi bukan company saya.

Jadi company-nya si client.

Internalnya mereka.

Merubah keperubahan.

Dan

push deploy.

Setelah deploy

tiba-tiba semuanya 404.

Jadi sedikit konteks.

Jadi situsnya ini menggunakan static file.

Jadi semua situsnya menggunakan static file.

Jadi static file itu dipisahkan sama...

Ada path.

Di belakangnya WordPress.

Tetapi

di depannya

page-nya itu dibuild static file.

Nah, si...

Ya, betul.

Nah, di satu sisi

ada aplikasi lain yang menggunakan

Gatsby. Yang

nge-push

nge-push

aplikasinya ke folder tertentu.

Di path itu.

Sama si...

Developer yang sebelah sana

melakukan perubahan

di deploy.yml.

Di github action-nya.

Somehow

dia

tidak melakukan set terhadap

variable folder

yang terakhir. Lupa.

Kosong.

Akhirnya, ini

arsing.min.min.delete ke root folder.

Some word, some word.

Ke root folder aplikasi

yang page yang lain ya.

Jadi bukan root folder-nya server ya.

Bukan root folder server.

Tapi anggap aja /

/group

/country

/...

Jadi yang dia targetkan itu adalah yang ke country.

Jadi 1 country

page-nya itu belong.

Dan itu ada 8 market.

Ada 8 country yang kena.

Dan

saya kan santai ya.

Itu bukan tugas saya. Maksudnya yang

maintain itu, aplikasi itu bukan

saya. Bukan tim saya.

Tim yang mereka.

Tiba-tiba

saya langsung di ping dari Slack,

di telefon,

di emergency call,

terus kemudian

like,

"Ivan, help!"

Aduh, itu aja udah serem tuh

terima mesej gitu.

What? Can you

join the call now?

Okay?

I need a raise.

Saya duduk

begitu masuk

di teams,

itu udah kayak

udah

ada berapa lembar itu ya?

Tiga lembar tuh orang.

Satu team. Banyak.

Ada,

anggap aja satu screen itu ada

16. Berarti kali 3 sudah

30-an orang dalam satu itu.

Saya kan santai

aja. Kenapa?

The page

is absconding.

404 semua. What?

Okay.

Saya masih

mengapa? Okay.

Right now we need to restore everything.

Okay.

Do we have backup? No.

That storage server

doesn't have backup. I did tell you

long time ago. But you didn't say

you don't want it. Maksudnya

saya udah bilang,

di server storage itu

butuh ada backup

bekanisem. Tetapi mereka bilang

gak ada

dana buat itu. Gak bisa.

Gak ada. Ceritanya gak ada.

Karena semua data yang

saya pegang itu kan

yang file yang saya punya itu kan

sebenarnya datanya ada di WordPress.

Di CMS ada. Jadi

sebenarnya datanya ada.

Tetapi kan, berarti

kalau gak bisa backup, berarti gue bilang gak bisa

backup, berarti gak bisa

auto, gak bisa cepat.

Ya, start now.

Berarti gue harus, saya harus

ngerestore. Saya harus

ngerestore itu pages-pages yang

ada di CMS nge-rebuild ulang.

Dan prosesnya itu

saya mulai call dari jam

setengah empat pagi dan baru

selesai jam 11 malam.

Dan sepanjang itu kayak

20 jam.

Kayak ada senjata di ini ya.

Setengah empat sore

sampai jam 11 malam.

Itu kayak

kayak

30 orang itu

kayak ngetodong pistol. Yang ini sudah

belum. Yang itu sudah belum.

Masih-masih market protest itu.

Ayo cepetan. Ya,

mau gimana? Gue gak bisa cepetan. Ini kan gak build

satu-satu.

Kayak ada Kim Jong Un di belakang gitu ya.

Iya, satu market itu bisa

5000 pages, ada yang 6000

pages, yang nge-build satu-satu.

Gak pake Gatsby nge-buildnya.

Bukan, kalau Gatsby itu kan cuma satu aplikasi

doang, satu path doang. Sedangkan

di CMS... Oh, yang statik-statiknya.

Yang di CMS kan ada

1000 pages. Anggap aja ada 1000

pages ya. Berarti kan

1000 pages itu kan di-create

static file-nya, send,

di-batch sih, tetap

batch. Tetapi batch-nya itu kan butuh.

Butuh waktu.

Dan ada 8 market.

Satu marketnya bisa 1000, 2000,

3000 pages.

Kalau marketnya besar bisa 5000 pages.

Jadi,

bisa gak beberapa... Jadi,

saya tuh kayak ngelayani

masing-masing customer

itu. Please, homepage

dulu dihidupin.

Homepage-nya dulu dinyalain. Ini sudah banyak

customer marah-marah. Yaudah.

Saking banyaknya, kan

kalau ada page tertentu yang mau

dihidupin atau dicepetin,

saya bisa pakai command line.

Nyalain, satu-satu, ketek-ketek...

Akhirnya makin lama makin banyak, dan

satu-satu gak bisa.

Ini kitab tiketnya.

Yang mau gue nyalain

duluan, tulis di sana. Nanti gue follow up.

Kalau sudah selesai, gue cek tangan.

Jangan ping gue.

Oke, gue lagi kerja. Jangan nge-ping.

Tulis aja di situ apa yang lo mau.

Bilang aja, makin didistract, makin

dipanggil pagi, ini makin

gak selesai-selesai.

Gue bilang, gue mau makan dulu ya, jam 7 ya?

15 menit?

Oke, oke.

Mau pipis aja permisi.

Astaga.

Terus jam setengah 11 baru beres semua.

Besok,

besoknya saya diminta yang bikin

ACA.

Kok gue bikin ACA?

Rute Cause Analysis.

Rute Cause Analysis.

Postmortem.

Postmortem.

Di cari-cari,

ternyata arsingnya

salah. Ini yang bikin

siapa? Kok bisa tahu? Ada

lognya? Kan ada,

kalau, kan ada di kitab,

rurikosnya kan ada.

Di mana salahnya kan ada.

Tapi di gitabnya emang ada

arsingnya, gak ada kan?

Di gitab action.

Di gitab action.

Iya.

Jadi sebenarnya

pace-nya semua gak semua,

hancurnya gak semua.

Selamatnya tau kenapa.

Saya ada selamatnya,

ada untungnya di sini.

Karena di gitab action saya kasih time out.

Oh, jadi

gak kuruk.

Arsing.

Arsing delete-nya karena file-nya terlalu

terlalu banyak.

Akhirnya

gitab action itu time out.

Karena time out gak hapus semua.

Tetapi banyak juga

yang kehapus.

Lebih banyak yang kehapus daripada yang tinggal ya?

Nggak, nggak. Lebih banyak yang tinggal.

Tapi kalau nge-rebuild itu kan,

saya gak bisa, kalau nge-re-publish

semua pages, gak bisa

pick and choose. Kalau sekali

button nge-re-publish,

ya semuanya di-re-publish.

Saya hanya bisa

komen lainnya itu nge-re-publish

yang satu-satu.

Ya.

Padahal kata kayak Mas Yogi

di sini, Rm in Rf,

ya arsing min min delete itu

sama aja nasibnya sama Rm in Rf.

Rm in Rf itu

komen

yang paling horror. Temen-temen

pada masih pakai yang original

di alias, kalau saya pakai

alias ya, jadi masuk

ke trash.

Di lokal ya, di lokal ya.

Bukan di production, di production mah.

Nggak gitu-gitu.

Aliasnya kebalik banget, aliasnya CAT mas.

Kat di alias

ke Rm, Rm, Rm.

Kebalik, kebalik.

Jahat banget.

Ah jahat banget.

Kayaknya ngerjain komputer

orang aja sih kayak gitu ya.

Iya.

Di CAT, tapi

dia bikin, atau film apa, tapi

Rm in Rm ininya.

Di film, sedih banget. Dia trauma

loh nanti, dia mau belajar film

lagi loh.

Gara-gara

film jadi rusak laptopnya.

Film etec

my.conv

terus ilang.

Ya.

Itu cerita kasing.

Kayak dulu, apa, dulu prank Windows

ngahatus system

32.

Oh iya itu.

Itu jaman brontok

kayaknya ada begitu-gituan juga tuh.

Iya.

Makanya di-proceed.

Iya, ngomongin nge-prank

saya pernah nge-prank

atasan.

Wah.

Jadi yang horror itu atasan saya.

Iya.

Jadi sebenernya ngga nge-prank

gimana-gimana ya. Disini temen-temen

ada yang tau

cerita tentang John Titor ga sih?

Ngga. Ngga tau ya?

Ngga tau. John Titor.

Jadi itu ada

cerita apa ya?

Urban Legend lah ya, Urban Legend.

Jadi katanya ada seorang

yang namanya John Titor, itu dikirim

dari dia naik

mesin waktu.

Oh kayaknya sama-sama.

Ke jaman sekarang.

Cuma ada fotonya gitu.

Misinya itu dia harus mengambil

satu server atau apa gitu disini supaya

menyelamatkan dunia gitu lah kira-kira ya.

Jadi

pada saat itu saya dikasih kerjaan karena

waktu di kantor itu bikin aplikasi.

Sama ini kayaknya intermittent juga.

Kadang 100%

database

MySQL-nya, server MySQL-nya.

Tapi

ga tentu gitu. Akhirnya

atasan saya, CTO-nya

dia bilang, "Tolong dong bikinin monitoring

system, kalo udah mau 90%

saya di email katanya."

Kasih peringatan gitu.

Saya bikin lah, selesai scriptnya

jalan

saya bikin emailnya, tapi emailnya saya

bikin itu. "Halo, saya

John Titor dari masa depan. Server

kamu bentar lagi 100%.

Tolong di restart."

Gitu kan.

Ga lama tiba-tiba

dia ke

meja saya tanyain,

"Kenal John Titor ga?"

"Iya."

Itu kan. "Dari masa depan?"

"Iya." Tadi dia email katanya gitu.

"Nih, baca, ngeliatin ga?"

Gua dengan

berusaha untuk menahan

tawa, "Wah, bahaya itu."

Pura-pura ga tahu aja.

"Hah, beneran?"

"Ngga, bukan gue."

Akhirnya dia balik lagi ke ruangannya dengan

masih

itu, masih

syok dengan

itu. Dan dia ga tau

kalo itu gue. Begitu dia

ketawa-ketawa. Akhirnya

ga tega kan, 30 menit

kemudian gue campurin, gue bilang, "Itu gue yang

bikin."

Ini prom-nya yang diubah ya, Mas?

Atau gimana?

Email-nya sebenernya email lokal sih.

Harusnya dia tau kalo ngeliat header.

Tapi kan from-nya kan

John Titor, gitu.

Kerain-kerain spoofing ini, spoofing prom-nya.

Engga. Cuman itu aja.

Email-nya from, John Titor.

Terus email-nya email

kantor,

gitu kan. Tapi kan mungkin ga

kebaca atau gimana. Terus ya

subjeknya ya dibikin

se ini mungkin,

gitu. Pake bahasa Inggris segala.

Dan ternyata dia juga tau

cerita itu. Dan percaya jangan jahat.

Maksudnya dia langsung

panik. Ini siapa yang

ngirim?

Mas Riza, ininya

apa?

Sense of joke-nya tinggi juga.

Sense of keberanian aja sih, nge-prank-nya

ke bos.

Kenapa tau sense of humor-nya si bosnya?

Bukan masalah sense of humor mas Rizanya.

Sense of humor bosnya.

Iya sih. Itu kalo dipikir-pikir itu

salah tempat ya.

Bercandanya terlalu, terlalu

ekstrim ya. Tapi kan

ya jujur sih

gua ga nyangka kalo ternyata dia

sepercaya itu.

Karena kan dia ngasih

kerjaan kan. Kerjaannya adalah memonitor

database dan bisa restart otomatis.

Harusnya kan tau.

Ya udah lah gitu.

Jog task-nya udah jelas gitu.

Iya cuman ya

parodi-parodi aja.

Kok percaya banget?

Oke. Cukup.

Oh ada lagi nih satu.

Mas Dade.

Kenapa kamu dipecat dari perusahaan

web3 ya?

Saya membuat

bug di smart contract kemungkinan

attacker

menarik semua likuiditas.

Gak ngerti.

Gak ngerti saya.

Itu kayak blockchain.

Oh blockchain gitu ya?

Infinite money.

Terus ada

yang menyerang.

Terus?

Gak ini kayaknya jog deh.

Oh jog itu.

Bukan drill ini.

Bukan beneran ya.

Oke. Baiklah.

Cukup.

Gimana mas Zain?

Saya ingin lagi satu lagi.

Bug yang di Cloudflare.

Eh.

Oh ada lagi.

Terakhir.

Karena, saya lupa Cloudflare atau mana ya?

Saya ingin saya Cloudflare.

Jadi dia sempat down karena ada

ada

use effect.

Yang.

Use effect? Oh!

Ada yang kirimin juga tool.

Ya gitu lah.

Jadi ini ada use effect,

something wrong.

Selalu reload, reload,

reload, reload.

Ada yang guling Cloudflare use effect-nya?

Ada sih.

Ada, ada, ada. Cloudflare ada. Ya, kejadian itu dia.

Ada, ada.

Ada juga yang apa, yang kirimin ceritanya

juga ada tuh. Gara-gara use effect.

Berbahaya juga ya? Use effect-nya.

Beran lalu ini. Baru-baru lalu ya.

Iya, iya, iya.

Ya, kalau di dalam

di dalam use effect-nya

ada fetch, terus enggak

dikasih parameter kedua yang empty ray,

ya dia kan ketrigger terus.

Terus setiap ketrigger,

dia nge-fetch lagi.

Ini ya?

Blunder.

Blunder is effect.

Mistakenly included problematic object.

Jadi ini ada. Jadi sebenarnya

depending on the area ada. Tapi ada object

yang problematic. Jadi object-nya

ter...

Ini ada post-mortem-nya langsung dari cluster-nya.

Oh, yang ini bukan?

Deep dive into Cloudflare.

Ya, menariknya mereka

mau terbuka sih. Cluster lumayan

terbuka sih.

Ya, ada post-mortemnya ya.

Ini juga sih.

Ya, horror tapi campur comedy gitu.

Comedy slapstick kayak orang

ke playset kulit pisang gitu loh.

Ya, karena ini masalahnya

dependency ray, kalau kita punya

object di dalamnya, dan object-nya selalu

di-recreate, jadi always new object.

Iya.

Tapi tenang, ada solusinya. Dari minggu lalu

kan kita belajar bahwa

react sekarang ada compilernya.

Oh iya, iya, iya.

Bisa di-automasi tuh.

Bisa di-cegah.

Bisa di-cegah.

Benar-benar ada juga tuh.

Karena ada compiler, jadi ada satu lagi

apa ya? Use effect event atau?

Use effect event ya.

Yang baru.

Kita berbahas kemarin.

Baru dibahas kemarin.

Oke.

Ngomong-ngomong minggu lalu,

minggu depan kita bahas apa?

Apa ya? Liat dong.

Nggak nyambung ya.

Dikita.

Iya, sama-sama ada unsur minggunya.

Minggu depan. Topik minggu depan.

Apa tuh

RBAC?

Ini baru ya?

Ini baru ya?

Role-based authentication, authorization.

Wah kaya salah gini, kaya salah gini.

Panjang dia.

Ya, berbobot ya kalau ngasih topik.

Berbobot, berbobot ya.

Ya itu RBAC kan role-based

kaya apa?

Kalau read, misalnya

boleh public.

Tapi mau saya apa?

Ya layer keamanan lah.

Siapa yang layer

atau type user apa yang

boleh write operation.

Iya, ini seriusan nih.

Kaya sama,

udah jadi blog post ini.

Kita tinggal bacain doang.

Oh,

dicontohin lah Rafael ya.

Waktu itu kita minta

dia ikut

nongol di stream.

Gak mau, dia malu-malu.

Belum mau, belum mau.

Bagus ini.

Kemarin juga, waktu request sebelumnya

juga begitu.

Pake mermaid segala nih, keren banget.

Ini mah bukan request ini.

Nah ini dia udah punya topik,

disuruh tolk aja udah.

Bener kan?

Apakah ini menggunakan AI?

Ya gak apa-apa juga sih.

Ya gak apa-apa kalau boleh ngerapihin.

Tapi kan apa dia bisa

menstruktur kontennya.

Rajin sekali Kaisa.

Ini disort berdasarkan.

Beda buku,

beda buku.

Buku apa?

Getting real.

Atau apa?

For our world.

Testing dengan play.

Yang kemarin ya?

Apa itu?

Shape Up?

Belum baca sih Shape Up?

Semua bukunya.

Harus didundang lagi.

Nanti kalau bahas-bahas Basecamp,

penarik sih.

Iya, Basecamp.

Menarik ya.

Semua bukunya, seingat saya sudah semua.

Semua bukunya.

Remote.

Remote.

Getting real.

Shape Up.

Shape Up.

Yes.

Bagus-bagus sih.

Getting real sama Shape Up juga

menarik sih.

Sekaligus dua gitu.

Kan satu-satunya belum

untuk becah.

Saring berhubungan kan?

Getting real dulu lah yang tipis.

Formulaannya kan getting real ya.

Ya, tapi

uang tanya bagaimana bagusnya?

Coba Mas Zain yang sudah baca.

Oh ya, Mas Zain dulu.

Getting real dulu sih

harusnya.

Getting real dulu.

Project management ya.

Getting real mulai dari ide sampai implementasi.

Dan bukunya gratis.

Jadi bisa dibaca juga

sama temen-temen yang lain.

Saya bacanya sebagai audio book.

Jadi saya buka

di safari.

Saya

kalau bisa hatam dua buku ini

karena

saya bacanya sambil nyetir

saya buka safari ya.

Sambil cuci piring.

Saya nyetir waktu itu

Njepjabali.

Jadi lumayan hatam.

Berapa efektif sih

audio book masuk gak sih

ke WhatsApp? Kalau saya kayaknya

harus baca dan harus highlight

tergantung orangnya.

Kalau gue surface level sih.

Otak gue single credit masalahnya.

Jadi kadang misalnya

jalan atau apa

pengennya kan sambil

sambil denger podcast ya.

Biar masukin lulus kalian.

Itu tuh kayak denger

samar-samar. Jadi kayak inget

jaman sekolah atau kuliah gitu loh

guru terangin. Sebenernya ngerti intinya

itu tentang apa. Tapi makin lama kayak

suaranya tuh makin melayang-layang jauh

jadi kayak gak onsen. Tapi

kalau sekarang sih denger podcast misalnya

podcast tentang AI atau

webdave atau apa. Kalau ada poin yang

menarik, beneran apa

rewind, mundurin detiknya.

Berhenti dong, berhenti

di pinggir jalan nih, di trotor

berhenti dulu. Harus berhenti ngedenger.

Kalau mau mas.

Gak, gak berhenti.

Tapi mau saya dengerin yang fokus

baru masuk sepenuhnya. Cuma kalau

sambil jalan, sambil aktivitas lainnya

kayak denger sekilas. Jadi kayak

cuma bisa bilang

di podcast X, speaker

A dan B tuh ngomongin tentang

topik Y gitu.

Kayak cuma topik besarnya.

Tapi kayak poinnya apa. Terus kan

pemahaman macam-macam ya. Ada yang cuma

word-nya. Tapi kan sebenernya yang

dalam itu kayak why, how.

Nah, itu semua gak bisa jelasin

kalau cuma dengerin.

Tapi sebetulnya

kalau... apa?

Jangan pake node.js.

Otaknya. -Single-threaded ya?

-Iya. -Single-threaded ya?

-Iya. -Single-threaded ya?

Oke, good channel.

Good channel.

Jadi, pokoknya itu

kalau sambil jalan kaki,

sambil liat apapun, pokoknya

kalau otak pake buat aktivitas apapun

ya itu kayak main thread-nya

tuh occupied sih.

Nah, cuma tetep...

gak apa salah biar sekilas,

minimal sekilas ada bayangan

bahwa ada topik ini minimal

ngerti topiknya menarik atau enggak.

Tapi kalau pengen paham beneran sama pengen tahu

sebetulnya apa sih, kayak beneran harus baca sih.

Harus baca apa?

Mata, liat

layar atau liat, ya

biasanya layar. Udah jarang

aku fisik.

Liat layar, baca, terus kalau mau masuk

beneran ya kayak beneran harus nge-highlight

terus bikin komen apa

dikasih note sendiri

di obsidian atau

itu lainnya. Kalau mau beneran

paham kayaknya satu-satunya cara

cuma itu sih kalau gue pribadi.

Betul.

Salah satu yang missing

yang saya kehilangan itu kalau

baca atau

dengerin buku gitu ya, audio book atau

podcast itu, enggak bisa nge-highlight

pengen di-highlight, lulus catatan

segala macam gitu, sulit

gitu. Jadi, kalau

harus audio book, harus

siapin catatan

atau harus ambil

ini, highlight menit

keberapa.

Itu tetap enggak bisa

multi-tasking kan, sulit.

Saya bukan punya obsidian

buat misalnya enggak lagi dengerin buku

atau podcast. Kalau udah hal penting

saya taruh di

menit keberapa yang bahas tentang apa

untuk menit lagi. Karena emang susah

di balisin.

Bisa jadi ide

ini tuh, bisa jadi ide

aplikasi tuh.

Eh, jadi topic

juga bagaimana developer

mencatat.

Mencatat.

Ada tools-nya, caranya

kan ada metode-metodenya tuh

dari buku apa

gitu, cara bikin catatan

belajar lah, belajar

framework atau apa, baca

dokumentasi. Terus habis itu

gimana cara menyerap dokumentasi itu

supaya jadi

ya, selain dipake

selain dipake langsung. Jadi

mungkin ditulis catatan. Jadi, penasaran atau

Igor juga membahas ini, buku Getting Real

sekaligus ditambahin

nanti bumbunya

pengen tahu temen-temen itu

menyelesaikan

tuduh setiap

harinya gimana sih, apa teknik, apa yang dipakai.

Ada

GTD

Eat That Frog

Macem-macem kan.

Jadi

pengen tahu sekalian

belajar bareng

gimana cara menyelesaikan tuduh

alat temen-temen.

Kan yang lain pakai atronim kayak gitu kan

para GTD

P-A-R-A

G-T-D

Ada gak sih yang pakenya

YOLO, siapa yang

message atau slash atau pecah

teriak marah-marah diselesaikan.

Mana yang marahnya makin

yang marah-marahnya makin galak dan makin

makin penting

orangnya yang marah-marah

dan tingkat kemarahannya

makin tinggi itu yang pertama

makanya waktu

gue lagi ditodong

marah-marah gak bisa catat disitu

gue minta satu orang lagi yang dari sisi klien

lo urutin yang mana

yang menurut lo penting

gue kerjain satu-satu dari atas

sampai bawah

gak bisa

kiri-kanan

gak ada yang jadi

gak bisa

terus gak ada ini juga kan

jadi gak ada dokumentasi

kalau gak ada dokumentasi gak bisa jauh

ok minggu depan

kita bahas tentang

Getting Real untuk malam ini

sekian dulu

terima kasih mas Zain udah diundang

ditodong

ditodong lebih tepatnya ya

bukan diundang ya ditodong

sampai ketemu

lain kesempatan

selamat malam, sampai jumpa lagi

bye-bye

atau mungkin telah kesekian kali melihat

untuk membandingkan kembali dengan lainnya

jika Anda mencari tahu mengenai

layanan web hosting terbaik

kami pastikan Anda berada di tempat yang tepat

dengan Domainesia

dapatkan pengalaman menggunakan layanan

hosting yang lebih baik

dengan SSD berperforma tinggi

dalam infrastruktur cloud yang telah dioptimalkan

untuk kebutuhan personal maupun bisnis

teknologi ini memungkinkan Anda

memperoleh layanan yang lebih stabil

serta proteksi dari korupsi data

hosting Domainesia juga telah

mendukung Node.js, Python

Ruby, Go, PHP, Java

serta Binary Linux

lebih dari 200.000 pelanggan

telah mempercayakan layanan hosting

di Domainesia, kepercayaan yang kami

jaga dengan garansi Abden 99,9%

serta garansi

uang kembali 100%

buat website Anda lebih

mendunia, segera berali web hosting

Domainesia

Deskripsi asli dari YouTube

πŸ—£οΈπŸ•ΈοΈ Selasa malam waktunya #ngobrolinWEB! Bertepatan dengan malam selasa kliwon, kita akan membacakan kisah-kisah menyeramkan yang dikirimkan penonton dan pendengar melalui form dan juga medsos ⏲️ Mulai mengudara jam 20:00WIB. Mari kita ramaikan! Episode kali ini merupakan kolaborasi dengan Domainesia. πŸ“¦ Langganan Cloud VPS Turbo? Gunakan kode: NGOBROLINVPSDN β†’ 50% OFF, bisa berkali-kak! 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 .