Skip to main content
Ben Nadel at cf.Objective() 2010 (Minneapolis, MN) with: Anne Porosoff
Ben Nadel at cf.Objective() 2010 (Minneapolis, MN) with: Anne Porosoff ( @AnnePorosoff )
🎄 Early Access Discount 🎄 Feature FlagsFrom Concept to Cultural Revolution

Recent Blog Posts by Ben Nadel

Generating Pandoc Heading Identifiers In ColdFusion

By Ben Nadel on
Tags: ColdFusion

Over on my Feature Flags book website, I'm using my book's Markdown content to generate the HTML for the page. I then use jSoup to inject a table of contents (TOC); which requires that I insert an identifier into each header element. And, now that I'm trying to use Pandoc to generate an EPUB (digital book) version, I need to make sure that my ColdFusion-based header identifiers match the ones that Pandoc will generate in the final EPUB... read more →

Creating A Marquee Effect With CSS Animations

By Ben Nadel on
Tags: HTML / CSS

The other day, while using the Pandora web app, I noticed that long song titles continuously scrolled by in a classic marquee fashion. Upon inspecting the DOM (Document Object Model), I saw that this effect was created using two side-by-side copies of the same content. Way back in the day, I used to do the same thing for some clients; but, my technique was powered with JavaScript. Pandora, on the other hand, was powering it with CSS transitions. I thought this would be fun to try out for myself... read more →

Multi-Var Assignments In A Single Line In ColdFusion

By Ben Nadel on
Tags: ColdFusion

The other day, when I was looking up some operators for my post on natural language operators in ColdFusion, I saw something in the documentation that surprised me: ColdFusion has the ability to assign multiple Function-local variables in a single line. It's a very strange notation, so I'll probably never use it. But, since it surprised me, I figured there's other people out there who have never seen it... read more →

Reflecting On Natural Language Operators In ColdFusion

By Ben Nadel on
Tags: ColdFusion

The other day, on the Lucee Dev Forum, I suggested that ColdFusion might benefit from having starts with and ends with operators. These would fall under the "natural language" operators, in that they read like normal human language, not computer jargon. But, my suggestion is somewhat fraudulent considering the fact that I never use the natural language operators in ColdFusion. This conversation, however, gave me pause to reflect on this choice more deeply... read more →

Working Code Podcast - Episode 155: We're Thankful For Software

By Ben Nadel on
Tags: Podcast

Coming out of the Thanksgiving holiday (and still recovering from our food comas), we wanted to have some fun today and talk about all of the software that we're thankful to have in our lives. These aren't sponsors of the show (yet); but, we love them so much that we wanted to share them with the rest of the world. Topics include Dead Man's Snitch, Overcast podcast player, git source control, GitHub, Snagit and Skitch screen capture tools, 1Password for password management, PlexTV for media management, video chat, IDEs and code editors, and basically everything that enhances the day-to-day lives of us developers... read more →

The RegEx Of Everyday Things

By Ben Nadel on

I'm a massive fan of Regular Expressions. I started learning about them 20-years ago for the purposes of data cleaning at Nylon Technology; and, since then, not a day goes by where I don't use them in some form. A lot of engineers view pattern matching as a dark art; and, there's no question that RegEx patterns can be very complicated. But, they don't have to be. Simple patterns can still add a lot value in your every day engineering life. And, there's no place where this rings more true than in your "Code Search"... read more →

Early Access: Feature Flags - From Concept To Cultural Revolution

By Ben Nadel on
Tags: Books

Almost 3-months ago, I announced that I was writing a book on Feature Flags. This morning, I'm thrilled to announce that I have an early access version available for purchase. This is a PDF version; and, the formatting is a bit rough around the edges. But, the content is all there. And, if you pick-up the book now (at a deep discount), you'll automatically get access to future versions... read more →

Working Code Podcast - Episode 154: Premortems And Log Levels

By Ben Nadel on
Tags: Podcast

On today's show, we continue reflecting on the 4-part series on "Failure" produced by the Freakanomics radio podcast. This time, we talk about Premortems; and, about how important it is for a company to create a safe space in which people can talk about failure and about the reasons failure might occur. We also dig into Logging strategies, structured logging, and role of different log levels. And, how we can best consume logs in a way that makes them valuable without being too noisy... read more →

Working Code Podcast - Episode 153: Our Biggest Failures

By Ben Nadel on
Tags: Podcast

Inspired by a 4-part series on "Failure" produced by the Freakanomics radio podcast, we went around the table and talked about our own failures. This helps to remove the social stigma associated with failure; and, helps other people process internal conflicts of emotion. Tim talks about failing to sell websites in the early dot-com boom; Adam talks about failing to create a ColdFusion package manager; and, I talk about the years that I lost trying to wrap my head around Object Oriented Programming (OOP)... read more →

Working Code Podcast - Episode 152: Crontab, AI, And Book Publishing

By Ben Nadel on
Tags: Podcast

This week on the show, the hosts talk about what we have going on. Adam is trying to better understand the cadence with which his scheduled tasks are executing; and, has built a visualization tool using Svelte and D3. Tim has signed up for CS50 at Harvard - an online course introducing Artificial Intelligence (AI) with Python. And, I finally have a working draft for the first half of my Feature Flags book; and, I'm now considering some sort of pre-sale (if I can figure out how to turn my Markdown files into something consumable)... read more →

Working Code Podcast - Episode 151: Async Human Solutions

By Ben Nadel on
Tags: Podcast

When you build a system that is wholly contained within a single process, life is quite clean and predictable. But, the moment you reach outside of your process in order to get work done, you realize how messy the world is. Communication between systems can breakdown for any number of reasons. Often times, we try to create resiliency within the chaos by apply technology. But, sometimes, it makes more sense-and is far less expensive-to fix these problems using a human-oriented solution... read more →

Working Code Podcast - Episode 150: What's On Your Workbench

By Ben Nadel on
Tags: Podcast

This week we go around the table and see what the hosts have going on. Carol got a promotion in her first week back at work, despite the fact that she's had to emotionally suppress everything she once knew about dotnet. Adam is now - finally - at 100% SOC compliance (and is awaiting a 3-month review period). Tim has been wrestling with APIs and bending them to his will (to receive JSON payloads). And, I have been considering different ways in which to package my Feature Flags book for a more interactive user experience... read more →

Enforcing The HTTP Request Method In ColdFusion

By Ben Nadel on
Tags: ColdFusion

HTTP GET requests should always be safe to execute because they are intended to read the state of the system in an idempotent fashion. Other HTTP methods (verbs)—such as POST and DELETE—which are intended to mutate the state of the system, can be dangerous and should be validated. Meaning, you never want to allow a GET request to invoke a resource that merits a POST method. I wanted to take a quick look at how you can enforce the HTTP request method in ColdFusion... read more →

jSoup Error: Index Out Of Bounds For Length

By Ben Nadel on
Tags: ColdFusion

Over on my Feature Flags Book site, I'm starting to move some of the content behind a pay-wall; and, to do this, I'm using jSoup to replace multiple content paragraphs with a single purchase notice paragraph within designated chapters. However, in my first approach to this algorithm, I was getting the following jSoup error:.. read more →

Working Code Podcast - Episode 147: Potluck

By Ben Nadel on
Tags: Podcast

This week, we go around the table and talk about a variety of topics. I talk about Transactive Memory Systems Theory and how it might be applied in an engineering context. Carol—having moved into a new home and a new job—talks about the joys of starting something new in her life. Tim talks about the short-comings of a ticketing system; and, Goodhart's Law (which states: "when a measure becomes a target, it ceases to be a good measure"). And, Adam considers what his life would look like if he took on more of a leadership / force-multiplier role at work... read more →

Understanding The TrimWhitespace() Function In Lucee CFML

By Ben Nadel on
Tags: ColdFusion

The other day, when I was looking into which whitespace characters are removed by trim(), I came across a Lucee CFML function that I hadn't seen before: trimWhitespace(). The Function doesn't have an in-depth description; and, looking at the Java code didn't immediately clarify the function's behavior. As such, I wanted to try it out for myself in order to see if the function might be useful to me in the future... read more →

Generating A Table Of Contents Using jSoup And ColdFusion

By Ben Nadel on
Tags: ColdFusion

I'm authoring my Feature Flags Book using Markdown. Then, I'm converting the Markdown into HTML using Flexmark and ColdFusion. And, once I have the raw HTML, I'm using jSoup to augment the DOM for output. As part of this, I'm dynamically injecting a Table of Contents (ToC). In the book, I'm only including the h2 headings; but, it got me thinking about how I might use jSoup and ColdFusion to create a more inclusive table of contents... read more →

Transactive Memory Systems Theory And Engineering Team Mentality

By Ben Nadel on
Tags: Work

On the most recent episode of The Hidden Brain podcast: The Secret to Great Teams, psychologist Anita Woolley discusses which characteristics consistently show up across high-performing teams. Of the topics included, the one that really grabbed my attention was that of "Transactive Memory Systems Theory". I had never heard this theory discussed in the context of teams; and, as they discussed it, I felt that it wasn't entirely aligned with how I see many engineering teams (including my own) attempting to work... read more →

Replacing RxJS With A State Machine In JavaScript

By Ben Nadel on

I have a lot of trouble working with reactive streams. It's just not how my brain works best. Give me a simple event-stream, and I can mostly hold that in my head. But, start to combine streams together, and my brain freezes up like a deer in headlights - my eyes darting from operator to operator, desperately trying to build-up a mental model of what is actually happening. As such, I recently removed RxJS from an application and replaced the reactive streams with state machines. It's definitely more code; but, I find it easier to reason about and maintain... read more →

Working Code Podcast - Episode 146: Resiliency Is Hard

By Ben Nadel on
Tags: Podcast

The products that we build can become quite complex and involve many interconnected parts. Due to this complexity, and to the properties of the natural world, these products will begin to fail in new and exciting ways. There's really no way to stop a system from failing; but, we can build systems that are more resilient to failure. That said, this is oftentimes much more challenging than we expect. On today's show, we talk about the complex systems that we've built personally; and, how we attempt to keep them online in the face of uncertainty... read more →

Working Code Podcast - Episode 145: Shiny New Things

By Ben Nadel on
Tags: Podcast

Adam, our early-adopter in residence, talks to Carol about Bun, Skeleton, and Svelte. With a focus on introducing new tools to an existing team, the two mainly talk about Bun, a hot new all-in-one JavaScript toolkit that is simultaneously a runtime, a server, a package manager, and a test runner. Come find out why its feature-set and speed leave Adam singing, My application don't want none unless you got Bun, hun!.. read more →

Which Whitespace Characters Does trim() Remove In ColdFusion

By Ben Nadel on
Tags: ColdFusion

Yesterday, an external API call that I was making failed because one of the values that I was posting contained a trailing "Zero width space" character (\u200b). The value in question was being passed-through ColdFusion's native trim() function; which was clearly not removing this whitespace character. As such, it occurred to me that I didn't really know which characters are (and are not) handled by the trim() function. And so, I wanted to run a test... read more →

Using FileReadLine() With Seekable Files In ColdFusion

By Ben Nadel on
Tags: ColdFusion

Last week, I started to explore seekable files in ColdFusion. A seekable file allows us to jump to an arbitrary offset within the file contents (which I believe can be done without having to read the entire file into memory). I've recently been dealing with consuming large text-files at work; and, I'm wondering if a seekable file might be something I can use to create a "resumable" consumption process. As such, I wanted to play around with using the fileReadLine() function in conjunction with seekable files in ColdFusion... read more →

Working Code Podcast - Episode 144: The Power Of One

By Ben Nadel on
Tags: Podcast

In a perfect world, we always do our best. But, our capacity for "best" changes on a day-to-day basis (see The Four Agreements by Don Miguel Ruiz). On some days, doing our best means jumping out of bed and absolutely crushing the day! On other days, doing our best means that we rallied just to get out of bed. And, that's OK. When we're in the slog - when our "best" is degraded - it can be helpful to identify a single, small challenge for the day; a challenge that can be accomplish and celebrated. This technique is what Carol calls the "Power of One"... read more →

Coming Soon: Feature Flags - From Concept To Cultural Revolution

By Ben Nadel on
Tags: Work

In my tenure as a co-founder and principal engineer at InVision, I went from never having heard of "Feature Flags" (aka "feature toggles" aka "feature switches"); to seeing them become widely adopted by our engineering team; to witnessing a complete cultural revolution in regard to how our company approached product development. For me, feature flags are as transformational as databases — they are as important as both logs and metrics. I cannot imagine creating another product without them... read more →

Using Labeled Loops In JavaScript

By Ben Nadel on

Earlier this week, I looked at using labeled loops in ColdFusion. Labeled loops allow you to break and continue an outer loop from within the context of an inner loop by explicitly naming your loop statements. I had never used this functionality in ColdFusion before; and, it turns out, the same functionality is available in JavaScript. As such, I wanted to try it out in the browser as well... read more →

Working Code Podcast - Episode 143: Moving On, Rewriting, And Replatforming

By Ben Nadel on
Tags: Podcast

While change is inevitable, managing and adapting to change is always a challenge. Change represents the end of something we knew and - at least for some period - loved; and, ushers in the start of something completely unknown. On today's show, we explore the difficulties in "moving on" using several different contexts: Jobs, tech stacks, video games, API implementations, front-end frameworks, and more... read more →

Including CSS File Content Using CFInclude In ColdFusion

By Ben Nadel on
Tags: ColdFusion

In my first pass at building Dig Deep Fitness - my ColdFusion fitness tracker - I'm using a traditional, multi-page application (MPA) approach. Which means, every navigation is a full-page refresh. This is slower than a single-page application (SPA). As such, in order to help decrease page load times - especially on first load - I'm rendering my temporary CSS directly in the page <head> tag. This way, the browser doesn't need to block-and-request the .css file in a separate HTTP request. And, to keep things super simple, I'm doing this with the CFInclude tag; which, in ColdFusion, can include any kind of text file... read more →

Using Labeled Loops In ColdFusion

By Ben Nadel on
Tags: ColdFusion

The other day, I was watching a tutorial on the Svelte JavaScript framework and I saw that they used the $: notation to denote reactive values. I believe that this is just an old JavaScript feature for labeling parts of the code (which Svelte is then overloading). I've never used that JavaScript feature myself; but, it did remind me that some of this labeling concept is also available in ColdFusion as well, specifically for loops. I've never used this feature in ColdFusion either; so, I thought it might be worth a quick exploration... read more →

Using Seekable Read Files In ColdFusion

By Ben Nadel on
Tags: ColdFusion

Yesterday, when I was looking at how to loop over a file using CFLoop, I came across an old post of mine in which Raymond Camden mentioned the fileSeek() function. In all my years of ColdFusion, I've never used fileSeek() - which allows us to jump to an arbitrary offset within a file. I believe that fileSeek() works with both readable and writable files; however, the documentation on this is unclear. For this post, I'm looking at using seekable read files in ColdFusion... read more →


I believe in love. I believe in compassion. I believe in human rights. I believe that we can afford to give more of these gifts to the world around us because it costs us nothing to be decent and kind and understanding. And, I want you to know that when you land on this site, you are accepted for who you are, no matter how you identify, what truths you live, or whatever kind of goofy shit makes you feel alive! Rock on with your bad self!
Ben Nadel