Skip to main content
Ben Nadel at cf.Objective() 2014 (Bloomington, MN) with: Jeff McDowell and Joel Hill and Jonathan Rowny and Shawn Grigson and Jonathan Dowdle and Matt Vickers and Christian Ready and Asher Snyder and Clark Valberg and Oscar Arevalo and David Bainbridge and Josh Siok
Ben Nadel at cf.Objective() 2014 (Bloomington, MN) with: Jeff McDowell ( @jeff_s_mcdowell ) Joel Hill ( @Jiggidyuo ) Jonathan Rowny ( @jrowny ) Shawn Grigson ( @shawngrig ) Jonathan Dowdle ( @jdowdle ) Matt Vickers ( @envex ) Christian Ready ( @christianready ) Asher Snyder ( @ashyboy ) Clark Valberg ( @clarkvalberg ) Oscar Arevalo ( @oarevalo ) David Bainbridge ( @redwhitepine ) Josh Siok ( @siok )

Recent Blog Posts by Ben Nadel

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 →

Using CFLoop To Iterate Over A File Line-By-Line In ColdFusion

By Ben Nadel on
Tags: ColdFusion

Yesterday, at work, I had to take a CSV (Comma-Separated Values) file with 4.7 million lines of data in it and break it up into smaller files that each had 25K lines of data. I don't do a lot of file I/O (Input, Output) at work, so I'm a bit rusty. I ended up using the fileOpen(), fileReadLine(), and fileClose() functions to imperatively iterate over the file without reading it fully into memory. It wasn't until after I was done that I remembered the CFLoop tag can actually do all of that for me declaratively in ColdFusion... read more →

Using Feature Flags To Hack Your Own Psychology

By Ben Nadel on
Tags: Work

On a recent episode of the Hidden Brain podcast: You 2.0: How to Break Out of a Rut, they talked about the "goal gradient". This is the idea that at the start of a journey, you move quickly due to the excitement; then, you slow down for the long slog in the middle; and finally, towards the end - when the goal is in sight - you move quickly again with a renewed sense of purpose. Studies demonstrate that this is just as true for mental tasks as it is for physical tasks. And, as I was listening to the episode, it occurred to me that feature flags are a perfect way to hack your own psychology in order to remain maximally productive when building large features within a product... read more →

Working Code Podcast - Episode 142: Tangents All The Way Down

By Ben Nadel on
Tags: Podcast

When Carol's not here to keep us in line, the show quickly flys off the rails. So much so, in fact, that we never made it to the intended topic - it's just tangents upon tangents upon tangents. We touch upon "vendoring" of our external libraries, installing dependencies with apt-get, dictation app differences between macOS and iOS, the regret of not building features sooner, building the perfect demo for clients, and the "trap" of having to innovate. And that's not even everything! Carol - we need you! You're our only hope!.. read more →

Wireframing For Everyone By Michael Angeles, Leon Barnard, And Billy Carlson

By Ben Nadel on
Tags: Books

This morning, I finished reading one the latest "A Book Apart" releases: Wireframing For Everyone by Michael Angeles, Leon Barnard, and Billy Carlson. A quick read, the book explores the value-add of wireframes from the individual, team, and product perspectives; and, steps through the creative process from raw idea to formulation to engineering hand-off to deployed solution. I loved this book! It felt like coming home... read more →

Working Code Podcast - Episode 141: Building Stuff So You Can Build Stuff

By Ben Nadel on
Tags: Podcast

Inspired by an article from Dimitri Glazkov: Build a thing to build the thing, we talk about the importance of consuming of our own products. Often referred to as "Dog Fooding", this means that we must try and build something in the same way that our customers would be expected to build something. And, in doing so, better identify the feature gaps and the points-of-friction. In order to best meet our customers where they are, we have to - in a sense - become our customers... read more →

Using Position: Sticky With Multi-Sided Anchoring In CSS

By Ben Nadel on
Tags: HTML / CSS

The other day, in Dig Deep Fitness, I created a user interface (UI) in which I had two side-by-side lists of radio-buttons. In an effort to keep the UI simple but effective, I attempted to make the :checked radio-button position:sticky. And, I ended up doing so using both top and bottom anchoring. Before that, I had assumed that a sticky element could only be anchored on one side. Turns out, a sticky element can be anchored on multiple sides at once in CSS... read more →

Working Code Podcast - Episode 140: Fraud, What Is It Good For?

By Ben Nadel on
Tags: Podcast

If a property is exposed on the internet, people will try to take advantage of it. This might be in the form of sending spam through a communications portal, scamming cellular providers via SMS tolling, or using payment forms to validate stolen credit cards. And that's just to name a few possible attack vectors! It appears there's no hurdle too high nor process too tedious for the fraudsters to circumvent. On today's show, we share our own war stories about detecting, preventing, and dealing with the aftermath of fraud on our own web-facing applications... read more →

Error "Type" Isn't Always A String In Adobe ColdFusion

By Ben Nadel on
Tags: ColdFusion

Yesterday, while working on Dig Deep Fitness, my ColdFusion fitness tracker, I accidentally consumed an ordered struct as if it were an array. As expected, ColdFusion threw an error; however, my centralized error handling logic broke because the type property of the thrown error was not a string, it was a complex Java object. I don't think I'd ever run into this issue before - I've always believed that the type, message, detail, and extendedInfo properties were guaranteed to be a string. I guess not... read more →

Sanity Check: Using Overflow Scrolling On CSS Flexbox Panels

By Ben Nadel on
Tags: HTML / CSS

I'm a huge fan of CSS Flexbox. As someone who had (?has?) to support IE11 up until the very end, CSS Flexbox became my go-to for complex layouts. However, even with years of Flexbox experience under my belt, I'm not always confident that I understand exactly how it will behave when it contains overflowing content. One scenario in which I've been using Flexbox recently is to create a dynamic set of "panels". Consider a set of side-by-side panels in which one panel is dynamically added or removed to and from the DOM (Document Object Model), respectively. Is it safe to apply overflow:auto to these CSS Flexbox panels?.. read more →

Working Code Podcast - Episode 139: New Tables vs New Columns

By Ben Nadel on
Tags: Podcast

Early on in my career, my default behavior was to add new database columns to any existing table that felt "similar enough" in nature. After years of evolving an application, however, this has lead to relatively wide tables with only a loose sense of cohesion. More recently in my career, I've started to err on the side of creating new tables in order to house new columns. While this approach adds complexity in some ways, it also reduces complexity in other ways and creates a more clearly defined data model. Or, so I hope... read more →

My ColdFusion "Controller" Layer Is Just A Bunch Of Switch Statements And CFIncludes

By Ben Nadel on
Tags: ColdFusion

The more experience I get, the more I appreciate using an appropriate amount of complexity when solving a problem. This is a big part of why I love ColdFusion so much: it allows one to easily scale-up in complexity if and when the requirements grow to warrant it. When I'm working on my own, I don't need a robust framework with all the bells-and-whistles. All I need is a simple dependency-injection strategy and a series of CFSwtich and CFInclude statements... read more →

Working Code Podcast - Episode 138: Ben Goes Streaking!

By Ben Nadel on
Tags: Podcast

As I've been building-out Dig Deep Fitness, I've been wanting to include an "Activity Streak" indicator as a way for people to feel good about the consistent effort that they put into their workouts. "Streaks", however, are bucketed by "day"; and, said "day" is specific to the user's current timezone experience. Historically, I've stored all of my application dates in UTC time; but, I sense that this won't be appropriate for "Activity Streak" tracking. As such, I'm turning to my brilliant Working Code co-hosts for their sagely advice... read more →

Layla Porter On Modular Monolith Boundaries

By Ben Nadel on
Tags: Work

Yesterday, I listened to episode 1,856 of the dotnet rocks podcast with guest Layla Porter, Developer Advocate at VMWare. The show discussed "Modular Monoliths"; and, was one of those exciting moments in which I learned that the mental model I've constructed about an idea is completely wrong. That is to say, a "modular monolith" is not at all what I thought it was... read more →

Auto-Saving Form Data In The Background Using The fetch() API

By Ben Nadel on

In Dig Deep Fitness, my ColdFusion fitness tracker, the main gesture of the app is the "Perform Exercise" view. In this view, the user is presented with a series of inputs for resistance weights, reps, and notes. Depending on how fast a user is moving through their workout, they may be on this one view for several minutes without submitting the form back to the ColdFusion server. This "pending data" makes me nervous. As such, I've started auto-saving the form data in the background using JavaScript's fetch() API... read more →

MySQL 8.0.13 Can Use An Existing Column As The DEFAULT Value For A New Column

By Ben Nadel on
Tags: SQL

In my Dig Deep Fitness app, I need to start differentiating between the date on which a record was created in the system and the date that said record represents for the user. For example, when back-filling workout data, an "exercise performance" from "3 years ago" might be entered into the app "today". As such, I need to add an executedAt date/time column; and, for all existing rows, I need to default said column value to match the existing createdAt column. As of MySQL 8.0.13, it turns out that you can do this in the actual table column definition... read more →

Considering UTC And Recording Activity Streak Data In ColdFusion

By Ben Nadel on
Tags: ColdFusion, SQL

For as long as I can remember, I've been storing Date/Time values in UTC (Coordinated Universal Time) within my ColdFusion applications. UTC is "the primary time standard by which the world regulates clocks and time" (source). Date/Time values get stored in UTC and then - as needed - translated back into a given user's timezone during the rendering process. This is why, when I added the concept of "workout streaks" in Dig Deep Fitness (my ColdFusion fitness tracker), my initial instinct was to use UTC. Unfortunately, this approach quickly broke down... read more →

Working Code Podcast - Episode 137: The Grug Brained Developer

By Ben Nadel on
Tags: Podcast

This week on the show, we have Tim - our only host with screen acting experience - read from The Grug Brained Developer, "A layman's guide to thinking like the self-aware smol brained". This guide uses a fun, caveman'esque language to point out the challenges and missteps that we often take in software development. And, how keeping things simple - for easy smol brain consumption - will often lead to better software outcomes... read more →

Working Code Podcast - Episode 136: Do Words Matter?

By Ben Nadel on
Tags: Podcast

Words aren't just the tools that we use to describe the world around us - they are rich layers of abstraction that carry our cultural histories, our education, and our social norms on their shoulders. When we have a shared understanding of a what a word or turn-of-phrase means, our ability to communicate with each other is robust and unparalleled. But, when our differences our great, we end up talking past each other. Words aren't just effective, they're magical. Take, for example, a simple analogy: "It's the movie JAWS, but with cats!" - this will immediately conjure up entire worlds within the mind of the listener. So, do words matter? You bet your donkey they do!.. read more →

Spread Operator Cannot Replace Struct-Based argumentCollection In ColdFusion

By Ben Nadel on
Tags: ColdFusion

I've been slow to adopt the Rest and Spread operators in ColdFusion because they aren't supported in the version of Lucee CFML that I use at work. But, they are supported in my personal use of Adobe ColdFusion. As such, I wanted to start thinking about ways in which to leverage these operators. One such case is constructing a dynamic collection of arguments and then invoking a method with argumentCollection. I thought that perhaps I could use the spread operator instead. This works when the arguments are array-based; but, it does not work when the arguments are struct-based... read more →

Adobe ColdFusion Elvis Operator Struggles With Nested Array References

By Ben Nadel on
Tags: ColdFusion

In Lucee CFML, the Elvis Operator (null coalescing operator) is quite powerful. In fact, it can often replace the Safe Navigation operator when access values on deeply-nested structures. In contrast, the Elvis Operator in Adobe ColdFusion is much more problematic. And, in fact, I just ran into another rough edge in the ACF implementation. It seems that the Elvis operator has trouble with nested array references... 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