<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>zlimn — Technical notes you can poke</title><description>Every article ships with something you can drag, break and rebuild — performance, accessibility, market data, free tooling.</description><link>https://zlimn.com/</link><language>en</language><item><title>bcrypt Stops Reading at 72 Bytes and Does Not Tell You</title><link>https://zlimn.com/en/bcrypt-72-byte-limit/</link><guid isPermaLink="true">https://zlimn.com/en/bcrypt-72-byte-limit/</guid><description>Two passwords that look nothing alike can be the same password. The cut is measured in bytes, not characters, so it lands mid-character — and 24 Chinese characters is already the whole budget.</description><pubDate>Fri, 07 Aug 2026 00:00:00 GMT</pubDate></item><item><title>The Two ESM/CommonJS Errors Everyone Quotes Are Gone. One Nobody Mentions Is Not.</title><link>https://zlimn.com/en/esm-cjs-interop-node-25/</link><guid isPermaLink="true">https://zlimn.com/en/esm-cjs-interop-node-25/</guid><description>require() of an ESM module works now, and TypeScript no longer complains either. What still breaks is the dual package hazard — and it fails as instanceof returning false, not as an error.</description><pubDate>Fri, 07 Aug 2026 00:00:00 GMT</pubDate></item><item><title>The pandas 3 Change That Will Break Your Code Does Not Warn You</title><link>https://zlimn.com/en/pandas-3-silent-change/</link><guid isPermaLink="true">https://zlimn.com/en/pandas-3-silent-change/</guid><description>Everyone is fixing SettingWithCopyWarning. That one never worked anyway. The write that works today and silently stops working under Copy-on-Write does not emit a warning in either version.</description><pubDate>Fri, 07 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Four DuckDB Behaviours That Return NULL Instead of an Error</title><link>https://zlimn.com/en/duckdb-silent-nulls/</link><guid isPermaLink="true">https://zlimn.com/en/duckdb-silent-nulls/</guid><description>DuckDB is famously forgiving, and that is the problem. Four everyday operations hand back a wrong answer with no warning — including one where count(*) succeeds and SELECT * crashes on the same file.</description><pubDate>Thu, 06 Aug 2026 00:00:00 GMT</pubDate></item><item><title>One of These Free Postgres Tiers Deletes Your Data on a Timer</title><link>https://zlimn.com/en/free-postgres-tiers/</link><guid isPermaLink="true">https://zlimn.com/en/free-postgres-tiers/</guid><description>Neon, Supabase and Render all say &quot;free&quot;. One sleeps your compute, one pauses your project, and one expires the database 30 days after you create it and then deletes it.</description><pubDate>Thu, 06 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Your CI Is Free. Unless You Picked the macOS Runner.</title><link>https://zlimn.com/en/github-actions-free-minutes/</link><guid isPermaLink="true">https://zlimn.com/en/github-actions-free-minutes/</guid><description>Same builds, same minutes, same everything — but the runner you picked changes the bill by a factor of ten. And two settings take it to zero.</description><pubDate>Thu, 06 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Every &quot;X Is Faster Than Y&quot; Benchmark Has Three Knobs You Did Not See</title><link>https://zlimn.com/en/microbenchmark-traps/</link><guid isPermaLink="true">https://zlimn.com/en/microbenchmark-traps/</guid><description>Same code, same machine, opposite conclusions. Warmup, dead-code elimination and input size each decide the winner — and benchmark posts almost never say where they set them.</description><pubDate>Thu, 06 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Node Runs Your TypeScript Now — Except for Five Things</title><link>https://zlimn.com/en/node-erasable-typescript/</link><guid isPermaLink="true">https://zlimn.com/en/node-erasable-typescript/</guid><description>Type stripping is on by default and it does not compile, it deletes. Five constructs have no runtime-free equivalent to delete, and each one stops your process at startup.</description><pubDate>Thu, 06 Aug 2026 00:00:00 GMT</pubDate></item><item><title>A Naive Append Kills a Live Chart in Under a Minute</title><link>https://zlimn.com/en/realtime-chart-append-jank/</link><guid isPermaLink="true">https://zlimn.com/en/realtime-chart-append-jank/</guid><description>Appending each tick to a growing array looks fine for the first ten seconds. Measured at 3,000 ticks per second, it blows the frame budget at around 55 and goes superlinear after that.</description><pubDate>Thu, 06 Aug 2026 00:00:00 GMT</pubDate></item><item><title>A Red Candle Means &quot;Up&quot; in Taipei and &quot;Down&quot; in New York</title><link>https://zlimn.com/en/candlestick-red-green-conventions/</link><guid isPermaLink="true">https://zlimn.com/en/candlestick-red-green-conventions/</guid><description>Candlestick charts encode direction in three independent conventions, and every charting library ships the Western default. Half your readers are reading the opposite chart.</description><pubDate>Wed, 05 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Stop Comparing Chart Libraries. Compare Rendering Modes.</title><link>https://zlimn.com/en/chart-library-performance-large-datasets/</link><guid isPermaLink="true">https://zlimn.com/en/chart-library-performance-large-datasets/</guid><description>The gap between ECharts, Highcharts and Chart.js is usually under 2x. The gap between SVG and canvas is a different shape entirely — one grows with your data, the other does not.</description><pubDate>Wed, 05 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Your Default Chart Palette Fails for 1 in 12 Men</title><link>https://zlimn.com/en/color-blind-safe-chart-palettes/</link><guid isPermaLink="true">https://zlimn.com/en/color-blind-safe-chart-palettes/</guid><description>Most charting libraries pick their default colours for hue variety. Hue is exactly what red-green colour blindness takes away, which is why the defaults fall apart.</description><pubDate>Wed, 05 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Why Your Time-Series Chart Dies at 100,000 Points</title><link>https://zlimn.com/en/render-million-point-time-series/</link><guid isPermaLink="true">https://zlimn.com/en/render-million-point-time-series/</guid><description>The bottleneck is almost never the chart library. It is the number of draw calls you hand the browser, and there are three ways to cut it.</description><pubDate>Tue, 04 Aug 2026 00:00:00 GMT</pubDate></item></channel></rss>