Kisah-kisah Menyeramkan dgn @zainfathoni
Ringkasan Episode
Bantu KoreksiEpisode 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
2 Okt 2024
Ngobrolin Drama Trademark & Open Source
Episode ini membahas drama perseteruan antara Matt Mullenweg (co-founder WordPress) dengan WP Engine, sebuah perusahaan ...
5 Feb 2025
Ngobrolin Video Player
Episode ini membahas perjalanan Imbre Nagi, seorang Cloud Engineer yang berbagi pengalamannya dalam mempelajari front-en...
9 Okt 2024
Ngobrolin Deno
Episode ini membahas tentang Deno 2, runtime JavaScript/TypeScript alternatif Node.js yang dibuat oleh Ryan Dahl (pencip...
Suka episode ini?
Episode baru setiap Selasa malam. Dengarkan lewat YouTube, Spotify, atau feed podcast favoritmu.
Memuat komentar dari GitHub Discussions...
Jika komentar tidak muncul karena ekstensi privasi / adblocker, kamu bisa berdiskusi langsung di GitHub Discussions .