<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: alecthomas</title><link>https://news.ycombinator.com/user?id=alecthomas</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Tue, 14 Apr 2026 09:49:13 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=alecthomas" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by alecthomas in "Instant 1.0, a backend for AI-coded apps"]]></title><description><![CDATA[
<p>From skimming the linked PR it looks like it's all been open source, but has been tightly coupled to their deployed instance. The PR appears to be decoupling things completely by making all hard coded values configurable.</p>
]]></description><pubDate>Sat, 11 Apr 2026 20:18:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=47733654</link><dc:creator>alecthomas</dc:creator><comments>https://news.ycombinator.com/item?id=47733654</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47733654</guid></item><item><title><![CDATA[New comment by alecthomas in "Google releases Gemma 4 open models"]]></title><description><![CDATA[
<p>Oh this page is great! I just released AIM [1] which is a tool that generates verified SQL migrations using LLMs, and I tested a bunch of models manually. I think I'll just link to your page too!<p>[1] <a href="https://github.com/alecthomas/aim" rel="nofollow">https://github.com/alecthomas/aim</a></p>
]]></description><pubDate>Fri, 03 Apr 2026 07:42:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=47624145</link><dc:creator>alecthomas</dc:creator><comments>https://news.ycombinator.com/item?id=47624145</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47624145</guid></item><item><title><![CDATA[Show HN: Procfile-compatible tool with hot reload, readiness, dependencies, etc.]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/alecthomas/proctor">https://github.com/alecthomas/proctor</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47622661">https://news.ycombinator.com/item?id=47622661</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 03 Apr 2026 02:38:31 +0000</pubDate><link>https://github.com/alecthomas/proctor</link><dc:creator>alecthomas</dc:creator><comments>https://news.ycombinator.com/item?id=47622661</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47622661</guid></item><item><title><![CDATA[Show HN: Aim – AI-assisted verifiable SQL migration generator]]></title><description><![CDATA[
<p>This is pretty fresh and definitely not battle tested, but seems to work pretty well in my local testing. Do NOT just blindly apply the output of this to a production database :)<p>From the README:<p>AIM creates two ephemeral databases: one by loading schema.sql (the desired state), and one by replaying all existing migrations (the current state). It dumps a stable, normalized DDL representation from each.<p>An LLM reads both schemas and produces UP and DOWN SQL migration statements.<p>AIM applies the generated UP migration to a fresh ephemeral database and checks that the result exactly matches schema.sql. It then applies DOWN and checks that the original state is restored. If either check fails, AIM feeds the diff back to the LLM and retries.</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47598556">https://news.ycombinator.com/item?id=47598556</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 01 Apr 2026 09:08:47 +0000</pubDate><link>https://github.com/alecthomas/aim</link><dc:creator>alecthomas</dc:creator><comments>https://news.ycombinator.com/item?id=47598556</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47598556</guid></item><item><title><![CDATA[New comment by alecthomas in "//go:fix inline and the source-level inliner"]]></title><description><![CDATA[
<p>Someone else said this below...<p>> Go designers distinguish between Go language as defined by Go spec and implementation details.
> //go:fix is something understood by a particular implementation of Go. Another implementation could implement Go without implementing support for //go:fix and it would be a fully compliant implementation of Go, the language.
> 
> If they made it part of the syntax, that would require other implementations to implement it.<p>...I'm not sure I buy that argument TBH.</p>
]]></description><pubDate>Mon, 16 Mar 2026 04:25:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=47395222</link><dc:creator>alecthomas</dc:creator><comments>https://news.ycombinator.com/item?id=47395222</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47395222</guid></item><item><title><![CDATA[New comment by alecthomas in "//go:fix inline and the source-level inliner"]]></title><description><![CDATA[
<p>These are called directives [1], and are treated as metadata by the compiler.<p>[1] <a href="https://pkg.go.dev/go/ast#Directive" rel="nofollow">https://pkg.go.dev/go/ast#Directive</a></p>
]]></description><pubDate>Mon, 16 Mar 2026 04:17:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=47395184</link><dc:creator>alecthomas</dc:creator><comments>https://news.ycombinator.com/item?id=47395184</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47395184</guid></item><item><title><![CDATA[New comment by alecthomas in "Finland detains ship and its crew after critical undersea cable damaged"]]></title><description><![CDATA[
<p>That is...disturbing.</p>
]]></description><pubDate>Thu, 01 Jan 2026 21:40:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=46458335</link><dc:creator>alecthomas</dc:creator><comments>https://news.ycombinator.com/item?id=46458335</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46458335</guid></item><item><title><![CDATA[New comment by alecthomas in "Irrlicht Engine – a cross-platform realtime 3D engine"]]></title><description><![CDATA[
<p><a href="https://hazelengine.com/" rel="nofollow">https://hazelengine.com/</a> is another</p>
]]></description><pubDate>Mon, 15 Sep 2025 09:54:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=45247938</link><dc:creator>alecthomas</dc:creator><comments>https://news.ycombinator.com/item?id=45247938</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45247938</guid></item><item><title><![CDATA[New comment by alecthomas in "From M1 MacBook to Arch Linux: A month-long experiment that became permanenent"]]></title><description><![CDATA[
<p>Which $600 model has an OLED screen?</p>
]]></description><pubDate>Sat, 23 Aug 2025 10:07:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=44994799</link><dc:creator>alecthomas</dc:creator><comments>https://news.ycombinator.com/item?id=44994799</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44994799</guid></item><item><title><![CDATA[New comment by alecthomas in "Lottie is an open format for animated vector graphics"]]></title><description><![CDATA[
<p>Why is GIF worse (I'm not a frontend developer, so I'm genuinely curious)?</p>
]]></description><pubDate>Mon, 26 May 2025 11:29:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=44096354</link><dc:creator>alecthomas</dc:creator><comments>https://news.ycombinator.com/item?id=44096354</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44096354</guid></item><item><title><![CDATA[New comment by alecthomas in "'I found your dad': The mystery of a missing climber"]]></title><description><![CDATA[
<p>They were not. The daughter is 31 and her father went missing 22 years earlier.</p>
]]></description><pubDate>Sun, 04 May 2025 00:32:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=43883515</link><dc:creator>alecthomas</dc:creator><comments>https://news.ycombinator.com/item?id=43883515</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43883515</guid></item><item><title><![CDATA[NPR, PBS Headlines in to End Taxpayer Subsidization of Public Broadcasting [video]]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.youtube.com/watch?v=LNrTflYOZpo">https://www.youtube.com/watch?v=LNrTflYOZpo</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43143416">https://news.ycombinator.com/item?id=43143416</a></p>
<p>Points: 4</p>
<p># Comments: 0</p>
]]></description><pubDate>Sat, 22 Feb 2025 21:26:19 +0000</pubDate><link>https://www.youtube.com/watch?v=LNrTflYOZpo</link><dc:creator>alecthomas</dc:creator><comments>https://news.ycombinator.com/item?id=43143416</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43143416</guid></item><item><title><![CDATA[New comment by alecthomas in "Ghostty 1.0"]]></title><description><![CDATA[
<p>Preach!</p>
]]></description><pubDate>Fri, 27 Dec 2024 00:23:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=42518956</link><dc:creator>alecthomas</dc:creator><comments>https://news.ycombinator.com/item?id=42518956</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42518956</guid></item><item><title><![CDATA[New comment by alecthomas in "New Google Sheet on half of 13.6" MacBook Air screen is fully covered by popups"]]></title><description><![CDATA[
<p>Peak enshittification.</p>
]]></description><pubDate>Mon, 23 Dec 2024 05:39:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=42492089</link><dc:creator>alecthomas</dc:creator><comments>https://news.ycombinator.com/item?id=42492089</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42492089</guid></item><item><title><![CDATA[New comment by alecthomas in "Go Protobuf: The New Opaque API"]]></title><description><![CDATA[
<p>This is probably what you want: <a href="https://github.com/planetscale/vtprotobuf">https://github.com/planetscale/vtprotobuf</a></p>
]]></description><pubDate>Tue, 17 Dec 2024 11:43:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=42440571</link><dc:creator>alecthomas</dc:creator><comments>https://news.ycombinator.com/item?id=42440571</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42440571</guid></item><item><title><![CDATA[Show HN: "mk" – one-liner make rules on the command-line]]></title><description><![CDATA[
<p><a href="https://github.com/alecthomas/mk">https://github.com/alecthomas/mk</a><p>Very handy in conjunction with Just to give you make-like functionality, eg.<p><pre><code>  build-protos:
    @mk protos/myproto.pb.go protos/myproto.tsx : protos/myproto.proto -- protoc --gen_go=protos --gen_tsx=protos protos/myproto.proto

</code></pre>
PS. My one and only Rust project, so expect some odd code.</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=42353267">https://news.ycombinator.com/item?id=42353267</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Sat, 07 Dec 2024 22:12:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=42353267</link><dc:creator>alecthomas</dc:creator><comments>https://news.ycombinator.com/item?id=42353267</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42353267</guid></item><item><title><![CDATA[New comment by alecthomas in "gRPC: The Ugly Parts"]]></title><description><![CDATA[
<p>Connect [1] is one and it's fantastic. The Go implementation in particular is much nicer than grpc-go.<p>[1] <a href="https://connectrpc.com/" rel="nofollow">https://connectrpc.com/</a></p>
]]></description><pubDate>Sat, 07 Sep 2024 23:23:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=41477068</link><dc:creator>alecthomas</dc:creator><comments>https://news.ycombinator.com/item?id=41477068</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41477068</guid></item><item><title><![CDATA[New comment by alecthomas in "Full text search over Postgres: Elasticsearch vs. alternatives"]]></title><description><![CDATA[
<p>And that's why we pay AWS the big bucks.</p>
]]></description><pubDate>Fri, 09 Aug 2024 03:05:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=41198481</link><dc:creator>alecthomas</dc:creator><comments>https://news.ycombinator.com/item?id=41198481</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41198481</guid></item><item><title><![CDATA[New comment by alecthomas in "Did GitHub Copilot increase my productivity?"]]></title><description><![CDATA[
<p>This was an illuminating comment because I think I finally understand why people have wildly varying experiences with CoPilot.<p>I think if you regularly use CoPilot to write entire functions or use its prompt mode, you will spend more time verifying its output is accurate than it would save writing the code manually. If instead, you use it iteratively via autocomplete to write small fragments of code, a line or two at a time, its trivial to verify its correctness, and it will save you a good 20-30 seconds at a time, adding up to large savings over time.<p>I exclusively do the latter, so I find it incredibly useful. The few times I've tried using the prompt mode, or comment-driven code generation, it's been very average or awful.</p>
]]></description><pubDate>Mon, 13 May 2024 08:59:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=40341124</link><dc:creator>alecthomas</dc:creator><comments>https://news.ycombinator.com/item?id=40341124</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40341124</guid></item><item><title><![CDATA[New comment by alecthomas in "Secure Randomness in Go 1.22"]]></title><description><![CDATA[
<p>For those unaware, gosec (and by extension golangci-lint) will warn about uses of `math/rand`<p><a href="https://github.com/securego/gosec/blob/d3b2359ae29fe344f4df5bf3a8c6491fb7c46c02/rules/rand.go#L44">https://github.com/securego/gosec/blob/d3b2359ae29fe344f4df5...</a></p>
]]></description><pubDate>Tue, 07 May 2024 10:30:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=40284033</link><dc:creator>alecthomas</dc:creator><comments>https://news.ycombinator.com/item?id=40284033</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40284033</guid></item></channel></rss>