<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: james2doyle</title><link>https://news.ycombinator.com/user?id=james2doyle</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 27 Jul 2026 21:15:59 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=james2doyle" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by james2doyle in "Removing React.js from the codebase and adapting Htmx for UI interactivity (2023)"]]></title><description><![CDATA[
<p>That is what I ended up doing but once I did that, I had a hell of a time getting that dynamic form working well with just the HTMX primitives. I even tried to do two different partials that would be fetched when I needed each one to rerender.<p>The gist of what I was saying was that once I had a more complicated experience, the benefits of just fetching a fresh partial each time started to dwindle. The HTML response grew, I needed a bunch of inline handlers to patch over some state issues, as well as the complexity of the template, just started to be too much. Really it was the Alpine part that I was missing. Simple class toggles, easy way to toggle aria attributes, show/hide for elements, and reactive/computed values, were the things I needed to get the results the client wanted.<p>If I was building a simple search input + results, I would use HTMX all day. These forum people make it work and that seems like a great use case. But it just didn’t fit with a more sophisticated form that had dynamic options plus a large results display and the burden of a slower query to just get the data.</p>
]]></description><pubDate>Mon, 27 Jul 2026 21:09:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=49075555</link><dc:creator>james2doyle</dc:creator><comments>https://news.ycombinator.com/item?id=49075555</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49075555</guid></item><item><title><![CDATA[New comment by james2doyle in "Removing React.js from the codebase and adapting Htmx for UI interactivity (2023)"]]></title><description><![CDATA[
<p>It isn’t literally AJAX. Just a catchy name. It is just a fetch wrapper that mimics the $get, $post, etc. API</p>
]]></description><pubDate>Mon, 27 Jul 2026 20:39:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=49075217</link><dc:creator>james2doyle</dc:creator><comments>https://news.ycombinator.com/item?id=49075217</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49075217</guid></item><item><title><![CDATA[New comment by james2doyle in "Removing React.js from the codebase and adapting Htmx for UI interactivity (2023)"]]></title><description><![CDATA[
<p>To sync the form state based on the current selections in the form. This is often called facets. The form contained many options and as you filtered those options would change. So you need a way to update the form too. Hence, compute the full thing on the server (the form state, the options within the fields, and the results) then send it all back.</p>
]]></description><pubDate>Mon, 27 Jul 2026 20:37:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=49075203</link><dc:creator>james2doyle</dc:creator><comments>https://news.ycombinator.com/item?id=49075203</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49075203</guid></item><item><title><![CDATA[New comment by james2doyle in "Removing React.js from the codebase and adapting Htmx for UI interactivity (2023)"]]></title><description><![CDATA[
<p>Exactly. The partial response was 100kb-200kb of HTML + the backend query time. Of course, depending on your filters. But a large chunk of that was just sending down the form on the left side, which I already had on page load, so that penalty was real.<p>It was only the right side results of the experience that needed to be refetched when the form changed.<p>But in HTMX, you are expected to just send the whole dang thing back for every change. Makes sense for a like-button, a dialog, or even a classic form submission.<p>My refactor cut the HTML response by about 70kb and that made a big difference. The form became fully static and I had a simple Alpine data component that would just sync that state with the URL. Still used a GET on the form and still used the same partial endpoint. Just way less HTML to wait for.</p>
]]></description><pubDate>Mon, 27 Jul 2026 18:12:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=49073464</link><dc:creator>james2doyle</dc:creator><comments>https://news.ycombinator.com/item?id=49073464</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49073464</guid></item><item><title><![CDATA[New comment by james2doyle in "Removing React.js from the codebase and adapting Htmx for UI interactivity (2023)"]]></title><description><![CDATA[
<p>If I wanted to do that I would have added pagination. But that UX also sucks in a different way.<p>I think dynamically fetching results (ala infinite scroll) would have been more complicated to build. I would have had to add an intersection detection (HTMX 4 has that) to trigger the form/request again, but with an ever increasing chunk offset slice. I also need a way to track that state as well. Considering I had one big HTML response, I don’t think I could have done that efficiently without splitting it anyway. Even if I could "pluck" the results I needed from the HTML response, the penalty of waiting for the response was the factor.<p>If you have any links to some demos where there is something like that, I would appreciate it.<p>All that being said, the count of items actually isn't the most relevant part. The most relevant part is the amount of HTML per single result. If you have a sophisticated card component (a title, a description, images, a table of information inside of it or complicated layout) just loading six cards could end up being hundreds of HTML elements.<p>So even if you lazy loaded elements in chunks, those chunks are still gonna take a while to fetch given the size of the HTML. You also break CTRL-F-ing since those results don’t exist in the DOM until you trigger their fetching code. Same problem as classic pagination.<p>I would have to completely refactor my entire experience regardless because if I want to lazily load the cards/results gradually, I would have to split up the layout to make it more efficient.<p>So my approach to shrink the HTML response was to break it up the "live" section to just the right half.</p>
]]></description><pubDate>Mon, 27 Jul 2026 18:03:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=49073348</link><dc:creator>james2doyle</dc:creator><comments>https://news.ycombinator.com/item?id=49073348</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49073348</guid></item><item><title><![CDATA[New comment by james2doyle in "Removing React.js from the codebase and adapting Htmx for UI interactivity (2023)"]]></title><description><![CDATA[
<p>That is what I did. I was using Astro which has full support for partial HTML via the router</p>
]]></description><pubDate>Mon, 27 Jul 2026 17:48:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=49073165</link><dc:creator>james2doyle</dc:creator><comments>https://news.ycombinator.com/item?id=49073165</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49073165</guid></item><item><title><![CDATA[New comment by james2doyle in "Removing React.js from the codebase and adapting Htmx for UI interactivity (2023)"]]></title><description><![CDATA[
<p>I actually tried to use HTMX on a site recently. I used the 4.0 beta. The site needed an interactive filterable product-listing-page-type experience to list out all their vendors. Form filters on the left and the list of results "cards" on the right.<p>The problem I had was that the entire experience became really slow when I had it all working together as one "response". Sending back all that HTML for an entire form with some large select lists as well as the response of results became noticeable laggy when there was more than a half dozen results.<p>I ended up switching to Alpine Ajax (<a href="https://alpine-ajax.js.org/" rel="nofollow">https://alpine-ajax.js.org/</a>) and pulled the form out of the response and just used a local x-data on it to track the state. This greatly reduced the HTML I needed to send back to just the list of results. I did make the form a bit more complicated but the experience felt a lot snappier. Both versions just synced the form state from the URL and kept the initial render as full HTML from the server.<p>I found that Alpine + Alpine Ajax was SMALLER than HTMX 4 even though (in my opinion) it offers a lot more features in a more approachable and intuitive way if you need to do interactivity and don’t want to trigger a request just to toggle some classes or attributes. Of course you can use both together (I started down that road) but you are mixing worlds and making the bundle size bigger at the same time.<p>I still like HTMX and will probably use it again. I just found that with an interactive experience like a product listing page, where the HTML response was quite large/expensive to fetch, it wasn’t the best choice for that.</p>
]]></description><pubDate>Mon, 27 Jul 2026 16:39:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=49072139</link><dc:creator>james2doyle</dc:creator><comments>https://news.ycombinator.com/item?id=49072139</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49072139</guid></item><item><title><![CDATA[New comment by james2doyle in "Show HN: StyleSeed – a design-rules engine so AI agents stop building generic UI"]]></title><description><![CDATA[
<p>There are actually quite a few elements failing the Lighthouse accessibility audit.<p>This page also has 26 emdashes on it. For a page that isn’t an article, that seems pretty high.</p>
]]></description><pubDate>Wed, 15 Jul 2026 16:06:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=48922963</link><dc:creator>james2doyle</dc:creator><comments>https://news.ycombinator.com/item?id=48922963</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48922963</guid></item><item><title><![CDATA[New comment by james2doyle in "Hy3"]]></title><description><![CDATA[
<p>Been using this and GLM 5.2 back and forth. I like the speed of Hy3. Also seems very happy to follow instructions. Still haven’t found any open models that follow instructions as good as Mimo v2 pro though</p>
]]></description><pubDate>Thu, 09 Jul 2026 16:16:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=48848346</link><dc:creator>james2doyle</dc:creator><comments>https://news.ycombinator.com/item?id=48848346</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48848346</guid></item><item><title><![CDATA[New comment by james2doyle in "GLM 5.2 and the coming AI margin collapse"]]></title><description><![CDATA[
<p>What if your measure is cost? Or zero-data-retention? Or diversity of inference providers?<p>On those measures it is better.</p>
]]></description><pubDate>Tue, 07 Jul 2026 17:06:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=48820594</link><dc:creator>james2doyle</dc:creator><comments>https://news.ycombinator.com/item?id=48820594</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48820594</guid></item><item><title><![CDATA[New comment by james2doyle in "GLM 5.2 and the coming AI margin collapse"]]></title><description><![CDATA[
<p>Yeah sounds like maybe you got stuck in a loop? If you’re a big Deepseek fan, check out their Codewhale harness. It is actually really slick and you can use your OpenRouter account with it.<p>You can use any model you want but it is really tailored to work well with the Deepseek duo</p>
]]></description><pubDate>Tue, 07 Jul 2026 16:30:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=48820111</link><dc:creator>james2doyle</dc:creator><comments>https://news.ycombinator.com/item?id=48820111</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48820111</guid></item><item><title><![CDATA[New comment by james2doyle in "Claude Sonnet 5"]]></title><description><![CDATA[
<p>Tokens and speed are a factor but does it require less back and forth to get things right? Being "fast and cheap but wrong" still has a cost that an otherwise "expensive and slow" exchange does not</p>
]]></description><pubDate>Tue, 30 Jun 2026 18:24:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=48737058</link><dc:creator>james2doyle</dc:creator><comments>https://news.ycombinator.com/item?id=48737058</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48737058</guid></item><item><title><![CDATA[New comment by james2doyle in "LongCat-2.0, a large-scale MoE model with 1.6T total and 48B Active"]]></title><description><![CDATA[
<p>I can’t get any tool calls working. Seems to use a `<longcat_tool_call>` wrapper which the current harnesses I’m using don’t support</p>
]]></description><pubDate>Tue, 30 Jun 2026 16:28:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=48735081</link><dc:creator>james2doyle</dc:creator><comments>https://news.ycombinator.com/item?id=48735081</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48735081</guid></item><item><title><![CDATA[New comment by james2doyle in "LongCat-2.0, a large-scale MoE model with 1.6T total and 48B Active"]]></title><description><![CDATA[
<p>Oh, usually when that is announced the stealth model updates to the unmasked one. They did that with "Ling 2.6 flash" which was elephant-alpha. I guess we may see an update today then</p>
]]></description><pubDate>Tue, 30 Jun 2026 16:23:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=48735004</link><dc:creator>james2doyle</dc:creator><comments>https://news.ycombinator.com/item?id=48735004</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48735004</guid></item><item><title><![CDATA[New comment by james2doyle in "FUTO Swipe – A new swipe typing model"]]></title><description><![CDATA[
<p>Do they still have that issue where it will randomly spit out a string of emojis when using voice to text?</p>
]]></description><pubDate>Tue, 23 Jun 2026 22:35:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=48652454</link><dc:creator>james2doyle</dc:creator><comments>https://news.ycombinator.com/item?id=48652454</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48652454</guid></item><item><title><![CDATA[New comment by james2doyle in "FUTO Swipe – A new swipe typing model"]]></title><description><![CDATA[
<p>We sound similar. I have found that the voice to text can often just randomly start spitting out emojis. Did you find that?</p>
]]></description><pubDate>Tue, 23 Jun 2026 22:33:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=48652439</link><dc:creator>james2doyle</dc:creator><comments>https://news.ycombinator.com/item?id=48652439</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48652439</guid></item><item><title><![CDATA[New comment by james2doyle in "Moebius: 0.2B image inpainting model with 10B-level performance"]]></title><description><![CDATA[
<p>There are some demo spaces using this. This one seems the best (paint your own mask) but it failed on all the images I tried: <a href="https://huggingface.co/spaces/multimodalart/Moebius" rel="nofollow">https://huggingface.co/spaces/multimodalart/Moebius</a></p>
]]></description><pubDate>Mon, 22 Jun 2026 17:46:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=48633399</link><dc:creator>james2doyle</dc:creator><comments>https://news.ycombinator.com/item?id=48633399</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48633399</guid></item><item><title><![CDATA[New comment by james2doyle in "Moebius: 0.2B image inpainting model with 10B-level performance"]]></title><description><![CDATA[
<p>Like this? <a href="https://huggingface.co/spaces/multimodalart/Moebius" rel="nofollow">https://huggingface.co/spaces/multimodalart/Moebius</a></p>
]]></description><pubDate>Mon, 22 Jun 2026 17:33:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=48633186</link><dc:creator>james2doyle</dc:creator><comments>https://news.ycombinator.com/item?id=48633186</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48633186</guid></item><item><title><![CDATA[New comment by james2doyle in "The hacker sent by Anthropic to calm the government's nerves about AI safety"]]></title><description><![CDATA[
<p>Had to disagree with that. However, I don't think you can discount how much Anthropic has been banging the drum about how AI is dangerous (specifically theirs) and an existential threat, etc. etc.<p>The rollout of Mythos was clearly manufactured to stoke the fears of companies that didn’t have access to it. They also bragged (for Fable) about how they "ran an external bug bounty that produced no universal jailbreaks in over 1,000 hours of testing" only for it be circumvented almost immediately.<p>So them standing on the high horse and saying it is _so powerful, yet so safe_ only to have that blow up in their face just made it that much easier to make an excuse to do this. Again, not disagreeing, but they made themselves the tall poppy here.</p>
]]></description><pubDate>Wed, 17 Jun 2026 20:42:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=48576593</link><dc:creator>james2doyle</dc:creator><comments>https://news.ycombinator.com/item?id=48576593</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48576593</guid></item><item><title><![CDATA[New comment by james2doyle in "Claude Fable 5"]]></title><description><![CDATA[
<p>Just last week you could distill using other users responses! Handy!</p>
]]></description><pubDate>Tue, 09 Jun 2026 18:20:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=48465246</link><dc:creator>james2doyle</dc:creator><comments>https://news.ycombinator.com/item?id=48465246</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48465246</guid></item></channel></rss>