<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: reichstein</title><link>https://news.ycombinator.com/user?id=reichstein</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 17 Sep 2026 17:38:17 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=reichstein" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by reichstein in "My temporary PHP fix from 2014 has nearly 20M installs. Today I'm deprecating it"]]></title><description><![CDATA[
<p>Can you explain what that misunderstanding is?<p>Deprecation is just a tag. You don't have to respect it. And if you want the project to continue, you can freely fork it.</p>
]]></description><pubDate>Thu, 17 Sep 2026 14:20:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=49741193</link><dc:creator>reichstein</dc:creator><comments>https://news.ycombinator.com/item?id=49741193</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49741193</guid></item><item><title><![CDATA[New comment by reichstein in "How much of F-Droid is LLM generated?"]]></title><description><![CDATA[
<p>"Sent from my iPhone"</p>
]]></description><pubDate>Wed, 16 Sep 2026 17:20:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=49730130</link><dc:creator>reichstein</dc:creator><comments>https://news.ycombinator.com/item?id=49730130</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49730130</guid></item><item><title><![CDATA[New comment by reichstein in "C Is Not a Low-Level Language (2018)"]]></title><description><![CDATA[
<p>Processor instructions are not _strongly typed_. 
They take bit patterns as input and output new bit patterns.<p>The bits are untyped, the choice of operation decides how the bits are interpreted. Nothing enforces the type of that result, you can always interpret it as something else. It may not be meaningful. Or it may be, like a fast inverse square root.<p>Strong typing means that each value has an intrinsic type, and there is no reinterpreting it. What CPUs do is not that, or rather the only types are "_n_-bits" (_n_ a power of 2).</p>
]]></description><pubDate>Mon, 07 Sep 2026 22:06:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=49603480</link><dc:creator>reichstein</dc:creator><comments>https://news.ycombinator.com/item?id=49603480</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49603480</guid></item><item><title><![CDATA[New comment by reichstein in "When str.lower() is a security vulnerability in Python"]]></title><description><![CDATA[
<p>Yes, but for backwards compatibility, Unicode doesn't uppercase ß to ẞ.</p>
]]></description><pubDate>Wed, 26 Aug 2026 06:04:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=49444642</link><dc:creator>reichstein</dc:creator><comments>https://news.ycombinator.com/item?id=49444642</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49444642</guid></item><item><title><![CDATA[New comment by reichstein in "When str.lower() is a security vulnerability in Python"]]></title><description><![CDATA[
<p>I guess that's why you shouldn't be _validating_ things, and then praying them on as-is. "Parsing is validation" is (also) the idea that after validation, your data is in a format that reflects and enforces what's known about it.<p>"Safe strings" is an example of that idea. 
Not always possible or practical, but always worth considering if you're doing "validation" as a function.</p>
]]></description><pubDate>Wed, 26 Aug 2026 04:03:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=49444100</link><dc:creator>reichstein</dc:creator><comments>https://news.ycombinator.com/item?id=49444100</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49444100</guid></item><item><title><![CDATA[New comment by reichstein in "Grok 4.6"]]></title><description><![CDATA[
<p>I think "reflect top to bottom" is intended to mean "swap top and button". A mirror reflects left, right, top and bottom perfectly. 
It's front and back that it swaps.<p>Someone saying that a mirror swaps left and right is comparing it to a photograph, and only because we, as bipedal creatures, really prefer to orient images of other humans with heads up.</p>
]]></description><pubDate>Thu, 13 Aug 2026 12:33:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=49284972</link><dc:creator>reichstein</dc:creator><comments>https://news.ycombinator.com/item?id=49284972</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49284972</guid></item><item><title><![CDATA[New comment by reichstein in "Grok 4.6"]]></title><description><![CDATA[
<p>The image you see in the mirror is a reflection of a human. Or, more precisely, a 2-dimensional projection of the frontal outer surface of a human.<p>One half of one dimension less than a human.
But sure looks convincing on the surface.</p>
]]></description><pubDate>Thu, 13 Aug 2026 12:24:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=49284880</link><dc:creator>reichstein</dc:creator><comments>https://news.ycombinator.com/item?id=49284880</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49284880</guid></item><item><title><![CDATA[New comment by reichstein in "Mushroom behind 'tiny people' hallucinations identified"]]></title><description><![CDATA[
<p>Ethics is what people agree on. Not doing unnecessary harm is usually easily agreed on. Don't exploit people who know less it's also on the list. Doesn't mean we didn't learn something valuable from KZ camp experiments, we just don't think it outweighed the costs. And we don't like, or want to encourage, people who think it did.<p>There are very strict rules for scientific experiments _because_ we know that without them, just guided by "common sense" or "be reasonable", someone would get blinded by ambition or "the potential" and go further than the majority want to accept.<p>Anyone can "experiment" without it being an accepted scientific experiment. But then they're personally responsible for any and all bad outcomes. If you follow the rules and get the experiment pre-approved, you'll likely be covered by your employer's insurance and free from criminal liability . 
That's a very good incentive.</p>
]]></description><pubDate>Thu, 13 Aug 2026 08:13:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=49283055</link><dc:creator>reichstein</dc:creator><comments>https://news.ycombinator.com/item?id=49283055</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49283055</guid></item><item><title><![CDATA[New comment by reichstein in "Taxi drivers rarely die of Alzheimer's"]]></title><description><![CDATA[
<p>Stressful on the body.<p>Odd hours, sitting too much, inhaling too many exhaust fumes, having people yell at you if _they're_ late.<p>Sounds like a fairly hard job.</p>
]]></description><pubDate>Mon, 10 Aug 2026 07:31:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=49240480</link><dc:creator>reichstein</dc:creator><comments>https://news.ycombinator.com/item?id=49240480</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49240480</guid></item><item><title><![CDATA[New comment by reichstein in "The true power of regular expressions (2012)"]]></title><description><![CDATA[
<p>RegExps is the way to tokenize, so it's not surpassing you can look for individual tokens using them.<p>It's parsing that's hard , for example when it needs to match up braces, or start and end tags, even if either is easily matched by a RegExp.<p>And you still need to be careful if the source you're looking in has any way to escape text or have different meanings for the same text. In source code, you should recognize comments and strings (and RegExp literals) so you don't match inside those. 
In HTML, you should recognize CDATA sections, including script elements. If they contain `<div`, it's not a tag.<p>That's is, your 99.9% is probably too damn high.</p>
]]></description><pubDate>Mon, 03 Aug 2026 21:35:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=49161760</link><dc:creator>reichstein</dc:creator><comments>https://news.ycombinator.com/item?id=49161760</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49161760</guid></item><item><title><![CDATA[New comment by reichstein in "Truth is not a direction: a Tarski attack on LLM probes"]]></title><description><![CDATA[
<p>Models do not have assumptions. They have probabilities for what the next token should be. 
With enough context, in the context window and built into the model, that next token isn't completely random, it's correlated with something someone might choose to write.<p>But people write all kinds of crap manually. 
So far, the data people have been writing has tended to be denser around what people could agree on (there are many lies, but only one truth), so the model is more likely to go there.<p>If we start putting AI generated text into the training data, it's not clear what that means for the resulting model. It's already clear that some actors are trying to influence models by putting large amounts of content out there that agree with them.<p>Figuring out which content is safe to train from is the real problem for future model trainers.</p>
]]></description><pubDate>Wed, 29 Jul 2026 07:14:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=49094330</link><dc:creator>reichstein</dc:creator><comments>https://news.ycombinator.com/item?id=49094330</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49094330</guid></item><item><title><![CDATA[New comment by reichstein in "Why care about programming languages"]]></title><description><![CDATA[
<p>LLMs to inspect:<p>- Simple robust syntax<p>> - One obvious way to do things<p>That always leads to more verbosity. 
Much syntactic sugar is a more specialized way to do a subset of a more general thing. 
Why have `a + b` when you could just write `a.add(b)`? Because it's easier to read. The general functionality needs to account for all cases, the specialized one can cut that down just the things that matter to a specific common use case.<p>- Static type checking<p>\<meme>Which one?\</meme><p>That's a very, very deep can of worms. 
One could argue that of an LLM is generating the code, then the type system doesn't need to be understandable to humans, so throw in all the features you'd ever want and just have the LLM change the code if it's not valid. Unions of higher order generic functions, sure!
Or one could argue that there should be minimal magic, because the LLM understands the language only by its source, so everything should be explicit. 
If the LLM can prove that something is sounds to the compiler, accept it. Give ways to give extra evidence of soundness, like declaring invariants and contacts.<p>- Purely functional encouraged, escape hatches for performance<p>"One obvious way to do things", except when you need two. Purely functional except when it matters.<p>Why doesn't performance always matter? 
(And how will an LLM know if it does?)<p>Being purely functional is nice for data, but not for data structures that are updated in place. If all you do is stream data from one DB query into another, then your mutable state is the database. Otherwise might as well accept that it's a multiparadigmatic language with both imperative, functional and OO features. Just like all the others.<p>- Inspect-able, testable, and reviewable in small pieces<p>Good modularity and abstraction. No global scope.
Maybe something like dependency injection to decouple from dependencies? 
(That does not make code readable, though.)<p>- Something like formal predicates, preconditions, post-conditions, assertions, or effects typing<p>That! 
LLMs look at the source. The more explicit the source is, the less it has to infer from context or existing knowledge. 
If the LLM can create its own predicates, accepted by the static type/analysis system, to prove that it's code is sounds, that allows more flexibility than having to fit into any fixed type system.
Do we want or need that flexibility? Maybe. 
Most LLM-generated code is directly inspired by existing idiomatic code in the same language. Some is translated from other languages, trying to match up idioms. Some is just blindly trying to make unit tests pass. We could end up with generated predicates tailored to specific unit tests, not the actual concept.</p>
]]></description><pubDate>Mon, 27 Jul 2026 09:02:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=49066894</link><dc:creator>reichstein</dc:creator><comments>https://news.ycombinator.com/item?id=49066894</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49066894</guid></item><item><title><![CDATA[New comment by reichstein in "Overloaded Overloading"]]></title><description><![CDATA[
<p>So the `+` is not _overloaded_, the `+` syntax is a shorthand for calling a method named `__add__` on the value of the first operand, with the value of the second operand as an argument . That is: `e1 + e2` is syntactic sugar for `e1.__add__(e2)`, no more and no less.<p>It's not "operator overloading" any more than two _different_ classes having a `length` property is "length overloading".<p>Using the term "operator overloading" to begin with is the error here.</p>
]]></description><pubDate>Sun, 26 Jul 2026 11:13:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=49056898</link><dc:creator>reichstein</dc:creator><comments>https://news.ycombinator.com/item?id=49056898</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49056898</guid></item><item><title><![CDATA[New comment by reichstein in "Ghost Cut – Or why Cut and Paste is broken everywhere"]]></title><description><![CDATA[
<p>Hyperbolic title is, unsurprisingly, misleading. At least the article follows the style consistently.<p>The "ghost cut" is a two-step text move. A perfectly fine operation to have, _because_ it's not the same as a cut operation followed by a single paste operation.<p>Cut can be used without paste, and paste can be used more than once. They're combinable primitive operations. Sometimes what you want isn't that combination. Someones it is. But claiming that they're _broken_ ... is not a sign of someone who's able to see past their own needs and preferences.</p>
]]></description><pubDate>Wed, 22 Jul 2026 22:04:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=49014090</link><dc:creator>reichstein</dc:creator><comments>https://news.ycombinator.com/item?id=49014090</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49014090</guid></item><item><title><![CDATA[New comment by reichstein in "Designing emoji for the way we communicate today"]]></title><description><![CDATA[
<p>Probably don't care.<p>I have no idea what "randoseru" means, or what kind of backpack it is. Looking it up, it seems to be a design that carries special meaning in Japan, and not really anywhere else. While other countries _may_ have similar designs, it's not something special to them.<p>Even if the emoji looked like a ranoseru backpack, it wouldn't mean anything to most people. 
If anything, the front pocket is more likely to be associated with a backpack used for school.</p>
]]></description><pubDate>Sat, 18 Jul 2026 06:04:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=48955615</link><dc:creator>reichstein</dc:creator><comments>https://news.ycombinator.com/item?id=48955615</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48955615</guid></item><item><title><![CDATA[New comment by reichstein in "It's not about physical vs. digital games, it's about ownership"]]></title><description><![CDATA[
<p>The distinction is not physical vs (entirely) digital.
If you buy games at GOG, you get entirely non-physical products, but you own and control those bits. You can download the game and keep playing it as long as you can provide it with a suitable runtime environment<p>The things you don't own are because they require an online service to work. No matter what you do, short of removing the dependency, aka "cracking", it will only work as long as the online service allows it to work.<p>Any feature of.a consoles with OTA software updates are in that category. Even if you own the hardware, you don't _control_ the software.</p>
]]></description><pubDate>Mon, 06 Jul 2026 12:12:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=48803556</link><dc:creator>reichstein</dc:creator><comments>https://news.ycombinator.com/item?id=48803556</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48803556</guid></item><item><title><![CDATA[New comment by reichstein in "It's not about physical vs. digital games, it's about ownership"]]></title><description><![CDATA[
<p>> <a href="https://www.build.aau.dk/report-from-aau-warns-danish-homes-aren-t-designed-for-a-changing-climate-n152381" rel="nofollow">https://www.build.aau.dk/report-from-aau-warns-danish-homes-...</a><p>The Danish Building code has requirements for retaining heat in the house, which is great in the cold winters, but devastating in the heart of modern summers. Combined with rules that practically require large south-facing windows to satisfy the total energy requirement limits, it gets very, very hot. And air conditioning subtracts significantly from your energy rating, making it almost impossible to include AC in a new building and satisfy the emission rating that any new building must satisfy.<p>The code allows only 25 hours a year where indoor temperature exceeds 28 degrees, but the validation of a building uses old temperature data, so on practice it's more hours of higher temperatures, and for houses that, even if you want to add AC later, wasnt designed for that.<p>Abs to add insult to injury, if you renovate an older building, you _can_ be required to bring it up to modern specs. That can be so expensive that it's cheaper to tear it down and build a new building. Because you can't do something half-good?<p>The building code _is_ a real problem, and changes ... well, haven't happened yet, so the buildings built today will be unlivable for as long as they stand in the new hotter summers.</p>
]]></description><pubDate>Mon, 06 Jul 2026 08:59:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=48802261</link><dc:creator>reichstein</dc:creator><comments>https://news.ycombinator.com/item?id=48802261</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48802261</guid></item><item><title><![CDATA[New comment by reichstein in "It's not about physical vs. digital games, it's about ownership"]]></title><description><![CDATA[
<p>It's not that I don't agree, but lawyers will then ask you to define "buy" in such a way that it is distinguishable from a perpetual lease with a cancellation clause _to buyers_, without also disallowing a lot of actually useful leasing agreements.<p>The thing is, you never did _buy_ that Steam game.
And you never bought the software on the TV,  which you did buy the hardware of, you bought a software lease along with the hardware.<p>The latter case I can see something to do about - define the software and its functionality as an "essential component" of the hardware, and require companies to not break essential components of hardware they sell. They can stop offering online services, but the rest of the device should keep working.<p>For pure software leases, I don't see a good way to not have them be whatever the contract say they are, not without reclassifying them as something else than a copyrighted work. (But then "sellers" should be very clear what you're "buying".)</p>
]]></description><pubDate>Mon, 06 Jul 2026 08:40:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=48802159</link><dc:creator>reichstein</dc:creator><comments>https://news.ycombinator.com/item?id=48802159</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48802159</guid></item><item><title><![CDATA[New comment by reichstein in "I Stored a Website in a Favicon"]]></title><description><![CDATA[
<p>Just because it's my windmill to tilt at: `[\s\S]` can be written shorter and more precisely as `[^]`.</p>
]]></description><pubDate>Sat, 20 Jun 2026 10:18:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=48608052</link><dc:creator>reichstein</dc:creator><comments>https://news.ycombinator.com/item?id=48608052</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48608052</guid></item><item><title><![CDATA[New comment by reichstein in "Int a = 5; a = a++ + ++a; a =? (2011)"]]></title><description><![CDATA[
<p>Assigning to multiple variables in a single expression is fine and useful. Take<p>``` 
  target[i++] = source1[j++] + source2[k++];
```
That's idiomatic, it shows the intent to read and consume the value in a single expression. 
You can write it longer, but not more clearly.<p>It's only when you assign to the same variable multiple times, or read it after it was assigned, that it introduces ordering issues.<p>A single `i++` or `++i`/`i += 1` is safe and useful.</p>
]]></description><pubDate>Fri, 15 May 2026 08:16:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=48145914</link><dc:creator>reichstein</dc:creator><comments>https://news.ycombinator.com/item?id=48145914</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48145914</guid></item></channel></rss>