Copying HTML Tables as Text, Markdown, and CSV

Earlier today and in a non web-related conversation, I saw someone talk about copying tabular data into different formats, like plain text and CSV. It got me thinking – this could be a useful feature for web sites and surely something pretty trivial to do in JavaScript. So I whipped up a quick demo. First, I added a table of course: <table id="table1"> <thead> <tr> <th>Name</th> <th>DOB</th> <th>Gender</th> <th>Breed</th> </tr> </thead> <tbody> <tr><td>Whiskers</td><td>2019-03-14</td><td>Male</td><td>Maine Coon</td></tr>... more →
Posted in: JavaScript

Links For You (7/18/26)

Good morning, programs. I’m currently at a conference (Day of Data), but thankfully one just down the road. I’ll be back tonight, and thought I’d take a break between sessions to share some links. I’ll be presenting later today one of my favorite talks, "A Beginner’s Guide to Wrangling Asynchronicity in JavaScript". I love the talk, but given I’m up against eight other talks at the same time and I’m not talking AI… well it may be a small personal affair. We shall see. Building a Blog with Astro It’s been a hot minute since I’ve written about Astro. I first started using it since Webflow was a sponsor and found that I really... more →
Posted in: JavaScript

My New Role – Helping AI Adoption at Cursor

This will be a short and sweet post to announce that today is my first day at Cursor! I’m starting today as an AI Adoption Engineer, which basically boils down to helping our customers make better use of Cursor and AI in general. If you’ve been visiting my site for a while now, you know I’ve been using AI for quite some time, but more importantly, I’ve also been adopting AI in my own workflows and processes. It takes time and energy but the payoff can be so incredible, and that’s what I get to help our developers with. Happy Day One! Raymond Camden… more →
Posted in: JavaScript

TIL – Algolia Makes Creating an MCP Server Stupid Easy

A few days ago I was chatting with Chuck Meyer (devrel for Algolia) and I casually mentioned, "It sure would be cool if Algolia had an easy way to turn my search index into an MCP server." He promptly responded, "Of course, you complete and utter dufus, which is why we already have that feature." (Not an exact quote.) This is exactly the kind of thing I love to hear. I’ve been using Algolia for my search here for years and honestly have not paid much attention to the new additions on their platform. That was a mistake. Let me show you how dang easy they made this. First – what’s Algolia? Chuck, forgive me, I’m going to do a horrible job summarizing... more →
Posted in: JavaScript

Turning my Cursor Performance Work into a Repeatable Skill

Yesterday, I wrote about using Cursor to review my blog for performance. Cursor (and again, for full disclosure I work here now 😉 did a dang good job of finding performance issues with my site, handling the huge size and various languages, platforms, and so forth. As I said, it worked well, but I wanted to look into making this more of a repeatable process. I’m saying "repeatable", not "automated", on purpose here. I can automate the process, but a full performance review feels much more like something I should run when I think it makes sense, for example, when I know I’ve tweaked my blog at the ‘code’ level versus writing cat-related blogs. I do... more →
Posted in: JavaScript

Asking Cursor to Review My Blog for Performance

Last week I decided to try something interesting. I opened my blog up in Cursor and asked for a basic performance review. That seems like a no-brainer, but keep in mind, my blog’s source code clocks in at near seven thousand files (ignoring node_modules of course), so this wasn’t some small request. My blog is built with the Eleventy static site generator. It’s a mix of JavaScript and Markdown primarily, with a huge portion of the codebase being Markdown and not ‘code’ per se, but me rambling on about cats and Star Wars. There’s also Liquid templates which are parsed into HTML by a JavaScript library. But that doesn’t quite tell the whole story. In Eleventy,... more →
Posted in: JavaScript

Links For You (7/5/26)

In my last links post, I hinted that I may have some good news on the job front, and if you follow me on LinkedIn you already know that I’ve signed on to my next gig. Tomorrow morning I’ll share on here (and on LI) details about the new gig, but I am beyond excited about this new job. With that out of the way, how about some happy links for what’s going to be a really dang good week? JavaScript in the Shadows As one of the new proposals for JavaScript, the ShadowRealm API is pretty interesting. It allows for the creation of a realm, or in my mind, an environment, with JavaScript that is 100% disconnected from the main environment of your browser window. Mat Marquis gives a great... more →
Posted in: JavaScript

Building Custom Form Selection Boxes – Working on Accessibility

Whenever I find myself needing to update a previous blog post, I either correct it inline and add a small note on top, for small tweaks, or write a whole new piece for larger changes. My last blog post talked about how to use CSS to style a "block" such that it acted like a form radio button. When I worked on that demo, I was a bit worried about accessibility. I did one quick check with an online tool, and thought I was ok. I was not. When I shared my post on LinkedIn, Kevin Bonett shared this feedback with me: I would argue that, despite using correct semantic HTML, the “custom” radio buttons are inaccessible. If you’re a sighted keyboard user, how will you know... more →
Posted in: JavaScript
1 2 3 4 5 … 116