<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: spankalee</title><link>https://news.ycombinator.com/user?id=spankalee</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Fri, 17 Apr 2026 09:46:47 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=spankalee" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by spankalee in "Lumina – a statically typed web-native language for JavaScript and WASM"]]></title><description><![CDATA[
<p>AssemblyScript seems to be seriously languishing these days, and the team has falling-outs with a lot of the Wasm ecosystem.</p>
]]></description><pubDate>Tue, 14 Apr 2026 18:41:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=47769562</link><dc:creator>spankalee</dc:creator><comments>https://news.ycombinator.com/item?id=47769562</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47769562</guid></item><item><title><![CDATA[New comment by spankalee in "Lumina – a statically typed web-native language for JavaScript and WASM"]]></title><description><![CDATA[
<p>Nice! I'm working on a similar language in some ways.<p>One decision I made is to specifically not compile to JS. JS/Wasm interop is good enough with Wasm GC that I made the choice to focus on Wasm-only constraints and semantics and not worry about how things like the types being wrong, or how ints translate to JS, how to handle null vs undefined, etc. JS GCs collect objects and cycles across the Wasm boundary, and with the JS string built-ins you can handle strings efficiently.<p>I couldn't load your demo, btw.</p>
]]></description><pubDate>Tue, 14 Apr 2026 18:39:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=47769532</link><dc:creator>spankalee</dc:creator><comments>https://news.ycombinator.com/item?id=47769532</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47769532</guid></item><item><title><![CDATA[New comment by spankalee in "A new spam policy for “back button hijacking”"]]></title><description><![CDATA[
<p>What about all the very legitimate uses of programmatically adding history entries?</p>
]]></description><pubDate>Tue, 14 Apr 2026 04:53:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=47761387</link><dc:creator>spankalee</dc:creator><comments>https://news.ycombinator.com/item?id=47761387</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47761387</guid></item><item><title><![CDATA[New comment by spankalee in "Someone bought 30 WordPress plugins and planted a backdoor in all of them"]]></title><description><![CDATA[
<p>I really wish that the FAIR package manager project had been successful, but they recently gave up after the WordPress drama died down.<p><a href="https://fair.pm/" rel="nofollow">https://fair.pm/</a><p>FAIR has a very interesting architecture, inspired by atproto, that I think has the potential to mitigate some of the supply-chain attacks we've seen recently.<p>In FAIR, there's no central package repository. Anyone can run one, like an atproto PDS. Packages have DIDs, routable across all repositories. There are aggregators that provide search, front-ends, etc. And like Bluesky, there are "labelers", separate from repositories and front-ends. So organizations like Socket, etc can label packages with their analysis in a first class way, visible to the whole ecosystem.<p>So you could set up your installer to ban packages flagged by Socket, or ones that recently published by a new DID, etc. You could run your own labeler with AI security analysis on the packages you care about. A specific community could build their own lint rules and label based on that (like e18e in the npm ecosystem.<p>Not perfect, but far better than centralized package managers that only get the features their owner decides to pay for.</p>
]]></description><pubDate>Mon, 13 Apr 2026 18:41:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=47756219</link><dc:creator>spankalee</dc:creator><comments>https://news.ycombinator.com/item?id=47756219</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47756219</guid></item><item><title><![CDATA[New comment by spankalee in "A perfectable programming language"]]></title><description><![CDATA[
<p>What is up with so many people doing weird capitalization now? Is this some Bay-tech flex? Alok writes their own name, and other names, with leading caps, but not the first word in sentences? It makes it so uncomfortable to read.</p>
]]></description><pubDate>Sun, 12 Apr 2026 23:02:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=47745429</link><dc:creator>spankalee</dc:creator><comments>https://news.ycombinator.com/item?id=47745429</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47745429</guid></item><item><title><![CDATA[New comment by spankalee in "The End of Eleventy"]]></title><description><![CDATA[
<p>I use Eleventy for nearly all of my static sites. Almost every project of mine has at least an 11ty internal docs site. I'm very happy that Eleventy has a home and Zach a job.<p>But my only thought on this is: Eleventy is an awesome name.</p>
]]></description><pubDate>Sun, 12 Apr 2026 02:26:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=47735660</link><dc:creator>spankalee</dc:creator><comments>https://news.ycombinator.com/item?id=47735660</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47735660</guid></item><item><title><![CDATA[New comment by spankalee in "Intel 486 CPU announced April 10, 1989"]]></title><description><![CDATA[
<p>With JS and CSS sites can last decades easily.</p>
]]></description><pubDate>Fri, 10 Apr 2026 15:07:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=47719283</link><dc:creator>spankalee</dc:creator><comments>https://news.ycombinator.com/item?id=47719283</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47719283</guid></item><item><title><![CDATA[New comment by spankalee in "Show HN: Tired of logic in useEffect, I built a class-based React state manager"]]></title><description><![CDATA[
<p>Reactivity and functional programming are orthogonal though.<p>And in most functional systems the one-time setup function would return the render function so the render function can close over state.<p>Which is pretty much what a class with fields, a constructor, and a render method give you.</p>
]]></description><pubDate>Thu, 09 Apr 2026 02:40:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=47698728</link><dc:creator>spankalee</dc:creator><comments>https://news.ycombinator.com/item?id=47698728</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47698728</guid></item><item><title><![CDATA[New comment by spankalee in "Show HN: Tired of logic in useEffect, I built a class-based React state manager"]]></title><description><![CDATA[
<p>Counterpoint: classes are a great way to bundle state and logic - which is exactly what UI components are - and components models should use classes <i>more</i>, not less.<p>React's "functional" components are simply poor approximations of classes. Instead of easy to read and reason about class fields, you put state in useState() function classes that are effectively named by their appearance order in source and who's current state you can't introspect with dev tools!<p>The component function mixes one-time setup (which should be a class constructor) with repeated render calls (which should be a method), so those of course have to be separated by putting the one-time work inside of a closure inside of the repeated should-have-been-a-callback function. Event listeners and other callbacks are another huge mess. Don't forget useMemo() or useCallback() (but which?).<p>It's actually quite mad.<p>And the differences between classical and prototypal inheritance basically don't even pop up under normal class usage in JS: just use class fields, don't mess with the prototype chain, and don't dynamically add or delete properties - all things that are how classical inheritance works - and things just work like you expect.</p>
]]></description><pubDate>Wed, 08 Apr 2026 23:53:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=47697674</link><dc:creator>spankalee</dc:creator><comments>https://news.ycombinator.com/item?id=47697674</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47697674</guid></item><item><title><![CDATA[New comment by spankalee in "EmDash – a spiritual successor to WordPress that solves plugin security"]]></title><description><![CDATA[
<p>So many WordPress sites don't have comments.</p>
]]></description><pubDate>Wed, 01 Apr 2026 19:21:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=47605318</link><dc:creator>spankalee</dc:creator><comments>https://news.ycombinator.com/item?id=47605318</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47605318</guid></item><item><title><![CDATA[New comment by spankalee in "EmDash – A spiritual successor to WordPress that solves plugin security"]]></title><description><![CDATA[
<p>It's a shame they don't seem to try to address the divide between CMS's and static sites.<p>Most WordPress sites could just be static, but WordPress has a nice editor interface, so they're not - unless you use a SSG plugin. Building that into the core workflow (which I believe Astro supports) and giving users a nice hosted editor that produces a static site would be welcome innovation.</p>
]]></description><pubDate>Wed, 01 Apr 2026 17:01:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=47603525</link><dc:creator>spankalee</dc:creator><comments>https://news.ycombinator.com/item?id=47603525</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47603525</guid></item><item><title><![CDATA[New comment by spankalee in "CodingFont: A game to help you pick a coding font"]]></title><description><![CDATA[
<p>I love this, but I really wish it were structured as a "Hot or Not" type of round robin system rather than a bracket.<p>Some fonts are close enough that I don't know if I'd choose one over the other consistently, and I'd be curious to see a percentage score of how much I like a particular font.</p>
]]></description><pubDate>Tue, 31 Mar 2026 04:03:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=47582613</link><dc:creator>spankalee</dc:creator><comments>https://news.ycombinator.com/item?id=47582613</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47582613</guid></item><item><title><![CDATA[New comment by spankalee in "Firefox introduces Split View: Two tabs side by side, right where you need them"]]></title><description><![CDATA[
<p>I find this handy in Chrome occasionally. Just confirms that BeOS had the right windowing features all along.<p>Two more OS-level windowing features I'd like to see in browsers:<p>- OS X like Expose that shows a preview of all tabs for a window. That would help me find a tab visually.<p>- A command to override the meaning of fullscreen to take over the whole tab, rather than be truly fullscreen. That would let me use other window management features with maximum video size within the window.</p>
]]></description><pubDate>Wed, 25 Mar 2026 04:10:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=47513127</link><dc:creator>spankalee</dc:creator><comments>https://news.ycombinator.com/item?id=47513127</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47513127</guid></item><item><title><![CDATA[New comment by spankalee in "Show HN: I took back Video.js after 16 years and we rewrote it to be 88% smaller"]]></title><description><![CDATA[
<p>That only works in React though.</p>
]]></description><pubDate>Tue, 24 Mar 2026 23:19:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=47510975</link><dc:creator>spankalee</dc:creator><comments>https://news.ycombinator.com/item?id=47510975</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47510975</guid></item><item><title><![CDATA[New comment by spankalee in "Qite.js – Frontend framework for people who hate React and love HTML"]]></title><description><![CDATA[
<p>Lit is not opinionated about your build system You can write Lit components in plain JS, going back to ES2015.<p>Our decorators aren't required - you can use the static properties block. If you think the DX is better with decorators... that's why we support them!<p>And we support TypeScript's "experimental" decorators and standard TC39 decorators, which are supported in TypeScript, Babel, esbuild, and recently SWC and probably more.<p>Regarding state: Lit makes it easier to write web components. How you architect those web components and where they store their state is up to you. You can stick to attributes and DOM if that's what you want. Some component sets out there make heavy use of data-only elements: something of a DSL in the DOM, like XML.<p>It just turns out that most developer and most apps have an easier time of presenting state in JS, since JS has much richer facilities for that.</p>
]]></description><pubDate>Tue, 24 Mar 2026 22:16:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=47510263</link><dc:creator>spankalee</dc:creator><comments>https://news.ycombinator.com/item?id=47510263</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47510263</guid></item><item><title><![CDATA[New comment by spankalee in "Box of Secrets: Discreetly modding an apartment intercom to work with Apple Home"]]></title><description><![CDATA[
<p>I did something a lot simpler than this to have some more control: I gave a Twilio number to the building manager for the door box, then had an app where I could give out codes to people. Valid codes responded with a "9" DTMF signal which opened the door, a "1" forwarded the call to my phone.</p>
]]></description><pubDate>Tue, 24 Mar 2026 16:44:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=47505508</link><dc:creator>spankalee</dc:creator><comments>https://news.ycombinator.com/item?id=47505508</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47505508</guid></item><item><title><![CDATA[New comment by spankalee in "Qite.js – Frontend framework for people who hate React and love HTML"]]></title><description><![CDATA[
<p>HTML simply can't represent the complex state of real apps. Moving state to HTML actually means keeping the state on the server and not representing it very well on the client.<p>That's an ok choice in some cases, but the web clearly moved on from that to be able to have richer interaction, and in a lot of cases, much easier development.</p>
]]></description><pubDate>Tue, 24 Mar 2026 16:21:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=47505055</link><dc:creator>spankalee</dc:creator><comments>https://news.ycombinator.com/item?id=47505055</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47505055</guid></item><item><title><![CDATA[New comment by spankalee in "No-build, no-NPM, SSR-first JavaScript framework if you hate React, love HTML"]]></title><description><![CDATA[
<p>The point of Lit is not to compete with React itself, but to build interoperable web components. If your app (Hi Beaker!) is only using one library/framework, and will only ever one one in eternity, then interoperability might not be a big concern. But if you're building components for multiple teams, mixing components from multiple teams, or ever deal with migrations, then interoperability might be hugely important.<p>Even so, Lit is widely used to build very complex apps (Beaker, as you know, Photoshop, Reddit, Home Assistant, Microsoft App Store, SpaceX things, ...).<p>Property bindings are just as ergonomic as attributes with the .foo= syntax, and tag name declaration has rarely come up as a big friction point, especially with the declarative @customElement() decorator. The rest is indeed like a faster less proprietary React in many ways.</p>
]]></description><pubDate>Tue, 24 Mar 2026 16:17:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=47504995</link><dc:creator>spankalee</dc:creator><comments>https://news.ycombinator.com/item?id=47504995</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47504995</guid></item><item><title><![CDATA[New comment by spankalee in "POSSE – Publish on your Own Site, Syndicate Elsewhere"]]></title><description><![CDATA[
<p>I do this with long blog posts, but not short tweet-like things. That feels ok some of the times as most of the micro-posts are throw-away, but sometimes I do make some posts I refer back to and would like to keep better ownership of.<p>So I've been thinking of updating my site and habits to center around running my own ATProto PDS and publishing my blog posts there, with my blog just being my web front end to my PDS. Then I could use that same PDS for Bluesky, photos, etc. and self-host a wide variety of things with an interoperable social layer.</p>
]]></description><pubDate>Mon, 23 Mar 2026 17:44:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=47492719</link><dc:creator>spankalee</dc:creator><comments>https://news.ycombinator.com/item?id=47492719</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47492719</guid></item><item><title><![CDATA[New comment by spankalee in "Western carmakers' retreat from electric risks dooming them to irrelevance"]]></title><description><![CDATA[
<p>Western governments should have been intervening like China does.</p>
]]></description><pubDate>Sat, 21 Mar 2026 15:32:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=47467935</link><dc:creator>spankalee</dc:creator><comments>https://news.ycombinator.com/item?id=47467935</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47467935</guid></item></channel></rss>