<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: rjknight</title><link>https://news.ycombinator.com/user?id=rjknight</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 15 Apr 2026 03:05:40 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=rjknight" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by rjknight in "Schedule tasks on the web"]]></title><description><![CDATA[
<p>It's not that you know the artist first and then say "this art is cool because I like the artist". The art is the <i>means</i> by which you know the artist. The more of their works you encounter, the closer you get to understanding the artist and what they are trying to communicate.</p>
]]></description><pubDate>Fri, 27 Mar 2026 10:59:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=47541152</link><dc:creator>rjknight</dc:creator><comments>https://news.ycombinator.com/item?id=47541152</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47541152</guid></item><item><title><![CDATA[New comment by rjknight in "Network of Scottish X accounts go dark amid Iran blackout"]]></title><description><![CDATA[
<p>Doesn’t that also create a kind of immunity, though? If what I see is a cacophony of differing views, then I am unlikely to be influenced by any particular sock puppet account.<p>Whereas a community that tends towards groupthink might have a narrower range of views, but if those views begin to shift in a particular direction then it’s much harder for those who are disadvantaged by that shift to resist, because to do so requires violating the norms of groupthink.<p>I’m not sure which is better. My own preference is to tolerate a wide range of views in return for robust disagreement being the norm, but I can imagine some (most?) people preferring the opposite.</p>
]]></description><pubDate>Tue, 13 Jan 2026 13:09:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=46600487</link><dc:creator>rjknight</dc:creator><comments>https://news.ycombinator.com/item?id=46600487</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46600487</guid></item><item><title><![CDATA[New comment by rjknight in "Damn Small Linux"]]></title><description><![CDATA[
<p>I wonder if it would be possible to have gone directly to Zed, without going through Atom first (likewise, Plan 9 would never have been the <i>first</i> iteration of a Unix-like OS). "Rewrite it in Rust" makes a lot of sense if you have a working system that you want to rewrite, but maybe there's a reason that "rewrite it in Rust" is a meme and "write it in Rust" isn't. If you just want to move fast, put things up on the screen for people to interact with, and figure out how you want your system to work, dynamic languages with bytecode VMs and GC will get you there faster and will enable more people to contribute. Once the idea has matured, you can replace the inefficient implementation with one that is 10% of the size and 10x the speed. Adding lots of features and then pruning out the ones that turn out to be useless may also be easier than guessing the exact right feature set a priori.</p>
]]></description><pubDate>Sat, 13 Dec 2025 11:13:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=46253751</link><dc:creator>rjknight</dc:creator><comments>https://news.ycombinator.com/item?id=46253751</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46253751</guid></item><item><title><![CDATA[New comment by rjknight in "Google's new 'Aluminium OS' project brings Android to PC"]]></title><description><![CDATA[
<p>No, we are using this thing called a <i>metaphor</i>. What's being compared is the <i>relationship</i> between the hangman and the ropemaker, and the relationship between the app developer and the OS vendor. There is no comparison between taking screenshots and hanging people.</p>
]]></description><pubDate>Tue, 25 Nov 2025 15:14:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=46046485</link><dc:creator>rjknight</dc:creator><comments>https://news.ycombinator.com/item?id=46046485</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46046485</guid></item><item><title><![CDATA[New comment by rjknight in "What's Behind the Mysterious Ancient Wall in the Gobi Desert?"]]></title><description><![CDATA[
<p>Surely the answer is "the other side of the Gobi Desert".</p>
]]></description><pubDate>Mon, 20 Oct 2025 09:09:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=45641645</link><dc:creator>rjknight</dc:creator><comments>https://news.ycombinator.com/item?id=45641645</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45641645</guid></item><item><title><![CDATA[Study of 1M-year-old skull points to earlier origins of modern humans]]></title><description><![CDATA[
<p>Paper: <a href="https://www.science.org/doi/10.1126/science.ado9202" rel="nofollow">https://www.science.org/doi/10.1126/science.ado9202</a></p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45510582">https://news.ycombinator.com/item?id=45510582</a></p>
<p>Points: 124</p>
<p># Comments: 179</p>
]]></description><pubDate>Wed, 08 Oct 2025 00:17:21 +0000</pubDate><link>https://www.theguardian.com/science/2025/sep/25/study-of-1m-year-old-skull-points-to-earlier-origins-of-modern-humans</link><dc:creator>rjknight</dc:creator><comments>https://news.ycombinator.com/item?id=45510582</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45510582</guid></item><item><title><![CDATA[New comment by rjknight in "Way past its prime: how did Amazon get so rubbish?"]]></title><description><![CDATA[
<p>I always think of it as the "Perez plateau"[1], but I will grant that this is less catchy.<p>[1]: <a href="https://www.researchgate.net/figure/Phases-of-the-S-Curve-Perez-C-2001_fig6_273741542" rel="nofollow">https://www.researchgate.net/figure/Phases-of-the-S-Curve-Pe...</a></p>
]]></description><pubDate>Sun, 05 Oct 2025 07:31:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=45479592</link><dc:creator>rjknight</dc:creator><comments>https://news.ycombinator.com/item?id=45479592</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45479592</guid></item><item><title><![CDATA[UK and US line up string of deals to build modular nuclear reactors in Britain]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.theguardian.com/business/2025/sep/15/uk-and-us-line-up-string-of-deals-to-build-modular-nuclear-reactors-in-britain">https://www.theguardian.com/business/2025/sep/15/uk-and-us-line-up-string-of-deals-to-build-modular-nuclear-reactors-in-britain</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45247611">https://news.ycombinator.com/item?id=45247611</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Mon, 15 Sep 2025 09:03:29 +0000</pubDate><link>https://www.theguardian.com/business/2025/sep/15/uk-and-us-line-up-string-of-deals-to-build-modular-nuclear-reactors-in-britain</link><dc:creator>rjknight</dc:creator><comments>https://news.ycombinator.com/item?id=45247611</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45247611</guid></item><item><title><![CDATA[New comment by rjknight in "The Big Oops in type systems: This problem extends to FP as well"]]></title><description><![CDATA[
<p>I think it depends a lot on the org. In enterprise software development, there's definitely a type of "business analyst" or "domain expert" who is capable of reading code, at least to the extent that the code resembles a flow chart. Clojure's small syntax means that it's fairly easy to write code that is obviously just a flow-chart in text form.</p>
]]></description><pubDate>Sat, 02 Aug 2025 23:52:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=44772791</link><dc:creator>rjknight</dc:creator><comments>https://news.ycombinator.com/item?id=44772791</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44772791</guid></item><item><title><![CDATA[New comment by rjknight in "The Big Oops in type systems: This problem extends to FP as well"]]></title><description><![CDATA[
<p>The "domain expert" is the business-person who is, it is suggested, more capable of reading and comprehending the Clojure code than the Haskell code.<p>Since there is an equivalence between types and propositions, the Clojure program also models a "type", in the sense that the (valid) inputs to the program are obviously constrained by what the program can (successfully) process. One ought, in principle, to be able to transform between the two, and generate (parts of) one from the other.<p>We do a limited form of this when we do type inference. There are also (more limited) cases where we can generate code from type signatures.<p>I think op's point is that the Clojure code, which lays the system out as a process with a series of decision points, is closer to the mental model of the domain expert than the Haskell code which models it as a set of types. This seems plausible to me, although it's obviously subjective (not all domain experts are alike!).<p>The secondary point is that the Clojure system may be more malleable - if you want to add a new state, you just directly add some code to handle that state at the appropriate points in the process. The friction here is indeed lower. But this does give up some safety in cases where you have failed to grasp how the system works; a type system is more likely to complain if your change introduces an inconsistency. The cost of that safety is that you have two representations of how the system works: the types and the logic, and you can't experiment with different logic in a REPL-like environment until you have fully satisfied the type-checker. Obviously a smarter system might allow the type-checker to be overridden in such cases (on a per-REPL-session basis, rather than by further editing the code) but I'm not aware of any systems that actually do this.</p>
]]></description><pubDate>Sat, 02 Aug 2025 19:57:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=44770860</link><dc:creator>rjknight</dc:creator><comments>https://news.ycombinator.com/item?id=44770860</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44770860</guid></item><item><title><![CDATA[New comment by rjknight in "Base58 versus Base85 Encoding"]]></title><description><![CDATA[
<p>One of the neat properties of base58 (and, strictly speaking, of base62 as well) is that it does not contain any characters that require special encoding to be used in either a URL or a filename. Nor does it contain any characters that are considered to be "word-breaking" by most user interfaces, so you can do things like double-click on a base58 string to select the entire string. Base64 has none of the above properties, while being only very slightly more efficient.</p>
]]></description><pubDate>Sun, 27 Jul 2025 15:15:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=44701933</link><dc:creator>rjknight</dc:creator><comments>https://news.ycombinator.com/item?id=44701933</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44701933</guid></item><item><title><![CDATA[New comment by rjknight in "The patterns of elites who conceal their assets offshore"]]></title><description><![CDATA[
<p>"I want an end to corruption, or a chance to participate in it!"</p>
]]></description><pubDate>Thu, 17 Jul 2025 20:01:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=44597534</link><dc:creator>rjknight</dc:creator><comments>https://news.ycombinator.com/item?id=44597534</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44597534</guid></item><item><title><![CDATA[New comment by rjknight in "Avoiding skill atrophy in the age of AI"]]></title><description><![CDATA[
<p>It's weird, but LLMs really do gamify the experience of doing software engineering properly. With a much faster feedback loop, you can see immediate benefits from having better specs, writing more tests, and keeping modules small.</p>
]]></description><pubDate>Fri, 25 Apr 2025 14:51:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=43794202</link><dc:creator>rjknight</dc:creator><comments>https://news.ycombinator.com/item?id=43794202</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43794202</guid></item><item><title><![CDATA[New comment by rjknight in "Avoiding skill atrophy in the age of AI"]]></title><description><![CDATA[
<p>One thing I've noticed about working with LLMs is that it's forcing me to get _better_ at explaining my intent and fully understanding a problem before coding. Ironically, I'm getting <i>less</i> vibey because I'm using LLMs.<p>The intuition is simple: LLMs are a force multiplier for the coding part, which means that they will produce code faster than I will alone. But that means that they'll also produce _bad_ code faster than I will alone (where by "bad" I mean "code which doesn't really solve the problem, due to some fundamental misunderstanding").<p>Previously I would often figure a problem out by trying to code a solution, noticing that my approach doesn't work or has unacceptable edge-cases, and then changing track. I find it harder to do this with an LLM, because it's able to produce large volumes of code faster than I'm able to notice subtle problems, and by the time I notice them there's a sufficiently large amount of code that the LLM struggles to fix it.<p>Instead, now I have to do a lot more "hammock time" thinking. I have to be able to give the LLM an explanation of the system's requirements that is sufficiently detailed and robust that I can be confident that the resulting code will make sense. It's possible that some of my coding skills might atrophy - in a language like Rust with lots of syntactic features, I might start to forget the precise set of incantations necessary to do something. But, corresponding, I have to get <i>better</i> at reasoning about the system at a slightly higher level of abstraction, otherwise I'm unable to supervise the LLM effectively.</p>
]]></description><pubDate>Fri, 25 Apr 2025 12:08:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=43792740</link><dc:creator>rjknight</dc:creator><comments>https://news.ycombinator.com/item?id=43792740</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43792740</guid></item><item><title><![CDATA[New comment by rjknight in "Forecaster reacts: METR's bombshell paper about AI acceleration"]]></title><description><![CDATA[
<p>I think it depends on whether you think there's low-hanging fruit in making the ML stack more efficient, or not.<p>LLMs are still somewhat experimental, with various parts of the stack being new-ish, and therefore relatively un-optimised compared to where they <i>could</i> be. Let's say we took 10% of the training compute budget, and spent it on an army of AI coders whose job is to make the training process 12% more efficient. Could they do it? Given the relatively immature state of the stack, it sounds plausible to me (but it would depend a <i>lot</i> on having the right infrastructure and practices to make this work, and <i>those</i> things are also immature).<p>The bull case would be the assumption that there's some order-of-magnitude speedup available, or possibly multiple such, but that finding it requires a lot of experimentation of the kind that tireless AI engineers might excel at. The bear case is that efficiency gains will be small, hard-earned, or specific to some rapidly-obsoleting architecture. Or, that efficiency gains will look good until the low-hanging fruit is gone, at which point they become weak again.</p>
]]></description><pubDate>Tue, 22 Apr 2025 07:40:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=43759919</link><dc:creator>rjknight</dc:creator><comments>https://news.ycombinator.com/item?id=43759919</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43759919</guid></item><item><title><![CDATA[New comment by rjknight in "Civet: A Superset of TypeScript"]]></title><description><![CDATA[
<p>Some of these seem good to me:<p>- "everything is an expression" is a nicer solution for conditional assignments and returns than massive ternary expressions<p>- the pipe operator feels familiar from Elixir and is somewhat similar to Clojure's threading macros.<p>- being able to use the spread operator in the middle of an array? Sure, I guess.<p>I <i>want</i> to like the pattern matching proposal, but the syntax looks slightly too minimal.<p>The other proposals are either neutral or bad, in my opinion. Custom infix operators? Unbraced object literals? I'm not sure that anyone has a problem that these things solve, other than trying to minimize the number of characters in their source code.<p>Still, I'm glad that this exists, because allowing people to play with these things and learn from them is a good way to figure out which proposals are worth pursuing. I just won't be using it myself.</p>
]]></description><pubDate>Tue, 22 Oct 2024 00:02:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=41909832</link><dc:creator>rjknight</dc:creator><comments>https://news.ycombinator.com/item?id=41909832</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41909832</guid></item><item><title><![CDATA[New comment by rjknight in "Why Gov.uk's Exit this Page component doesn't use the Escape key"]]></title><description><![CDATA[
<p>I would really like to know whether this feature gets any (non-accidental) use. It's certainly an important problem to solve, and I can see the technical merit in the solution proposed. What I'm left wondering is how this solution is most effectively communicated to the people who need to know about it, such that they're able to make use of it correctly in the critical moments when they need to use it. For obvious reasons there are probably no good statistics on this, but I wonder what the user research was like.</p>
]]></description><pubDate>Thu, 10 Oct 2024 01:03:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=41794524</link><dc:creator>rjknight</dc:creator><comments>https://news.ycombinator.com/item?id=41794524</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41794524</guid></item><item><title><![CDATA[New comment by rjknight in "Zod: TypeScript-first schema validation with static type inference"]]></title><description><![CDATA[
<p>Valibot is really nice, particularly for avoiding bundle size bloat. Because Zod uses a "fluent builder" API, all of Zod's functionality is implemented in classes with many methods. Importing something like `z.string` also imports validators to check if the string is a UUID, email address, has a minimum or maximum length, matches a regex, and so on - even if none of those validators are used. Valibot makes these independent functions that are composed using the "pipe" function, which means that only the functions which are actually used need to be included in your JavaScript bundle. Since most apps use only a small percentage of the available validators, the bundle size reduction can be quite significant relative to Zod.</p>
]]></description><pubDate>Wed, 09 Oct 2024 17:25:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=41790395</link><dc:creator>rjknight</dc:creator><comments>https://news.ycombinator.com/item?id=41790395</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41790395</guid></item><item><title><![CDATA[Interface design in the age of qualiatech: Do you want to be a button?]]></title><description><![CDATA[
<p>Article URL: <a href="https://smoothbrains.net/posts/2024-07-19-qualiatech.html">https://smoothbrains.net/posts/2024-07-19-qualiatech.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=41054432">https://news.ycombinator.com/item?id=41054432</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 24 Jul 2024 07:26:42 +0000</pubDate><link>https://smoothbrains.net/posts/2024-07-19-qualiatech.html</link><dc:creator>rjknight</dc:creator><comments>https://news.ycombinator.com/item?id=41054432</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41054432</guid></item><item><title><![CDATA[New comment by rjknight in "My grandfather Paul Tillich, the unbelieving theologian"]]></title><description><![CDATA[
<p>It's also worth bearing in mind that much theology is an attempt to explain what the <i>experience</i> of God is like. The experience of God is not (for Tillich, nor perhaps for very many moderns) about finding a literal place and time in which God-the-being can be directly observed. To seek God and expect to find a being who exists in the same manner as a tree or a building is to set oneself up for failure.<p>When Tillich says "The courage to be is rooted in the God who appears when God has disappeared in the anxiety of doubt" he is describing the psychological process the seeker undergoes. In his case, he identifies God with the open, reflective cast of mind in which one engages with the unknowable, ineffable, combinatorally-explosive possibilities that are found at the horizons of our understanding. The "state of being grasped by an ultimate concern" is one in which we are trying - and necessarily failing - to see beyond the horizon. And yet, something sustains us in the effort, which is faith in God.<p>Doubtless this really <i>is</i> a very different kind of faith than other self-described Christians might have, whose faith might be rooted in a different mode of being and engagement with the world. And, to be clear, Tillich's description is very much "what it's like" to have his variety of faith, and not a metaphysical claim about the workings of the universe. A different Christian might hold much stronger claims about God's precise nature and existence, but for Tillich those beliefs were unsustainable.</p>
]]></description><pubDate>Fri, 22 Mar 2024 14:56:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=39791343</link><dc:creator>rjknight</dc:creator><comments>https://news.ycombinator.com/item?id=39791343</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39791343</guid></item></channel></rss>