<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: eyelidlessness</title><link>https://news.ycombinator.com/user?id=eyelidlessness</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Tue, 14 Apr 2026 16:49:49 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=eyelidlessness" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by eyelidlessness in "Rob Pike's 5 Rules of Programming"]]></title><description><![CDATA[
<p>I agree. And I think this also distills down to Rob Pike’s rule 5, or something quite like it. If your design prioritizes modeling the domain’s data, shaping algorithms around that model, it’s usually trivial to determine how likely some “duplication” is operating on shared concepts, versus merely following a similar pattern. It may even help you refine the data model itself when confronted with the question.</p>
]]></description><pubDate>Wed, 18 Mar 2026 15:08:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=47426719</link><dc:creator>eyelidlessness</dc:creator><comments>https://news.ycombinator.com/item?id=47426719</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47426719</guid></item><item><title><![CDATA[New comment by eyelidlessness in "Every layer of review makes you 10x slower"]]></title><description><![CDATA[
<p>It’s a muscle you can exercise, and doing so helps you learn what to focus on so it’ll be successful. IME a very successful approach is to focus on interfaces, especially at critical boundaries (critical for your use case first, then critical for your existing design/architecture).<p>Doing this often settles the design direction in a stable way early on. More than that, it often reveals a lot of the harder questions you’ll need to answer: domain constraints and usage expectations.<p>Putting this kind of work upfront can save an enormous amount of time and energy by precluding implementation work on the wrong things, and ruling out problematic approaches for both the problem at hand as well as a project’s longer term goals.</p>
]]></description><pubDate>Tue, 17 Mar 2026 15:03:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=47413692</link><dc:creator>eyelidlessness</dc:creator><comments>https://news.ycombinator.com/item?id=47413692</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47413692</guid></item><item><title><![CDATA[New comment by eyelidlessness in "The Gleam Programming Language"]]></title><description><![CDATA[
<p>The point of a type system isn’t ever that you don’t have to check the things that make a value represent the type you intend to assign it. The point is to encode <i>precisely</i> the things that you need to be true for that assignment to succeed <i>correctly</i>. If everything is in fact modeled as an Option, then yes you have to check each thing for Some before accessing its value.<p>The type is a way to communicate (to the compiler, to other devs, to future you) that those are the expected invariants.<p>The check for invariants is trivial as you say. The value of types is in expressing <i>what those invariants are</i> in the first place.</p>
]]></description><pubDate>Wed, 14 Jan 2026 15:15:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=46616961</link><dc:creator>eyelidlessness</dc:creator><comments>https://news.ycombinator.com/item?id=46616961</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46616961</guid></item><item><title><![CDATA[New comment by eyelidlessness in "The Gleam Programming Language"]]></title><description><![CDATA[
<p>> But let’s dissect that last suggestion; suppose I do modify the type to encode that. Suddenly pretty much every field more or less just because Maybe/Optional. Once everything is Optional, you don’t really have a “type” anymore, you have a a runtime check of the type everywhere. This isn’t radically different than regular dynamic typing.<p>Of course it’s different. You have a type that accurately reflects your domain/data model. Doing that helps to ensure you know to implement the <i>necessary</i> runtime checks, <i>correctly</i>. It can also help you avoid implementing a lot of superfluous runtime checks for conditions you don’t expect to handle (and to treat those conditions as invariant violations instead).</p>
]]></description><pubDate>Wed, 14 Jan 2026 06:37:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=46613044</link><dc:creator>eyelidlessness</dc:creator><comments>https://news.ycombinator.com/item?id=46613044</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46613044</guid></item><item><title><![CDATA[New comment by eyelidlessness in "HTML-only conditional lazy loading (via preload and media)"]]></title><description><![CDATA[
<p>It’s not a hack, but you may find more documentation for the equivalent preload values expressed as a <link> tag. There is (near) parity between that and the HTTP Link header. The values used in the article should work in HTML as well.</p>
]]></description><pubDate>Sun, 11 Jan 2026 21:01:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=46580032</link><dc:creator>eyelidlessness</dc:creator><comments>https://news.ycombinator.com/item?id=46580032</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46580032</guid></item><item><title><![CDATA[New comment by eyelidlessness in "Deprecate like you mean it"]]></title><description><![CDATA[
<p>Disclaimer: I’m a strong advocate for static typing.<p>I absolutely see the connection. One of the advantages of static typing is that it makes a lot of refactoring trivial (or much more than it would be otherwise). One of the side effects of making anything more trivial is that people will be more inclined to do it, without thinking as much about the consequences. It shouldn’t be a surprise that, absent other safeguards to discourage it, people will translate trivial refactoring into unexpected breaking changes.<p>Moreover, they may do this consciously, on the basis that “it was trivial for me to refactor, it should be trivial to adapt downstream.” I’ll even admit to making exactly that judgment call, in exactly those terms. Granted I’m much less cavalier about it when the breaking changes affect people I don’t interface with on a regular basis. But I’m much less cavalier about that sort of impact <i>across the board</i> than I’ve observed in many of my peers.</p>
]]></description><pubDate>Thu, 11 Dec 2025 20:59:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=46237069</link><dc:creator>eyelidlessness</dc:creator><comments>https://news.ycombinator.com/item?id=46237069</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46237069</guid></item><item><title><![CDATA[New comment by eyelidlessness in "A surprise with how '#!' handles its program argument in practice"]]></title><description><![CDATA[
<p>It’s quite common, although I probably see it used more frequently to invoke other (non-shell) scripting languages.</p>
]]></description><pubDate>Thu, 20 Nov 2025 05:34:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=45989296</link><dc:creator>eyelidlessness</dc:creator><comments>https://news.ycombinator.com/item?id=45989296</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45989296</guid></item><item><title><![CDATA[New comment by eyelidlessness in "Experiment: Making TypeScript immutable-by-default"]]></title><description><![CDATA[
<p>You might want that, I might too. But it’s outside the constraints set by the post/author. They want to establish immutable semantics with unmodified TypeScript, which doesn’t have any effect on the semantics of assignment or built in prototypes.</p>
]]></description><pubDate>Tue, 18 Nov 2025 16:44:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=45968667</link><dc:creator>eyelidlessness</dc:creator><comments>https://news.ycombinator.com/item?id=45968667</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45968667</guid></item><item><title><![CDATA[New comment by eyelidlessness in "Marko – A declarative, HTML‑based language"]]></title><description><![CDATA[
<p>Marko’s compiler is designed for partial hydration (by default, without any special developer effort), which performs quite well. IIRC they were also looking at implementing “resumability” (term coined by Qwik, for an approach that sidesteps hydration as a concept entirely). I’m not sure where they’re at on that now, but I think it’s generally safe to say that Marko prioritizes load time performance more than nearly all other frameworks.</p>
]]></description><pubDate>Sun, 09 Nov 2025 00:11:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=45861520</link><dc:creator>eyelidlessness</dc:creator><comments>https://news.ycombinator.com/item?id=45861520</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45861520</guid></item><item><title><![CDATA[New comment by eyelidlessness in "John Carmack on mutable variables"]]></title><description><![CDATA[
<p>This is a fantastic way to put it, thank you for adding it!</p>
]]></description><pubDate>Sat, 01 Nov 2025 15:40:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=45782526</link><dc:creator>eyelidlessness</dc:creator><comments>https://news.ycombinator.com/item?id=45782526</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45782526</guid></item><item><title><![CDATA[New comment by eyelidlessness in "John Carmack on mutable variables"]]></title><description><![CDATA[
<p>I don’t agree with your characterization that anyone is “pretending”. The whole point of abstraction is convenience of reasoning. No one is fooling themselves or anyone else, nor trying to. It’s a conscious choice, for clear purposes. That’s precisely as hilarious as using another abstraction you might favor more, such as an effect system.</p>
]]></description><pubDate>Sat, 01 Nov 2025 15:39:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=45782522</link><dc:creator>eyelidlessness</dc:creator><comments>https://news.ycombinator.com/item?id=45782522</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45782522</guid></item><item><title><![CDATA[New comment by eyelidlessness in "John Carmack on mutable variables"]]></title><description><![CDATA[
<p>But there isn’t anything <i>hilarious</i> about that.<p>It’s a clear-minded and deliberate approach to reconciling principle with pragmatic utility. We can debate whether it’s the best approach, but it isn’t like… logically inconsistent, surprising, or lacking in self awareness.</p>
]]></description><pubDate>Fri, 31 Oct 2025 17:47:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=45774704</link><dc:creator>eyelidlessness</dc:creator><comments>https://news.ycombinator.com/item?id=45774704</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45774704</guid></item><item><title><![CDATA[New comment by eyelidlessness in "John Carmack on mutable variables"]]></title><description><![CDATA[
<p>> Sometimes they even fail to even realise that it's what they are doing.<p>Because that’s not what they’re doing. They’re <i>isolating</i> state in a systemic, predictable way.</p>
]]></description><pubDate>Fri, 31 Oct 2025 15:14:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=45772941</link><dc:creator>eyelidlessness</dc:creator><comments>https://news.ycombinator.com/item?id=45772941</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45772941</guid></item><item><title><![CDATA[New comment by eyelidlessness in "NaN, the not-a-number number that isn't NaN"]]></title><description><![CDATA[
<p>To some extent you’ve answered this yourself: TypeScript (and/or linting) <i>is</i> the way to be warned about this. Aside from the points in sibling comment (also correct), adding these kinds of runtime checks would have performance implications that I don’t think could be taken lightly. But it’s not really necessary: static analysis tools designed for this are already great, you just have to use them!</p>
]]></description><pubDate>Thu, 30 Oct 2025 21:08:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=45765383</link><dc:creator>eyelidlessness</dc:creator><comments>https://news.ycombinator.com/item?id=45765383</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45765383</guid></item><item><title><![CDATA[New comment by eyelidlessness in "NaN, the not-a-number number that isn't NaN"]]></title><description><![CDATA[
<p>This is a matter of choice, not something with an objectively correct answer. Every possible answer has trade offs. I think consistency with the underlying standard defining NaN probably has better tradeoffs in general, and more specific answers can always be built on top of that.<p>That said, I don’t think undefined in JS has the colloquial meaning you’re using here. The tradeoffs would be potentially <i>much more confusing and error prone</i> for that reason alone.<p>It might be more “correct” (logically; standard aside) to throw, as others suggest. But that would have considerable ergonomic tradeoffs that might make code implementing simple math <i>incredibly</i> hard to understand in practice.<p>A language with better error handling ergonomics overall might fare better though.</p>
]]></description><pubDate>Thu, 30 Oct 2025 15:19:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=45761007</link><dc:creator>eyelidlessness</dc:creator><comments>https://news.ycombinator.com/item?id=45761007</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45761007</guid></item><item><title><![CDATA[New comment by eyelidlessness in "Unconventional Ways to Cast in TypeScript"]]></title><description><![CDATA[
<p>It’s not even safe if you’re 100% sure the types are compatible, unless you’re also 100% sure nothing will change that fact. The reason it’s unsafe is because it suppresses the type error permanently, even if whatever factors led to your certainty <i>now</i> change anywhere upstream <i>ever</i>.<p>There are certainly ways to guard against that, but most of them involve some amount of accepting that the type checker produces errors for a reason.</p>
]]></description><pubDate>Thu, 23 Oct 2025 19:45:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=45686130</link><dc:creator>eyelidlessness</dc:creator><comments>https://news.ycombinator.com/item?id=45686130</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45686130</guid></item><item><title><![CDATA[New comment by eyelidlessness in "Working pipe operator today in pure JavaScript"]]></title><description><![CDATA[
<p>Thank you for clarifying. (I think?)<p>I think what confused me is the passive language: "everything gets converted" sounds (to me) like the runtime or some aspect of language semantics is converting everything, rather than developers. Whereas this is the same complaint I mentioned.</p>
]]></description><pubDate>Wed, 08 Oct 2025 18:31:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=45519155</link><dc:creator>eyelidlessness</dc:creator><comments>https://news.ycombinator.com/item?id=45519155</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45519155</guid></item><item><title><![CDATA[New comment by eyelidlessness in "Working pipe operator today in pure JavaScript"]]></title><description><![CDATA[
<p>Right, but I’m not clear on what gets <i>converted</i> to an array. Do you mean more or less what I said in my previous comment? That it requires <i>you</i> (your code, or calling code in general) to perform that conversion excessively?</p>
]]></description><pubDate>Wed, 08 Oct 2025 16:49:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=45518148</link><dc:creator>eyelidlessness</dc:creator><comments>https://news.ycombinator.com/item?id=45518148</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45518148</guid></item><item><title><![CDATA[New comment by eyelidlessness in "Working pipe operator today in pure JavaScript"]]></title><description><![CDATA[
<p>> everything gets converted to an array at the drop of a hat<p>Can you name an example? IME the opposite is a more common complaint: needing to explicitly convert values to arrays from many common APIs which return eg iterables/iterators.</p>
]]></description><pubDate>Wed, 08 Oct 2025 16:11:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=45517747</link><dc:creator>eyelidlessness</dc:creator><comments>https://news.ycombinator.com/item?id=45517747</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45517747</guid></item><item><title><![CDATA[New comment by eyelidlessness in "XSLT removal will break multiple government and regulatory sites"]]></title><description><![CDATA[
<p>Context: until fairly recently, I worked an implementation of XForms (as the project creator, and leading most of the architecture/design). Prior to that, I inherited maintenance of another implementation, which utilized XSLT[1] as a core aspect of its design.<p>I’m curious if you could describe more about what you envision. I have a difficult time imagining:<p>1. How the stateful/interactive aspects of XForms (such as insert/delete, as you mention) would be implemented client side without JS.<p>2. How XSLT factors into that vision.<p>It might be lack of imagination on my part! Admittedly, I don’t know everything about XSLT and maybe it has more interactive capabilities than I’m aware of. But at least as far as I know, when a browser vendor did implement XForms functionality it still ultimately depended on JS to achieve certain behaviors. It’s been a while since I was looking into this, but IIRC it looked conceptually similar to XUL. And granted, that might mean the JS is provided by a browser, and encapsulated from user space similar to browsers’ use of shadow DOM for standard form controls now.<p>1: I also have good reason to believe my work on this prior project helped keep XSLT alive in Chrome the last time there was a major push to deprecate it! Albeit totally inadvertently: my work just happened to correlate very closely to a spike in usage metrics around the same time, which was then cited as a reason to hold off on deprecation.</p>
]]></description><pubDate>Fri, 22 Aug 2025 18:27:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=44987968</link><dc:creator>eyelidlessness</dc:creator><comments>https://news.ycombinator.com/item?id=44987968</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44987968</guid></item></channel></rss>