<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: mbostock</title><link>https://news.ycombinator.com/user?id=mbostock</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sun, 31 May 2026 18:11:34 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=mbostock" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by mbostock in "Shantell Sans (2023)"]]></title><description><![CDATA[
<p>tldraw uses this font. It’s a great fit for emulating hand-written notes on a whiteboard; feels human.</p>
]]></description><pubDate>Sun, 31 May 2026 03:24:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=48342742</link><dc:creator>mbostock</dc:creator><comments>https://news.ycombinator.com/item?id=48342742</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48342742</guid></item><item><title><![CDATA[New comment by mbostock in "How to make a Smith chart"]]></title><description><![CDATA[
<p>I made an interactive implementation here: <a href="https://observablehq.com/@mbostock/smith-chart" rel="nofollow">https://observablehq.com/@mbostock/smith-chart</a></p>
]]></description><pubDate>Fri, 24 Oct 2025 21:31:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=45699313</link><dc:creator>mbostock</dc:creator><comments>https://news.ycombinator.com/item?id=45699313</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45699313</guid></item><item><title><![CDATA[Observable Notebooks Data Loaders]]></title><description><![CDATA[
<p>Article URL: <a href="https://observablehq.com/notebook-kit/data-loaders">https://observablehq.com/notebook-kit/data-loaders</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45200642">https://news.ycombinator.com/item?id=45200642</a></p>
<p>Points: 79</p>
<p># Comments: 20</p>
]]></description><pubDate>Wed, 10 Sep 2025 17:04:29 +0000</pubDate><link>https://observablehq.com/notebook-kit/data-loaders</link><dc:creator>mbostock</dc:creator><comments>https://news.ycombinator.com/item?id=45200642</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45200642</guid></item><item><title><![CDATA[New comment by mbostock in "Observable Notebooks 2.0 Technology Preview"]]></title><description><![CDATA[
<p>Thank you. I don’t want to commit to a public timeline on the web editor yet, but rest assured it is a top priority, and we also value the convenience of a web editor, instant collaboration, and community!</p>
]]></description><pubDate>Tue, 29 Jul 2025 18:01:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=44726464</link><dc:creator>mbostock</dc:creator><comments>https://news.ycombinator.com/item?id=44726464</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44726464</guid></item><item><title><![CDATA[New comment by mbostock in "Observable Notebooks 2.0 Technology Preview"]]></title><description><![CDATA[
<p>We’re interested in adding a TypeScript cell mode, probably first with type stripping rather than validating types. I was hoping for a pure JavaScript implementation; maybe we’ll try <a href="https://github.com/bloomberg/ts-blank-space">https://github.com/bloomberg/ts-blank-space</a>? I’ve also been looking at <a href="https://github.com/val-town/codemirror-ts">https://github.com/val-town/codemirror-ts</a> for the editor, but it’s a lot of machinery.</p>
]]></description><pubDate>Tue, 29 Jul 2025 16:33:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=44725428</link><dc:creator>mbostock</dc:creator><comments>https://news.ycombinator.com/item?id=44725428</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44725428</guid></item><item><title><![CDATA[Observable Notebooks 2.0 Technology Preview]]></title><description><![CDATA[
<p>Article URL: <a href="https://observablehq.com/notebook-kit/">https://observablehq.com/notebook-kit/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=44724068">https://news.ycombinator.com/item?id=44724068</a></p>
<p>Points: 235</p>
<p># Comments: 57</p>
]]></description><pubDate>Tue, 29 Jul 2025 14:44:00 +0000</pubDate><link>https://observablehq.com/notebook-kit/</link><dc:creator>mbostock</dc:creator><comments>https://news.ycombinator.com/item?id=44724068</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44724068</guid></item><item><title><![CDATA[New comment by mbostock in "Observable Framework 1.9"]]></title><description><![CDATA[
<p>Thanks for the feedback. We implemented the transform to strip TypeScript annotations (using esbuild)…<p><a href="https://github.com/observablehq/framework/pull/129">https://github.com/observablehq/framework/pull/129</a><p>but this approach stalled because it doesn’t implement validation of TypeScript: the TypeScript annotations are simply ignored. I felt this defeats the point of using TypeScript. We probably need to use tsc instead of esbuild to get type checking. Hints welcome!</p>
]]></description><pubDate>Tue, 18 Jun 2024 11:44:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=40716609</link><dc:creator>mbostock</dc:creator><comments>https://news.ycombinator.com/item?id=40716609</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40716609</guid></item><item><title><![CDATA[New comment by mbostock in "Observable Framework 1.9"]]></title><description><![CDATA[
<p>Currently the only examples are here: <a href="https://observablehq.com/framework/jsx" rel="nofollow">https://observablehq.com/framework/jsx</a></p>
]]></description><pubDate>Tue, 18 Jun 2024 11:41:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=40716580</link><dc:creator>mbostock</dc:creator><comments>https://news.ycombinator.com/item?id=40716580</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40716580</guid></item><item><title><![CDATA[Observable Framework 1.9]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/observablehq/framework/releases/tag/v1.9.0">https://github.com/observablehq/framework/releases/tag/v1.9.0</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=40680446">https://news.ycombinator.com/item?id=40680446</a></p>
<p>Points: 29</p>
<p># Comments: 5</p>
]]></description><pubDate>Fri, 14 Jun 2024 12:53:07 +0000</pubDate><link>https://github.com/observablehq/framework/releases/tag/v1.9.0</link><dc:creator>mbostock</dc:creator><comments>https://news.ycombinator.com/item?id=40680446</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40680446</guid></item><item><title><![CDATA[New comment by mbostock in "D3 in Depth"]]></title><description><![CDATA[
<p>In what way are these free open-source tools “locked-in” to Observable? Observable Plot is a vanilla JavaScript library that is released under the ISC license and can be used with any style of web development (e.g., React, Svelte, whatever). And likewise Observable Framework is released under the ISC license and you’re able to self-host projects anywhere and develop locally?</p>
]]></description><pubDate>Thu, 16 May 2024 16:47:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=40380455</link><dc:creator>mbostock</dc:creator><comments>https://news.ycombinator.com/item?id=40380455</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40380455</guid></item><item><title><![CDATA[New comment by mbostock in "A flat map with the least error possible: The Gott-Goldberg-Vanderbei projection"]]></title><description><![CDATA[
<p>Here’s the D3 implementation (which is just an interrupted azimuthal equidistant projection):<p><a href="https://observablehq.com/@d3/azimuthal-equidistant-hemispheres" rel="nofollow">https://observablehq.com/@d3/azimuthal-equidistant-hemispher...</a></p>
]]></description><pubDate>Mon, 22 Apr 2024 16:45:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=40116091</link><dc:creator>mbostock</dc:creator><comments>https://news.ycombinator.com/item?id=40116091</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40116091</guid></item><item><title><![CDATA[New comment by mbostock in "Interesting ideas in Observable Framework"]]></title><description><![CDATA[
<p>Thanks for the feedback. We have a PR open to make it easier to register new interpreters (without needing to fallback to .sh or .exe); it’ll let you specify the interpreter associated with a given file extension (e.g., .kts for Kotlin). <a href="https://github.com/observablehq/framework/pull/935">https://github.com/observablehq/framework/pull/935</a><p>As for inputs-driving-data-loaders, that does go against the grain a bit since Framework favors static data snapshots so that the built site is self-contained and performant. But a technique that works well is to generate Parquet files in data loaders representing the superset of data that you want to interact with, and then using DuckDB/SQL in the client to extract the subset you want to visualize. This tends to perform well, though obviously it’s dependent on the size of the superset you want to interact with.</p>
]]></description><pubDate>Tue, 05 Mar 2024 21:07:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=39609167</link><dc:creator>mbostock</dc:creator><comments>https://news.ycombinator.com/item?id=39609167</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39609167</guid></item><item><title><![CDATA[Observable Framework 1.1]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/observablehq/framework/releases/tag/v1.1.0">https://github.com/observablehq/framework/releases/tag/v1.1.0</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=39608691">https://news.ycombinator.com/item?id=39608691</a></p>
<p>Points: 20</p>
<p># Comments: 2</p>
]]></description><pubDate>Tue, 05 Mar 2024 20:17:38 +0000</pubDate><link>https://github.com/observablehq/framework/releases/tag/v1.1.0</link><dc:creator>mbostock</dc:creator><comments>https://news.ycombinator.com/item?id=39608691</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39608691</guid></item><item><title><![CDATA[New comment by mbostock in "Interesting ideas in Observable Framework"]]></title><description><![CDATA[
<p>You can write ```mermaid run=false for that.</p>
]]></description><pubDate>Mon, 04 Mar 2024 13:45:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=39590384</link><dc:creator>mbostock</dc:creator><comments>https://news.ycombinator.com/item?id=39590384</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39590384</guid></item><item><title><![CDATA[New comment by mbostock in "Interesting ideas in Observable Framework"]]></title><description><![CDATA[
<p>We do support it. (And use it!) Please see: <a href="https://observablehq.com/framework/lib/arrow#apache-parquet" rel="nofollow">https://observablehq.com/framework/lib/arrow#apache-parquet</a></p>
]]></description><pubDate>Mon, 04 Mar 2024 06:25:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=39587573</link><dc:creator>mbostock</dc:creator><comments>https://news.ycombinator.com/item?id=39587573</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39587573</guid></item><item><title><![CDATA[New comment by mbostock in "Interesting ideas in Observable Framework"]]></title><description><![CDATA[
<p>We’re planning to allow changing the default options for blocks (either per-page in front matter or across an entire project using the project config); you could then make `js run=false` the default and `js run` to opt-in to live code as you wish. But we chose to make live code the default since that’s our primary use case.</p>
]]></description><pubDate>Mon, 04 Mar 2024 06:24:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=39587566</link><dc:creator>mbostock</dc:creator><comments>https://news.ycombinator.com/item?id=39587566</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39587566</guid></item><item><title><![CDATA[New comment by mbostock in "How to optimally trap points in high-dimensional spaces inside ellipsoids"]]></title><description><![CDATA[
<p>If you find this interesting, you might enjoy my write up of the Matoušek-Sharir-Welzl (MSW) algorithm used by D3’s circle-packing layout.<p><a href="https://observablehq.com/@d3/d3-packenclose" rel="nofollow">https://observablehq.com/@d3/d3-packenclose</a><p>I still haven’t quite figured out how to make D3’s implementation robust, though. Volodymyr Agafonkin’s robust-predicated would probably help…
 <a href="https://github.com/mourner/robust-predicates">https://github.com/mourner/robust-predicates</a></p>
]]></description><pubDate>Thu, 22 Feb 2024 12:19:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=39466059</link><dc:creator>mbostock</dc:creator><comments>https://news.ycombinator.com/item?id=39466059</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39466059</guid></item><item><title><![CDATA[New comment by mbostock in "Observable 2.0, a static site generator for data apps"]]></title><description><![CDATA[
<p>That “More from Observable creators” is just a standard footer we put across the site for signed-out users to showcase community content across Observable. It’s not part of the notebook. You can ignore everything below the “Appendix”.</p>
]]></description><pubDate>Fri, 16 Feb 2024 15:15:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=39398113</link><dc:creator>mbostock</dc:creator><comments>https://news.ycombinator.com/item?id=39398113</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39398113</guid></item><item><title><![CDATA[New comment by mbostock in "Observable 2.0, a static site generator for data apps"]]></title><description><![CDATA[
<p>See Leland Wilkinson’s <i>The Grammar of Graphics</i>. He describes the difference between a chart typology (a fixed set of chart types with a fixed set of configuration options) and a grammar of graphics (a set of orthogonal primitives that can be composed in arbitrary ways).</p>
]]></description><pubDate>Fri, 16 Feb 2024 15:12:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=39398073</link><dc:creator>mbostock</dc:creator><comments>https://news.ycombinator.com/item?id=39398073</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39398073</guid></item><item><title><![CDATA[New comment by mbostock in "Observable 2.0, a static site generator for data apps"]]></title><description><![CDATA[
<p>If you’re developing the models locally, perhaps Framework’s preview server could work: it watches local files and automatically pushes updates to the browser when files change. This enables reactive updates for data loaders, but also works with static files. So you could visualize the models as they are being generated — meaning as some external process writes local files.<p>But in general the use case we’re targeting is a shared data app, dashboard, or report. Not something just for you individually, or something ephemeral (that you look at in real-time during training). For example, Framework would work well for sharing a report or dashboard evaluating the performance of the latest models you’ve built with your team.</p>
]]></description><pubDate>Fri, 16 Feb 2024 15:07:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=39398011</link><dc:creator>mbostock</dc:creator><comments>https://news.ycombinator.com/item?id=39398011</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39398011</guid></item></channel></rss>