JavaScript waitFor Polling / / No Comments As more of the JavaScript developers write becomes asynchronous, it’s only natural to need to wait for conditions to be met. This is especially true in a world with asynchronous testing of conditions which don’t provide an explicit await. I’ve written about waitForever, waitForTime, and JavaScript Polling in the past, but I wanted to have a more modern way of awaiting a given state. Let’s have a look at this super useful waitFor function! waitFor is an async function that allows developers to provide a condition function, polling interval (in milliseconds), and optional timeout (in milliseconds). // Polls every 50 milliseconds for a given condition const waitFor = async... more → Posted in: JavaScript Tagged with: JavaScript, Polling, waitFor
Connecting Cloudflare Workers with Service Bindings / / No Comments I’ll warn you ahead of time and say this post isn’t too much more than what you can find in the documentation, but I wanted to see it work for myself so I had to setup a test locally. Cloudflare Service bindings are a way for one Worker to connect to another. That seems simple enough, but while it defines a "connection", that connection is completely internal to the Cloudflare environment. I.e., incredibly fast with much lower latency. Let’s consider a simple example. The Receiver # I began by creating a worker, named backworker, with just a simple message: export default { async fetch(request, env, ctx) { return new Response('Hello from Backworker'); },}; The Front... more → Posted in: JavaScript Tagged with: Bindings, Cloudflare, Connecting, service, workers
Adding Caching to a Cloudflare Worker / / No Comments Last week I blogged about my first experience building a Cloudflare Worker serverless function. In that post, I built a simple serverless function that wrapped calls to the Pirate Weather API, a free and simple-to-use API for getting weather information. For today’s post, I thought I’d show how easy it is to add a bit of caching to the worker to help improve its performance. As with my last post, I’ve also got a video walkthrough of everything you watch instead. (Or read and watch, go crazy!) The Application # In the last post, I shared the complete code of the Worker, but let me share it again: // Lafayette, LAconst LAT = 30.22;const LNG = -92.02;export default { async fetch(request,... more → Posted in: JavaScript Tagged with: Adding, Caching, Cloudflare, Worker
Learn about the Photoshop API Next Week / / No Comments Next week, Tuesday August 8 at 11AM CST, I’ll be giving a free, online presentation at CFE.dev on "Automating Image Workflows with Photoshop APIs". Here’s more information from the event description: Inarguably, Photoshop dominates the professional image editing software world. But did you know that many of the capabilities of Photoshop can be added to your own applications via Adobe’s Photoshop APIs? In this session, Raymond Camden will show you how to add image automations including modifying and enhancing images with powerful filters using the Photoshop APIs. If you can’t make it, just watch the recording later, and reach out with any questions. Photo by Glenn... more → Posted in: JavaScript Tagged with: about, Learn, Next, Photoshop, Week
ChatGPT via WYSIWYG (Sponsored) / / No Comments Artificial intelligence applications have hit like a massive wave over this past year, with ChatGPT being the most prominent. ChatGPT can take any written command and suggest content to match. What better than having the power of AI content creation than doing so within your own WYSIWYG editor! That’s what Froala can provide you — instant content creation with the power and intelligence of ChatGPT AI! Quick Hits The ChatGPT plugin can be installed in your WYSIWYG editor Type a command, highlight that text, click the ChatGPT button, and wait for the response! Help with content creation makes the written experience more enjoyable and the generated content more creative Easy to implement... more → Posted in: JavaScript Tagged with: ChatGPT, Sponsored, WYSIWYG
Integrating Acrobat Services with ColdFusion / / No Comments Last week I shared a look at how to integrate the Adobe Photoshop API with ColdFusion, and that got me itching to see how difficult it would be to do the same with our Acrobat Services. While ColdFusion has native PDF features built-in, I think there are aspects of the platform that may be of use to CF developers. The Acrobat Services Platform # Let’s start by briefly describing what Acrobat Services are. At a high level, they’re all about document management via APIs. Broadly the services are categorized like so: PDF Services – this is the "catch-all" bucket of services that do simple things like converting to and from PDFs, splitting, merging, and so forth. This... more → Posted in: JavaScript Tagged with: Acrobat, ColdFusion, Integrating, Services
URL.canParse / / No Comments Parsing of URLs on the client side has been a common practice for two decades. The early days included using illegible regular expressions but the JavaScript specification eventually evolved into a new URL method of parsing URLs. While URL is incredibly useful when a valid URL is provided, an invalid string will throw an error — yikes! A new method, URL.canParse, will soon be available to validate URLs! Providing a malformed URL to new URL will throw an error, so every use of new URL would need to be within a try/catch block: // The correct, safest way try { const url = new URL('https://davidwalsh.name/pornhub-interview'); } catch (e) { console.log("Bad URL provided!"); } // Oops,... more → Posted in: JavaScript Tagged with: URL.canParse
JavaScript closest / / No Comments When it comes to finding relationships between elements, we traditionally think of a top-down approach. We can thank CSS and querySelector/querySelectorAll for that relationship in selectors. What if we want to find an element’s parent based on selector? To look up the element tree and find a parent by selector, you can use HTMLElement‘s closest method: // Our sample element is an "a" tag that matches ul > li > a const link = document.querySelector('li a'); const list = a.closest('ul'); closest looks up the ancestor chain to find a matching parent element — the opposite of traditional CSS selectors. You can provide closest a simple or complex selector to look upward... more → Posted in: JavaScript Tagged with: closest, JavaScript