[{"data":1,"prerenderedAt":1119},["ShallowReactive",2],{"i-lucide:chevron-down":3,"i-lucide:search":8,"i-lucide:sun":10,"i-lucide:moon":12,"i-lucide:arrow-right":14,"i-lucide:menu":16,"i-lucide:mail":18,"i-simple-icons:x":20,"i-simple-icons:linkedin":22,"i-simple-icons:dribbble":25,"i-simple-icons:github":27,"i-lucide:arrow-up-right":29,"courses-en":31,"track-articles-en":170,"track-books-all":508,"i-lucide:chevron-right":1105,"i-lucide:workflow":1107,"i-lucide:network":1109,"i-lucide:circle-dot":1111,"i-lucide:clock":1113,"i-lucide:lock-open":1115,"i-lucide:lock":1117},{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":7},0,24,false,"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m6 9l6 6l6-6\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":9},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"m21 21l-4.34-4.34\"\u002F>\u003Ccircle cx=\"11\" cy=\"11\" r=\"8\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":11},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"4\"\u002F>\u003Cpath d=\"M12 2v2m0 16v2M4.93 4.93l1.41 1.41m11.32 11.32l1.41 1.41M2 12h2m16 0h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":13},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":15},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 12h14m-7-7l7 7l-7 7\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":17},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 5h16M4 12h16M4 19h16\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":19},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"m22 7l-8.991 5.727a2 2 0 0 1-2.009 0L2 7\"\u002F>\u003Crect width=\"20\" height=\"16\" x=\"2\" y=\"4\" rx=\"2\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":21},"\u003Cpath fill=\"currentColor\" d=\"M14.234 10.162L22.977 0h-2.072l-7.591 8.824L7.251 0H.258l9.168 13.343L.258 24H2.33l8.016-9.318L16.749 24h6.993zm-2.837 3.299l-.929-1.329L3.076 1.56h3.182l5.965 8.532l.929 1.329l7.754 11.09h-3.182z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":23,"hidden":24},"\u003Cpath fill=\"currentColor\" d=\"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037c-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85c3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.06 2.06 0 0 1-2.063-2.065a2.064 2.064 0 1 1 2.063 2.065m1.782 13.019H3.555V9h3.564zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0z\"\u002F>",true,{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":26},"\u003Cpath fill=\"currentColor\" d=\"M12 24C5.385 24 0 18.615 0 12S5.385 0 12 0s12 5.385 12 12s-5.385 12-12 12m10.12-10.358c-.35-.11-3.17-.953-6.384-.438c1.34 3.684 1.887 6.684 1.992 7.308a10.28 10.28 0 0 0 4.395-6.87zm-6.115 7.808c-.153-.9-.75-4.032-2.19-7.77l-.066.02c-5.79 2.015-7.86 6.025-8.04 6.4a10.16 10.16 0 0 0 6.29 2.166c1.42 0 2.77-.29 4-.814zm-11.62-2.58c.232-.4 3.045-5.055 8.332-6.765q.202-.067.405-.12q-.392-.879-.832-1.74C7.17 11.775 2.206 11.71 1.756 11.7l-.004.312c0 2.633.998 5.037 2.634 6.855zm-2.42-8.955c.46.008 4.683.026 9.477-1.248a66 66 0 0 0-3.8-5.928a10.28 10.28 0 0 0-5.676 7.17zM9.6 2.052c.282.38 2.145 2.914 3.822 6c3.645-1.365 5.19-3.44 5.373-3.702A10.2 10.2 0 0 0 12 1.764c-.825 0-1.63.1-2.4.285zm10.335 3.483c-.218.29-1.935 2.493-5.724 4.04c.24.49.47.985.68 1.486c.08.18.15.36.22.53c3.41-.43 6.8.26 7.14.33c-.02-2.42-.88-4.64-2.31-6.38z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":28},"\u003Cpath fill=\"currentColor\" d=\"M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":30},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M7 7h10v10M7 17L17 7\"\u002F>",[32,71,104,135],{"id":33,"title":34,"access":35,"body":36,"description":43,"draft":6,"estimatedMinutes":44,"extension":45,"featured":6,"icon":46,"lang":47,"level":48,"meta":49,"navigation":24,"order":50,"path":51,"prerequisites":52,"resources":53,"seo":59,"sku":57,"stem":60,"subjects":61,"summary":63,"tags":64,"updated":69,"__hash__":70},"courses\u002Flearn\u002Fen\u002Fcourses\u002Fcaching\u002Findex.md","Caching strategies","premium",{"type":37,"value":38,"toc":39},"minimark",[],{"title":40,"searchDepth":41,"depth":41,"links":42},"",3,[],"Read-through, write-behind, invalidation and the failure modes each one buys.",40,"md","lucide:layers","en","advanced",{},1,"\u002Flearn\u002Fen\u002Fcourses\u002Fcaching",[],[54],{"label":55,"file":56,"access":35,"sku":57,"size":58},"Caching decision matrix","caching-decision-matrix.pdf","topic-caching-strategies","310 KB",{"title":34,"description":43},"learn\u002Fen\u002Fcourses\u002Fcaching\u002Findex",[62],"system-design","A cache is a bet that reading stale data is cheaper than reading correct data.\nThe strategies differ in who writes to the cache, when, and what happens when\nthe cache and the source disagree. Cache-aside is the default because it fails\nsafely. Write-behind is the fastest and loses data on a crash. Almost every\nproduction incident involving a cache comes down to invalidation, stampedes, or\na cache that was quietly doing nothing at all.\n",[65,66,67,68],"caching","performance","consistency","redis","2026-08-06","mqYWifp5mzccLyzSY681N-Yn1wymognvHpRRfhOtFBI",{"id":72,"title":73,"access":74,"body":75,"description":79,"draft":6,"estimatedMinutes":80,"extension":45,"featured":24,"icon":81,"lang":47,"level":82,"meta":83,"navigation":24,"order":50,"path":84,"prerequisites":85,"resources":86,"seo":91,"sku":92,"stem":93,"subjects":94,"summary":96,"tags":97,"updated":102,"__hash__":103},"courses\u002Flearn\u002Fen\u002Fcourses\u002Fevent-loop\u002Findex.md","The event loop","free",{"type":37,"value":76,"toc":77},[],{"title":40,"searchDepth":41,"depth":41,"links":78},[],"Call stack, task queues and microtasks — why your code ran in that order.",30,"lucide:workflow","intermediate",{},"\u002Flearn\u002Fen\u002Fcourses\u002Fevent-loop",[],[87],{"label":88,"file":89,"access":74,"size":90},"Event loop reference card","js-event-loop-card.pdf","95 KB",{"title":73,"description":79},null,"learn\u002Fen\u002Fcourses\u002Fevent-loop\u002Findex",[95],"javascript","JavaScript runs on one thread with one call stack. Anything asynchronous is\nhanded to the host environment, which puts a callback in a queue when it is\nready. The event loop moves work from those queues onto the stack, but only\nwhen the stack is empty. Microtasks — promise continuations — drain completely\nbetween each task, which is why an await resolves before a setTimeout of zero.\nAlmost every ordering surprise in JavaScript follows from those rules.\n",[98,99,100,101],"async","promises","runtime","concurrency","2026-08-05","BOC7v_GWQoKJp-mEK6X_H0pY-0KcxkhIWnXKWsm8c9k",{"id":105,"title":106,"access":74,"body":107,"description":111,"draft":6,"estimatedMinutes":112,"extension":45,"featured":6,"icon":113,"lang":47,"level":114,"meta":115,"navigation":24,"order":50,"path":116,"prerequisites":117,"resources":118,"seo":123,"sku":92,"stem":124,"subjects":125,"summary":127,"tags":128,"updated":133,"__hash__":134},"courses\u002Flearn\u002Fen\u002Fcourses\u002Fpods\u002Findex.md","Pods and workloads",{"type":37,"value":108,"toc":109},[],{"title":40,"searchDepth":41,"depth":41,"links":110},[],"The smallest deployable unit, and the controllers that manage sets of them.",25,"lucide:blocks","beginner",{},"\u002Flearn\u002Fen\u002Fcourses\u002Fpods",[],[119],{"label":120,"file":121,"access":74,"size":122},"Workload controller decision tree","k8s-workload-controllers.pdf","120 KB",{"title":106,"description":111},"learn\u002Fen\u002Fcourses\u002Fpods\u002Findex",[126],"kubernetes","A pod is one or more containers sharing a network namespace and a lifecycle.\nYou rarely create one directly — Deployments, StatefulSets, DaemonSets and Jobs\neach manage pods with different guarantees about identity, ordering and\nreplacement. Choosing the wrong controller is the root of a surprising number\nof production problems, because the guarantee you assumed was never offered.\n",[129,130,131,132],"pods","deployments","statefulsets","workloads","2026-08-04","m76OXiUC-jLIAp9S_k3i7kuptZfYW5jrdGa40vEITF8",{"id":136,"title":137,"access":74,"body":138,"description":142,"draft":6,"estimatedMinutes":143,"extension":45,"featured":24,"icon":144,"lang":47,"level":82,"meta":145,"navigation":24,"order":146,"path":147,"prerequisites":148,"resources":150,"seo":160,"sku":92,"stem":161,"subjects":162,"summary":163,"tags":164,"updated":69,"__hash__":169},"courses\u002Flearn\u002Fen\u002Fcourses\u002Fnetworking\u002Findex.md","Kubernetes Networking",{"type":37,"value":139,"toc":140},[],{"title":40,"searchDepth":41,"depth":41,"links":141},[],"Services, Ingress and network policy — how a packet actually reaches a pod.",45,"lucide:network",{},2,"\u002Flearn\u002Fen\u002Fcourses\u002Fnetworking",[149],"\u002Flearn\u002Fen\u002Fkubernetes\u002Fpods",[151,155],{"label":152,"file":153,"access":74,"size":154},"Service types cheat sheet","k8s-service-types.pdf","180 KB",{"label":156,"file":157,"access":35,"sku":158,"size":159},"NetworkPolicy recipe pack","k8s-network-policies.pdf","res-k8s-netpol","640 KB",{"title":137,"description":142},"learn\u002Fen\u002Fcourses\u002Fnetworking\u002Findex",[126],"Kubernetes networking rests on one rule: every pod gets its own IP and can\nreach every other pod without NAT. Everything above that — Services, Ingress,\nNetworkPolicy — exists because pod IPs are not stable and not exposed.\nServices give you a stable virtual IP and load balancing. Ingress puts an\nHTTP router in front of Services so many hostnames share one entry point.\nNetworkPolicy takes the default-allow flat network and narrows it down. Get\nthose three roles clear and the failure modes stop being mysterious.\n",[165,166,167,168],"networking","services","ingress","cni","GumIppvDWYP1scgT_rOvScFGIQ-Wqs-Uax-NJtxnUbU",[171,263,408,477],{"id":172,"title":173,"body":174,"date":69,"description":254,"extension":45,"lang":47,"meta":255,"minutes":146,"navigation":24,"path":256,"seo":257,"stem":258,"subjects":259,"tags":260,"__hash__":262},"articles\u002Flearn\u002Fen\u002Farticles\u002F2026-08-06.md","A ClusterIP cannot be pinged",{"type":37,"value":175,"toc":252},[176,180,183,220,223,245,248],[177,178,179],"p",{},"A ClusterIP is not assigned to any network interface. Nothing owns it, so nothing\nanswers ICMP.",[177,181,182],{},"What actually exists is a set of iptables or IPVS rules on every node that rewrite\nthe destination address — but only for the ports the Service declares.",[184,185,189],"pre",{"className":186,"code":187,"language":188,"meta":40,"style":40},"language-bash shiki shiki-themes github-dark-dimmed github-dark-dimmed","ping 10.96.0.42          # always fails, means nothing\ncurl 10.96.0.42:80       # this is the real test\n","bash",[190,191,192,208],"code",{"__ignoreMap":40},[193,194,196,200,204],"span",{"class":195,"line":50},"line",[193,197,199],{"class":198},"siJwO","ping",[193,201,203],{"class":202},"sQdni"," 10.96.0.42",[193,205,207],{"class":206},"s0RzX","          # always fails, means nothing\n",[193,209,210,213,217],{"class":195,"line":146},[193,211,212],{"class":198},"curl",[193,214,216],{"class":215},"szYpP"," 10.96.0.42:80",[193,218,219],{"class":206},"       # this is the real test\n",[177,221,222],{},"If you need to know whether a Service is wired up, check its endpoints instead:",[184,224,226],{"className":186,"code":225,"language":188,"meta":40,"style":40},"kubectl get endpointslices -l kubernetes.io\u002Fservice-name=payments\n",[190,227,228],{"__ignoreMap":40},[193,229,230,233,236,239,242],{"class":195,"line":50},[193,231,232],{"class":198},"kubectl",[193,234,235],{"class":215}," get",[193,237,238],{"class":215}," endpointslices",[193,240,241],{"class":202}," -l",[193,243,244],{"class":215}," kubernetes.io\u002Fservice-name=payments\n",[177,246,247],{},"An empty list means the selector matches nothing, or the pods are failing readiness.\nThat is the actual answer, and ping was never going to give it to you.",[249,250,251],"style",{},"html pre.shiki code .siJwO, html code.shiki .siJwO{--shiki-default:#F69D50;--shiki-dark:#F69D50}html pre.shiki code .sQdni, html code.shiki .sQdni{--shiki-default:#6CB6FF;--shiki-dark:#6CB6FF}html pre.shiki code .s0RzX, html code.shiki .s0RzX{--shiki-default:#768390;--shiki-dark:#768390}html pre.shiki code .szYpP, html code.shiki .szYpP{--shiki-default:#96D0FF;--shiki-dark:#96D0FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":40,"searchDepth":41,"depth":41,"links":253},[],"Why a failed ping proves nothing about whether your Service works.",{},"\u002Flearn\u002Fen\u002Farticles\u002F2026-08-06",{"title":173,"description":254},"learn\u002Fen\u002Farticles\u002F2026-08-06",[126],[166,261],"debugging","g_WmoqBs1YOeMw7NsHp6F2JNMU1_QOW2iN0erDDOrcU",{"id":264,"title":265,"body":266,"date":102,"description":399,"extension":45,"lang":47,"meta":400,"minutes":146,"navigation":24,"path":401,"seo":402,"stem":403,"subjects":404,"tags":405,"__hash__":407},"articles\u002Flearn\u002Fen\u002Farticles\u002F2026-08-05.md","await null still yields",{"type":37,"value":267,"toc":397},[268,275,379,388,394],[177,269,270,271,274],{},"A common assumption is that ",[190,272,273],{},"await"," on a non-promise is a no-op. It is not.",[184,276,280],{"className":277,"code":278,"language":279,"meta":40,"style":40},"language-js shiki shiki-themes github-dark-dimmed github-dark-dimmed","async function run() {\n  console.log('a')\n  await null\n  console.log('c')\n}\n\nrun()\nconsole.log('b')\n\u002F\u002F a, b, c\n","js",[190,281,282,298,315,323,337,343,349,358,373],{"__ignoreMap":40},[193,283,284,287,290,294],{"class":195,"line":50},[193,285,98],{"class":286},"sEYkB",[193,288,289],{"class":286}," function",[193,291,293],{"class":292},"s-wk_"," run",[193,295,297],{"class":296},"sM9_K","() {\n",[193,299,300,303,306,309,312],{"class":195,"line":146},[193,301,302],{"class":296},"  console.",[193,304,305],{"class":292},"log",[193,307,308],{"class":296},"(",[193,310,311],{"class":215},"'a'",[193,313,314],{"class":296},")\n",[193,316,317,320],{"class":195,"line":41},[193,318,319],{"class":286},"  await",[193,321,322],{"class":202}," null\n",[193,324,326,328,330,332,335],{"class":195,"line":325},4,[193,327,302],{"class":296},[193,329,305],{"class":292},[193,331,308],{"class":296},[193,333,334],{"class":215},"'c'",[193,336,314],{"class":296},[193,338,340],{"class":195,"line":339},5,[193,341,342],{"class":296},"}\n",[193,344,346],{"class":195,"line":345},6,[193,347,348],{"emptyLinePlaceholder":24},"\n",[193,350,352,355],{"class":195,"line":351},7,[193,353,354],{"class":292},"run",[193,356,357],{"class":296},"()\n",[193,359,361,364,366,368,371],{"class":195,"line":360},8,[193,362,363],{"class":296},"console.",[193,365,305],{"class":292},[193,367,308],{"class":296},[193,369,370],{"class":215},"'b'",[193,372,314],{"class":296},[193,374,376],{"class":195,"line":375},9,[193,377,378],{"class":206},"\u002F\u002F a, b, c\n",[177,380,381,383,384,387],{},[190,382,273],{}," always suspends. The operand is wrapped, and everything after it is\nscheduled as a microtask — whether you awaited a promise, a number, or ",[190,385,386],{},"null",".",[177,389,390,391,393],{},"The practical consequence: adding an ",[190,392,273],{}," to a function changes the ordering of\ncode that never touched promises. That is usually harmless and occasionally the\nexplanation for a bug that appeared when someone made a function async.",[249,395,396],{},"html pre.shiki code .sEYkB, html code.shiki .sEYkB{--shiki-default:#F47067;--shiki-dark:#F47067}html pre.shiki code .s-wk_, html code.shiki .s-wk_{--shiki-default:#DCBDFB;--shiki-dark:#DCBDFB}html pre.shiki code .sM9_K, html code.shiki .sM9_K{--shiki-default:#ADBAC7;--shiki-dark:#ADBAC7}html pre.shiki code .szYpP, html code.shiki .szYpP{--shiki-default:#96D0FF;--shiki-dark:#96D0FF}html pre.shiki code .sQdni, html code.shiki .sQdni{--shiki-default:#6CB6FF;--shiki-dark:#6CB6FF}html pre.shiki code .s0RzX, html code.shiki .s0RzX{--shiki-default:#768390;--shiki-dark:#768390}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":40,"searchDepth":41,"depth":41,"links":398},[],"Awaiting a non-promise does not resolve synchronously.",{},"\u002Flearn\u002Fen\u002Farticles\u002F2026-08-05",{"title":265,"description":399},"learn\u002Fen\u002Farticles\u002F2026-08-05",[95],[98,406],"event-loop","OR8sLwlVFtPv0ENwClhFGDSsY0bYxUet6wjNC7MeTJw",{"id":409,"title":410,"body":411,"date":133,"description":468,"extension":45,"lang":47,"meta":469,"minutes":41,"navigation":24,"path":470,"seo":471,"stem":472,"subjects":473,"tags":474,"__hash__":476},"articles\u002Flearn\u002Fen\u002Farticles\u002F2026-08-04.md","Jitter every TTL",{"type":37,"value":412,"toc":466},[413,416,419,422,460,463],[177,414,415],{},"A warm-up script writes ten thousand cache keys in one second, each with a\none-hour TTL.",[177,417,418],{},"One hour later, all ten thousand expire in the same second. Every request misses.\nThe database, sized for cached traffic, takes the full uncached load at once.",[177,420,421],{},"The incident happens an hour after a deploy that looked completely clean, which is\nwhat makes it hard to attribute.",[184,423,427],{"className":424,"code":425,"language":426,"meta":40,"style":40},"language-python shiki shiki-themes github-dark-dimmed github-dark-dimmed","ttl = base_ttl + random.randint(0, base_ttl \u002F\u002F 10)\n","python",[190,428,429],{"__ignoreMap":40},[193,430,431,434,437,440,443,446,449,452,455,458],{"class":195,"line":50},[193,432,433],{"class":296},"ttl ",[193,435,436],{"class":286},"=",[193,438,439],{"class":296}," base_ttl ",[193,441,442],{"class":286},"+",[193,444,445],{"class":296}," random.randint(",[193,447,448],{"class":202},"0",[193,450,451],{"class":296},", base_ttl ",[193,453,454],{"class":286},"\u002F\u002F",[193,456,457],{"class":202}," 10",[193,459,314],{"class":296},[177,461,462],{},"Ten percent of randomness spreads the expiry over six minutes instead of one\nsecond. It is one line, and it is the cheapest reliability improvement available to\nanyone running a cache.",[249,464,465],{},"html pre.shiki code .sM9_K, html code.shiki .sM9_K{--shiki-default:#ADBAC7;--shiki-dark:#ADBAC7}html pre.shiki code .sEYkB, html code.shiki .sEYkB{--shiki-default:#F47067;--shiki-dark:#F47067}html pre.shiki code .sQdni, html code.shiki .sQdni{--shiki-default:#6CB6FF;--shiki-dark:#6CB6FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":40,"searchDepth":41,"depth":41,"links":467},[],"Keys written together expire together, and stampede together.",{},"\u002Flearn\u002Fen\u002Farticles\u002F2026-08-04",{"title":410,"description":468},"learn\u002Fen\u002Farticles\u002F2026-08-04",[62],[65,475],"reliability","HEWaBarpKAjHeTZV4CP4uOmXMopR-VWoxGO0m6LAclI",{"id":478,"title":479,"body":480,"date":496,"description":497,"extension":45,"lang":47,"meta":498,"minutes":146,"navigation":24,"path":499,"seo":500,"stem":501,"subjects":502,"tags":504,"__hash__":507},"articles\u002Flearn\u002Fen\u002Farticles\u002F2026-08-03.md","Disabled buttons are a dead end",{"type":37,"value":481,"toc":494},[482,485,488,491],[177,483,484],{},"A disabled submit button communicates that something is wrong and refuses to say\nwhat. It is also skipped by keyboard focus and often unreadable against its\nbackground, so a screen reader user gets no signal at all.",[177,486,487],{},"Keep the button enabled. Validate on submit. Move focus to the first error and\ndescribe it in text.",[177,489,490],{},"The user learns what the form wants by asking, which is the interaction they were\nalready attempting. The disabled state asks them to guess instead.",[177,492,493],{},"If the action is genuinely unavailable — a plan limit, a missing permission — say so\nin text next to the control. The reason is the useful part; the disabled state is\njust the absence of one.",{"title":40,"searchDepth":41,"depth":41,"links":495},[],"2026-08-03","They remove the affordance without explaining the requirement.",{},"\u002Flearn\u002Fen\u002Farticles\u002F2026-08-03",{"title":479,"description":497},"learn\u002Fen\u002Farticles\u002F2026-08-03",[503],"ui-ux",[505,506],"forms","accessibility","WM62nfpNMW97kvhd-JlTOgqauLUr4OkbyY5TalAHIS0",[509,544,575,600,625,651,676,702,725,750,773,795,818,843,867,891,916,940,963,987,1011,1034,1058,1081],{"id":510,"title":511,"access":35,"author":512,"body":513,"cover":520,"coverAlt":521,"currency":522,"description":523,"extension":45,"featured":6,"file":524,"lang":525,"meta":526,"navigation":24,"pages":527,"path":528,"previewPages":92,"price":92,"seo":529,"sku":530,"stem":531,"subjects":532,"tags":534,"type":541,"updated":542,"__hash__":543},"books\u002Flearn\u002Fbn\u002Fbooks\u002Fdevops-cloud-engineering.md","DevOps ও Cloud Engineering — সম্পূর্ণ প্র্যাকটিক্যাল গাইড","Mohin Uddin",{"type":37,"value":514,"toc":518},[515],[177,516,517],{},"Git থেকে Kubernetes, Terraform আর observability পর্যন্ত — শুরু থেকে Job-Ready হওয়ার ২২ চ্যাপ্টারের প্র্যাকটিক্যাল বাংলা হ্যান্ডবুক। প্রতিটা টুলের ইনস্টলেশন, স্টেপ-বাই-স্টেপ কনফিগারেশন আর বাস্তব কমান্ড সহ, AWS, GCP ও Azure কভার করে।",{"title":40,"searchDepth":41,"depth":41,"links":519},[],"\u002Fcovers\u002Fdevops-cloud-engineering.webp","Cover of DevOps ও Cloud Engineering — সম্পূর্ণ প্র্যাকটিক্যাল গাইড","GBP","Git থেকে Kubernetes, Terraform আর observability পর্যন্ত — শুরু থেকে Job-Ready হওয়ার ২২ চ্যাপ্টারের প্র্যাকটিক্যাল বাংলা হ্যান্ডবুক।","devops-cloud-engineering.pdf","bn",{},78,"\u002Flearn\u002Fbn\u002Fbooks\u002Fdevops-cloud-engineering",{"title":511,"description":523},"book-devops-cloud-engineering","learn\u002Fbn\u002Fbooks\u002Fdevops-cloud-engineering",[533,126],"devops",[533,535,536,126,537,538,539,540],"cloud","docker","terraform","ci-cd","gitops","observability","book","2026-08-23","lJ496ZS0OBIJvxW4ptwHS4o4R0rttxc6Zdwl19bcV3Y",{"id":545,"title":546,"access":74,"author":512,"body":547,"cover":554,"coverAlt":555,"currency":522,"description":556,"extension":45,"featured":6,"file":557,"lang":525,"meta":558,"navigation":24,"pages":559,"path":560,"previewPages":92,"price":92,"seo":561,"sku":92,"stem":562,"subjects":563,"tags":566,"type":541,"updated":542,"__hash__":574},"books\u002Flearn\u002Fbn\u002Fbooks\u002Ffull-stack-roadmap.md","ফুল স্ট্যাক ডেভেলপার হওয়ার রোডম্যাপ",{"type":37,"value":548,"toc":552},[549],[177,550,551],{},"HTML\u002FCSS\u002FJS থেকে শুরু করে Vue, Nuxt, Node.js আর Express দিয়ে প্রফেশনাল ফুল স্ট্যাক ডেভেলপার হওয়ার সম্পূর্ণ বাংলা গাইড — কোন ধাপে কী শিখতে হবে আর কেন, সেই ক্রম ধরে সাজানো।",{"title":40,"searchDepth":41,"depth":41,"links":553},[],"\u002Fcovers\u002Ffull-stack-roadmap.webp","Cover of ফুল স্ট্যাক ডেভেলপার হওয়ার রোডম্যাপ","HTML\u002FCSS\u002FJS থেকে শুরু করে Vue, Nuxt, Node.js আর Express দিয়ে প্রফেশনাল ফুল স্ট্যাক ডেভেলপার হওয়ার সম্পূর্ণ বাংলা গাইড।","full-stack-roadmap.pdf",{},104,"\u002Flearn\u002Fbn\u002Fbooks\u002Ffull-stack-roadmap",{"title":546,"description":556},"learn\u002Fbn\u002Fbooks\u002Ffull-stack-roadmap",[564,95,565],"web-development","career",[567,95,568,569,570,571,572,573],"full-stack","vue","nuxt","node","express","postgresql","mongodb","rNg0Vueg0LPNxbPtb9LDm4W9vT4_cKA2e4oHbVFirD4",{"id":576,"title":577,"access":35,"author":512,"body":578,"cover":585,"coverAlt":586,"currency":522,"description":582,"extension":45,"featured":6,"file":587,"lang":525,"meta":588,"navigation":24,"pages":589,"path":590,"previewPages":92,"price":92,"seo":591,"sku":592,"stem":593,"subjects":594,"tags":595,"type":541,"updated":598,"__hash__":599},"books\u002Flearn\u002Fbn\u002Fbooks\u002Fcicd-automation-frontend.md","CI\u002FCD ও অটোমেশন for Frontend",{"type":37,"value":579,"toc":583},[580],[177,581,582],{},"Vue, Nuxt আর Hugo প্রজেক্টের জন্য সম্পূর্ণ Continuous Integration ও Deployment পাইপলাইন তৈরির প্র্যাক্টিক্যাল গাইড — বিল্ড থেকে প্রোডাকশন পর্যন্ত।",{"title":40,"searchDepth":41,"depth":41,"links":584},[],"\u002Fcovers\u002Fcicd-automation-frontend.webp","Cover of CI\u002FCD ও অটোমেশন for Frontend","cicd-automation-frontend.pdf",{},103,"\u002Flearn\u002Fbn\u002Fbooks\u002Fcicd-automation-frontend",{"title":577,"description":582},"book-cicd-automation-frontend","learn\u002Fbn\u002Fbooks\u002Fcicd-automation-frontend",[533,564],[538,596,539,597,568,569],"github-actions","automation","2026-08-19","vUK5igAln6vPqquqnWlMdlLLSrTzTyywyclfUSbtBXA",{"id":601,"title":602,"access":35,"author":512,"body":603,"cover":610,"coverAlt":611,"currency":522,"description":607,"extension":45,"featured":6,"file":612,"lang":525,"meta":613,"navigation":24,"pages":614,"path":615,"previewPages":92,"price":92,"seo":616,"sku":617,"stem":618,"subjects":619,"tags":620,"type":541,"updated":598,"__hash__":624},"books\u002Flearn\u002Fbn\u002Fbooks\u002Fdocker-containers.md","ডকার ও কনটেইনার — বেসিক থেকে প্রোডাকশন",{"type":37,"value":604,"toc":608},[605],[177,606,607],{},"একটা সাধারণ অ্যাপ্লিকেশন হাতে-কলমে তৈরি করে, সেটাকে ধাপে ধাপে containerize করে, শেষে multi-container, প্রোডাকশন-রেডি সিস্টেম পর্যন্ত নিয়ে যাওয়ার সম্পূর্ণ প্র্যাক্টিক্যাল গাইড।",{"title":40,"searchDepth":41,"depth":41,"links":609},[],"\u002Fcovers\u002Fdocker-containers.webp","Cover of ডকার ও কনটেইনার — বেসিক থেকে প্রোডাকশন","docker-containers.pdf",{},101,"\u002Flearn\u002Fbn\u002Fbooks\u002Fdocker-containers",{"title":602,"description":607},"book-docker-containers","learn\u002Fbn\u002Fbooks\u002Fdocker-containers",[533],[536,621,622,623],"containers","dockerfile","docker-compose","eBlOmdwhb7Hp5cCjzqH7TgKMk9SBc8tPR8V7D1Bi9hY",{"id":626,"title":627,"access":35,"author":512,"body":628,"cover":635,"coverAlt":636,"currency":522,"description":632,"extension":45,"featured":6,"file":637,"lang":525,"meta":638,"navigation":24,"pages":639,"path":640,"previewPages":92,"price":92,"seo":641,"sku":642,"stem":643,"subjects":644,"tags":645,"type":541,"updated":598,"__hash__":650},"books\u002Flearn\u002Fbn\u002Fbooks\u002Fharvester-kubernetes-kubedb.md","হার্ভেস্টার থেকে KubeDB পর্যন্ত",{"type":37,"value":629,"toc":633},[630],[177,631,632],{},"Harvester HCI দিয়ে ভার্চুয়াল মেশিন ও Kubernetes ক্লাস্টার তৈরি করে, তার উপর KubeDB দিয়ে প্রোডাকশন-গ্রেড ডাটাবেজ চালানোর সম্পূর্ণ প্র্যাক্টিক্যাল গাইড।",{"title":40,"searchDepth":41,"depth":41,"links":634},[],"\u002Fcovers\u002Fharvester-kubernetes-kubedb.webp","Cover of হার্ভেস্টার থেকে KubeDB পর্যন্ত","harvester-kubernetes-kubedb.pdf",{},99,"\u002Flearn\u002Fbn\u002Fbooks\u002Fharvester-kubernetes-kubedb",{"title":627,"description":632},"book-harvester-kubernetes-kubedb","learn\u002Fbn\u002Fbooks\u002Fharvester-kubernetes-kubedb",[533,126],[646,647,126,648,649],"harvester","hci","kubedb","rke2","IqRTlP0fuKsF0pMTqlEr3-fNj9Oq_p_YwAffIlFqhs4",{"id":652,"title":653,"access":35,"author":512,"body":654,"cover":661,"coverAlt":662,"currency":522,"description":658,"extension":45,"featured":6,"file":663,"lang":525,"meta":664,"navigation":24,"pages":665,"path":666,"previewPages":92,"price":92,"seo":667,"sku":668,"stem":669,"subjects":670,"tags":672,"type":541,"updated":598,"__hash__":675},"books\u002Flearn\u002Fbn\u002Fbooks\u002Fkeno-ei-design.md","কেন এই design?",{"type":37,"value":655,"toc":659},[656],[177,657,658],{},"কী design করতে হয় তা না। কেন সেটা কাজ করে, সেটা শেখো।",{"title":40,"searchDepth":41,"depth":41,"links":660},[],"\u002Fcovers\u002Fkeno-ei-design.webp","Cover of কেন এই design?","keno-ei-design.pdf",{},130,"\u002Flearn\u002Fbn\u002Fbooks\u002Fkeno-ei-design",{"title":653,"description":658},"book-keno-ei-design","learn\u002Fbn\u002Fbooks\u002Fkeno-ei-design",[671],"design",[671,673,674],"ux","design-reasoning","ZZ3__IAWN21BZ5vxFSjSif8khNX5I0DCGY0yKJxo7mA",{"id":677,"title":678,"access":35,"author":512,"body":679,"cover":686,"coverAlt":687,"currency":522,"description":683,"extension":45,"featured":6,"file":688,"lang":525,"meta":689,"navigation":24,"pages":690,"path":691,"previewPages":92,"price":92,"seo":692,"sku":693,"stem":694,"subjects":695,"tags":697,"type":541,"updated":598,"__hash__":701},"books\u002Flearn\u002Fbn\u002Fbooks\u002Fprompt-na-context.md","প্রম্পট না, কনটেক্সট",{"type":37,"value":680,"toc":684},[681],[177,682,683],{},"AI কোথায় সাহায্য করে, কোথায় করে না — একজন Design Engineer-এর নোটবুক।",{"title":40,"searchDepth":41,"depth":41,"links":685},[],"\u002Fcovers\u002Fprompt-na-context.webp","Cover of প্রম্পট না, কনটেক্সট","prompt-na-context.pdf",{},76,"\u002Flearn\u002Fbn\u002Fbooks\u002Fprompt-na-context",{"title":678,"description":683},"book-prompt-na-context","learn\u002Fbn\u002Fbooks\u002Fprompt-na-context",[696,671],"ai",[696,698,699,700],"prompt-engineering","context","notebook","oC0gt5tvx8dnRzzvSgR6plywq3RznrGMc3jDtxzeiWY",{"id":703,"title":704,"access":35,"author":512,"body":705,"cover":712,"coverAlt":713,"currency":522,"description":709,"extension":45,"featured":6,"file":714,"lang":525,"meta":715,"navigation":24,"pages":44,"path":716,"previewPages":92,"price":92,"seo":717,"sku":718,"stem":719,"subjects":720,"tags":721,"type":541,"updated":598,"__hash__":724},"books\u002Flearn\u002Fbn\u002Fbooks\u002Fsystem-designer-to-ceo.md","সিস্টেম ডিজাইনার থেকে CEO",{"type":37,"value":706,"toc":710},[707],[177,708,709],{},"একজন Design Engineer থেকে System Designer, Director, আর CEO পর্যন্ত ক্যারিয়ার জার্নির একটা সংক্ষিপ্ত, প্র্যাক্টিক্যাল রোডম্যাপ — কোন স্কিল, কোন বই, আর কোন অভ্যাস কাজে লাগবে প্রতিটা ধাপে।",{"title":40,"searchDepth":41,"depth":41,"links":711},[],"\u002Fcovers\u002Fsystem-designer-to-ceo.webp","Cover of সিস্টেম ডিজাইনার থেকে CEO","system-designer-to-ceo.pdf",{},"\u002Flearn\u002Fbn\u002Fbooks\u002Fsystem-designer-to-ceo",{"title":704,"description":709},"book-system-designer-to-ceo","learn\u002Fbn\u002Fbooks\u002Fsystem-designer-to-ceo",[565],[565,722,62,723],"leadership","strategy","XpkJVtaIUQGFy-nd2nlDrNwu5CDWOKmDgET96aH4q18",{"id":726,"title":727,"access":35,"author":512,"body":728,"cover":735,"coverAlt":736,"currency":522,"description":732,"extension":45,"featured":6,"file":737,"lang":525,"meta":738,"navigation":24,"pages":739,"path":740,"previewPages":92,"price":92,"seo":741,"sku":742,"stem":743,"subjects":744,"tags":745,"type":541,"updated":133,"__hash__":749},"books\u002Flearn\u002Fbn\u002Fbooks\u002Fcloudflare.md","Cloudflare বাংলা গাইড",{"type":37,"value":729,"toc":733},[730],[177,731,732],{},"Cloudflare ব্যবহারের সম্পূর্ণ বাংলা গাইড।",{"title":40,"searchDepth":41,"depth":41,"links":734},[],"\u002Fcovers\u002Fcloudflare.webp","Cover of Cloudflare বাংলা গাইড","cloudflare.pdf",{},174,"\u002Flearn\u002Fbn\u002Fbooks\u002Fcloudflare",{"title":727,"description":732},"book-cloudflare","learn\u002Fbn\u002Fbooks\u002Fcloudflare",[564,533],[746,747,748],"cloudflare","cdn","dns","osYt5DyoY0SKXal1-72lIqAuxApOvQYnTwzJZ8Rzoic",{"id":751,"title":752,"access":35,"author":512,"body":753,"cover":760,"coverAlt":761,"currency":522,"description":757,"extension":45,"featured":6,"file":762,"lang":525,"meta":763,"navigation":24,"pages":639,"path":764,"previewPages":92,"price":92,"seo":765,"sku":766,"stem":767,"subjects":768,"tags":769,"type":541,"updated":771,"__hash__":772},"books\u002Flearn\u002Fbn\u002Fbooks\u002Fcloud-app-ux.md","ক্লাউড অ্যাপ UX গাইড",{"type":37,"value":754,"toc":758},[755],[177,756,757],{},"ক্লাউড অ্যাপ্লিকেশনের ইন্টারফেস ডিজাইন নিয়ে বাংলা গাইড।",{"title":40,"searchDepth":41,"depth":41,"links":759},[],"\u002Fcovers\u002Fcloud-app-ux.webp","Cover of ক্লাউড অ্যাপ UX গাইড","cloud-app-ux.pdf",{},"\u002Flearn\u002Fbn\u002Fbooks\u002Fcloud-app-ux",{"title":752,"description":757},"book-cloud-app-ux","learn\u002Fbn\u002Fbooks\u002Fcloud-app-ux",[671],[673,535,770],"interface","2026-08-02","BGqH-22UlC6phFcs6KZADIp-9zQdUaTumidnwytV2fo",{"id":774,"title":775,"access":74,"author":512,"body":776,"cover":783,"coverAlt":784,"currency":522,"description":780,"extension":45,"featured":6,"file":785,"lang":525,"meta":786,"navigation":24,"pages":787,"path":788,"previewPages":92,"price":92,"seo":789,"sku":92,"stem":790,"subjects":791,"tags":792,"type":541,"updated":793,"__hash__":794},"books\u002Flearn\u002Fbn\u002Fbooks\u002Fkubernetes-shikhi.md","কুবারনেটিস শিখি — বেসিক থেকে অ্যাডভান্স",{"type":37,"value":777,"toc":781},[778],[177,779,780],{},"বেসিক থেকে অ্যাডভান্স পর্যন্ত কুবারনেটিস শেখার বাংলা বই।",{"title":40,"searchDepth":41,"depth":41,"links":782},[],"\u002Fcovers\u002Fkubernetes-shikhi.webp","Cover of কুবারনেটিস শিখি — বেসিক থেকে অ্যাডভান্স","kubernetes-shikhi.pdf",{},162,"\u002Flearn\u002Fbn\u002Fbooks\u002Fkubernetes-shikhi",{"title":775,"description":780},"learn\u002Fbn\u002Fbooks\u002Fkubernetes-shikhi",[126],[126,129,165],"2026-07-25","E_xraokOt9iWiJiXtU8uy2969YO_HmEvqVkq45Hw_bs",{"id":796,"title":797,"access":74,"author":512,"body":798,"cover":805,"coverAlt":806,"currency":522,"description":802,"extension":45,"featured":6,"file":807,"lang":525,"meta":808,"navigation":24,"pages":809,"path":810,"previewPages":92,"price":92,"seo":811,"sku":92,"stem":812,"subjects":813,"tags":814,"type":541,"updated":816,"__hash__":817},"books\u002Flearn\u002Fbn\u002Fbooks\u002Fdaily-javascript.md","ডেইলি জাভাস্ক্রিপ্ট গাইড",{"type":37,"value":799,"toc":803},[800],[177,801,802],{},"প্রতিদিন অল্প অল্প করে জাভাস্ক্রিপ্ট চর্চার বাংলা গাইড।",{"title":40,"searchDepth":41,"depth":41,"links":804},[],"\u002Fcovers\u002Fdaily-javascript.webp","Cover of ডেইলি জাভাস্ক্রিপ্ট গাইড","daily-javascript.pdf",{},113,"\u002Flearn\u002Fbn\u002Fbooks\u002Fdaily-javascript",{"title":797,"description":802},"learn\u002Fbn\u002Fbooks\u002Fdaily-javascript",[95],[95,815],"practice","2026-07-12","6YsHfPRS6tlFvefL5XwGbnHr9dKjCqxAikVxoEsBN4A",{"id":819,"title":820,"access":35,"author":512,"body":821,"cover":828,"coverAlt":829,"currency":522,"description":825,"extension":45,"featured":6,"file":830,"lang":525,"meta":831,"navigation":24,"pages":832,"path":833,"previewPages":92,"price":92,"seo":834,"sku":835,"stem":836,"subjects":837,"tags":838,"type":541,"updated":816,"__hash__":842},"books\u002Flearn\u002Fbn\u002Fbooks\u002Fhono.md","Hono বাংলা গাইড",{"type":37,"value":822,"toc":826},[823],[177,824,825],{},"Hono ফ্রেমওয়ার্ক দিয়ে ওয়েব API তৈরির বাংলা গাইড।",{"title":40,"searchDepth":41,"depth":41,"links":827},[],"\u002Fcovers\u002Fhono.webp","Cover of Hono বাংলা গাইড","hono.pdf",{},88,"\u002Flearn\u002Fbn\u002Fbooks\u002Fhono",{"title":820,"description":825},"book-hono","learn\u002Fbn\u002Fbooks\u002Fhono",[564,95],[839,840,841],"hono","api","typescript","fhxKimC_NCILlIitL6yZY3OxhK_FIGpPtAD20h-5RBc",{"id":844,"title":845,"access":35,"author":512,"body":846,"cover":853,"coverAlt":854,"currency":522,"description":850,"extension":45,"featured":6,"file":855,"lang":525,"meta":856,"navigation":24,"pages":80,"path":857,"previewPages":92,"price":92,"seo":858,"sku":859,"stem":860,"subjects":861,"tags":862,"type":864,"updated":865,"__hash__":866},"books\u002Flearn\u002Fbn\u002Fbooks\u002Fkubedb-interview.md","KubeDB ইন্টারভিউ গাইড",{"type":37,"value":847,"toc":851},[848],[177,849,850],{},"KubeDB নিয়ে ইন্টারভিউ প্রস্তুতির সংক্ষিপ্ত নোট।",{"title":40,"searchDepth":41,"depth":41,"links":852},[],"\u002Fcovers\u002Fkubedb-interview.webp","Cover of KubeDB ইন্টারভিউ গাইড","kubedb-interview.pdf",{},"\u002Flearn\u002Fbn\u002Fbooks\u002Fkubedb-interview",{"title":845,"description":850},"book-kubedb-interview","learn\u002Fbn\u002Fbooks\u002Fkubedb-interview",[126,565],[648,863],"interview","notes","2026-07-07","x4_NG4Ka3b4qKGPjj8byinWk5NC6IiUYDYC4jaDsFks",{"id":868,"title":869,"access":35,"author":512,"body":870,"cover":877,"coverAlt":878,"currency":522,"description":874,"extension":45,"featured":6,"file":879,"lang":525,"meta":880,"navigation":24,"pages":881,"path":882,"previewPages":92,"price":92,"seo":883,"sku":884,"stem":885,"subjects":886,"tags":887,"type":864,"updated":889,"__hash__":890},"books\u002Flearn\u002Fbn\u002Fbooks\u002Fhono-project-ideas.md","Hono প্রজেক্ট আইডিয়া",{"type":37,"value":871,"toc":875},[872],[177,873,874],{},"Hono দিয়ে বানানো যায় এমন প্রজেক্টের আইডিয়া সংকলন।",{"title":40,"searchDepth":41,"depth":41,"links":876},[],"\u002Fcovers\u002Fhono-project-ideas.webp","Cover of Hono প্রজেক্ট আইডিয়া","hono-project-ideas.pdf",{},47,"\u002Flearn\u002Fbn\u002Fbooks\u002Fhono-project-ideas",{"title":869,"description":874},"book-hono-project-ideas","learn\u002Fbn\u002Fbooks\u002Fhono-project-ideas",[564],[839,888],"projects","2026-07-05","ThW1nraJQgHqeacD9Q1JwFYhUl9fvDCwi_2tg-qOfuM",{"id":892,"title":893,"access":35,"author":512,"body":894,"cover":901,"coverAlt":902,"currency":522,"description":898,"extension":45,"featured":6,"file":903,"lang":525,"meta":904,"navigation":24,"pages":905,"path":906,"previewPages":92,"price":92,"seo":907,"sku":908,"stem":909,"subjects":910,"tags":911,"type":541,"updated":914,"__hash__":915},"books\u002Flearn\u002Fbn\u002Fbooks\u002Fcomputer-graphics-animation.md","কম্পিউটার গ্রাফিক্স ও অ্যানিমেশন",{"type":37,"value":895,"toc":899},[896],[177,897,898],{},"কম্পিউটার গ্রাফিক্স ও অ্যানিমেশনের মূল ধারণা নিয়ে বাংলা গাইড।",{"title":40,"searchDepth":41,"depth":41,"links":900},[],"\u002Fcovers\u002Fcomputer-graphics-animation.webp","Cover of কম্পিউটার গ্রাফিক্স ও অ্যানিমেশন","computer-graphics-animation.pdf",{},109,"\u002Flearn\u002Fbn\u002Fbooks\u002Fcomputer-graphics-animation",{"title":893,"description":898},"book-computer-graphics-animation","learn\u002Fbn\u002Fbooks\u002Fcomputer-graphics-animation",[671],[912,913],"graphics","animation","2026-07-04","bhf1P3ayWhUPrBi7qPRmVFYcVJGi3k_I1TkCc-pyTCc",{"id":917,"title":918,"access":35,"author":512,"body":919,"cover":926,"coverAlt":927,"currency":522,"description":923,"extension":45,"featured":6,"file":928,"lang":525,"meta":929,"navigation":24,"pages":930,"path":931,"previewPages":92,"price":92,"seo":932,"sku":933,"stem":934,"subjects":935,"tags":936,"type":541,"updated":938,"__hash__":939},"books\u002Flearn\u002Fbn\u002Fbooks\u002Fautomation-shikhi-hategolome.md","অটোমেশন শিখি হাতে-কলমে",{"type":37,"value":920,"toc":924},[921],[177,922,923],{},"হাতে-কলমে অটোমেশন শেখার বাংলা বই — উদাহরণ ধরে ধরে এগোনো।",{"title":40,"searchDepth":41,"depth":41,"links":925},[],"\u002Fcovers\u002Fautomation-shikhi-hategolome.webp","Cover of অটোমেশন শিখি হাতে-কলমে","automation-shikhi-hategolome.pdf",{},102,"\u002Flearn\u002Fbn\u002Fbooks\u002Fautomation-shikhi-hategolome",{"title":918,"description":923},"book-automation-shikhi-hategolome","learn\u002Fbn\u002Fbooks\u002Fautomation-shikhi-hategolome",[533],[597,937,533],"scripting","2026-07-03","2iMNXsp58BRHXTeMM0w5K4VwGQbpmKazruVMHrB3Q2w",{"id":941,"title":942,"access":35,"author":512,"body":943,"cover":950,"coverAlt":951,"currency":522,"description":947,"extension":45,"featured":6,"file":952,"lang":525,"meta":953,"navigation":24,"pages":954,"path":955,"previewPages":92,"price":92,"seo":956,"sku":957,"stem":958,"subjects":959,"tags":961,"type":541,"updated":938,"__hash__":962},"books\u002Flearn\u002Fbn\u002Fbooks\u002Fcybersecurity.md","সাইবারসিকিউরিটি বাংলা গাইড",{"type":37,"value":944,"toc":948},[945],[177,946,947],{},"সাইবারসিকিউরিটির মৌলিক বিষয়গুলো নিয়ে বাংলা গাইড।",{"title":40,"searchDepth":41,"depth":41,"links":949},[],"\u002Fcovers\u002Fcybersecurity.webp","Cover of সাইবারসিকিউরিটি বাংলা গাইড","cybersecurity.pdf",{},96,"\u002Flearn\u002Fbn\u002Fbooks\u002Fcybersecurity",{"title":942,"description":947},"book-cybersecurity","learn\u002Fbn\u002Fbooks\u002Fcybersecurity",[960],"security",[960,165],"lKSAYzaqTeOrurwVxvKSQRmpgyHfw6hckdRVYt41nDg",{"id":964,"title":965,"access":35,"author":512,"body":966,"cover":973,"coverAlt":974,"currency":522,"description":970,"extension":45,"featured":6,"file":975,"lang":525,"meta":976,"navigation":24,"pages":665,"path":977,"previewPages":92,"price":92,"seo":978,"sku":979,"stem":980,"subjects":981,"tags":982,"type":541,"updated":985,"__hash__":986},"books\u002Flearn\u002Fbn\u002Fbooks\u002Fappscode-toolkit.md","AppsCode টুলকিট গাইড",{"type":37,"value":967,"toc":971},[968],[177,969,970],{},"AppsCode-এর টুলকিট নিয়ে বাংলায় লেখা গাইড — ইনস্টলেশন থেকে দৈনন্দিন ব্যবহার পর্যন্ত।",{"title":40,"searchDepth":41,"depth":41,"links":972},[],"\u002Fcovers\u002Fappscode-toolkit.webp","Cover of AppsCode টুলকিট গাইড","appscode-toolkit.pdf",{},"\u002Flearn\u002Fbn\u002Fbooks\u002Fappscode-toolkit",{"title":965,"description":970},"book-appscode-toolkit","learn\u002Fbn\u002Fbooks\u002Fappscode-toolkit",[533,126],[983,126,984],"appscode","tooling","2026-07-01","hBAKtQ1MqvFNnWjR9PYkyyK9MamPkaaurNyeqtuJuWo",{"id":988,"title":989,"access":35,"author":512,"body":990,"cover":997,"coverAlt":998,"currency":522,"description":994,"extension":45,"featured":6,"file":999,"lang":525,"meta":1000,"navigation":24,"pages":1001,"path":1002,"previewPages":92,"price":92,"seo":1003,"sku":1004,"stem":1005,"subjects":1006,"tags":1007,"type":541,"updated":985,"__hash__":1010},"books\u002Flearn\u002Fbn\u002Fbooks\u002Fkubedb-ui-design.md","KubeDB UI ডিজাইন গাইড",{"type":37,"value":991,"toc":995},[992],[177,993,994],{},"KubeDB-র ইন্টারফেস ডিজাইন নিয়ে বিস্তারিত বাংলা গাইড।",{"title":40,"searchDepth":41,"depth":41,"links":996},[],"\u002Fcovers\u002Fkubedb-ui-design.webp","Cover of KubeDB UI ডিজাইন গাইড","kubedb-ui-design.pdf",{},281,"\u002Flearn\u002Fbn\u002Fbooks\u002Fkubedb-ui-design",{"title":989,"description":994},"book-kubedb-ui-design","learn\u002Fbn\u002Fbooks\u002Fkubedb-ui-design",[671,126],[1008,1009,648],"ui","design-system","Hcj2W8VIS04kkET1yS6TM-q04Xcb19nKdzNkdk9iuf8",{"id":1012,"title":1013,"access":35,"author":512,"body":1014,"cover":1021,"coverAlt":1022,"currency":522,"description":1018,"extension":45,"featured":6,"file":1023,"lang":525,"meta":1024,"navigation":24,"pages":1025,"path":1026,"previewPages":92,"price":92,"seo":1027,"sku":1028,"stem":1029,"subjects":1030,"tags":1032,"type":541,"updated":985,"__hash__":1033},"books\u002Flearn\u002Fbn\u002Fbooks\u002Fkubernetes-kubedb.md","Kubernetes ও KubeDB",{"type":37,"value":1015,"toc":1019},[1016],[177,1017,1018],{},"Kubernetes আর KubeDB একসাথে ব্যবহারের বাংলা গাইড।",{"title":40,"searchDepth":41,"depth":41,"links":1020},[],"\u002Fcovers\u002Fkubernetes-kubedb.webp","Cover of Kubernetes ও KubeDB","kubernetes-kubedb.pdf",{},234,"\u002Flearn\u002Fbn\u002Fbooks\u002Fkubernetes-kubedb",{"title":1013,"description":1018},"book-kubernetes-kubedb","learn\u002Fbn\u002Fbooks\u002Fkubernetes-kubedb",[126,1031],"databases",[126,648],"Gzp0-Wc23SEDXBVGc0QAKCuDT4TabkZWaAuMZPdCD8I",{"id":1035,"title":1036,"access":35,"author":512,"body":1037,"cover":1044,"coverAlt":1045,"currency":522,"description":1041,"extension":45,"featured":6,"file":1046,"lang":525,"meta":1047,"navigation":24,"pages":1048,"path":1049,"previewPages":92,"price":92,"seo":1050,"sku":1051,"stem":1052,"subjects":1053,"tags":1054,"type":541,"updated":985,"__hash__":1057},"books\u002Flearn\u002Fbn\u002Fbooks\u002Fstash-kubestash.md","Stash ও KubeStash গাইড",{"type":37,"value":1038,"toc":1042},[1039],[177,1040,1041],{},"Kubernetes-এ ব্যাকআপ ও রিস্টোরের জন্য Stash এবং KubeStash-এর বাংলা গাইড।",{"title":40,"searchDepth":41,"depth":41,"links":1043},[],"\u002Fcovers\u002Fstash-kubestash.webp","Cover of Stash ও KubeStash গাইড","stash-kubestash.pdf",{},175,"\u002Flearn\u002Fbn\u002Fbooks\u002Fstash-kubestash",{"title":1036,"description":1041},"book-stash-kubestash","learn\u002Fbn\u002Fbooks\u002Fstash-kubestash",[126,533],[1055,1056,126],"stash","backup","tpULWlXK29hQce8kF3B2Q0mByKnBFrp5c9XPAkinhIw",{"id":1059,"title":1060,"access":35,"author":512,"body":1061,"cover":1068,"coverAlt":1069,"currency":522,"description":1065,"extension":45,"featured":6,"file":1070,"lang":525,"meta":1071,"navigation":24,"pages":1072,"path":1073,"previewPages":92,"price":92,"seo":1074,"sku":1075,"stem":1076,"subjects":1077,"tags":1078,"type":541,"updated":1079,"__hash__":1080},"books\u002Flearn\u002Fbn\u002Fbooks\u002Fkubedb.md","KubeDB বাংলা গাইড",{"type":37,"value":1062,"toc":1066},[1063],[177,1064,1065],{},"Kubernetes-এ ডেটাবেস চালানোর জন্য KubeDB-র সম্পূর্ণ বাংলা গাইড।",{"title":40,"searchDepth":41,"depth":41,"links":1067},[],"\u002Fcovers\u002Fkubedb.webp","Cover of KubeDB বাংলা গাইড","kubedb.pdf",{},225,"\u002Flearn\u002Fbn\u002Fbooks\u002Fkubedb",{"title":1060,"description":1065},"book-kubedb","learn\u002Fbn\u002Fbooks\u002Fkubedb",[126,1031],[648,1031,126],"2026-06-29","ZnxjH7KgB5ORPNWlbVp_nPTAvhaVAkbS6KRDrUQNnm0",{"id":1082,"title":1083,"access":35,"author":512,"body":1084,"cover":1091,"coverAlt":1092,"currency":522,"description":1088,"extension":45,"featured":6,"file":1093,"lang":525,"meta":1094,"navigation":24,"pages":1095,"path":1096,"previewPages":92,"price":92,"seo":1097,"sku":1098,"stem":1099,"subjects":1100,"tags":1101,"type":541,"updated":1079,"__hash__":1104},"books\u002Flearn\u002Fbn\u002Fbooks\u002Fproduct-design-process.md","প্রোডাক্ট ডিজাইন প্রসেস",{"type":37,"value":1085,"toc":1089},[1086],[177,1087,1088],{},"প্রোডাক্ট ডিজাইনের ধাপে ধাপে প্রসেস নিয়ে বাংলা গাইড।",{"title":40,"searchDepth":41,"depth":41,"links":1090},[],"\u002Fcovers\u002Fproduct-design-process.webp","Cover of প্রোডাক্ট ডিজাইন প্রসেস","product-design-process.pdf",{},106,"\u002Flearn\u002Fbn\u002Fbooks\u002Fproduct-design-process",{"title":1083,"description":1088},"book-product-design-process","learn\u002Fbn\u002Fbooks\u002Fproduct-design-process",[671],[1102,1103],"product-design","process","tVxsSN15djqyIND-oWccAhF-4KavbTHlcGv_AbHxY2E",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":1106},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m9 18l6-6l-6-6\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":1108},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Crect width=\"8\" height=\"8\" x=\"3\" y=\"3\" rx=\"2\"\u002F>\u003Cpath d=\"M7 11v4a2 2 0 0 0 2 2h4\"\u002F>\u003Crect width=\"8\" height=\"8\" x=\"13\" y=\"13\" rx=\"2\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":1110},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Crect width=\"6\" height=\"6\" x=\"16\" y=\"16\" rx=\"1\"\u002F>\u003Crect width=\"6\" height=\"6\" x=\"2\" y=\"16\" rx=\"1\"\u002F>\u003Crect width=\"6\" height=\"6\" x=\"9\" y=\"2\" rx=\"1\"\u002F>\u003Cpath d=\"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3m-7-4V8\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":1112},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Ccircle cx=\"12\" cy=\"12\" r=\"1\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":1114},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cpath d=\"M12 6v6l4 2\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":1116},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Crect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\" ry=\"2\"\u002F>\u003Cpath d=\"M7 11V7a5 5 0 0 1 9.9-1\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":1118},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Crect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\" ry=\"2\"\u002F>\u003Cpath d=\"M7 11V7a5 5 0 0 1 10 0v4\"\u002F>\u003C\u002Fg>",1791742741373]