[{"data":1,"prerenderedAt":2084},["ShallowReactive",2],{"tag-labels":3,"home-page":4,"site-header":2052},{},{"featured":5,"list":29,"tags":1917,"series":1918},{"id":6,"title":7,"title_id":8,"slug":9,"excerpt":10,"excerpt_id":11,"has_translation":12,"published_at":13,"reading_time":14,"hidden_from_listing":15,"tags":16,"thumbnail_image":21,"og_image":22,"series":23,"authors":28},110,"When You Pick a Framework Just to Look Different","Ketika Pilih Framework Cuma Biar Kelihatan Beda","ketika-pilih-framework-cuma-biar-kelihatan-beda","The last time you chose a new framework or library, was it because your problem needed that tool, or because it sounded cool and few people around you were using it? That question is uncomfortable. Technology decisions are often made for reasons that never appear in any technical document.","Terakhir kali kamu milih framework atau library baru, itu karena masalahmu butuh alat itu, atau karena alatnya kedengaran keren dan belum banyak yang pakai? Pertanyaan ini nggak enak dijawab. Soalnya keputusan teknologi sering diambil dengan alasan yang nggak pernah ditulis di dokumen teknis mana pun.",true,"2026-10-06T15:25:21.000Z",5,false,[17,18,19,20],"karier","framework","opini","pengalaman",null,"\u002Fog\u002Fketika-pilih-framework-cuma-biar-kelihatan-beda.png",{"id":24,"title":25,"title_id":26,"slug":27},9,"Articles","Artikel","all",[],[30,53,66,79,92,116,136,155,173,188,209,229,244,264,282,298,316,331,347,360,377,381,394,408,427,445,461,475,492,511,529,545,561,576,591,607,622,637,653,670,689,703,720,735,752,767,781,797,812,826,840,855,868,882,896,909,927,941,954,967,982,994,1006,1018,1027,1042,1058,1073,1086,1097,1115,1134,1149,1163,1178,1193,1208,1222,1238,1252,1267,1280,1295,1309,1328,1344,1360,1374,1388,1402,1419,1437,1452,1466,1482,1497,1512,1526,1540,1554,1568,1585,1599,1614,1628,1646,1662,1677,1691,1706,1720,1734,1748,1762,1776,1792,1806,1820,1834,1848,1862,1876,1890,1904],{"id":31,"title":32,"title_id":21,"slug":33,"excerpt":34,"excerpt_id":21,"has_translation":15,"published_at":35,"reading_time":36,"hidden_from_listing":15,"tags":37,"thumbnail_image":21,"og_image":40,"series":41,"authors":46},133,"Python Strings: the Badge That Only Worked for One Name","python-strings","The badge script printed the right name for the person who wrote it and the wrong name for everybody else. Slicing counts characters, and a name is words.","2026-10-28T13:00:00.000Z",6,[38,39],"python","string","\u002Fog\u002Fpython-strings.png",{"id":42,"title":43,"title_id":44,"slug":45},30,"Collections and Strings","Koleksi dan String","python-collections",[47],{"authors_id":48},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},1,"Daffa Izzuddin","izzudd","Writer",{"id":54,"title":55,"title_id":21,"slug":56,"excerpt":57,"excerpt_id":21,"has_translation":15,"published_at":58,"reading_time":36,"hidden_from_listing":15,"tags":59,"thumbnail_image":21,"og_image":61,"series":62,"authors":63},132,"Python Tuples: Why All Three Points Are the Same Point","python-tuples","Three points walk into a loop and come out identical. The list was never copied three times; the name was. A tuple makes that bug impossible.","2026-10-28T12:00:00.000Z",[38,60],"tuple","\u002Fog\u002Fpython-tuples.png",{"id":42,"title":43,"title_id":44,"slug":45},[64],{"authors_id":65},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":67,"title":68,"title_id":21,"slug":69,"excerpt":70,"excerpt_id":21,"has_translation":15,"published_at":71,"reading_time":36,"hidden_from_listing":15,"tags":72,"thumbnail_image":21,"og_image":74,"series":75,"authors":76},131,"Python Sets: the Duplicate That Keeps Coming Back","python-sets","A de-duplication loop that works on clean data leaves four tags where there should be two. The bug is case, and the fix is a `set`.","2026-10-28T11:00:00.000Z",[38,73],"set","\u002Fog\u002Fpython-sets.png",{"id":42,"title":43,"title_id":44,"slug":45},[77],{"authors_id":78},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":80,"title":81,"title_id":21,"slug":82,"excerpt":83,"excerpt_id":21,"has_translation":15,"published_at":84,"reading_time":36,"hidden_from_listing":15,"tags":85,"thumbnail_image":21,"og_image":87,"series":88,"authors":89},130,"Python Dictionaries: the Key That Isn't There","python-dictionary","A word counter dies the first time it meets a word twice. The fix is one line; what takes longer is knowing which of a dict's three lookups to reach for.","2026-10-28T10:00:00.000Z",[38,86],"dictionary","\u002Fog\u002Fpython-dictionary.png",{"id":42,"title":43,"title_id":44,"slug":45},[90],{"authors_id":91},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":93,"title":94,"title_id":95,"slug":96,"excerpt":97,"excerpt_id":98,"has_translation":12,"published_at":99,"reading_time":14,"hidden_from_listing":15,"tags":100,"thumbnail_image":21,"og_image":107,"series":108,"authors":113},129,"So Your RAG Stops Hitting 504: Split the Query Path From Ingestion","Biar RAG nggak kena 504: pisahin jalur query dan ingestion","rag-pisah-jalur-query-dan-ingestion","One RAG service that both parses uploads and answers queries will fall over the moment someone uploads a 200-page PDF. The cure is two paths and one queue.","Satu service RAG yang merangkap parsing dan menjawab kueri bakal tumbang pas ada yang upload PDF 200 halaman. Obatnya dua jalur dan satu queue.","2026-10-22T01:30:00.000Z",[101,102,103,104,105,106],"rag","cloud-run","cloud-tasks","gcp","serverless","arsitektur","\u002Fog\u002Frag-pisah-jalur-query-dan-ingestion.png",{"id":109,"title":110,"title_id":111,"slug":112},8,"Artificial Intelligence","Kecerdasan Artifisial","kecerdasan-artifisial",[114],{"authors_id":115},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":117,"title":118,"title_id":119,"slug":120,"excerpt":121,"excerpt_id":122,"has_translation":12,"published_at":123,"reading_time":36,"hidden_from_listing":15,"tags":124,"thumbnail_image":21,"og_image":131,"series":132,"authors":133},128,"Linear or Graph: How to Run Many Agents Without an Eternal Loop","Linear atau graf: cara mengatur banyak agent tanpa loop abadi","multi-agen-linear-atau-grafik","One agent with twenty tools gets messy fast. Once several agents revise each other, you need a graph that allows cycles and a number that makes it stop.","Satu agent dengan dua puluh tool gampang kacau. Begitu beberapa agent saling revisi, kamu butuh graf yang mendukung cycle dan angka yang membuatnya berhenti.","2026-10-21T16:05:00.000Z",[125,126,127,128,129,130],"multi-agent","langgraph","autogen","orkestrasi","checkpoint","llm","\u002Fog\u002Fmulti-agen-linear-atau-grafik.png",{"id":109,"title":110,"title_id":111,"slug":112},[134],{"authors_id":135},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":137,"title":138,"title_id":139,"slug":140,"excerpt":141,"excerpt_id":142,"has_translation":12,"published_at":143,"reading_time":36,"hidden_from_listing":15,"tags":144,"thumbnail_image":21,"og_image":150,"series":151,"authors":152},127,"Why RAG That Leans on Cosine Similarity Alone Keeps Missing","Kenapa RAG yang cuma andalkan cosine similarity sering nyasar","kenapa-rag-cuma-cosine-similarity-sering-nyasar","RAG that leans only on embeddings returns chunks that look close in meaning, not the ones you need. Here is why, and the two layers that patch it.","RAG yang cuma andalkan embedding balikin chunk yang mirip maknanya, bukan yang kamu butuh. Ini penyebabnya, dan dua lapis penambalnya.","2026-10-19T02:04:06.718Z",[101,145,146,147,148,149],"vector-search","bm25","hybrid-search","retrieval","embedding","\u002Fog\u002Fkenapa-rag-cuma-cosine-similarity-sering-nyasar.png",{"id":109,"title":110,"title_id":111,"slug":112},[153],{"authors_id":154},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":156,"title":157,"title_id":158,"slug":159,"excerpt":160,"excerpt_id":161,"has_translation":12,"published_at":162,"reading_time":163,"hidden_from_listing":15,"tags":164,"thumbnail_image":21,"og_image":168,"series":169,"authors":170},126,"AI Agent Memory: From Vector Store to Temporal Graph","Memori AI Agent: dari Vector Store ke Temporal Graph","memori-ai-agent-vector-store-ke-temporal-graph","Two contradictory facts make an agent answer nonsense. Here is how a vector store and a temporal knowledge graph differ at keeping long-term state.","Dua fakta yang saling bertentangan bikin agent menjawab ngawur. Ini bedanya vector store dan temporal knowledge graph dalam menjaga state jangka panjang.","2026-10-18T13:13:29.458Z",7,[165,130,166,167],"ai","backend","system-design","\u002Fog\u002Fmemori-ai-agent-vector-store-ke-temporal-graph.png",{"id":109,"title":110,"title_id":111,"slug":112},[171],{"authors_id":172},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":174,"title":175,"title_id":176,"slug":177,"excerpt":178,"excerpt_id":179,"has_translation":12,"published_at":180,"reading_time":109,"hidden_from_listing":15,"tags":181,"thumbnail_image":21,"og_image":185,"series":186,"authors":187},125,"MCP, Rebuilt: Good News If You're Tired of Writing Connectors","MCP dibongkar ulang: kabar baik buat kamu yang capek nulis konektor","mcp-dibongkar-ulang-kabar-baik-buat-kamu","You have a few internal APIs and one AI agent, but the code has to be rewritten every time the model changes. MCP ends that, and this year the protocol was rebuilt so servers can run like ordinary web servers. Here's what changed. 🔧","Kamu punya beberapa API internal dan satu agent AI, tapi kodenya harus ditulis ulang tiap kali modelnya diganti. MCP datang buat mengakhiri itu, dan tahun ini protokolnya dibongkar ulang supaya server-nya bisa jalan seperti web server biasa. Yuk lihat apa yang berubah. 🔧","2026-10-16T05:00:00.000Z",[182,183,184,130,166,38],"mcp","model-context-protocol","ai-agent","\u002Fog\u002Fmcp-dibongkar-ulang-kabar-baik-buat-kamu.png",{"id":109,"title":110,"title_id":111,"slug":112},[],{"id":189,"title":190,"title_id":191,"slug":192,"excerpt":193,"excerpt_id":194,"has_translation":12,"published_at":195,"reading_time":36,"hidden_from_listing":15,"tags":196,"thumbnail_image":21,"og_image":202,"series":203,"authors":204},124,"The Secret of Zero-Cost Abstractions in Rust, Opened Up from the Assembly","Rahasia Zero-Cost Abstraction di Rust, Dibedah dari Assembly","rahasia-zero-cost-abstraction-di-rust","\"Higher abstractions are always slower\" is an old assumption. Rust iterators can match a hand-written loop, and the assembly is there for you to read. Let's take it apart.","\"Abstraksi tinggi selalu lebih lambat\" itu anggapan lama. Iterator Rust bisa menyamai loop manual, dan assembly-nya bisa kita baca sendiri. Yuk, kita bongkar!","2026-10-13T05:19:00.000Z",[197,198,199,200,201],"rust","performance","system-programming","compiler","optimasi","\u002Fog\u002Frahasia-zero-cost-abstraction-di-rust.png",{"id":24,"title":25,"title_id":26,"slug":27},[205,207],{"authors_id":206},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"authors_id":208},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":210,"title":211,"title_id":212,"slug":213,"excerpt":214,"excerpt_id":215,"has_translation":12,"published_at":216,"reading_time":217,"hidden_from_listing":15,"tags":218,"thumbnail_image":21,"og_image":222,"series":223,"authors":226},122,"A Script That Cannot Say Where It Went Wrong","Script yang Nggak Bisa Bilang di Mana Salahnya","script-yang-tidak-bilang-di-mana-salahnya","A script that stops at the first bad line reports only part of the problem. This is what shows up on screen right now.","Script yang berhenti di baris jelek pertama cuma melaporkan sebagian masalah yang ada. Ini yang muncul di layar sekarang.","2026-10-11T23:00:15.000Z",4,[38,219,220,221],"error-handling","validasi","lab","\u002Fog\u002Fscript-yang-tidak-bilang-di-mana-salahnya.png",{"id":224,"title":225,"title_id":225,"slug":221},29,"Lab",[227],{"authors_id":228},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":230,"title":231,"title_id":232,"slug":233,"excerpt":234,"excerpt_id":235,"has_translation":12,"published_at":216,"reading_time":217,"hidden_from_listing":15,"tags":236,"thumbnail_image":21,"og_image":239,"series":240,"authors":241},120,"Every Receipt in This Café Lists the Same Order","Tiap Nota di Kafe Ini Isinya Pesanan yang Sama","tiap-nota-isinya-pesanan-yang-sama","Every table's receipt holds the same items, and the total is Rp0 — even though each table ordered exactly one thing. Guess why, then make `make check` green. A Python scope and mutation lab.","Nota tiap meja isinya sama semua, dan totalnya Rp0 — padahal tiap meja cuma pesan satu barang. Coba tebak kenapa.",[38,237,238,221],"scope","mutasi","\u002Fog\u002Ftiap-nota-isinya-pesanan-yang-sama.png",{"id":224,"title":225,"title_id":225,"slug":221},[242],{"authors_id":243},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":245,"title":246,"title_id":247,"slug":248,"excerpt":249,"excerpt_id":250,"has_translation":12,"published_at":216,"reading_time":14,"hidden_from_listing":15,"tags":251,"thumbnail_image":21,"og_image":255,"series":256,"authors":261},119,"Syntax Rules: One Missing Semicolon Stops the Program","Aturan Sintaks: Satu Titik Koma Bikin Program Nggak Jalan","aturan-sintaks-pemrograman","You wrote a few lines and the program already refuses to run? Most of the time the logic is fine, and one character is missing or in the wrong place.","Baru nulis beberapa baris, programnya udah nolak jalan? Seringnya bukan logikanya yang salah, cuma satu karakter yang kurang atau salah tempat.",[252,253,254,38],"syntax","dasar","konsep","\u002Fog\u002Faturan-sintaks-pemrograman.png",{"id":257,"title":258,"title_id":259,"slug":260},12,"Programming Fundamentals","Konsep Dasar Pemrograman","konsep-dasar-pemrograman",[262],{"authors_id":263},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":265,"title":266,"title_id":267,"slug":268,"excerpt":269,"excerpt_id":270,"has_translation":12,"published_at":271,"reading_time":217,"hidden_from_listing":15,"tags":272,"thumbnail_image":21,"og_image":277,"series":278,"authors":279},114,"One Payment, Four Ledger Rows: An Idempotency Lab","Saldo Naik Empat Kali untuk Satu Pembayaran","saldo-naik-empat-kali-untuk-satu-pembayaran","The code is not wrong and the gateway is not wrong, yet one payment shows up four times in the ledger. Guess why, then make `make check` green in the lab.","Kodenya nggak salah, dan gateway-nya juga nggak salah. Tapi satu pembayaran muncul empat kali di ledger. Coba tebak kenapa — lalu bikin `make check` hijau di lab-nya.","2026-10-11T13:45:00.000Z",[273,274,275,276,221],"idempotency","webhook","postgres","database","\u002Fog\u002Fsaldo-naik-empat-kali-untuk-satu-pembayaran.png",{"id":224,"title":225,"title_id":225,"slug":221},[280],{"authors_id":281},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":283,"title":284,"title_id":285,"slug":286,"excerpt":287,"excerpt_id":288,"has_translation":12,"published_at":289,"reading_time":290,"hidden_from_listing":15,"tags":291,"thumbnail_image":21,"og_image":293,"series":294,"authors":295},116,"The Webhook Arrived Late. The Reconciliation Job Had Already Run.","Webhook-nya Telat, Job Rekonsiliasinya Keburu Jalan","webhook-telat-job-rekonsiliasi-keburu-jalan","The webhook path is already idempotent. Then a morning reconciliation job appears, and one payment gets recorded twice from two paths that are both right. Guess where the key is wrong.","Jalur webhook sudah idempotent. Lalu ada job rekonsiliasi pagi, dan satu pembayaran tercatat dua kali dari dua jalur yang dua-duanya benar. Coba tebak kuncinya salah di mana.","2026-10-11T13:44:00.000Z",3,[273,292,274,275,221],"reconciliation","\u002Fog\u002Fwebhook-telat-job-rekonsiliasi-keburu-jalan.png",{"id":224,"title":225,"title_id":225,"slug":221},[296],{"authors_id":297},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":299,"title":300,"title_id":301,"slug":302,"excerpt":303,"excerpt_id":304,"has_translation":12,"published_at":305,"reading_time":14,"hidden_from_listing":15,"tags":306,"thumbnail_image":21,"og_image":311,"series":312,"authors":313},118,"Learning Idempotency from Stock That Got Bought Too Soon","Belajar Idempotency dari Stok yang Keburu Kebeli","pub-sub-sendiri-lalu-belajar-idempotency","My first task at my first job was a system drowning in webhooks. I decided to build my own pub\u002Fsub from scratch, and the lesson that finally landed came from somewhere else: warehouse stock that got bought before the count caught up.","Tugas pertama saya di kerjaan pertama: sistem yang kewalahan menerima webhook. Saya putuskan membangun pub\u002Fsub sendiri dari nol, dan pelajaran yang akhirnya datang bukan dari situ — tapi dari stok gudang yang keburu kebeli orang.","2026-10-10T14:03:00.000Z",[273,307,308,309,310],"event-driven","celery","rabbitmq","post-mortem","\u002Fog\u002Fpub-sub-sendiri-lalu-belajar-idempotency.png",{"id":24,"title":25,"title_id":26,"slug":27},[314],{"authors_id":315},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":317,"title":318,"title_id":319,"slug":320,"excerpt":321,"excerpt_id":322,"has_translation":12,"published_at":323,"reading_time":163,"hidden_from_listing":15,"tags":324,"thumbnail_image":21,"og_image":328,"series":329,"authors":330},107,"How You Use AI Matters More Than Whether You Use AI","Cara kamu pakai AI lebih menentukan daripada apakah kamu pakai AI","cara-pakai-ai-menentukan-pemahaman-kode","The feature is done, the tests are green, and two days later you read the code like a stranger wrote it. It turns out one way of using AI leaves you understanding more than not using AI at all. Here is the data.","Fiturnya selesai, test-nya hijau, dan dua hari kemudian kamu baca kodenya kayak kode orang lain. Ternyata ada satu cara pakai AI yang bikin kamu paham lebih baik daripada nggak pakai AI sama sekali. Yuk lihat datanya.","2026-10-10T11:08:29.000Z",[165,325,326,327],"belajar","kognitif","ai-assisted-coding","\u002Fog\u002Fcara-pakai-ai-menentukan-pemahaman-kode.png",{"id":24,"title":25,"title_id":26,"slug":27},[],{"id":332,"title":333,"title_id":334,"slug":335,"excerpt":336,"excerpt_id":337,"has_translation":12,"published_at":338,"reading_time":163,"hidden_from_listing":15,"tags":339,"thumbnail_image":21,"og_image":344,"series":345,"authors":346},113,"The Garbage Collector Gets Blamed for Slow Apps. How Fair Is That?","Garbage Collector dituduh bikin aplikasi lemot. Seberapa adil tuduhan itu?","garbage-collector-dituduh-bikin-aplikasi-lemot","GC is always the prime suspect when an app slows down, and many people believe it runs on a timer every few seconds. Both beliefs are only partly right. Let's open up how GC works inside, plus one exception that made Discord hurt every 2 minutes.","GC sering jadi tersangka utama tiap aplikasi melambat, dan banyak yang percaya dia jalan pakai timer tiap beberapa detik. Dua-duanya nggak sepenuhnya benar. Yuk bedah cara kerja GC dari dalam, plus satu pengecualian yang bikin Discord kesakitan tiap 2 menit. 🤔","2026-10-09T01:34:00.000Z",[166,198,340,341,342,343],"golang","jvm","garbage-collector","memory","\u002Fog\u002Fgarbage-collector-dituduh-bikin-aplikasi-lemot.png",{"id":24,"title":25,"title_id":26,"slug":27},[],{"id":348,"title":349,"title_id":350,"slug":351,"excerpt":352,"excerpt_id":353,"has_translation":12,"published_at":354,"reading_time":14,"hidden_from_listing":15,"tags":355,"thumbnail_image":21,"og_image":357,"series":358,"authors":359},112,"Your App Is Slow, and You're Already Thinking About Changing Languages. Wait.","Aplikasimu lambat, dan kamu udah kepikiran ganti bahasa. Tunggu dulu","aplikasimu-lambat-dan-kamu-udah-kepikiran-ganti-bahasa-tunggu-dulu","An endpoint spikes every few minutes, and you are thinking of moving from Go to Rust? Discord and Cloudflare really did it, but only after running out of other options and having the data. Let's sort out which symptoms need a rewrite and which only need a profiler.","Ada endpoint yang grafiknya spike tiap beberapa menit, dan kepikiran buat pindah dari Go ke Rust? Discord dan Cloudflare beneran melakukannya — tapi cuma setelah kehabisan cara lain dan punya datanya. Yuk, bedah gejala mana yang beneran butuh rewrite, dan mana yang cuma butuh profiling. 🤔","2026-10-08T09:40:00.000Z",[166,198,340,197,167,356],"profiling","\u002Fog\u002Faplikasimu-lambat-dan-kamu-udah-kepikiran-ganti-bahasa-tunggu-dulu.png",{"id":24,"title":25,"title_id":26,"slug":27},[],{"id":361,"title":362,"title_id":363,"slug":364,"excerpt":365,"excerpt_id":366,"has_translation":12,"published_at":367,"reading_time":36,"hidden_from_listing":15,"tags":368,"thumbnail_image":21,"og_image":372,"series":373,"authors":374},111,"Rust Enters the Linux Kernel: A Real Revolution or Just RIIR Euphoria?","Rust Masuk Kernel Linux: Revolusi Nyata atau Cuma Euforia RIIR?","rust-di-kernel-linux-revolusi-atau-cuma-hype","For more than 30 years the Linux kernel only wanted C, then Rust officially landed in Linux 6.1. Is that a real revolution, or just the pull of the Rewrite It In Rust meme? Let's look at the data, not the opinions.","Selama lebih dari 30 tahun kernel Linux cuma mau bahasa C, lalu tiba-tiba Rust resmi masuk di Linux 6.1. Itu revolusi beneran atau cuma kebawa euforia meme Rewrite It In Rust? Yuk lihat datanya, bukan cuma opininya.","2026-10-07T03:40:24.000Z",[197,369,370,199,371],"linux","kernel","memory-safety","\u002Fog\u002Frust-di-kernel-linux-revolusi-atau-cuma-hype.png",{"id":24,"title":25,"title_id":26,"slug":27},[375],{"authors_id":376},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":6,"title":7,"title_id":8,"slug":9,"excerpt":10,"excerpt_id":11,"has_translation":12,"published_at":13,"reading_time":14,"hidden_from_listing":15,"tags":378,"thumbnail_image":21,"og_image":22,"series":379,"authors":380},[17,18,19,20],{"id":24,"title":25,"title_id":26,"slug":27},[],{"id":382,"title":383,"title_id":384,"slug":385,"excerpt":386,"excerpt_id":387,"has_translation":12,"published_at":13,"reading_time":14,"hidden_from_listing":15,"tags":388,"thumbnail_image":21,"og_image":391,"series":392,"authors":393},109,"State of JS 2025 Says Developers Use Only 2.6 Frameworks in a Whole Career","State of JS 2025 Bilang Developer Cuma Pakai 2,6 Framework Sepanjang Karier","state-of-js-2025-developer-cuma-pakai-2-6-framework","Try counting every framework you have ever touched, then cut the list down to what you actually used for work. It comes out far shorter than you would guess. State of JS 2025 asked 13,002 developers, and the average is only 2.6.","Coba hitung semua framework yang pernah kamu coba, lalu potong jadi yang beneran dipakai buat kerjaan. Daftarnya jauh lebih pendek dari dugaan. State of JS 2025 nanya ke 13.002 developer, dan rata-ratanya cuma 2,6. Yuk, lihat angkanya bareng-bareng!",[389,390,18,17],"javascript","survei","\u002Fog\u002Fstate-of-js-2025-developer-cuma-pakai-2-6-framework.png",{"id":24,"title":25,"title_id":26,"slug":27},[],{"id":395,"title":396,"title_id":397,"slug":398,"excerpt":399,"excerpt_id":400,"has_translation":12,"published_at":401,"reading_time":14,"hidden_from_listing":15,"tags":402,"thumbnail_image":21,"og_image":403,"series":404,"authors":405},104,"N+1 Was Never the Bottleneck: 41 Queries Down to 2, Still One Second","Query-nya Tinggal 2, Tapi Response-nya Masih 1 Detik","query-tinggal-2-tapi-response-masih-1-detik","A feed endpoint that shows 20 posts takes a full second and hits the database with 41 queries. Apply the standard N+1 advice, get it down to 2 queries, and the latency does not move. This is that problem as it happened, plus the lab.","Endpoint feed yang cuma menampilkan 20 tulisan butuh satu detik, dan server database dihujani 41 query. Kamu kerjakan nasihat N+1 yang standar, query-nya turun jadi 2, dan latency-nya nggak bergerak. Ini versi \"apa adanya\" dari masalah itu, plus lab-nya.","2026-10-04T09:59:21.000Z",[276,198,166],"\u002Fog\u002Fquery-tinggal-2-tapi-response-masih-1-detik.png",{"id":224,"title":225,"title_id":225,"slug":221},[406],{"authors_id":407},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":409,"title":410,"title_id":411,"slug":412,"excerpt":413,"excerpt_id":414,"has_translation":12,"published_at":415,"reading_time":14,"hidden_from_listing":15,"tags":416,"thumbnail_image":21,"og_image":419,"series":420,"authors":421},46,"Why C Is Being Left Behind: Rust's Safety Philosophy vs Zig's Simplicity","Mengapa C Mulai Ditinggalkan: Duel Filosofi Keamanan Rust vs Kesederhanaan Zig","mengapa-c-mulai-ditinggalkan-duel-filosofi-rust-vs-zig","Have you heard that around 70% of critical security holes in modern software come from C? Yes, the language the internet is built on. Let's unpack the philosophy duel between Rust and Zig and see which one fits your project.","Pernah denger kalau sekitar 70% celah keamanan kritis software modern itu asalnya dari bahasa C? Iya, bahasa yang udah jadi fondasi internet ini 😅. Yuk, kita bedah duel filosofi Rust vs Zig dan cari tahu mana yang pas buat proyek kalian!","2026-09-09T02:19:05.266Z",[199,197,417,418,371],"zig","c","\u002Fog\u002Fmengapa-c-mulai-ditinggalkan-duel-filosofi-rust-vs-zig.png",{"id":24,"title":25,"title_id":26,"slug":27},[422],{"authors_id":423},{"id":424,"name":425,"slug":426,"role":52,"profile_picture":21},2,"Inva","inva",{"id":428,"title":429,"title_id":429,"slug":430,"excerpt":431,"excerpt_id":432,"has_translation":12,"published_at":433,"reading_time":14,"hidden_from_listing":15,"tags":434,"thumbnail_image":21,"og_image":440,"series":441,"authors":442},45,"Rate Limiting Algorithms: Token Bucket vs Leaky Bucket vs Sliding Window","rate-limiting-algorithms-token-bucket-leaky-bucket-sliding-window","You already know why *rate limiting* is mandatory, but the difference between Token Bucket, Leaky Bucket, Fixed Window, and Sliding Window is still fuzzy. Let's put all four algorithms side by side and find the one that fits your API.","Udah tahu kenapa *rate limiting* itu wajib, tapi masih bingung beda Token Bucket, Leaky Bucket, Fixed Window, dan Sliding Window? Yuk, kita adu empat algoritma ini bareng-bareng dan cari tahu mana yang paling pas buat API kalian!","2026-09-09T01:57:55.886Z",[166,167,435,436,437,438,439],"rate-limiting","redis","api-gateway","architecture","traffict-management","\u002Fog\u002Frate-limiting-algorithms-token-bucket-leaky-bucket-sliding-window.png",{"id":24,"title":25,"title_id":26,"slug":27},[443],{"authors_id":444},{"id":424,"name":425,"slug":426,"role":52,"profile_picture":21},{"id":446,"title":447,"title_id":448,"slug":449,"excerpt":450,"excerpt_id":451,"has_translation":12,"published_at":452,"reading_time":14,"hidden_from_listing":15,"tags":453,"thumbnail_image":21,"og_image":457,"series":21,"authors":458},44,"Transactional Outbox Pattern: Database and Message Broker Consistency Without 2PC","Transactional Outbox Pattern: Solusi Konsistensi Database dan Message Broker Tanpa 2PC","transactional-outbox-pattern-konsistensi-database-message-broker","Seen an order land in the database while the confirmation email never goes out? That is the *dual-write problem*. Here is how the Transactional Outbox Pattern stops your data and your *events* from disagreeing.","Pernah nggak kalian lihat pesanan udah masuk database, tapi email konfirmasinya nggak pernah kekirim? Itu gejala *dual-write problem*. Yuk, kita bedah Transactional Outbox Pattern biar data dan *event* kalian nggak lagi berselisih paham!","2026-09-04T12:15:23.152Z",[166,454,438,276,455,167,456],"microservices","message-broker","postgresql","\u002Fog\u002Ftransactional-outbox-pattern-konsistensi-database-message-broker.png",[459],{"authors_id":460},{"id":424,"name":425,"slug":426,"role":52,"profile_picture":21},{"id":462,"title":463,"title_id":464,"slug":465,"excerpt":466,"excerpt_id":467,"has_translation":12,"published_at":468,"reading_time":14,"hidden_from_listing":15,"tags":469,"thumbnail_image":21,"og_image":471,"series":21,"authors":472},43,"Dead Letter Queue (DLQ) & Retry Policy: Rescuing Stray Messages in RabbitMQ Without Stalling Workers","Dead Letter Queue (DLQ) & Retry Policy: Menyelamatkan Pesan Nyasar di RabbitMQ Tanpa Bikin Worker Macet","dead-letter-queue-retry-policy-rabbitmq-resilient-messaging","Has a *worker* ever rejected the same message over and over until CPU spiked to 100%? That is the *poison message loop*, a classic RabbitMQ trap. Here is how to set up a *retry policy* and a *dead letter queue* properly.","Pernah nggak sih, *worker* kalian nolak satu pesan terus-terusan sampai CPU melonjak 100%? Itu namanya *poison message loop*, jebakan klasik di RabbitMQ. Yuk, kita bahas cara pasang *retry policy* dan *dead letter queue* yang bener!","2026-09-03T04:16:07.481Z",[309,455,166,438,454,470,38],"async","\u002Fog\u002Fdead-letter-queue-retry-policy-rabbitmq-resilient-messaging.png",[473],{"authors_id":474},{"id":424,"name":425,"slug":426,"role":52,"profile_picture":21},{"id":476,"title":477,"title_id":478,"slug":479,"excerpt":480,"excerpt_id":481,"has_translation":12,"published_at":482,"reading_time":14,"hidden_from_listing":15,"tags":483,"thumbnail_image":21,"og_image":488,"series":21,"authors":489},42,"Health Check vs Readiness vs Liveness Probe in Kubernetes: Don't Let Traffic Land on a Dead Pod","Health Check vs Readiness vs Liveness Probe di Kubernetes: Jangan Sampai Traffic Masuk ke Pod Mati!","health-check-readiness-liveness-probe-kubernetes","Every pod is green and Running, yet users get a 502 Bad Gateway? Or all your pods restart at once because the database got slow? The wrong probe is usually behind it.","Semua pod kalian hijau Running, tapi pengguna malah disambut 502 Bad Gateway? Atau seluruh pod restart barengan gara-gara database lagi lambat? Salah kaprah soal probe bisa jadi biangnya. Yuk, kita bongkar bareng!","2026-09-02T03:15:08.836Z",[484,485,166,486,454,487,167],"kubernetes","devops","docker","reliability","\u002Fog\u002Fhealth-check-readiness-liveness-probe-kubernetes.png",[490],{"authors_id":491},{"id":424,"name":425,"slug":426,"role":52,"profile_picture":21},{"id":493,"title":494,"title_id":495,"slug":496,"excerpt":497,"excerpt_id":498,"has_translation":12,"published_at":499,"reading_time":14,"hidden_from_listing":15,"tags":500,"thumbnail_image":21,"og_image":506,"series":507,"authors":508},41,"Modern Log Aggregation With Grafana Loki and Vector: Save Storage Without a Giant Index","Log Aggregation Modern dengan Grafana Loki dan Vector: Hemat Storage Tanpa Indeks Raksasa","log-aggregation-modern-grafana-loki-vector-hemat-storage","Your Elasticsearch cluster is greedy for RAM and wasteful with storage? Not every word in a log needs indexing. Meet the duo of Grafana Loki and Vector, far kinder to your wallet.","Klaster Elasticsearch kalian rakus RAM dan boros storage, ya? Padahal nggak semua kata di log perlu diindeks, lho. Yuk, kita kenalan sama duet Grafana Loki dan Vector yang jauh lebih ramah kantong!","2026-09-01T15:45:01.066Z",[166,501,502,503,504,505,485,167],"observa","logging","grafana","loki","vector","\u002Fog\u002Flog-aggregation-modern-grafana-loki-vector-hemat-storage.png",{"id":24,"title":25,"title_id":26,"slug":27},[509],{"authors_id":510},{"id":424,"name":425,"slug":426,"role":52,"profile_picture":21},{"id":512,"title":513,"title_id":514,"slug":515,"excerpt":516,"excerpt_id":517,"has_translation":12,"published_at":518,"reading_time":14,"hidden_from_listing":15,"tags":519,"thumbnail_image":21,"og_image":524,"series":525,"authors":526},40,"Inside Distributed Tracing: Following a Request Through Microservice Chaos","Menyelami Distributed Tracing: Melacak Jejak Request di Balik Keruwetan Microservices","menyelami-distributed-tracing-melacak-jejak-request-microservices","One Checkout click in your backend can trigger dozens of network calls between services, but when one is slow, which service is at fault? Logs alone cannot answer that. Here is distributed tracing.","Satu klik Checkout di backend kalian bisa memicu puluhan network call antar-service, tapi pas ada yang lambat, service mana sebenernya yang salah? Log aja nggak cukup buat njawab itu. Yuk, kita bedah Distributed Tracing!","2026-08-31T02:33:31.602Z",[166,520,521,522,454,438,523],"distributed-systems","observability","open-telemetry","tracing","\u002Fog\u002Fmenyelami-distributed-tracing-melacak-jejak-request-microservices.png",{"id":24,"title":25,"title_id":26,"slug":27},[527],{"authors_id":528},{"id":424,"name":425,"slug":426,"role":52,"profile_picture":21},{"id":530,"title":531,"title_id":532,"slug":533,"excerpt":534,"excerpt_id":535,"has_translation":12,"published_at":536,"reading_time":14,"hidden_from_listing":15,"tags":537,"thumbnail_image":21,"og_image":540,"series":541,"authors":542},39,"Database Sharding vs Partitioning: When Does Data Need Splitting?","Database Sharding vs Partitioning: Kapan Data Perlu Dipecah?","database-sharding-vs-partitioning-kapan-data-perlu-dipecah","Your transaction table has crossed a billion rows and every report query spikes CPU to 100%? Before splitting data blindly, understand the difference between sharding and partitioning.","Tabel transaksi kalian udah nembus miliaran baris dan tiap *query* laporan bikin *CPU* melonjak 100%? Sebelum asal pecah data, yuk kita pahami dulu beda *sharding* sama *partitioning*!","2026-08-24T06:17:10.104Z",[166,276,456,167,438,538,539],"sharding","scaling","\u002Fog\u002Fdatabase-sharding-vs-partitioning-kapan-data-perlu-dipecah.png",{"id":24,"title":25,"title_id":26,"slug":27},[543],{"authors_id":544},{"id":424,"name":425,"slug":426,"role":52,"profile_picture":21},{"id":546,"title":547,"title_id":548,"slug":549,"excerpt":550,"excerpt_id":551,"has_translation":12,"published_at":552,"reading_time":14,"hidden_from_listing":15,"tags":553,"thumbnail_image":21,"og_image":556,"series":557,"authors":558},38,"Optimistic vs Pessimistic Locking: Handling the Data Fight in a Database","Optimistic vs Pessimistic Locking: Mengatasi Rebutan Data di Database","optimistic-vs-pessimistic-locking-mengatasi-rebutan-data-di-database","A thousand people tap Buy Now in the same second, fighting over the last ticket. What happens on your server? Here is pessimistic against optimistic locking.","Seribu orang ngeklik \"Beli Sekarang\" di detik yang sama buat rebutan 1 tiket terakhir. Kira-kira apa yang bakal terjadi di server kalian? Yuk, kita banding *pessimistic* sama *optimistic locking*!","2026-08-24T06:16:37.198Z",[166,276,554,456,167,438,555],"concurrency","sql","\u002Fog\u002Foptimistic-vs-pessimistic-locking-mengatasi-rebutan-data-di-database.png",{"id":24,"title":25,"title_id":26,"slug":27},[559],{"authors_id":560},{"id":424,"name":425,"slug":426,"role":52,"profile_picture":21},{"id":562,"title":563,"title_id":564,"slug":565,"excerpt":566,"excerpt_id":567,"has_translation":12,"published_at":568,"reading_time":14,"hidden_from_listing":15,"tags":569,"thumbnail_image":21,"og_image":571,"series":572,"authors":573},37,"Why Does a Backend Need Graceful Shutdown? Don't Yank the Server Cable","Kenapa Backend Butuh Graceful Shutdown? Jangan Asal Cabut Kabel Server!","kenapa-backend-butuh-graceful-shutdown-jangan-asal-cabut-kabel-server","You deploy the backend and seconds later monitoring floods with 502 Bad Gateway alerts. The balance was cut but the order status never reached the database. Here is why graceful shutdown is mandatory.","Pernah nggak sih, abis kalian nge-*deploy* backend, beberapa detik kemudian monitoring malah banjir *alert* **502 Bad Gateway** dari pengguna? Saldo udah kepotong tapi status order belum keburu ter-*update* di *database*. Yuk, kita bahas kenapa *graceful shutdown* itu wajib banget!","2026-08-24T06:15:59.150Z",[166,485,570,486,484,167,438],"fastapi","\u002Fog\u002Fkenapa-backend-butuh-graceful-shutdown-jangan-asal-cabut-kabel-server.png",{"id":24,"title":25,"title_id":26,"slug":27},[574],{"authors_id":575},{"id":424,"name":425,"slug":426,"role":52,"profile_picture":21},{"id":577,"title":578,"title_id":579,"slug":580,"excerpt":581,"excerpt_id":582,"has_translation":12,"published_at":583,"reading_time":14,"hidden_from_listing":15,"tags":584,"thumbnail_image":21,"og_image":586,"series":587,"authors":588},36,"Stopping the Domino Effect in Microservices With the Circuit Breaker Pattern","Mencegah Efek Domino di Mikroservis dengan Circuit Breaker Pattern","mencegah-efek-domino-di-mikroservis-dengan-circuit-breaker-pattern","Ever had one minor feature go slow and take the checkout page and login down with it? That is a cascading failure. Here is how the circuit breaker pattern saves your architecture.","Pernah nggak sih, satu fitur minor di aplikasi kalian mendadak lelet, eh malah bikin halaman checkout dan login ikut down total? Itu namanya *cascading failure*. Yuk, kita bahas gimana *circuit breaker pattern* (pemutus arus) nyelametin arsitektur kalian!","2026-08-24T06:13:36.734Z",[166,454,585,167,438],"circuit-breaker","\u002Fog\u002Fmencegah-efek-domino-di-mikroservis-dengan-circuit-breaker-pattern.png",{"id":24,"title":25,"title_id":26,"slug":27},[589],{"authors_id":590},{"id":424,"name":425,"slug":426,"role":52,"profile_picture":21},{"id":592,"title":593,"title_id":594,"slug":595,"excerpt":596,"excerpt_id":597,"has_translation":12,"published_at":598,"reading_time":14,"hidden_from_listing":15,"tags":599,"thumbnail_image":21,"og_image":602,"series":603,"authors":604},35,"Idempotency Keys: The Secret to No Double Charges in Payment APIs","Mengenal Idempotency Key: Rahasia Anti-Double Charge di API Pembayaran","mengenal-idempotency-key-rahasia-anti-double-charge-di-api-pembayaran","Ever had your connection stall right as you hit Pay, then panic-clicked three times? If the endpoint is not idempotent, the balance can be cut more than once. Meet the idempotency key.","Pernah internet kalian ngadat pas lagi nekan tombol Bayar, terus panik ngekliknya tiga kali? Kalau endpoint-nya nggak idempotent, saldo bisa kepotong berkali-kali. Yuk, kenalan sama Idempotency Key!","2026-08-24T06:09:11.645Z",[166,600,273,167,601,570,436],"api","payment","\u002Fog\u002Fmengenal-idempotency-key-rahasia-anti-double-charge-di-api-pembayaran.png",{"id":24,"title":25,"title_id":26,"slug":27},[605],{"authors_id":606},{"id":424,"name":425,"slug":426,"role":52,"profile_picture":21},{"id":608,"title":609,"title_id":610,"slug":611,"excerpt":612,"excerpt_id":613,"has_translation":12,"published_at":614,"reading_time":217,"hidden_from_listing":15,"tags":615,"thumbnail_image":21,"og_image":617,"series":618,"authors":619},34,"Why Does a Backend Need Database Connection Pooling?","Kenapa Backend Butuh Database Connection Pooling?","kenapa-backend-butuh-database-connection-pooling","Ever hit Too many connections while server CPU is still lounging at 30%? The problem is not your queries, it is how the application talks to the database. Meet connection pooling.","Pernah kena error Too many connections padahal CPU server masih santai di angka 30%? Masalahnya bukan di query kalian, tapi di cara aplikasi ngobrol sama database. Yuk, kenalan sama Connection Pooling!","2026-08-24T06:06:47.088Z",[166,276,456,616,167,198],"connection-pooling","\u002Fog\u002Fkenapa-backend-butuh-database-connection-pooling.png",{"id":24,"title":25,"title_id":26,"slug":27},[620],{"authors_id":621},{"id":424,"name":425,"slug":426,"role":52,"profile_picture":21},{"id":623,"title":624,"title_id":625,"slug":626,"excerpt":627,"excerpt_id":628,"has_translation":12,"published_at":629,"reading_time":217,"hidden_from_listing":15,"tags":630,"thumbnail_image":21,"og_image":632,"series":633,"authors":634},33,"Meet RabbitMQ: The Versatile Message Courier","Berkenalan dengan RabbitMQ: Si Kurir Pesan Serba Bisa","berkenalan-dengan-rabbitmq-si-kurir-pesan-serba-bisa","You tap Pay Now and the success notice appears instantly, while the confirmation email only lands a few seconds later? The secret is one invisible courier. Meet RabbitMQ.","Pernah nggak sih kalian klik Bayar Sekarang dan notifikasi suksesnya muncul seketika, padahal email konfirmasi baru nyampe beberapa detik kemudian? Rahasianya ada di satu kurir tak terlihat. Yuk, kita kenalan sama RabbitMQ!","2026-08-17T04:26:10.388Z",[309,455,166,454,470,631],"queue","\u002Fog\u002Fberkenalan-dengan-rabbitmq-si-kurir-pesan-serba-bisa.png",{"id":24,"title":25,"title_id":26,"slug":27},[635],{"authors_id":636},{"id":424,"name":425,"slug":426,"role":52,"profile_picture":21},{"id":638,"title":639,"title_id":640,"slug":641,"excerpt":642,"excerpt_id":643,"has_translation":12,"published_at":644,"reading_time":217,"hidden_from_listing":15,"tags":645,"thumbnail_image":21,"og_image":648,"series":649,"authors":650},32,"Docker Compose for the Relaxed Developer: One Command to Run Every Service","Docker Compose untuk Developer Santai: Satu Perintah Buat Jalankan Semua Service","docker-compose-untuk-developer-santai","Do you keep retyping `docker run` just to bring up the web app, the database, and the cache one at a time? Here is how to fold all of them into one file and one command.","Pernah nggak kalian ngulang-ngulang perintah `docker run` cuma buat nyalain web, database, dan cache satu-satu? Capek, kan? Yuk, kita rapikan semuanya jadi satu file dan satu perintah!","2026-08-17T04:26:10.375Z",[486,646,485,647,166],"docker-compose","containers","\u002Fog\u002Fdocker-compose-untuk-developer-santai.png",{"id":24,"title":25,"title_id":26,"slug":27},[651],{"authors_id":652},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":654,"title":655,"title_id":656,"slug":657,"excerpt":658,"excerpt_id":659,"has_translation":12,"published_at":660,"reading_time":217,"hidden_from_listing":15,"tags":661,"thumbnail_image":21,"og_image":665,"series":666,"authors":667},31,"Getting to Know Redis: More Than Just an In-Memory Cache","Mengenal Redis: Lebih dari Sekadar In-Memory Cache","mengenal-redis-lebih-dari-sekadar-in-memory-cache","Still treating Redis as nothing but a cache? It can be a leaderboard, a message broker, even a rate limiter. Let's take apart everything it can do.","Masih nganggep Redis cuma buat caching? Padahal dia bisa jadi leaderboard, message broker, sampai rate limiter lho. Yuk, kita bedah semua kemampuannya!","2026-08-17T04:26:10.360Z",[436,166,662,663,664,38],"cache","nosql","in-memory","\u002Fog\u002Fmengenal-redis-lebih-dari-sekadar-in-memory-cache.png",{"id":24,"title":25,"title_id":26,"slug":27},[668],{"authors_id":669},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":42,"title":671,"title_id":672,"slug":673,"excerpt":674,"excerpt_id":675,"has_translation":12,"published_at":676,"reading_time":217,"hidden_from_listing":15,"tags":677,"thumbnail_image":21,"og_image":680,"series":681,"authors":686},"Meet Go: Why So Many Backend Teams Reach for It","Berkenalan dengan Bahasa Go: Kenapa Banyak Dipakai untuk Backend Modern?","berkenalan-dengan-bahasa-go-untuk-backend-modern","How did a young language end up inside Docker and Kubernetes? Meet Goroutines, Channels, and the reason Go is so stingy with memory.","Kok bisa sih Go yang masih muda ini jadi bahasa andalan Docker sampai Kubernetes? Yuk, kita kenalan sama Goroutine, Channel, dan alasan dia hemat memori luar biasa!","2026-08-17T04:26:10.344Z",[340,678,166,554,679,167],"go","goroutine","\u002Fog\u002Fberkenalan-dengan-bahasa-go-untuk-backend-modern.png",{"id":682,"title":683,"title_id":684,"slug":685},11,"Learning Go","Belajar Golang","belajar-golang",[687],{"authors_id":688},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":224,"title":690,"title_id":691,"slug":692,"excerpt":693,"excerpt_id":694,"has_translation":12,"published_at":695,"reading_time":217,"hidden_from_listing":15,"tags":696,"thumbnail_image":21,"og_image":698,"series":699,"authors":700},"Understanding Database Indexing: The Secret to Very Fast Queries","Memahami Database Indexing: Rahasia Query Super Cepat","memahami-database-indexing-rahasia-query-super-cepat","Your queries have gone sluggish even though the data only just crossed a million rows? Before you rush to upgrade the server, check the indexes. Here is how database indexing actually works.","Query kalian mulai lelet padahal data baru nembus jutaan baris? Sebelum buru-buru *upgrade* server, yuk cek dulu *index*-nya. Yuk, kita bedah gimana *database indexing* sebenernya kerja!","2026-08-17T04:26:10.325Z",[276,555,456,697,198,166],"indexing","\u002Fog\u002Fmemahami-database-indexing-rahasia-query-super-cepat.png",{"id":24,"title":25,"title_id":26,"slug":27},[701],{"authors_id":702},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":704,"title":705,"title_id":706,"slug":707,"excerpt":708,"excerpt_id":709,"has_translation":12,"published_at":710,"reading_time":14,"hidden_from_listing":15,"tags":711,"thumbnail_image":21,"og_image":715,"series":716,"authors":717},28,"Taming the N+1 Query Problem: The Hidden Enemy of Backend Performance","Mengatasi N+1 Query Problem: Musuh Tersembunyi Performa Backend","mengatasi-n-plus-1-query-problem-musuh-tersembunyi-backend","You built an endpoint that only lists 50 posts with their author names, and the response takes 2-3 seconds? You may have hit N+1 Query. Here is the cause, and the cure.","Pernah bikin endpoint yang cuma nampilin 50 postingan beserta nama penulisnya, tapi response-nya lambat banget? Bisa jadi kalian kena N+1 Query. Yuk, kita bedah penyebabnya dan cara memberantasnya!","2026-08-17T04:26:10.309Z",[276,555,712,713,714,198,166],"orm","sqlalchemy","django","\u002Fog\u002Fmengatasi-n-plus-1-query-problem-musuh-tersembunyi-backend.png",{"id":24,"title":25,"title_id":26,"slug":27},[718],{"authors_id":719},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":721,"title":722,"title_id":723,"slug":724,"excerpt":725,"excerpt_id":726,"has_translation":12,"published_at":727,"reading_time":14,"hidden_from_listing":15,"tags":728,"thumbnail_image":21,"og_image":730,"series":731,"authors":732},27,"Background Workers & Task Queues: Don't Run Heavy Work Inside an HTTP Request","Background Worker & Task Queue: Jangan Jalankan Proses Berat di Request HTTP!","background-worker-task-queue-jangan-jalankan-proses-berat-di-http","You tap Create Account and the loading page spins for 15 seconds with no answer? The cause is classic. Here is why heavy work does not belong in an HTTP request.","Pernah nggak sih kalian klik Daftar Akun lalu halaman loading muter sampai 15 detik tanpa kepastian? Penyebabnya klasik banget. Yuk, kita bahas kenapa proses berat nggak boleh dijalanin di request HTTP!","2026-08-17T04:26:10.284Z",[166,729,308,570,309,436,470],"task-queue","\u002Fog\u002Fbackground-worker-task-queue-jangan-jalankan-proses-berat-di-http.png",{"id":24,"title":25,"title_id":26,"slug":27},[733],{"authors_id":734},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":736,"title":737,"title_id":738,"slug":739,"excerpt":740,"excerpt_id":741,"has_translation":12,"published_at":742,"reading_time":14,"hidden_from_listing":15,"tags":743,"thumbnail_image":21,"og_image":747,"series":748,"authors":749},26,"REST API vs gRPC: When Should You Start Moving Off JSON?","REST API vs gRPC: Kapan Sebaiknya Mulai Pindah dari JSON?","rest-api-vs-grpc-kapan-sebaiknya-pindah-dari-json","Has your microservice system started feeling heavy even though it only shuffles internal data? The server may not be the problem. Here is when REST + JSON still wins, and when gRPC is the answer.","Pernah nggak sih sistem mikroservis kalian mulai kerasa berat padahal cuma tuker-tukeran data internal? Belum tentu masalah servernya. Yuk, kita bahas kapan REST + JSON masih juara dan kapan gRPC jadi jawabannya!","2026-08-17T04:26:10.249Z",[166,744,745,454,746,167],"grpc","rest-api","protobuf","\u002Fog\u002Frest-api-vs-grpc-kapan-sebaiknya-pindah-dari-json.png",{"id":24,"title":25,"title_id":26,"slug":27},[750],{"authors_id":751},{"id":424,"name":425,"slug":426,"role":52,"profile_picture":21},{"id":753,"title":754,"title_id":755,"slug":756,"excerpt":757,"excerpt_id":758,"has_translation":12,"published_at":759,"reading_time":14,"hidden_from_listing":15,"tags":760,"thumbnail_image":21,"og_image":762,"series":763,"authors":764},25,"Why an Event Queue Keeps Your Backend From Collapsing","Kenapa Event Queue Bikin Backend Kalian Nggak Gampang Tumbang?","kenapa-event-queue-bikin-backend-kamu-nggak-gampang-tumbang","You hit Buy Now and the success notice appears instantly, while an invoice, an email, and a push notification still have to be built behind the scenes. The secret is the event queue.","Pernah klik tombol Beli Sekarang dan notifikasi suksesnya muncul dalam sekejap, padahal di belakang layar ada invoice, email, sampai push notification yang harus dibuat? Rahasianya Event Queue. Yuk, kita bedah!","2026-08-17T04:11:23.685Z",[166,167,761,455,438],"event-queue","\u002Fog\u002Fkenapa-event-queue-bikin-backend-kamu-nggak-gampang-tumbang.png",{"id":24,"title":25,"title_id":26,"slug":27},[765],{"authors_id":766},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":768,"title":769,"title_id":770,"slug":771,"excerpt":772,"excerpt_id":773,"has_translation":12,"published_at":774,"reading_time":217,"hidden_from_listing":15,"tags":775,"thumbnail_image":21,"og_image":776,"series":777,"authors":778},24,"Why Do You Need Rate Limiting?","Kenapa Butuh Rate Limiting?","kenapa-butuh-rate-limiting","Has your login endpoint ever been hammered by a bot trying thousands of passwords in a single minute? Here is why rate limiting is mandatory, and how to wire it into FastAPI.","Pernah nggak sih endpoint login kalian diserbu bot yang nyoba nembak ribuan password cuma dalam semenit? Yuk, kita bahas kenapa Rate Limiting itu wajib, plus cara masangnya di FastAPI!","2026-08-17T04:00:27.728Z",[166,435,167,600,436,570],"\u002Fog\u002Fkenapa-butuh-rate-limiting.png",{"id":24,"title":25,"title_id":26,"slug":27},[779],{"authors_id":780},{"id":424,"name":425,"slug":426,"role":52,"profile_picture":21},{"id":782,"title":783,"title_id":784,"slug":785,"excerpt":786,"excerpt_id":787,"has_translation":12,"published_at":788,"reading_time":217,"hidden_from_listing":15,"tags":789,"thumbnail_image":21,"og_image":792,"series":793,"authors":794},23,"Why Use FastAPI, and Why Is It So Fast?","Kenapa Pakai FastAPI dan Kenapa Dia Kenceng Banget?","kenapa-pakai-fastapi-dan-kenapa-dia-kenceng-banget","You keep hearing about FastAPI but still wonder how it can keep pace with NodeJS and Go? Let's take apart ASGI, the Pydantic magic, and the automatic docs.","Sering dengar FastAPI tapi masih bingung kenapa dia bisa ngebut kayak NodeJS dan Go? Yuk, kita bedah bareng rahasia ASGI, sihir Pydantic, sampai dokumentasi otomatisnya!","2026-08-16T13:22:46.956Z",[570,38,166,790,791],"asgi","pydantic","\u002Fog\u002Fkenapa-pakai-fastapi-dan-kenapa-dia-kenceng-banget.png",{"id":24,"title":25,"title_id":26,"slug":27},[795],{"authors_id":796},{"id":424,"name":425,"slug":426,"role":52,"profile_picture":21},{"id":798,"title":799,"title_id":800,"slug":801,"excerpt":802,"excerpt_id":803,"has_translation":12,"published_at":804,"reading_time":14,"hidden_from_listing":15,"tags":805,"thumbnail_image":21,"og_image":809,"series":810,"authors":811},22,"What's New in Nuxt 3: Nitro Engine, Vite, and Other Sharp Features","Yang Baru di Nuxt 3: Nitro Engine, Vite, dan Fitur Keren Lainnya","yang-baru-di-nuxt-3-nitro-vite-dan-banyak-lagi","Nuxt 3 brings a sweeping architecture change to line up with Vue 3. Here's what got faster and which new features are worth trying.","Nuxt 3 hadir membawa perubahan arsitektur besar-besaran untuk menyelaraskan dengan Vue 3. Penasaran apa saja peningkatan performa dan fitur barunya?","2026-06-15T02:39:26.086Z",[806,807,808],"nuxt-3","vue-3","frontend-framework","\u002Fog\u002Fyang-baru-di-nuxt-3-nitro-vite-dan-banyak-lagi.png",{"id":24,"title":25,"title_id":26,"slug":27},[],{"id":813,"title":814,"title_id":815,"slug":816,"excerpt":817,"excerpt_id":818,"has_translation":12,"published_at":819,"reading_time":14,"hidden_from_listing":15,"tags":820,"thumbnail_image":21,"og_image":823,"series":824,"authors":825},21,"TypeScript: JavaScript with Style and Static Types","TypeScript: JavaScript dengan Gaya dan Tipe Data Statis","typescript-javascript-dengan-gaya","Tired of runtime errors in JavaScript? Meet TypeScript, which brings static typing so your code stays tidier and safer.","Pernah pusing gara-gara runtime error di JavaScript? Yuk, kenalan dengan TypeScript yang bawa fitur static typing biar kode kalian makin rapi dan aman!","2026-06-15T02:39:25.712Z",[821,389,822],"typescript","web-development","\u002Fog\u002Ftypescript-javascript-dengan-gaya.png",{"id":24,"title":25,"title_id":26,"slug":27},[],{"id":827,"title":828,"title_id":829,"slug":830,"excerpt":831,"excerpt_id":832,"has_translation":12,"published_at":833,"reading_time":14,"hidden_from_listing":15,"tags":834,"thumbnail_image":21,"og_image":837,"series":838,"authors":839},20,"Tailwind v3.0 Is Out: JIT, Arbitrary Values, and Plenty More","Tailwind v3.0 Rilis: Ada JIT, Arbitrary Values, dan Banyak Lagi!","tailwind-v3-0-rilis-jit-arbitrary-dan-banyak-lagi","Tailwind CSS v3.0 shipped with a pile of performance upgrades that make styling more fun. Which features are worth trying first?","Tailwind CSS v3.0 resmi dirilis dengan segudang peningkatan performa yang bikin proses coding makin asyik. Apa aja sih fitur andalan yang wajib dicoba?","2026-06-15T02:39:25.372Z",[835,836,822],"tailwind-css","css-framework","\u002Fog\u002Ftailwind-v3-0-rilis-jit-arbitrary-dan-banyak-lagi.png",{"id":24,"title":25,"title_id":26,"slug":27},[],{"id":841,"title":842,"title_id":843,"slug":844,"excerpt":845,"excerpt_id":846,"has_translation":12,"published_at":847,"reading_time":14,"hidden_from_listing":15,"tags":848,"thumbnail_image":21,"og_image":852,"series":853,"authors":854},19,"Static Typing vs Dynamic Typing: What's the Difference?","Static Typing dan Dynamic Typing: Apa Bedanya?","static-typing-dan-dynamic-typing-apa-bedanya","Ever wondered why Java makes you declare a type while Python just takes the value? Here's the difference between static typing and dynamic typing.","Pernah bingung kenapa di Java tipe data harus dideklarasikan, sementara di Python tinggal pakai aja? Yuk, cari tahu perbedaan static typing dan dynamic typing di sini!","2026-06-15T02:39:15.869Z",[849,850,851],"programming","types","comparison","\u002Fog\u002Fstatic-typing-dan-dynamic-typing-apa-bedanya.png",{"id":24,"title":25,"title_id":26,"slug":27},[],{"id":856,"title":857,"title_id":858,"slug":859,"excerpt":860,"excerpt_id":861,"has_translation":12,"published_at":862,"reading_time":14,"hidden_from_listing":15,"tags":863,"thumbnail_image":21,"og_image":865,"series":866,"authors":867},18,"React, Angular, or Vue: Which Framework Should You Pick?","React, Angular, atau Vue: Pilih Framework yang Mana?","react-angular-vue-pilih-framework-yang-mana","Stuck choosing between React, Angular, and Vue for your next web project? Here's a side-by-side look at what each one actually does well.","Bingung menentukan pilihan di antara React, Angular, dan Vue untuk proyek web kalian berikutnya? Tenang, yuk kita bandingkan kelebihan masing-masing di sini!","2026-06-15T02:38:31.431Z",[822,864,18],"frontend","\u002Fog\u002Freact-angular-vue-pilih-framework-yang-mana.png",{"id":24,"title":25,"title_id":26,"slug":27},[],{"id":869,"title":870,"title_id":871,"slug":872,"excerpt":873,"excerpt_id":874,"has_translation":12,"published_at":875,"reading_time":14,"hidden_from_listing":15,"tags":876,"thumbnail_image":21,"og_image":879,"series":880,"authors":881},17,"Asynchronous Programming vs Multithreading: What's the Real Difference?","Pemrograman Asynchronous vs Multithreading, Apa Sih Bedanya?","pemrograman-asynchronous-dan-multithreading-apa-bedanya","You keep hearing asynchronous and multithreading while coding, but the difference stays fuzzy? Let's take it apart with an instant-noodle analogy you can follow.","Sering dengar istilah asynchronous dan multithreading pas ngoding tapi masih bingung bedanya? Yuk, kita bedah perbedaannya lewat analogi bikin mi instan yang gampang dipahami!","2026-06-15T02:38:31.093Z",[877,554,878],"pemrograman","tips-coding","\u002Fog\u002Fpemrograman-asynchronous-dan-multithreading-apa-bedanya.png",{"id":24,"title":25,"title_id":26,"slug":27},[],{"id":883,"title":884,"title_id":885,"slug":886,"excerpt":887,"excerpt_id":888,"has_translation":12,"published_at":889,"reading_time":14,"hidden_from_listing":15,"tags":890,"thumbnail_image":21,"og_image":893,"series":894,"authors":895},16,"Using TypeScript with Node.js and Express","Menggunakan TypeScript dengan Node.js dan Express","menggunakan-typescript-dengan-node-js-dan-express","Want to build an Express server on Node.js but use TypeScript's nicer features? Here's the complete setup from scratch.","Pengen bikin server Express di Node.js tapi pakai fitur-fitur keren TypeScript? Yuk, intip cara setup lengkapnya dari nol di sini!","2026-06-15T02:38:30.735Z",[389,891,892,821],"nodejs","express","\u002Fog\u002Fmenggunakan-typescript-dengan-node-js-dan-express.png",{"id":24,"title":25,"title_id":26,"slug":27},[],{"id":897,"title":898,"title_id":899,"slug":900,"excerpt":901,"excerpt_id":902,"has_translation":12,"published_at":903,"reading_time":14,"hidden_from_listing":15,"tags":904,"thumbnail_image":21,"og_image":906,"series":907,"authors":908},15,"Why Are There So Many Linux Distros?","Kenapa Ada Banyak Sekali Distro Linux?","kenapa-ada-banyak-sekali-distro-linux","Were you confused when installing Linux handed you dozens of distro options? You're not alone. Here's why there are so many, and what actually differs.","Pernah bingung pas mau install Linux tapi malah disuguhi puluhan pilihan distro? Tenang, kalian nggak sendirian. Yuk, cari tahu kenapa distro Linux bisa sebanyak itu dan apa bedanya!","2026-06-15T02:38:14.569Z",[369,905],"distro","\u002Fog\u002Fkenapa-ada-banyak-sekali-distro-linux.png",{"id":24,"title":25,"title_id":26,"slug":27},[],{"id":910,"title":911,"title_id":912,"slug":913,"excerpt":914,"excerpt_id":915,"has_translation":12,"published_at":916,"reading_time":14,"hidden_from_listing":15,"tags":917,"thumbnail_image":21,"og_image":921,"series":922,"authors":926},14,"Installing Java with Visual Studio Code","Instalasi Java dengan Visual Studio Code","instalasi-java-dengan-visual-studio-code","Want to learn Java but your laptop barely handles a heavy IDE? Here's how to set up VS Code so writing Java stays light and smooth.","Mau belajar ngoding Java tapi spek laptop pas-pasan buat buka IDE berat? Yuk, cari tahu cara setup VS Code biar ngoding Java tetap lancar dan enteng!","2026-06-15T02:37:24.974Z",[918,919,920],"howto","java","editor","\u002Fog\u002Finstalasi-java-dengan-visual-studio-code.png",{"id":813,"title":923,"title_id":924,"slug":925},"Getting Started with Java","Berkenalan dengan Java","java-intro",[],{"id":928,"title":929,"title_id":930,"slug":931,"excerpt":932,"excerpt_id":933,"has_translation":12,"published_at":934,"reading_time":14,"hidden_from_listing":15,"tags":935,"thumbnail_image":21,"og_image":938,"series":939,"authors":940},13,"Things to Consider Before Switching to Linux","Hal yang Perlu Diperhatikan Sebelum Pindah ke Linux","hal-yang-perlu-diperhatikan-sebelum-pindah-ke-linux","Tempted to migrate from Windows to Linux but still unsure? Learn the upsides, the downsides, and the prep you need before you actually switch.","Tertarik migrasi dari Windows ke Linux tapi masih ragu? Yuk, pelajari kelebihan, kekurangan, dan persiapan penting sebelum kamu benar-benar pindah!","2026-06-15T02:37:24.570Z",[369,936,937],"windows","foss","\u002Fog\u002Fhal-yang-perlu-diperhatikan-sebelum-pindah-ke-linux.png",{"id":24,"title":25,"title_id":26,"slug":27},[],{"id":257,"title":942,"title_id":943,"slug":944,"excerpt":945,"excerpt_id":946,"has_translation":12,"published_at":947,"reading_time":14,"hidden_from_listing":15,"tags":948,"thumbnail_image":21,"og_image":951,"series":952,"authors":953},"Make PowerShell More Colorful with Starship","Buat PowerShell Lebih Berwarna dengan Starship","buat-powershell-lebih-berwarna-dengan-starship","Tired of PowerShell looking black, white, and stiff? Turn your terminal into something interactive, aesthetic, and colorful with Starship!","Bosen sama tampilan PowerShell yang hitam putih dan kaku? Yuk, sulap terminalmu jadi lebih interaktif, estetik, dan berwarna pakai Starship!","2026-06-15T02:37:24.143Z",[949,936,950],"shell","powershell","\u002Fog\u002Fbuat-powershell-lebih-berwarna-dengan-starship.png",{"id":24,"title":25,"title_id":26,"slug":27},[],{"id":682,"title":955,"title_id":956,"slug":957,"excerpt":958,"excerpt_id":959,"has_translation":12,"published_at":960,"reading_time":14,"hidden_from_listing":15,"tags":961,"thumbnail_image":21,"og_image":964,"series":965,"authors":966},"How's JavaScript Doing? The State of JS 2022 Results Are In","Apa Kabar JavaScript? Rilis State of JS 2022","apa-kabar-javascript-rilis-state-of-js-2022","The State of JS 2022 survey is out, and the respondent count jumped hard. Which frameworks and build tools actually stole the year?","Survei State of JS 2022 resmi dirilis dengan lonjakan responden yang luar biasa! Framework dan build tool apa saja yang berhasil mencuri perhatian tahun ini?","2026-06-15T02:36:30.205Z",[389,962,963],"web","news","\u002Fog\u002Fapa-kabar-javascript-rilis-state-of-js-2022.png",{"id":24,"title":25,"title_id":26,"slug":27},[],{"id":968,"title":969,"title_id":970,"slug":971,"excerpt":972,"excerpt_id":973,"has_translation":12,"published_at":974,"reading_time":290,"hidden_from_listing":15,"tags":975,"thumbnail_image":21,"og_image":979,"series":980,"authors":981},10,"Functions vs Procedures: What's the Difference?","Fungsi dan Prosedur dalam Pemrograman, Apa Bedanya?","fungsi-dan-prosedur","Ever wondered when to reach for a function and when a procedure does the job while coding? Here is the split that keeps your code tidy.","Pernah bingung kapan harus pakai fungsi dan kapan pakai prosedur pas lagi ngoding? Yuk, bongkar rahasia dan bedanya di sini biar kode kamu makin rapi!","2026-06-14T17:23:03.636Z",[976,977,978],"basic","intro","functions","\u002Fog\u002Ffungsi-dan-prosedur.png",{"id":257,"title":258,"title_id":259,"slug":260},[],{"id":24,"title":983,"title_id":984,"slug":985,"excerpt":986,"excerpt_id":987,"has_translation":12,"published_at":988,"reading_time":424,"hidden_from_listing":15,"tags":989,"thumbnail_image":21,"og_image":991,"series":992,"authors":993},"Loop Control Structures: When to Use For, While, and Do-While","Struktur Kontrol Perulangan (For, While, Do-While), Kapan Harus Dipakai?","struktur-kontrol-perulangan","Tired of writing the same lines of code over and over? Here is how you make the computer repeat the work for you, and which loop to pick.","Pernah ngerasa capek nulis baris kode yang sama berulang kali? Gimana caranya nyuruh komputer buat ngerjain itu secara otomatis?","2026-06-14T17:23:03.479Z",[976,977,990],"looping","\u002Fog\u002Fstruktur-kontrol-perulangan.png",{"id":257,"title":258,"title_id":259,"slug":260},[],{"id":109,"title":995,"title_id":996,"slug":997,"excerpt":998,"excerpt_id":999,"has_translation":12,"published_at":1000,"reading_time":424,"hidden_from_listing":15,"tags":1001,"thumbnail_image":21,"og_image":1003,"series":1004,"authors":1005},"If-Else vs Switch-Case: What's the Real Difference?","Struktur Kontrol Kondisi (If-Else dan Switch-Case), Apa Bedanya?","struktur-kontrol-kondisi","Not sure when to reach for if-else and when switch-case earns its place? Here is why switch-case sometimes runs faster.","Sering bingung kapan harus pakai if-else dan kapan switch-case? Kenapa switch-case kadang bisa lebih ngebut? Yuk, bongkar rahasianya di sini!","2026-06-14T17:23:03.446Z",[976,977,1002],"conditions","\u002Fog\u002Fstruktur-kontrol-kondisi.png",{"id":257,"title":258,"title_id":259,"slug":260},[],{"id":163,"title":1007,"title_id":1008,"slug":1009,"excerpt":1010,"excerpt_id":1011,"has_translation":12,"published_at":1012,"reading_time":14,"hidden_from_listing":15,"tags":1013,"thumbnail_image":21,"og_image":1015,"series":1016,"authors":1017},"Variables and Data Types in Programming","Konsep Variabel dan Tipe Data pada Pemrograman","variable-dan-tipe-data","A variable is the main character of a program, and every language has one. The type is what decides which data fits inside.","Variabel itu ibarat “tokoh utama” di sebuah program. Nggak peduli bahasa pemrograman apapun, pasti semua punya konsep variabel.","2026-06-14T16:51:40.710Z",[976,977,1014,850],"variable","\u002Fog\u002Fvariable-dan-tipe-data.png",{"id":257,"title":258,"title_id":259,"slug":260},[],{"id":36,"title":1019,"title_id":259,"slug":260,"excerpt":1020,"excerpt_id":1021,"has_translation":12,"published_at":1022,"reading_time":163,"hidden_from_listing":15,"tags":1023,"thumbnail_image":21,"og_image":1024,"series":1025,"authors":1026},"Programming Fundamentals: Four Concepts Behind Every Program","The core of programming is giving instructions: telling the computer to do what you want it to do, in a language that has rules of its own.","Inti dari pemrograman adalah memberi instruksi alias menyuruh komputer untuk melakukan sesuatu yang kita inginkan.","2026-06-14T16:51:40.694Z",[977,976],"\u002Fog\u002Fkonsep-dasar-pemrograman.png",{"id":257,"title":258,"title_id":259,"slug":260},[],{"id":14,"title":1028,"title_id":1029,"slug":1030,"excerpt":1031,"excerpt_id":1032,"has_translation":12,"published_at":1033,"reading_time":217,"hidden_from_listing":15,"tags":1034,"thumbnail_image":21,"og_image":1037,"series":1038,"authors":1039},"Inside JEPA's Kitchen: The Secrets of EMA, VICReg, and Compute Efficiency","Di Balik Dapur JEPA: Rahasia EMA, VICReg, dan Efisiensi Komputasi","di-balik-dapur-jepa-rahasia-ema-vicreg-dan-efisiensi-komputasi","Bored of AI that only guesses words or memorizes pixels? Meet JEPA, an architecture that teaches machines common sense very cheaply. Here is a look at its technical insides.","Bosen sama AI yang cuma jago nebak kata atau ngafalin pixel? Kenalan sama JEPA, arsitektur revolusioner yang ngajarin mesin punya \"akal sehat\" secara super efisien. Yuk intip jeroan teknisnya!","2026-06-07T16:14:13.723Z",[1035,1036],"jepa","artificial-intelligent","\u002Fog\u002Fdi-balik-dapur-jepa-rahasia-ema-vicreg-dan-efisiensi-komputasi.png",{"id":109,"title":110,"title_id":111,"slug":112},[1040],{"authors_id":1041},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":217,"title":1043,"title_id":1044,"slug":1045,"excerpt":1046,"excerpt_id":1047,"has_translation":12,"published_at":1048,"reading_time":217,"hidden_from_listing":15,"tags":1049,"thumbnail_image":21,"og_image":1053,"series":1054,"authors":1055},"Beyond Generative AI: JEPA Chases Human-Style Conceptual Understanding","Bukan Sekadar Generative AI, JEPA Coba Kejar Pemahaman Konsep ala Manusia","kenapa-ai-masih-gagal-paham-fisika-dasar-mengenal-arsitektur-jepa","AI usually only guesses pixels, while JEPA tries to learn from abstract concepts in latent space. That approach turns out to reach as far as reading brain waves.","AI biasanya cuma jago nebak piksel, tapi JEPA coba belajar lewat konsep abstrak di ruang laten. Ternyata, cara ini bisa sampai dipakai buat baca gelombang otak.","2026-06-03T09:34:14.840Z",[1035,1050,1051,1052],"yann-lecun","machine-learning","agi","\u002Fog\u002Fkenapa-ai-masih-gagal-paham-fisika-dasar-mengenal-arsitektur-jepa.png",{"id":109,"title":110,"title_id":111,"slug":112},[1056],{"authors_id":1057},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":290,"title":1059,"title_id":1060,"slug":1061,"excerpt":1062,"excerpt_id":1063,"has_translation":12,"published_at":1064,"reading_time":217,"hidden_from_listing":15,"tags":1065,"thumbnail_image":21,"og_image":1068,"series":1069,"authors":1070},"Meet JEPA: Where AI Starts Learning Common Sense","Mengenal JEPA: Saat AI Mulai Belajar Punya \"Akal Sehat\"","kenapa-ai-suka-halu-dan-gimana-jepa-beresin-masalah-ini","AI hallucinates because it only guesses data probabilities without understanding reality. The JEPA architecture tries to change that by building a world model in its head.","AI sering 'halu' karena cuma nebak probabilitas data tanpa paham realita. Arsitektur JEPA mencoba mengubah itu dengan membangun model dunia di kepalanya.","2026-06-03T09:32:50.446Z",[1066,1035,1067,1050],"artificial-intelligence","world-models","\u002Fog\u002Fkenapa-ai-suka-halu-dan-gimana-jepa-beresin-masalah-ini.png",{"id":109,"title":110,"title_id":111,"slug":112},[1071],{"authors_id":1072},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":424,"title":1074,"title_id":1075,"slug":1076,"excerpt":1077,"excerpt_id":1078,"has_translation":12,"published_at":1079,"reading_time":217,"hidden_from_listing":15,"tags":1080,"thumbnail_image":21,"og_image":1081,"series":1082,"authors":1083},"LLMs Are Going to Hit a Wall. What Then?","LLM Bakal Mentok, Terus Gimana Dong?","llm-bakal-mentok-terus-gimana-dong","LLMs like ChatGPT are great at stringing words together, but they never really grasp reality. Yann LeCun says this architecture will hit a wall and needs a new answer.","LLM kayak ChatGPT itu jago ngerangkai kata, tapi nggak beneran paham realitas. Yann LeCun bilang arsitektur ini bakal mentok dan butuh solusi baru.","2026-06-03T08:55:33.003Z",[1066,130,1050,1035],"\u002Fog\u002Fllm-bakal-mentok-terus-gimana-dong.png",{"id":109,"title":110,"title_id":111,"slug":112},[1084],{"authors_id":1085},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":49,"title":1087,"title_id":1088,"slug":1089,"excerpt":1090,"excerpt_id":1091,"has_translation":12,"published_at":1092,"reading_time":217,"hidden_from_listing":15,"tags":1093,"thumbnail_image":21,"og_image":1094,"series":1095,"authors":1096},"Why Does AI Keep Hallucinating? Meet JEPA, the AI Brain With Common Sense","Kenapa AI Suka 'Halu'? Kenalan sama JEPA, Otak AI yang Punya Akal Sehat","kenapa-ai-suka-halu-kenalan-sama-jepa-otak-ai-yang-punya-akal-sehat","Generative AI hallucinates because all it does is guess word patterns. JEPA tries to change that by teaching machines how the real world works, the way a human brain does.","AI generatif sering 'halu' karena cuma jago nebak pola kata. JEPA coba ngerombak itu dengan ngajarin AI cara kerja dunia nyata kayak otak manusia.","2026-06-02T08:09:05.595Z",[1035,1066,1050,1052],"\u002Fog\u002Fkenapa-ai-suka-halu-kenalan-sama-jepa-otak-ai-yang-punya-akal-sehat.png",{"id":109,"title":110,"title_id":111,"slug":112},[],{"id":1098,"title":1099,"title_id":1100,"slug":1101,"excerpt":1102,"excerpt_id":1103,"has_translation":12,"published_at":1104,"reading_time":290,"hidden_from_listing":15,"tags":1105,"thumbnail_image":21,"og_image":1107,"series":1108,"authors":1112},101,"Default Argument and Keyword Argument in Python","Default Argument dan Keyword Argument pada Python","default-argument-pada-python","A default argument is a function argument with an initial value, which lets you make arguments optional.","Default argument merupakan argument fungsi yang memiliki nilai asal, dengan ini kita bisa membuat argument opsional","2024-02-12T14:01:05.000Z",[38,1106,252],"fungsi","\u002Fog\u002Fdefault-argument-pada-python.png",{"id":827,"title":1109,"title_id":1110,"slug":1111},"Functional Programming with Python","Pemrograman Fungsional dengan Python","python-pemrograman-fungsional",[1113],{"authors_id":1114},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1116,"title":1117,"title_id":1118,"slug":1119,"excerpt":1120,"excerpt_id":1121,"has_translation":12,"published_at":1122,"reading_time":217,"hidden_from_listing":15,"tags":1123,"thumbnail_image":21,"og_image":1126,"series":1127,"authors":1131},58,"Getting to Know the Float Data Type in Java","Mengenal Tipe Data Float pada Java","mengenal-tipe-data-float-pada-java","Float, or floating point, is a data type that holds decimal and fractional number literals.","Float atau floating point merupakan tipe data yang dapat menampung literal bilangan desimal dan pecahan.","2023-02-15T00:00:00.000Z",[919,1124,1125],"tipe-data","float","\u002Fog\u002Fmengenal-tipe-data-float-pada-java.png",{"id":798,"title":1128,"title_id":1129,"slug":1130},"Variables, Types, and Operations","Variabel, Tipe Data, dan Operasi","java-variabel-tipe-data",[1132],{"authors_id":1133},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1135,"title":1136,"title_id":1137,"slug":1138,"excerpt":1139,"excerpt_id":1140,"has_translation":12,"published_at":1141,"reading_time":36,"hidden_from_listing":15,"tags":1142,"thumbnail_image":21,"og_image":1144,"series":1145,"authors":1146},57,"Getting to Know the Integer Data Type in Java","Mengenal Tipe Data Integer pada Java","mengenal-tipe-data-integer-pada-java","Integer, as the name suggests, is a data type that only holds whole numbers (negative, zero, and positive).","Integer, sesuai namanya merupakan tipe data yang hanya bisa menampung bilangan bulat saja (negatif, nol, dan positif)","2023-01-13T00:00:00.000Z",[919,1124,1143],"integer","\u002Fog\u002Fmengenal-tipe-data-integer-pada-java.png",{"id":798,"title":1128,"title_id":1129,"slug":1130},[1147],{"authors_id":1148},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1150,"title":1151,"title_id":1152,"slug":1153,"excerpt":1154,"excerpt_id":1155,"has_translation":12,"published_at":1156,"reading_time":290,"hidden_from_listing":15,"tags":1157,"thumbnail_image":21,"og_image":1158,"series":1159,"authors":1160},56,"Data Types in the Java Language","Tipe Data pada Bahasa Java","tipe-data-pada-bahasa-java","A data type is an attribute that sticks to a piece of data and decides how that data can be treated.","Tipe data adalah atribut yang menempel pada sebuah data untuk menentukan perlakuan terhadap data tersebut.","2022-12-29T00:00:00.000Z",[919,1124,254,253],"\u002Fog\u002Ftipe-data-pada-bahasa-java.png",{"id":798,"title":1128,"title_id":1129,"slug":1130},[1161],{"authors_id":1162},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1164,"title":1165,"title_id":1166,"slug":1167,"excerpt":1168,"excerpt_id":1169,"has_translation":12,"published_at":1170,"reading_time":163,"hidden_from_listing":15,"tags":1171,"thumbnail_image":21,"og_image":1173,"series":1174,"authors":1175},55,"The Input System in the Java Language","Sistem Input pada Bahasa Java","sistem-input-pada-bahasa-java","In Java, the input system is handled by an object named Scanner, and that object has plenty of methods you can use for input.","Pada bahasa Java, sistem input dilayani oleh objek yang bernama Scanner. Objek ini memiliki banyak method yang dapat digunakan untuk sistem input.","2022-09-27T14:15:59.000Z",[919,1172,253],"input-output","\u002Fog\u002Fsistem-input-pada-bahasa-java.png",{"id":813,"title":923,"title_id":924,"slug":925},[1176],{"authors_id":1177},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1179,"title":1180,"title_id":1181,"slug":1182,"excerpt":1183,"excerpt_id":1184,"has_translation":12,"published_at":1185,"reading_time":163,"hidden_from_listing":15,"tags":1186,"thumbnail_image":21,"og_image":1188,"series":1189,"authors":1190},54,"Variables and Literals in the Java Language","Variabel dan Literal pada Bahasa Java","variabel-dan-literal-pada-bahasa-java","Literals and variables are important components, because these 2 things connect directly to data and how you manipulate it.","Literal dan variabel merupakan komponen yang penting, karena 2 hal ini berhubungan langsung dengan data dan manipulasinya.","2022-09-07T07:33:30.000Z",[919,1187,254,253],"variabel","\u002Fog\u002Fvariabel-dan-literal-pada-bahasa-java.png",{"id":813,"title":923,"title_id":924,"slug":925},[1191],{"authors_id":1192},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1194,"title":1195,"title_id":1196,"slug":1197,"excerpt":1198,"excerpt_id":1199,"has_translation":12,"published_at":1200,"reading_time":14,"hidden_from_listing":15,"tags":1201,"thumbnail_image":21,"og_image":1203,"series":1204,"authors":1205},98,"Functions and Sub Programs in Python","Fungsi dan Sub Program pada Python","fungsi-dan-sub-program-pada-python","A function is a block of code used to solve a specific problem, and functions are the key to building large programs in Python.","Fungsi atau dalam istilah pemrograman disebut dengan “function” merupakan blok kode yang digunakan untuk menyelesaikan masalah spesifik.","2022-09-06T03:33:06.000Z",[38,1106,1202],"sub-program","\u002Fog\u002Ffungsi-dan-sub-program-pada-python.png",{"id":827,"title":1109,"title_id":1110,"slug":1111},[1206],{"authors_id":1207},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1209,"title":1210,"title_id":1211,"slug":1212,"excerpt":1213,"excerpt_id":1214,"has_translation":12,"published_at":1215,"reading_time":14,"hidden_from_listing":15,"tags":1216,"thumbnail_image":21,"og_image":1217,"series":1218,"authors":1219},53,"The Output System in the Java Language","Sistem Output pada Bahasa Java","sistem-output-pada-bahasa-java","When we built the \"Hello World\" program we already met the `System.out.println` method. Java has other output methods too, and this piece goes through them.","Ketika membuat program \"Hello World\" kita sudah melihat method `System.out.println`. Selain method tersebut masih ada method lainnya, mari kita bahas.","2022-08-23T00:00:00.000Z",[919,1172,253],"\u002Fog\u002Fsistem-output-pada-bahasa-java.png",{"id":813,"title":923,"title_id":924,"slug":925},[1220],{"authors_id":1221},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1223,"title":1224,"title_id":1225,"slug":1226,"excerpt":1227,"excerpt_id":1228,"has_translation":12,"published_at":1229,"reading_time":290,"hidden_from_listing":15,"tags":1230,"thumbnail_image":21,"og_image":1233,"series":1234,"authors":1235},52,"Writing Comments in the Java Language","Penulisan Komentar pada Bahasa Java","penulisan-komentar-pada-bahasa-java","Java has several kinds of comments: single line comments, multiline comments, and doc comments.","Java memiliki beberapa jenis komentar yaitu komentar satu baris, banyak baris, dan komentar dokumentasi.","2022-08-21T03:23:11.000Z",[919,1231,252,1232],"komentar","best-practice","\u002Fog\u002Fpenulisan-komentar-pada-bahasa-java.png",{"id":813,"title":923,"title_id":924,"slug":925},[1236],{"authors_id":1237},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1239,"title":1240,"title_id":1241,"slug":1242,"excerpt":1243,"excerpt_id":1244,"has_translation":12,"published_at":1245,"reading_time":217,"hidden_from_listing":15,"tags":1246,"thumbnail_image":21,"og_image":1247,"series":1248,"authors":1249},51,"Understanding the Basic Structure of a Java Program","Mengenal Struktur Dasar Program Java","mengenal-struktur-dasar-program-java","Writing a program has a structure, the way writing a thesis does. And that structure has to be right so the computer doesn't reject it.","Ibarat menulis skripsi, membuat program ternyata juga ada strukturnya. Dan struktur ini harus sesuai supaya tidak ditolak oleh sang komputer.","2022-08-12T09:43:57.000Z",[919,252,253,254],"\u002Fog\u002Fmengenal-struktur-dasar-program-java.png",{"id":813,"title":923,"title_id":924,"slug":925},[1250],{"authors_id":1251},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1253,"title":1254,"title_id":1255,"slug":1256,"excerpt":1257,"excerpt_id":1258,"has_translation":12,"published_at":1259,"reading_time":49,"hidden_from_listing":15,"tags":1260,"thumbnail_image":21,"og_image":1262,"series":1263,"authors":1264},50,"Building a \"Hello World\" Program in Java","Membuat Program \"Hello World\" pada Java","membuat-program-hello-world-pada-java","This time we build our first program, Hello World, in the Java language.","Pada kesempatan kali ini kita akan membuat kode pertama kita, yaitu Hello World pada bahasa Java.","2022-08-11T00:00:00.000Z",[919,1261,253],"tutorial","\u002Fog\u002Fmembuat-program-hello-world-pada-java.png",{"id":813,"title":923,"title_id":924,"slug":925},[1265],{"authors_id":1266},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1268,"title":1269,"title_id":1270,"slug":1271,"excerpt":1272,"excerpt_id":1273,"has_translation":12,"published_at":1259,"reading_time":290,"hidden_from_listing":15,"tags":1274,"thumbnail_image":21,"og_image":1275,"series":1276,"authors":1277},49,"Getting to Know the Java Language","Berkenalan dengan Bahasa Java","berkenalan-dengan-bahasa-java","Java is a high-level programming language built on the OOP paradigm, and it carries the slogan “write once, run anywhere”.","Java merupakan bahasa pemrograman tingkat tinggi dengan paradigma OOP. Bahasa ini punya slogan “write once, run anywhere”",[919,977,877,253],"\u002Fog\u002Fberkenalan-dengan-bahasa-java.png",{"id":813,"title":923,"title_id":924,"slug":925},[1278],{"authors_id":1279},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1281,"title":1282,"title_id":1283,"slug":1284,"excerpt":1285,"excerpt_id":1286,"has_translation":12,"published_at":1287,"reading_time":290,"hidden_from_listing":15,"tags":1288,"thumbnail_image":21,"og_image":1290,"series":1291,"authors":1292},100,"The Pass Statement in Python","Pass Statement pada Python","pass-statement-pada-python","The pass statement in Python is a special statement you can only use inside a compound statement.","pass statement pada python merupakan statement spesial yang hanya bisa digunakan di dalam compound statement","2022-01-17T03:51:58.000Z",[38,252,1289],"struktur-kontrol","\u002Fog\u002Fpass-statement-pada-python.png",{"id":827,"title":1109,"title_id":1110,"slug":1111},[1293],{"authors_id":1294},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1296,"title":1297,"title_id":1298,"slug":1299,"excerpt":1300,"excerpt_id":1301,"has_translation":12,"published_at":1302,"reading_time":36,"hidden_from_listing":15,"tags":1303,"thumbnail_image":21,"og_image":1304,"series":1305,"authors":1306},99,"The Return Statement in Python","Return Statement pada Python","return-statement-pada-python","The return statement lets you send a value a function has already processed back to the caller.","Return statement memungkinkan kita mengembalikan nilai yang sudah diproses pada fungsi ke pemanggil.","2022-01-03T03:40:03.000Z",[38,1106,252],"\u002Fog\u002Freturn-statement-pada-python.png",{"id":827,"title":1109,"title_id":1110,"slug":1111},[1307],{"authors_id":1308},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1310,"title":1311,"title_id":1312,"slug":1313,"excerpt":1314,"excerpt_id":1315,"has_translation":12,"published_at":1316,"reading_time":14,"hidden_from_listing":15,"tags":1317,"thumbnail_image":21,"og_image":1320,"series":1321,"authors":1325},97,"List Comprehension in Python","List Comprehension Pada Pyhton","list-comprehension-pada-pyhton","List comprehension is the ternary operator in Python that shortens the process of initializing a list variable.","list comprehension merupakan ternary operator pada Python untuk mempersingkat proses inisialisasi variable list","2021-11-27T03:17:02.000Z",[38,1318,1319],"list","list-comprehension","\u002Fog\u002Flist-comprehension-pada-pyhton.png",{"id":841,"title":1322,"title_id":1323,"slug":1324},"Control Structures","Struktur Kontrol","python-struktur-kontrol",[1326],{"authors_id":1327},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1329,"title":1330,"title_id":1331,"slug":1332,"excerpt":1333,"excerpt_id":1334,"has_translation":12,"published_at":1335,"reading_time":290,"hidden_from_listing":15,"tags":1336,"thumbnail_image":21,"og_image":1339,"series":1340,"authors":1341},96,"Branching with the Ternary Operator in Python","Percabangan dengan Ternary Operator pada Python","percobangan-dengan-ternary-operator-pada-python","In Python the ternary operator shortens an assignment that involves an IF ELSE condition.","Pada Python ternary operator untuk mempersingkat assignment yang melibatkan kondisi IF ELSE.","2021-11-21T04:07:50.000Z",[38,1337,1338,1289],"percabangan","operator","\u002Fog\u002Fpercobangan-dengan-ternary-operator-pada-python.png",{"id":841,"title":1322,"title_id":1323,"slug":1324},[1342],{"authors_id":1343},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1345,"title":1346,"title_id":1347,"slug":1348,"excerpt":1349,"excerpt_id":1350,"has_translation":12,"published_at":1351,"reading_time":290,"hidden_from_listing":15,"tags":1352,"thumbnail_image":21,"og_image":1355,"series":1356,"authors":1357},95,"The BREAK and CONTINUE Statements in Python","Statement BREAK dan CONTINUE pada Python","statement-break-dan-continue-pada-python","Python has the break and continue statements to handle special cases in control structures.","Python memiliki statement break dan continue untuk mengatasi kasus-kasus khusus pada struktur kontrol.","2021-10-28T03:59:18.000Z",[38,1353,1354,1289],"perulangan","loop","\u002Fog\u002Fstatement-break-dan-continue-pada-python.png",{"id":841,"title":1322,"title_id":1323,"slug":1324},[1358],{"authors_id":1359},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1361,"title":1362,"title_id":1363,"slug":1364,"excerpt":1365,"excerpt_id":1366,"has_translation":12,"published_at":1367,"reading_time":217,"hidden_from_listing":15,"tags":1368,"thumbnail_image":21,"og_image":1369,"series":1370,"authors":1371},94,"Repetition with the WHILE Loop in Python","Perulangan dengan WHILE Loop pada Python","perulangan-dengan-while-loop-pada-python","Unlike the for loop, a while loop uses a boolean condition as its controller.","Berbeda dengan perulangan for, dengan while kita akan menggunakan kondisi boolean sebagai pengendalinya.","2021-07-21T03:52:03.000Z",[38,1353,1354,1289],"\u002Fog\u002Fperulangan-dengan-while-loop-pada-python.png",{"id":841,"title":1322,"title_id":1323,"slug":1324},[1372],{"authors_id":1373},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1375,"title":1376,"title_id":1377,"slug":1378,"excerpt":1379,"excerpt_id":1380,"has_translation":12,"published_at":1381,"reading_time":14,"hidden_from_listing":15,"tags":1382,"thumbnail_image":21,"og_image":1383,"series":1384,"authors":1385},93,"Repetition with the FOR Loop in Python","Perulangan dengan FOR Loop pada Python","perulangan-dengan-for-loop-pada-python","A for loop is a loop where you already know when it starts and when it ends.","for loop merupakan perulangan yang sudah diketahui kapan mulainya dan kapan selesainya.","2021-07-10T03:46:32.000Z",[38,1353,1354,1289],"\u002Fog\u002Fperulangan-dengan-for-loop-pada-python.png",{"id":841,"title":1322,"title_id":1323,"slug":1324},[1386],{"authors_id":1387},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1389,"title":1390,"title_id":1391,"slug":1392,"excerpt":1393,"excerpt_id":1394,"has_translation":12,"published_at":1395,"reading_time":290,"hidden_from_listing":15,"tags":1396,"thumbnail_image":21,"og_image":1397,"series":1398,"authors":1399},92,"Branching with IF, ELIF, ELSE in Python","Percabangan dengan IF, ELIF, ELSE pada Python","percabangan-dengan-if-elif-else-pada-python","A conditional statement runs a command only when its condition holds. In Python, the if statement handles that job.","Conditional statement bertugas untuk menjalankan perintah sesuai kondisi. Pada python, hal ini ditangani oleh if statement.","2021-05-28T03:36:19.000Z",[38,1337,1289],"\u002Fog\u002Fpercabangan-dengan-if-elif-else-pada-python.png",{"id":841,"title":1322,"title_id":1323,"slug":1324},[1400],{"authors_id":1401},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1403,"title":1404,"title_id":1405,"slug":1406,"excerpt":1407,"excerpt_id":1408,"has_translation":12,"published_at":1409,"reading_time":217,"hidden_from_listing":15,"tags":1410,"thumbnail_image":21,"og_image":1411,"series":1412,"authors":1416},91,"Input and Output Systems in Python 3","Sistem Input dan Output pada Python 3","sistem-input-dan-output-pada-python-3","A few functions, print() and input() among them, are the standard tools most I\u002FO work in Python is built on.","Beberapa fungsi seperti print() dan input(), merupakan fungsi standar yang banyak digunakan untuk melakukan I\u002FO.","2021-05-19T14:57:25.000Z",[38,1172,253],"\u002Fog\u002Fsistem-input-dan-output-pada-python-3.png",{"id":856,"title":1413,"title_id":1414,"slug":1415},"Working with Python Scripts","Menggunakan Script Python","python-pemrograman-dengan-script",[1417],{"authors_id":1418},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1420,"title":1421,"title_id":1422,"slug":1423,"excerpt":1424,"excerpt_id":1425,"has_translation":12,"published_at":1426,"reading_time":290,"hidden_from_listing":15,"tags":1427,"thumbnail_image":21,"og_image":1429,"series":1430,"authors":1434},79,"Using and Writing a FUNCTION in Pascal","Penggunaan dan Penulisan FUNCTION pada Pascal","penggunaan-dan-penulisan-function-pada-pascal","A sub program that does not return a value is called a PROCEDURE, while one that returns a value is called a FUNCTION.","Sub program yang tidak mengembalikan nilai dinamakan PROCEDURE, sedangkan yang mengembalikan nilai dinamakan FUNCTION.","2021-04-21T13:01:16.000Z",[1428,1106,1202],"pascal","\u002Fog\u002Fpenggunaan-dan-penulisan-function-pada-pascal.png",{"id":736,"title":1431,"title_id":1432,"slug":1433},"Procedural Programming","Pemrograman Prosedural","pascal-pemrograman-prosedural",[1435],{"authors_id":1436},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1438,"title":1439,"title_id":1440,"slug":1441,"excerpt":1442,"excerpt_id":1443,"has_translation":12,"published_at":1444,"reading_time":290,"hidden_from_listing":15,"tags":1445,"thumbnail_image":21,"og_image":1447,"series":1448,"authors":1449},78,"Using and Writing a PROCEDURE in Pascal","Penggunaan dan Penulisan PROCEDURE pada Pascal","penggunaan-dan-penulisan-procedure-pada-pascal","The main parts of a PROCEDURE are its name and its body, with parameters and local declarations as the optional parts.","Bagian utama dari sebuah PROCEDURE adalah nama dan tubuh PROCEDURE. Ada juga bagian opsional yaitu parameter dan deklarasi lokal.","2021-04-15T12:54:14.000Z",[1428,1446,1202],"prosedur","\u002Fog\u002Fpenggunaan-dan-penulisan-procedure-pada-pascal.png",{"id":736,"title":1431,"title_id":1432,"slug":1433},[1450],{"authors_id":1451},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1453,"title":1454,"title_id":1455,"slug":1456,"excerpt":1457,"excerpt_id":1458,"has_translation":12,"published_at":1459,"reading_time":290,"hidden_from_listing":15,"tags":1460,"thumbnail_image":21,"og_image":1461,"series":1462,"authors":1463},77,"About Procedural Programming in Pascal","Tentang Pemrograman Prosedural pada Pascal","tentang-pemrograman-prosedural-pada-pascal","Procedural programming is one of the programming paradigms, where several statements are combined into one procedure.","Pemrograman peosedural merupakan salah satu paradigma pemrograman dimana beberapa perintah digabungkan menjadi satu dalam sebuah prosedur.","2021-04-13T12:44:49.000Z",[1428,877,1446,254],"\u002Fog\u002Ftentang-pemrograman-prosedural-pada-pascal.png",{"id":736,"title":1431,"title_id":1432,"slug":1433},[1464],{"authors_id":1465},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1467,"title":1468,"title_id":1469,"slug":1470,"excerpt":1471,"excerpt_id":1472,"has_translation":12,"published_at":1473,"reading_time":217,"hidden_from_listing":15,"tags":1474,"thumbnail_image":21,"og_image":1477,"series":1478,"authors":1479},90,"Writing and Running a Python Script","Menulis dan Menjalankan Script Python","menulis-dan-menjalankan-script-python","A Python script is a file holding Python code, and it usually carries the .py extension.","Script python merupakan file berisi kode dengan bahasa Python yang biasanya memiliki ekstensi .py","2021-03-21T14:49:24.000Z",[38,1261,1475,1476],"tooling","cli","\u002Fog\u002Fmenulis-dan-menjalankan-script-python.png",{"id":856,"title":1413,"title_id":1414,"slug":1415},[1480],{"authors_id":1481},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1483,"title":1484,"title_id":1485,"slug":1486,"excerpt":1487,"excerpt_id":1488,"has_translation":12,"published_at":1489,"reading_time":217,"hidden_from_listing":15,"tags":1490,"thumbnail_image":21,"og_image":1491,"series":1492,"authors":1494},89,"List Data Types in Python 3","Tipe Data List pada Python 3","tipe-data-list-pada-python-3","In Python, a list is a data type that can hold many values. Other languages may be more familiar to you as arrays.","Pada Python, list merupakan tipe data yang dapat memuat banyak nilai. Dalam bahasa lain mungkin lebih familiar dengan sebutan array.","2021-03-19T14:43:52.000Z",[38,1124,1318],"\u002Fog\u002Ftipe-data-list-pada-python-3.png",{"id":869,"title":1128,"title_id":1129,"slug":1493},"python-variabel-tipe-data",[1495],{"authors_id":1496},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1498,"title":1499,"title_id":1500,"slug":1501,"excerpt":1502,"excerpt_id":1503,"has_translation":12,"published_at":1504,"reading_time":290,"hidden_from_listing":15,"tags":1505,"thumbnail_image":21,"og_image":1507,"series":1508,"authors":1509},88,"Boolean Data Types in Python 3","Tipe Data Boolean pada Python 3","tipe-data-boolean-pada-python-3","A boolean is a data type that holds only 2 values, true and false. It earns its keep once you work with control structures.","Boolean adalah tipe data yang hanya dapat memuat 2 nilai yaitu true dan false. Tipe data ini berguna saat kita berurusan dengan struktur kontrol.","2021-03-18T14:36:11.000Z",[38,1124,1506],"boolean","\u002Fog\u002Ftipe-data-boolean-pada-python-3.png",{"id":869,"title":1128,"title_id":1129,"slug":1493},[1510],{"authors_id":1511},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1513,"title":1514,"title_id":1515,"slug":1516,"excerpt":1517,"excerpt_id":1518,"has_translation":12,"published_at":1519,"reading_time":290,"hidden_from_listing":15,"tags":1520,"thumbnail_image":21,"og_image":1521,"series":1522,"authors":1523},87,"String Data Types in Python 3","Tipe Data String pada Python 3","tipe-data-string-pada-python-3","A string in Python is a data type that holds one character or a run of them, and quotation marks are what mark it.","String pada Python merupakan tipe data yang memuat sebuah atau sekumpulan karakter. String ditandai dengan tanda petik.","2021-03-08T14:28:42.000Z",[38,1124,39],"\u002Fog\u002Ftipe-data-string-pada-python-3.png",{"id":869,"title":1128,"title_id":1129,"slug":1493},[1524],{"authors_id":1525},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1527,"title":1528,"title_id":1529,"slug":1530,"excerpt":1531,"excerpt_id":1532,"has_translation":12,"published_at":1533,"reading_time":217,"hidden_from_listing":15,"tags":1534,"thumbnail_image":21,"og_image":1535,"series":1536,"authors":1537},86,"Numeric Data Types in Python 3","Tipe Data Numerik pada Python 3","tipe-data-numerik-pada-python-3","Python has several numeric data types, such as int, float, and complex. Here is how each one behaves.","Pada python ada beberapa tipe data numerik. Seperti int, float, dan complex. Mari kita bahas lebih lanjut.","2021-02-19T04:13:20.000Z",[38,1124,1143,1125],"\u002Fog\u002Ftipe-data-numerik-pada-python-3.png",{"id":869,"title":1128,"title_id":1129,"slug":1493},[1538],{"authors_id":1539},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1541,"title":1542,"title_id":1543,"slug":1544,"excerpt":1545,"excerpt_id":1546,"has_translation":12,"published_at":1547,"reading_time":424,"hidden_from_listing":15,"tags":1548,"thumbnail_image":21,"og_image":1549,"series":1550,"authors":1551},85,"Getting to Know Data Types in Python 3","Mengenal Tipe Data pada Python 3","mengenal-tipe-data-pada-python-3","A data type is the attribute that spells out which operations can be done to a variable.","Tipe data merupakan atribut yang menandakan perlakuan apa saja yang dapat dilakukan terhadap variabel tersebut.","2021-02-09T04:08:46.000Z",[38,1124,253,254],"\u002Fog\u002Fmengenal-tipe-data-pada-python-3.png",{"id":869,"title":1128,"title_id":1129,"slug":1493},[1552],{"authors_id":1553},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1555,"title":1556,"title_id":1557,"slug":1558,"excerpt":1559,"excerpt_id":1560,"has_translation":12,"published_at":1561,"reading_time":290,"hidden_from_listing":15,"tags":1562,"thumbnail_image":21,"og_image":1563,"series":1564,"authors":1565},84,"Creating and Using Variables in Python","Membuat dan Menggunakan Variabel pada Python","membuat-dan-menggunakan-variabel-pada-python","Python is so simple it has no special rule for creating a variable. A variable appears automatically the moment you assign a value to a name.","Saking simpelnya, bahasa python tidak memiliki aturan khusus untuk membuat variable. Variabel otomatis terbuat ketika melakukan assignment.","2021-02-08T04:03:54.000Z",[38,1187,253],"\u002Fog\u002Fmembuat-dan-menggunakan-variabel-pada-python.png",{"id":869,"title":1128,"title_id":1129,"slug":1493},[1566],{"authors_id":1567},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1569,"title":1570,"title_id":1571,"slug":1572,"excerpt":1573,"excerpt_id":1574,"has_translation":12,"published_at":1575,"reading_time":290,"hidden_from_listing":15,"tags":1576,"thumbnail_image":21,"og_image":1577,"series":1578,"authors":1582},83,"Getting to Know Python's Basic Syntax","Mengenal Sintaks Dasar Bahasa Python","mengenal-sintaks-dasar-bahasa-python","You can't write Python code any way you like. There are syntax rules you have to follow, or the program errors out.","Penulisan kode python tidak sembarangan, ada beberapa aturan sintaks yang harus kita ikuti agar program tidak error.","2021-02-07T03:56:55.000Z",[38,252,253],"\u002Fog\u002Fmengenal-sintaks-dasar-bahasa-python.png",{"id":883,"title":1579,"title_id":1580,"slug":1581},"Getting Started with Python","Berkenalan dengan Bahasa Python","python-intro",[1583],{"authors_id":1584},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1586,"title":1587,"title_id":1588,"slug":1589,"excerpt":1590,"excerpt_id":1591,"has_translation":12,"published_at":1592,"reading_time":424,"hidden_from_listing":15,"tags":1593,"thumbnail_image":21,"og_image":1594,"series":1595,"authors":1596},82,"Playing with the Python Interpreter","Bermain dengan Interpreter Python","bermain-dengan-interpreter-python","Python ships with an interactive interpreter you can use to run Python code right there in the terminal.","Python punya interpreter interaktif yang dapat kita gunakan untuk mengeksekusi kode python secara langsung di terminal.","2021-02-05T03:23:01.000Z",[38,1476,1475,1261],"\u002Fog\u002Fbermain-dengan-interpreter-python.png",{"id":883,"title":1579,"title_id":1580,"slug":1581},[1597],{"authors_id":1598},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1600,"title":1601,"title_id":1602,"slug":1603,"excerpt":1604,"excerpt_id":1605,"has_translation":12,"published_at":1606,"reading_time":14,"hidden_from_listing":15,"tags":1607,"thumbnail_image":21,"og_image":1609,"series":1610,"authors":1611},81,"Installing Python 3 on Windows and Linux","Instalasi Python 3 di Windows dan Linux","instalasi-python-3-di-windows-dan-linux","Python 3 is the interpreter that runs your Python scripts, the piece that makes the code you write actually execute.","Python 3 ini fungsinya sebagai interpreter dari *script* python agar kode yang kita buat bisa dijalankan.","2021-02-01T15:21:27.000Z",[38,1608,1475],"instalasi","\u002Fog\u002Finstalasi-python-3-di-windows-dan-linux.png",{"id":883,"title":1579,"title_id":1580,"slug":1581},[1612],{"authors_id":1613},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1615,"title":1616,"title_id":1617,"slug":1618,"excerpt":1619,"excerpt_id":1620,"has_translation":12,"published_at":1621,"reading_time":290,"hidden_from_listing":15,"tags":1622,"thumbnail_image":21,"og_image":1623,"series":1624,"authors":1625},80,"Getting to Know the Python Programming Language","Mengenal Bahasa Pemrograman Python","mengenal-bahasa-pemrograman-python","Python was designed so its syntax reads easily and feels human, unlike other languages that bury you in unfamiliar symbols.","Python didesain sedemikian rupa sehingga sintaksnya mudah terbaca dan sangat manusiawi. Tidak seperti bahasa lain yang punya banyak simbol asing.","2021-01-30T13:26:10.000Z",[38,977,877,253],"\u002Fog\u002Fmengenal-bahasa-pemrograman-python.png",{"id":883,"title":1579,"title_id":1580,"slug":1581},[1626],{"authors_id":1627},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1629,"title":1630,"title_id":1631,"slug":1632,"excerpt":1633,"excerpt_id":1634,"has_translation":12,"published_at":1635,"reading_time":424,"hidden_from_listing":15,"tags":1636,"thumbnail_image":21,"og_image":1638,"series":1639,"authors":1643},76,"Using Pointers in Pascal","Menggunakan Pointer pada Bahasa Pascal","menggunakan-pointer-pada-bahasa-pascal","A variable of pointer type can only hold the address of another variable, and changing it changes that other variable.","Sebuah variable yang bertipe pointer nantinya hanya dapat berisi sebuah alamat dari variable lain.","2020-12-02T14:17:47.000Z",[1428,1637,1124,254],"pointer","\u002Fog\u002Fmenggunakan-pointer-pada-bahasa-pascal.png",{"id":753,"title":1640,"title_id":1641,"slug":1642},"Composite Types","Tipe Data Bentukan","pascal-tipe-data-bentukan",[1644],{"authors_id":1645},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1647,"title":1648,"title_id":1649,"slug":1650,"excerpt":1651,"excerpt_id":1652,"has_translation":12,"published_at":1653,"reading_time":217,"hidden_from_listing":15,"tags":1654,"thumbnail_image":21,"og_image":1657,"series":1658,"authors":1659},75,"Using the Array Data Type in Pascal","Menggunakan Tipe Data Array pada Pascal","menggunakan-tipe-data-array-pada-pascal","An ARRAY is a structure that holds a set of data with the same type, and you reach each item in it through its index.","ARRAY merupakan struktur data yang berisi sekumpulan data dengan tipe data yang sama. Data dalam ARRAY ini dapat diakses dengan menggunakan index.","2020-12-02T14:01:22.000Z",[1428,1655,1124,1656],"array","struktur-data","\u002Fog\u002Fmenggunakan-tipe-data-array-pada-pascal.png",{"id":753,"title":1640,"title_id":1641,"slug":1642},[1660],{"authors_id":1661},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1663,"title":1664,"title_id":1665,"slug":1666,"excerpt":1667,"excerpt_id":1668,"has_translation":12,"published_at":1669,"reading_time":290,"hidden_from_listing":15,"tags":1670,"thumbnail_image":21,"og_image":1672,"series":1673,"authors":1674},74,"Using the RECORD Data Type in Pascal","Menggunakan Tipe Data RECORD pada Pascal","menggunakan-tipe-data-record-pada-pascal","RECORD is a structured data type in Pascal, built from a collection of standard and user-defined data types.","RECORD merupakan tipe data terstruktur pada bahasa Pascal yang terdiri dari kumpulan tipe data standar dan bentukan.","2020-11-27T13:54:30.000Z",[1428,1671,1124,1656],"record","\u002Fog\u002Fmenggunakan-tipe-data-record-pada-pascal.png",{"id":753,"title":1640,"title_id":1641,"slug":1642},[1675],{"authors_id":1676},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1678,"title":1679,"title_id":1680,"slug":1681,"excerpt":1682,"excerpt_id":1683,"has_translation":12,"published_at":1684,"reading_time":290,"hidden_from_listing":15,"tags":1685,"thumbnail_image":21,"og_image":1686,"series":1687,"authors":1688},73,"User-Defined Data Types in Pascal","Tentang Tipe Data Bentukan pada Pascal","tentang-tipe-data-bentukan-pada-pascal","User-defined data types in Pascal come in 2 kinds, Enumerated and Subrange, and you declare both of them yourself.","Tipe data bentukan atau User defined data types terbagi menjadi 2, yaitu Enumerated dan Subrange","2020-11-22T13:49:03.000Z",[1428,1124,1656,254],"\u002Fog\u002Ftentang-tipe-data-bentukan-pada-pascal.png",{"id":753,"title":1640,"title_id":1641,"slug":1642},[1689],{"authors_id":1690},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1692,"title":1693,"title_id":1694,"slug":1695,"excerpt":1696,"excerpt_id":1697,"has_translation":12,"published_at":1698,"reading_time":290,"hidden_from_listing":15,"tags":1699,"thumbnail_image":21,"og_image":1700,"series":1701,"authors":1703},72,"Branching with CASE OF in Pascal","Percabangan dengan CASE OF pada Pascal","percabangan-dengan-case-of-pada-pascal","CASE OF in Pascal is branching that uses a variable and its values to decide which condition applies.","CASE OF pada Pascal merupakan percabangan yang menggunakan variable dan nilainya untuk menentukan sebuah kondisi","2020-11-17T12:41:17.000Z",[1428,1337,1289],"\u002Fog\u002Fpercabangan-dengan-case-of-pada-pascal.png",{"id":768,"title":1322,"title_id":1323,"slug":1702},"pascal-struktur-kontrol",[1704],{"authors_id":1705},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1707,"title":1708,"title_id":1709,"slug":1710,"excerpt":1711,"excerpt_id":1712,"has_translation":12,"published_at":1713,"reading_time":424,"hidden_from_listing":15,"tags":1714,"thumbnail_image":21,"og_image":1715,"series":1716,"authors":1717},71,"Loops with the REPEAT UNTIL Loop in Pascal","Perulangan dengan REPEAT UNTIL loop pada Pascal","perulangan-dengan-repeat-until-loop-pada-pascal","A REPEAT UNTIL loop checks its condition at the end of the statement and keeps running as long as that condition is still false.","Pada REPEAT UNTIL loop, pengecekan kondisi dilakukan pada akhir perintah dan perulangan akan terus berjalan selama kondisi masih bernilai `false`.","2020-11-15T12:34:28.000Z",[1428,1353,1354,1289],"\u002Fog\u002Fperulangan-dengan-repeat-until-loop-pada-pascal.png",{"id":768,"title":1322,"title_id":1323,"slug":1702},[1718],{"authors_id":1719},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1721,"title":1722,"title_id":1723,"slug":1724,"excerpt":1725,"excerpt_id":1726,"has_translation":12,"published_at":1727,"reading_time":290,"hidden_from_listing":15,"tags":1728,"thumbnail_image":21,"og_image":1729,"series":1730,"authors":1731},70,"Loops with the WHILE DO Loop in Pascal","Perulangan dengan WHILE DO loop pada Pascal","perulangan-dengan-while-do-loop-pada-pascal","A WHILE DO loop is a Pascal loop that uses a boolean expression as the marker for repeating, and it keeps going as long as that condition is true.","WHILE DO loop merupakan perulangan pada Pascal yang menggunakan kondisi berupa ekspresi boolean sebagai penanda perulangannya.","2020-11-13T12:29:04.000Z",[1428,1353,1354,1289],"\u002Fog\u002Fperulangan-dengan-while-do-loop-pada-pascal.png",{"id":768,"title":1322,"title_id":1323,"slug":1702},[1732],{"authors_id":1733},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1735,"title":1736,"title_id":1737,"slug":1738,"excerpt":1739,"excerpt_id":1740,"has_translation":12,"published_at":1741,"reading_time":290,"hidden_from_listing":15,"tags":1742,"thumbnail_image":21,"og_image":1743,"series":1744,"authors":1745},69,"Loops with the FOR Loop in Pascal","Perulangan dengan FOR loop pada Pascal","perulangan-dengan-for-loop-pada-pascal","In a FOR loop we tell the computer to run a statement a specific number of times, spelled out up front.","Pada FOR loop kita menginstruksikan komputer untuk menjalankan suatu perintah sebanyak berapa kali secara explisit.","2020-11-11T12:16:50.000Z",[1428,1353,1354,1289],"\u002Fog\u002Fperulangan-dengan-for-loop-pada-pascal.png",{"id":768,"title":1322,"title_id":1323,"slug":1702},[1746],{"authors_id":1747},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1749,"title":1750,"title_id":1751,"slug":1752,"excerpt":1753,"excerpt_id":1754,"has_translation":12,"published_at":1755,"reading_time":217,"hidden_from_listing":15,"tags":1756,"thumbnail_image":21,"og_image":1757,"series":1758,"authors":1759},68,"Branching with IF and ELSE Conditions in Pascal","Percabangan dengan Kondisi IF dan ELSE pada Pascal","percabangan-dengan-kondisi-if-dan-else-pada-pascal","This time we'll walk through branching conditions in Pascal using the IF ELSE keyword.","Pada kesempatan kali ini kita akan membahas sebuah kondisi percabangan dengan menggunakan keyword IF ELSE.","2020-11-09T14:33:48.000Z",[1428,1337,1289],"\u002Fog\u002Fpercabangan-dengan-kondisi-if-dan-else-pada-pascal.png",{"id":768,"title":1322,"title_id":1323,"slug":1702},[1760],{"authors_id":1761},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1763,"title":1764,"title_id":1765,"slug":1766,"excerpt":1767,"excerpt_id":1768,"has_translation":12,"published_at":1769,"reading_time":217,"hidden_from_listing":15,"tags":1770,"thumbnail_image":21,"og_image":1771,"series":1772,"authors":1773},67,"Boolean Expressions and Logical Operations in Pascal","Expresi Boolean dan Operasi Logika pada Bahasa Pascal","expresi-boolean-dan-operasi-logika-pada-bahasa-pascal","Building a programming algorithm needs boolean expressions, and a boolean expression can be a logical operation or a comparison.","Dalam penyusunan algoritma pemrograman, perlu yang namanya expresi boolean. Expresi boolean dapat berupa operasi logika dan perbandingan.","2020-11-05T14:29:24.000Z",[1428,1506,1338,1289],"\u002Fog\u002Fexpresi-boolean-dan-operasi-logika-pada-bahasa-pascal.png",{"id":768,"title":1322,"title_id":1323,"slug":1702},[1774],{"authors_id":1775},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1777,"title":1778,"title_id":1779,"slug":1780,"excerpt":1781,"excerpt_id":1782,"has_translation":12,"published_at":1783,"reading_time":290,"hidden_from_listing":15,"tags":1784,"thumbnail_image":21,"og_image":1785,"series":1786,"authors":1789},59,"Getting to Know the Pascal Language","Berkenalan dengan Bahasa Pascal","berkenalan-dengan-bahasa-pascal","Pascal is a programming language with a simple, expressive, and readable syntax. That makes it a good first language for beginners.","Pascal merupakan bahasa pemrograman dengan sintaks sederhana, ekspresif, dan mudah dibaca. Ini membuatnya menjadi bahasa pemrograman yang baik untuk pemula.","2020-10-28T09:11:25.000Z",[1428,977,877,253],"\u002Fog\u002Fberkenalan-dengan-bahasa-pascal.png",{"id":782,"title":1787,"title_id":1779,"slug":1788},"Getting Started with Pascal","pascal-intro",[1790],{"authors_id":1791},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1793,"title":1794,"title_id":1795,"slug":1796,"excerpt":1797,"excerpt_id":1798,"has_translation":12,"published_at":1799,"reading_time":290,"hidden_from_listing":15,"tags":1800,"thumbnail_image":21,"og_image":1801,"series":1802,"authors":1803},60,"Input with Read and Readln in Pascal","Sistem Input dengan Read dan Readln pada Bahasa Pascal","sistem-input-dengan-read-dan-readln-pada-bahasa-pascal","This time you'll learn how keyboard input works with the read and readln commands in Pascal.","Pada kesempatan kali ini kita akan belajar tentang proses masukan dari keyboard dengan menggunakan perintah read dan readln pada Bahasa Pascal.","2020-10-22T12:05:49.000Z",[1428,1172,252],"\u002Fog\u002Fsistem-input-dengan-read-dan-readln-pada-bahasa-pascal.png",{"id":782,"title":1787,"title_id":1779,"slug":1788},[1804],{"authors_id":1805},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1807,"title":1808,"title_id":1809,"slug":1810,"excerpt":1811,"excerpt_id":1812,"has_translation":12,"published_at":1813,"reading_time":14,"hidden_from_listing":15,"tags":1814,"thumbnail_image":21,"og_image":1815,"series":1816,"authors":1817},66,"Arithmetic Operations in Pascal","Operasi Aritmatika pada Bahasa Pascal","operasi-aritmatika-pada-bahasa-pascal","Once you know what a data type is, the next question is which operations each type allows. Here is the answer for Pascal, type by type.","Setelah tahu tentang apa itu tipe data, sekarang kita akan coba belajar tentang operasi apa saja yang dapat dilakukan pada setiap tipe data dalam bahasa Pascal.","2020-10-18T11:46:28.000Z",[1428,1338,253],"\u002Fog\u002Foperasi-aritmatika-pada-bahasa-pascal.png",{"id":782,"title":1787,"title_id":1779,"slug":1788},[1818],{"authors_id":1819},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1821,"title":1822,"title_id":1823,"slug":1824,"excerpt":1825,"excerpt_id":1826,"has_translation":12,"published_at":1827,"reading_time":163,"hidden_from_listing":15,"tags":1828,"thumbnail_image":21,"og_image":1829,"series":1830,"authors":1831},65,"Variables, Constants, and Data Types in Pascal","Variable, Konstanta, dan Tipe Data pada Pascal","variable-konstanta-dan-tipe-data-pada-pascal","Variables, constants, and data types are the heart of programming: they're what you use to manipulate data.","Variable, konstanta, dan tipe data merupakan jantung dari pemrograman yang akan kita gunakan untuk melakukan manipulasi data.","2020-10-11T11:25:24.000Z",[1428,1187,1124,253],"\u002Fog\u002Fvariable-konstanta-dan-tipe-data-pada-pascal.png",{"id":782,"title":1787,"title_id":1779,"slug":1788},[1832],{"authors_id":1833},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1835,"title":1836,"title_id":1837,"slug":1838,"excerpt":1839,"excerpt_id":1840,"has_translation":12,"published_at":1841,"reading_time":290,"hidden_from_listing":15,"tags":1842,"thumbnail_image":21,"og_image":1843,"series":1844,"authors":1845},64,"Output with Write and Writeln in Pascal","Output dengan Write dan Writeln pada Bahasa Pascal","output-dengan-write-dan-writeln-pada-bahasa-pascal","Output matters in programming, and not only there: every process is judged by what it produces. This is how Pascal puts text on the console.","Sistem output merupakan suatu yang sangat penting dalam pemrograman. Bukan cuma pemrograman, bahkan semua hal pasti berorientasi pada output.","2020-10-09T11:17:19.000Z",[1428,1172,252],"\u002Fog\u002Foutput-dengan-write-dan-writeln-pada-bahasa-pascal.png",{"id":782,"title":1787,"title_id":1779,"slug":1788},[1846],{"authors_id":1847},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1849,"title":1850,"title_id":1851,"slug":1852,"excerpt":1853,"excerpt_id":1854,"has_translation":12,"published_at":1855,"reading_time":290,"hidden_from_listing":15,"tags":1856,"thumbnail_image":21,"og_image":1857,"series":1858,"authors":1859},63,"Writing Comments in Pascal","Penulisan Komentar pada Bahasa Pascal","penulisan-komentar-pada-bahasa-pascal","This time we'll cover how to write comments in Pascal. A comment is the part of the code the computer never reads.","Kali ini kita akan membahas tentang penulisan komentar pada bahasa Pascal. Komentar adalah bagian dar kode yang tidak akan dibaca oleh komputer.","2020-10-05T11:08:33.000Z",[1428,1231,252,1232],"\u002Fog\u002Fpenulisan-komentar-pada-bahasa-pascal.png",{"id":782,"title":1787,"title_id":1779,"slug":1788},[1860],{"authors_id":1861},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1863,"title":1864,"title_id":1865,"slug":1866,"excerpt":1867,"excerpt_id":1868,"has_translation":12,"published_at":1869,"reading_time":217,"hidden_from_listing":15,"tags":1870,"thumbnail_image":21,"og_image":1871,"series":1872,"authors":1873},62,"The Parts and Structure of a Pascal Program","Mengenal Bagian dan Struktur Bahasa Pascal","mengenal-bagian-dan-struktur-bahasa-pascal","Like a letter that runs from the letterhead to the signature, Pascal code has writing rules and a structure it has to satisfy. Here is what goes where.","Ibarat menulis surat mulai dari kepala surat sampai tanda tangan, kode Pascal juga memiliki aturan penulisan dan struktur yang harus dipenuhi. Mari kita bahas lebih lanjut.","2020-10-04T13:29:37.000Z",[1428,252,253,254],"\u002Fog\u002Fmengenal-bagian-dan-struktur-bahasa-pascal.png",{"id":782,"title":1787,"title_id":1779,"slug":1788},[1874],{"authors_id":1875},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1877,"title":1878,"title_id":1879,"slug":1880,"excerpt":1881,"excerpt_id":1882,"has_translation":12,"published_at":1883,"reading_time":217,"hidden_from_listing":15,"tags":1884,"thumbnail_image":21,"og_image":1885,"series":1886,"authors":1887},103,"Writing Your First Hello World Program in Pascal","Membuat Program Hello World pada Pascal","membuat-program-hello-world-pada-pascal","With Free Pascal installed on Windows or Linux, it's time for your first program, plus a quick look around the Free Pascal IDE.","Setelah melakukan instalasi Free Pascal baik pada windows atau linux, kali ini kita akan belajar untuk membuat program pertama kita. Sekaligus kenalan sedikit dengan Program Free Pascal.","2020-10-02T13:06:35.000Z",[1428,1261,253],"\u002Fog\u002Fmembuat-program-hello-world-pada-pascal.png",{"id":782,"title":1787,"title_id":1779,"slug":1788},[1888],{"authors_id":1889},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1891,"title":1892,"title_id":1893,"slug":1894,"excerpt":1895,"excerpt_id":1896,"has_translation":12,"published_at":1897,"reading_time":290,"hidden_from_listing":15,"tags":1898,"thumbnail_image":21,"og_image":1899,"series":1900,"authors":1901},61,"Installing Free Pascal on Linux","Menginstall Free Pascal pada Linux","menginstall-free-pascal-pada-linux","To run Pascal code you need a compiler. This time we'll use Free Pascal as both our compiler and our code editor.","Untuk menjalankan kode Pascal pada sistem operasi Windows kita perlu compiler. Kali ini kita akan mengunakan Free Pascal sebagai compiler sekaligus code editor kita.","2020-10-01T07:33:57.000Z",[1428,1608,1475],"\u002Fog\u002Fmenginstall-free-pascal-pada-linux.png",{"id":782,"title":1787,"title_id":1779,"slug":1788},[1902],{"authors_id":1903},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},{"id":1905,"title":1906,"title_id":1907,"slug":1908,"excerpt":1909,"excerpt_id":1896,"has_translation":12,"published_at":1910,"reading_time":14,"hidden_from_listing":15,"tags":1911,"thumbnail_image":21,"og_image":1912,"series":1913,"authors":1914},102,"Installing Free Pascal on Windows","Menginstal Free Pascal pada Windows","menginstal-free-pascal-pada-windows","To run Pascal code on Windows you need a compiler. This time we'll use Free Pascal as both our compiler and our code editor.","2020-09-30T07:32:11.000Z",[1428,1608,1475],"\u002Fog\u002Fmenginstal-free-pascal-pada-windows.png",{"id":782,"title":1787,"title_id":1779,"slug":1788},[1915],{"authors_id":1916},{"id":49,"name":50,"slug":51,"role":52,"profile_picture":21},[38,166,1428,253,167,1124,1289,919],[1919,1923,1947,2028,2045],{"id":49,"title":1920,"title_id":1920,"slug":1261,"description":1921,"description_id":21,"cover_image":21,"parent_series":21,"articles":1922},"Tutorial","Step-by-step series, one language or topic at a time. Start at the beginning and follow it in order.",[],{"id":109,"title":110,"title_id":111,"slug":112,"description":1924,"description_id":21,"cover_image":21,"parent_series":1925,"articles":1926},"Notes on AI that go past the demo: how the models work, where they break, and what changes once you put them in production.",{"slug":27},[1927,1929,1931,1933,1935,1937,1939,1941,1943,1945],{"id":49,"title":1087,"title_id":1088,"slug":1089,"excerpt":1090,"excerpt_id":1091,"tags":1928},[1035,1066,1050,1052],{"id":424,"title":1074,"title_id":1075,"slug":1076,"excerpt":1077,"excerpt_id":1078,"tags":1930},[1066,130,1050,1035],{"id":290,"title":1059,"title_id":1060,"slug":1061,"excerpt":1062,"excerpt_id":1063,"tags":1932},[1066,1035,1067,1050],{"id":217,"title":1043,"title_id":1044,"slug":1045,"excerpt":1046,"excerpt_id":1047,"tags":1934},[1035,1050,1051,1052],{"id":14,"title":1028,"title_id":1029,"slug":1030,"excerpt":1031,"excerpt_id":1032,"tags":1936},[1035,1036],{"id":174,"title":175,"title_id":176,"slug":177,"excerpt":178,"excerpt_id":179,"tags":1938},[182,183,184,130,166,38],{"id":156,"title":157,"title_id":158,"slug":159,"excerpt":160,"excerpt_id":161,"tags":1940},[165,130,166,167],{"id":137,"title":138,"title_id":139,"slug":140,"excerpt":141,"excerpt_id":142,"tags":1942},[101,145,146,147,148,149],{"id":117,"title":118,"title_id":119,"slug":120,"excerpt":121,"excerpt_id":122,"tags":1944},[125,126,127,128,129,130],{"id":93,"title":94,"title_id":95,"slug":96,"excerpt":97,"excerpt_id":98,"tags":1946},[101,102,103,104,105,106],{"id":24,"title":25,"title_id":26,"slug":27,"description":1948,"description_id":21,"cover_image":21,"parent_series":21,"articles":1949},"Everything that isn't a tutorial or a lab: explainers, opinions, and notes from building things.",[1950,1952,1954,1956,1958,1960,1962,1964,1966,1968,1970,1972,1974,1976,1978,1980,1982,1984,1986,1988,1990,1992,1994,1996,1998,2000,2002,2004,2006,2008,2010,2012,2014,2016,2018,2020,2022,2024,2026],{"id":682,"title":955,"title_id":956,"slug":957,"excerpt":958,"excerpt_id":959,"tags":1951},[389,962,963],{"id":257,"title":942,"title_id":943,"slug":944,"excerpt":945,"excerpt_id":946,"tags":1953},[949,936,950],{"id":928,"title":929,"title_id":930,"slug":931,"excerpt":932,"excerpt_id":933,"tags":1955},[369,936,937],{"id":897,"title":898,"title_id":899,"slug":900,"excerpt":901,"excerpt_id":902,"tags":1957},[369,905],{"id":883,"title":884,"title_id":885,"slug":886,"excerpt":887,"excerpt_id":888,"tags":1959},[389,891,892,821],{"id":869,"title":870,"title_id":871,"slug":872,"excerpt":873,"excerpt_id":874,"tags":1961},[877,554,878],{"id":856,"title":857,"title_id":858,"slug":859,"excerpt":860,"excerpt_id":861,"tags":1963},[822,864,18],{"id":841,"title":842,"title_id":843,"slug":844,"excerpt":845,"excerpt_id":846,"tags":1965},[849,850,851],{"id":827,"title":828,"title_id":829,"slug":830,"excerpt":831,"excerpt_id":832,"tags":1967},[835,836,822],{"id":813,"title":814,"title_id":815,"slug":816,"excerpt":817,"excerpt_id":818,"tags":1969},[821,389,822],{"id":798,"title":799,"title_id":800,"slug":801,"excerpt":802,"excerpt_id":803,"tags":1971},[806,807,808],{"id":782,"title":783,"title_id":784,"slug":785,"excerpt":786,"excerpt_id":787,"tags":1973},[570,38,166,790,791],{"id":768,"title":769,"title_id":770,"slug":771,"excerpt":772,"excerpt_id":773,"tags":1975},[166,435,167,600,436,570],{"id":753,"title":754,"title_id":755,"slug":756,"excerpt":757,"excerpt_id":758,"tags":1977},[166,167,761,455,438],{"id":736,"title":737,"title_id":738,"slug":739,"excerpt":740,"excerpt_id":741,"tags":1979},[166,744,745,454,746,167],{"id":721,"title":722,"title_id":723,"slug":724,"excerpt":725,"excerpt_id":726,"tags":1981},[166,729,308,570,309,436,470],{"id":704,"title":705,"title_id":706,"slug":707,"excerpt":708,"excerpt_id":709,"tags":1983},[276,555,712,713,714,198,166],{"id":224,"title":690,"title_id":691,"slug":692,"excerpt":693,"excerpt_id":694,"tags":1985},[276,555,456,697,198,166],{"id":654,"title":655,"title_id":656,"slug":657,"excerpt":658,"excerpt_id":659,"tags":1987},[436,166,662,663,664,38],{"id":638,"title":639,"title_id":640,"slug":641,"excerpt":642,"excerpt_id":643,"tags":1989},[486,646,485,647,166],{"id":623,"title":624,"title_id":625,"slug":626,"excerpt":627,"excerpt_id":628,"tags":1991},[309,455,166,454,470,631],{"id":608,"title":609,"title_id":610,"slug":611,"excerpt":612,"excerpt_id":613,"tags":1993},[166,276,456,616,167,198],{"id":592,"title":593,"title_id":594,"slug":595,"excerpt":596,"excerpt_id":597,"tags":1995},[166,600,273,167,601,570,436],{"id":577,"title":578,"title_id":579,"slug":580,"excerpt":581,"excerpt_id":582,"tags":1997},[166,454,585,167,438],{"id":562,"title":563,"title_id":564,"slug":565,"excerpt":566,"excerpt_id":567,"tags":1999},[166,485,570,486,484,167,438],{"id":546,"title":547,"title_id":548,"slug":549,"excerpt":550,"excerpt_id":551,"tags":2001},[166,276,554,456,167,438,555],{"id":530,"title":531,"title_id":532,"slug":533,"excerpt":534,"excerpt_id":535,"tags":2003},[166,276,456,167,438,538,539],{"id":512,"title":513,"title_id":514,"slug":515,"excerpt":516,"excerpt_id":517,"tags":2005},[166,520,521,522,454,438,523],{"id":493,"title":494,"title_id":495,"slug":496,"excerpt":497,"excerpt_id":498,"tags":2007},[166,501,502,503,504,505,485,167],{"id":428,"title":429,"title_id":429,"slug":430,"excerpt":431,"excerpt_id":432,"tags":2009},[166,167,435,436,437,438,439],{"id":409,"title":410,"title_id":411,"slug":412,"excerpt":413,"excerpt_id":414,"tags":2011},[199,197,417,418,371],{"id":317,"title":318,"title_id":319,"slug":320,"excerpt":321,"excerpt_id":322,"tags":2013},[165,325,326,327],{"id":382,"title":383,"title_id":384,"slug":385,"excerpt":386,"excerpt_id":387,"tags":2015},[389,390,18,17],{"id":6,"title":7,"title_id":8,"slug":9,"excerpt":10,"excerpt_id":11,"tags":2017},[17,18,19,20],{"id":361,"title":362,"title_id":363,"slug":364,"excerpt":365,"excerpt_id":366,"tags":2019},[197,369,370,199,371],{"id":348,"title":349,"title_id":350,"slug":351,"excerpt":352,"excerpt_id":353,"tags":2021},[166,198,340,197,167,356],{"id":332,"title":333,"title_id":334,"slug":335,"excerpt":336,"excerpt_id":337,"tags":2023},[166,198,340,341,342,343],{"id":299,"title":300,"title_id":301,"slug":302,"excerpt":303,"excerpt_id":304,"tags":2025},[273,307,308,309,310],{"id":189,"title":190,"title_id":191,"slug":192,"excerpt":193,"excerpt_id":194,"tags":2027},[197,198,199,200,201],{"id":257,"title":258,"title_id":259,"slug":260,"description":2029,"description_id":2030,"cover_image":21,"parent_series":2031,"articles":2032},"The concepts every language shares: variables, control flow, functions, and syntax. Learn them once and the next language is mostly vocabulary.","Mengenal konsep dasar pemrograman. Pada seri ini kita akan membahas tentang bagaimana cara berkutat dengan variabel, mengatur alur program dengan struktur kontrol, me-reuse kode dengan fungsi, dan aturan sintaks pada bahasa pemrograman. Konsep-konsep ini pastinya akan sangat berguna ketika kita mulai mengkoding ceria.",{"slug":27},[2033,2035,2037,2039,2041,2043],{"id":36,"title":1019,"title_id":259,"slug":260,"excerpt":1020,"excerpt_id":1021,"tags":2034},[977,976],{"id":163,"title":1007,"title_id":1008,"slug":1009,"excerpt":1010,"excerpt_id":1011,"tags":2036},[976,977,1014,850],{"id":109,"title":995,"title_id":996,"slug":997,"excerpt":998,"excerpt_id":999,"tags":2038},[976,977,1002],{"id":24,"title":983,"title_id":984,"slug":985,"excerpt":986,"excerpt_id":987,"tags":2040},[976,977,990],{"id":968,"title":969,"title_id":970,"slug":971,"excerpt":972,"excerpt_id":973,"tags":2042},[976,977,978],{"id":245,"title":246,"title_id":247,"slug":248,"excerpt":249,"excerpt_id":250,"tags":2044},[252,253,254,38],{"id":968,"title":2046,"title_id":2047,"slug":2048,"description":2049,"description_id":21,"cover_image":21,"parent_series":2050,"articles":2051},"Learning Python","Belajar Python","belajar-python","Python from zero: the shape of the language, why it reads the way it does, and where it's the right tool.",{"slug":1261},[],{"featuredPost":2053,"navigations":2057},{"id":6,"title":7,"title_id":8,"slug":9,"excerpt":10,"excerpt_id":11,"has_translation":12,"published_at":13,"reading_time":14,"hidden_from_listing":15,"tags":2054,"thumbnail_image":21,"og_image":22,"series":2055,"authors":2056},[17,18,19,20],{"id":24,"title":25,"title_id":26,"slug":27},[],[2058,2068,2081],{"collection":2059,"item":2060},"series",{"__typename":2059,"title":25,"title_id":26,"slug":27,"children_series":2061},[2062,2063,2064],{"title":110,"title_id":111,"slug":112},{"title":258,"title_id":259,"slug":260},{"title":2065,"title_id":2066,"slug":2067},"Algorithms and Data Structures","Algoritma dan Struktur Data","algoritma-struktur-data",{"collection":2059,"item":2069},{"__typename":2059,"title":1920,"title_id":1920,"slug":1261,"children_series":2070},[2071,2072,2073,2077],{"title":2046,"title_id":2047,"slug":2048},{"title":683,"title_id":684,"slug":685},{"title":2074,"title_id":2075,"slug":2076},"Learning Java","Belajar Java","belajar-java",{"title":2078,"title_id":2079,"slug":2080},"Learning Pascal","Belajar Pascal","belajar-pascal",{"collection":2059,"item":2082},{"__typename":2059,"title":225,"title_id":225,"slug":221,"children_series":2083},[],1793336439883]