Links For You (11/30/25)

Once again I’m here, sharing links, and apologizing for the lack of content this month, although I did publish seven times, and I think I had some good demos, so maybe I should just stop worrying about it? šŸ˜‰ As I’ve hinted recently, I am no longer on the job market! I haven’t said where yet as I wanted to get a few weeks under my belt to ensure things were going to be ok. I’m not going to lie, my last role (and quick lay off) really messed me up a bit. That being said, I feel relatively safe now, and really like what both my role and my coworkers, so I figure it’s time to share! My new role is a Senior Developer Evangelist for Webflow. Webflow has a web-based... more →
Posted in: JavaScript

Links For You (11/16/25)

Good morning, programs. I’m sorry for the light posting the last few weeks, but, it’s all for a good reason. Last week was my first week at my new job, which means all of my anxiety and fear are gone. Ok, maybe not, but, I’m absolutely delighted to be off the market again. I haven’t blogged about the new job yet (or even gotten around to updating LinekdIn), but I’ll do so soon. (My job isn’t top secret or anything, I’m just waiting a bit.) Ok, let’s get to the links! A Conditional Form Field Web Component I love web components, and I especially love really practical examples like this conditional form field component by Aaron Gustafson. As you can... more →
Posted in: JavaScript

Gemini File Search and File Stores for Easy RAG

I am really excited about this post as it’s one of the most powerful changes I’ve seen to Google’s Gemini APIs in quite some time. For a while now it’s been really easy to perform searches against a document, or a group of documents. You would upload the file (or files), ask your questions, and that was all you needed. However, the files you uploaded were only there temporarily. This was fine for processes like summarization or categorization where you could automate the process and be done with it. This was also fine for basic chat uses. I blogged an example of this last month: "Building a Document Q&A System with Google Gemini". The new features I’m... more →
Posted in: JavaScript

Using Google Static Maps in Your Print View

This is just a quick thought experiment really. Yesterday I was working on a demo that made use of Google’s Static Map API. I’ve blogged about this API for probably over a decade now and I rarely see people use it, but it’s a lightweight, image only "API" for when you need simple map images without interactivity. Honestly, I see a lot of sites using the full JavaScript maps library when a simpler image would be fine. It’s also an excellent way to use maps in presentations or emails as well. It occurred to me that the static map image could be a great way use of print media queries in CSS and I thought I’d build a quick demo to show this. Media queries and... more →
Posted in: JavaScript

JavaScript SpeechSynthesis API

As the web continues to be the medium for all users, standards bodies need to continue to provide new APIs to enrich user experience and accessibility. One underused API for unsighted users is speechSynthesis, an API to programmatically direct the browser to audibly speak any arbitrary string. The Code You can direct the browser to utter speech with window.speechSynthesis and SpeechSynthesisUtterance: window.speechSynthesis.speak( new SpeechSynthesisUtterance('Hey Jude!') ) speechSynthesis.speak will robotically tell the user anything you provide as a SpeechSynthesisUtterance string. Support for this API is available in all modern browsers. I wouldn’t consider speechSynthesis as... more →
Posted in: JavaScript

Fix ā€œThis video format is not supportedā€ on YouTube TV

Setting up a new computer is bliss — no old, unused apps and the machine performs much better than the previous. Unfortunately, you may encounter new problems based on the new hardware. One such issue I encountered with my new MacBook was a “This video format is not supported” message when I went to YouTube TV. Not being able to watch my favorite live show is a real problem. After a bit of research, I found the solution to the “This video format is not supported” error message. To solve this problem: Open your browser settings and do a search for DRM You should see reference to Widevine, a form of DRM Enable this Widevine setting Restart your web browser Enabling... more →
Posted in: JavaScript

Checking for Spam Content with Chrome AI

Earlier this week I mentioned I’m looking at my previous server-based generative AI demos and seeing which could possibly make sense using on-device AI with Chrome’s AI support. I remembered a demo from last year where I tested spam detection using Google Gemini. That demo had worked out rather well and so I thought I’d try it out in Chrome. Ok, but why? Spam detection is important, and a server-based solution could have many users, especially in sites that make use of a lot of user generated content. But what would be the point doing this in the browser? Consider the fact that many of the Chrome AI APIs help with writing, I think such a solution could be useful in helping flag... more →
Posted in: JavaScript

BoxLang’s Improved PDF Handling

I’ve blogged about PDF support in BoxLang previously, including a quick introduction and a more robust demo later. Basically, the free PDF module provides excellent PDF creation capabilities out of the box. But what about PDF manipulation? My last two jobs involved PDF APIs, and while my next one most certainly does not (thank god), it’s still a feature near and dear to my heart. The BoxLang folks have made a shockingly huge amount of updates over the past few months, more than I’ve had a chance to keep up with, but one in particular caught my eye and I thought I’d call it out – the new PDF+ module. BoxLang’s commercial modules are part of the BoxLang+ plan.... more →
Posted in: JavaScript
1 2 3 4 5 107