File Upload Strategy - Ngobrolin WEB
🗣️🕸️ Selasa malam waktunya #ngobrolinWEB! Malam ini akan mendiskusikan topik yang dikirimkan oleh penonton setia kita tentang berbagai strategi mengunggah file. Tentu saja bersama Ivan dan juga Eka. 🔔 Akan mulai mengudara pukul 20:00WIB ya. Yuk mari diramaikan! Kunjungi https://ngobrol.in untuk catatan, tautan dan informasi topik lainnya.
Ringkasan Episode
Bantu KoreksiEpisode ini membahas berbagai strategi upload file dalam pengembangan aplikasi web. Eka dan Ivan berdiskusi tentang trade-off dari setiap pendekatan mulai dari local storage, database blob, hingga cloud storage seperti S3, GCP, dan Azure. Diskusi dimulai dengan cerita horor pengalaman masa lalu ketika menyimpan file di server yang sama dengan aplikasi, masalah scalability, hingga solusi modern menggunakan cloud storage. Topik ini diajukan oleh Kaisa yang memberikan konteks diskusi yang lengkap.
Poin-poin Utama
- •Local storage (menyimpan file di folder server) adalah solusi paling sederhana namun memiliki masalah scalability ketika aplikasi perlu horizontal scaling
- •Menyimpan file sebagai BLOB di database umumnya tidak direkomendasikan kecuali untuk use case sangat spesifik seperti avatar kecil yang jarang berubah
- •Cloud storage (S3, GCP Storage, Azure Blob) adalah best practice untuk aplikasi modern karena mendukung horizontal scaling dan CDN
- •Biaya cloud storage biasanya dihitung berdasarkan bandwidth transfer (transfer in/out) bukan jumlah file atau storage size
- •MinIO adalah alternatif open source yang kompatibel dengan S3 untuk self-hosted atau development environment
- •Tools modern seperti Docker, Docker Compose, dan Local by Flywheel mempermudah development workflow
- •Pemilihan strategi harus berdasarkan analisis trade-off antara performa, keamanan, biaya, dan user experience
Transkrip Bantu Koreksi
0:00(musik)
0:15Halo!
0:22Halo-halo!
0:24Udah nggak boleh katanya telolet-telolet.
0:27Hah? Nggak boleh?
0:29Iya, di jalan.
0:31Di itu? Apa?
0:34Eh, nggak tahu ya?
0:36Antara telolet itu apa yang punya-nya pejabat, nggak boleh bunyi lagi.
0:39Wup-wup-wup-wup.
0:41Itu strobo.
0:43Oh, strobo ya, nggak boleh ya?
0:45Strobo ya, namanya ya.
0:47Masa sih nggak boleh?
0:49Iya, kemarin di Razia.
0:51Nggak mengganggu sih.
0:53Emang kena Razia ya sekarang ya?
0:55Iya.
0:57Kalau bukan lagi tugas kena negaraan, nggak boleh pakai.
1:02Oh, iya.
1:04Nanti semua jadi tugas negara.
1:06Oke, anyway.
1:08Selamat malam semuanya.
1:10Semoga...
1:12Malam ini...
1:13Banyak umur dan sehat selalu.
1:15Semoga...
1:17Semoga teman-teman semua baru gajian ya, akhir bulan, awal...
1:21Besok, awal bulan.
1:23Hmm...
1:25Jadi semangatnya masih ini ya, masih full ya.
1:29Biasanya kalau gajian itu awal bulan apa akhir bulan?
1:34Kalau diaktifkan, akhir bulan.
1:37Tergantung pesan kan?
1:39Jadi sebelum tanggal 1 udah...
1:41Jadi minggu terakhir ya teman-teman?
1:43Hari ini, hari ini.
1:45Kepat hari ini.
1:47Kalau teman-teman yang lain, saya rasa mungkin tanggal 25 udah gajian ya.
1:52Beberapa, beberapa yang lain.
1:54Pemilik ini, biasanya kalau bagi founder atau pemilik...
1:58Biasanya kalau lagi gajian itu agak merengut dia.
2:02Agak pusing gitu.
2:04Langsung berkurang...
2:05Cash flow.
2:06Cashnya berkurang langsung kelihatan gitu ya.
2:08Karena langsung mikirnya cash flow gitu.
2:11Betul, betul, betul.
2:17Kalau pekerja remot, tanggal berapa?
2:21Sama kan? Sama aja kan?
2:2325 gitu?
2:24Enggak lah.
2:25Kita jatuhnya freelance ya.
2:31Atau apa kontraktor namanya?
2:33Kontraktor lah ya.
2:35Kontraktor, jadi 3 hari-harian?
2:37Bisa jadi, 3 hari-harian.
2:41Kalau kayak teman saya, maunya dia mingguan.
2:46Jadi setiap minggu kirim voice.
2:48Ya, setiap minggu kirim voice.
2:50Jadi macam-macam lain.
2:53Kalau ada yang company-nya per...
2:59Biasanya kirimin voice, nanti +5 hari, +10 hari baru cair.
3:10H+5 lah, bisa H+5 sampai H+15.
3:15Lata-lata begitu.
3:16Jadi bukan kayak ATM deh, nggak ada yang kayak ATM setau saya,
3:21yang kayak kirim besok keluar nggak ada.
3:23Biasanya H+15.
3:25Tapi nggak otomatis kan harus kirimin voice kan ya?
3:29Ada yang sistemnya sudah...
3:32Sudah reka ring gitu langsung?
3:34Ada yang sistem invoice, ada yang system invoice, ada yang nggak.
3:41Kalau tergantung negaranya sih mas.
3:44Kalau beberapa negara yang...
3:49Kan biasanya kalau kita mengirumkan voice kan itu buat bukti ke mereka sebenarnya.
3:55Buat pencatatan ke accounting mereka dan untuk urusan-urusan pajak sebenarnya.
4:02Anyway, ada macam-macam lah caranya.
4:05Dan saya menuruti apa katanya aja, bagaimana begitu caranya sistemnya.
4:11Ya begitulah, dilakukan.
4:15Wah, iya iya iya eka muncul.
4:18Muncul.
4:21Sudah selesai kerjanya.
4:23- Udah. - Belum.
4:24- Tapi belum. - Eka nih gimana?
4:26- Apa? - Invoice-nya per...
4:30- Invoice-nya per bulan, per... - Gaji.
4:33Gajinya per harian, mingguan atau bulanan.
4:37Iya.
4:39Bulanan.
4:41- Bulanan. - Perlu kirim invoice ya?
4:43Iya.
4:44- Oh kirim tiap bulan? - Iya.
4:48Kalau nggak kirim berarti nggak digaji gitu.
4:51- Enggak, tapi diikuti. - Lupa misalkan.
4:53- Jadi pernah. - Oh diikuti.
4:54Iya kalau, iya di proses kalau udah kirim.
4:57- Dan... - Kan outside contractor bahasanya ya.
5:01Iya benar, providing ya consultancy lah.
5:05Intinya menyediakan jasa expert.
5:10- Oke, oke. Menarik. - Terus adur dingnya gitu.
5:13Apanya jadi kayak itu emang hal yang wajar untuk menggaji,
5:17membayar jasa suatu apa?
5:21Consultant.
5:23Hmm.
5:25- Iya. - Oke.
5:28- Iya, kita lihat gaji. - Kalau founder?
5:30- Kalau founder? - Kalau founder, kenapa?
5:32- Digaji nggak? - Founder nggak digaji, Pak.
5:34Digaji.
5:36Tapi dipotong gajinya.
5:38- Nggak full, nggak full. - Demi kemaselatan perusahaan.
5:44Tapi maksudnya itu gaji, start, bukan income, bukan apa gitu.
5:50- Itunya salary. - Salary.
5:52Salary, posisi sebagai founder.
5:54- Nggak lah, kan ada posisi. - Iya, kita menggaji.
5:57Kan ada jabatan ini juga, operasionalnya.
6:02- Oh. - Iya.
6:04Jadi ibaratnya kalau misalkan masih founder-foundernya aja, misalkan berdua, bertiga.
6:09Kita seolah-olah kalau misalkan duitnya belum ada, misalkan masih bootstrapping,
6:14masih kumpulin duit, kita menggaji diri kita sendiri, sepantasnya.
6:19Karena kita kan bekerja.
6:21Kecuali kalau kita meng-hire orang untuk kerjain pekerjaan kita, kita nggak kerja, ya mungkin ya.
6:28Nggak digaji, ya.
6:30Enak nih, kapan-kapan kita cerita suka-duka.
6:35Suka-duka startup dan founder dan cashflow.
6:40Kalau sekarang kayaknya masih berduka ya, jadi kayaknya nggak enak ceritanya ya.
6:46Nantilah ya, kalau sudah mulai ada titik cerah ya.
6:51- Selamat malam. - Kalau udah ganti jadi...
6:54Apa itu? Abis winter apa sih? Spring ya?
6:56- Kalau udah jadi spring. - Spring.
6:58- Kalau udah jadi spring ya, kalau udah exit ya. - Take winter.
7:02- Amin. - Amin.
7:04Eh ngomong-ngomong exit itu EA, tau nggak sih EA? Game?
7:10- EA? Oh iya. Kenapa? - EA yang football itu.
7:14- Dibeli kan? - Iya, dibelis.
7:16Iya, 900 triliun coba.
7:19- Dibeli sama siapa? - Diakuisisi.
7:22Dibeli sama investor Silver Lake sama Saudi Arabia punya konsorsium gitu dah.
7:29- Waduh. - Sultan-sultan lah, konsorsium.
7:32Sepada sultan-sultan membeli EA.
7:35- Itu kayaknya kalau yang Saudi pemerintah deh. - 900 triliun.
7:38Duitnya dari pemerintah.
7:41Iya, mereka pemerintah itu bikin konsorsium, yaitu yang...
7:46Apalah yang beli-beli pemain bola in real life juga, itu punya klap-klapnya itu kayak intinya dapet duit dari pemerintah.
7:55Karena pemerintah sadar, ya duit minyak kan, minyak kumi kan nggak bakal ada forever.
8:00Jadi ya emang diputar lah.
8:03Saya cuma mendoakan aktifin exitnya kayak gitu ntar.
8:08- Amin. - Exitnya kayak EA.
8:11- Amin. Triliun ya. Jangan nyampe sih. - Amin, amin, amin.
8:16Amin, amin.
8:17- Kita makan-makan dong, Red. - Oke.
8:22- Gila. - Oh iya. Boleh.
8:24Makan-makan sama minum-minum pasti. Kalau nggak selalu gini kan, seret kan.
8:30Itu juga.
8:32Oke. Terlalu jauh belanturnya.
8:35Terlalu jauh belanturnya. Terlalu jauh belanturnya. Terlalu jauh belanturnya.
8:41Terlalu jauh belanturnya. Terlalu jauh belanturnya. Terlalu jauh belanturnya.
8:46Terlalu jauh belanturnya. Terlalu jauh belanturnya. Terlalu jauh belanturnya.
8:51Terlalu jauh belanturnya. Terlalu jauh belanturnya. Terlalu jauh belanturnya.
8:56Terlalu jauh belanturnya. Terlalu jauh belanturnya. Terlalu jauh belanturnya.
9:00Terlalu jauh belanturnya. Terlalu jauh belanturnya. Terlalu jauh belanturnya.
9:04Terlalu jauh belanturnya. Terlalu jauh belanturnya. Terlalu jauh belanturnya.
9:09Terlalu jauh belanturnya. Terlalu jauh belanturnya. Terlalu jauh belanturnya.
9:14Terlalu jauh belanturnya. Terlalu jauh belanturnya. Terlalu jauh belanturnya.
9:19Terlalu jauh belanturnya. Terlalu jauh belanturnya. Terlalu jauh belanturnya.
9:24Terlalu jauh belanturnya. Terlalu jauh belanturnya. Terlalu jauh belanturnya.
9:29Nanti ini bisa kita upload file-file-nya dulu. Nah upload-nya itu bisa ke contohnya Amazon S3.
9:37Boleh, boleh, boleh.
9:39Nah cara untuk upload ke Amazon S3 itu kita butuh kaya ada signed URL.
9:44Tapi strategi-strategi upload file itu gimana coba kita bicarakan malemnya.
9:49Iya, segway yang luar biasa ya. Mantap gak?
9:54Mengalakan view transition ya. Jadi transitionnya itu lebih hebat daripada view transition.
10:02View transition internal. Webdev banget.
10:08Jadi Ivan gak cuma bisa mengeluarkan jok-jok receh ya, tapi juga bisa mengeluarkan transition.
10:15Terpijuk bermutut dan niche webdev.
10:19Iya, jadi topik malam ini kita harus berterima kasih kepada Kaisa.
10:24Karena selain memberikan ide topik besarnya, dia juga memberikan topik diskusinya sangat lengkap.
10:33Jadi mengurangi pekerjaan kita. Kita tinggal baca aja. Enggak sih. Tinggal diskusi aja ya.
10:38Jadi terima kasih Kaisa. Mudah-mudahan Kaisa nanti bisa bergabung ya di chat ataupun kalau mau langsung juga bisa.
10:47Masuk aja. Bisa kan. Udah di-share. Udah di-share.
10:51Udah-udah. Tapi dia kayaknya gak mau. Malu katanya.
10:56Belum muncul juga itu kayaknya. Mungkin belum. Iya, Kaisanya belum ada.
11:00Jadi saya udah kasih di bawah sini untuk link-nya, tapi Kaisa menjawab kayaknya gak dulu.
11:09Hai, bagus banget. Gue belum sempet belajar lagi. Iya, ini maksudnya kontennya bagus banget.
11:18Kontennya luar biasa sih. Jadi intinya adalah Kaisa ini pengen punya apa ya?
11:29Pengen berdiskusi dengan kita semua tentang bagaimana strategi.
11:35Karena opsi-opsi itu trade of trade. Kayak pro dan konten.
11:40Baik itu performa keamanan biaya sama pengalaman pengguna atau user experience.
11:47Jadi masing-masing ada plus minusnya. Gimana?
11:51Cuma mau kasih intro aja kenapa file upload strategy ini penting.
11:59Sebelum kita pergi ganti ke masing-masing pilihannya itu.
12:07Jadi saya mau mengajak temen-temen semua berpikir seperti ini.
12:11Kita punya web application. Awalnya kecil. Masih di share hosting misalnya.
12:18Tentu waktu kita upload file, ya udah. Taruh aja di upload folder.
12:23Selesai kan? Kita cuma tinggal dari sisi aplikasi kita link ke upload folder.
12:30www.lizafalmy.com/upload/
12:34Lama file-nya. Kayak gitu. Beres ya. Gak usah pusing.
12:38Pusing? Kalau penuh?
12:41Iya. Habis itu storage-nya penuh.
12:44Terus sama share hostingnya bilang, atau si dominasi. Boleh gak sih sebut?
12:50Ini maaf katanya storage-nya penuh. Harus segera di upgrade.
12:56Upgrade-nya kemana? Biasanya ke VPS.
13:00Yang storage-nya lebih besar.
13:04Jadi bisa punya sendiri. Tadinya kan mungkin storage-nya cuma 10GB.
13:08Atau ada kadang share hosting yang menawarkan unlimited storage. Ada.
13:15Tapi downside-nya dia nanti akan batasi mengatakan i-notes-nya harus maksimal sekitar 2000.
13:23Jadi hanya bisa total jumlah file-nya itu cuma bisa 2000 file.
13:29Meskipun unlimited storage. Tapi jumlah file-nya terbatas.
13:34Share hosting dan unlimited juga itu udah gak logis sih. Jadi pasti ada limitasi somewhere.
13:41Cuma ternyata maksudnya exactly apa limitasinya itu ya? Jumlah.
13:45Ya biasanya i-notes-nya dibatasi.
13:48Oh jadi kalau misalkan nih kita punya file gede-gede 1GB, 1GB gitu.
13:54Tapi dibatasi hanya 20. Jadi kita bisa punya 20GB?
13:59Iya.
14:02Asal file-nya sebesar itu. Bukan kalau file-nya kecil-kecil.
14:05Hanya bisa punya 20 file. Tetapi at some point dia akan batasi secara bandwidth.
14:11Bandwidth juga dibatasi nih ya?
14:13Iya. Atau bisa dibatasi juga secara i-notes.
14:18I-notes. Itu jumlah file.
14:21Jadi identifier file-nya itu kan.
14:23Jadi kayak ini ya.
14:25Tapi harus file itu kan.
14:29Kayak paket internet lah ya.
14:31Ada FUP-nya.
14:33Terus KPE-nya misalnya.
14:37Oke gimana kalau saya upload zip file satu yang gede gitu.
14:43Bisa aja kan.
14:45Dibatasi. Nanti misalnya dibatasi dari.
14:47Oke kalau dari PHP max upload limit-nya paling cuma bisa 64 MB.
14:53Contohnya. Atau dari sisi FTP dibatasi juga jumlah bandwidth yang bisa upload.
14:59Macam-macam lah akal-akalan montirnya.
15:02Lalu lanjut di-upload ke VPS. Masih satu server.
15:06Ya udah. Karo aja seperti biasa.
15:09Pertanyaannya ternyata yang pakai aplikasi risafami ini makin lama makin banyak.
15:15Butuh scale. Scale yang bukan vertikal.
15:21Karena kalau vertikal terus oke tambah storage, tambah storage.
15:23Tapi eventually penuh.
15:26Butuh yang namanya scale secara horizontal.
15:30Akhirnya nambah server.
15:32Pertanyaannya kalau nambah server.
15:36Storage-nya harus dimana?
15:38Iya jadi distributed kan.
15:40Iya kalau upload-nya ke server A tentu disimpan di server A.
15:44Kalau upload ke server A tentunya upload.
15:46Nanti kalau di-link ya file-nya gak sincron.
15:50Gak sincron iya.
15:52Jaman dulu akal-akalan montir saya dipakai 2 server tapi satu di-share pakai remote mount.
16:03Jadi kayak share ini pakai SSHFS di-remote.
16:09Ya kalau kalian.
16:11Tapi SSHFS kan ada bottleneck lagi.
16:17Ada request menuju sana.
16:20Akhirnya aplikasinya jadi lambat otomatis.
16:24Disitulah yang namanya file upload strategy yang sudah diberikan si Kaisa ini.
16:31Kepakai.
16:33Berarti tool-nya meremkan bukan cuma file upload strategy-nya sendiri.
16:38Tapi infradesign-nya kan ini.
16:41Iya termasuk.
16:44Jadi ada yang makanya harus pakai namanya network attach storage.
16:50Bisa pakai network attach storage.
16:53Jadi satu dibounding ke beberapa tempat.
16:58Atau kayak pakai cloud storage.
17:01Jadi memang storage yang terpisah.
17:03Pertanyaannya kalau pakai cloud storage seperti S3, GCP, Azure.
17:07Bagaimana kita bisa memastikan yang sah hanya aplikasi kita saja yang bisa upload ke sana.
17:15Gak boleh orang lain.
17:18Itulah sejarahnya.
17:21Atau pola pikirnya kenapa kita butuh file upload strategy.
17:28Dah itu introduksinya. Sekarang kita bahas apa saja strategy-nya.
17:33Local storage ini kayaknya penamannya agak ambigu ya.
17:37Local storage-nya browser.
17:39Bukan, bukan. Ini maksudnya yang tadi di file upload ya.
17:42Ini yang tadi disegut event itu kan.
17:45Di satu tempat sama server kita beneran image-nya ya.
17:50Di situ juga bareng file code source code.
17:54Jadi kita kalau di waktu pada saat pengembangan atau bikin aplikasi kayaknya ini yang paling sederhana ya.
18:05Kita sediakan satu folder atau bikin satu folder.
18:08Upload something gitu ya.
18:10Terus kalau misalkan kita mau pisah berdasarkan user.
18:15Upload/username/apa gitu.
18:18Atau berdasarkan tahun, bulan, tanggal, dan seterusnya gitu ya.
18:21Itu bebas kita isikan.
18:23Atau mungkin random.
18:25Kejadiannya banyak masalahnya seperti ini.
18:28Ada contohnya pernah saya memperbahagi aplikasi Blat Merah.
18:34Sebut saja.
18:37Sebut saja.
18:39Inisialnya, inisialnya.
18:42Gak usah.
18:44Saya waktu itu di hire sebagai outside consultant menanyakan.
18:50Kita kebanjiran traffic.
18:53Dan gak bisa handle lagi gitu.
18:56Terus gimana cara optimize performance.
18:58Saya masuk, ya ampun.
19:00Aplikasinya pakai web server.
19:04Setiap di uploads bikin kopinya puluhan kali gitu.
19:08Web server-nya di Windows Server.
19:13Terus kemudian pakai XMPP.
19:17Pakai XMPP.
19:20Iya.
19:21Terus pakai share folder dari Windows yang lain.
19:25Dan di taruh di sini jadi share folder sebagai storage-nya.
19:29Dan ditambahin XMPP-nya di-clone sebanyak.
19:32Jadi kayak supaya me-ibaratkan web server-nya itu ada 10.
19:39Maka XMPP instansnya ada 10 dijalankan.
19:42Ini ya.
19:47Gak pakai EES, pakai XMPP.
19:51XMPP?
19:53XMPP tau gak XMPP?
19:55Sam, Sam.
19:56Iya Sam.
19:58Serius?
20:00Yang buat PHP itu kan?
20:02PHP MySQL itu kan?
20:04Apa aja PHP MySQL ya?
20:06Kalau belajar tutorial WordPress 15 tahun lalu pakai itu pasti.
20:11Dia gak pakai WordPress.
20:13Pake code igniter waktu itu server-nya.
20:17Oke.
20:19Dan dia teriak.
20:21Gak bisa saat traffic banjir dia gak bisa lagi ngerimot ke server itu.
20:27Ya iyalah abis.
20:29Ya iyalah.
20:30Sam berapa sih kemukaran user?
20:33Ya.
20:35Komputernya dimatiin aja langsung mati servisnya semua.
20:38Iya.
20:40Itulah.
20:42Itulah yang terjadi akibat developnya di lokal.
20:48Tetapi mungkin dikejar waktu.
20:50Akhirnya apapun yang ada di lokal ya udah copy aja dulu ke production.
20:55Itu bukan di copy.
20:57Yang ada di lokal dijadikan production.
21:00Mungkin.
21:01Kegunaan set up lokal.
21:04Iya bener set up lokal dipakai buat production.
21:07Jadi bukan di copy.
21:09Itu kan set up lokal kan.
21:11Kalau yang buka dia doang sama intranet networknya dia doang mah gak apa-apa.
21:15Gak masalah.
21:16Tapi set up itu dipakai buat production.
21:19Apa user-nya concurrent user-nya ratusan ribuan.
21:23Iya.
21:25Nah ini orangnya muncul nih Kaisa.
21:27Terima kasih ya Kaisa.
21:29Tulisannya luar biasa.
21:31Buat kita diskusinya seru.
21:33Di bug mode masih nyala.
21:35Ya pastilah.
21:36Sam kan development.
21:38Ini gimana ya antara ketidaktauan atau apa ya.
21:43Maksudnya.
21:44Tapi itu kejadiannya.
21:46Sudah bukan di tahun 2020 ya.
21:48Sudah kayak 6-7 tahun yang lalu lah.
21:51Tapi kayaknya sekarang masih ada yang begitu.
21:54Ya mungkin bukan.
21:55Ya mudah-mudahan.
21:56Menurut saya masih pernah lihat.
21:58Mudah-mudahan gak ada dengan adanya generasi baru.
22:02Atau kayak lulusan-lulusan haktifate.
22:05Yang sudah mulai kemana-mana perginya.
22:07Merubah konsep berpikir itu.
22:10Dan munculnya apa?
22:12Kayak platform as a service gitu kan.
22:14Jadi kita bisa uploadnya pakai.
22:16Ya.
22:17Sudah banyak berubah pola pikir.
22:19Tapi kayak ini cerita 7-8 tahun yang lalu ya.
22:23Jadi banyak kejadian yang sudah berubah dari semuanya.
22:27Cuma saya cerita pengalaman saja.
22:29Hmm.
22:31Ya.
22:32Ketidaktauan sih.
22:33Dulu saya juga pernah mengalami itu.
22:36Sampai, apa namanya kayak billing.
22:40Billingnya langsung naik.
22:43Sampai saya kena SP.
22:46Terus harus potong gaji untuk membayar itu.
22:50Bertang jawab lah gitu.
22:52Itu cerita horor ini sebenarnya.
22:55Horor juga.
22:57Cerita horor ya.
22:59Gua gak punya pengalaman kayak gitu selain karena...
23:02Belum, belum, belum.
23:03Pas kerja, eh jangan. Pas kerjanya.
23:06Ya paling pas baru belajar sih ngoprek WordPress.
23:10Itu kan WP Image itu pasti yang melar duluan kan.
23:14Jadi penuh gara-gara itu.
23:15Udah gitu doang sih.
23:17Apa pertama kali tau konsep image.
23:20File image.
23:22File binary image ditaro di server buat.
23:25Yang apa?
23:26Space yang buat source code-nya juga ternyata jadi berat.
23:30Terus setting apa? Cache-nya revert.
23:33Terus kalau cari-cari di tutorial ya udah berarti solusinya CDN.
23:38Kayaknya knowledge waktu itu sih cuma di situ doang.
23:44Cuma untungnya belum pernah kena horor apapun.
23:47Kejar tayang biasanya.
23:49Bener kejar tayang.
23:50Antara kejar tayang atau memang...
23:53Belum tau konsep antara...
23:56Computer personal, personal computer sama server.
24:00Enggak tau juga sih.
24:02Ya mudah-mudahan kejar tayang ya.
24:05Kayak sinetron.
24:08Oh kalau dulu ada yang bikin service.
24:12Sum to production.
24:13Jadi sum-nya dicemplungin semua ke server langsung jalan gitu kan keren ya.
24:18Satu folder sum di zip terus di server dilakukan otomasi untuk melakukan deployment.
24:27Tapi sekarang sih sudah nggak ada yang kayak gitu ya saya.
24:30Maksudnya kalau dari tools-tools ya sekarang tuh DevEx-nya sudah jauh lebih bagus.
24:35Contohnya kalau di dunia WordPress contohnya ada namanya tools namanya local.
24:43Dulu namanya local by flywheel contohnya gitu ya.
24:47Nah tapi sekarang namanya local doang.
24:49Jadi local ini kita bisa create instance baru.
24:56Pakai container.
24:58Terus kemudian langsung WordPressnya terinstall blablabla bisa akses.
25:02Dan langsung bisa generate live link.
25:05Nah nanti pakai infrastrukturnya si local itu generate live link.
25:10Jadi kalau misalnya kayak mau nunjukin si klien itu bisa ngeproxy gitu ke local-nya kita.
25:17Tapi hanya sementara nanti generate ulang nanti live link-nya berubah lagi.
25:22Jadi kalau si Cloudflare juga punya kan ya pakai yang namanya tunnel.
25:28Tunnel-nya si Cloudflare kan juga bisa.
25:31Kalau ada lagi yang satu lagi.
25:35NG Rock.
25:37NG Rock juga hal yang sama.
25:39Tunnel ya.
25:41Cuman itu kan misalnya kalau kita nggak tahu fungsinya kan bisa berbahaya kan.
25:46Maksudnya itu digedikan server juga.
25:48Ya kalau beneran home server atau home lab ya ok lah gitu kan.
25:53Tapi kalau.
25:54Ya lagi lagi sih kalau dibuka ribuan user sekaligus.
25:57Tergantung fungsi jangan dipakai yang untuk urusan publik.
26:05Betul.
26:09Some juga dibuka ke production kan buat publik akhirnya.
26:14Kalau untuk aplikasi internal juga tetap aja nggak bisa kan.
26:18Maksudnya nggak kuat gitu.
26:20Suatu saat akan ini juga kan.
26:23Tapi yang jelas karena developer experience-nya juga udah berkembang bagus.
26:32Kalau di kan kalau dulu ingin install gitu ribet ya.
26:36Kita mau install apa aja ribet.
26:38Install mySQL ribet.
26:39Install APHP ribet.
26:40Kalau sekarang kan udah pakai Homebrew.
26:43Pakai APT Gate.
26:45Udah pakai Kontonerize.
26:47Kayaknya udah lebih sederhana.
26:49Docker.
26:50Docker Compose Up.
26:52Iya.
26:53Docker Compose Up udah selesai gitu kan.
26:56Gak perlu install macem-macem lagi gitu.
27:01Jadi memang sekarang sih udah ada.
27:03Walaupun tools-tools seperti itu masih banyak.
27:06Masih ada.
27:07Kalau di dunia-nya PHP Laravel kan masih ada tuh.
27:10Walaupun udah nggak pakai same lagi tapi ada kan ya.
27:13Laravel kan punya server sendiri.
27:16Iya.
27:17Nggak.
27:18Udah pakai versiening.
27:19Ada tools-nya.
27:22Ada aplikasinya untuk PHP versi berapa gitu.
27:26Oh iya, iya, iya.
27:31Buat versiening.
27:32Yang kalau misalkan kita pakai, note biasa pakai NVM lah.
27:35Atau semacamnya ya.
27:38PSP ENV.
27:40Ya.
27:42Apa Laravel?
27:45Laravel Hurt.
27:47Hurt iya.
27:48Hurt iya.
27:49Bener nggak?
27:50Iya.
27:51Yang ada GUI-nya.
27:56Yang mirip lah.
27:57Bukan mirip ya.
27:58Maksudnya fungsinya seperti SAM jaman dulu ya.
28:03Laravel Hurt.
28:04Iya.
28:06Jadi tetap aja kan harus punya apa ya.
28:11One Click PHP Development Environment Zero Dependency Zero Headage ya.
28:15Tapi ini kan buat development ya.
28:17Bukan buat deployment ya.
28:20Hati-hati juga.
28:22Terus opsi selanjutnya tuh database.
28:24Jujur ini kayaknya apa opsi yang belum pernah liat,
28:28belum pernah dengar ataupun atau liat siapapun pakai deh.
28:32Sebenernya apa ya kecuali baru development baru testing ya.
28:37Blob disimpen di database tuh nggak kebayang besarnya kayak apa.
28:42Saya pernah mengintip sebuah aplikasi.
28:50Saya nggak punya.
28:51Tapi saya tidak bisa sebut namanya.
28:54Dan saya mengintip aplikasi.
28:57Jadi dia, X ini berhasil mendump aplikasi dari situs.
29:04Dan di aplikasi itu menyimpan image tangkapan dari KTP disimpan di database.
29:13Hah?
29:15Oke.
29:17Sebenernya.
29:19Dan ini bukan situs plat merah bukan.
29:23Jadi sebuah kak seperti ini apa tuh namanya yang buat pinjol.
29:29Kan pinjol kan merekam KTP.
29:32Iya iya iya KTP.
29:34Ada tuh pertanyaannya di bawah.
29:36Pinjolnya ini tidak resmi.
29:40Jadi si X ini.
29:42Pinjolnya tidak resmi.
29:44Dan si X ini sedang merusak.
29:56Dan mengambil database.
29:59Iya maksudnya jahilin.
30:01Teman saya menjahilin si pinjol yang tidak resmi ini.
30:05Dan mengambil database-nya.
30:07Dan database-nya ternyata isinya.
30:09KTP disimpan di database.
30:11Sebagai blog.
30:13Saya juga pertama.
30:15Kenapa isi disimpan database?
30:17Oh ternyata ada ya.
30:19Tapi pertanyaannya.
30:21Kayak back up.
30:23Ukuran back up.
30:25Kan database ada daily back up-nya kan ya.
30:27Biasanya itu kayak standar lah.
30:29Eh gak kebayang size-nya seberapa.
30:31Gede sih.
30:33Gak tapi pertanyaan saya adalah.
30:37Kenapa si database menyediakan kolom untuk blog?
30:41Tidak aja sih.
30:45Ada blog ada long blog ya.
30:49Kalau gak salah.
30:51Karena bisa jadi menyimpan ini jaman dulu kan bisa menyimpan binary.
31:01Iya, menyimpan binary.
31:03Termasuk image kan.
31:05Image kan nanti di-convert jadi binary disitu.
31:07Iya.
31:09Binary.
31:11Use case-nya nyimpan file gitu ya.
31:13Nyimpan file gitu ya.
31:15Text segala macem ya.
31:17Karena ini kan fitur dari jaman 90-an ya.
31:2390-an.
31:25Jadi jaman itu butuh.
31:27Apa, maksudnya ukuran image.
31:29Terus apa, seberapa sering orang nyimpan image.
31:31Masih kecil ya ukuran image.
31:33Iya.
31:35Sama usage aplikasi pada umumnya hari ini.
31:39Jaman itu kan mungkin simpan CLI-CLI tool.
31:41Atau utility-utility kan.
31:43Atau DLL.
31:45Biasanya DLL-DLL.
31:47Simpan kan disitu.
31:49Iya, file-file dependency, benar-benar.
31:51Cuman sekarang udah tidak direkomendasikan lagi ya untuk nyimpan di Blob ya.
31:57Dan Blob kan gak bisa diindeks.
32:01Gimana cara ngeindeks Blob?
32:05Yang gak bisa.
32:07Gak bisa.
32:09Oke.
32:11Mungkin kita bingung.
32:15Tapi bisa jadi kalian coba berpikir sebuah aplikasi.
32:17Pernah dengar Sazem gak Sazem?
32:19Yang mencari lagu perdasarkan kita itu ya.
32:23Kita bercemandung ya.
32:25Bisa juga.
32:27Tapi kan kita misalnya, oh ini lagu apa ya.
32:29Lagi di kafir.
32:31Terus kita pakai Sazem bisa tahu.
32:33Kebayang gak bagaimana Sazem menyimpan datanya?
32:37Enggak.
32:39Kan data itu kan bentuknya music kan.
32:43Terus melakukan pencarian berdasarkan sampling.
32:51Tentu kan disimpan di database kan.
32:55Nah disitulah.
32:57Kita bicara dulu ya.
32:59Mungkin.
33:01Ada algoritma cara untuk mengkompres.
33:05Tapi yang jelas data yang disimpan di database.
33:09Pasti bentuknya bukan teks seperti yang kita bayangkan.
33:15Iya.
33:17Kalau misalkan nih.
33:19Saya akhirnya memutuskan untuk menyimpan image avatar.
33:25Avatar mungkin kecil lah ukurannya.
33:27100x100 lah.
33:29Avatar yang baru.
33:35Harap dia apresiasi.
33:43Image representasi user.
33:47Image profile user.
33:49100x100 pixel.
33:51Apakah bisa disimpan.
33:53Apakah direkomendasikan untuk disimpan di database.
33:57Ya bisa aja sih.
33:59Apa gainnya?
34:01Apa gainnya?
34:03Mungkin ga best practice ya.
34:05Sederhana aja biar gampang aja.
34:07Gak bisa di cache.
34:09Kalau.
34:11Oke.
34:13Let's say kita punya aplikasi.
34:15Dimana aplikasi kita itu gak butuh-butuh aman untuk upload image.
34:19Tetapi upload image yang digunakan hanya untuk avatar.
34:23Jadi daripada saya punya.
34:25Parti storage.
34:27Ya ini saya simpen di database.
34:29Karena sudah pasti centralized.
34:31Bisa jadi.
34:33Ya kan.
34:35Oke.
34:37Karena.
34:39Kalau daripada punya service tambahan.
34:43Iya.
34:45Tetap database ya.
34:47Iya.
34:49Kalau misalnya aplikasi kita itu gak ada upload image yang lain.
34:51Dan hanya upload image nya untuk avatar.
34:53Ya kan.
34:55Terus.
34:57Daripada saya menambah.
34:59Service baru.
35:01Untuk file storage.
35:03Centralized file storage.
35:05Ngapain? Mending simpan database aja.
35:07Iya.
35:09Oke.
35:11Ya bener-bener.
35:13Daripada harus kita bikin bucket baru.
35:15Terus aplikasi kita harus di rewrite.
35:17Mendingan langsung database gitu ya.
35:19Iya.
35:21Iya.
35:23Kalau disimpan di VPS gimana?
35:25Tadi kita sudah sempat bahas ya.
35:27Di awal ya.
35:29Bisa penuh. Karena kan VPS.
35:31Berapa sih? 10GB.
35:33Terus kalau misalkan kita.
35:35Storage nya penuh kita upgrade gitu.
35:37Ke 20GB.
35:39Cuma satu user satu avatar kan.
35:41Dan penggunanya.
35:43Ya kalau avatar ya.
35:45Bisa aja sih.
35:47Bisa aja sih.
35:49Gak ada fitur upload file lain.
35:51Apapun yang selain si avatar itu.
35:53Iya.
35:55Ini VPS.
35:57Iya ini VPS.
35:59Jadi VPS maksudnya kan disimpan di folder kan.
36:01Kalau dibandingkan
36:03sama Blob.
36:05Ya mendingan di VPS sih.
36:09Kalau avatar ya.
36:11Apalagi jarang di update ya.
36:13Karena pasti ada performa
36:17yang dikorbankan
36:19ketika kita insert atau update kan.
36:21Itu kan akan lama kan ya.
36:23Karena Blob itu gede kadang-kadang ya.
36:25Dan kayak apa sih kayak
36:29in the long run kayak
36:31buat daily backup database nya itu
36:33makin lama makin besar juga kan.
36:35Tapi kalau, gak tahu ya.
36:37Cuma mungkin kalau perbandingan
36:39biayanya ya kayak harus
36:41real life.
36:43Harus di tes beneran.
36:45Maksudnya VPS yang kecil aja.
36:47Ini kan kasusnya dikit ya satu user.
36:49Apa? Satu avatar.
36:51Ya 100 kali 100 kan ya.
36:55Apa? Ditaruh di database.
36:57Versus itu tadi
36:59VPS.
37:01Ya kan di tes speed nya
37:03buat speed
37:05query database nya.
37:07Affected nya seberapa signifikan atau enggak.
37:09Perbedaan cost nya biayanya.
37:11Signifikan atau enggak.
37:13Dan speed-speed lainnya lah kayak
37:15quality of life ya itu
37:17routine backup database nya kan
37:19pasti berubah. Itu kayak
37:21affecting quality of life nya
37:23seberapa signifikan.
37:25Iya, iya, iya.
37:27Oke. Benar, Mas Jayo.
37:29Gak ada benar, gak ada salah.
37:31Tapi kita harus ini lah ya.
37:33Procontra nya.
37:35Itu tadi kan.
37:37Ini kan cuma ngayal doang.
37:39Tapi kalau beneran ada
37:41range kira-kira user nya sekian sampai sekian
37:43file nya begini-gini ya
37:45berarti itu harus di
37:47kayak A/B testing kali ya.
37:49Maksudnya harus dicoba lah, harus
37:51dikalkulasi.
37:53Betul, betul.
37:55Kalau kita ngomongin
37:57apa jawaban the ultimate
37:59answer adalah it depends kan.
38:01Tapi kita gak bisa ngomong
38:03depends kan. Jadi kalau
38:05kalau kita jawabnya it depends ya udah
38:07selesai episode ini.
38:09Tapi minimal kita punya playbook
38:11maksudnya apa aja ya
38:13harus dicompare. Maksudnya kita kan ini
38:15gak mungkin kita iseng sendiri tiba-tiba gini.
38:17Pasti kan kemungkinan kalau kita
38:19ketinggalkan ini sama kolega
38:21atau sama client ya. Maksudnya kita bisa
38:23present dengan helpful lah.
38:25Oh iya, tadi kita lupa
38:27ngomong, lupa bahas ini nih.
38:29Itu ada
38:31mending nanti itu bagian diskusi, ada
38:33diskusinya. Oke, oke.
38:35Ada di bagian bawah.
38:37Oke, tadi
38:39database udah, ya udah clear ya.
38:41Ini cloud storage yang paling standar ya
38:43sekarang. Sangat jarang
38:45dipakai, sangat jarang jadi best practice
38:47ya. Sebaiknya digunakan, menggunakan
38:49taro di folder aja.
38:51Seperti contoh yang di sini.
38:53Oke, yang ketiga yang
38:55sekarang, loh ini muncul-muncul
38:57mulu.
38:59Cloud storage, ya cloud storage.
39:03Kalau aplikasi ini cukup besar
39:05ini kayaknya hampir pasti sekarang
39:07mah udah pakai ini semua ya.
39:09Kalau user generated content kayaknya
39:11most likely ya.
39:13Pakai storage ya.
39:15SDK itu dari Amazon,
39:17GCP itu dari Google,
39:19Azure itu dari Microsoft.
39:21Azure dari Microsoft.
39:23MinIU ini versi
39:25open source yang
39:27compatible sama S3.
39:29Jadi kita bisa hosting
39:31sendiri. Self-hosted.
39:33Ya.
39:35Kalau saya pakai MinIU itu
39:37justru supaya
39:39emulate S3 di local
39:41development.
39:43Oh, nggak perlu
39:45ada perubahan kode sama sekali ya.
39:47Iya, jadi sama kayak
39:49S3, tapi ya
39:51compatible.
39:53Tanpa jalanin di link ya.
39:55Nah,
39:57bagi temen-temen yang nggak
39:59belum tahu, S3, GCP,
40:01dan Azure untuk
40:03cloud storage-nya mereka ini
40:05bayarnya itu per bandwidth.
40:09Bandwidth transfer in
40:11sama transfer out.
40:13Transfer out.
40:15Jadi bukan berdasarkan jumlah
40:17jumlah storage
40:19atau jumlah file yang kita masukin.
40:21Total file-nya
40:23bisa sebanyak mau yang kita mau, tapi
40:25bayarnya per transfer.
40:27Ada cara kita upload dan download.
40:29Jadi kalau kalian
40:31streaming.
40:33Ya, kalau up itunya ibaratnya kita cuma punya satu gambar
40:35atau satu file, tapi
40:37se-Indonesia atau se-dunia buka
40:39file itu semua jempol.
40:41Jempol.
40:43Tapi
40:45berarti ini storage-storage ini
40:47cocok digunakan untuk menyimpan
40:49file back up dong ya.
40:51File back up yang gede kita simpen.
40:53Terus jarang digunakan sampai ada sesuatu.
40:55Iya kan?
40:57Ini ininya 0,01
40:59dolar ya pokoknya.
41:01Iya.
41:03Saya pernah bikin script sederhana
41:05dulu pakai shell untuk upload
41:07backup
41:09VPS server
41:11ke S3.
41:13Oke, oke.
41:15Wah ini info baru nih.
41:17ID Cloud House S3-nya berdasarkan gigabyte.
41:19Oke.
41:23File size berarti ya.
41:25File size ya.
41:27Kalau dulu saya pernah pengalaman
41:31pakai kalau lokal itu
41:33CloudKilat. CloudKilat itu
41:35ada S3 compatible-nya juga.
41:37CloudKilat.
41:41Oh, kok
41:45saya cari CloudKilat yang keluar
41:47merk lain ya?
41:49Udah nggak ada ya? Oh, ada.
41:51Udah, masih ada.
41:53Budget iklannya. Oh, paling atas kok nih.
41:55Kalau gue search
41:57di input itu.
41:59Iya.
42:01Jadi
42:03tapi dia unlimited ya.
42:05Unlimited kalau
42:07selain ID Cloud House ya.
42:09Storage-nya unlimited.
42:11Mau berapa banyak kita
42:13upload ya selama kita
42:15mampu bayar
42:17biaya upload dan download-nya itu
42:21apa namanya?
42:23Flexible gitu.
42:25Scalable.
42:27Scalable bisa
42:29dihubungkan dengan CDN.
42:31Aman dari serangan.
42:33Eksekusi file.
42:35Iya, karena dia bukan server
42:37mesin.
42:39Bukan VM maksudnya.
42:41Iya, object storage.
42:43Iya, object storage.
42:49Cuman
42:51kekurangannya adalah
42:53biaya storage atau biaya transfer sama
42:55setup di aplikasi kita itu
42:57lebih kompleks. Biasanya harus
42:59pakai library tambahan.
43:01Atau harus ada kode yang diubah.
43:03Yang penting harus ada developer
43:05yang tahu cara setup-nya.
43:07Karena masing-masing itu kan
43:09lumayan, apa ya, bukan perkara
43:11coding ya. Ini bukan perkara coding skill
43:13tapi perkara familiarity dengan
43:15service itu. Kayak
43:17apa, nambah service-nya,
43:19caranya gimana, setting-nya apa,
43:21itu kalau nggak biasa
43:23itu pasti bingung.
43:25Sama kalian perlu tahu
43:27kalau S3 itu flat
43:29file system.
43:31Dia hanya object storage.
43:33Tidak ada yang namanya di situ
43:35folder.
43:37Di S3 tidak ada folder.
43:39Jadi
43:41semua file
43:43flat.
43:45Dan property dari file itu
43:47punya pack.
43:49Jadi kalau misalnya upload/
43:512025/nama file
43:53itu adalah property dari
43:55si objek itu.
43:57Tapi
43:59di behind the scene dia flat.
44:01Tidak ada
44:03folder-folderan di sana.
44:05Menarik ini. Yang
44:07local, cloud-cloud-local, banyak kan
44:09ada per gigabyte per bulan ya.
44:11Jadi idea crowd-house ya.
44:13Transfer, itu transfer
44:15bandwidth itu.
44:17Per gigabyte
44:19per bulan.
44:21Ini per gigabyte per bulan.
44:25Nambah kapasitas.
44:27Gigabyte itu file size ya di situ ya?
44:29Dibatasiin. Dibatasiin kan.
44:31Bukan traffic.
44:33Bukan unlimited kan.
44:35Gratis.
44:39Oh, dibalik ya.
44:41Jadi ini
44:43upload/downloadnya gratis.
44:45Tapi dibatasiin
44:47per gigabyte-nya ya.
44:49Menarik. Menarik.
44:51Cuma, agak skeptis sih jujur. Maksudnya
44:53kalau ada yang mau coba deh
44:55punya aplikasi atau apapun yang populer
44:57banget.
44:59Size, mungkin size file
45:01image atau
45:03kecil-kecil. Cuma
45:05user-nya banyak banget. Itu jembol
45:07atau enggak. Maksudnya kena
45:09lebih atau enggak.
45:11Ini pakai mean I/O
45:13berdasarkan protocol
45:15S3 ya.
45:17Ini juga per gigabyte
45:19per bulan sama kayak tadi
45:21Kaisa bilang ya.
45:23Berdasarkan gigabyte.
45:25Ini teori-nya kan
45:27asal
45:29ukuran-ukuran file yang disimpan itu
45:31kecil, mau digeber, mau
45:33setiap hari
45:35user-nya jutaan.
45:37Gitu, nggak apa-apa, nggak naruh ke...
45:39Maksudnya nggak bikin
45:41biaya jadi naik.
45:43Oke juga.
45:45Iya.
45:47CloudLocker rata-rata saya pakai size ya.
45:49Oh iya, oke. Baru tahu saya.
45:51Tapi sebenarnya bukan pakai, dia bukan Amazon
45:53S3 ya. Maksudnya pakai
45:55kemungkinan yang compatible
45:57pakai S3 API.
45:59Supaya gampang kan.
46:01Gampang berpindah-pindah.
46:03Maksudnya pakai mean I/O
46:05sebenarnya. Iya, pakai mean I/O.
46:07Atau sejenis ya.
46:09Cuman saya penasaran sama ininya
46:13kenapa alasannya
46:15CloudLocker itu
46:17membatasi
46:19size.
46:21Karena di belakangnya, dia belakangnya ini.
46:23Size-nya terbatas dia.
46:25Kalau storanya terbatas.
46:27Kalau mereka punya bare metal server sendiri
46:29atau gimana sih itu
46:31provider CloudLocker
46:33mereka punya warehouse
46:35yang mengisi server?
46:37Enggak, data center.
46:39Mereka bayar
46:41service untuk
46:43supaya ada server di data center.
46:45Terus kenapa Amazon bisa
46:53unlimited,
46:55nggak dibatasi per gigabyte?
46:57Karena bagi mereka, storage
46:59karena ini
47:01gede banget, storagenya gede banget
47:03dan efisien, storage itu
47:05murah. Tapi yang lebih mahal itu
47:07justru bandwidth.
47:09Bandwidth yang lebih mahal.
47:11Uploading, belum pernah.
47:21Uploading itu apa?
47:29Uploading.com. Ini
47:31S3 compatible juga, Kak?
47:33Better, katanya.
47:35Better than S3.
47:37Oh, ini ada
47:41ada widget-nya ya.
47:43Jadi kita bisa drag and drop gitu ya.
47:45Sekaligus jadi
47:47udah jadi satu paket.
47:49Tapi jadi opinionated dong.
47:51Tuh kan bener.
47:53Udah ada
47:55komponennya.
47:57Langsung. Gampang ini.
47:59Gampang pakainya.
48:01Pak Thiel.
48:09Wow.
48:132GB app.
48:15Gratis.
48:17Iya, storage-nya.
48:19Ini juga by storage berarti ya.
48:21By storage juga ya.
48:23Tapi ini udah dibundling istilahnya ya.
48:25Bukan cuma storage-nya doang.
48:27Tapi ada komponennya.
48:29Jadi kalau mau
48:31apa? Pakai
48:33apa?
48:35Framework tertentu yang ada di sini,
48:37yang di support, udah tinggal begini.
48:39Gitu.
48:41Gak jadi lebih gampang lagi.
48:43Nick, itu apa?
48:51NEC.
48:53Network interface.
48:55Enggak tau.
48:57Ngasal-ngasal.
48:59Tolong.
49:01Diinfokan ya.
49:05Contaboo. Contaboo ini service juga ya.
49:07Limit.
49:11Kok OVH Cloud?
49:13Ya.
49:15Network interface card.
49:17Ini ada ya.
49:21VPS dedicated server.
49:23More. Mana?
49:25VPS. Storage.
49:27Ini lokal bukan?
49:31Bukan ya? Oh.
49:33German ya.
49:35German.
49:374 euro
49:39per month.
49:41Oh ini VPS.
49:43Mungkin macem-macem.
49:45Itu storage tuh.
49:47Tadi udah.
49:49Kalau Dominasia?
49:51Ada nggak?
49:53Ada nggak?
49:55Nggak ada CDN.
49:57Object storage.
49:59Wah ada object storage
50:01Dominasia ada.
50:03S3 compatible object storage.
50:05Neva Cloud dong. Neva Cloud.
50:07Ada ada. Dominasia ada.
50:09Bayarnya juga sama sih.
50:11Kayak itu.
50:13Kayak per gigabyte.
50:17Per gigabyte juga ya?
50:19Object storage per 250 gigabyte.
50:21S3 compatible ya.
50:23Ternyata menawarkan hal yang sama.
50:27Cuma menarik nih.
50:31Baru tau maksudnya berarti ini
50:33kamen banget ya. Udah umum banget.
50:35Yang di-billing yang di-charge adalah
50:37total ukuran file-nya bukan
50:39traffic-nya.
50:41Ternyata ada gitu.
50:43Jadi ada opsi lah buat kita ya.
50:45Kalau nggak ada
50:47acara begini, gue nggak ngeliat-ngeliat itu
50:49karena so far
50:51nge-develop itu udah urusan infra.
50:53Bodoh banget mau pake berapa.
50:55Sebenarnya
50:59gara-gara
51:01topik ini
51:03saya jadi explore lagi. Tadi Ivan
51:07sempat ngomong kan di awal.
51:09Sebenarnya ada opsi lagi selain
51:11S3 atau
51:13object storage.
51:15Itu yang
51:17di VPS.
51:19Tapi kita bisa
51:21nambahin NAS.
51:23Nambahin storage.
51:25Namanya kalau di AWS itu
51:29Elastic File System.
51:31EFS.
51:35EFS.
51:39Amazon Elastic File System.
51:43Jadi
51:45si drive-nya, si storage-nya
51:47dimounting ke mana-mana.
51:49Iya. Jadi kita kayak
51:51beli hard disk.
51:53Terus
51:55nanti di server kita
51:57disimling kesitu lah
51:59kira-kira gitu lah. Di SSA
52:01EFS kesitu.
52:03Disamba server.
52:05Disambahin.
52:07Pernah mendengar kata sambah?
52:09Samba file-shell.
52:11Iya.
52:13Disambah.
52:15Disambah.
52:17Jadi di cloud server kita ada
52:21directory yang nyambung ke
52:23file system ini.
52:25Jadi kalau misalkan
52:27kalau tadi ya, yang opsi
52:29pertama kan, penuh nih
52:31di VPS.
52:33Kita bikin folder
52:35itu menjadi
52:37file server.
52:39Connect ke file server. Gitu lah kira-kira.
52:41Samba.
52:45Bukan email server.
52:47Email server itu squirrel.
52:49Squirrel.
52:51Samba itu file
52:53sharing ya.
52:55Ini pada tau ya.
52:57Yang tau
52:59sebagai anak lama.
53:01Anak lama.
53:03Berarti
53:05Samba musuh patuh.
53:07Kalau NFS itu
53:09protokolnya.
53:11Samba server juga
53:13bisa support NFS.
53:15Bisa. Cuma Samba itu
53:17sudah kayak complete di dalamnya.
53:19Samba juga ada protokolnya sendiri sih.
53:21SMB.
53:23Jadi kelebihan menggunakan
53:25apa? Yang tadi
53:27Elastic file system atau NIS
53:29itu adalah pada saat kita
53:31develop
53:33itu sama seperti kita pakai
53:35folder lokal. Jadi uploadnya ke lokal aja
53:37seolah-olah. Gak perlu
53:39ada perubahan kode.
53:41Cuma ada di sisi devopsnya.
53:45Itu tambahan satu lagi.
53:47Sekarang
53:49kita coba masuk ke
53:51diskusi tambahan.
53:53Diskusi berikutnya.
53:55Yang tadi, ada yang nanya juga ya
53:57kalau file KTP disimpan di mana?
53:59Setahu saya
54:01kalau sesuai dengan regulasi
54:03itu harus di lokal.
54:05Gak boleh di luar. Bener gak?
54:07Amazon S3 ada region
54:09Jakarta gak sih?
54:11Ada ya? Dia kan global.
54:13Gak boleh.
54:15Nggak ada.
54:17Kalau object storage itu
54:19dia sifatnya
54:21diduplicate ke mana-mana.
54:23Jadi kayak CDN.
54:27Kayak edge server.
54:29Are you sure?
54:31Iya.
54:33Kalau kita buka dashboard
54:35itu gak ada pilihannya kalau di S3.
54:37Gak ada pilihan kita mau region mana.
54:39Gak ada regionnya ya?
54:41Cuma S3 itu aja.
54:43Baru tahu.
54:47Iya.
54:49Berarti solusinya harus di VPS
54:51lokal ya? Kalau misalnya gak mau di
54:53server.
54:55Data storage lokal.
54:57Pake min.io bisa.
54:59Ada yang kompatibel object storage kan?
55:01Ada, ada yang tadi kan?
55:03Kaya ID cloud house.
55:05Dominesia.
55:07Ada apa tadi lagi?
55:09Cloud Killat dan lain-lain.
55:11Business view dan lain-lainnya.
55:13Ada banyak.
55:15Tapi sebenarnya kayak ada
55:17apa ya? Kayak ada
55:19industry standardnya gak sih?
55:21Kalau misalnya file sensitive kayak gitu itu kayak
55:23harus di encrypt.
55:25Atau harus apa gitu?
55:27Gak pernah. Gue juga gak pernah.
55:29Apa? Alamin
55:31harus.
55:33Yang jelas jangan di database seperti yang
55:35Ivan temukan tadi.
55:37Oke.
55:39Itu gak di region mana-mana sih.
55:41Gak boleh ya.
55:45Kalau saya prefernya
55:47di VPS.
55:49Bukan VPS.
55:51Jadi kayak S3 kompatibel
55:53yang lokal aja sih.
55:55S3 kompatibel yang lokal.
55:57Yang
55:59provider yang kalian
56:01percaya aja.
56:03Yang menawarkan
56:05bisa duplikasi backup
56:07dan segala macem dan
56:09high availability.
56:11Maksudnya file yang kita itu
56:13bisa mereka backupin.
56:15Ada disaster recovery-nya.
56:17Dan secure.
56:19Sama
56:21kalau perlu
56:23di gali juga.
56:25Latar belakangnya. Apakah pernah
56:27jebol datanya ya?
56:29Pernah tersebar itu jangan ya.
56:31Dan harus tahu
56:33data centernya dimana.
56:35Jangan sampai yang
56:37pernah kebakaran.
56:39Lo pernah tau data center
56:45di Jakarta kebakaran satu
56:47sampai dua hari.
56:49Pernah. Macem aku juga pernah.
56:53Jadi intinya
56:55nggak boleh langsung S3 ya.
56:57Kalau data sensitive.
56:59Kalau sesuai regulasi.
57:01Bikin koloktisin sendiri
57:03mahal.
57:05Cape tau boleh
57:07pada data center yang pernah.
57:09Apalagi dengan macetnya Jakarta.
57:13Gak tau yang mana itu.
57:17Ini yang tadi yang kebakaran itu?
57:19Oh iya kayaknya ada korban ya?
57:21Mungkin.
57:23Yang terakhir ya?
57:25Terakhir.
57:27Soalnya sering ya?
57:29Beberapa kali ya kejadian.
57:31Sedih.
57:33Cape juga sih bolak
57:35data center.
57:37Udah gitu dingin banget lagi.
57:39Kalau saya
57:41KTP perlu di encrypt nggak?
57:43Saya nggak akan encrypt-encrypt sih.
57:45Karena
57:47sedih yakin.
57:49Itu kan file image ya.
57:51Enggak encrypt file image itu
57:53lumayan
57:55ini.
57:57Lumayan kos dan berat ya.
57:59Karena kalau nggak encrypt
58:01kan pasti
58:03harus bisa di decrypt. Jadi harus pakai
58:05two way encryption kan.
58:07Kalau
58:11saya yang bikin aplikasi
58:13ya simpan
58:15KTP-nya itu hanya saat
58:17proses verifikasi saja.
58:19Setelah verifikasi saya akan
58:21hapus.
58:23Jadi nggak perlu simpan.
58:25Jadi
58:27tidak perlu encrypt
58:29pakai AI
58:31buat
58:33ngebandingin
58:35atau
58:37verifikasi.
58:39Kalau lolos pakai AI ya sudah langsung pass.
58:41Kalau misalnya butuh manual ya
58:43simpan sementara.
58:45Setelah selesai, hapus.
58:47Atau
58:49Dan pasti
58:55file name-nya di random.
58:57Terus ada nama, ada nick gitu ya.
59:03File name-nya di random pakai UUID
59:11aja biar simple.
59:15Sekarang kalau mau lebih simple lagi
59:17nggak mau ngurusin hal kayak gitu, kan ada ya service
59:19yang khusus untuk verifikasi user ya?
59:21Ada nggak sih?
59:23KYC gitu-gitu?
59:25Ada.
59:27Ada kan ya?
59:29Kalau nggak ada kita bikin aja.
59:31Ada kali.
59:35Jadi
59:37service itu
59:39kayak autentikasi.
59:41Autentikasi juga kita udah
59:43zero lah, pakai apa sekarang,
59:45better out lah, dan lain-lain kan.
59:47Untuk
59:49verifikasi user
59:51ya bisa juga pakai service
59:53Indonesia ada apa aja ya?
59:57KYC.
59:59Know your customer.
1:00:01KYC.
1:00:11Oke.
1:00:13Jadi biar lebih
1:00:15apa ya? Jadi kalau
1:00:17mendelegasikan hal-hal yang
1:00:19penting itu kita delegasikan
1:00:21ke pihak-pihak yang
1:00:23sudah lebih, ya memang
1:00:25ekspertisnya di sana ya?
1:00:27Yang penting dan ngerisikan ya, maksud saya
1:00:29itu kan ada risikonya.
1:00:31Nah, kalau kita delegasiin
1:00:33ke pihak yang spesialis, ya maksud saya
1:00:35sebelum kita pakai jasa mereka kan kita bisa minta
1:00:37apa lah jaminan atau
1:00:39jaminan, iya. Atau mungkin
1:00:41kaya legal liability misalnya ada
1:00:43apa-apa, itu yang dipenuh mereka atau
1:00:45kita, kita make sure
1:00:47di situnya kan.
1:00:49Oh kayak ini, Privi,
1:00:51ada Privi, ada
1:00:53Vida, ada
1:00:55beberapa ya.
1:00:57Oh Privi ini
1:00:59dulu saya
1:01:01yang mentorin nih
1:01:03waktu dia di Google
1:01:05for Startup.
1:01:07Ada kan, kayak wasi.
1:01:09Keren.
1:01:11Ada Mas Liza, namanya Mas Liza gak sih nih?
1:01:13Nggak ada lah.
1:01:15Nggak ada.
1:01:17Terima kasih, Mas Liza,
1:01:19gitu.
1:01:21Segetunya.
1:01:23Nggak ada.
1:01:25Iya.
1:01:29Terus satu lagi, Vida.
1:01:31Vida.
1:01:33Vida ini.
1:01:35Ada yang ingat ini gak?
1:01:37Kok WTF?
1:01:41Where the fraud.
1:01:43Mana?
1:01:45KYC.
1:01:47Bisa pakai servis ini.
1:01:49Dulu sempat ada
1:01:51namanya,
1:01:53aduh, gue namanya siapa ya?
1:01:55Daniel, Daniel ya.
1:01:57Bukan, bukan.
1:01:59Di GDE,
1:02:01GDE,
1:02:03dia dulu di Google
1:02:05handle GDE bareng sama Janis.
1:02:07Dulu, tahun 2018.
1:02:09Yang waktu
1:02:11kita ke
1:02:13ke Montain View.
1:02:15Dulu.
1:02:17Yang dia handle group
1:02:19South East Asia.
1:02:21Ada namanya Dan. Daniel ya.
1:02:23Oh Dan, ya.
1:02:25Ya, Dan. Dia kerja disini sekarang.
1:02:27Vida.
1:02:31Mana, cara-cara pakenya gimana?
1:02:33Tuh kan?
1:02:35Ada verification, segala macem kan?
1:02:37Udah diatur. Kita tinggal pakai aja.
1:02:39Tinggal pakai servisnya maksudnya.
1:02:41Nanti setelah itu baru dikirim.
1:02:43Oh.
1:02:45Vida-nya dipakai di GoPay ya?
1:02:47Saya nggak tahu kalau itu.
1:02:49Sudah terbukti juga kan ya?
1:02:51Yang dulu,
1:02:53kalau apa?
1:02:55Gojek dulu
1:02:57juga punya problem dengan itu kan?
1:02:59Yang orang mau validasi
1:03:01pakai topeng segala macem.
1:03:03Topeng perin-perinan muka ya?
1:03:05Makanya sekarang ada.
1:03:07Iya, topeng perin-perinan muka.
1:03:09Iya, kalau bikin sendiri kan
1:03:11edge casenya banyak kan?
1:03:13Yang harus difikirkan.
1:03:15Apa maksudnya biaya buat pakai layanan
1:03:17yang spesialis kini dibanding
1:03:19total man hour, dev hour,
1:03:21bikin sendiri,
1:03:23terus resource-nya kalau di total
1:03:25yang mirip-mirip.
1:03:27Kalau yang udah sebesar
1:03:29GoPay ya?
1:03:31Iya, iya, iya.
1:03:33Untuk data di DB-nya
1:03:35saja berarti yang di-encrypt?
1:03:37Kalau, iya,
1:03:39kalau ada data.
1:03:41Data sensitif ya?
1:03:43Kalau data sensitif di DB,
1:03:45di-encrypt, yes.
1:03:47Jadi ini sudah terjawab.
1:03:49Oke, sekarang
1:03:51pertanyaan kedua.
1:03:53Ada yang pernah kena kasus file upload
1:03:55jelas serangan?
1:03:57Biasa itu. Jaman dulu.
1:03:59Ini bisa saya jawab. Solusinya
1:04:03ya pertama ya waktu upload
1:04:05sudah, udah pastikan
1:04:07apa namanya, dokumen
1:04:11type-nya, file type-nya
1:04:13main type-nya
1:04:15sudah benar di-check. Jadi
1:04:17jangan pakai sistem yang
1:04:19pakai sistem yang
1:04:21exclusion atau
1:04:23whitelisted. Jadi
1:04:25block semua kecuali
1:04:27meme type-nya yang kita butuhkan
1:04:29saja kayak PNG,
1:04:31GPEG
1:04:33yang kita pakai saja. Jangan
1:04:35bisa pakai file yang lain.
1:04:37Meme type beda sama
1:04:39extension ya teman-teman ya.
1:04:41Meme type itu membaca
1:04:43di file header.
1:04:45Jadi jangan cuma baca
1:04:47extension-nya saja.
1:04:51Lalu kalau misalnya
1:04:53file yang di-upload,
1:04:57taro lah di folder upload
1:04:59yang dikhususkan.
1:05:01Dimana
1:05:03kita bisa
1:05:05melakukan setting
1:05:07dari sisi server.
1:05:09Kalau share hosting ya
1:05:11bisa pakai
1:05:13HT Access.
1:05:15Kalau di Nginx kita bisa
1:05:17melakukan settings di Nginx
1:05:19config-nya.
1:05:21Dimana folder tersebut
1:05:23tidak di-execusi pakai PHP
1:05:25atau tidak di-execusi pakai
1:05:27runtime apapun.
1:05:31Hanya khusus melakukan
1:05:33exekusi dengan ya udah
1:05:35sebagai static file.
1:05:37Jadi tidak bisa dijalankan
1:05:39pakai runtime.
1:05:41Di Nginx gampang banget kok
1:05:45setting-nya itu. Cuma cukup kayak
1:05:47ini folder-nya serve
1:05:49pakai static. Jadi nggak usah di-proxy
1:05:51ke runtime apapun.
1:05:53Bisa jadi Ruby, bisa jadi PHP,
1:05:55bisa jadi
1:05:57apa lagi yang runtime di backend ya?
1:06:01Java dan lain-lain.
1:06:03Dengan hanya melakukan
1:06:07proteksi
1:06:09dua hal itu saja,
1:06:11kita sudah bisa
1:06:13menutup
1:06:1599,99% celah serangan.
1:06:21Karena dia tidak bisa
1:06:23nge-execusi dari file itu.
1:06:27Kalau seandainya kita deploy-nya
1:06:31ke dalam container juga itu
1:06:33lebih aman lagi kan ya?
1:06:35Karena itu kan bukan root level kan?
1:06:37Dari sisi, kalau misalnya kita
1:06:41sudah pakai container base,
1:06:43ini contohnya ya,
1:06:45aplikasi kalian itu bisa
1:06:47dibuat, misalnya kalian bikin
1:06:49JavaScript application atau
1:06:51PHP lah, gampang ya.
1:06:53Aplikasi kalian dibuild
1:06:57jadi satu image saja.
1:06:59Jadi file apapun
1:07:01yang ada di, yang misalnya
1:07:03ada yang berusaha meroba,
1:07:05file misalnya anggap aja ada
1:07:07celah, ke-inject sama
1:07:09shell, terus file-nya ada ini
1:07:11berubah. Karena cukup nge-redeploy
1:07:13file-file yang tadinya ada di dalam
1:07:15image itu, ilang kan?
1:07:17Karena image itu kan pristine dan
1:07:19sebisa mungkin di dalam image itu
1:07:21files yang ada
1:07:23yang menjalankan PHP
1:07:25itu
1:07:27apa namanya?
1:07:29Immutable.
1:07:31Nggak bisa dirubah. Nggak bisa, jadi
1:07:33nggak bisa upload file, nggak bisa
1:07:35modify file, nggak bisa
1:07:37nge-delete juga. Ephemeral
1:07:39betul katanya.
1:07:41Bisa kembang kempis
1:07:43dan short-live.
1:07:45Nah, ephemeral itu
1:07:47artinya short-live.
1:07:49Itu lebih aman
1:07:51lagi.
1:07:53Pakalasan, kenapa
1:07:57aplikasi berbasis PHP sering dianggap
1:07:59rentan?
1:08:01Karena tidak tahu cara melakukan
1:08:03melakukan
1:08:05proteksinya.
1:08:07Kalau
1:08:09apa yang saya sebutkan tadi dilakukan sebenarnya
1:08:11nggak rentan-rentan apa,
1:08:13nggak jadi sangat strong malah.
1:08:15Ini contohnya Filament. Filament ini apa ya?
1:08:19Boleh
1:08:21Filament apa itu?
1:08:23File upload. Oh, file upload.
1:08:25Keamanan file name.
1:08:27Bentar, saya pengen tahu
1:08:31Filament ini apa?
1:08:33Kayaknya dari Laravel ya?
1:08:35Iya, Laravel.
1:08:37Apa ini?
1:08:39Introduction. Apa Filament?
1:08:41Server-driven UI.
1:08:45Ini pakai apa sih, docusaurus ya?
1:08:47Nggak.
1:08:49Bukan ya?
1:08:51Kayaknya pernah lihat.
1:08:53Server-driven UI.
1:09:03Oh, ini kayak live view-nya
1:09:05Phoenix ya?
1:09:07Jadi, HTML over the wire
1:09:11dari server, HTML-nya baru
1:09:13dilempar pakai
1:09:15live wire gitu.
1:09:17Bisa jadi.
1:09:19Ke klien.
1:09:21What is server-driven UI?
1:09:23Move control of UI to the server.
1:09:31Nggak enak banget.
1:09:33Penjelasan UI server-driven.
1:09:35SDO is a proven architecture.
1:09:37Used by.
1:09:39Itu kan bukan definisi ya?
1:09:41Iya.
1:09:43Contohnya ada nggak?
1:09:45Penasaran jadinya.
1:09:47Oke, kita balik dulu deh.
1:09:49Nanti,
1:09:51di eksplor lagi
1:09:53Filament ini. Coba, mana Kaisang?
1:09:55Kaisa coba, tolong.
1:09:57Bukan Kaisang.
1:09:59Kaisa ya, Kaisa, salah-salah.
1:10:01Security implication
1:10:03of controlling filename.
1:10:05Semua juga pasti ada.
1:10:09Didox pasti ada security implication sih.
1:10:11Nggak enaknya
1:10:15kalau kita nggak kontrol filename-nya
1:10:17atau nggak kita nggak ngerendom filename.
1:10:19Bisa jadi file yang di-upload
1:10:21oleh orang lain.
1:10:23Ngenimpa
1:10:27file yang kita sudah punya sebelumnya.
1:10:29Override.
1:10:31Oke.
1:10:33Kenapa?
1:10:41Iya, hilang-hilangnya terus.
1:10:43Nggak tahu nih, koneksinya terus-terus.
1:10:45Ujan semangatnya.
1:10:47Oh, masih tentang keamanan.
1:10:49Keamanan di PHP itu kan
1:10:51kayaknya lumayan rentan ya.
1:10:53Antara
1:10:55penggunanya banyak
1:10:57sehingga ada beberapa contoh
1:10:59aplikasi yang rentan
1:11:01di PHP, seperti yang
1:11:03kita diskusikan sebelumnya.
1:11:05Ada yang hanya menggunakan SAM,
1:11:07Dijadikan Production, itu kan rentan ya.
1:11:09Yang sama bisa langsung
1:11:13execute the user, kan?
1:11:15Masa-masa batasan antara
1:11:17front-end ke back-end, itu kan
1:11:19jadi satu, kan? Markup.
1:11:21Karena tidak melakukan
1:11:23konfigurasi yang benar.
1:11:25Jadi, default
1:11:27konfigurasinya tidak
1:11:29memikirkan
1:11:31tidak menambahkan opinion untuk
1:11:35mengeamankan upload folder, karena
1:11:37dia sendiri nggak tahu upload folder mana yang kita
1:11:39gunakan. Jadi, ya
1:11:41bisa execute apa aja, gitu.
1:11:43By default.
1:11:45Itu ada demo lagi Filament.
1:11:49Di mana?
1:11:51Ini Filament Docs memang
1:11:53kayaknya ini ya.
1:11:55Kok beda?
1:11:57Oh, ini yang versi 4.
1:11:59Misalnya ini kayaknya pakai Astro deh.
1:12:03Astro yang kemarin.
1:12:05Starlight.
1:12:07Oh, jadi ini.
1:12:09Ini, ini, ini.
1:12:11Ya kan?
1:12:13Berasa nggak kayak Starlight?
1:12:15Ya kan?
1:12:17Iya.
1:12:19Itu apa? Itu komponen built-in-nya.
1:12:21Contohnya mana?
1:12:25Demonya. Demonya Filament
1:12:27di mana?
1:12:29Demo. Apa?
1:12:31Introduction.
1:12:33Getting started.
1:12:35Ya, anyway.
1:12:39Secara umum, memang
1:12:41PHP
1:12:43karena jumlah user-nya sih, kalau
1:12:45saya bilang. Kalau dibilang
1:12:47keaman-nggaaman itu
1:12:49kembali lagi tergantung.
1:12:51It depends. It depends ya.
1:12:55Jadi,
1:12:57kalau orang yang, apa?
1:12:59Memang
1:13:01keamanan itu menjadi
1:13:03syarat
1:13:05mutlak, gitu.
1:13:07Syarat mutlak sebelum Go Production.
1:13:09Pasti bisa dihindari.
1:13:11WordPress juga
1:13:13banyak, apa ya?
1:13:15Banyak diserang, kan?
1:13:17WordPress juga banyak diserang, karena
1:13:19memang yang menggunakan atau yang
1:13:21yang pakai banyak.
1:13:23Yang pakai banyak. Jadi, pas
1:13:25hal pertama, yang biasanya
1:13:27diserang, pada saat
1:13:29orang mau menyerang sebuah, atau mau
1:13:31meng-audit sebuah
1:13:33website, itu pasti, biasanya,
1:13:35bukan pasti ya, biasanya yang diserang
1:13:37pertama adalah /wp-admin.
1:13:39Itu kan nggak umum banget, kan?
1:13:43Karena penggunaan
1:13:45WordPress berapa persen? 90 persen?
1:13:47Berapa persen? Nggak 90, ya.
1:13:4942, 43 persen.
1:13:5143 persen.
1:13:53Hampir setengahnya lah. Hampir setengahnya
1:13:55web di dunia
1:13:57WordPress. Jadi, pasti yang diserang pertama itu.
1:13:59Jadi, ya.
1:14:01Plus minus lah ya. Plus minus. / 40 persen dari
1:14:05sampling 10 juta top
1:14:07top website.
1:14:09Sampling ya, bukan.
1:14:11Real.
1:14:13Tapi ya, bisa merepresentasif.
1:14:15Sikan lah.
1:14:17Iya, iya, iya. Coba
1:14:19teman-teman bikin web pakai
1:14:21bahasa yang jarang
1:14:23digunakan. Bingung orang
1:14:25nyerangnya. / Nggak apa-apa.
1:14:27Bikin aja. Bisa untuk loginnya
1:14:29/wp-admin.
1:14:31/wp-admin, iya. / Iya.
1:14:33Terus, abis mereka
1:14:35coba login, weh, ini bukan
1:14:37WordPress, weh. Gitu.
1:14:39Ini bukan
1:14:41WordPress. Ini adalah
1:14:43Drupal, gitu ya.
1:14:45Jadi,
1:14:55ya, pastikan lah. Kalo teman-teman
1:14:57bikin aplikasi web, ngikutin yang itu
1:14:59yang kita sempet bahas ya
1:15:01sama Mas Irvan ya, kalo nggak salah ya.
1:15:03Yang 10, apa?
1:15:05Yang
1:15:07OASP, ya. O-A-S-P.
1:15:09/ OASP. / Top 10
1:15:11OASP, the security.
1:15:13/ Top 10 security. / Nah, itu.
1:15:15Itu yang harus diikutin.
1:15:17Jadi, sebelum produksi ini, itu dulu aja
1:15:19diikutin, harusnya
1:15:21semua platform, semua bahasa
1:15:23insya'Allah aman.
1:15:25Insya'Allah aman.
1:15:27Nggak
1:15:29tergantung ke bahasa tertentu.
1:15:31Minimal
1:15:33menutup celah yang komon.
1:15:35Menutup celah.
1:15:37Kalo pake Larafer,
1:15:39sudah ada metode buat periksaan URL.
1:15:41Ya. / Ya.
1:15:43Periksaan itu adalah?
1:15:45Memberi
1:15:47ini.
1:15:49Apa namanya? / Tanda tangan.
1:15:51Untuk
1:15:53betul. Supaya
1:15:55hanya bisa pake itu sekali untuk
1:15:57upload-nya.
1:15:59Temporary. / Jadi, itu dikirim dari
1:16:01di payload-nya. Jujur
1:16:03gue belum pernah sih.
1:16:05Di URL-nya kan ya? / Di URL-nya.
1:16:07Di URL-nya.
1:16:09Coba aja liat
1:16:11itu buat saya.
1:16:13Coba buka. Nah, itu buka aja coba.
1:16:15Oke.
1:16:17Oh, kok vilamin lagi?
1:16:21Emang itu vilamin?
1:16:23Vilamin lagi?
1:16:25Larafer kan?
1:16:27Oh, ini. / Nah, itu
1:16:29beda tab. Salah tab.
1:16:31Salah tab.
1:16:33Ini ya? / So, my sync temporary
1:16:35URL.
1:16:37Build
1:16:39temporary URL using.
1:16:41Oh, ini nih.
1:16:43Oh, udah dia metode. / You need to generate temporary URL.
1:16:45S3 driver.
1:16:47Oh, dia sudah
1:16:49menyediakan S3 driver ya.
1:16:51You need to generate temporary
1:16:53URL that can be used to upload file
1:16:55directly from your client-side application.
1:16:57You may
1:16:59use temporary upload URL
1:17:01method. This method accept path
1:17:03and that time
1:17:05when the URL
1:17:07should expire.
1:17:09Jadi
1:17:11kita buat. / Kan untuk upload ke
1:17:13S3 itu kan dia
1:17:15beda sistem kan supaya
1:17:17dan kita kan maunya upload
1:17:19langsung dari aplikasi
1:17:21browser ke S3-nya.
1:17:23Ke S3-nya. / Iya kan? Tidak
1:17:25melewati, nggak lewat server kita
1:17:27sebagai proxy.
1:17:29Ya, jadi ini adalah aplikasi
1:17:31lokal ke S3.
1:17:33Supaya tahu, supaya si S3-nya
1:17:35bisa ngerti, oh, ini
1:17:37diijinkan, berarti kan
1:17:39si server kita, oke, create presigned
1:17:41URL, dan
1:17:43dipakai di aplikasi lokal untuk
1:17:45upload ke sana supaya sah.
1:17:47Seperti itu.
1:17:49Ya.
1:17:51Oke.
1:17:57Enak juga ya, sudah disediakan ya.
1:17:59Nah, karena itu tadi
1:18:03bisa, kalau strategi upload
1:18:05seperti yang di Next itu,
1:18:07via API, API server,
1:18:09jadi pakai proxy, atau pakai
1:18:11sign URL tadi.
1:18:13Sign URL. / Iya.
1:18:15File URL upload bagus buat upload
1:18:19file version lebih dari 4,5
1:18:21mega.
1:18:25Karena bisa jadi
1:18:27server-nya kita, misalnya serverless.
1:18:29Biasa sih. / Bukan,
1:18:31serverless, nggak punya
1:18:33server.
1:18:35C.
1:18:37Bukan nggak punya server, serverless itu
1:18:39sedikit server.
1:18:41Kalau nggak punya server, no server.
1:18:45Atau miskin.
1:18:47Miskin, enggak, enggak, enggak. Canda-canda.
1:18:53Jadi, sama aja kayak
1:18:55caseless ya. Caseless itu kan bukan
1:18:57nggak punya uang kan?
1:18:59Kalau nggak punya uang, no case.
1:19:01Cuma beda format aja.
1:19:03Nggak punya uang jangan belanja. / Nggak punya uang,
1:19:07kere, kere.
1:19:09Bawah mau ngomong soal caseless,
1:19:11caseless itu sebenarnya
1:19:13caseless itu sebenarnya
1:19:15mengurangi value atau menambah value,
1:19:17sih nggak sih? / Si.
1:19:19Caseless itu
1:19:21mengurangi. / Value-nya apa? / Menambah lah.
1:19:23Kita bahas lah di lain waktu.
1:19:27Karena saya punya pendapat berbeda.
1:19:29Ini udah satu jam lebih, tapi
1:19:33baru sampai download. Eh, baru sampai?
1:19:35Upload. / Menyimpan.
1:19:37Menyimpan file. Terus ada
1:19:39strategi upload. Oh, tadi udah kita bahas ya.
1:19:41Iya, udah kita bahas di QN.
1:19:43Kalau sebagai
1:19:45API atau pakai
1:19:47sign juara yang saya sebut tadi.
1:19:49Iya.
1:19:51Kalau direct to storage dari
1:19:53browser, bisa langsung ke
1:19:55S3 atau ke storage lain.
1:19:57Dari mobile,
1:19:59Android, iOS bisa langsung juga.
1:20:01Upload file sign URL itu pakai put
1:20:05atau post?
1:20:07Kayaknya post ya? / Belum pernah.
1:20:11Kayaknya post.
1:20:15Dan sebetulnya, ini nggak ngejawab
1:20:17sih. Cuma sebetulnya, kalau buat
1:20:19layanan yang populer, kan
1:20:21kadang udah ada SDK-nya ya.
1:20:23Kayak biasanya. / Iya. / Kalau
1:20:25pengalaman pribadi, bukan pribadi,
1:20:27pengalaman gue di tempat kerja,
1:20:29kalau dari QN mah, udah tinggal kayak
1:20:31API aja sih. Kalau yang apa,
1:20:33gue bikin dari browser,
1:20:35udah ada endpoint API yang
1:20:37dibuatin oleh pekan kerja.
1:20:39Nah itu API golong, ya standar
1:20:41lah. Dan itu
1:20:43kita pakai S3, AWS,
1:20:45official dari AWS itu
1:20:47udah ada SDK-nya
1:20:49buat golong, buat note,
1:20:51apa-apa.
1:20:53Bahasa masing-masing umum,
1:20:55udah ada SDK-nya ya. / Iya, udah ada.
1:20:57Itu penggunaannya kayak SDK pada umumnya sih.
1:20:59Jadi... / Betul.
1:21:01Kayak, ya masukin
1:21:03token dari N, apa?
1:21:05environment variable.
1:21:07Variable.
1:21:09Bisa diakses, itu ya.
1:21:11Iya, bahkan
1:21:13di abstraksi lagi.
1:21:15Iya. Kadang-kadang
1:21:17di abstraksi lagi, ada library-nya,
1:21:19lebih gampang lagi.
1:21:21Dibungkus terus kan, jadi nggak
1:21:23ketauan. Setahu saya
1:21:25sih. / Kayak itu SDK-nya kan udah berupa
1:21:27library, pos-nya udah tinggal
1:21:29diinstall aja, dan itu official
1:21:31dari AWS-nya. / Oh iya, iya, iya.
1:21:33Ya GCP juga mungkin ada.
1:21:35Iya, iya, iya.
1:21:41Kalau langsung sign URL
1:21:43validation, berarti hanya bisa di sisi klien.
1:21:45Kalau mau validation seperti ukuran
1:21:47file maksimum 10
1:21:49mega, wajib
1:21:51image
1:21:53tidak bisa pakai sign URL.
1:21:55Sebenarnya dua-dua
1:21:57bisa. / Nah, itu ya... / Bisa, bisa.
1:21:59Mau pakai PUT atau POST bisa.
1:22:01Itu di klien site dulu.
1:22:03Oh, kaya top-nya.
1:22:05Nggak masalah berarti. / Kaya top-nya bisa ya
1:22:07dua-duanya. / Itu tadi kalau perkara
1:22:09nge-check size sama type,
1:22:11kalau yang di tempat kerja
1:22:13sih ya di klien site,
1:22:15di browser, di JavaScript
1:22:17klien site,
1:22:19gue udah nge-check juga, itu mah tinggal
1:22:21file object-nya, file.type,
1:22:23nge-check mime-nya kan,
1:22:25mime-nya, sama nge-check
1:22:27size-nya, terus
1:22:29di server site, di API-nya juga
1:22:31yang API golong tadi,
1:22:33nge-check size sama type-nya juga.
1:22:35Udah gitu doang sih.
1:22:37POST-nya cukup simple. / Kak.
1:22:39Tapi ada perbedaan
1:22:41policy. / Nah, cuma ini bukan sign-order kan?
1:22:43Iya, kalau yang sign-order
1:22:45ada beda policy.
1:22:47Kalau mau simple aja, pakai
1:22:49PUT, tapi nggak bisa,
1:22:51ya itu, nggak bisa nge-check
1:22:53ukuran file, segala macem, itu nggak bisa.
1:22:55Oh, nggak bisa baca object
1:22:57yang di-upload-nya ya?
1:22:59Nggak, nggak bisa. Maksudnya,
1:23:01kalau mau di... Jadi ada
1:23:03di S3, ini khusus S3 ya.
1:23:05Jadi di S3 itu kan
1:23:07bisa dikasih policy.
1:23:09Nah,
1:23:11kalau kita mau bikin presign
1:23:13POST policy-nya itu,
1:23:15mau misalnya file size, terus kemudian
1:23:17file type,
1:23:19itu
1:23:21bisa dikasih POST policy.
1:23:23Jadi, kalau mau PUSH
1:23:25pakai policy ini,
1:23:27harus pakai HTTP POST.
1:23:29Baru bisa.
1:23:33Karena PUT itu, dia hanya
1:23:35yang...
1:23:37simple aja.
1:23:39Nggak bisa ditambahin policy.
1:23:41Jadi,
1:23:43karena di PUT itu kan kita nggak bisa bawa
1:23:45atribut lain.
1:23:47Hanya kayak file-nya aja dikirim
1:23:49pakai sign URL itu.
1:23:51Kalau di-setting dari S3-nya,
1:23:55berarti kalau misalnya file yang dikirim
1:23:57di POST request tadi nggak memenuhi syarat,
1:23:59otomatis, maksudnya bakal
1:24:01ke-reject, bakal di-error sama
1:24:03S3-nya.
1:24:05Karena jadinya ini kan,
1:24:07S3 itu kan sebenarnya S3 API kan
1:24:09REST API.
1:24:11Belakangnya REST API Endpoint.
1:24:13Jadi, nanti akan return
1:24:15error message-nya.
1:24:17Ya, punya responnya error.
1:24:29Kalau ini bisa di-validasi
1:24:31di sisi klien, bisa...
1:24:33kalau emang butuh yang lebih strict,
1:24:35kayaknya harus di sisi server dulu ya?
1:24:37Nah, cuma kalau ini kan tadi
1:24:39ternyata kasusnya kalau mau direct kan?
1:24:41Iya, kalau mau direct pakai
1:24:43sign URL bisa.
1:24:45Pake POST policy.
1:24:47Ada policy.
1:24:49Itu tadi yang dibilang event kan?
1:24:51Jadi, apa?
1:24:53Tanpa lapisan server,
1:24:55client-side browser lah.
1:24:57Script-nya di-check aja dulu filenya,
1:24:59abis itu di-S3-nya dibuat
1:25:01POST policy.
1:25:03Ya, oke.
1:25:09Strategi upload lain, ya tadi
1:25:11saya nambahin tadi yang itu
1:25:13elastic file storage
1:25:15dari AWS.
1:25:17Saya nggak tahu itu...
1:25:19Yang belum pernah, apa? Belum pernah pakai
1:25:21upload file aneh-aneh.
1:25:23Ya, selain itu tadi apa? KPI.
1:25:25Ada namanya Torrent.
1:25:27Oh iya benar, peer-to-peer.
1:25:31Torrent, benar-benar.
1:25:33Oh iya, peer-to-peer.
1:25:35Kenapa? Karena Torrent itu
1:25:37konotasinya negatif, biasanya.
1:25:39Padahal sebenarnya itu adalah bagian dari...
1:25:43Ya, karena penggunaannya lebih banyak
1:25:45kuat file-file
1:25:47illegal. Padahal ya file yang legal
1:25:49kan nggak bisa buka aja di Torrent.
1:25:51Ada, iya.
1:25:53Peer, ya.
1:25:55Itu juga penyimpanan data yang
1:25:57cukup ini
1:25:59tergantung usernya juga, ya. Semakin banyak user,
1:26:01semakin cepat, ya.
1:26:03Kalau saya yang tadi Amazon
1:26:05elastic file system, saya nggak tahu
1:26:07di cloud lain
1:26:09ada yang sama
1:26:11atau nggak, gitu. Tapi
1:26:13itu menarik karena
1:26:15secara developer experience lebih simple.
1:26:17Karena kayak folder biasa aja.
1:26:23Ingress, itu yang kita sebut tadi ya?
1:26:25Upload-download
1:26:27traffic, bukan?
1:26:29Ingress itu adalah
1:26:31outgoing.
1:26:33Ingress adalah
1:26:35incoming.
1:26:37Ingress itu adalah outgoing.
1:26:39External, outgoing.
1:26:41Ya, jadi kalau misalnya dibilang
1:26:43Ingress,
1:26:45jadi sesama
1:26:49S3A
1:26:51ke S3B,
1:26:53S3B itu Ingress.
1:26:55Itu nggak bayar.
1:26:57Kalau ke traffic
1:26:59luar baru Ingress.
1:27:01Kalau dimanggil, baru.
1:27:03Dari luar
1:27:05masuk ke dalam,
1:27:07itu Ingress.
1:27:09Jadi secara lingkup,
1:27:13ya. Jadi kalau di dalam
1:27:15aja, percakapan di dalam
1:27:17rumah. Kayak LAN sama
1:27:19ini ya, LAN sama apa?
1:27:21One, one.
1:27:23Iya ya, Cloudflare juga ada ya. Namanya R2 ya.
1:27:29Betul.
1:27:31R2D2
1:27:35R2D2 temunya C3PU.
1:27:39C3PU?
1:27:41C3PU?
1:27:43Ada yang nonton nggak sih?
1:27:45Ada lah. Masa nggak ada
1:27:47yang nonton sih?
1:27:49Itu film apa coba?
1:27:51Ini coba jangan sebutkan
1:27:53judul filmnya. Kira-kira itu film apa?
1:27:55Dengan temen yang ada di chat.
1:27:57Jadi franchise baru
1:27:59kan? Ya tanpa menyebut
1:28:01video. Iya, yang baru-baru. Tapi yang baru-baru
1:28:03apakah ada R2D2?
1:28:05Oh nggak. Nggak tahu. Nggak nonton.
1:28:07Ada yang keren yang bisa
1:28:09yang dia
1:28:11bola doang.
1:28:13Oh iya, yang orang orange ya?
1:28:15Iya.
1:28:17Proxmox
1:28:19Lanjut, apakah
1:28:21ada yang pakai Minio?
1:28:23Perang bintang.
1:28:25Perang bintang.
1:28:27Benar, benar, benar.
1:28:31Pake Minio
1:28:33di perusahaannya. Belum, belum ada.
1:28:35Saya pakai, tapi hanya untuk
1:28:37lokal server saya tadi yang untuk
1:28:39mengganti
1:28:41S3 bucket
1:28:43lokal.
1:28:45Minio remove most management
1:28:49from web UI. Jadi web UI-nya
1:28:51mau dihapus, gitu ya?
1:28:53Menggantinya apa? Kenapa dihapus?
1:28:55Alasannya apa?
1:28:59Atau di remove some sekali?
1:29:01Atau jadi berbayar gitu maksudnya?
1:29:03Nah itu mungkin
1:29:05kalau dihapus kayak iseng doang
1:29:07kayaknya apa ya? Why?
1:29:09Iya.
1:29:11Bukan pakai, stress dihapus.
1:29:13Tapi, read Minio.
1:29:21Oh ya itu
1:29:23ya itu apa
1:29:25dibuat
1:29:27premium kali.
1:29:29Ada forknya.
1:29:31Selalu ya.
1:29:33Apapun, kayaknya apapun pasti.
1:29:35Open Max I/O
1:29:39Lo coba
1:29:41itu Minio, jadi
1:29:43Open Max I/O.
1:29:45Iya, boleh. Iya, ini lebih terbuka
1:29:47gitu ya. Object Browser.
1:29:49Astaga.
1:29:51Dinamita
1:29:55open source software.
1:29:57Penamaannya sangat tidak
1:30:01kreatif ya.
1:30:03Open by CEO.
1:30:05Garage. Oh, Garage.
1:30:07Ini keren loh namanya.
1:30:09Garage Band.
1:30:11Garage Band.
1:30:13Tempat nyimpan storage.
1:30:15Tempat nyimpan barang.
1:30:17Oh tempat nyimpan barang di Garage ya.
1:30:19Iya.
1:30:21Daripada
1:30:23Open Max I/O kan
1:30:25maksa banget.
1:30:27Open Max I/O fork.
1:30:33Ada yang di fork lagi.
1:30:35Si Open Max I/Onya di fork lagi gitu.
1:30:37Iya, ini rasanya berbayar.
1:30:43Hah?
1:30:45Gak tahu.
1:30:47Komen, komen. Komen di sini.
1:30:49Komen apa?
1:30:51Good job, Gan.
1:30:53Pertama kesendaya.
1:30:55Nggak, apa tuh pas Hektoberfest
1:30:59itu yang dulu orang pull request
1:31:01biar dapet kaos, ya cuma nice
1:31:03atau apa.
1:31:05Nice.
1:31:07Masih ya.
1:31:09Sekarang
1:31:11udah kurang ya.
1:31:13Nah, atau sisanya buat episode 2 nih.
1:31:15Sequelnya. Iya.
1:31:17Sequel, sequel.
1:31:19Setengah jam kita.
1:31:21Udah cukup ya? Cukup dulu ya?
1:31:23Kalau...
1:31:25Mas Kaisahnya diajak ikut juga, siapa tahu.
1:31:27Iya.
1:31:29Kalau nggak, kita diskusi lanjutin diskusi aja
1:31:31di GitHub Discussion-nya.
1:31:33Kasih dong link-nya supaya
1:31:37temen-temen bisa pada kesana.
1:31:39Sudah tadi di atas.
1:31:41Saya kasih lagi ya.
1:31:43Kasih lagi dong.
1:31:45Kasih lagi. Baiklah.
1:31:47Silahkan
1:31:49kita diskusi lebih lanjut
1:31:51di GitHub Discussion ya.
1:31:53Iya.
1:31:55Sudah setengah 10.
1:31:57Apa ini? Nggak, kita mau
1:31:59paham kok.
1:32:01Part 2, ya
1:32:07tergantung. Tergantung kemauan.
1:32:09Tergantung keinginan.
1:32:11Soalnya udah
1:32:15masih banyak sih.
1:32:17Sayang banget. Kaisah
1:32:19kayaknya perlu bikin
1:32:21blogpost nih. Bagus nih buat bikin blogpost.
1:32:23Sayang banget.
1:32:25Discussion kita dia masukin
1:32:27jam 9, terus dia atur
1:32:29sedikit, terus jadi blogpost.
1:32:31Sampai ada
1:32:33Activity Diagram-nya segala nih.
1:32:35Saya udah lama nggak liat
1:32:37UML Activity Diagram
1:32:39eh bukan Activity,
1:32:41apa nih? Sequence Diagram.
1:32:43Iya, Sequence Diagram.
1:32:45Sekarang bisa pake LLMF
1:32:47gue. Pake Mermaid.
1:32:49Generate Mermaid, kita ngasih
1:32:53flow-nya, terus
1:32:55bikinin. Kan malu
1:32:57mermaid, kalo waffle itu udah
1:32:59bikin ininya.
1:33:01Sekarang udah bisa minta
1:33:03LLM buatin. Gue sering bikin ini
1:33:05soalnya akan lebih pekerjaan, kalo buat digira,
1:33:07tiket, maksudnya buat clarify,
1:33:09maksudnya saling
1:33:11mastiin flow-nya dulu,
1:33:13sebelum coding.
1:33:15Iya,
1:33:17enak sekarang bisa minta LLM
1:33:19untuk bikinin.
1:33:25Super lengkap ya.
1:33:27Jadi sekali lagi terima kasih buat Kaisa,
1:33:29mudah-mudahan kita bisa diskusi lagi.
1:33:31Nah, Kaisanya punya blog atau website nggak
1:33:33atau channel,
1:33:35siapa tau misalnya konten ini dibikin
1:33:37diposting di blog atau
1:33:39dibikin video di YouTube,
1:33:41masukin aja link-nya kesitu.
1:33:43Konten yang,
1:33:47bisa jadi konten yang bagus.
1:33:49Ada nggak blognya?
1:33:51Ayo, diliat.
1:33:55Gimana?
1:33:57Project?
1:33:59Gak ada artiturnya.
1:34:01Learning, learning.
1:34:03Catatan belajar. Lengkap.
1:34:05Lengkap sekali.
1:34:07Ada UML segala.
1:34:11Nah, kayak gini.
1:34:13Ada Tufel, ada Tufel.
1:34:15Ini pakai dokusaurus ya.
1:34:19Dokusaurus kayaknya.
1:34:21Oh iya?
1:34:23Gak tau.
1:34:25Tanya aja sama Kaisa.
1:34:27Kayaknya iya.
1:34:29Learning.
1:34:31Tadi apa?
1:34:33Upload. Belum ada nih.
1:34:35Upload kan? Belum ada lainnya?
1:34:37Nggak ada.
1:34:39Minecraft.
1:34:41RBC.
1:34:43Oout. Lengkap loh.
1:34:45Ya, walaupun.
1:34:47Ini digital learning.
1:34:51Ulu kan kita pernah bahas ya.
1:34:53Iya, namanya catatan.
1:34:55Yang nggak harus, maksudnya nggak harus
1:34:57lengkap dulu rakyat dulu semua.
1:34:59Nah malah lebih rapi konten yang di posting.
1:35:01Maksudnya lebih, lebih lengkap
1:35:03yang di GitHub Discussion tadi tuh.
1:35:07Betul, betul.
1:35:09Iya, bisa dipindah kesitu.
1:35:11Dikopas kesitu ya.
1:35:13Karena banyak banget ininya.
1:35:17Pertanyaan terakhir.
1:35:21Kalau saya lagi develop aplikasi Kontakt.
1:35:23Oke, tadi ya.
1:35:25Nyimpen avatar ya.
1:35:27Profil Kontakt.
1:35:29Baiknya image-nya dikompres.
1:35:31Harus dikompres.
1:35:33Biasanya
1:35:35image yang gede-nya
1:35:37disimpan.
1:35:39Javascript mah.
1:35:41Ya, nah.
1:35:43Image aslinya disimpan atau nggak
1:35:45itu apa ya?
1:35:47Terserah.
1:35:49Soalnya kadang gede-nya tuh ya
1:35:51kalau dari hape. Apalagi sekarang kamera
1:35:53hape itu kan 50
1:35:55mega atau 40
1:35:57mega. Perlu nggak? Nah itu kan
1:35:59tergantung kalau cuma foto profil Kontakt.
1:36:01Ya, pertama dikompres
1:36:03dulu pakai Sharp biasanya.
1:36:05Yang pasti harus dikompres.
1:36:07Dan
1:36:09diseragamkan kurangnya.
1:36:11Lalu
1:36:13selanjutnya, pertanyaannya
1:36:15dikembalikan bagi si pengguna
1:36:17yang di sisi backend.
1:36:19Butuhnya ngeliat sampai sedetail apa?
1:36:21Kalau hanya sekedar
1:36:23hanya
1:36:25tampil gitu.
1:36:27Terus ada nama orangnya ya
1:36:29ngapain disimpan gede-gede?
1:36:31Tergantung kebutuhan.
1:36:33Atau memang kebutuhannya
1:36:35butuh diklik, bisa
1:36:37ngezoom, bisa dizoom
1:36:39sampai sedetail. Mungkin orang ada tail alatnya nggak sih?
1:36:41Ya, itu
1:36:43beda.
1:36:45Ini kan profile Kontakt
1:36:47harusnya nggak terlalu syarat.
1:36:49Cuma kalau profile Kontakt ya itu yang
1:36:51bayangan kita standar kan ya itu cuma
1:36:53kecil di apa
1:36:55nama, sampingnya ada avatar
1:36:57kecil gitu ya.
1:36:59Pake gravatar aja udah.
1:37:01Iya, model-model yang
1:37:03generated avatar ya.
1:37:05Iya.
1:37:07Kecuali
1:37:09kalau aplikasinya profile Kontakt
1:37:11tapi buat model. Nah itu bisa
1:37:13dizoom gede itu.
1:37:15Makanya tadi itu business decision
1:37:17ya. Itu
1:37:19penang kita.
1:37:21Atau kalau mau lebih mudah
1:37:23ya, pakai
1:37:25service image yang
1:37:27otomatis kita upload file kayak gimana aja
1:37:29kita bisa dapat
1:37:31output yang mau ukuran dari
1:37:33100x100 sampai 1000x1000
1:37:35bisa mau
1:37:37dipikin
1:37:39kayak gimana juga bisa. Itu kayak
1:37:41cloud, eh bukan cloud
1:37:43yang image buat itu
1:37:45image service tuh. Ada sih beberapa
1:37:47ya. Yang paling terkenal
1:37:49itu apa namanya?
1:37:51Lupa kan?
1:37:55Image service apa nih?
1:37:57Image service yang buat ngeresize
1:37:59buat. Cloudinary.
1:38:01Cloudinary.
1:38:03Oh, Cloudinary.
1:38:05Iya. Jadi kan kita bisa
1:38:07define cause saya mau
1:38:09kan kalau mau gampang.
1:38:11Ada preview-nya, kalau user-nya udah banyak
1:38:13itu apa sih? Itu
1:38:15perhitungan itu sih. Apa?
1:38:17Onotation coffee kalau
1:38:19dibawah sekian gratis kok.
1:38:21Nah kalau yang
1:38:23bisa kok, si Cloudflare bisa
1:38:25bisa bikin sendiri. Bisa bikin sendiri
1:38:27kok. Gak susah-susah banget.
1:38:29Cloudflare yang enterprise
1:38:31bisa
1:38:33yang enterprise.
1:38:35Katanya mahal.
1:38:37Nawarin yang enterprise.
1:38:39Gimana sih? Yang community edition dong.
1:38:41Kalau udah pake
1:38:43Cloudflare enterprise, ya
1:38:45mungkin justified. Nah
1:38:47hukumnya, it depends.
1:38:49Projek-projek
1:38:51projek-projek
1:38:53buka di private.
1:38:55Projek-projek yang saya handle
1:38:57pakenya Cloudflare enterprise.
1:38:59Jadi saya gak mikirin callinary lagi.
1:39:01Nah, ya berarti justified kan.
1:39:05Gak emang udah Cloudflare enterprise
1:39:07anyway.
1:39:09Ini
1:39:11gak melenggar
1:39:13trademark ya? Sharp ini ya?
1:39:15Kenapa?
1:39:17Kan ada brand Sharp.
1:39:19Beda kategori.
1:39:21Beda kategori.
1:39:23Sudah di trademark.
1:39:25Tapi beda kategori.
1:39:27Ya itu kan
1:39:29consumer goods.
1:39:31Kalau gak bisa dianggap sebagai kompetitor
1:39:33orang ini open source.
1:39:35Iya, kalau gak kompetitor gak apa-apa.
1:39:37Kecuali nanti si Sharp mengeluarkan
1:39:39image library.
1:39:41Atau Sharp ini carinya
1:39:45bikin
1:39:47jualan kulkas.
1:39:49Iya, atau dia ini open source jualan
1:39:51kulkas.
1:39:53Iya, saya dulu pernah bikin. Jadi
1:39:59konsepnya tuh
1:40:01sederhananya ya. Sederhananya itu kayak gini
1:40:03bentar.
1:40:05Misalkan saya punya
1:40:07images.rizafami.com
1:40:09/profile.png
1:40:11Terus disininya saya kasih
1:40:15100x100
1:40:17nanti itu digenerate
1:40:19dan digenerate-nya
1:40:21habis itu disimpan ke server.
1:40:23Nanti ketika
1:40:27ini dipanggil kedua kali dia gak perlu generate
1:40:29lagi dia langsung ambil dari folder.
1:40:31Berarti ini
1:40:35ada dimana?
1:40:37Ada gak yang ini?
1:40:39Ada gak?
1:40:41Live gak?
1:40:43Biar saya
1:40:47spam dan DDoS
1:40:49jadi saya bikin random number semua sebanyak-banyaknya.
1:40:51Gak bisa, gak bisa.
1:40:55Ini internal, internal aplikasi.
1:40:57Oke.
1:40:59Baru mau bikin.
1:41:01Gak bisa, gak bisa.
1:41:07Udah gak ada kali, udah gak dipake.
1:41:09Takut ya.
1:41:11Bengkak ya, takut bengkak ya.
1:41:13Soalnya dulu
1:41:15kalau temen-temen main
1:41:17Google+ ya.
1:41:19Ada main Google+ ya.
1:41:21Umur berapa sih mas?
1:41:23Ah, udah tua, udah tua gue.
1:41:25Itu salah satu produk.
1:41:27Google di-pushmail kan Google+
1:41:29Nah Google+ itu
1:41:31kayak gini persis.
1:41:33Konceptnya.
1:41:35Image itu bisa kita, bisa dinamis.
1:41:37Kayak gitu.
1:41:39Akhirnya kita contoh.
1:41:41Kayaknya placeholder
1:41:43image ada deh, placeholder image itu bisa.
1:41:45Placeholder.it itu
1:41:47kayak gitu konser.
1:41:49Karena perlu generate
1:41:51Google+ image
1:41:53textnya lain-lain
1:41:55sengaja bikin
1:41:57post request, enter-enter-enter aja
1:41:59pakai curl.
1:42:01Kayaknya coba cari di Google dulu deh.
1:42:03Placeholder.it
1:42:05Nah tuh kayaknya, ya banyak sih
1:42:07sekarang. Ini, tapi bukan image kan.
1:42:09Eh, image ya.
1:42:11Image, click aja, click aja
1:42:13open in it.
1:42:15Kukurannya apa, itu udah.
1:42:17Nah ganti aja 5.
1:42:19Tapi kalau mau berusaha
1:42:214.000.
1:42:23Iya, tapi bentuknya
1:42:27tidak seperti image ya. Seperti
1:42:29gambar, eh, seperti gambar. Seperti
1:42:31text.
1:42:33Ada color juga.
1:42:37Menarik ya.
1:42:39Oke.
1:42:41Textnya juga bisa disesuaikan.
1:42:43Keren.
1:42:45Keren, keren, keren.
1:42:47Placeholder.so.
1:42:49Nanti di dosenya kena retimit.
1:42:51Kalau jaman dulu, banyak ya.
1:42:55Service service kayak gini ya.
1:42:57Ada kitten, kitten, placeholder
1:42:59gitu. Iya, iya.
1:43:01Kalau yang
1:43:03suka kucing.
1:43:05Tuh.
1:43:07Place kitten.
1:43:09Lucu-lucu. Place kitten.
1:43:11Ya, anyway.
1:43:13Gimana?
1:43:15Kita mau bahas
1:43:17untuk minggu depan. Apakah mau
1:43:19episode 2 atau mau
1:43:21bahas yang lain dulu?
1:43:23Bahas yang lain dulu lah.
1:43:25Bahas yang lain dulu ya.
1:43:27Kita kan mau meeting dulu sama
1:43:29DN, DN.
1:43:31Bahas
1:43:35apa dong?
1:43:37Licensing.
1:43:39Licensing apa sih?
1:43:41Semantik versioning.
1:43:43Atau cerita horon mau nggak?
1:43:45Cerita horon udah cukup.
1:43:47Bahwa belum ada bahan.
1:43:49Baru ada satu.
1:43:51Baru ada satu. Dua sama cerita saya tadi.
1:43:53Baru ada dua. Masih-masih ada.
1:43:55Masih dulu anon.
1:43:57Ada, ada. Saya banyak.
1:43:59Banyak ya? Oh banyak.
1:44:01Minggu depannya lagi deh.
1:44:03Kita bikin form dulu ya.
1:44:05Form anon.
1:44:07Kalau yang sungkan ngeposting
1:44:09pakai atem github.
1:44:11Saya banyak
1:44:13bikin masalah
1:44:15sepanjang karir.
1:44:17Kalau gue
1:44:19cuma komedi sih bukan horror.
1:44:21Maksudnya nggak se
1:44:23serem, nggak se ngeri itu.
1:44:25Untungnya klien-klien saya
1:44:27sangat
1:44:29pengertian.
1:44:31Ayo lah.
1:44:35Kayaknya ini dari gue deh.
1:44:37Ini Veto atau mau
1:44:39voting?
1:44:41Oke.
1:44:43Terima ya teman-teman.
1:44:45Udah mau jam 10.
1:44:47Baiklah.
1:44:49Terima kasih
1:44:51buat semuanya.
1:44:53Jadi minggu depan kita akan bahas tentang
1:44:55CLI Design. Kita ketemu lagi
1:44:57minggu depan.
1:44:59Selamat malam, selamat istirahat.
1:45:01Sampai jumpa. Bye-bye.
1:45:11Sampai jumpa. Bye-bye.
Suka episode ini?
Langganan untuk update episode terbaru setiap Selasa malam!
Episode Terkait
13 Okt 2025
Desain Aplikasi CLI - Ngobrolin WEB
🗣️🕸️ Selasa malam waktunya #ngobrolinWEB! Topiknya agak beda nih, kita akan diskusi tentang mendesain dan mengembangka...
25 Nov 2025
WebAI - Ngobrolin WEB
🗣️🕸️ Selasa malam waktunya #ngobrolinWEB! Malam ini membahas AI yang dapat dijalankan di web browser atau istilah kere...
27 Jan 2026
Agentic Coding Tools - Ngobrolin WEB
🗣️🕸️ Selasa malam waktunya #NgobrolinWEB! Malam ini kita akan berbagi bagaimana Eka dan Ivan menggunakan AI Agentic C...