<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: rauhl</title><link>https://news.ycombinator.com/user?id=rauhl</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 08 Jul 2026 22:17:58 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=rauhl" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[Patrick McGovern, the 'Indiana Jones of Ancient Alcohol,' Dies at 80]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.nytimes.com/2025/09/14/obituaries/patrick-mcgovern-dead.html">https://www.nytimes.com/2025/09/14/obituaries/patrick-mcgovern-dead.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45248788">https://news.ycombinator.com/item?id=45248788</a></p>
<p>Points: 3</p>
<p># Comments: 1</p>
]]></description><pubDate>Mon, 15 Sep 2025 12:19:44 +0000</pubDate><link>https://www.nytimes.com/2025/09/14/obituaries/patrick-mcgovern-dead.html</link><dc:creator>rauhl</dc:creator><comments>https://news.ycombinator.com/item?id=45248788</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45248788</guid></item><item><title><![CDATA[Lisp error handling (advanced): how handler-bind doesn't unwind the stack]]></title><description><![CDATA[
<p>Article URL: <a href="https://lisp-journey.gitlab.io/blog/lisp-error-handling-how-handler-bind-does-not-unwind-the-stack/">https://lisp-journey.gitlab.io/blog/lisp-error-handling-how-handler-bind-does-not-unwind-the-stack/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=44508277">https://news.ycombinator.com/item?id=44508277</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 09 Jul 2025 10:31:45 +0000</pubDate><link>https://lisp-journey.gitlab.io/blog/lisp-error-handling-how-handler-bind-does-not-unwind-the-stack/</link><dc:creator>rauhl</dc:creator><comments>https://news.ycombinator.com/item?id=44508277</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44508277</guid></item><item><title><![CDATA[New comment by rauhl in "The story of Max, a real programmer"]]></title><description><![CDATA[
<p>Have you seen Common Lisp’s condition system?  It’s a step above exceptions, because one can signal a condition in low-level code, handle it in high-level code and then resume back at the lower level, or anywhere in between which has established a restart.<p><a href="https://gigamonkeys.com/book/beyond-exception-handling-conditions-and-restarts.html" rel="nofollow">https://gigamonkeys.com/book/beyond-exception-handling-condi...</a> is a nice introduction; <a href="https://news.ycombinator.com/item?id=24867548">https://news.ycombinator.com/item?id=24867548</a> points to a great book about it.  I believe that Smalltalk ended up using a similar system, too.<p>> It would need to be the case that code that doesn’t want to handle errors (like Max’s simple website) doesn’t have any error handling code, but it’s easy to add, and common patterns (e.g. “retry this inner operation N times, maybe with back off and jitter, and then fail this outer operation, either exiting the program or leaving unaffected parts running”) are easy to express<p>Lisp’s condition system can handle that!  Here’s a dumb function which signals a continuable error when i ≤ 3:<p><pre><code>    (defun foo ()
      (loop for i from 0
            do (if (> i 3)
                   (return (format nil "good i: ~d" i))
                   (cerror "Keep going." "~d is too low" i))))
</code></pre>
If one runs (foo) by hand then i starts at 0 and FOO signals an error; the debugger will include the option to continue, then i is 1 and FOO signals another error and one may choose to continue.  That’s good for interactive use, but kind of a pain in a program.  Fortunately, there are ways to retry, and to even ignore errors completely.<p>If one wishes to retry up to six times, one can bind a handler which invokes the CONTINUE restart:<p><pre><code>    (let ((j 0))
      (handler-bind ((error #'(lambda (c)
           (declare (ignore c))
           ;; only retry six times
           (unless (> (incf j) 6)
             (invoke-restart 'continue)))))
        (foo)))
</code></pre>
If one wants to ignore errors, then (ignore-errors (foo)) will run and handle the error by returning two values: NIL and the first error.</p>
]]></description><pubDate>Thu, 03 Jul 2025 13:56:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=44455141</link><dc:creator>rauhl</dc:creator><comments>https://news.ycombinator.com/item?id=44455141</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44455141</guid></item><item><title><![CDATA[What the Okta Bcrypt incident can teach us about designing better APIs]]></title><description><![CDATA[
<p>Article URL: <a href="https://n0rdy.foo/posts/20250121/okta-bcrypt-lessons-for-better-apis/">https://n0rdy.foo/posts/20250121/okta-bcrypt-lessons-for-better-apis/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=42917992">https://news.ycombinator.com/item?id=42917992</a></p>
<p>Points: 5</p>
<p># Comments: 1</p>
]]></description><pubDate>Mon, 03 Feb 2025 13:28:46 +0000</pubDate><link>https://n0rdy.foo/posts/20250121/okta-bcrypt-lessons-for-better-apis/</link><dc:creator>rauhl</dc:creator><comments>https://news.ycombinator.com/item?id=42917992</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42917992</guid></item><item><title><![CDATA[ghar: Home as Repositories]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/philips/ghar">https://github.com/philips/ghar</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=42581978">https://news.ycombinator.com/item?id=42581978</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 03 Jan 2025 03:19:22 +0000</pubDate><link>https://github.com/philips/ghar</link><dc:creator>rauhl</dc:creator><comments>https://news.ycombinator.com/item?id=42581978</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42581978</guid></item><item><title><![CDATA[Building a home router (2024 edition)]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.sweharris.org/post/2024-07-18-home-router-redux/">https://www.sweharris.org/post/2024-07-18-home-router-redux/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=41791820">https://news.ycombinator.com/item?id=41791820</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 09 Oct 2024 19:40:03 +0000</pubDate><link>https://www.sweharris.org/post/2024-07-18-home-router-redux/</link><dc:creator>rauhl</dc:creator><comments>https://news.ycombinator.com/item?id=41791820</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41791820</guid></item><item><title><![CDATA[New comment by rauhl in "GNU Screen 5.0 Released"]]></title><description><![CDATA[
<p>> The unattended workaround is to have the tmux daemon spawn at login via `start-server` + enable some tmux settings like `exit-empty` plus some I can't recall regarding environment handling, but nobody does that.<p>I just have my terminal emulator spin up tmux when it starts, and I start my terminal emulator from my desktop, so it always runs in a clean environment.</p>
]]></description><pubDate>Thu, 29 Aug 2024 18:03:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=41393601</link><dc:creator>rauhl</dc:creator><comments>https://news.ycombinator.com/item?id=41393601</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41393601</guid></item><item><title><![CDATA[New comment by rauhl in "GNU Screen 5.0 Released"]]></title><description><![CDATA[
<p>> Ctrl+a from my cold dead fingers<p>That conflicts with the standard Emacs binding to move to the beginning of the current line.  Many years ago, I switched to C-z instead, on the theory that it is really easy to type C-z C-z when I really want to suspend whatever is currently running.<p>Pity that (AFAICT) terminals have no concept of Super and Hyper (USB doesn’t know about Hyper, either, but at least X11 does).</p>
]]></description><pubDate>Thu, 29 Aug 2024 18:01:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=41393573</link><dc:creator>rauhl</dc:creator><comments>https://news.ycombinator.com/item?id=41393573</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41393573</guid></item><item><title><![CDATA[New comment by rauhl in "TextBundle"]]></title><description><![CDATA[
<p>> But it solves a really important problem: How to exchange markdown documents that include attachments like images, video etc. in a standard way?<p>Oddly enough, I was recently thinking of using RFC 822 messages with CommonMark bodies and MIME attachments as a way to store blog entries on disk, so I was considering this exact problem earlier this week (small world!).  RFC 2046 specifies multipart messages, RFC 2392 specifies URI schemes for linking from the body of the message to other parts; and RFC 7763 specifies the text/markdown MIME type. There’s already a ton of tooling out there which deals with MIME, so one needn’t reinvent the wheel.</p>
]]></description><pubDate>Fri, 23 Aug 2024 21:14:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=41333163</link><dc:creator>rauhl</dc:creator><comments>https://news.ycombinator.com/item?id=41333163</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41333163</guid></item><item><title><![CDATA[New comment by rauhl in "DESK42: Calculator, spreadsheet, flight planner, text, graphics and games"]]></title><description><![CDATA[
<p>Really neat! It runs on the DM42 calculator from SwissMicros (no relationship other than being a happy customer): <a href="https://www.swissmicros.com/product/dm42" rel="nofollow">https://www.swissmicros.com/product/dm42</a></p>
]]></description><pubDate>Tue, 20 Aug 2024 14:20:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=41300321</link><dc:creator>rauhl</dc:creator><comments>https://news.ycombinator.com/item?id=41300321</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41300321</guid></item><item><title><![CDATA[DESK42: Calculator, spreadsheet, flight planner, text, graphics and games]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/zooxo/desk42">https://github.com/zooxo/desk42</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=41300309">https://news.ycombinator.com/item?id=41300309</a></p>
<p>Points: 4</p>
<p># Comments: 1</p>
]]></description><pubDate>Tue, 20 Aug 2024 14:19:30 +0000</pubDate><link>https://github.com/zooxo/desk42</link><dc:creator>rauhl</dc:creator><comments>https://news.ycombinator.com/item?id=41300309</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41300309</guid></item><item><title><![CDATA[New comment by rauhl in "Tips on how to structure your home directory (2023)"]]></title><description><![CDATA[
<p>That’s a minor thing I dig about Lisps: variables can be named foo-bar-baz, with nary a shift to type.</p>
]]></description><pubDate>Fri, 19 Apr 2024 16:11:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=40088582</link><dc:creator>rauhl</dc:creator><comments>https://news.ycombinator.com/item?id=40088582</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40088582</guid></item><item><title><![CDATA[New comment by rauhl in "AI hallucinates software packages and devs download them"]]></title><description><![CDATA[
<p>I forget where I first saw it, but I’ve been persuaded that the correct word is ‘confabulation,’ not ‘hallucination.’<p>Maybe it was this paper: <a href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC10619792/" rel="nofollow">https://www.ncbi.nlm.nih.gov/pmc/articles/PMC10619792/</a><p>The authors’ statement that ‘unlike hallucinations, confabulations are not perceived experiences but instead mistaken reconstructions of information which are influenced by existing knowledge, experiences, expectations, and context’ is pretty compelling.</p>
]]></description><pubDate>Thu, 28 Mar 2024 21:07:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=39857308</link><dc:creator>rauhl</dc:creator><comments>https://news.ycombinator.com/item?id=39857308</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39857308</guid></item><item><title><![CDATA[New comment by rauhl in "Is Kubernetes Worth It?"]]></title><description><![CDATA[
<p>I think that it is.  The article does raise some good points to consider, but at this point in my experience with it I believe that a lot of the complexity of Kubernetes is not something it <i>introduces</i> but rather something it <i>exposes</i>: it was already there, just maybe not explicitly.  Likewise with a lot of the operational costs and so forth.<p>OTOH, I do think that now that it has shown the way, there is room for both improvement and replacement.</p>
]]></description><pubDate>Mon, 25 Mar 2024 21:37:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=39821520</link><dc:creator>rauhl</dc:creator><comments>https://news.ycombinator.com/item?id=39821520</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39821520</guid></item><item><title><![CDATA[Is Kubernetes Worth It?]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.infoworld.com/article/3714768/is-kubernetes-worth-the-price-tag.html">https://www.infoworld.com/article/3714768/is-kubernetes-worth-the-price-tag.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=39821496">https://news.ycombinator.com/item?id=39821496</a></p>
<p>Points: 3</p>
<p># Comments: 6</p>
]]></description><pubDate>Mon, 25 Mar 2024 21:33:51 +0000</pubDate><link>https://www.infoworld.com/article/3714768/is-kubernetes-worth-the-price-tag.html</link><dc:creator>rauhl</dc:creator><comments>https://news.ycombinator.com/item?id=39821496</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39821496</guid></item><item><title><![CDATA[New comment by rauhl in "Ask HN: What outdated tech are you still using and are perfectly happy with?"]]></title><description><![CDATA[
<p>A door.  No Internet-connected camera.  No doorbell.  Not even a knocker.  Just a door.  No batteries.  No hype cycle.  No upgrades.  No WiFi.  Just a door.  When someone is at the door, he knocks with his knuckles.  It works.  We’ll probably get a knocker at some point, but we don’t <i>need</i> one.<p>Mechanical watches.  I came very close to getting into so-called ‘smart’ watches awhile back, but decided that would have been a pretty foolish waste of my money.  Quartz would be more accurate, of course, but I like the sweeping hands and the clockwork.</p>
]]></description><pubDate>Wed, 18 Oct 2023 18:43:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=37932906</link><dc:creator>rauhl</dc:creator><comments>https://news.ycombinator.com/item?id=37932906</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37932906</guid></item><item><title><![CDATA[New comment by rauhl in "Pantographia: 1799 specimen book of all the known alphabets"]]></title><description><![CDATA[
<p>The modern version would be <a href="https://www.omniglot.com/" rel="nofollow noreferrer">https://www.omniglot.com/</a>, which has tons of real and constructed writing systems.  It’s a reminder of when the Web was a bunch of neat people sharing neat things.<p>No affiliation with it, just been happily reading and sharing it for years.</p>
]]></description><pubDate>Wed, 11 Oct 2023 12:32:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=37843617</link><dc:creator>rauhl</dc:creator><comments>https://news.ycombinator.com/item?id=37843617</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37843617</guid></item><item><title><![CDATA[New comment by rauhl in "XML Appliance"]]></title><description><![CDATA[
<p>> I conjectured that it's Kubernetes. Just like XML, Kubernetes solves a problem, but it doesn't solve EVERY problem.<p>Like XML, Kubernetes does a lot of cool things which were not common before it came around (unlike XML, I think K8s actually manages to improve on the state of the art a bit, too).  But just as XML was largely replaced by JSON, I am <i>really</i> excited to see what replaces Kubernetes.</p>
]]></description><pubDate>Fri, 31 Mar 2023 10:26:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=35384903</link><dc:creator>rauhl</dc:creator><comments>https://news.ycombinator.com/item?id=35384903</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35384903</guid></item><item><title><![CDATA[New comment by rauhl in "Laptop Brands with GNU/Linux Preinstalled"]]></title><description><![CDATA[
<p>Then the user is stuck with the macOS UI and macOS software.<p>I have a very custom desktop UI based on a tiling window manager (WM); I tend to run it with one or two windows per screen, so that I can focus.  I have a suite of synchronised colour schemes between the WM, my editor, my browser (with custom styles for commonly-used sites), my terminal, my PDF reader and my screen locker, so I see one unified colour theme across everything I do on a computer (with separate themes for work and personal computers, so I instantly know what context I am in).  I have as few distractions as possible from the work I am doing.  I have a fairly consistent set of keybindings across my environment, with custom keybindings for custom work.<p>Since it’s written in Common Lisp, I can dynamically reprogram my WM as it runs.  What I mean is that I can connect to it from my editor and open a REPL; I can define, replace and debug live code in the running instance.  It’s not quite as powerful as a real Lisp machine would be, but it’s better than any other desktop environment I’m aware of.<p>My Compose key setup is much more powerful than macOS’s Option key.  I have a pair of true Hyper keys dedicated specifically to my own cross-application tooling, unused by any specific program.<p>I believe that switching to macOS, Windows, GNOME, KDE or any other setup would be a step back, or at the very least require a significant investment of time and effort to begin to approach parity.<p>Then there is the issue of freedom.  Just about every line of code I run is free software, which I may inspect, learn from, debug and change.  It’s not there to make Apple more money.<p>Then there is the issue of privacy.  Apple <i>claim</i> to care about privacy, but with free software I can actually examine code to see if it does anything I don’t want it to do, and I can hire someone to do that for me, or rely on others I trust who have done that.  You can’t do that with proprietary software.<p>The developers of GNU/Linux and the other software are more aligned with my own interests, wants, needs and desires than the developers of macOS are.  It’s not perfect alignment, of course (Mozilla is a good example where improvement really is needed, as are the systemd developers), but on the whole the free software community are reasonably well-aligned with me.<p>I care about privacy, freedom, customisation and productivity.  When I use my system, it does what I want it to do and nothing (or at least very little …) else.  It gets out of my way and enables me to be effective in my job and in my computer-based hobbies, and gets out of my way so that I have time for my non-computer-based hobbies and the rest of my life.<p>GNU/Linux and other free software afford me much more privacy, freedom, customisation and ultimately productivity than does macOS.</p>
]]></description><pubDate>Thu, 09 Mar 2023 11:34:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=35080273</link><dc:creator>rauhl</dc:creator><comments>https://news.ycombinator.com/item?id=35080273</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35080273</guid></item><item><title><![CDATA[Kubernetes was never designed for batch jobs]]></title><description><![CDATA[
<p>Article URL: <a href="https://betterprogramming.pub/kubernetes-was-never-designed-for-batch-jobs-f59be376a338">https://betterprogramming.pub/kubernetes-was-never-designed-for-batch-jobs-f59be376a338</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=32994572">https://news.ycombinator.com/item?id=32994572</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 27 Sep 2022 12:41:04 +0000</pubDate><link>https://betterprogramming.pub/kubernetes-was-never-designed-for-batch-jobs-f59be376a338</link><dc:creator>rauhl</dc:creator><comments>https://news.ycombinator.com/item?id=32994572</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32994572</guid></item></channel></rss>