<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: gwking</title><link>https://news.ycombinator.com/user?id=gwking</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sat, 13 Jun 2026 02:28:30 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=gwking" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by gwking in "SQLite is all you need for durable workflows"]]></title><description><![CDATA[
<p>The suitability of Litestream for production disaster recovery is also an open question in my mind. I used 0.3.x for several years and when I tried to upgrade to  the 0.5.x series there were runaway disk usage problems that would have caused downtime had they made it to prod. As far as I can tell these have not been entirely addressed, although recent bug reports suggest that they might be getting closer.<p>I want to love it, and I don't take open source projects like this for granted. But during my last production upgrade I chose to decommission Litestream in favor of a dumber, less granular solution using sqlite3_rsync and nightly backups because there is no point in using a backup system that is not rock solid.</p>
]]></description><pubDate>Fri, 29 May 2026 18:24:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=48327247</link><dc:creator>gwking</dc:creator><comments>https://news.ycombinator.com/item?id=48327247</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48327247</guid></item><item><title><![CDATA[New comment by gwking in "Profiling.sampling – Statistical Profiler"]]></title><description><![CDATA[
<p>The simple answer is, I choose to use Python because I am productive with it. I get a lot done compared to the other languages I have tried. Performance is almost never the limiting factor in my work, nor has it been for the vast majority of the work I've ever been witness to. When it is, it comes up in very particular circumstances, and can usually be fixed algorithmically. Indeed, that is the situation where I have used profilers.<p>The fact that the base language is an order of magnitude (or two!) slower has almost never mattered. If my work gets to the point where it does, and I have an excuse to go mess around with a rust extension or some cool optimized library, things are going very well.<p>I've been professional developer for over 20 years now, and I've read this forum obsessively for much of that time. I've seen people write things like, "Most engineers would kill for a 5% speedup" and I think, on what planet? Most engineers have much larger problems that cannot be so easily quantified. Come to think of it, I think that there is an allure to performance optimization due to the fact that it can be so easily quantified.</p>
]]></description><pubDate>Tue, 12 May 2026 15:37:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=48109870</link><dc:creator>gwking</dc:creator><comments>https://news.ycombinator.com/item?id=48109870</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48109870</guid></item><item><title><![CDATA[New comment by gwking in "Nucleus Nouns"]]></title><description><![CDATA[
<p>Interesting that "verb" does not appear in the posted article. I immediately thought of Yegge's kingdom of nouns blog post, which is 20 years old last month! I read it a long time ago and it made an impression on me.<p><a href="https://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html" rel="nofollow">https://steve-yegge.blogspot.com/2006/03/execution-in-kingdo...</a></p>
]]></description><pubDate>Wed, 15 Apr 2026 00:47:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=47773326</link><dc:creator>gwking</dc:creator><comments>https://news.ycombinator.com/item?id=47773326</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47773326</guid></item><item><title><![CDATA[New comment by gwking in "How much linear memory access is enough?"]]></title><description><![CDATA[
<p>I’ve casually experimented with this in python a number of times for various hot loops, including those where I’m passing the chunk between c routines. On Apple M1 I’ve never seen a case where chunks larger than 16k mattered. That’s the page size, so totally unsurprising.<p>Nevertheless it’s been a helpful rule of thumb to not overthink optimizations.</p>
]]></description><pubDate>Sat, 11 Apr 2026 20:06:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=47733548</link><dc:creator>gwking</dc:creator><comments>https://news.ycombinator.com/item?id=47733548</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47733548</guid></item><item><title><![CDATA[New comment by gwking in "Go hard on agents, not on your filesystem"]]></title><description><![CDATA[
<p>I tried this with Claude code on macOS. I created a new agent user and a wrapper do run Claude has that user, along with some scripts to set permissions and ownership so that I could run simple allow/deny commands. The only problem was that the fancy oauth flow broke. I filed an issue with Anthropic and their ticket bot auto closed it “for lack of interest” or whatever.<p>I fiddled with transferring the saved token from my keychain to the agent user keychain but it was not straightforward.<p>If someone knows how to get a subscription to Claude to work on another user via command line I’d love to know about it.</p>
]]></description><pubDate>Sat, 28 Mar 2026 14:41:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=47555036</link><dc:creator>gwking</dc:creator><comments>https://news.ycombinator.com/item?id=47555036</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47555036</guid></item><item><title><![CDATA[New comment by gwking in "Python 3.15's JIT is now back on track"]]></title><description><![CDATA[
<p>My understanding is that many extension modules are already written to take advantage of multithreading by releasing the GIL when calling into C code. This allows true concurrency in the extension, and also invites all the hazards of multithreading. I wonder how many bugs will be uncovered in such extensions by the free threaded builds, but it seems like the “nuts” choice actually happened a long time ago.</p>
]]></description><pubDate>Wed, 18 Mar 2026 02:12:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=47420863</link><dc:creator>gwking</dc:creator><comments>https://news.ycombinator.com/item?id=47420863</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47420863</guid></item><item><title><![CDATA[New comment by gwking in "Reverse-engineering Viktor and making it open source"]]></title><description><![CDATA[
<p>From one “old guy” to another:<p>PJ = private jet<p>Diamond hands and to the moon are crypto trader slang<p>Makes me laugh answering this question, because the meaning is all there if you skip over all the meme words.</p>
]]></description><pubDate>Tue, 17 Mar 2026 18:14:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=47416231</link><dc:creator>gwking</dc:creator><comments>https://news.ycombinator.com/item?id=47416231</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47416231</guid></item><item><title><![CDATA[New comment by gwking in "Sqldef: Idempotent schema management tool for MySQL, PostgreSQL, SQLite"]]></title><description><![CDATA[
<p>I wrote a very rudimentary schema and automatic migration system for SQLite. One problem that I ran into recently was deploying changes that spanned two migrations, because the tool doesn’t know how to step through commits to do successive auto-migrations between schema versions. I guess there are rather obvious ways to handle this if you generate and then commit the full migration sql for each schema change. Nonetheless I’m curious if this is a problem you have had to think about, if you find it interesting or if it sounds like a bad path to go down, and if atlas does anything smart in this department. Thanks in advance!</p>
]]></description><pubDate>Thu, 05 Feb 2026 05:03:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=46895871</link><dc:creator>gwking</dc:creator><comments>https://news.ycombinator.com/item?id=46895871</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46895871</guid></item><item><title><![CDATA[New comment by gwking in "Xcode 26.3 – Developers can leverage coding agents directly in Xcode"]]></title><description><![CDATA[
<p>For the record, I started using Xcode before it was called that and people have said this almost every year since. As I recall there was a big hit to its quality when they converted it to obj-c’s short lived garbage collection, and it felt like it never got back to reliable after that.</p>
]]></description><pubDate>Tue, 03 Feb 2026 18:56:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=46875507</link><dc:creator>gwking</dc:creator><comments>https://news.ycombinator.com/item?id=46875507</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46875507</guid></item><item><title><![CDATA[New comment by gwking in "Is the RAM shortage killing small VPS hosts?"]]></title><description><![CDATA[
<p>Speaking for myself, managing a team of 3, the simpler management interface on Hetzner compared to AWS is a major professional advantage.</p>
]]></description><pubDate>Fri, 30 Jan 2026 00:12:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=46818862</link><dc:creator>gwking</dc:creator><comments>https://news.ycombinator.com/item?id=46818862</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46818862</guid></item><item><title><![CDATA[New comment by gwking in "Git Rebase for the Terrified"]]></title><description><![CDATA[
<p>This may be outdated because git’s defaults have improved a lot over the years. When I first used git on a team was in 2011. As I recall, there were various commands like git log -p that would show nothing for a merge commit. So without extra knowledge of the git flags you would not find what you were looking for if it was in a side path of the merge history. This caused a lot of confusion at times. We switched to a rebase approach because linear history is easier for people to use.<p>To answer your question directly, if somewhat glibly, I’m glad I rebased every time I go looking for something in the history because I don’t have to think about the history as a graph. It’s easier.<p>More to your point, there are times when blame on a line does not show the culprit. If you move code, or do anything else to that line, then you have to keep searching. Sometimes it’s easier to look at the entire patch history of a file. If there is a way to repeatedly/recursively blame on a line, that’s cool and I’d love to know about it.<p>I now manage two junior engineers and I insist that they squash and rebase their work. I’ve seen what happens if they don’t. The merges get tangled and crazy, they include stuff from other branches they didn’t mean to, etc. the squash/rebase flow has been a way to make them responsible for what they put into the history, in a way that is simple enough that they got up to speed and own it.</p>
]]></description><pubDate>Tue, 13 Jan 2026 17:00:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=46603798</link><dc:creator>gwking</dc:creator><comments>https://news.ycombinator.com/item?id=46603798</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46603798</guid></item><item><title><![CDATA[New comment by gwking in "I ported JustHTML from Python to JavaScript with Codex CLI and GPT-5.2 in hours"]]></title><description><![CDATA[
<p>I’ve idly wondered about this sort of thing quite a bit. The next step would seem to be taking a project’s implementation dependent tests, converting them to an independent format and verifying them against the original project, then conducting the port.</p>
]]></description><pubDate>Wed, 17 Dec 2025 01:10:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=46296999</link><dc:creator>gwking</dc:creator><comments>https://news.ycombinator.com/item?id=46296999</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46296999</guid></item><item><title><![CDATA[New comment by gwking in "Announcing the Beta release of ty"]]></title><description><![CDATA[
<p>I appreciate the even tempered question. I’ve been using mypy since its early days, and when pyright was added to vs code I was forced to reckon with their differences. For the most part I found mypy was able to infer more accurately and flexibly. At various times I had to turn pyright off entirely because of false positives. But perhaps someone else would say that I’m leaning on weaknesses of mypy; I think I’m pretty strict but who knows. And like yourself, mine is a rather dated opinion. It used to be that every mypy release was an event, where I’d have a bunch of new errors to fix, but that lessened over the years.<p>I suspect pyright has caught up a lot but I turned it off again rather recently.<p>For what it’s worth I did give up on cursor mostly because basedpyright was very counterproductive for me.<p>I will say that I’ve seen a lot more vehement trash talking about mypy and gushing about pyright than vice versa for quite a few years. It doesn’t quite add up in my mind.</p>
]]></description><pubDate>Wed, 17 Dec 2025 00:30:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=46296714</link><dc:creator>gwking</dc:creator><comments>https://news.ycombinator.com/item?id=46296714</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46296714</guid></item><item><title><![CDATA[New comment by gwking in "Claude CLI deleted my home directory and wiped my Mac"]]></title><description><![CDATA[
<p>I jumped through a bunch of hoops to get claude code to run as a dedicated user on macOS. This allowed me to set the group ownership and permissions of my work to control exactly what claude can see. With a few one-liner bash scripts to recursively set permissions it worked quite well. Getting the oauth token token into that user's keychain was an utter pain though. Claude Code does a fancy authorization flow that puts the token into the current user's login keychain, and getting it into the other user's login keychain took a lot of futzing. Maybe there is a cleaner way that I missed.<p>When that token expired I didn't have the patience to go through it again. Using an API key looked like it would be easier.<p>If this is of interest to anyone else, I filed an issue that has so far gone unacknowledged. Their ticket bot tried to auto-close it after 30 days which I find obnoxious. <a href="https://github.com/anthropics/claude-code/issues/9102#issuecomment-3626111787" rel="nofollow">https://github.com/anthropics/claude-code/issues/9102#issuec...</a></p>
]]></description><pubDate>Mon, 15 Dec 2025 03:53:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=46270270</link><dc:creator>gwking</dc:creator><comments>https://news.ycombinator.com/item?id=46270270</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46270270</guid></item><item><title><![CDATA[New comment by gwking in "Ask HN: My family business runs on a 1993-era text-based-UI (TUI). Anybody else?"]]></title><description><![CDATA[
<p>My first programming "job" was a sort of summer internship when I was 14 for a family owned company called Signature Systems (signature.net). They are still in business. Their product is an operating system called Comet, that if I'm not mistaken was originally a compatibility play bringing software from the previous era of 16 bit microcomputers onto DOS PCs, and then later into Windows. I may be misremembering some of the details but I think at one point a Comet system ran ticket sales at Madison Square Gardens. My summer project was to build a demo using their new support for Windows GUI elements. The last time I spoke with the owners, they told me that they still had customers, including in the textiles industry where loom patterns had been coded in Basic. I often think about it as an example of a legacy system, and smile at the idea of someone thinking they need to rewrite their plaid weave in TypeScript or Rust.<p>Separately, I have spent the last three years building a web app that replaced a heap of automation scripts for a ~50 person business. These were much more modern than what the OP describes but it had some of the same qualities. The scripts mostly generated google sheets and emails. The replacement is a python web app using SQLite. Moving the company data into a proper database has been a very significant step for them. In some ways, the project feels a lot like custom business software that got built in the 90s.</p>
]]></description><pubDate>Thu, 06 Nov 2025 00:00:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=45829742</link><dc:creator>gwking</dc:creator><comments>https://news.ycombinator.com/item?id=45829742</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45829742</guid></item><item><title><![CDATA[New comment by gwking in "SQLite concurrency and why you should care about it"]]></title><description><![CDATA[
<p>One tidbit that I don't see mentioned here yet is that ATTACH requires a lock. I just went looking for the documentation about this and couldn't find it, especially for WAL mode (<a href="https://www.sqlite.org/lockingv3.html" rel="nofollow">https://www.sqlite.org/lockingv3.html</a> mentions the super-journal, but the WAL docs do not mention ATTACH at all).<p>I have a python web app that creates a DB connection per request (not ideal I know) and immediately attaches 3 auxiliary DBs. This is a low traffic site but we have a serious reliability problem when load increases: the ATTACH calls occasionally fail with "database is locked". I don't know if this is because the ATTACH fails immediately without respecting the normal 5 second database timeout or what. To be honest I haven't implemented connection pooling yet because I want to understand what exactly causes this problem.</p>
]]></description><pubDate>Sat, 01 Nov 2025 22:35:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=45786047</link><dc:creator>gwking</dc:creator><comments>https://news.ycombinator.com/item?id=45786047</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45786047</guid></item><item><title><![CDATA[New comment by gwking in "Migrating from AWS to Hetzner"]]></title><description><![CDATA[
<p>The servers are always beefy and the software is always blazingly fast. Blazingly beefy is my new joke trademark.</p>
]]></description><pubDate>Fri, 17 Oct 2025 18:38:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=45620323</link><dc:creator>gwking</dc:creator><comments>https://news.ycombinator.com/item?id=45620323</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45620323</guid></item><item><title><![CDATA[New comment by gwking in "VOC injection into a house reveals large surface reservoir sizes"]]></title><description><![CDATA[
<p>I have never seen the word “partition” used in this way before. Hard to search for examples because unrelated computer graphics articles about surface partitioning dominate. I did find this:<p>Partitioning is the distribution of a solute, S, between two immiscible solvents (such as aqueous and organic phases). It is an equilibrium condition that is described by the following equation:<p>S(aq) ⇄ S(org)<p>Interesting to think that a surface can play a role comparable to a solvent. I wonder what a chemist would have to say about it.<p><a href="https://www.chemicool.com/definition/partitioning.html" rel="nofollow">https://www.chemicool.com/definition/partitioning.html</a></p>
]]></description><pubDate>Thu, 16 Oct 2025 14:11:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=45605576</link><dc:creator>gwking</dc:creator><comments>https://news.ycombinator.com/item?id=45605576</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45605576</guid></item><item><title><![CDATA[New comment by gwking in "Python 3.14 is here. How fast is it?"]]></title><description><![CDATA[
<p>Speaking only for myself, and in all sincerity: every year, there is some feature of the latest CPython version that makes a bigger difference to my work than faster execution would. This year I am looking forward to template strings, zstd, and deferred evaluation of annotations.</p>
]]></description><pubDate>Thu, 09 Oct 2025 18:59:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=45531676</link><dc:creator>gwking</dc:creator><comments>https://news.ycombinator.com/item?id=45531676</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45531676</guid></item><item><title><![CDATA[New comment by gwking in "Litestar is worth a look"]]></title><description><![CDATA[
<p>I’ll second this, and add that docstrings are becoming ever more useful as modern editors learn how to show them inline when I hover over a symbol. Starlette lacks docstrings entirely and it’s a real miss in my opinion.</p>
]]></description><pubDate>Thu, 07 Aug 2025 14:45:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=44825169</link><dc:creator>gwking</dc:creator><comments>https://news.ycombinator.com/item?id=44825169</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44825169</guid></item></channel></rss>