{"count":46,"posts":[{"slug":"nodejs-run-typescript-natively-type-stripping","title":"Run TypeScript natively in Node.js with type stripping","summary":"Node.js runs .ts files directly with type stripping, now stable. Learn what syntax works, the import rules, and the tsconfig settings to use.","date":"2026-11-04","tags":["TypeScript","Node.js","JavaScript"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/nodejs-run-typescript-natively-type-stripping.webp","readingMinutes":5},{"slug":"distributed-locks-leases-fencing-tokens","title":"Distributed locks: why leases need fencing tokens","summary":"Distributed locks expire, so two workers can both think they hold one. Here is how fencing tokens stop stale writes, with code and SQL.","date":"2026-11-03","tags":["Scaling","Databases","Reliability","Architecture"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/distributed-locks-leases-fencing-tokens.webp","readingMinutes":7},{"slug":"mistral-large-4-open-weights-explained","title":"Mistral Large 4 open weights: architecture, effort and license","summary":"Mistral Large 4 is now open-weight: a 1T-parameter MoE with 52B active and 1M context. How it works, how to run it, and what the license allows.","date":"2026-11-02","tags":["AI","LLMs","Open Models","Mistral"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/mistral-large-4-open-weights-explained.webp","readingMinutes":6},{"slug":"javascript-map-parseint-returns-nan","title":"Why ['1','7','11'].map(parseInt) returns NaN in JavaScript","summary":"['1','7','11'].map(parseInt) gives [1, NaN, 3] because map passes the index as parseInt's radix. Here's why, and the safe ways to convert strings.","date":"2026-11-01","tags":["JavaScript","Arrays","Debugging"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/javascript-map-parseint-returns-nan.webp","readingMinutes":5},{"slug":"css-anchor-positioning-tooltips-without-javascript","title":"CSS anchor positioning: tooltips and menus without JavaScript","summary":"CSS anchor positioning is now Baseline. Learn anchor-name, position-area, anchor() and position-try-fallbacks to place tooltips and menus with pure CSS.","date":"2026-10-31","tags":["CSS","Web Platform","HTML"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/css-anchor-positioning-tooltips-without-javascript.webp","readingMinutes":6},{"slug":"tail-latency-hedged-requests-p99","title":"Tail latency: how hedged requests cut p99 at scale","summary":"Why fan-out turns one slow server into a slow app, and how hedged requests cut p99 tail latency with only a few percent extra load.","date":"2026-10-30","tags":["Scaling","Performance","Reliability","Architecture"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/tail-latency-hedged-requests-p99.webp","readingMinutes":6},{"slug":"liquid-ai-lfm3-open-on-device-models-explained","title":"Liquid AI LFM3: small open models for on-device AI explained","summary":"Liquid AI LFM3 is a family of 2B-class open models for phones and laptops. How its hybrid architecture works, what d1 does, and how to run it.","date":"2026-10-29","tags":["AI","LLMs","Open Models","Edge"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/liquid-ai-lfm3-open-on-device-models-explained.webp","readingMinutes":6},{"slug":"javascript-math-sumprecise-accurate-floating-point-sums","title":"Math.sumPrecise: accurate floating-point sums in JavaScript","summary":"Math.sumPrecise adds numbers without losing precision along the way. How it works, what it can't fix, and where you can use it today.","date":"2026-10-28","tags":["JavaScript","Web Platform","Numbers"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/javascript-math-sumprecise-accurate-floating-point-sums.webp","readingMinutes":6},{"slug":"replication-lag-read-replicas-read-your-writes","title":"Replication lag: read replicas and read-your-writes consistency","summary":"Why read replicas return stale data after a write, how replication lag works, and three ways to get read-your-writes consistency.","date":"2026-10-27","tags":["Databases","Scaling","PostgreSQL","Architecture"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/replication-lag-read-replicas-read-your-writes.webp","readingMinutes":7},{"slug":"mistral-voxtral-3-voice-agent-sdk-explained","title":"Mistral Voxtral 3: speech models and a voice agent SDK","summary":"Mistral Voxtral 3 adds transcription in 50 languages, realtime TTS and a voice agent SDK. How the pipeline works, what it costs and what to check.","date":"2026-10-26","tags":["AI","Voice","Agents","APIs"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/mistral-voxtral-3-voice-agent-sdk-explained.webp","readingMinutes":6},{"slug":"javascript-json-stringify-drops-undefined-map-date","title":"Why JSON.stringify drops undefined, Map, Set and Date types","summary":"JSON.stringify silently drops undefined, empties Map and Set, and turns Dates into strings. Here is every rule and how to serialize safely.","date":"2026-10-25","tags":["JavaScript","JSON","Debugging"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/javascript-json-stringify-drops-undefined-map-date.webp","readingMinutes":6},{"slug":"javascript-regexp-escape-safe-dynamic-regex","title":"RegExp.escape: build safe dynamic regex in JavaScript","summary":"RegExp.escape turns any string into a literal regex fragment. How it works, where the old escape helper breaks, and where you can use it today.","date":"2026-10-24","tags":["JavaScript","Web Platform","Node.js"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/javascript-regexp-escape-safe-dynamic-regex.webp","readingMinutes":6},{"slug":"idempotency-keys-safe-api-retries","title":"Idempotency keys: how to make API retries safe","summary":"Idempotency keys let clients retry API requests without double charges or duplicate orders. Learn how they work, how to store them and the races to avoid.","date":"2026-10-23","tags":["Scaling","APIs","Reliability","Databases"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/idempotency-keys-safe-api-retries.webp","readingMinutes":7},{"slug":"inception-mercury-3-diffusion-llm-explained","title":"Inception Mercury 3: how a diffusion LLM hits 1,000 tokens/s","summary":"Inception Mercury 3 is a diffusion LLM that refines whole drafts in parallel. How it works, its API and specs, and when its speed matters for your app.","date":"2026-10-22","tags":["AI","LLMs","APIs","Performance"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/inception-mercury-3-diffusion-llm-explained.webp","readingMinutes":6},{"slug":"javascript-uint8array-tobase64-frombase64-hex","title":"Uint8Array toBase64 and fromBase64: native base64 in JavaScript","summary":"Uint8Array.toBase64() and fromBase64() encode and decode bytes natively, with hex, base64url and buffer options. How they work and where they run.","date":"2026-10-21","tags":["JavaScript","Web Platform","Node.js"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/javascript-uint8array-tobase64-frombase64-hex.webp","readingMinutes":6},{"slug":"circuit-breaker-pattern-how-it-works","title":"Circuit breaker pattern: how it works and when it should trip","summary":"The circuit breaker pattern stops calls to a failing dependency, fails fast and probes for recovery. Learn the three states, trip rules and fallbacks.","date":"2026-10-20","tags":["Scaling","Reliability","Architecture"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/circuit-breaker-pattern-how-it-works.webp","readingMinutes":7},{"slug":"jetbrains-mellum2-1-open-model-coding-agents","title":"JetBrains Mellum2.1: a fast open model for coding agents","summary":"JetBrains Mellum2.1 is a 12B open MoE model with 2.5B active parameters for coding agents. How it works, what changed, and how to run it.","date":"2026-10-19","tags":["AI","LLMs","Open Models","Agents"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/jetbrains-mellum2-1-open-model-coding-agents.webp","readingMinutes":6},{"slug":"javascript-await-inside-foreach-does-not-wait","title":"Why await inside forEach doesn't wait, and what to use instead","summary":"Using await inside forEach doesn't wait: forEach ignores the promises, so code runs early and errors escape. Here's why, plus for...of and Promise.all fixes.","date":"2026-10-18","tags":["JavaScript","Async","Debugging"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/javascript-await-inside-foreach-does-not-wait.webp","readingMinutes":6},{"slug":"customizable-select-appearance-base-select-css","title":"Customizable select: style a native <select> with base-select","summary":"Customizable select lets you style a native <select> with CSS using appearance: base-select, rich options and selectedcontent. Here's how it works.","date":"2026-10-17","tags":["CSS","HTML","Web Platform","Accessibility"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/customizable-select-appearance-base-select-css.webp","readingMinutes":6},{"slug":"transactional-outbox-pattern-reliable-events","title":"Transactional outbox pattern: reliable events without dual writes","summary":"The transactional outbox pattern keeps database writes and published events in sync. How it works, polling vs CDC, and handling duplicates.","date":"2026-10-16","tags":["Architecture","Scaling","Reliability","Databases"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/transactional-outbox-pattern-reliable-events.webp","readingMinutes":7},{"slug":"claude-haiku-5-5-pricing-effort-migration","title":"Claude Haiku 5.5: pricing, effort levels and migration","summary":"Claude Haiku 5.5 is Anthropic's cheap, fast model with a 1M context and adjustable effort. What it costs, how effort works and what breaks when you migrate.","date":"2026-10-15","tags":["AI","LLMs","Anthropic","APIs"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/claude-haiku-5-5-pricing-effort-migration.webp","readingMinutes":6},{"slug":"javascript-text-modules-import-with-type-text","title":"JavaScript text modules: import files as strings with type text","summary":"JavaScript text modules let you import a .txt, .sql or shader file as a plain string with type: \"text\". Here is how they work and where they run.","date":"2026-10-14","tags":["JavaScript","Web Platform","Node.js"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/javascript-text-modules-import-with-type-text.webp","readingMinutes":5},{"slug":"exponential-backoff-with-jitter-retry-strategy","title":"Exponential backoff with jitter: retries that don't cause outages","summary":"Exponential backoff with jitter spreads out retries so failed clients don't hammer a recovering service. How it works, which jitter to use, and what to retry.","date":"2026-10-13","tags":["Scaling","Reliability","Architecture"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/exponential-backoff-with-jitter-retry-strategy.webp","readingMinutes":7},{"slug":"embeddinggemma-2-open-multimodal-embedding-model","title":"EmbeddingGemma 2: Google's open multimodal embedding model","summary":"EmbeddingGemma 2 embeds text, code, images, audio and video in one space and runs on-device. How it works, task prefixes, and Matryoshka sizes.","date":"2026-10-12","tags":["AI","Embeddings","RAG","Open Models"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/embeddinggemma-2-open-multimodal-embedding-model.webp","readingMinutes":5},{"slug":"javascript-fetch-does-not-reject-on-404-500","title":"Why fetch() doesn't reject on 404 or 500, and how to fix it","summary":"JavaScript fetch() resolves on 404 and 500 errors, so your catch block never runs. Here's why, and a small wrapper that checks response.ok properly.","date":"2026-10-11","tags":["JavaScript","Node.js","Debugging"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/javascript-fetch-does-not-reject-on-404-500.webp","readingMinutes":6},{"slug":"arianotify-screen-reader-announcements-without-live-regions","title":"ariaNotify(): screen reader announcements without live regions","summary":"ariaNotify() lets you make screen readers speak from JavaScript with one call, no hidden live region needed. Here is how it works and when to use it.","date":"2026-10-10","tags":["Accessibility","Web Platform","JavaScript"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/arianotify-screen-reader-announcements-without-live-regions.webp","readingMinutes":5},{"slug":"consistent-hashing-how-it-works-virtual-nodes","title":"Consistent hashing: how it works and why virtual nodes matter","summary":"Consistent hashing lets you add or remove cache servers while moving only a small share of keys. Here is how the ring, virtual nodes and hash slots work.","date":"2026-10-09","tags":["Scaling","Caching","Architecture"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/consistent-hashing-how-it-works-virtual-nodes.webp","readingMinutes":6},{"slug":"openai-ultrafast-mode-gpt-6-astra-service-tier","title":"OpenAI Ultrafast mode: how the GPT-6 Astra tier works","summary":"OpenAI Ultrafast mode makes GPT-6 Astra stream output up to several times faster at six times the price. How it works, what it costs and when to use it.","date":"2026-10-08","tags":["AI","LLMs","OpenAI","Performance"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/openai-ultrafast-mode-gpt-6-astra-service-tier.webp","readingMinutes":6},{"slug":"javascript-using-declaration-explicit-resource-management","title":"JavaScript using: automatic resource cleanup with Symbol.dispose","summary":"JavaScript's using declaration runs cleanup automatically when a scope ends. How Symbol.dispose, await using and DisposableStack work, and where it runs.","date":"2026-10-07","tags":["JavaScript","Node.js","Web Platform"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/javascript-using-declaration-explicit-resource-management.webp","readingMinutes":6},{"slug":"rate-limiting-algorithms-token-bucket-vs-sliding-window","title":"Rate limiting algorithms: token bucket vs sliding window","summary":"How rate limiting algorithms work: fixed window, sliding window and token bucket, where each one leaks bursts, and which to pick for your API.","date":"2026-10-06","tags":["Scaling","Architecture","APIs"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/rate-limiting-algorithms-token-bucket-vs-sliding-window.webp","readingMinutes":8},{"slug":"cloudflare-clef-decision-models-workers-ai","title":"Cloudflare Clef: decision models for AI agents on Workers AI","summary":"Cloudflare Clef is an open-weight decision model that returns calibrated probabilities instead of text. How it works and when to use it over an LLM.","date":"2026-10-05","tags":["AI","LLMs","Cloudflare","Agents"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/cloudflare-clef-decision-models-workers-ai.webp","readingMinutes":6},{"slug":"javascript-array-sort-numbers-wrong-order","title":"Why JavaScript sort() puts 10 before 9, and how to fix it","summary":"JavaScript's array sort() orders numbers as strings, so 10 lands before 9. Here's why, the comparator fix, and the a > b trap that sorts nothing.","date":"2026-10-04","tags":["JavaScript","Arrays","Debugging"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/javascript-array-sort-numbers-wrong-order.webp","readingMinutes":5},{"slug":"html-invoker-commands-command-commandfor","title":"HTML invoker commands: open dialogs without JavaScript","summary":"HTML invoker commands let a button open dialogs and toggle popovers with commandfor and command. How they work, custom commands, and the form gotcha.","date":"2026-10-03","tags":["HTML","Web Platform","Accessibility"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/html-invoker-commands-command-commandfor.webp","readingMinutes":5},{"slug":"cache-stampede-how-to-prevent-thundering-herd","title":"Cache stampede: how to prevent the thundering herd","summary":"A cache stampede hits your database when a hot key expires. How request coalescing, locks, early refresh and stale-while-revalidate stop it.","date":"2026-10-02","tags":["Caching","Scaling","Architecture"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/cache-stampede-how-to-prevent-thundering-herd.webp","readingMinutes":7},{"slug":"gpt-6-prompt-caching-explicit-breakpoints","title":"GPT-6 prompt caching: breakpoints, pricing and cache misses","summary":"How GPT-6 prompt caching works: explicit breakpoints, the 30-minute TTL, 1.25x writes vs 0.1x reads, and how to change tools or effort without a cache miss.","date":"2026-10-01","tags":["AI","LLMs","OpenAI","Performance"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/gpt-6-prompt-caching-explicit-breakpoints.webp","readingMinutes":6},{"slug":"sql-not-in-subquery-null-returns-no-rows","title":"SQL NOT IN returns no rows when the subquery has a NULL","summary":"One NULL in the subquery and SQL NOT IN returns no rows at all. No error, no warning. Here is why, and why NOT EXISTS is the fix.","date":"2026-09-29","tags":["PostgreSQL","SQL","Debugging"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/sql-not-in-subquery-null-returns-no-rows.webp","readingMinutes":5},{"slug":"javascript-new-date-string-off-by-one-day","title":"Why new Date('2026-09-30') shows the wrong day in JavaScript","summary":"A date-only string is parsed as UTC midnight, a date-time string as local time. Half the world sees yesterday, and India never notices.","date":"2026-09-28","tags":["JavaScript","Dates","Debugging"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/javascript-new-date-string-off-by-one-day.webp","readingMinutes":4},{"slug":"javascript-temporal-api-how-to-use-it-now","title":"The JavaScript Temporal API: what it is and how to use it now","summary":"The JavaScript Temporal API reached Stage 4 and ships in Chrome, Firefox and Node 26. Here are its types, the DST rules, and how to migrate from Date.","date":"2026-09-26","tags":["JavaScript","Dates","Web Platform"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/javascript-temporal-api-how-to-use-it-now.webp","readingMinutes":5},{"slug":"matter-js-preventdefault-traps-page-scroll","title":"Matter.js calls preventDefault on every touch, and traps your page","summary":"A physics toy on a phone stopped the page scrolling. Not when you touched an object — when you touched anywhere near it.","date":"2026-08-06","tags":["JavaScript","Mobile","Canvas"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/matter-js-preventdefault-traps-page-scroll.webp","readingMinutes":2},{"slug":"a-portalled-dialog-does-not-fire-reacts-onclose","title":"A portalled <dialog> does not fire React's onClose","summary":"Closing the modal left the app permanently frozen. The event was firing. React just was not listening for it.","date":"2026-07-30","tags":["React","Accessibility","Debugging"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/a-portalled-dialog-does-not-fire-reacts-onclose.webp","readingMinutes":2},{"slug":"multi-tenant-isolation-belongs-in-the-data-layer","title":"Multi-tenant isolation belongs in the data layer, not in every query","summary":"One endpoint missing a WHERE clause shows one customer another customer's drafts. You find out from the customer.","date":"2026-07-23","tags":["SaaS","PostgreSQL","Architecture"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/multi-tenant-isolation-belongs-in-the-data-layer.webp","readingMinutes":2},{"slug":"designing-for-a-spike-not-an-average","title":"Designing for the spike, not the average","summary":"A platform that is quiet for days and then serves an entire region inside two minutes. The load shape decided the architecture before any feature did.","date":"2026-07-16","tags":["Architecture","AWS","Scaling"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/designing-for-a-spike-not-an-average.webp","readingMinutes":2},{"slug":"cloudflare-workers-assets-caching-default","title":"Cloudflare was revalidating every hashed asset on every page load","summary":"Workers Assets ships a default cache header that is correct for hand-written files and wrong for every file a bundler emits.","date":"2026-07-09","tags":["Cloudflare","Performance","Deployment"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/cloudflare-workers-assets-caching-default.webp","readingMinutes":2},{"slug":"setpointercapture-on-pointerdown-kills-your-click","title":"setPointerCapture on pointerdown silently kills every click","summary":"A draggable marquee where none of the cards were clickable. The drag code was correct. It was one line, in the wrong handler.","date":"2026-07-02","tags":["JavaScript","UI","Debugging"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/setpointercapture-on-pointerdown-kills-your-click.webp","readingMinutes":2},{"slug":"never-trust-the-delta-your-frame-loop-hands-you","title":"Never trust the delta your frame loop hands you","summary":"An unclamped frame delta made a WebGL hero teleport instead of resume, and pushed an interpolation past its target into negative values.","date":"2026-06-25","tags":["Animation","Performance","WebGL"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/never-trust-the-delta-your-frame-loop-hands-you.webp","readingMinutes":2},{"slug":"overflow-x-auto-makes-a-vertical-scroll-container","title":"overflow-x: auto quietly makes a vertical scroll container too","summary":"Three full-bleed carousels on a phone ate every upward swipe. The cause was one line of CSS that does something the property name does not say.","date":"2026-06-18","tags":["CSS","Mobile","Debugging"],"coverUrl":"https://cdn.syedtasavour.com/covers/v2/overflow-x-auto-makes-a-vertical-scroll-container.webp","readingMinutes":2}]}