<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>Sat, 15 Aug 2026 15:11:26 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=steinuil" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[My skinner box It was made for me]]></title><description><![CDATA[
<p>Article URL: <a href="https://sgt.hootr.club/blog/this-is-my-skinner-box/">https://sgt.hootr.club/blog/this-is-my-skinner-box/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=49292488">https://news.ycombinator.com/item?id=49292488</a></p>
<p>Points: 10</p>
<p># Comments: 2</p>
]]></description><pubDate>Thu, 13 Aug 2026 22:11:58 +0000</pubDate><link>https://sgt.hootr.club/blog/this-is-my-skinner-box/</link><dc:creator>steinuil</dc:creator><comments>https://news.ycombinator.com/item?id=49292488</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49292488</guid></item><item><title><![CDATA[New comment by steinuil in "The death and rebirth of my home server"]]></title><description><![CDATA[
<p>Exactly. The previous install of the system had no swap at all so enabling zram is an improvement.</p>
]]></description><pubDate>Sun, 19 Jul 2026 19:19:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=48970931</link><dc:creator>steinuil</dc:creator><comments>https://news.ycombinator.com/item?id=48970931</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48970931</guid></item><item><title><![CDATA[New comment by steinuil in "The death and rebirth of my home server"]]></title><description><![CDATA[
<p>> If i'm reading this correctly, can run Immich from a Raspberry Pi 4? That's pretty cool.<p>Yes! It runs completely fine on a Pi, except for the machine learning service. The good news is that you can run that service on a separate computer with a GPU and point Immich to it. Immich will use it when it's available and I think you can configure it to run all the queued ML jobs at a certain time when you expect the computer running the ML service to be on.</p>
]]></description><pubDate>Sun, 19 Jul 2026 16:28:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=48969507</link><dc:creator>steinuil</dc:creator><comments>https://news.ycombinator.com/item?id=48969507</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48969507</guid></item><item><title><![CDATA[New comment by steinuil in "The death and rebirth of my home server"]]></title><description><![CDATA[
<p>Yeah that's more or less my goal for the setup in the post... I didn't have much time to investigate what else I could move off of the SD card but I suspect there's a few other things I could do. NixOS makes it super easy too.</p>
]]></description><pubDate>Sun, 19 Jul 2026 14:02:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=48968317</link><dc:creator>steinuil</dc:creator><comments>https://news.ycombinator.com/item?id=48968317</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48968317</guid></item><item><title><![CDATA[The death and rebirth of my home server]]></title><description><![CDATA[
<p>Article URL: <a href="https://sgt.hootr.club/blog/home-server-rebirth/">https://sgt.hootr.club/blog/home-server-rebirth/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48966769">https://news.ycombinator.com/item?id=48966769</a></p>
<p>Points: 145</p>
<p># Comments: 113</p>
]]></description><pubDate>Sun, 19 Jul 2026 10:44:31 +0000</pubDate><link>https://sgt.hootr.club/blog/home-server-rebirth/</link><dc:creator>steinuil</dc:creator><comments>https://news.ycombinator.com/item?id=48966769</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48966769</guid></item><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></channel></rss>