<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: wmanley</title><link>https://news.ycombinator.com/user?id=wmanley</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sun, 25 Oct 2026 16:58:00 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=wmanley" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by wmanley in "Hole Punch: Sling your spaceship around gravitational fields"]]></title><description><![CDATA[
<p>> It's like Space Golfing<p>Or pool...<p>I am prince of the planet potters!</p>
]]></description><pubDate>Sat, 03 Oct 2026 21:41:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=49948077</link><dc:creator>wmanley</dc:creator><comments>https://news.ycombinator.com/item?id=49948077</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49948077</guid></item><item><title><![CDATA[New comment by wmanley in "Claude discovers a novel enzyme system with CRISPR-like repeats"]]></title><description><![CDATA[
<p>Violent uprisings are controlled all the time all over the world. It’s rare for a violent uprising to successfully achieve its goals. Governments are designed specifically to survive violent uprisings, even from within their own ranks or armed forces.<p>One of my worries about AI is that it will improve the rich and powerful’s ability to survive a violent uprising or allow them to insulate themselves from the populace with less need for numerous human bodyguards. This in combination with a concentration of wealth/income generation could lead to a Russia-style elimination of personal freedoms.<p>Essentially it could allow the rich and powerful to come increasingly untethered to the needs of their fellow man. No longer needing a middle class of lawyers, architects and managers for them to achieve their goals. And having the capability to suppress the general populace with less need for expensive private security.</p>
]]></description><pubDate>Thu, 24 Sep 2026 11:50:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=49829352</link><dc:creator>wmanley</dc:creator><comments>https://news.ycombinator.com/item?id=49829352</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49829352</guid></item><item><title><![CDATA[New comment by wmanley in "Building Progressively Enhanced Forms Using htmx"]]></title><description><![CDATA[
<p>You mean by having a function per fragment? I don’t think this solves the hard to maintain bit - which is “which fragments should I regenerate/send”, and how do I keep that list up to date as my app evolves.<p>FWIW I have a potential solution: to show live data in my app I use an SSE stream of OOB swaps. On every relevant change to the database I regenerate the HTML and compare it to the previously generated html to create OOB swaps (including hx-preserve). I send that down so the browser can update.<p>The same approach could be used for normal POSTs. On a POST generate the HTML before and after modifying the database and diff them to generate OOB swaps.</p>
]]></description><pubDate>Thu, 06 Aug 2026 22:28:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=49203511</link><dc:creator>wmanley</dc:creator><comments>https://news.ycombinator.com/item?id=49203511</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49203511</guid></item><item><title><![CDATA[New comment by wmanley in "Humans missed 1 in 3 threats approving AI agent commands across 40k game runs"]]></title><description><![CDATA[
<p>The agent should ask whether it's allowed to read/write particular files, rather than whether it's allowed to run particular commands.  It would be much easier to review.  Then wrap each command invocation in bwrap (+http proxy) accordingly.</p>
]]></description><pubDate>Thu, 06 Aug 2026 13:47:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=49196653</link><dc:creator>wmanley</dc:creator><comments>https://news.ycombinator.com/item?id=49196653</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49196653</guid></item><item><title><![CDATA[New comment by wmanley in "Prefer strict tables in SQLite"]]></title><description><![CDATA[
<p>We use this for migrations:
 <a href="https://david.rothlis.net/declarative-schema-migration-for-sqlite/" rel="nofollow">https://david.rothlis.net/declarative-schema-migration-for-s...</a><p>Discussed here: <a href="https://news.ycombinator.com/item?id=31249823">https://news.ycombinator.com/item?id=31249823</a><p>But it would be a lot better if it were built in.</p>
]]></description><pubDate>Sat, 11 Jul 2026 22:22:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=48876407</link><dc:creator>wmanley</dc:creator><comments>https://news.ycombinator.com/item?id=48876407</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48876407</guid></item><item><title><![CDATA[New comment by wmanley in "crustc: entirety of `rustc`, translated to C"]]></title><description><![CDATA[
<p>It's not diverse in that case - it's the same compiler source compiled to binaries twice - it's just that with one compiler you've gone via a C intermediate representation.  For the purposes of diversity it's the same as compiling rustc with the cranelift/gcc backend.</p>
]]></description><pubDate>Fri, 03 Jul 2026 08:48:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=48772562</link><dc:creator>wmanley</dc:creator><comments>https://news.ycombinator.com/item?id=48772562</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48772562</guid></item><item><title><![CDATA[New comment by wmanley in "Lightning Memory-Mapped Database Manager (LMDB) 1.0"]]></title><description><![CDATA[
<p>I use mmap with my SQLite database[1] because I have many concurrent SQLite connections (one per concurrent HTTP request) and I don't want each connection to have its own 2MB cache[2]. It's better that all the connections simply share the page cache.<p>[1]: <a href="https://sqlite.org/pragma.html#pragma_mmap_size" rel="nofollow">https://sqlite.org/pragma.html#pragma_mmap_size</a><p>[2]: <a href="https://sqlite.org/pragma.html#pragma_cache_size" rel="nofollow">https://sqlite.org/pragma.html#pragma_cache_size</a></p>
]]></description><pubDate>Thu, 02 Jul 2026 22:41:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=48768311</link><dc:creator>wmanley</dc:creator><comments>https://news.ycombinator.com/item?id=48768311</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48768311</guid></item><item><title><![CDATA[New comment by wmanley in "Lightning Memory-Mapped Database Manager (LMDB) 1.0"]]></title><description><![CDATA[
<p>The context is in the sentence before your quote:<p>> The memory map can be used as a read-only or read-write map.<p>So presumably lmdb writes to the database using the `pwrite` syscall by default, but can optionally write via the mmap instead - if you are willing to accept the increased risk of accidental data corruption.</p>
]]></description><pubDate>Thu, 02 Jul 2026 22:32:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=48768222</link><dc:creator>wmanley</dc:creator><comments>https://news.ycombinator.com/item?id=48768222</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48768222</guid></item><item><title><![CDATA[New comment by wmanley in "Free the Icons"]]></title><description><![CDATA[
<p>> seemingly because Zuck isn't aware of how untalented the guy is.<p>Maybe Zuck just wanted his laptop to get better.</p>
]]></description><pubDate>Tue, 30 Jun 2026 08:43:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=48730023</link><dc:creator>wmanley</dc:creator><comments>https://news.ycombinator.com/item?id=48730023</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48730023</guid></item><item><title><![CDATA[New comment by wmanley in "AI agent runs amok in Fedora and elsewhere"]]></title><description><![CDATA[
<p>> A good fix (which is the only acceptable fix in open-source software), is one that speaks for itself.<p>I disagree. Often if I'm making a PR to an open-source project I'm doing so because I have a use-case that the original author hadn't considered.  So the first step in getting the PR merged is explaining my point of view and convincing the maintainer that my use-case is valid.  Only when this is done can the "goodness" of the patch be evaluated.</p>
]]></description><pubDate>Thu, 11 Jun 2026 11:29:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=48488925</link><dc:creator>wmanley</dc:creator><comments>https://news.ycombinator.com/item?id=48488925</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48488925</guid></item><item><title><![CDATA[New comment by wmanley in "Building an HTML-first site doubled our users overnight"]]></title><description><![CDATA[
<p>I disagree. An HTML website which uses links, forms, buttons and inputs will by default:<p>* Have working back/forward buttons
* Have working progress indicator as provided by the browser
* Show errors to the user - even if they are ugly
* Be accessible to keyboard navigation<p>With SPAs these are all things the developer has to get right.<p>So often when using a SPA I'll click a button, you get a spinner and then nothing will happen. Is it still in progress? Don't know. Eventually I'll open developer console and trace the network requests to find the JSON HTTP request that returned "ERR_BAD_EMAIL" and fix what I've entered. With a normal form submission at least the user will see the error message and can press back and then fix it.</p>
]]></description><pubDate>Wed, 10 Jun 2026 14:47:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=48477121</link><dc:creator>wmanley</dc:creator><comments>https://news.ycombinator.com/item?id=48477121</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48477121</guid></item><item><title><![CDATA[New comment by wmanley in "Building an HTML-first site doubled our users overnight"]]></title><description><![CDATA[
<p>The counterargument: In Defence of the Single Page Application:<p><a href="https://williamkennedy.ninja/javascript/2022/05/03/in-defence-of-the-single-page-application/" rel="nofollow">https://williamkennedy.ninja/javascript/2022/05/03/in-defenc...</a></p>
]]></description><pubDate>Wed, 10 Jun 2026 14:08:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=48476547</link><dc:creator>wmanley</dc:creator><comments>https://news.ycombinator.com/item?id=48476547</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48476547</guid></item><item><title><![CDATA[New comment by wmanley in "Love systemd timers"]]></title><description><![CDATA[
<p>I design all my services expecting to receive sockets this way.  It makes sandboxing easy as the service itself doesn't need network access to have a listening socket.<p>It's a shame docker never supported it.  I feel like if they had got on board all those years ago there would be broad support across the software ecosystem for it and we wouldn't need half of these complicated iptables rules and proxies and service mesh.  It would be a step towards a capability based system.</p>
]]></description><pubDate>Tue, 02 Jun 2026 13:37:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=48370125</link><dc:creator>wmanley</dc:creator><comments>https://news.ycombinator.com/item?id=48370125</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48370125</guid></item><item><title><![CDATA[New comment by wmanley in "Details of the Daring Airdrop at Tristan Da Cunha"]]></title><description><![CDATA[
<p>Wonderful. I love the poem at the end too.</p>
]]></description><pubDate>Fri, 15 May 2026 08:53:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=48146174</link><dc:creator>wmanley</dc:creator><comments>https://news.ycombinator.com/item?id=48146174</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48146174</guid></item><item><title><![CDATA[New comment by wmanley in "Durable queues, streams, pub/sub, and a cron scheduler – inside your SQLite file"]]></title><description><![CDATA[
<p>I've implemented something similar in the past, but using inotify.  You need to watch the -wal file for IN_MODIFY.  To make it work reliably I found I had to run:<p><pre><code>    BEGIN IMMEDIATE TRANSACTION; ROLLBACK;
</code></pre>
Otherwise the new changes weren't guaranteed to be visible to the process.  I'm sure there's a more targetted approach that would work instead - maybe flock on a particular byte in the `-shm` file.</p>
]]></description><pubDate>Thu, 30 Apr 2026 20:08:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=47967579</link><dc:creator>wmanley</dc:creator><comments>https://news.ycombinator.com/item?id=47967579</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47967579</guid></item><item><title><![CDATA[New comment by wmanley in "Do you even need a database?"]]></title><description><![CDATA[
<p>SQLite in mmap mode (not the default) will use mmap for reading.  It will still use write using `pwrite` so it can detect and recover from write failures.<p>See <a href="https://www.sqlite.org/mmap.html" rel="nofollow">https://www.sqlite.org/mmap.html</a> :<p>> The default mechanism by which SQLite accesses and updates database disk files is the xRead() and xWrite() methods of the sqlite3_io_methods VFS object. These methods are typically implemented as "read()" and "write()" system calls which cause the operating system to copy disk content between the kernel buffer cache and user space.<p>> Beginning with version 3.7.17 (2013-05-20), SQLite has the option of accessing disk content directly using memory-mapped I/O and the new xFetch() and xUnfetch() methods on sqlite3_io_methods.<p>The principal advantage to mmap in my mind is that the cache is shared among your SQLite connections.</p>
]]></description><pubDate>Thu, 16 Apr 2026 14:14:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=47793289</link><dc:creator>wmanley</dc:creator><comments>https://news.ycombinator.com/item?id=47793289</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47793289</guid></item><item><title><![CDATA[New comment by wmanley in "Do you even need a database?"]]></title><description><![CDATA[
<p>Business logic tests will rarely test what happens to your data if a machine loses power.</p>
]]></description><pubDate>Wed, 15 Apr 2026 15:45:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=47780736</link><dc:creator>wmanley</dc:creator><comments>https://news.ycombinator.com/item?id=47780736</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47780736</guid></item><item><title><![CDATA[New comment by wmanley in "What does " 2>&1 " mean?"]]></title><description><![CDATA[
<p>It's a shame that unix tools don't support file descriptors better.  The ability to pass a file (or stream, or socket etc) directly into a process is so powerful, but few commands actually support being used this way and require filenames (or hostnames, etc) instead.  Shell is so limited in this regard too.<p>It would be great to be able to open a socket in bash[^1] and pass it to another program to read/write from without having an extra socat process and pipes running (and the buffering, odd flush behaviour, etc.).  It would be great if programs expected to receive input file arguments as open fds, rather than providing filenames and having the process open them itself.  Sandboxing would be trivial, as would understanding the inputs and outputs of any program.<p>It's frustrating to me because the underlying unix system supports this so well, it's just the conventions of userspace that get in the way.<p>[^1]: I know about /dev/tcp, but it's very limited.</p>
]]></description><pubDate>Fri, 27 Feb 2026 13:28:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=47180286</link><dc:creator>wmanley</dc:creator><comments>https://news.ycombinator.com/item?id=47180286</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47180286</guid></item><item><title><![CDATA[New comment by wmanley in "America vs. Singapore: You can't save your way out of economic shocks"]]></title><description><![CDATA[
<p>US borders are awful. I guess you get away with it because the USA is so large that most people rarely leave, so rarely have to experience it.</p>
]]></description><pubDate>Thu, 19 Feb 2026 23:56:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=47081605</link><dc:creator>wmanley</dc:creator><comments>https://news.ycombinator.com/item?id=47081605</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47081605</guid></item><item><title><![CDATA[New comment by wmanley in "The state of the kernel Rust experiment"]]></title><description><![CDATA[
<p>I guess that means you're using the colloquial meaning of the word safety/unsafe rather than the rust definition.  It's worth being explicit about that (or choosing a different word) in these discussions to prevent confusion.<p>For Rust safety (meaning no UB) most definitely is a property of the language.  If a module does not contain unsafe and the modules it uses that do contain unsafe are implemented soundly then there is no UB.<p>In C UB is a part of the language.</p>
]]></description><pubDate>Fri, 19 Dec 2025 13:16:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=46325476</link><dc:creator>wmanley</dc:creator><comments>https://news.ycombinator.com/item?id=46325476</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46325476</guid></item></channel></rss>