<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: russellthehippo</title><link>https://news.ycombinator.com/user?id=russellthehippo</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 15 Jun 2026 13:25:05 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=russellthehippo" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by russellthehippo in "Samurai City"]]></title><description><![CDATA[
<p>There were real geographic and social tradeoffs to having status and power.</p>
]]></description><pubDate>Thu, 04 Jun 2026 23:35:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=48406118</link><dc:creator>russellthehippo</dc:creator><comments>https://news.ycombinator.com/item?id=48406118</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48406118</guid></item><item><title><![CDATA[New comment by russellthehippo in "Show HN: Electrolite – embeddable Electric-style sync for SQLite"]]></title><description><![CDATA[
<p>Hi HN, I made this. My brother wanted to use per-tenant SQLite at his startup, but really likes Electric’s Shape model for Postgres. So I got curious to see if the same idea was feasible for SQLite.<p>Electrolite is “Electric-style Shapes, but for SQLite, embedded in an app.” The server defines authorized subsets of rows, the browser asks for one by name, gets an initial snapshot, then long-polls for logical changes captured by SQLite triggers.<p>It’s very experimental, not on npm yet, and the predicate language is intentionally small. I also wouldn’t describe it as deeply optimized yet. But in a local in-process smoke test, one SQLite write woke 1000 live Shape clients and all materialized the new row in ~100ms, so it looks promising for SQLite-first apps.<p>Would love your feedback and suggestions, and maybe it will even be useful for you.</p>
]]></description><pubDate>Tue, 05 May 2026 13:37:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=48022392</link><dc:creator>russellthehippo</dc:creator><comments>https://news.ycombinator.com/item?id=48022392</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48022392</guid></item><item><title><![CDATA[Show HN: Electrolite – embeddable ElectricSQL-style sync for SQLite]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/russellromney/electrolite">https://github.com/russellromney/electrolite</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48022299">https://news.ycombinator.com/item?id=48022299</a></p>
<p>Points: 1</p>
<p># Comments: 1</p>
]]></description><pubDate>Tue, 05 May 2026 13:29:33 +0000</pubDate><link>https://github.com/russellromney/electrolite</link><dc:creator>russellthehippo</dc:creator><comments>https://news.ycombinator.com/item?id=48022299</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48022299</guid></item><item><title><![CDATA[New comment by russellthehippo in "Technical, cognitive, and intent debt"]]></title><description><![CDATA[
<p>I'm finding in practice in using this process that you're right - it just doesn't work, even for one dev (usually). ha. But, the process of forcing plans to verify intent has worked pretty well! specifically the process of repeated adversarial review against a dual "will do, won't do" thing has been very, very useful at getting change plans to match intent.</p>
]]></description><pubDate>Tue, 05 May 2026 03:25:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=48017732</link><dc:creator>russellthehippo</dc:creator><comments>https://news.ycombinator.com/item?id=48017732</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48017732</guid></item><item><title><![CDATA[New comment by russellthehippo in "Honker – Durable queues, streams, pub/sub, and cron scheduler in a SQLite file"]]></title><description><![CDATA[
<p>Appreciated your input on the original thread as well. Maybe I should note this recommendation in the docs or something.</p>
]]></description><pubDate>Fri, 01 May 2026 20:49:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=47980112</link><dc:creator>russellthehippo</dc:creator><comments>https://news.ycombinator.com/item?id=47980112</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47980112</guid></item><item><title><![CDATA[New comment by russellthehippo in "Durable queues, streams, pub/sub, and a cron scheduler – inside your SQLite file"]]></title><description><![CDATA[
<p>Author here. Yeah doesn’t depend on the underlying db if it speaks SQLite.</p>
]]></description><pubDate>Thu, 30 Apr 2026 21:49:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=47968678</link><dc:creator>russellthehippo</dc:creator><comments>https://news.ycombinator.com/item?id=47968678</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47968678</guid></item><item><title><![CDATA[New comment by russellthehippo in "Durable queues, streams, pub/sub, and a cron scheduler – inside your SQLite file"]]></title><description><![CDATA[
<p>Yup</p>
]]></description><pubDate>Thu, 30 Apr 2026 21:47:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=47968659</link><dc:creator>russellthehippo</dc:creator><comments>https://news.ycombinator.com/item?id=47968659</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47968659</guid></item><item><title><![CDATA[New comment by russellthehippo in "Honker – Durable queues, streams, pub/sub, and cron scheduler in a SQLite file"]]></title><description><![CDATA[
<p>Respectfully (thanks haha) - yeah probably right. Original intent was to use inotify type thing but i avoided per-platform differences at the outset. this was definitely a for fun project that blew up unintentionally and am working to harden/improve.<p>Love Fly.</p>
]]></description><pubDate>Thu, 30 Apr 2026 21:47:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=47968654</link><dc:creator>russellthehippo</dc:creator><comments>https://news.ycombinator.com/item?id=47968654</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47968654</guid></item><item><title><![CDATA[New comment by russellthehippo in "Durable queues, streams, pub/sub, and a cron scheduler – inside your SQLite file"]]></title><description><![CDATA[
<p>Author here - previously posted here: <a href="https://news.ycombinator.com/item?id=47874647">https://news.ycombinator.com/item?id=47874647</a><p>Key difference vs SQL polling is that we’re touching metadata instead of data pages. I have work in process to make this work without any polling (innotify, kqueue, mmap’d shm file check) after the original stat(2) direction proved unreliable if lightweight.<p>Would love your feedback and or contributions in the repo - still figuring out the end shape.</p>
]]></description><pubDate>Thu, 30 Apr 2026 21:32:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=47968488</link><dc:creator>russellthehippo</dc:creator><comments>https://news.ycombinator.com/item?id=47968488</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47968488</guid></item><item><title><![CDATA[New comment by russellthehippo in "An update on GitHub availability"]]></title><description><![CDATA[
<p>Reading the capacity crunch idea made me a little more empathetic to their issues - 30x in one year is a lot when you're starting from a high baseline. Now that being said...I'd really appreciate more availability.</p>
]]></description><pubDate>Wed, 29 Apr 2026 08:51:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=47945776</link><dc:creator>russellthehippo</dc:creator><comments>https://news.ycombinator.com/item?id=47945776</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47945776</guid></item><item><title><![CDATA[New comment by russellthehippo in "Show HN: Honker – Postgres NOTIFY/LISTEN Semantics for SQLite"]]></title><description><![CDATA[
<p>Reporting back again. It seems I was actually right the first time - the C API's SQLITE_FCNTL_DATA_VERSION doesn't work cross connection. It is cached on each read - but if there aren't any reads (i.e. just polling SQLITE_FCNTL_DATA_VERSION) then it doesn't work.<p>PRAGMA data_version is pretty fast (1500ns with prepared statement) and doesn't have that issue.<p>Checking the wal-index is sub-nanosecond when mmapped but has slightly different behavior on Windows.<p>Here's the link to the thread on this, my scripts are all there.<p><a href="https://github.com/russellromney/honker/issues/5" rel="nofollow">https://github.com/russellromney/honker/issues/5</a></p>
]]></description><pubDate>Sun, 26 Apr 2026 02:27:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=47906721</link><dc:creator>russellthehippo</dc:creator><comments>https://news.ycombinator.com/item?id=47906721</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47906721</guid></item><item><title><![CDATA[New comment by russellthehippo in "Show HN: Honker – Postgres NOTIFY/LISTEN Semantics for SQLite"]]></title><description><![CDATA[
<p>I've added examples for many ORMs and web frameworks to the docs. See here:<p><a href="https://honker.dev/guides/orm/#sqlalchemy--sqlmodel" rel="nofollow">https://honker.dev/guides/orm/#sqlalchemy--sqlmodel</a></p>
]]></description><pubDate>Sat, 25 Apr 2026 10:59:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=47900439</link><dc:creator>russellthehippo</dc:creator><comments>https://news.ycombinator.com/item?id=47900439</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47900439</guid></item><item><title><![CDATA[New comment by russellthehippo in "Show HN: Honker – Postgres NOTIFY/LISTEN Semantics for SQLite"]]></title><description><![CDATA[
<p>Reporting back. This appears to be a bug in my original test the code of which sadly I did not commit anywhere. I went back to regenerate these tests and proved the opposite - the C API is better than PRAGMA and works across connections. I am going to make that update as I've proved across dozens of versions of SQLite that this is not in fact the case.</p>
]]></description><pubDate>Sat, 25 Apr 2026 10:58:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=47900433</link><dc:creator>russellthehippo</dc:creator><comments>https://news.ycombinator.com/item?id=47900433</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47900433</guid></item><item><title><![CDATA[New comment by russellthehippo in "Show HN: Honker – Postgres NOTIFY/LISTEN Semantics for SQLite"]]></title><description><![CDATA[
<p>Ha. Great callout. Will inspect further</p>
]]></description><pubDate>Fri, 24 Apr 2026 20:27:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=47895343</link><dc:creator>russellthehippo</dc:creator><comments>https://news.ycombinator.com/item?id=47895343</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47895343</guid></item><item><title><![CDATA[New comment by russellthehippo in "Show HN: Honker – Postgres NOTIFY/LISTEN Semantics for SQLite"]]></title><description><![CDATA[
<p>Will do</p>
]]></description><pubDate>Fri, 24 Apr 2026 20:20:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=47895265</link><dc:creator>russellthehippo</dc:creator><comments>https://news.ycombinator.com/item?id=47895265</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47895265</guid></item><item><title><![CDATA[Intent-Driven Development]]></title><description><![CDATA[
<p>Article URL: <a href="https://russellromney.com/blog/intent-driven-development">https://russellromney.com/blog/intent-driven-development</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47889302">https://news.ycombinator.com/item?id=47889302</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 24 Apr 2026 12:30:20 +0000</pubDate><link>https://russellromney.com/blog/intent-driven-development</link><dc:creator>russellthehippo</dc:creator><comments>https://news.ycombinator.com/item?id=47889302</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47889302</guid></item><item><title><![CDATA[New comment by russellthehippo in "Show HN: Honker – Postgres NOTIFY/LISTEN Semantics for SQLite"]]></title><description><![CDATA[
<p>link for all others - this commenter fixed a bug in core Postgres that fixed a scaling issue in actual listen/notify <a href="https://www.recall.ai/blog/postgres-listen-notify-does-not-scale" rel="nofollow">https://www.recall.ai/blog/postgres-listen-notify-does-not-s...</a></p>
]]></description><pubDate>Fri, 24 Apr 2026 11:14:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=47888586</link><dc:creator>russellthehippo</dc:creator><comments>https://news.ycombinator.com/item?id=47888586</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47888586</guid></item><item><title><![CDATA[New comment by russellthehippo in "Show HN: Honker – Postgres NOTIFY/LISTEN Semantics for SQLite"]]></title><description><![CDATA[
<p>writes and claim/ack flow. really depends on your journal mode and synchrnous mode as well.<p>notifs are extremely cheap, either in the old stat(2) mode or the new PRAGMA page_version (see my update on feeback comment). Some other comments mentioned that stat(2) is about 1µs.</p>
]]></description><pubDate>Fri, 24 Apr 2026 11:11:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=47888571</link><dc:creator>russellthehippo</dc:creator><comments>https://news.ycombinator.com/item?id=47888571</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47888571</guid></item><item><title><![CDATA[New comment by russellthehippo in "Show HN: Honker – Postgres NOTIFY/LISTEN Semantics for SQLite"]]></title><description><![CDATA[
<p>[Response to feedback]<p>Thanks all for your feedback, responses, and discussion. I've done a PR here taking your suggestions into account:<p><a href="https://github.com/russellromney/honker/pulls/1" rel="nofollow">https://github.com/russellromney/honker/pulls/1</a><p>The PR implements a three-layer polling architecture: 
- PRAGMA data_version every 1ms
- stat every 100ms 
- retry connection to handle blips<p>1. PRAGMA data_version every 1ms replaces stat-based (size, mtime) change detection. This is SQLite's own commit counter: monotonic, immune to clock skew, correctly handles WAL truncation and rolled-back transactions. ~3µs nonblocking query. Credit to ncruces for pointing to this. This is not done for performance but for correctness as it is slightly slower. tuo-lei also pointed out truncation risk, which turned out to be more real than i thought.<p>Interesting note: I found in testing that the C API's SQLITE_FCNTL_DATA_VERSION does not work cross-connection. So for now honker continues paying the cost of going through the VFS layer which vlovich123 pointed out and now we tradeoff explicitly.<p>2. Reconnect-on-error: if the data_version query fails (disk blip, NFS hiccup, corrupted connection), honker tries to reconnect and wakes subscribers as a precaution. zbentley pointed me in this direction.<p>3. stat identity check every 100ms: compares (dev, ino) against startup values to detect file replacement (atomic rename, litestream restore, volume remount). data_version can't catch this because it polls through the open fd, which follows the original inode even after replacement. Credit to zbentley for the file-replacement scenarios.<p>Again - thanks for the discussion, honker got better because of it and I learned some stuff. See you round</p>
]]></description><pubDate>Fri, 24 Apr 2026 10:03:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=47888037</link><dc:creator>russellthehippo</dc:creator><comments>https://news.ycombinator.com/item?id=47888037</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47888037</guid></item><item><title><![CDATA[New comment by russellthehippo in "Technical, cognitive, and intent debt"]]></title><description><![CDATA[
<p>Wow, yeah. You call it “optimizing for understanding.” I’ve been thinking about a very similar problem as “optimizing for execution of intent.”<p>My version is roughly: if execution and verification are getting cheap, but taste, design, intent, and planning are still expensive, then the workflow should focus on how intent gets executed in each change and how it stays intact over time instead of slowly drifting.<p>I’m more hesitant to formalize all of that into heavy tooling, but there are clear parallels here. I wrote up more of what I mean here: <a href="https://russellromney.com/blog/intent-driven-development" rel="nofollow">https://russellromney.com/blog/intent-driven-development</a></p>
]]></description><pubDate>Fri, 24 Apr 2026 09:16:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=47887672</link><dc:creator>russellthehippo</dc:creator><comments>https://news.ycombinator.com/item?id=47887672</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47887672</guid></item></channel></rss>