This fix for an O(n^2) -> O(n) is just moving a reduce() out of a map(), but it took years to diagnose (thanks to showsubmit.com for being the reproduction case).
Hugo
@codewithhugo.com
Senior Developer - Building alpinedevtools.com Wrote jesthandbook.com + ×3 books with Packt. Thoughts at codewithhugo.com
One of those productivity/flow tips is to leave something half done so you can get going the next time LLMs/agents give you that in the cases where they don't one-shot your request. Even just firing up the dev server and testing the output still gets you closer to flow even in the one shot case.
Arguing with an LLM about whether I want to call Alpine.js devtools seamless or effortless
Fed a repro into a coding agent (Jules) and it actually fixed the underlying bug Can we make a plan to solve it but in a way that i can take over from Jules if you cant solve it? (So probably include a reproduction, make sure it fails eg. automation tests, submit that code, then try to fix it)
The AWS News Feed is currently without funding 😢 Meanwhile development of new features continues, the site's numbers are consistently growing, and with the pre:Invent season about to fire up we expect only more visitors and subscribers in the coming months! Will you become a sponsor? Send me a DM!
Started using jules.google.com Async development agent, you grant it access to GitHub repositories, it clones them in a VM and runs tasks (including scripts etc). Not bad for small tasks, stubbing/poc attempts or while on the go (slow to type code on mobile).
I'm reviving my newsletter, have ~2 months of content scheduled. Subscribe if you think this content might interest you. buttondown.com/hugo/
Big news! I'm available for hire! If you have JavaScript/TypeScript you want written, and you have budget for an ambitious and highly skilled practitioner with over 20 years of experience doing that, including leading teams, communities, and execs, hit me up. izs.me (RT please)
Isaac Z. Schlueter
izs.me
I've aggregated some more advanced/non-obvioud TypeScript patterns in this new posts codewithhugo.com/typescript-t...
TypeScript in the Trenches: Utility types and type manipulation patterns for application development · Code with Hugo
<p>7 advanced types and patterns that I’ve used as part of TypeScript application development.</p> <p>These patterns help unlock new levels of type safety
codewithhugo.com
Was struggling to find a free product screenshot generator for Alpine Devtools Chrome extension For the Chrome Webstore you need to capture 1280x800 and I'm just not that accurate with drag and drop screenshot.rocks seems to do the basics of what I need (browser frame config, padding/background)
Screenshot.Rocks | Create beautiful mobile or browser screenshots and mockups
Create mobile or browser mockups from screenshots in seconds. Screenshot.rocks turns ordinary browser screenshots into beautiful mockups
screenshot.rocks
Interesting concept of a minimalist blog ostwilkens.se/blog/setting... To be honest for alpinedevtools.com/updates I went even further: use .md files and generate the HTML using the VSCode Markdown All In One plugin.
Funny story I keep hitting this "I want to select elements where attr starts with *prefix*" Eg. Detect HTMX I need hx-* or data-hx-*
Yeah so I didn't want to borrow the v-bind/x-bind shorthand because I explicitly am not doing a reactive binding Re why it's `data-s-attr="attrName=contextValue"` 1. The querySelectorAll is simpler (select for data-s-attr), I'm not even sure how I would use querySelect for "attrs starting with :"
I'm not one to admit when I'm being stubborn But working on the Alpine Devtools in the evenings means I finally felt the "why no dark mode" pain This vindicates the time I spent wiring Tailwind (v4) properly the other day (devtools v1 is on Tailwind 1)
One of the first times I've ever been bitten by Big O ``` data.map((d) => { prevState = oldData.reduce() }) ``` When data and oldData are ~10k entries, you're doing a 100 million iterations. Move the reduce out of the loop (.map here) and you're doing 20k...
No build Tailwind - use `@tailwindcss/browser` via CDN (but only on local) in your app - run `copy(document.querySelector('style').innerText)` (depending on whether you've got other styles you might need to mess with the selector) - paste into your .css file
Trying something new (or maybe reviving an old project) I was part of the original crew that worked on Alpine devtools. Chrome has obsoleted the extension (granted, it has had no updates since Sept 24) with Manifest v3
Using Windows as a dev machine (temporarily) professionally for the first time after ~ a decade of being on Mac I started leaning into the IDE to run things, shell is just a minefield with backslash in paths, slow and bad auto complete Keyboard navigation muscle memory for VSCode letting me down
Been trying to get my first newsletter issue in a while sent out, more on that at the end of the thread A lot has happened since I was regularly sending this out. I'm intending for it to still a place to learn about JavaScript/TypeScript and Node.js in the real world.
Been playing with simple web components recently for some codewithhugo.com pages Found it a bit painful to do templating (`.innerHTML` or `.appendChild` friendly options) Open sourced 2 utils that I couldn't find a lightweight existing package for (`lit-html` seems heavy handed in this case)
Code with Hugo
Node.js and JavaScript Guides - Build your web platform with modern best-practices & tools
codewithhugo.com
An example of Hyrum's law in JavaScript I encountered this week (or is it?) A `divide(numA, numB)` function implemented partial application `if (numB == null) return n => divide(numA, n)`