<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: DonHopkins</title><link>https://news.ycombinator.com/user?id=DonHopkins</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 15 Jun 2026 16:28:39 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=DonHopkins" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by DonHopkins in "Ported my C game to WASM, here's everybug that I hit"]]></title><description><![CDATA[
<p>Everything made it to the browser through emulation.<p>UCSD Pascal:<p><a href="https://archive.org/details/UCSD_Pascal_1.1_1" rel="nofollow">https://archive.org/details/UCSD_Pascal_1.1_1</a><p>Wizardry:<p><a href="https://archive.org/details/WizardryProvingGrounds" rel="nofollow">https://archive.org/details/WizardryProvingGrounds</a></p>
]]></description><pubDate>Mon, 15 Jun 2026 15:36:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=48542865</link><dc:creator>DonHopkins</dc:creator><comments>https://news.ycombinator.com/item?id=48542865</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48542865</guid></item><item><title><![CDATA[New comment by DonHopkins in "Ported my C game to WASM, here's everybug that I hit"]]></title><description><![CDATA[
<p>Woz's own Sweet 16 Dream Machine on the Integer Basic ROMS of the Apple II! ;)<p><a href="https://en.wikipedia.org/wiki/SWEET16" rel="nofollow">https://en.wikipedia.org/wiki/SWEET16</a></p>
]]></description><pubDate>Mon, 15 Jun 2026 15:35:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=48542834</link><dc:creator>DonHopkins</dc:creator><comments>https://news.ycombinator.com/item?id=48542834</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48542834</guid></item><item><title><![CDATA[New comment by DonHopkins in "Ported my C game to WASM, here's everybug that I hit"]]></title><description><![CDATA[
<p>I've been porting Micropolis (SimCity Classic) to WASM / WebGPU / Svelte 5. Emscripten + Embind compile the C++ engine and glue it to TypeScript/Svelte/Runes/Reactivity; TypeScript owns UI, rendering, and callback handlers.<p>I agree with the article's main lessons: wasm32 pointer size, don't serialize structs with pointers, debug native 32-bit when you can, WebGL/WebGPU is stricter than desktop GL, Emscripten export flags still bite. I hit some of the same categories; the parts that were actually tricky for Micropolis are below.<p>Svelte 5 runes ($state, $derived, etc.) work in plain .ts modules, not just .svelte templates. That matters because the WASM bridge is a reactive module the HUD, command bus, and Vitest all import -- not a component-only trick. The file has to be MicropolisReactive.svelte.ts so runes compile under the same Vite/SvelteKit pipeline as the app; plain .ts breaks in Node with "$state is not defined".<p>Embind API surface -- what to expose and what to leave out:<p><a href="https://github.com/SimHacker/MicropolisCore/blob/main/packages/micropolis-engine/src/emscripten.cpp" rel="nofollow">https://github.com/SimHacker/MicropolisCore/blob/main/packag...</a><p><pre><code>  // This file uses emscripten's embind to bind C++ classes,
  // C structures, functions, enums, and contents into JavaScript,
  // so you can even subclass C++ classes in JavaScript,
  // for implementing plugins and user interfaces.
  //
  // Wrapping the entire Micropolis class from the Micropolis (open-source
  // version of SimCity) code into Emscripten for JavaScript access is a
  // large and complex task, mainly due to the size and complexity of the
  // class. The class encompasses almost every aspect of the simulation,
  // including map generation, simulation logic, user interface
  // interactions, and more.
</code></pre>
The comments in that file go on to describe the strategy for wrapping: Core Simulation Logic, Memory and Performance Considerations, Direct Memory Access, User Interface and Rendering, Callbacks and Interactivity, and Optimizations.<p>The engine callback virtual interface bridged C++ to JS via JSCallback:<p><a href="https://github.com/SimHacker/MicropolisCore/blob/main/packages/micropolis-engine/src/js_callback.h" rel="nofollow">https://github.com/SimHacker/MicropolisCore/blob/main/packag...</a><p>In the old NeWS/Hyperlook, TCL/Tk/X11, SWIG/Python/PyGTK, and SWIG/Python/TurboGears/AMF/Flash versions, this callback interface used to be a stringly typed general purpose event callback interface, which I tightened up into a strict C++ interface and corresponding typescript interface, so embind could help me integrate it safely and cleanly with TypeScript and Svelte Runes.<p>TypeScript handlers that update rune-backed state (sendMessage, didTool, budget hooks, etc.):<p><a href="https://github.com/SimHacker/MicropolisCore/blob/main/apps/micropolis/src/lib/MicropolisReactive.svelte.ts" rel="nofollow">https://github.com/SimHacker/MicropolisCore/blob/main/apps/m...</a><p>Simulator attach/detach, singleton engine load, wiring JSCallback into Micropolis:<p><a href="https://github.com/SimHacker/MicropolisCore/blob/main/apps/micropolis/src/lib/MicropolisSimulator.ts" rel="nofollow">https://github.com/SimHacker/MicropolisCore/blob/main/apps/m...</a><p>The pattern: C++ fires callbacks with enough context for the UI; TS updates $state; components read micropolisReactive (peek / poke / memory / getSnapshot) instead of calling Embind or touching HEAP* directly. That is where the rubber hits the road for interactivity.<p>Heap access is its own footgun. Emscripten may expose Module.wasmMemory, HEAPU16, or neither until init; some getters throw if you read too early. Centralized helper:<p><a href="https://github.com/SimHacker/MicropolisCore/blob/main/apps/micropolis/src/lib/wasm/heap.ts" rel="nofollow">https://github.com/SimHacker/MicropolisCore/blob/main/apps/m...</a><p>Bridge design, Vitest against real WASM, teardown order with Embind lifetimes:<p><a href="https://github.com/SimHacker/MicropolisCore/blob/main/documentation/designs/wasm-bridge-and-testing-trajectory.md" rel="nofollow">https://github.com/SimHacker/MicropolisCore/blob/main/docume...</a><p>Map rendering: WebGPU tile renderer with canvas fallback (legacy WebGL frozen, now reimplementing in WebGPU). The renderer reads 16 bit flags + tile indices from direct simulator memory views into WASM linear memory (mapData / mopData), not per-frame Embind copies.<p><a href="https://github.com/SimHacker/MicropolisCore/blob/main/packages/tile-renderer/src/WebGPUTileRenderer.ts" rel="nofollow">https://github.com/SimHacker/MicropolisCore/blob/main/packag...</a><p><a href="https://github.com/SimHacker/MicropolisCore/blob/main/documentation/designs/unified-webgpu-renderer.md" rel="nofollow">https://github.com/SimHacker/MicropolisCore/blob/main/docume...</a><p>City saves are a defined binary format (.cty), not fwrite of engine structs. Live map data is views into WASM linear memory (mapData / mopData), not embedded native pointers -- same idea as the article's side-table fix, but that is how this codebase is already structured.<p>Why I find this stack interesting: original SimCity engine lineage, narrow Embind surface on purpose, reactive TS facade so automation and UI share one sim without reviving the old Python/SWIG/pyGTK path. Sprites (trains, choppers, generic orange monsters wrecking chaos and havoc -- definitely not Godzilla [TM], but possibly Trump adjacent) simulate in C++; compositing them in the WebGPU path is still work in progress.<p>The WebGPU renderer is being built as a general stack with pluggable layers, including Sims content rendering (characters, animations, terrain, objects, walls, floors, ui effects, etc).<p>Character animation demo:<p><a href="https://vitamoo.space" rel="nofollow">https://vitamoo.space</a><p>VitaMoo code:<p><a href="https://github.com/SimHacker/MicropolisCore/tree/main/packages/vitamoo" rel="nofollow">https://github.com/SimHacker/MicropolisCore/tree/main/packag...</a><p>Unified WebGPU Renderer:<p><a href="https://github.com/SimHacker/MicropolisCore/blob/main/documentation/designs/unified-webgpu-renderer.md" rel="nofollow">https://github.com/SimHacker/MicropolisCore/blob/main/docume...</a><p>Render Core Package:<p><a href="https://github.com/SimHacker/MicropolisCore/blob/main/documentation/designs/render-core-package.md" rel="nofollow">https://github.com/SimHacker/MicropolisCore/blob/main/docume...</a><p>Renderer Plugin Roadmap:<p><a href="https://github.com/SimHacker/MicropolisCore/blob/main/documentation/designs/renderer-plugin-roadmap.md" rel="nofollow">https://github.com/SimHacker/MicropolisCore/blob/main/docume...</a><p>Live Micropolis tile renderer and simulator demo (no other ui yet, work in progress):<p><a href="https://micropolisweb.com" rel="nofollow">https://micropolisweb.com</a><p>Demo of the simulator, cellular automata, and tile engine to Jerry Martin's music:<p><a href="https://www.youtube.com/watch?v=319i7slXcbI" rel="nofollow">https://www.youtube.com/watch?v=319i7slXcbI</a><p>Repo:<p><a href="https://github.com/SimHacker/MicropolisCore" rel="nofollow">https://github.com/SimHacker/MicropolisCore</a></p>
]]></description><pubDate>Mon, 15 Jun 2026 15:30:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=48542767</link><dc:creator>DonHopkins</dc:creator><comments>https://news.ycombinator.com/item?id=48542767</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48542767</guid></item><item><title><![CDATA[New comment by DonHopkins in "Ported my C game to WASM, here's everybug that I hit"]]></title><description><![CDATA[
<p>You sounds like the misattributed Bill Gates of 2026.</p>
]]></description><pubDate>Mon, 15 Jun 2026 14:47:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=48542113</link><dc:creator>DonHopkins</dc:creator><comments>https://news.ycombinator.com/item?id=48542113</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48542113</guid></item><item><title><![CDATA[New comment by DonHopkins in "Curl will not accept vulnerability reports during July 2026"]]></title><description><![CDATA[
<p>Wrong, but thanks for documenting how uncooperative you are.</p>
]]></description><pubDate>Mon, 15 Jun 2026 08:17:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=48538156</link><dc:creator>DonHopkins</dc:creator><comments>https://news.ycombinator.com/item?id=48538156</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48538156</guid></item><item><title><![CDATA[New comment by DonHopkins in "Even more batteries included with Emacs"]]></title><description><![CDATA[
<p>It's as wrong to anthroporphize Emacs as it is Larry Ellison.</p>
]]></description><pubDate>Mon, 15 Jun 2026 07:39:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=48537830</link><dc:creator>DonHopkins</dc:creator><comments>https://news.ycombinator.com/item?id=48537830</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48537830</guid></item><item><title><![CDATA[New comment by DonHopkins in "Even more batteries included with Emacs"]]></title><description><![CDATA[
<p>I <i>LOVE</i> Emacs, but I <i>HATE</i> it when I have the irresistible urge to edit text, but Emacs has dead batteries.<p><a href="https://www.youtube.com/watch?v=D1sXuHnf_lo" rel="nofollow">https://www.youtube.com/watch?v=D1sXuHnf_lo</a></p>
]]></description><pubDate>Mon, 15 Jun 2026 06:41:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=48537436</link><dc:creator>DonHopkins</dc:creator><comments>https://news.ycombinator.com/item?id=48537436</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48537436</guid></item><item><title><![CDATA[New comment by DonHopkins in "Perlisisms (1982)"]]></title><description><![CDATA[
<p>>1. One man's constant is another man's variable.<p>Did you ever have one of those days when variables didn't and constants weren't?</p>
]]></description><pubDate>Sun, 14 Jun 2026 17:02:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=48529646</link><dc:creator>DonHopkins</dc:creator><comments>https://news.ycombinator.com/item?id=48529646</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48529646</guid></item><item><title><![CDATA[New comment by DonHopkins in "The Birth and Death of JavaScript (2014)"]]></title><description><![CDATA[
<p>Let's just say it's open to interpretation.</p>
]]></description><pubDate>Sun, 14 Jun 2026 15:36:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=48528357</link><dc:creator>DonHopkins</dc:creator><comments>https://news.ycombinator.com/item?id=48528357</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48528357</guid></item><item><title><![CDATA[New comment by DonHopkins in "The Birth and Death of JavaScript (2014)"]]></title><description><![CDATA[
<p>Reminds me of one of Microsoft's first Dynamic HTML demos:<p>There were two buttons, one labeled "Our Web Site", the other labeled "Our Competitor's Web Site".<p>When you moved the mouse over the "Our Competitor's Web Site" button, it would quickly slide out from under your cursor before you could click it!<p>Then when you stopped moving your mouse, the "Our Web Site" button would slyly slide right underneath your mouse!<p>Dammit Microsoft!!! ;)</p>
]]></description><pubDate>Sun, 14 Jun 2026 15:31:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=48528292</link><dc:creator>DonHopkins</dc:creator><comments>https://news.ycombinator.com/item?id=48528292</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48528292</guid></item><item><title><![CDATA[New comment by DonHopkins in "Lisp's Influence on Ruby"]]></title><description><![CDATA[
<p>What have the Lisps ever done for us?<p><a href="https://www.youtube.com/watch?v=Qc7HmhrgTuQ" rel="nofollow">https://www.youtube.com/watch?v=Qc7HmhrgTuQ</a></p>
]]></description><pubDate>Sun, 14 Jun 2026 15:21:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=48528161</link><dc:creator>DonHopkins</dc:creator><comments>https://news.ycombinator.com/item?id=48528161</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48528161</guid></item><item><title><![CDATA[New comment by DonHopkins in "Emacs appearances in pop culture"]]></title><description><![CDATA[
<p>Naming a dog after an inferior text editor would be cruel and demeaning! ;)<p>Perhaps VI would make a good snake name, though: VIper.</p>
]]></description><pubDate>Sun, 14 Jun 2026 12:00:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=48526407</link><dc:creator>DonHopkins</dc:creator><comments>https://news.ycombinator.com/item?id=48526407</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48526407</guid></item><item><title><![CDATA[New comment by DonHopkins in "LaserWriter seeds"]]></title><description><![CDATA[
<p><a href="https://news.ycombinator.com/item?id=19874245">https://news.ycombinator.com/item?id=19874245</a><p>DonHopkins on May 10, 2019 | parent | context | favorite | on: Why are 2D vector graphics so much harder than 3D?<p>Brian Reid wrote about page independence, comparing Interpress' and PostScript's different approaches. Adobe's later voluntary Document Structuring Conventions actually used PostScript comments to make declarations and delimit different parts of the file -- it wasn't actually a part of the PostScript language, while Interpress defined pages as independent so they couldn't possibly affect each other:<p><a href="https://groups.google.com/forum/#!topic/fa.laser-lovers/H3us4h8S3Kk" rel="nofollow">https://groups.google.com/forum/#!topic/fa.laser-lovers/H3us...</a><p>>By now you can probably see the fundamental philosophical difference between PostScript and Interpress. Interpress takes the stance that the language system must guarantee certain useful properties, while PostScript takes the stance that the language system must provide the user with the means to achieve those properties if he wants them. With very few exceptions, both languages provide the same facilities, but in Interpress the protection mechanisms are mandatory and in PostScript they are optional. Debates over the relative merits of mandatory and optional protection systems have raged for years not only in the programming language community but also among owners of motorcycle helmets. While the Interpress language mandates a particular organization, the PostScript language provides the tools (structuring conventions and SAVE/RESTORE) to duplicate that organization exactly, with all of the attendant benefits. However, the PostScript user need not employ those tools.<p>The Definitive History of PostScript<p><a href="https://github.com/SimHacker/moollm/blob/main/designs/postscript/BRIAN-REID-POSTSCRIPT-HISTORY.md" rel="nofollow">https://github.com/SimHacker/moollm/blob/main/designs/postsc...</a><p>>Primary Source: Brian Reid's 1985 "laser-lovers" Post<p>>This document preserves the definitive first-person account of PostScript's origins, written by Brian Reid on March 2, 1985 — just 11 months after Adobe shipped its first PostScript manual.<p>>Brian Reid was uniquely positioned to write this history:<p>>He was there. As a consultant to Xerox PARC during the Interpress design, he worked directly with the principals.<p>>His thesis advisor was Bob Sproull — one of the three architects of Interpress (with Butler Lampson and John Warnock).<p>>He saw JAM at Stanford in 1981 — the direct predecessor to both Interpress and PostScript.<p>>fa.laser-lovers was the Hacker News of 1985 — this wasn't a casual post but a definitive statement to the technical community.</p>
]]></description><pubDate>Sun, 14 Jun 2026 10:47:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=48525999</link><dc:creator>DonHopkins</dc:creator><comments>https://news.ycombinator.com/item?id=48525999</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48525999</guid></item><item><title><![CDATA[New comment by DonHopkins in "There is a shadow hanging over this Fable thing"]]></title><description><![CDATA[
<p>You're the self proclaimed Man Going Your Own Way.<p>rustcleaner> I was an early bird in MGTOW, but now it's common knowledge and operating strategy for most young men.<p>So how's that book of racist poetry you're writing going? Has it impressed the ladies and helped with your incelibacy problem?</p>
]]></description><pubDate>Sun, 14 Jun 2026 10:33:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=48525916</link><dc:creator>DonHopkins</dc:creator><comments>https://news.ycombinator.com/item?id=48525916</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48525916</guid></item><item><title><![CDATA[New comment by DonHopkins in "Weave: Merging based on language structure and not lines"]]></title><description><![CDATA[
<p>Too bad Trump hijacked the meaning of the word "weave" to mean senile "sunsetting" and rambling incoherently from unrelated topic to topic, swerving between conversational lanes and colliding with facts and laws and decency like a sleepy angry drunk driver off his meds.</p>
]]></description><pubDate>Sun, 14 Jun 2026 10:24:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=48525868</link><dc:creator>DonHopkins</dc:creator><comments>https://news.ycombinator.com/item?id=48525868</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48525868</guid></item><item><title><![CDATA[New comment by DonHopkins in "I'm skeptical about efforts to revolutionize schooling"]]></title><description><![CDATA[
<p>OK Incel.</p>
]]></description><pubDate>Sat, 13 Jun 2026 19:00:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=48520322</link><dc:creator>DonHopkins</dc:creator><comments>https://news.ycombinator.com/item?id=48520322</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48520322</guid></item><item><title><![CDATA[New comment by DonHopkins in "There is a shadow hanging over this Fable thing"]]></title><description><![CDATA[
<p>Yes, you've already told us you're the one who wants to make racist poetry.</p>
]]></description><pubDate>Sat, 13 Jun 2026 18:55:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=48520283</link><dc:creator>DonHopkins</dc:creator><comments>https://news.ycombinator.com/item?id=48520283</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48520283</guid></item><item><title><![CDATA[New comment by DonHopkins in "AI OSS tool repo goes archived over night after raising $7.3M Seed"]]></title><description><![CDATA[
<p>Obviously they upgraded, bought a dash, and moved on to <a href="https://www.tensor-one.com/" rel="nofollow">https://www.tensor-one.com/</a></p>
]]></description><pubDate>Sat, 13 Jun 2026 13:55:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=48517379</link><dc:creator>DonHopkins</dc:creator><comments>https://news.ycombinator.com/item?id=48517379</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48517379</guid></item><item><title><![CDATA[New comment by DonHopkins in "Leaving Mozilla"]]></title><description><![CDATA[
<p>Self-Licking Ice Cream Cone<p><a href="https://en.wikipedia.org/wiki/Self-licking_ice_cream_cone" rel="nofollow">https://en.wikipedia.org/wiki/Self-licking_ice_cream_cone</a><p>>In political jargon, a self-licking ice cream cone is a self-perpetuating system that has no purpose other than to sustain itself.<p>>History<p>>The phrase appeared to have been first used in 1991–1992, in a book about Gulf War weapons systems by Norman Friedman, and On Self-Licking Ice Cream Cones, a paper by Pete Worden about NASA's bureaucracy, to describe the relationship between the Space Shuttle and Space Station.<p>[...]</p>
]]></description><pubDate>Sat, 13 Jun 2026 10:50:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=48515852</link><dc:creator>DonHopkins</dc:creator><comments>https://news.ycombinator.com/item?id=48515852</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48515852</guid></item><item><title><![CDATA[New comment by DonHopkins in "Open source AI must win"]]></title><description><![CDATA[
<p>Also:<p>rustcleaner> homosexual and transsexual topics<p>OK boomer.</p>
]]></description><pubDate>Sat, 13 Jun 2026 08:40:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=48514960</link><dc:creator>DonHopkins</dc:creator><comments>https://news.ycombinator.com/item?id=48514960</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48514960</guid></item></channel></rss>