Automating Blog Post Headers with Firefly Services

Yesterday I introduced you to Adobe's new offering, Firefly Services, and demonstrated a simple example of how to generate images from prompt using the REST APIs. Today I thought I'd share one of the little demos I've made with the API, and one specifically built to help out with … | Continue reading


@raymondcamden.com | 8 months ago

Automate Generative Image APIs with Firefly Services

Adobe Summit is currently happening in Vegas and while there's a lot of cool stuff being announced, I'm most excited about the launch of Firefly Services. This suite of APIs encompasses the Photoshop and Lightroom APIs I've discussed before, as well as a whole new suite of APIs f … | Continue reading


@raymondcamden.com | 8 months ago

Spam APIs in 2024

I enjoy building API demos so I generally keep an eye out for interesting APIs to play with. A few weeks ago it occurred to me that I had not seen anyone talking about or sharing information about Spam APIs. I may be showing my age a bit, but it feels like spam was a much larger … | Continue reading


@raymondcamden.com | 8 months ago

Using PDF Content with Google Gemini

Back in February Google announced Gemini 1.5, their latest, most powerful language model, and while access has been open via AI Studio, API access has only been available in the past few days. I thought I'd try out the new model and specifically make use of the larger context win … | Continue reading


@raymondcamden.com | 8 months ago

Three Cool (to me) Node.js Features

I've been using Node.js on the regular now for probably over a decade, but one thing I've never done well is keep up to date with its features and new additions. In general, my brain just thinks "use javascript" and that's all. The last time I really cared about what precisely wa … | Continue reading


@raymondcamden.com | 8 months ago

Alpine.js Workshop this Friday

This is somewhat last minute but it just came together in the past 24 hours. This Friday, at 4 PM CST, I'll be giving a free, online workshop on Alpine.js: Web Development with Alpine.js. Thank you to the Ontario Tech University Google Developer Student Club (whew, that's a long … | Continue reading


@raymondcamden.com | 8 months ago

Links For You

Good morning. I managed to tear myself away from Assasin's Creed Valhalla a bit to get out a "Links For You" post. I was supposed to do this last week (my schedule is every two weeks), but I must have forgotten. Or just been busy. Life happens, amiright??!?! Next month will be pr … | Continue reading


@raymondcamden.com | 8 months ago

Responding to HTML Changes in a Web Component

While driving my kids to school this morning, I had an interesting thought. Is it possible for a web component to recognize, and respond, when its inner DOM contents have changed? Turns out of course it is, and the answer isn't really depenedant on web components, but is a baked- … | Continue reading


@raymondcamden.com | 8 months ago

Using Intl.RelativeTimeFormat for Localized Relative Timings

I've been singing the praises of the web platform's Intl object for years now, but it still continues to impress me. While I've seen it before, today I came across the RelativeTimeFormat API which looks absolutely fabulous. I played with it a bit and thought I'd share some tips.T … | Continue reading


@raymondcamden.com | 8 months ago

Converting a Vue 2 App to Alpine.js

A little over two years ago I published an "idle clicker game" built in Vue.js. I called it "IdleFleet" and was heavily inspired by games like A Dark Room, where I relied on simple text graphics and game mechanics that would change as you played. In my last session, I walked thr … | Continue reading


@raymondcamden.com | 8 months ago

TIL - submit() versus requestSubmit()

Today I learned (well, technically, a few days ago, the week has been a lot), that the web platform supports a requestSubmit method. Since the beginning of time (or the beginning of JavaScript), we've been able to submit forms like so:var myForm = document.getElementById('theform … | Continue reading


@raymondcamden.com | 9 months ago

Testing Multiple Variations of Generative AI Prompts

In nearly all of my recent explorations of Generative AI, I've come to realize how important prompts are. That hasn't necessarily translated me into writing better prompts all the time, but being aware of the problem is at least one step towards correcting it, right? One of the t … | Continue reading


@raymondcamden.com | 9 months ago

Links For You

Good morning programs. Before I get started with the three links I want to share with yall, some personal notes.Tomorrow I'm giving a free online presentation at the Adobe ColdFusion Online Summit where I'll be talking about how to use Adobe Acrobat PDF Services with ColdFusion. … | Continue reading


@raymondcamden.com | 9 months ago

Adding a Guestbook to Your Jamstack Site (Yes, Seriously)

Don't do this. I'm serious. Or do it, I certainly don't listen to reason when it comes to building demos. I've been in web development for a very, very long time, and I've seen many trends come and go. Guestbooks were a way for folks to leave a comment on your site as a whole. I … | Continue reading


@raymondcamden.com | 9 months ago

Using Generative AI to Organize Video Game Screenshots

Way back in January (remember January), I wrote a blog post describing how to use gen ai to improve image filenames. This worked by uploading the image to Google Gemini, asking for a short description, and using that description for a new filename. Recently I was thinking about t … | Continue reading


@raymondcamden.com | 9 months ago

Google Gemini as Your Dungeon Master

So this is absolutely just another example of me playing around too much, but I had to share. As I mentioned in my post yesterday, Google's AI Studio now supports uploading files and working with them in your prompt. Today I decided to give the Chat interface a try as I hadn't ye … | Continue reading


@raymondcamden.com | 9 months ago

Google Gemini 1.5 Announced (and more new features)

In general I don't tend to blog about stuff that isn't quite out yet, but as I've got early access (and permission to share), and as it's pretty darn cool, I thought I'd share. Plus, some of the new stuff is available to everyone, so you can try it out as well! Today, Google intr … | Continue reading


@raymondcamden.com | 9 months ago

Testing Temperature Settings with Generative AI

So far most of my playing with Generative AI has been on the prompt side, with no real look at the various settings you can tweak in your calls. As I'm still very new to this, I'm trying my best to take things slowly. But every time I open Google AI Studio and see the settings on … | Continue reading


@raymondcamden.com | 9 months ago

Come Build/Play a Game with Me Next Week

Next week I'll be hosting my second episode of the show, "Shall we play a game?" In this session I'm going to talk about, and build, a simple web-based game. An hour is not a lot of time to do this so it will be a bit of a race, but I think this could be really fun. Check it out … | Continue reading


@raymondcamden.com | 9 months ago

Looking at the JavaScript Promise Collection Methods

Let me begin by saying that "Promise Collection Methods" is not something I've seen mentioned elsewhere, but is my own way of referring to the various methods of the Promise API that work with multiple promises. They are:Promise.allPromise.allSettledPromise.anyPromise.raceI've us … | Continue reading


@raymondcamden.com | 9 months ago

Links For You

Happy Super Bowl Day for those who celebrate, oh wait, sorry, I mean "The Big Game". I'm looking forward to both the game and the commercials this year, and I managed to avoid every single commercial preview so they should all be new to me. This week was incredibly hard at work ( … | Continue reading


@raymondcamden.com | 9 months ago

Using the Bluesky API

Social media has always been... addicting and kinda gross/dangerous/etc, but lately, I'm not even sure what to think anymore. As I mentioned in my first episode of , I segregate all of my social media to the Firefox browser so it doesn't get in the way of my regular, work/researc … | Continue reading


@raymondcamden.com | 9 months ago

- First Episode

Just a quick note to share that today I did my first episode of the show. I had a great audience with some great questions and comments. My next show will be in two weeks and I hope to see you there! | Continue reading


@raymondcamden.com | 9 months ago

Using Generative AI as Your Content Assistant

Last week I had the honor of presenting one at TheJam.dev. This was my first presentation on generative AI and I got to share what I thought was an interesting use case - helping with the writing process.Now to be clear, I don't mean using GenAI to write blog posts, that would be … | Continue reading


@raymondcamden.com | 9 months ago

Links For You

Good morning, friends. I'm enjoying a lazy Sunday morning before I head out to my first (in-person) conference of the year, THAT Conference Texas. I'll be speaking on web components and can't wait to see the other great sessions as well. If you're a reader and will be there, plea … | Continue reading


@raymondcamden.com | 10 months ago

Using Generative AI to Improve Image Filenames

Last night I had an interesting thought. Many times I work with images that have vague filenames. For example, screenshot_1_24_12_23.jpg. Given that there are many APIs out there that can look at an image and provide a summary, what if we could use that to provide a better file n … | Continue reading


@raymondcamden.com | 10 months ago

Working with Google Gemini and ColdFusion

Most of my recent work with generative AI has been with Google Gemini lately as I find it really simple to use. With most of the complexity being on the prompt side, I appreciate that the code doesn't get in the way. I thought it would be interesting to see how difficult it would … | Continue reading


@raymondcamden.com | 10 months ago

My New Show -

For a while now I've been kicking around the idea of doing a live stream. I've done a good job this past year of working on my YouTube channel and I've enjoyed getting (slightly) better with that process. In general, though, my Youtube videos tend to "how to do X" type short walk … | Continue reading


@raymondcamden.com | 10 months ago

Using GenAI to Classify an Image as a Photo, Screenshot, or Meme

File this under the "I wasn't sure if it would work and it did" category. Recently, a friend on Facebook wondered if there was some way to take a collection of photos and figure out which were 'real' photos versus memes. I thought it could possibly be a good exercise for GenAI an … | Continue reading


@raymondcamden.com | 10 months ago

You Should Attend theJam.dev 2024!

Next week, a very cool, and very free, online event is being held by the fine folks at Certified Fresh Events, theJam.dev 2024. This is a two-day online conference covering web development, AI, serverless, frameworks, and certainly more than just the Jamstack.Speakers include Cas … | Continue reading


@raymondcamden.com | 10 months ago

Using Drag/Drop in Alpine.js with PDF Embed

Drag and drop support in JavaScript is probably two to three hundred years old now (plus or minus a few years), but I use it rarely enough such that when I need it, I run over to MDN's article on it as a quick refresher. I thought it might be fun to combine the web's drag and dro … | Continue reading


@raymondcamden.com | 10 months ago

Links For You

Hello friends. This week has been absolute hell as I've been sick since Wednesday. I'm on the mend, but it's taking its sweet ole time moving out of my system. I feel like I can barely put two words together but I somehow managed to do some work, give and record a presentation, a … | Continue reading


@raymondcamden.com | 10 months ago

Function Calling and GenAI

I love when I work on one demo, hit an issue, discover something else and get joyfully distracted into learning something completely different. In this case, it was a suggestion to help with an issue I was having with output from a prompt, and while it wasn't a good solution for … | Continue reading


@raymondcamden.com | 10 months ago

The Return of the Comment(s)

In the twenty plus years this blog has been around, I've had various different comment systems. Initially, I simply stored them in a database (this blog used to be powered by ColdFusion), but eventually moved to Disqus. I had a pretty huge amount of comments and was generally OK … | Continue reading


@raymondcamden.com | 11 months ago

My 2023

Happy New Year (well almost) my fabulous readers. Typically at the end of the year, I like to take stock of what I accomplished through the year and share it in one last blog post. I honestly don't expect anyone to actually read these summaries, but they help me determine what I … | Continue reading


@raymondcamden.com | 11 months ago

Links For You

Welcome to the last links I'll share ever... in 2023. As I said when I started this series, my goal was to share cool and interesting stuff with my readers, and I think it's been a great success so far. Plus, when I get excited about something, I just love to share it. I hope the … | Continue reading


@raymondcamden.com | 11 months ago

Using Generative AI to Detect Cat Breeds

Let's be honest, what other use is there for generative AI than working with cats? If you read my previous post on Google's Gemini AI launch, you may have seen my test prompts asking it to identify the kind of cat shown in a picture. I decided to turn this into a proper web appli … | Continue reading


@raymondcamden.com | 11 months ago

Google Gemini and AI Studio Launch

While it feels like just yesterday I first blogged about Google's PaLM APIs and MakerSuite, it was actually over two months ago, and of course, GenAI offerings are iterating and improving at lightning speed. In the past week, Google has announced Gemini, their new generative AI m … | Continue reading


@raymondcamden.com | 11 months ago

An Image Dialog Web Component

A lot of the talk (well, on Mastodon at least) lately concerning web components has been on "HTML Web Components". The idea is that web components can progressively enhance "regular" HTML in the DOM instead of completely blowing it away with the Shadow DOM. (You can find a deeper … | Continue reading


@raymondcamden.com | 11 months ago

Links For You

Welcome to - most likely - my last Links For You post of 2023. Who knows though, I'm off for nearly ten days at the end of the month so I'll probably have the time to keep on blogging. (If I can tear myself away from Assassin's Creed Odyssey.) I absolutely love this particular se … | Continue reading


@raymondcamden.com | 11 months ago

The Twelve (Generative) Days of Christmas

I tend to have a lot of silly ideas. Not useful ideas. Not good ideas. Silly ideas. Randomly yesterday I was thinking about the Twelve Days of Christmas song. If you aren't familiar with it, it starts off with a gift for one day, then repeats and adds a second day, and so on and … | Continue reading


@raymondcamden.com | 11 months ago

Awesome Netlify Updates

For about two months now I've had on my queue to write about some of the incredibly cool updates Netlify has released but I just didn't have the time. I've been hosting this blog on Netlify for a few years now and have been incredibly happy with the platform, but the updates the … | Continue reading


@raymondcamden.com | 11 months ago

Adding Music Previews to My Now Page

About two months or so ago I added a Now page to my site. It shows my current reading list, my last watched movies, my Untappd beer check-ins, and my most recent Spotify tracks. You can see that part here:When I built it, I used a Pipedream workflow to wrap calls to Spotify's API … | Continue reading


@raymondcamden.com | 12 months ago

Using IndexedDB with Alpine.js

A lot of my "x with Alpine" blog posts end up being, well, nothing special. That's a good thing I suppose as it really helps highlight how simple Alpine.js is. (Note, I go back and forth between including the ".js" when referring to Alpine. I should be more consistent I suppose. … | Continue reading


@raymondcamden.com | 1 year ago

Links For You

Good morning, readers. These link posts are typically reserved for the weekend, but my weekend ended up busy as heck with, ok, more than a few hours of Diablo 4, but other stuff including the beginning of Christmas decorating. To say we've got a lot of decorations would be an und … | Continue reading


@raymondcamden.com | 1 year ago

Adding Simple Routing to Cloudflare Workers

I've been "playing" with serverless for years now, but honestly still feel new to it. When it comes to organization in a project that uses serverless functions, I've typically tried to build one function per operation. So for example, if I had a need to get a list of cats, I'd ha … | Continue reading


@raymondcamden.com | 1 year ago

A Tip for Properly Handling Loading States in Web Apps

This isn't something I was going to blog about, but after seeing the same issue a few times recently (although to be fair, last in a mobile game), I thought I'd share it with my audience. I apologize if the title isn't the best as it was a hard issue to describe, so let me begin … | Continue reading


@raymondcamden.com | 1 year ago

Can GenAI help you win in Vegas?

No. Thank you and goodbye.Ok, first off, I apologize for the click-bait style title. Every now and then when I get an idea for a demo, it doesn't work. But sometimes, it doesn't work out in a fun and interesting way, and I figure it's a good idea to share it anyway. (Also, there' … | Continue reading


@raymondcamden.com | 1 year ago