<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: IceDane</title><link>https://news.ycombinator.com/user?id=IceDane</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sun, 21 Jun 2026 16:47:13 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=IceDane" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by IceDane in "Developers don't understand CORS (2019)"]]></title><description><![CDATA[
<p>Like the sibling said: CORS is the relaxation of default security features. It's even in the name: Cross-Origin Resource Sharing.</p>
]]></description><pubDate>Sun, 21 Jun 2026 09:12:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=48617068</link><dc:creator>IceDane</dc:creator><comments>https://news.ycombinator.com/item?id=48617068</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48617068</guid></item><item><title><![CDATA[New comment by IceDane in "The $15,000 AI Bill. Your $20 Subscription is a DELUSION [video]"]]></title><description><![CDATA[
<p>> According to my rough computation (N=1), a Claude Max 20x at $200 gives you access to around $8k<p>According to my own personal `cc-usage` script, I'm just about to hit $15k in the past 30 days, and that's about half 5x and half 20x. And I'm not someone running openclaw or letting my agents spin around 24/7 - this is just very active agentic coding, where I'm constantly involved.</p>
]]></description><pubDate>Thu, 11 Jun 2026 20:06:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=48495728</link><dc:creator>IceDane</dc:creator><comments>https://news.ycombinator.com/item?id=48495728</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48495728</guid></item><item><title><![CDATA[New comment by IceDane in "My thoughts after using Clojure for about a month"]]></title><description><![CDATA[
<p>> I don't see an asymmetry in the abstraction. Both vectors and maps are associative structures - you can assign a key to a value - the only difference is that vectors have a more constrained keyspace (i.e. ordered, consecutive integers starting from zero).<p>The asymmetry lies in the fact that it's an overloaded function that's supposed to do the right things every time, but in some cases, it does what is arguably the wrong thing, silently, and in others, it refuses to do the wrong thing and fails loudly. It's better that it fails loudly, of course, but the point is that the ergonomics of the abstraction is lessened because you can't just assume it will work. You effectively have to keep the types of all the things involved in your head and/or trace them to ensure that you don't run into a crash.<p>> We can see that the return type of this expression is obviously an integer, but what is the type of m<i>? How do we type m</i> such that (:number m*) can be inferred to be an integer by the compiler?<p>This is trivial in TypeScript. You can see it in action here: <a href="https://www.typescriptlang.org/play/?#code/MYewdgzgLgBAtjAvDA3jMBDOBTAXDAIgHdsMA3bAK22mwCcCAaGDYKASwvyjoFdsYAXwDcAKFGhIsOAGUoGOklQwAdGrjMwvOACN6+AMxCxAehMwLMAHoB+cZOgwAHktny6Krbvqnzl20A" rel="nofollow">https://www.typescriptlang.org/play/?#code/MYewdgzgLgBAtjAvD...</a><p><pre><code>  const m = { name: "weavejester", active: true };

  const mStar = { ...m, number: 3 };
  //    ^? const mStar: { number: number, name: string, active: boolean }

  const x = mStar.number;
  //    ^? const x: number
</code></pre>
> This is the ultimate problem with static type systems: you're trading capability for safety. If you're programming within a static type system, there are options that are simply not available or feasible to use.<p>This is just not true. It's true for some certain specific static type systems, but not true in general, and that brings me back to my original thesis: You just need a sufficiently capable type system with the right properties - structural/row polymorphism, ish, plus type inference. And also my Haskell point: it doesn't have to be an incredibly complicated type system that is beyond mortal ken. TypeScript is already doing this and it's arguably one of the most used programming languages on earth.</p>
]]></description><pubDate>Sat, 06 Jun 2026 10:28:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=48423467</link><dc:creator>IceDane</dc:creator><comments>https://news.ycombinator.com/item?id=48423467</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48423467</guid></item><item><title><![CDATA[New comment by IceDane in "My thoughts after using Clojure for about a month"]]></title><description><![CDATA[
<p>It's not about "knowing" anything. It's about admitting that humans are fallible meat computers that can't hold invariants in their head across thousands or millions of lines of code and possibly an exponential number of interactions. It's using the technology we are capable of building to help us because it's the <i>obvious</i> thing to do. The notion of dynamic typing as an attractive programming model hinges entirely on the hypothesis that it lets you somehow express things that you need or want to be able to express that static typing prevents you from doing, and that is demonstrably false. The `assoc` example above is a perfect example.</p>
]]></description><pubDate>Thu, 04 Jun 2026 22:25:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=48405466</link><dc:creator>IceDane</dc:creator><comments>https://news.ycombinator.com/item?id=48405466</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48405466</guid></item><item><title><![CDATA[New comment by IceDane in "My thoughts after using Clojure for about a month"]]></title><description><![CDATA[
<p>The problem with your counter-argument is that it hinges on a false premise: That you need or even want a function like `assoc` which is polymorphic over <i>everything</i>. It's an extremely overloaded function which does a lot of things at once, and in many circles and arguably in general within the realm of software design, this is considered a smell.<p>In practice, what you want is something that allows you to do this safely for the concrete type you're working with. If you want an abstraction that covers all of it, there are ways to achieve this in a type-safe manner, such as traits/type classes.  Even in clojure, you're not working with everything at once all the time. You are working with a record, or a vector, or whatever. The fact that you can use one function for all of them is mostly just needless cleverness.  In Clojure, you have to keep the type of the data you are working with in your head at all times, because even though `assoc` "just works" for many cases, that's not true in all cases. It will happily insert an integer key into a record without issue, which may or may not be waht you want. But you can also try to insert an atom key into a vector, which then crashes loudly. This is clearly an asymmetry in the abstraction.<p>Moreover, pointing out that Haskell cannot do what you'd want to do in this case doesn't make a lot of sense. I mentioned Haskell precisely because its type system is extremely powerful and complicated to understand for a lot of people, but still doesn't achieve the kind of flexibility we are looking for - it lacks row polymorphism.<p>To answer your actual question: Typing a function like that for the individual cases is bordering on trivial in a language such as typescript. For the record case, you don't even need it, because in practice, you get the correct type inference for free by just spreading one object into another.</p>
]]></description><pubDate>Thu, 04 Jun 2026 14:44:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=48399456</link><dc:creator>IceDane</dc:creator><comments>https://news.ycombinator.com/item?id=48399456</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48399456</guid></item><item><title><![CDATA[New comment by IceDane in "My thoughts after using Clojure for about a month"]]></title><description><![CDATA[
<p>"Until you get better" is such an arrogant take.<p>It's not just about skill. It's about maintainability, ease of refactor, and modeling invariants in your code in a way that they can be checked by the machine (the compiler) without every single developer having to maintain them in their head.<p>Clojure even knows this is an issue and many people use `spec` to sort of retrofit static typing.<p>Dynamic typing was, is and always will be a mistake. There is nothing you can do with dynamic typing that you cannot do with a sufficiently powerful static type system - and it doesn't have to be something absurd like Haskell's. You basically just need structural typing and type inference and some type-level programming constructs.<p>The worst part about Clojure is the community. Rich Hickey has cult-like status and the only thing clojurians can do is parrot his inane commentary.</p>
]]></description><pubDate>Wed, 03 Jun 2026 14:59:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=48385018</link><dc:creator>IceDane</dc:creator><comments>https://news.ycombinator.com/item?id=48385018</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48385018</guid></item><item><title><![CDATA[New comment by IceDane in "Algebraic Effects for the Rest of Us"]]></title><description><![CDATA[
<p>Effect is unreasonably effective. Pun etc.<p>The problem with these concepts is a) they are completely opaque to the common chud programmer and b) they are just not available to people in languages that anyone actually uses. There are a bunch of effect libraries in Haskell, even special efforts to make them work better in GHC, but it's nearly all wasted effort because it's just academic circlejerk.<p>Effect brings these capabilities to the masses by implementing them in the most popular programming language on the planet. Obviously, there is quite a learning curve -- it is essentially a programming language unto its own inside another programming language -- but it's doable. I've onboarded juniors with close to 0 FP experience into an Effect codebase. The guardrails help a lot. The language server which helps with best practices, the type errors themselves help quite a lot.<p>Arguably the best way to do Effect would be a separate programming language, but that would just give us the problems Haskell has: nobody would use since there would be no ecosystem, and there will be no ecosystem since nobody would use it.</p>
]]></description><pubDate>Sat, 30 May 2026 09:02:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=48334184</link><dc:creator>IceDane</dc:creator><comments>https://news.ycombinator.com/item?id=48334184</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48334184</guid></item><item><title><![CDATA[New comment by IceDane in "Claude Code as a Daily Driver: Claude.md, Skills, Subagents, Plugins, and MCPs"]]></title><description><![CDATA[
<p>Is this really a position you want to take in public with your real name and identity and everything plastered over your profile?</p>
]]></description><pubDate>Wed, 27 May 2026 09:50:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=48291904</link><dc:creator>IceDane</dc:creator><comments>https://news.ycombinator.com/item?id=48291904</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48291904</guid></item><item><title><![CDATA[New comment by IceDane in "Moving away from Tailwind, and learning to structure my CSS"]]></title><description><![CDATA[
<p>No.. that's not the only reason.<p>Global state is bad because it makes it hard to reason about your system. The global state can affect any part of it, or, focusing on the inverse which is probably better applied to global styles, any part of your system can depend on the global state.<p>It's also weird to say "global styles are not mutable" - you're right, they're (generally) not mutable, at runtime. But they are mutable in the sense that your developers (you, or your colleagues, or someone in 3 years maintaining your code) can mutate them, and if large parts of your system are implicitly dependent on the CSS cascading properly and so on, then those changes can have unintended consequences.<p>Of course, that can also apply to tailwind, to some extent. A developer can change a class (custom or otherwise) or the configuration - but at least it is very clear what is being changed and what parts will be affected (just grep).</p>
]]></description><pubDate>Sat, 16 May 2026 17:36:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=48162197</link><dc:creator>IceDane</dc:creator><comments>https://news.ycombinator.com/item?id=48162197</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48162197</guid></item><item><title><![CDATA[New comment by IceDane in "I'm going back to writing code by hand"]]></title><description><![CDATA[
<p>This doesn't make any sense to me.<p>The problem with this dev's approach is not AI, it's their use of it. They didn't ensure that the architecture made sense. They didn't look at the code and get a "feel" for it. They didn't do the whole build stuff, step back, refactor, rinse and repeat dance. The need for that hasn't gone away; if anything, it's even more important now. Because you can spit out code 100x faster than you could before, your tech debt compounds 100x faster. The earlier you refactor, the less work it is.<p>I usually give the agent a solid idea of what I want, often down to the API interfaces. Then every now and then, I'll go through the code and ensure that everything makes sense, and that I'm not just spitting out code that works, but building a codebase that scales.</p>
]]></description><pubDate>Mon, 11 May 2026 13:40:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=48094875</link><dc:creator>IceDane</dc:creator><comments>https://news.ycombinator.com/item?id=48094875</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48094875</guid></item><item><title><![CDATA[New comment by IceDane in "I'm going back to writing code by hand"]]></title><description><![CDATA[
<p>Runs smoothly for me in Zen (FF) on Linux.</p>
]]></description><pubDate>Mon, 11 May 2026 12:07:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=48093942</link><dc:creator>IceDane</dc:creator><comments>https://news.ycombinator.com/item?id=48093942</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48093942</guid></item><item><title><![CDATA[New comment by IceDane in "I Will Never Use AI to Code"]]></title><description><![CDATA[
<p>As much as I also enjoyed the actual coding part, a lot of it is just .. boring plumbing. I enjoy solving the problems - designing the solutions, the algorithms, choosing the right tech, coming up with nice abstractions.<p>When doing agentic development, you need to be in control, at least for now. Every frontier model will still do incredibly stupid stuff, and if you let it cook unchallenged, you'll have a codebase that doesn't scale. Claude will happily keep piling turds upon your tower of turds, but at some point, even an LLM will have a hard time working in it.<p>When you are at the wheel, the engineering hasn't changed. You're still solving all the same problems, but you can iterate a lot faster. Code is now ~free, and the cost of having a bad idea is now much cheaper, because you can quite literally speak the solution out loud and fix it in a few minutes.</p>
]]></description><pubDate>Sat, 09 May 2026 07:02:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=48072589</link><dc:creator>IceDane</dc:creator><comments>https://news.ycombinator.com/item?id=48072589</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48072589</guid></item><item><title><![CDATA[New comment by IceDane in "Mojo 1.0 Beta"]]></title><description><![CDATA[
<p>Only incredibly inexperienced people think indentation in python is a problem.</p>
]]></description><pubDate>Fri, 08 May 2026 06:50:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=48059557</link><dc:creator>IceDane</dc:creator><comments>https://news.ycombinator.com/item?id=48059557</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48059557</guid></item><item><title><![CDATA[New comment by IceDane in "Specsmaxxing – On overcoming AI psychosis, and why I write specs in YAML"]]></title><description><![CDATA[
<p>It's like horoscopes for the entirely-too-AI-pilled. Founded in nothing but vibes.<p>"Don't write prompts like that, do it like this! I swear it's better. Claude says so!"</p>
]]></description><pubDate>Sun, 03 May 2026 09:06:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=47994989</link><dc:creator>IceDane</dc:creator><comments>https://news.ycombinator.com/item?id=47994989</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47994989</guid></item><item><title><![CDATA[New comment by IceDane in "Meta's Pyrefly sabotages competing Python extensions without telling you"]]></title><description><![CDATA[
<p>Have you just completely retired your brain in favor of a bidirectional pipe to an LLM?</p>
]]></description><pubDate>Sat, 02 May 2026 17:47:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=47988649</link><dc:creator>IceDane</dc:creator><comments>https://news.ycombinator.com/item?id=47988649</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47988649</guid></item><item><title><![CDATA[New comment by IceDane in "AI should elevate your thinking, not replace it"]]></title><description><![CDATA[
<p>It's awful, and seeing even engineers I respected become so AI pilled they're shipping slop without review has made me lose respect for them. It also can't help but make me wonder: what am I missing? Am I holding it wrong? Am I too focused on irrelevant details?<p>So far, my conclusion is that while LLMs can be s productivity boost, you have to direct them carefully. They don't really care about friction and bad abstractions in your codebase and will happily keep piling cards on top of the crooked house of cards they've generated.<p>Just like before AI, you need a cycle of building and refactoring running on repeat with careful reviews. Otherwise you will end up with something that even an LLM will have a hard time working in.</p>
]]></description><pubDate>Mon, 27 Apr 2026 06:45:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=47918444</link><dc:creator>IceDane</dc:creator><comments>https://news.ycombinator.com/item?id=47918444</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47918444</guid></item><item><title><![CDATA[New comment by IceDane in "GoDaddy gave a domain to a stranger without any documentation"]]></title><description><![CDATA[
<p>How about reading the article?</p>
]]></description><pubDate>Sun, 26 Apr 2026 22:25:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=47915384</link><dc:creator>IceDane</dc:creator><comments>https://news.ycombinator.com/item?id=47915384</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47915384</guid></item><item><title><![CDATA[New comment by IceDane in "AI should elevate your thinking, not replace it"]]></title><description><![CDATA[
<p>It's staggering to me how many times I've heard this argument that LLMs are just the next level of abstraction. Some people are even comparing them to compilers.</p>
]]></description><pubDate>Sun, 26 Apr 2026 22:20:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=47915331</link><dc:creator>IceDane</dc:creator><comments>https://news.ycombinator.com/item?id=47915331</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47915331</guid></item><item><title><![CDATA[New comment by IceDane in "AI should elevate your thinking, not replace it"]]></title><description><![CDATA[
<p>Outsource manual labor, not your brain.</p>
]]></description><pubDate>Sun, 26 Apr 2026 22:19:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=47915313</link><dc:creator>IceDane</dc:creator><comments>https://news.ycombinator.com/item?id=47915313</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47915313</guid></item><item><title><![CDATA[New comment by IceDane in "An AI agent deleted our production database. The agent's confession is below"]]></title><description><![CDATA[
<p>This person is a card-carrying moron and has no idea how anything works. Even if we concede that maybe there should be some grace period or soft deletions or whatever..<p>Also, the post is 100% written by an LLM, which is ironic enough on its own. But that then makes it a bit more curious that you find this argument in this slop, because any LLM would say so. But if you badger it enough, it will concede to your demands, so you just know this clown was yelling at his LLM while writing this post.<p>He really should've thrown this post at a fresh session and asked for an honest, critical review.</p>
]]></description><pubDate>Sun, 26 Apr 2026 22:04:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=47915176</link><dc:creator>IceDane</dc:creator><comments>https://news.ycombinator.com/item?id=47915176</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47915176</guid></item></channel></rss>