<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: sgarland</title><link>https://news.ycombinator.com/user?id=sgarland</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sun, 12 Apr 2026 07:49:18 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=sgarland" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by sgarland in "Keeping a Postgres Queue Healthy"]]></title><description><![CDATA[
<p>It sounds vaguely like InnoDB’s concurrency control solution which uses tokens [0] as a unit of maximum work a query can perform.<p>0: <a href="https://dev.mysql.com/doc/refman/8.4/en/innodb-performance-thread_concurrency.html" rel="nofollow">https://dev.mysql.com/doc/refman/8.4/en/innodb-performance-t...</a></p>
]]></description><pubDate>Sat, 11 Apr 2026 18:48:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=47733016</link><dc:creator>sgarland</dc:creator><comments>https://news.ycombinator.com/item?id=47733016</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47733016</guid></item><item><title><![CDATA[New comment by sgarland in "We moved Railway's frontend off Next.js. Builds went from 10+ mins to under 2"]]></title><description><![CDATA[
<p>I intermingled the two claims, you’re correct, and was not intending to move the goalpost. I apologize.<p>Claim one: setting up unattended-upgrades, SSH keygen, and automating cert rotation is trivial and easily automated.<p>Claim two: you should know how to manage a Linux server. Here are docs.<p><a href="https://tldp.org/" rel="nofollow">https://tldp.org/</a><p><a href="https://www.man7.org/linux/man-pages/dir_all_by_section.html" rel="nofollow">https://www.man7.org/linux/man-pages/dir_all_by_section.html</a><p><a href="https://nginx.org/en/docs/" rel="nofollow">https://nginx.org/en/docs/</a><p><a href="https://www.postgresql.org/docs/current/index.html" rel="nofollow">https://www.postgresql.org/docs/current/index.html</a></p>
]]></description><pubDate>Thu, 09 Apr 2026 15:48:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=47705248</link><dc:creator>sgarland</dc:creator><comments>https://news.ycombinator.com/item?id=47705248</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47705248</guid></item><item><title><![CDATA[New comment by sgarland in "We moved Railway's frontend off Next.js. Builds went from 10+ mins to under 2"]]></title><description><![CDATA[
<p>When AWS announces that they’re EOL’ing the Python or NodeJS version in your Lambda, or the version of your RDS cluster, etc. you also are required to take human action. And in fact, at any appreciable scale, you likely <i>want</i> that behavior, so you can control the date and time of the switch, because “zero downtime” is rarely zero downtime.</p>
]]></description><pubDate>Thu, 09 Apr 2026 15:41:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=47705166</link><dc:creator>sgarland</dc:creator><comments>https://news.ycombinator.com/item?id=47705166</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47705166</guid></item><item><title><![CDATA[New comment by sgarland in "We moved Railway's frontend off Next.js. Builds went from 10+ mins to under 2"]]></title><description><![CDATA[
<p>If an LTS of an OS replaced nginx with something else, a. it would be announced with great fanfare months in advance b. if you don’t want to do that, add apt / yum / zypper install nginx to your Ansible task, or whatever you’re using.</p>
]]></description><pubDate>Thu, 09 Apr 2026 02:03:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=47698526</link><dc:creator>sgarland</dc:creator><comments>https://news.ycombinator.com/item?id=47698526</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47698526</guid></item><item><title><![CDATA[New comment by sgarland in "We moved Railway's frontend off Next.js. Builds went from 10+ mins to under 2"]]></title><description><![CDATA[
<p>The parent I responded to was discussing issuing certs, configuring SSH keys, and updating an OS. Those are all in fact trivial and easily automated.<p>What you have stated requires more knowledge (especially Postgres). You’re not going to get it from a blog post, and will need to read actual source docs and man pages.</p>
]]></description><pubDate>Thu, 09 Apr 2026 02:01:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=47698505</link><dc:creator>sgarland</dc:creator><comments>https://news.ycombinator.com/item?id=47698505</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47698505</guid></item><item><title><![CDATA[New comment by sgarland in "We moved Railway's frontend off Next.js. Builds went from 10+ mins to under 2"]]></title><description><![CDATA[
<p>You don’t, you automate it. This has been a solved problem for literally years.</p>
]]></description><pubDate>Thu, 09 Apr 2026 00:12:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=47697785</link><dc:creator>sgarland</dc:creator><comments>https://news.ycombinator.com/item?id=47697785</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47697785</guid></item><item><title><![CDATA[New comment by sgarland in "We moved Railway's frontend off Next.js. Builds went from 10+ mins to under 2"]]></title><description><![CDATA[
<p>This is all trivial, and can and should be automated. Furthermore, all of your arguments can easily be applied to NodeJS version deprecations, React realizing they shipped a massive CVE, etc.<p>I will die on this hill: parent is correct - the ability to manage a Linux server should be a requirement to work in the industry, even if it has fuck-all to do with your job. It proves some basic level of competence and knowledge about the thing that is running your code.</p>
]]></description><pubDate>Thu, 09 Apr 2026 00:12:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=47697779</link><dc:creator>sgarland</dc:creator><comments>https://news.ycombinator.com/item?id=47697779</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47697779</guid></item><item><title><![CDATA[New comment by sgarland in "SQLite in Production: Lessons from Running a Store on a Single File"]]></title><description><![CDATA[
<p>> The sqlite_sequence table is the most underappreciated debugging tool in SQLite. It tracks the highest auto-increment value ever assigned for each table — even if that row was subsequently lost.
> WorkQueueTask.count returns ~300 (current rows). The sequence shows 3,700+ (every task ever created). If those numbers diverge unexpectedly, something deleted rows it shouldn't have.<p>Or it means that SQLite is exhibiting some of its "maybe I will, maybe I won't" behavior [0]:<p>> Note that "monotonically increasing" does not imply that the ROWID always increases by exactly one. One is the usual increment. However, if an insert fails due to (for example) a uniqueness constraint, the ROWID of the failed insertion attempt might not be reused on subsequent inserts, resulting in gaps in the ROWID sequence. AUTOINCREMENT guarantees that automatically chosen ROWIDs will be increasing but not that they will be sequential.<p>> No ILIKE. PostgreSQL developers reach for WHERE name ILIKE '%term%' instinctively. SQLite throws a syntax error. Use WHERE LOWER(name) LIKE '%term%' instead.<p>You should not be reaching for ILIKE, functions on predicates, or leading wildcards unless you're aware of the impacts those have on indexing.<p>> json_extract returns native types. json_extract(data, '$.id') returns an integer if the value was stored as a number. Comparing it to a string silently fails. Always CAST(json_extract(...) AS TEXT) when you need string comparison.<p>If you're using strings embedded in JSON as predicates, you're going to have a very bad time when you get more than a trivial number of rows in the table.<p>0: <a href="https://sqlite.org/autoinc.html" rel="nofollow">https://sqlite.org/autoinc.html</a></p>
]]></description><pubDate>Tue, 07 Apr 2026 20:16:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=47680806</link><dc:creator>sgarland</dc:creator><comments>https://news.ycombinator.com/item?id=47680806</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47680806</guid></item><item><title><![CDATA[New comment by sgarland in "The threat is comfortable drift toward not understanding what you're doing"]]></title><description><![CDATA[
<p>> Writing assembly is probably completely irrelevant.<p>ffmpeg disagrees.<p>More broadly, though, it’s a logical step if you want to go from “here’s how PN junctions work” to “let’s run code on a microprocessor.” There was a game up here yesterday about building a GPU, in the same vein of nand2tetris, Turing Complete, etc. I find those quite fun, and if you wanted to do something like Ben Eater’s 8-bit computer, it would probably make sense to continue with assembly before going into C, and then a higher-level language.</p>
]]></description><pubDate>Sun, 05 Apr 2026 15:45:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=47650567</link><dc:creator>sgarland</dc:creator><comments>https://news.ycombinator.com/item?id=47650567</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47650567</guid></item><item><title><![CDATA[New comment by sgarland in "The threat is comfortable drift toward not understanding what you're doing"]]></title><description><![CDATA[
<p>That’s definitely not how I learned it, nor how my kids have learned it. I vividly remember writing out “2 x 3 = 2 + 2 + 2 = 3 + 3.” I later memorized the multiplication table up to 12, yes, but that was not a replacement of understanding what multiplication was</p>
]]></description><pubDate>Sun, 05 Apr 2026 15:37:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=47650495</link><dc:creator>sgarland</dc:creator><comments>https://news.ycombinator.com/item?id=47650495</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47650495</guid></item><item><title><![CDATA[New comment by sgarland in "The threat is comfortable drift toward not understanding what you're doing"]]></title><description><![CDATA[
<p>Some things are just enjoyable. I get no real utility from photography - it’s not my career, it’s not a side gig, and I’m not giving prints out as gifts. Most of the shots never get printed at all. I do it because I enjoy the act itself, of knowing how to make an image frozen in time look a particular way by tweaking parameters on the camera, and then seeing the result. I furthermore enjoy the fact that I could achieve the same result on a dumb film camera, because I spent time learning the fundamentals.</p>
]]></description><pubDate>Sun, 05 Apr 2026 13:08:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=47649044</link><dc:creator>sgarland</dc:creator><comments>https://news.ycombinator.com/item?id=47649044</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47649044</guid></item><item><title><![CDATA[New comment by sgarland in "The threat is comfortable drift toward not understanding what you're doing"]]></title><description><![CDATA[
<p>I would love to see someone attempt to do multiplication who never learned addition, or exponentiation without having learned multiplication.<p>There is a vast difference between “never learned the skill,” and “forgot the skill from lack of use.” I learned how to do long division in school, decades ago. I sat down and tried it last year, and found myself struggling, because I hadn’t needed to do it in such a long time.</p>
]]></description><pubDate>Sun, 05 Apr 2026 13:02:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=47648988</link><dc:creator>sgarland</dc:creator><comments>https://news.ycombinator.com/item?id=47648988</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47648988</guid></item><item><title><![CDATA[New comment by sgarland in "Hold on to Your Hardware"]]></title><description><![CDATA[
<p>CPU performance was acceptable; GPU was the one was that falling off a cliff.<p>Re: particular unit, I’m not sure - it was perfectly fine during anything “normal,” and admittedly, asking a laptop to run at 100% for any extended period of time is already a big ask. But it’s possible, I suppose.<p>I’m waiting for the Studios to get the Max and / or Ultra, and will reconsider if I want one, or if I don’t really need to play with local LLM at this time.</p>
]]></description><pubDate>Sat, 28 Mar 2026 02:26:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=47550936</link><dc:creator>sgarland</dc:creator><comments>https://news.ycombinator.com/item?id=47550936</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47550936</guid></item><item><title><![CDATA[New comment by sgarland in "Hold on to Your Hardware"]]></title><description><![CDATA[
<p>Tangential, I bought a nearly identically-spec'd (didn't spring for the 8 TB SSD - in retrospect, had I kept it, I would've been OK with the 4 TB) model, and returned it yesterday due to thermal throttling. I have an M4 Pro w/ 48 GB RAM, and since the M5 Max was touted as being quite a bit faster for various local LLM usages, I decided I'd try it.<p>Turns out the heatsink in the 14" isn't nearly enough to handle the Max with all cores pegged. I'd get about 30 seconds of full power before frequency would drop like a rock.</p>
]]></description><pubDate>Fri, 27 Mar 2026 16:37:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=47544950</link><dc:creator>sgarland</dc:creator><comments>https://news.ycombinator.com/item?id=47544950</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47544950</guid></item><item><title><![CDATA[New comment by sgarland in "A Faster Alternative to Jq"]]></title><description><![CDATA[
<p>If you’re writing the script to be used by multiple people, or on multiple systems, or for CI runners, or in containers, etc. then there’s no guarantee of having Python (mostly for the container situation, but still), much less of its version. It’s far too easy to accidentally use a feature or syntax that you took for granted, because who would still be using 3.7 today, anyway? I say this from painful recent experience.<p>Plus, for any script that’s going to be fetching or posting anything over a network, the LLM will almost certainly want to include requests, so now you either have to deal with dependencies, or make it use urllib.<p>In contrast, there’s an extremely high likelihood of the environment having a POSIX-compatible interpreter, so as long as you don’t use bash-isms (or zsh-isms, etc.), the script will probably work. For network access, the odds of it having curl are also quite high, moreso (especially in containers) than Python.</p>
]]></description><pubDate>Fri, 27 Mar 2026 13:55:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=47542700</link><dc:creator>sgarland</dc:creator><comments>https://news.ycombinator.com/item?id=47542700</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47542700</guid></item><item><title><![CDATA[New comment by sgarland in "A Faster Alternative to Jq"]]></title><description><![CDATA[
<p>> often there's no real substitute for pulling a couple of terabytes locally and going to town on them.<p>Fully agree. I already know the locations of the logs on-disk, and ripgrep - or at worst, grep with LC_ALL=C - is much, much faster than any aggregation tool.<p>If I need to compare different machines, or do complex projections, then sure, external tooling is probably easier. But for the case of “I know roughly when a problem occurred / a text pattern to match,” reading the local file is faster.</p>
]]></description><pubDate>Fri, 27 Mar 2026 13:38:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=47542520</link><dc:creator>sgarland</dc:creator><comments>https://news.ycombinator.com/item?id=47542520</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47542520</guid></item><item><title><![CDATA[New comment by sgarland in "Bored of eating your own dogfood? Try smelling your own farts"]]></title><description><![CDATA[
<p>> Never mind that having 2000 support tickets is a bad thing. And also mostly caused by their shitty apps.<p>I’m constantly having to fight people to not add new, inactionable alerts as knee-jerk reactions to incidents. I swear the thought process is “an incident happened, we added a new alert - look, we’re proactive!” instead of, you know, fixing the root causes.</p>
]]></description><pubDate>Sun, 22 Mar 2026 15:05:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=47478283</link><dc:creator>sgarland</dc:creator><comments>https://news.ycombinator.com/item?id=47478283</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47478283</guid></item><item><title><![CDATA[New comment by sgarland in "Bored of eating your own dogfood? Try smelling your own farts"]]></title><description><![CDATA[
<p>Because if you’re in charge of an org, you should occasionally validate what you’re being told? Is this an uncommon belief or something?</p>
]]></description><pubDate>Sun, 22 Mar 2026 15:01:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=47478236</link><dc:creator>sgarland</dc:creator><comments>https://news.ycombinator.com/item?id=47478236</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47478236</guid></item><item><title><![CDATA[New comment by sgarland in "Bored of eating your own dogfood? Try smelling your own farts"]]></title><description><![CDATA[
<p>Yep. When I’m frustrated on the phone with a rep, I always make sure to say something like “I understand this isn’t your fault, but I’m very frustrated with X.”<p>It seems to ease the tension a bit, anyway.</p>
]]></description><pubDate>Sun, 22 Mar 2026 14:58:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=47478194</link><dc:creator>sgarland</dc:creator><comments>https://news.ycombinator.com/item?id=47478194</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47478194</guid></item><item><title><![CDATA[New comment by sgarland in "Bored of eating your own dogfood? Try smelling your own farts"]]></title><description><![CDATA[
<p>I legitimately don’t understand how companies get to this point, especially when the C-suite is full of founders (or maybe that’s worse?). I can understand how people want to make their bosses happy, and that can cascade into constant bullshitting, but at some point why doesn’t the CTO / CEO / etc. say “I’m going to go have conversations with the workers to get their perspective?”<p>The U.S. Nuclear Navy, for all of its many flaws, gets this right. Generally at least once a year, the head of Naval Reactors - a four-star Admiral - tours every vessel, which may include a brief underway period. During this tour, the Admiral will talk to the engine room watchstanders, with all senior leadership removed. They’ll ask how daily life is, what they find challenging or annoying, what they like, etc. There’s obviously a lot of self-filtering (though sometimes not - Navy Nukes are not known for their social graces) that occurs, and also what a junior watchstander finds annoying may just be a required part of the job, but some useful signal is gathered.<p>Even outside of the nuclear program, one standout example was Admiral Zumwalt, who as Chief of Naval Operations implemented 70 different changes over his tenure as a direct result of talking to sailors, all of which were designed to improve quality of life, efficiency, or communication.</p>
]]></description><pubDate>Sun, 22 Mar 2026 14:49:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=47478100</link><dc:creator>sgarland</dc:creator><comments>https://news.ycombinator.com/item?id=47478100</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47478100</guid></item></channel></rss>