<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: lukasgelbmann</title><link>https://news.ycombinator.com/user?id=lukasgelbmann</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 07 Oct 2026 08:10:03 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=lukasgelbmann" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by lukasgelbmann in "Type Safe Generic Data Structures in C (2025)"]]></title><description><![CDATA[
<p>Yes, and variable length arrays were made an optional part of the standard in C11. Whereas flexible array members remain a standard required feature.<p>Flexible array members don’t allocate a dynamic amount of memory on the stack.</p>
]]></description><pubDate>Mon, 05 Oct 2026 16:09:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=49966748</link><dc:creator>lukasgelbmann</dc:creator><comments>https://news.ycombinator.com/item?id=49966748</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49966748</guid></item><item><title><![CDATA[New comment by lukasgelbmann in "UTF-8000: Unlimited UTF-8"]]></title><description><![CDATA[
<p>Right, UTF-8000 does have this property. Too late to edit my comment now, thanks for noticing that.</p>
]]></description><pubDate>Sun, 20 Sep 2026 13:39:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=49775764</link><dc:creator>lukasgelbmann</dc:creator><comments>https://news.ycombinator.com/item?id=49775764</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49775764</guid></item><item><title><![CDATA[New comment by lukasgelbmann in "UTF-8000: Unlimited UTF-8"]]></title><description><![CDATA[
<p>Self-synchronization in UTF-8 is intuitively a great thing to have, yet I don’t remember actively relying on it ever. Does anyone have a good example of when it‘s useful?<p>Another related nice property that UTF-8 has: substring search reduces to bytestring substring search. I.e. given two Unicode strings in UTF-8 encoding, you can check if one is a substring of the other by just treating them as bytestrings and checking if one bytestring is a substring of the other bytestring. This is a stronger property than self-synchronization: UTF-8 has it, but UTF-8000 doesn’t.</p>
]]></description><pubDate>Sun, 20 Sep 2026 08:38:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=49773813</link><dc:creator>lukasgelbmann</dc:creator><comments>https://news.ycombinator.com/item?id=49773813</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49773813</guid></item><item><title><![CDATA[New comment by lukasgelbmann in "There's No Limit to How Bad Code Can Get"]]></title><description><![CDATA[
<p>Insightful article. The author makes some great points about the dynamics of technical debt in organizations.<p>I think a sinking ship is a reasonably good metaphor though. A sunken ship is a horrible, terrible outcome.<p>In the metaphor, a codebase is sunken when it’s unviable to continue using it. The organization stops working on it and no longer runs it. At this point, the code is completely worthless to the business, like a ship at the bottom of the ocean. True, you could imagine the code getting worse theoretically. But in reality, it will just sit there and rot.[0] The business might attempt a rewrite or just discontinue the product.<p>It’s possible, but not a given, that a business sinks with one of its codebases. This can happen with a ship too, if a business relies heavily on it.<p>[0] <a href="https://en.wikipedia.org/wiki/Software_rot" rel="nofollow">https://en.wikipedia.org/wiki/Software_rot</a></p>
]]></description><pubDate>Sat, 05 Sep 2026 18:52:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=49579502</link><dc:creator>lukasgelbmann</dc:creator><comments>https://news.ycombinator.com/item?id=49579502</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49579502</guid></item><item><title><![CDATA[CSS is Turing Complete (2022)]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/Mooninaut/css-is-turing-complete">https://github.com/Mooninaut/css-is-turing-complete</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=49573279">https://news.ycombinator.com/item?id=49573279</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Sat, 05 Sep 2026 05:14:23 +0000</pubDate><link>https://github.com/Mooninaut/css-is-turing-complete</link><dc:creator>lukasgelbmann</dc:creator><comments>https://news.ycombinator.com/item?id=49573279</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49573279</guid></item><item><title><![CDATA[The best dark mode toggle is probably none]]></title><description><![CDATA[
<p>Article URL: <a href="https://lea.verou.me/blog/2026/dark-mode-toggles-2/">https://lea.verou.me/blog/2026/dark-mode-toggles-2/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=49563768">https://news.ycombinator.com/item?id=49563768</a></p>
<p>Points: 5</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 04 Sep 2026 12:42:01 +0000</pubDate><link>https://lea.verou.me/blog/2026/dark-mode-toggles-2/</link><dc:creator>lukasgelbmann</dc:creator><comments>https://news.ycombinator.com/item?id=49563768</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49563768</guid></item><item><title><![CDATA[Wikipedia and other sites slow or unavailable]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.wikimediastatus.net/incidents/9mg9mtxfxpjl">https://www.wikimediastatus.net/incidents/9mg9mtxfxpjl</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=49438560">https://news.ycombinator.com/item?id=49438560</a></p>
<p>Points: 8</p>
<p># Comments: 4</p>
]]></description><pubDate>Tue, 25 Aug 2026 18:35:38 +0000</pubDate><link>https://www.wikimediastatus.net/incidents/9mg9mtxfxpjl</link><dc:creator>lukasgelbmann</dc:creator><comments>https://news.ycombinator.com/item?id=49438560</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49438560</guid></item><item><title><![CDATA[We had a unit test once which only failed on Sundays (2015)]]></title><description><![CDATA[
<p>Article URL: <a href="https://qntm.org/unit">https://qntm.org/unit</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=49433816">https://news.ycombinator.com/item?id=49433816</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 25 Aug 2026 13:35:21 +0000</pubDate><link>https://qntm.org/unit</link><dc:creator>lukasgelbmann</dc:creator><comments>https://news.ycombinator.com/item?id=49433816</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49433816</guid></item><item><title><![CDATA[Cropping Images with CSS While Keeping a Focal Point in the Center (2023)]]></title><description><![CDATA[
<p>Article URL: <a href="https://odland.dev/2023/02/26/cropping-images-with-css-while-keeping-a-focal-point-in-the-center.html">https://odland.dev/2023/02/26/cropping-images-with-css-while-keeping-a-focal-point-in-the-center.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=49358515">https://news.ycombinator.com/item?id=49358515</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 19 Aug 2026 08:07:42 +0000</pubDate><link>https://odland.dev/2023/02/26/cropping-images-with-css-while-keeping-a-focal-point-in-the-center.html</link><dc:creator>lukasgelbmann</dc:creator><comments>https://news.ycombinator.com/item?id=49358515</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49358515</guid></item><item><title><![CDATA[New comment by lukasgelbmann in "Don't stop early: Case-folding source code at memory speed"]]></title><description><![CDATA[
<p>Too late to edit, but the situation with İ is more complicated, and I got the mapping wrong for this specific casefold implementation.<p>What I should have said is that in the case of İ/i/I/ı, using str::to_lowercase for string matching wouldn’t be any less correct than using their locale-independent casefold.<p>The third character in the list, final sigma, is a good example that illustrates why using str::to_lowercase for string matching isn’t good.</p>
]]></description><pubDate>Wed, 05 Aug 2026 06:45:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=49179376</link><dc:creator>lukasgelbmann</dc:creator><comments>https://news.ycombinator.com/item?id=49179376</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49179376</guid></item><item><title><![CDATA[New comment by lukasgelbmann in "Don't stop early: Case-folding source code at memory speed"]]></title><description><![CDATA[
<p>There’s some interesting information in there. Unfortunately the person or LLM writing this got pretty confused right in the introduction already.<p>> <i>“Suppose […] they type straße and you’ve stored STRASSE. To make these count as matches, you need […]”</i><p>Really bad example, because as the article says later on, this casefold crate won’t match those two strings because the ß → ss conversion isn’t done.<p>> <i>“[str::to_lowercase and case folding] diverge on real characters—ß, İ, final sigma”</i><p>The main point is true (case folding is different from lowercasing), but two of the three examples are wrong. The casefold operation that they use maps ß to itself, as does str::to_lowercase. The casefold operation maps İ to U+0069 U+0307 regardless of locale, as does str::to_lowercase.<p>When I’m reading an article, these kind of mistakes in the introduction make me doubt the accuracy of the whole article. Which is a shame, because again, it’s an interesting write-up. The mistakes also make the article harder to follow, since the examples imply ß is folded to ss.</p>
]]></description><pubDate>Wed, 05 Aug 2026 04:15:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=49178496</link><dc:creator>lukasgelbmann</dc:creator><comments>https://news.ycombinator.com/item?id=49178496</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49178496</guid></item><item><title><![CDATA[New comment by lukasgelbmann in "Ask HN: Who wants to be hired? (August 2026)"]]></title><description><![CDATA[
<p><p><pre><code>  Location: Europe (UTC+2)
  Remote: yes
  Willing to relocate: no
  Technologies: Python, SQL, C, Java, Go, PHP, JavaScript, Typescript, Claude Code, Analytics, Git
  LinkedIn: https://linkedin.com/in/lukas-gelbmann
  Email: me@lukasgelbmann.com
</code></pre>
Senior software engineer, experienced with backend engineering, databases, data analytics, application security, web applications, and fullstack development.</p>
]]></description><pubDate>Mon, 03 Aug 2026 17:00:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=49158451</link><dc:creator>lukasgelbmann</dc:creator><comments>https://news.ycombinator.com/item?id=49158451</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49158451</guid></item><item><title><![CDATA[New comment by lukasgelbmann in "Firefighter arson a long-standing issue – expert"]]></title><description><![CDATA[
<p>> There are 349 million people in the US, so the number of arsonists is 0.0001% of the general population. The number of firefighters that are arsonists (100/65,795) is 0.0015%, so I suppose it's slightly higher that the general population.<p>You comparing arsonists/pop with firefighter-arsonists/arsonists. That’s the wrong comparison. You should be comparing arsonists/pop with firefighter-arsonists/firefighters. Or firefighters/pop with firefighter-arsonists/arsonists.<p>(On top of that, mixing numbers from different sources can be problematic. For example, how are repeat convictions treated in the different sources? Who counts as a firefighter?)</p>
]]></description><pubDate>Sat, 01 Aug 2026 06:07:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=49131544</link><dc:creator>lukasgelbmann</dc:creator><comments>https://news.ycombinator.com/item?id=49131544</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49131544</guid></item><item><title><![CDATA[New comment by lukasgelbmann in "A glitch in February of the year 0"]]></title><description><![CDATA[
<p>Author here.<p>Our aim isn’t to try and line up with the calendar that was in use at the time, 2026 years ago.<p>Instead, the aim (for 28times) is to implement the rules of the proleptic Gregorian calendar[0] correctly. The bug was that those rules weren’t followed for some rare values.<p>But to address your comment properly, I think I should justify why on Earth someone would want to use the proleptic Gregorian calendar for year 0 and before. In short, because it’s a useful fiction.<p>The biggest reason is interoperability: a lot of software follows proleptic Gregorian rules, aligning around ISO 8601. Probably a clear majority of date/time software. We want to line up with all that existing software that assigns a specific meaning to a string like "0000-02-01". That’s the first of February in the proleptic Gregorian calendar, even though it was a different date in the ancient Romans’ calendar.<p>The other reason is to keep it simple: since most people use the Gregorian calendar in present times, it’s simplest (for us as implementors, but also for users) to extend its rules into the distant past and distant future. The alternative for be to have multiple sets of rules, e.g. Julian and Gregorian calendar. (You might say it would be even simpler to just not allow timestamps before 1582. But there are use cases, e.g. in astronomy or history, where people want to work with timestamps before 1582, and even before 1 AD.)<p>[0] <a href="https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar" rel="nofollow">https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar</a></p>
]]></description><pubDate>Sun, 05 Jul 2026 18:16:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=48796493</link><dc:creator>lukasgelbmann</dc:creator><comments>https://news.ycombinator.com/item?id=48796493</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48796493</guid></item><item><title><![CDATA[A glitch in February of the year 0]]></title><description><![CDATA[
<p>Article URL: <a href="https://28times.com/blog/2026-06-26-february-of-the-year-0">https://28times.com/blog/2026-06-26-february-of-the-year-0</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48688275">https://news.ycombinator.com/item?id=48688275</a></p>
<p>Points: 22</p>
<p># Comments: 25</p>
]]></description><pubDate>Fri, 26 Jun 2026 16:08:54 +0000</pubDate><link>https://28times.com/blog/2026-06-26-february-of-the-year-0</link><dc:creator>lukasgelbmann</dc:creator><comments>https://news.ycombinator.com/item?id=48688275</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48688275</guid></item><item><title><![CDATA[New comment by lukasgelbmann in "Ask HN: What are you working on? (June 2026)"]]></title><description><![CDATA[
<p>I’m working on a time series management & analysis tool. The goal is to provide simple ways to work with time series data, including an API and visualisation.<p><a href="https://28times.com" rel="nofollow">https://28times.com</a></p>
]]></description><pubDate>Sun, 14 Jun 2026 18:03:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=48530510</link><dc:creator>lukasgelbmann</dc:creator><comments>https://news.ycombinator.com/item?id=48530510</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48530510</guid></item><item><title><![CDATA[New comment by lukasgelbmann in "Bttf is a command line datetime Swiss army knife"]]></title><description><![CDATA[
<p>> <i>“If you run this on a big repository, it will take quite a lot of time because `git log -n1` takes a long time. I think this is the fastest way to get the most recent commit time on a single file? (That's the assertion that I hope someone can correct me on!) In any case, `bttf tag exec` is using parallelism under the hood to make this even faster.”</i><p>Instead of running `git log -n1` on every file, I think you can walk through the commits backwards, skipping any files that have been seen. Something like this (these two commands could be followed by bttf commands):<p><pre><code>  git log --pretty=format:"DATE:%aI" --name-only |
  awk '/^DATE:/ {date=substr($0, 6); next} $0!="" && !seen[$0]++ {print date, $0}'
</code></pre>
This seems to run much faster. The only problem is it'll include files that have been renamed or removed. I got an AI to fix that too, but it starts getting awkward (still fast though!):<p><pre><code>  git ls-files |
  awk '
    # Read all existing files from git ls-files into an array
    NR==FNR { lsfiles[$0]; next }

    # Process the git log stream
    /^DATE:/ { date=substr($0, 6); next }
    $0!="" && ($0 in lsfiles) && !seen[$0]++ { print date, $0 }
  ' - <(git log --pretty=format:"DATE:%aI" --name-only)</code></pre></p>
]]></description><pubDate>Thu, 28 May 2026 18:44:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=48313565</link><dc:creator>lukasgelbmann</dc:creator><comments>https://news.ycombinator.com/item?id=48313565</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48313565</guid></item><item><title><![CDATA[What types of exceptions should you catch?]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.pythonmorsels.com/what-types-of-exceptions-should-you-catch/">https://www.pythonmorsels.com/what-types-of-exceptions-should-you-catch/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48310337">https://news.ycombinator.com/item?id=48310337</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 28 May 2026 15:25:40 +0000</pubDate><link>https://www.pythonmorsels.com/what-types-of-exceptions-should-you-catch/</link><dc:creator>lukasgelbmann</dc:creator><comments>https://news.ycombinator.com/item?id=48310337</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48310337</guid></item><item><title><![CDATA[New comment by lukasgelbmann in "If more than 50% press blue, everyone survives. Red pressers always survive"]]></title><description><![CDATA[
<p>With 3, especially if the animals outnumber humans, you’d first want to do some research into animal psychology to see whether red or blue has an edge for animals.</p>
]]></description><pubDate>Sun, 26 Apr 2026 20:02:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=47913642</link><dc:creator>lukasgelbmann</dc:creator><comments>https://news.ycombinator.com/item?id=47913642</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47913642</guid></item><item><title><![CDATA[New comment by lukasgelbmann in "If more than 50% press blue, everyone survives. Red pressers always survive"]]></title><description><![CDATA[
<p>There’s a moral benefit to choosing blue if you think there’s a chance that the end result will be split 50-50 and you’ll be the deciding vote between a blue majority and a red majority.</p>
]]></description><pubDate>Sun, 26 Apr 2026 19:45:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=47913427</link><dc:creator>lukasgelbmann</dc:creator><comments>https://news.ycombinator.com/item?id=47913427</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47913427</guid></item></channel></rss>