Tomas

Tomas

@tomasklingen.nl

🎸👨‍💻 a Frontend Web Dev with a weird passion for performance, SSR and Core Web Vital optimalization

51 followers199 following110 posts

Sonnet 5.5 high and extra high are my favourites now for active collaboration work. The speed/quality balance is very good. Opus might be better but not by much, and is slower.

A good reminder. Any process that can be done with old school mechanical static deterministic code instead of LLMs should be done like that.

Swizec Teller@swizec.com

I've been experimenting with different approaches to build a system where humans and agents can ship fast safely. Think I've found something that works – custom linters. swizec.com/blog/stop-bu...

Indeed, so always write it as simple for the reader to understand. Or you know, for yourself in 2 weeks.

👻 rossipedia 🎃@rossipedia.com

Reminder that reading code written by another is an order of magnitude harder than writing it yourself.

Tomas reposted

The Cure were really onto something when they thought of JavaScript in 1979

Wow this is really nice. It’s a feature I’ve been missing that I used at my first programming job where they used SVN lol.

Zed@zed.dev

See the commit history for all files in a given folder in your repo with `View History` in the project panel. Coming Zednesday.

The topic of skills atrophy has been running through my mind quite a bit. Delegating cognitive tasks to an AI system could mean over time you lose some of those abilities yourself. Similarly to how you need to keep training a muscle or a sport: use it or lose it. But is this always bad per se?

Ethan Mollick@emollick.bsky.social

The idea that technology, like AI, deskills us is not a surprise. I learned cursive at school, my father learned how to use a slide rule. Neither skill is widely mourned. What is important is whether we will make deliberate choices about what skills to keep & which they will be.

Yesterday I had my iPhone battery replaced after some years. I had forgotten what a great feeling it is to only have to charge once per day. It lessens the desire to replace this 13 pro, which is otherwise working perfectly fine still 👌

From a token efficiency perspective I don’t fully follow why agent skills would be more efficient than MCP. Doesn’t MCP expose a short description of available tools in the same way skill markdown files have some meta details in frontmatter?

I do understand skills are a bit more flexible though. Personally I use skills with a lightweight description of an CLI and let the agent discover its usage through `—help` if needed. But I’m not following the argument that MCP is inherently wasting more context doesn’t sound right?

Tomas reposted

I have always been the kind of developer who only cared about outcomes. Give me the tool, the framework, the head start. I just want my website. A totally different kind of developer exists who cares about the *craft*. Getting that function just right. Those devs are in pain right now.

My girlfriend and I are taking Spanish lessons. We got a traditional book and studying goes well. So of course I’m working on a tool to optimize learning. Using spaced repetition algorithms, flash cards and good quality spoken output. Pretty much Anki, but more specialised.

But the temptations and opportunities provided by vibe coding let you go overboard as well. I choose all kinds of tech that’s kinda new to me. @nuxt.com with CloudFlare workers + D1 as db. Client-side IndexDB. It already needs simplification.

Due to technical limitations there can't be two usb 3 ports. Awkward, but fine. But then the placement is a bit counter intuitive. When both ports are in use, it's probably most likely the port more to the back of the device is used for charging, keeping the faster port occupied.

Scraping bots are getting good. They can pass CloudFlare challenges. We’ve been fighting a 40k “random” ip botnet for a couple of days now. CF does mark them as “somewhat odd” with a lower bot score though. That helps.

We ran into a memory leak in a Node service due to a misunderstanding of Reselect’s createSelector memoization. Might be worth writing up, or is that too dry? 🤔

Reselect 5 switched memoization strategy from using fixed size LRU caching (1 by default) to a WeakMap strategy, relying on the GC to clean stuff up. But when one of the selectors’ arguments is a JS primitive like a string, it doesn’t get cleared.

Can’t wait to try it out! 👌

TypeScript@typescriptlang.org

We've got some updates on TypeScript 7! The new native port - can type-check any project - supports --build and --incremental - has rich editor features implemented - is still 10x faster and is ready for you to try today! devblogs.microsoft.com/typescript/p...

Tomas reposted

👀 Future of JS This underrated upcoming JS feature is super useful 🔥 Soon, you should be able to import JS code as a string! This is super useful, in particular for docs sites! Similar to Webpack raw loader, asset query ?raw etc, but available everywhere natively!

Rob Palmer@robpalmer.bsky.social

ECMAScript excitement 😉 Congrats to Eemeli Aro @mozilla.org on advancing Import Text to Stage 2 at TC39 today 🎉 It uses an import attribute for easy loading. import text from "path/to/file.txt" with { type: "text" }; github.com/eemeli/propo...

Tomas reposted

React Server Components: do they improve performance or make it worse? If your answer is “I’ve no idea 😅,” I wrote a deep-dive to answer that! Experiments and real numbers, CSR vs SSR vs RSC, same app + test setup. Focus: initial load + data fetching. www.developerway.com/posts/react-...

developerway.comReact Server Components: Do They Really Improve Performance?A data-driven comparison of CSR, SSR, and RSC under the same app and test setup, focusing on initial-load performance and the impact of client- vs server-side data fetching (including Streaming + Susp...

Wow I’m shocked.. I’ve watched so many hours of videos of him explaining chess with so much passion and expertise. I was literally watching one tonight. This is an extremely sad loss for the chess community.

International Chess Federation Mirror@fide-chess-mirror.bsky.social

GM Daniel Naroditsky passed away. He was a talented chess player, commentator, and educator. FIDE extends its deepest condolences to Daniel’s family and loved ones.

It’s not explicitly required, but passing an Error object type as { cause } will display very nicely in error monitoring tools like @sentry.io. It will show the child and parent errors stacked together.

JS pro tip: Add { cause } to errors. Makes debugging and inspection way easier 🔍 developer.mozilla.org/en-US/docs/W...

We’ve had a scenario where an AudioWorklet (separate environment, different stacktrace) would throw an error, pass it to the main thread, wrap it in a more generic error with { cause }, log to Sentry. You’ll see two separate errors stacktraces, but the errors are linked 👌

Every React hook has multiple levels of understanding a dev has to go through to get to most out of them. Hopefully at some point I fully understand Reacts concurrent rendering gotchas.

François Best@francoisbest.com

TIL: the "sync" in @react.dev's useSyncExternalStore isn't for "synchronise", it's for "synchronous". As: it's not for synchronising against an external store, It's for synchronously (ie: disabling concurrent features) updating against a store's changes. h/t @tkdodo.eu 🤯

Having this exact same problem. In the Mac dock I'm trying to keep them far away from each other

Siddhant Goel@sgoel.dev

TFW for a moment you can't tell which one is the code editor and which one is the web browser

About the React useEffect bug and the CloudFlare outage.. Of course devs just need to learn their tools, RTFM and understand the libs/frameworks they're using. But what's also true is that framework APIs should be designed in such a way that they're intuitive to use and hard to accidentally abuse.

Tomas reposted

We’ve launched MDN’s new front end — and it’s just the beginning. Intentionally targeting Baseline "Widely available" features when deciding on which ones to use. This means we're able to adopt modern CSS and web components for our UI. Check it out 👇 developer.mozilla.org/en-US/blog/...

developer.mozilla.orgLaunching MDN's new front end | MDN BlogMDN is getting a facelift 🎉 Discover what's changed, what's improved, and how navigating the site just got smoother.

I’m a little bit obsessed with hydration errors in React. To prevent them the typical advice is to use useEffect when using browser apis like localStorage. But useSyncExternalStore is so much more powerful! When (re)mounting a component, it skips the getServerSnapshot 💡 saves a useless render.

Together with Claude Code I'm migrating my site from react-router (with pre-prendering for SSG) to Astro. I first let CC read some Astro docs, then prompted to create a project requirement plan for the migration in several steps. This generally works great for CC. The time estimation is funny.

Tomas reposted

“The reason SPAs became the default wasn’t because they were better. It was because, for a while, they were the only way to deliver something that felt fluid – something that didn’t flash white between pages or jank the scroll position.” www.jonoalderson.com/conjecture/i...

jonoalderson.comIt's time for modern CSS to kill the SPANative CSS transitions have quietly killed the strongest argument for client-side routing. Yet people keep building terrible apps instead of performant websites.

Tomas reposted

One of the most powerful tools in my toolbox is SVG. When combined with CSS and JavaScript, we can do some truly remarkable things. ✨ 📝 I’ve just published a brand-new blog post that covers the most critical fundamentals. It’s chock full of interactive demos. 😄 Check it out:

joshwcomeau.comA Friendly Introduction to SVG • Josh W. ComeauSVGs are one of the most remarkable technologies we have access to on the web. They’re first-class citizens, fully addressable with CSS and JavaScript. In this tutorial, I’ll cover all of the most imp...