Raymond is a senior developer evangelist for Adobe. He focuses on document services, JavaScript, and enterprise cat demos.

Latest Posts

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 window to do prompts on PDF documents. I discussed something similar earlier this year(("Using AI and PDF Services to Automate Document Summaries")[https://www.raymondcamden.com/2024/01/08/using-ai-and-pdf-services-to-automate-document-summaries]) which made use of Diffbot, so I thought it would be interesting to build a similar experience with the Gemini API. At a high level, it's not too difficult:

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 was supported was when I was using fetch in client-side JavaScript and it wasn't supported natively in Node. Luckily I could just use node-fetch and be done with it.

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 name) for inviting me to present to them. Just hit the link to RSVP and you'll be invited.

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 pretty busy as well. I've got two conferences I'll be speaking at, a birthday, and just normal life stuff as well. As a reminder, if you find these posts, and this blog handy, I've got multiple ways you can show your support. With my birthday coming up, you could always visit my Amazon wishlist, or become a patron (I'd use that to possibly invest in better analytics), or simply buy me a coffee. Anything and everything is much appreciated. :) Ok, enough begging, here are the links for this edition.

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-in part of the web platform, the MutationObserver. Here's what I built as a way to test it out.

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 <Code><Br> session, I walked through the process of building a simple text game and brought up IdleFleet as an example. While playing the game to refresh my memory about what I actually built... I discovered I actually really liked it. I decided it would be good to give it some attention with new features and other updates, but before I could do that, I knew I needed to switch from Vue to Alpine.js.

Want more posts? You can peruse a complete list of my content, or pop over to my search page to find what you're looking for.