Recent Blog Posts by Ben Nadel
Sorting Arrays Using Tiered Comparisons In ColdFusion
In ColdFusion, I love working with arrays. In fact, I've moved all of my data access layers over to returning arrays-of-structs instead of query objects. But, one thing that I really miss about SQL is the effortless nature of tiered ORDER BY sorting. With ColdFusion arrays, we have some in-built sorting functionality; however, in order to achieve a multi-property sort, I needed to build an abstraction for tiered comparisons... read more →
Using The Safe Navigation Operator To Propagate NULL Arguments In ColdFusion
One pattern that has emerged in my ColdFusion code recently is the use of the safe navigation operator to easily propagate null and sometimes-null values down through a series of method calls. ColdFusion can handle null values no problem—it just doesn't like null reference errors (NRE), which typically surface in your applications as "key does not exist" errors... read more →
ColdFusion Custom Tags Can Use Dashes In Tag Names
Yesterday, I was looking at the Laravel Flux UI framework; and was impressed with how clearly they've codified their approach to custom tag organization. I wanted to borrow their thinking to do some exploration on the ColdFusion side. In Flux, they use the dot (.) to namespace their tags. This doesn't work in ColdFusion; but, I was pleasantly surprised to see that dashes (-) can be used in custom tag identifiers... read more →
Using The Button Form Attribute To Create Standalone Buttons In HTML
A couple of years ago, when I was first learned about Hotwire Turbo, I noticed that it was using HTML attributes to override form submissions. And, that these Turbo techniques would often associate any button with any form using these attributes. Just recently, this got me wondering if such an approach would be helpful when styling buttons that should otherwise look like anchor links... read more →
Checking For Nested CFThread Execution In Adobe ColdFusion
Years ago, when Adobe ColdFusion introduced the CFThread tag for effortless asynchronous programming in CFML, they made a decision to not allow your application to spawn nested threads. I believe most people view this as a misguided decision (though well-intentioned). And yet, this constraint still exists in the latest ColdFusion 2025 release which came out yesterday... read more →
Rest Operator Doesn't Work With Only One Argument In Adobe ColdFusion
In Adobe ColdFusion, as in many languages, you can use the rest operator to collect an open-ended number of function arguments into an array. But, I ran into a bug wherein the Rest operator doesn't work when only a single "rest argument" is passed-in during function invocation. When a function is invoked with a single argument, and the function is only parameterized using the rest operator, the value comes through as is, and is not collected into an array... read more →
Sanity Checking HTTP Method Used After Location() Call In ColdFusion
Over the weekend, I read the book Hypermedia Systems by Carson Gross. The book lays out a rather compelling argument for the use of HTML and hypermedia as the foundation for most web applications. And, as I read the book, I found myself nodding in violent agreement with most of what was being discussed. Except for something that he said with regard to URL redirection. In his chapter on "htmx patterns", he mentioned that URL redirection should be performed with a 303 See Other status code otherwise the incoming HTTP method would be propagated to the next page:.. read more →
Hypermedia Systems By Carson Gross
Last week, Peter Amiri - maintainer of the CFWheels framework for ColdFusion - sent me a hardcover copy of Hypermedia Systems by Carson Gross, Adam Stepinski, and Deniz Akşimşek. This book argues for the benefits of "Hypermedia Driven Applications" (HDA); and how leaning into the foundational nature of the web as a unified interface and hypermedia platform makes applications easier to build and more accessible while still achieving a high-bar of interactivity. This book is clear, concise, and quite compelling. Coming in at around 300 pages, I finished reading it in two day—I just couldn't put it down... read more →
Ben & Ryan Podcast - Episode 10: Developer Career Paths With Dan Short
It was such a pleasure to get to talk to long-time friend and colleague, Dan Short. He shares insights about his career transition from an Individual Contributor (IC) development role into an engineering management role. Which, as you can imagine, isn't always the easiest journey. He fell victim to what many management-curious engineers probably fall victim too: not fully committing to the "hard work" in the beginning. On the show, we talk about the common pitfalls of such a transition, myths around moving up the career ladder, and many fun tangents (you're welcome) along the way!.. read more →
Ben & Ryan Podcast - Episode 9: Management And AI With Shawn Gorrell
On this week's episode, we talk to Shawn Gorrell. We cover a wide range of topics (so typical), including AI, custom ChatGPTs, solving problems by removing things instead of adding them, building healthy productive teams, myths of in-office work, introverts vs. extroverts, and what the "Florida Man" teaches us about the importance of transparency. And so much more... read more →
Ben & Ryan Podcast - Episode 8: Learning New Things
On this week's episode, Ryan and I talk about what we've been learning and what we've been experimenting with. As someone who's been very slow to weave AI (Artificial Intelligence) into my day-to-day life, I was particularly keen to hear how Ryan's been using ChatGPT in both his personal and professional life... read more →
Ben & Ryan Podcast - Episode 7: How ColdFusion Is Made With Charvi Dhoot
It was such a pleasure to have Charvi Dhoot and Brian Sappey on the podcast this week. We got a really nice glimpse into the way in which ColdFusion is managed as a product... read more →
Ben & Ryan Podcast - Episode 6: Thanksgiving
Leading up to Thanksgiving, we thought it'd be nice to give some thanks and praise. And personally, I feel very lucky that Ryan Brown does the lion's share of work on this show. I just get to show and have a great time talking to the wonderful guests that he pulls into our web of mind games. It has been an honor... read more →
Ben & Ryan Podcast - Episode 5: Cloud Hosting With Dakota Clum
On this week's show, we talk to Dakota Clum, the CTO of xByte Cloud. While many of us in web development live in a world of auto-scaling groups, cloud functions, and Kubernetes (K8), it's certainly not the only way to do development—many of us still live in a world of Virtual Private Servers (VPS) and deploy code to production using git pull (and other not-so-automated process)... read more →
Ben & Ryan Podcast - Episode 4: Adobe ColdFusion 2025 With Mark Takata
After years of talking to Mark Takata in various online channels, it was so great to finally meeting the man—the tree trunk of a man—in person at CFSummit! On this episode of the podcast, Ryan and I get to talk to him about being good stewards of the ColdFusion ecosystem. And how sometimes you just gotta DO IT LIVE and ask for forgiveness later. Yolo!.. read more →
Ben & Ryan Podcast - Episode 3: Freeforming IT
On this week's show, Ryan and I talk about random stuff... read more →
Ben & Ryan Podcast - Episode 2: Cryptography With Justin Scott
On this week's show, I had the great pleasure of talking to Justin Scott about ColdFusion and Security. When it comes to security, I always want to do the right thing in my applications; but, security is a deep subject with an ever-evolving notion of what actually satisfices "right". The good news is that there's always a path forward in your applications no matter where you're starting from. Hardening your application is necessarily an ongoing, iterative process that starts now and goes until you die... read more →
Ben & Ryan Podcast - Episode 1: Kick-Off Show
After meeting in person for the first time at ColdFusion Summit East 2024 (Vegas baby!), Ryan Brown and I thought that it'd be fun to get together and talk about the exciting world of technology from our two different perspectives: me from the programming and product management side and him from the hosting and marketing side. On this—our inaugural episode—we reflect on CFSummit and share some of our favorite memories... read more →
Using The XOR Operator To Assert Connascence Of Existence In ColdFusion
In all my years of programming, I don't think I've ever used the XOR operator. The XOR operator—or, "Exclusive OR" operator—is a Boolean operator that results in False if the given operands have the same truthiness; and, True if the given operands have different truthiness:.. read more →
Working Code Podcast - Episode 203: Naming Things Is Hard
It teeters on embarrassing; but after 25-plus years of web programming, I still don't feel confident in the naming conventions that I use in my application architectures. It's almost cliche to admit this since our industry has long-joked that naming things is one of the hardest parts of computer science. But, I'm frustrated that I haven't yet found something that feels like the "right way" to do it... read more →
Using Partial Component Paths As Argument Types In ColdFusion
When you define a User-Defined Function (UDF) in ColdFusion, both the argument types and the return type can reference a ColdFusion component path. In my code, I typically use any for such types because I find that including a long component path makes the code overly verbose. It turns out, however, that you don't have to include the entire component path. ColdFusion will happily validate component-based types even if you only use a partial path. And, the flexibility of the type reconciliation depends on the extent of the path provided... read more →
Overloading Error.ExtendedInfo As A Data URL In ColdFusion
For the most part, ColdFusion provides wonderful error handling functionality. Between the try / catch / finally blocks, the throw() statements, and the global error handler (in the Application.cfc), it's hard for any error to go unnoticed in a ColdFusion application. But, one thing that isn't so easy to do is provide additional complex data alongside a given error. Historically, I've overloaded the .extendedInfo property in order to provided such additional information. And, that's what I'm talking about in this post. But, this post is a refinement on the idea, making the technique significantly more robust and consumable... read more →
Working Code Podcast - Episode 202: Um, Actually
This week on the show, Adam shakes up our usual format by organizing a game for me and Tim. Inspired by a segment that he saw on the now defunct College Humor site, Adam reads us a series of statements about web development. Most of each statement is true; but, part of each state is false. The challenge is to figure out which part of each statement is false; and how we can correct the false part to be true... read more →
Getting Flattened Component Metadata In ColdFusion
Over the years, I've learned to favor composition over inheritance in my ColdFusion programming. To power this Inversion of Control (IoC) pattern, I use a simple component that provides a dependency injection (DI) container. This component has worked well until I recently tried to use inheritance in part of my ColdFusion data modeling. It turns out that ColdFusion's getMetadata() built-in function (BIF) returns data in a hierarchical structure that doesn't play nicely with my simplified injector mechanics... read more →
Working Code Podcast - Episode 201: LLM's vs Stack Overflow
After a much enjoyed winter break, we at the Working Code podcast are back at our microphones for season two. And, to kick things off, we're talking about LLMs vs. Stack Overflow. Large Language Model (LLM)-based Artificial Intelligence (AI) is currently at the center of many tech conversations. Put bluntly, it is the thing that we're all paying attention to. But, human attention is finite; and, as members of the Stack Overflow community have reported, the emergence of LLMs has had a massive impact on the site's interest (with question-asking down some 70% in the last two years). Does this foretell an end of Stack Overflow? Or, is this merely a moment in which the pendulum is swinging a bit too far in a new direction?.. read more →
Collocating My .gitignore Configuration Files With The Omitted Files
I believe that maintainable code is code that's easy to find and easy to delete. And, a big part of what make's code easy to find and easy to delete is collocation. Which is why I've been experimenting with collocating my CFML, JavaScript, and CSS files; as well as my collocating my ColdFusion partials with my CFML views. This morning, as I was setting up a new project, it occurred to me that my .gitignore files might present another opportunity for collocation... read more →
Extracting InVision V6 Document Export JSON Data In ColdFusion
The other day, I looked as hosting your exported InVision V6 documents on Cloudflare. This allows you to take your Prototype and Board ZIP archives, drag-and-drop them into a deployment workflow, and effortlessly publishing them "as is". Which is great for archival purposes. But, it doesn't help if you want to consume those exports programmatically. For programmatic access, I've created a ColdFusion utility that will help you extract the JSON configuration data that represents your exported document... read more →
Hosting Your Exported InVision V6 Prototypes On Cloudflare Pages
In the months leading up to the closing of InVision, I created a bulk export system for the V6 cloud platform. This allowed our wonderful V6 users to export their prototypes and boards en masse directly to an Amazon S3 bucket. The exports were designed to be consumable directly from a user's computer file system. But, this also means that they can be easily hosted as static sites. As a final gesture and show of good will, I wanted to demonstrate how these ZIP files can be effortlessly uploaded and deployed for free using Cloudflare Pages... read more →
Strange ___IMPLICITARRYSTRUCTVAR Behavior In ColdFusion
While James England and I were working on Dig Deep Fitness, we came across a rather mysterious ColdFusion behavior. The local memory leak detection mechanism started reporting the existence of an unexpected variable called, ___IMPLICITARRYSTRUCTVAR0. I'd never seen this before; but Google pointed me to something Adam Cameron mentioned it on an old Adobe ColdFusion forum post from 2012. Apparently implicit struct and array notation has been creating these hidden variables since ColdFusion 9... read more →
Free Online Version Of My Feature Flags Book
A little over a year ago, I published my book, Feature Flags: Transform Your Product Development Workflow. This book contains everything that I learned about feature flags, experimentation, and the fundamental way in which using feature flags transforms both your team culture and your approach to product development. I believe so deeply in the necessity of feature flags that I no longer feel satisfied hiding this content behind a paywall. Which is why I'm super excited to announce that I've created a free online version of my feature flags book... read more →