<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: steinuil</title><link>https://news.ycombinator.com/user?id=steinuil</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 04 Jun 2026 12:08:13 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=steinuil" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[Building small Docker images faster]]></title><description><![CDATA[
<p>Article URL: <a href="https://sgt.hootr.club/blog/docker-protips/">https://sgt.hootr.club/blog/docker-protips/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46242700">https://news.ycombinator.com/item?id=46242700</a></p>
<p>Points: 73</p>
<p># Comments: 27</p>
]]></description><pubDate>Fri, 12 Dec 2025 10:23:23 +0000</pubDate><link>https://sgt.hootr.club/blog/docker-protips/</link><dc:creator>steinuil</dc:creator><comments>https://news.ycombinator.com/item?id=46242700</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46242700</guid></item><item><title><![CDATA[New comment by steinuil in "Hacking on the ReMarkable 2"]]></title><description><![CDATA[
<p>Glad you enjoyed it :)<p>I have taken a (short) look at KOReader and saw that there's an instructions page on its wiki on how to install it on the rM2; it still uses rm2fb but it suggests using timower's version, which works on newer versions of the OS. What I should've made more clear in the post was that there <i>are</i> options, they're just less convenient to use because Toltec doesn't work.</p>
]]></description><pubDate>Mon, 01 Dec 2025 16:59:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=46109775</link><dc:creator>steinuil</dc:creator><comments>https://news.ycombinator.com/item?id=46109775</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46109775</guid></item><item><title><![CDATA[New comment by steinuil in "Leatherman (vagabond)"]]></title><description><![CDATA[
<p>Hey buddy I think you got the wrong door, the rock shelter's two blocks down.</p>
]]></description><pubDate>Fri, 19 Sep 2025 19:44:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=45305656</link><dc:creator>steinuil</dc:creator><comments>https://news.ycombinator.com/item?id=45305656</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45305656</guid></item><item><title><![CDATA[New comment by steinuil in "The Bluesky Dictionary"]]></title><description><![CDATA[
<p>Bluesky lets you select the language your post is written in before posting it and it is attached as metadata to the skeet. I guess the backend for this only searches posts in English, but it's possible the dataset is not 100% accurate due to some users forgetting to switch language before posting.</p>
]]></description><pubDate>Thu, 07 Aug 2025 09:21:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=44822341</link><dc:creator>steinuil</dc:creator><comments>https://news.ycombinator.com/item?id=44822341</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44822341</guid></item><item><title><![CDATA[New comment by steinuil in "You know more Finnish than you think"]]></title><description><![CDATA[
<p>Portuguese too. Most words related to christianity (and a few others too, like カボチャ or ボタン) were introduced in the 15th century by portuguese jesuits.<p><a href="https://en.m.wikipedia.org/wiki/List_of_Japanese_words_of_Portuguese_origin" rel="nofollow">https://en.m.wikipedia.org/wiki/List_of_Japanese_words_of_Po...</a></p>
]]></description><pubDate>Thu, 07 Aug 2025 06:20:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=44821222</link><dc:creator>steinuil</dc:creator><comments>https://news.ycombinator.com/item?id=44821222</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44821222</guid></item><item><title><![CDATA[New comment by steinuil in "Replit goes rogue and deletes our entire database"]]></title><description><![CDATA[
<p>Later the AI claims it can't run unit tests without overwriting the production database. This whole thread is hilarious.<p><a href="https://x.com/jasonlk/status/1946641193644798118" rel="nofollow">https://x.com/jasonlk/status/1946641193644798118</a></p>
]]></description><pubDate>Sun, 20 Jul 2025 08:13:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=44622975</link><dc:creator>steinuil</dc:creator><comments>https://news.ycombinator.com/item?id=44622975</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44622975</guid></item><item><title><![CDATA[New comment by steinuil in "Advanced Python Features"]]></title><description><![CDATA[
<p>Turns out I managed to use almost all of these during a refactor of a project at work, even metaclasses... (Metaclass usage is justified in my case: we have a sort of language evaluator and using a metaclass lets us define function arguments with their types and validators in a very coincise and obvious way similar to Pydantic.)<p>I think this list should also include descriptors[0]: it's another metaprogramming feature that allows running code when accessing or setting class attributes similar to @property but more powerful. (edit: nvm, I saw that they are covered in the proxy properties section!)<p>I think the type system is quite good actually, even if you end up having to sidestep it when doing this kind of meta-programming. The errors I do get are generally the library's fault (old versions of SQLAlchemy make it impossible to assign types anywhere...) and there's a few gotchas (like mutable collections being invariant, so if you take a list as an argument you may have to type it as `Sequence[]` or you'll get type errors) but it's functional and makes the language usable for me.<p>I stopped using Ruby because upstream would not commit on type checking (yes I know you have a few choices if you want typing, but they're a bit too much overhead for what I usually use Ruby for, which is writing scripts), and I'm glad Python is committing here.<p>[0]: <a href="https://docs.python.org/3/howto/descriptor.html" rel="nofollow">https://docs.python.org/3/howto/descriptor.html</a></p>
]]></description><pubDate>Wed, 23 Apr 2025 11:44:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=43770969</link><dc:creator>steinuil</dc:creator><comments>https://news.ycombinator.com/item?id=43770969</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43770969</guid></item><item><title><![CDATA[New comment by steinuil in "Hacktical C: practical hacker's guide to the C programming language"]]></title><description><![CDATA[
<p>Some points about the introduction, but otherwise this seems like an interesting collection of (slightly deranged?) patterns in C.<p><i>> The truth is that any reasonably complicated software system created by humans will have bugs, regardless of what technology was used to create it.</i><p>"Drivers wearing seatbelts still die in car accidents and in some cases seatbelts prevent drivers from getting out of the wreckage so we're better off without them." This is cope.<p><i>> Using a stricter language helps with reducing some classes of bugs, at the cost of reduced flexibility in expressing a solution and increased effort creating the software.</i><p>...and a much smaller effort debugging the software. A logic error is much easier to reason about than memory corruption or race condition on shared memory. The time you spend designing your system and handling the errors upfront pays dividends later when you get the inevitable errors.<p>I'm not saying that all software should be rewritten in memory-safe languages, but I'd rather those who choose to use the only language where this kind of errors regularly happens be honest about it.</p>
]]></description><pubDate>Mon, 14 Apr 2025 13:53:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=43681303</link><dc:creator>steinuil</dc:creator><comments>https://news.ycombinator.com/item?id=43681303</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43681303</guid></item><item><title><![CDATA[New comment by steinuil in "Video encoding requires using your eyes"]]></title><description><![CDATA[
<p>I spent a good while looking at the image on my phone trying to spot what the author was talking about, but ironically the comparison image itself is compressed (not using a NN ;) ) and that obscures the artifacts you're supposed to be looking at.<p>If you're looking for examples of ringing and hallucinated details, they're really obvious in the framed picture on the right on respectively the character's shirt and the frame.</p>
]]></description><pubDate>Sun, 02 Mar 2025 00:38:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=43225825</link><dc:creator>steinuil</dc:creator><comments>https://news.ycombinator.com/item?id=43225825</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43225825</guid></item><item><title><![CDATA[New comment by steinuil in "jj: a Git-compatible VCS that is both simple and powerful"]]></title><description><![CDATA[
<p>Sounds like you'd enjoy using JJ! It looks to me that you have this workflow to work around git's poor tooling for manipulating local commits before pushing. JJ makes that very easy!<p>Forgot to add something to a previous commit? Run "jj squash -i" to move the lines you select to whatever commit you want. Or you can run "jj edit" to check out that commit and edit it directly.<p>Want to split a commit into two separate commits? Run "jj split".<p>Need to reorder commits? Run "jj rebase", and if you have a conflict you can "jj edit" the commits that are marked as conflicted to fix it later, unlike Git where you have to run through a lengthy process of fixing conflicts on commits you don't remember and then review the changes later to see whether they still make sense.<p>If you want to have a messy working copy of your repo that's very easy to do. The workflow would mostly involve:<p>- Develop the feature<p>- "jj split" to pick out the stuff you need into a separate commit, which will appear between master and the working copy commit<p>- "jj describe" to add a commit message<p>- "jj bookmark set feature-branch" on the commit containing the stuff you want to push<p>- "jj git push" to push it<p>- "jj edit" to return to the commit containing the working copy.<p>You'd end up with a tree that looks kind of like this:<p><pre><code>    @  ptswumyk 2025-02-12 13:16:36 de46f8c1
    │  messy working copy
    ○  slwozrlr 2025-02-12 13:16:22 feature-branch@origin d3d246a1
    │  feature implementation
    ◆  tssssuzr 2025-02-12 12:34:28 master* 8a9bab0f
    │  generate flake registry from inputs
    ~
</code></pre>
So it's not that I really need more features to git, just a better UX, which is what JJ provides.</p>
]]></description><pubDate>Wed, 12 Feb 2025 12:18:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=43024592</link><dc:creator>steinuil</dc:creator><comments>https://news.ycombinator.com/item?id=43024592</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43024592</guid></item><item><title><![CDATA[New comment by steinuil in "jj: a Git-compatible VCS that is both simple and powerful"]]></title><description><![CDATA[
<p>> but to have a good GitHub alternative.<p>JJ doesn't currently have a "native" repository format (or rather, it's in development and not ready for general usage), so right now a JJ forge wouldn't look too different from your usual Git forges.<p>Everybody who's using it right now uses it on Git repos on Git forges. I've been using it for months on my own and at work and I didn't make any changes to the infrastructure outside of my own command line usage.<p>It would be interesting to see what a JJ-native forge would even look like in the future, but I don't think anybody knows exactly what that would be right now! JJ is in development (but stable enough to work with) and people have only just started using it, so it's still in the phase of discovering what workflows are possible.<p>> Plus a good IDE support.<p>Now that's something I would love to see. Git tooling works mostly fine but due to how JJ's git backend works, it always thinks it's in a "detached HEAD" state.</p>
]]></description><pubDate>Wed, 12 Feb 2025 11:55:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=43024444</link><dc:creator>steinuil</dc:creator><comments>https://news.ycombinator.com/item?id=43024444</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43024444</guid></item><item><title><![CDATA[New comment by steinuil in "Sixos: A nix OS without systemd [video]"]]></title><description><![CDATA[
<p>The usual arguments against systemd border on religious drivel. I've seen the talk and while I very much value the work that the speaker has done I did not appreciate that the reasons for doing this are the usual vitriolic cat-v talking points.<p>systemd is <i>very</i> good because it makes many things that the Linux kernel can do very easy. I would like to know how the people who swear against it implement features that I regularly use in systemd like socket/mount/dbus activation, services that dynamically create a user and group on activation and keep their service and temp directories private from other services, syscall filtering, user session services that start when I log into a graphical session (very useful when you have issues with your system tray's config, for example), network mounts that get mounted asynchronously only when you're using them, actual service management and restarting a service when it fails and service dependencies (which some init systems still don't do!), and so on and so forth...<p>Yes you could do all of these things by composing other programs, but there is lots of value in having them all bundled together and only having to consult one resource for documentation on them, and the fact that these are all designed to work together reduces the friction that you would get by composing other "general-purpose" tools.<p>On the other hand, systemd is bad because the implementation is messy, when it does fail it tends to do so in odd and obscure ways, it comes bundled with <i>tons</i> of components that most people won't need, and yes the fact that it's essentially the only option you're given and that it's not portable to BSDs is not very nice.<p>I would encourage people to read dinit's comparison page and Chimera Linux's FAQ section on systemd for good arguments that are not fueled by religious belief as to both why systemd is valuable and in which ways it is bad.<p><a href="https://github.com/davmac314/dinit/blob/master/doc/COMPARISON">https://github.com/davmac314/dinit/blob/master/doc/COMPARISO...</a><p><a href="http://chimera-linux.org/docs/faq#what-is-the-projects-take-on-systemd" rel="nofollow">http://chimera-linux.org/docs/faq#what-is-the-projects-take-...</a></p>
]]></description><pubDate>Fri, 31 Jan 2025 09:46:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=42886188</link><dc:creator>steinuil</dc:creator><comments>https://news.ycombinator.com/item?id=42886188</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42886188</guid></item><item><title><![CDATA[New comment by steinuil in "Obvious things C should do"]]></title><description><![CDATA[
<p>> The leaf functions come first, and the global interface functions are last.<p>To me <i>that</i> is backwards. I prefer code written in a topological order for a number of reasons:<p>- It mirrors how you write code <i>within</i> a function.<p>- It's obvious where you should put that function in the module.<p>- Most importantly, it makes circular dependencies between pieces of code in a module really obvious.<p>I'm generally not a fan of circular dependencies, because they make codebases much more entangled and prevent you from being able to understand a module as a contained unit. In Python they can even lead to problems you won't see until you run the code[0], but circular imports are probably so common that current type checkers disable that diagnostic by default[1].<p>I think languages that don't support forward references (C, but also OCaml and SML) let me apply the "principle of least surprise" to circular dependencies. OCaml even disallows recursive dependencies between functions unless you declare the functions with "let rec fn1 = .. and fn2 = ..", which may be a bit annoying while you're writing the code but it's important information when you're reading it.<p>[0]: <a href="https://gist.github.com/Mark24Code/2073470277437f2241033c2003f98358" rel="nofollow">https://gist.github.com/Mark24Code/2073470277437f2241033c200...</a><p>[1]: <a href="https://microsoft.github.io/pyright/#/configuration?id=type-check-rule-overrides" rel="nofollow">https://microsoft.github.io/pyright/#/configuration?id=type-...</a> (see reportImportCycles)</p>
]]></description><pubDate>Sun, 12 Jan 2025 10:59:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=42672665</link><dc:creator>steinuil</dc:creator><comments>https://news.ycombinator.com/item?id=42672665</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42672665</guid></item><item><title><![CDATA[New comment by steinuil in "Why is the American diet so deadly?"]]></title><description><![CDATA[
<p><a href="https://archive.is/8tYYn" rel="nofollow">https://archive.is/8tYYn</a></p>
]]></description><pubDate>Tue, 07 Jan 2025 15:52:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=42623703</link><dc:creator>steinuil</dc:creator><comments>https://news.ycombinator.com/item?id=42623703</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42623703</guid></item><item><title><![CDATA[New comment by steinuil in "Confession: I Barely Use Web3"]]></title><description><![CDATA[
<p>Breaking: Web3 devs reach sentience before AI.</p>
]]></description><pubDate>Fri, 27 Dec 2024 13:41:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=42521962</link><dc:creator>steinuil</dc:creator><comments>https://news.ycombinator.com/item?id=42521962</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42521962</guid></item><item><title><![CDATA[New comment by steinuil in "JRuby with JBang"]]></title><description><![CDATA[
<p>I was expecting the post to go into using the JRuby API to run the scripts rather than shelling out to a binary and was left a little disappointed. Still, it looks like a nice way to get everything running quickly.</p>
]]></description><pubDate>Sun, 22 Dec 2024 23:27:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=42490070</link><dc:creator>steinuil</dc:creator><comments>https://news.ycombinator.com/item?id=42490070</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42490070</guid></item><item><title><![CDATA[New comment by steinuil in "Time for a code-yellow?: A blunt instrument that works"]]></title><description><![CDATA[
<p>I don't understand which part of this requires the team to "sacrifice the ‘L’ and ‘B’ from Work-Life-Balance". If you want to encourage your team to re-evaluate their decisions and tackle big problems maybe you should build a culture around that rather than forcing everyone to be in emergency mode?<p>I <i>think</i> that's what this post is saying, but all the posturing about forcing people to working harder to build "grit" is making it hard to read it as genuine. Clearly this is not a management issue, it's the team's fault for not having enough grit to work hard all the time!</p>
]]></description><pubDate>Fri, 20 Dec 2024 08:04:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=42469164</link><dc:creator>steinuil</dc:creator><comments>https://news.ycombinator.com/item?id=42469164</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42469164</guid></item><item><title><![CDATA[New comment by steinuil in "Just Say No to JavaScript"]]></title><description><![CDATA[
<p>I know, I've used jsdoc type hints and I don't like them very much. They're verbose, types and names are the wrong way around, there's about two or three different syntaxes for defining any one thing, you don't get any autoformatting (AFAIK)... I'm not a fan.</p>
]]></description><pubDate>Tue, 10 Dec 2024 23:14:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=42382776</link><dc:creator>steinuil</dc:creator><comments>https://news.ycombinator.com/item?id=42382776</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42382776</guid></item><item><title><![CDATA[New comment by steinuil in "Just Say No to JavaScript"]]></title><description><![CDATA[
<p>Python actually has a good typed ecosystem these days, and unlike JS -> TS you don't have to add a compilation step to benefit from it: you just have to enable type checking in your IDE.<p>JS is in a different spot where to benefit from type checking you have to add a build step or reconfigure your build tool, switch files to another extension, add some "type stubs" dependencies, and make significant changes to the codebase to benefit from type checking.<p>I think if Node and the browsers started allowing type hints in their parsers you'd see much less resistance to TypeScript.<p>Other scripting languages are probably not popular enough to matter as much as JS does.</p>
]]></description><pubDate>Tue, 10 Dec 2024 11:35:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=42375908</link><dc:creator>steinuil</dc:creator><comments>https://news.ycombinator.com/item?id=42375908</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42375908</guid></item><item><title><![CDATA[New comment by steinuil in "Just Say No to JavaScript"]]></title><description><![CDATA[
<p>Types give you much more than just getting an error early when you call the wrong method on an object or pass a string where you needed a number.<p>Once you have written down the shape of the data flowing through your program in a way that a compiler can check you'll be able to reason about the whole program better and you might find issues much faster.<p>I think that types can directly help a lot with logic errors as well: one of the things people say most often when discussing typed programming language is that you can <i>make illegal states unrepresentable</i>, which means that you can encode logic into the type system itself.</p>
]]></description><pubDate>Tue, 10 Dec 2024 11:17:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=42375795</link><dc:creator>steinuil</dc:creator><comments>https://news.ycombinator.com/item?id=42375795</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42375795</guid></item></channel></rss>