Skip to main content
Ben Nadel
It's not enough; but, not enough is better than nothing.
Ben Nadel at CFUNITED 2008 (Washington, D.C.) with: Nafisa Sabu
Ben Nadel at CFUNITED 2008 (Washington, D.C.) with: Nafisa Sabu@nafisa13 )

Recent Blog Posts by Ben Nadel

Mixing Promises And async / await For Caching Purposes In JavaScript

By Ben Nadel on

Now that I've dropped support for IE11 on my blog and have wholly embraced (a work in progress) the constructs of "modern JavaScript", I'm starting to look at where I can add efficiencies. One idea that I had was to pre-cache some photo information in my hero image carousel. At first,... read more »

Working Code Podcast - Episode 58: Do 10x Developers Exist?

By Ben Nadel on
Tags: Podcast

For our main topic this week, we discuss the concept of the "10x Developer". This notion has its roots in bona fide research; however, much of the nuance has been lost in translation. When many people talk about the 10x Developer, what they imply is that there are great developers that... read more »

Creating jQuery Function Parity With Umbrella JS

By Ben Nadel on

Yesterday, I talked about replacing jQuery with Umbrella JS and cutting my JavaScript bundle size (uncompressed) by 91% . And, while Umbrella JS has a very similar API to jQuery, it's not exactly the same. In order to ease the transition from jQuery to Umbrella JS, I created some Umbrella JS pl... read more »

Replacing jQuery (110kb) With Umbrella JS (8kb)

By Ben Nadel on

The other day, I decided to stop supporting IE11 on my blog . Which means, I should be able to remove a lot of the transpiling that I do in my JavaScript build system (parcel). Which should, in turn, lead to a reduced bundle size. In that vein, I momentarily considered replacing jQuery with native... read more »

It's Not Enough, But Not Enough Is Better Than Nothing

By Ben Nadel on
Tags: Work

Over the weekend, I was listening to an episode of Hidden Brain on "Changing Behavior, Not Beliefs" when his guest, Phillip Atiba Goff , said something that stopped me in my tracks: " It's not enough; but not enough is better than nothing ". It struck me that this phrasing pe... read more »

I'm Dropping IE11 Support, What JavaScript Features Can I Use Now?

By Ben Nadel on

For years, I've had to support IE11 (Internet Explorer 11) at work. Which means, JavaScript code either had to work in IE11; or, it had to "gracefully degrade" such that it was usable in IE11 even if more modern browsers received a better experience. On top of that, our JavaScript bui... read more »

Working Code Podcast - Episode 57: Goals For 2022

By Ben Nadel on
Tags: Podcast

New Year's Resolutions may be considered a bit cliche by some; and even a bit silly by others; but, there's always value in any opportunity to pause and take stock of your own situation. On this week's show, we share both our tech and our non-tech goals for the new year. As it happens, we all w... read more »

Canceling API Requests Using fetch() And AbortController In JavaScript

By Ben Nadel on

The other day, I looked at using fetch() to build an opinionated API client as a replacement for the jQuery.ajax() function. When using jQuery to initiate an AJAX call, the return value is Promise -like, and has an injected .abort() method for canceling the underlying request. The fetch()... read more »

Building An API Client With The fetch() API In JavaScript

By Ben Nadel on

In my continued effort to modernize this blog , I'm thinking about trying to replace the jQuery library with more modern techniques. I don't personally have anything against jQuery; but, by replacing it, I'll have an opportunity to learn newer - and hawter - JavaScript APIs (at the expense of ro... read more »

Showing A Comment Preview As You Type On This Blog

By Ben Nadel on

Since comments, on this blog, are authored using Markdown (and ColdFusion) , there is a delta between what you write in the intake form and what is eventually rendered in the HTML. Much of the time, this delta is expected; however, if you have small errors in your markdown syntax, you can end... read more »

Working Code Podcast - Episode 56: Best Of 2021

By Ben Nadel on
Tags: Podcast

With a year of Working Code episodes behind us, our podcast has come a long way. But, we're still trying to figure things out: we are continuing to play with the show format, we are each growing into our own voice, and hopefully we're putting together some content that adds a little something, some... read more »

Mitigating Cross-Site Scripting (XSS) Attacks With A Strict Content Security Policy (CSP) In ColdFusion 2021

By Ben Nadel on
Tags: ColdFusion

As I continue to evolve my blogging platform, bringing it into the modern ColdFusion era, I'm trying to catch up on best practices. Of course, I've always used SQL query parameterization to block SQL injection attacks. And, I use encodeForHtml() and encodeForHtmlAttribute() in as many places... read more »

preserveCaseForStructKey Doesn't Work Inside Application.cfc In Adobe ColdFusion 2021

By Ben Nadel on
Tags: ColdFusion

Over the New Year's holiday, I ran into a rather peculiar behavior regarding the preservation of key-casing and the serializeJson() function in Adobe ColdFusion 2021. It appears that the serialization setting for preserveCaseForStructKey doesn't apply to code that resized physically within the... read more »

Posting Comments Using Reply Emails And Postmark's Inbound Streams In ColdFusion 2021

By Ben Nadel on
Tags: ColdFusion

I've been a very happy Postmark customer for the last decade. Their SMTP and API services make sending and receiving emails absurdly simple. And, their Inbound webhooks allow you to treat Postmark as a reverse proxy that transforms inbound email delivery into API calls (webhooks) against your... read more »

Centralizing The Error Response Handling For My ColdFusion Blog

By Ben Nadel on
Tags: ColdFusion

If you've noticed that my blog has been quite quiet over the last few weeks, it's because I've dedicated December to modernizing and upgrading my blogging infrastructure . The refactoring has been extensive , to say the least; and, on the list of things that I've wanted to for a long time is cent... read more »

Working Code Podcast - Episode 55: Sales Fails

By Ben Nadel on
Tags: Podcast

When you consider the hourly-rate of everyone in the room, meetings can be shockingly expensive. And, if it's a sales meeting, both actual and opportunity costs are on the line. Which is why we practice our sales pitches and offer up a sacrifice to the Demo Gods. But sometimes, that's not enoug... read more »

Working Code Podcast - Episode 54: We're So Quacked!

By Ben Nadel on
Tags: Podcast

At 3:30 AM the day before Thanksgiving, I received an emergency page about a failing API end-point. Rushing to my desk, groggy-eyed and in various states of undress, I jumped into the #incident channel on Slack to see what was happening. What unfolded over the next 30-hours was the manifestation... read more »

Adding Canonical Link Tags To My Blog For Search Engines

By Ben Nadel on

Yesterday morning, I updated the logic that renders the "People" image at the top of my blog. As you may (or may not) know, you can influence which photo is rendered by including a ?site-photo={id} query-string parameter in the URL. While this is a fun feature, I've always had a con... read more »

Working Code Podcast - Episode 53: Interview With Adam Lehman

By Ben Nadel on
Tags: Podcast

On this week's show, Tim interviews Adam Lehman , the Director of Product for Marketplace Core at Spotify . Of course, many friends-of-the-blog will know Adam more intimately as the former Director of Product and Engineering at Adobe where he helped drive the Adobe ColdFusion product and communit... read more »

I Finally Implemented Dark Mode Using CSS Custom Properties On This Blog

By Ben Nadel on

For years, I've wanted to implement Dark Mode on this blog. I started playing around with component theming using CSS Custom Properties in Angular 3-years ago; and, I added a very rudimentary dark mode to BigSexy Poems ; but, I could never quite wrap my head around theming on a larger scale.... read more »

Working Code Podcast - Episode 52: Interview With Steve Rittler

By Ben Nadel on
Tags: Podcast

On this week's show, Adam interviews his long-time friend and boss Steve Rittler , founder and CEO of AlumnIQ . Once a software engineer himself, Steve discusses his journey from individual contributor (IC) to business leader; and, how he sees his role as the boss from both a practical and a phil... read more »

Recording Datadog / StatsD Gauges For Database Key Utilization In Lucee CFML 5.3.7.47

By Ben Nadel on
Tags: ColdFusion, SQL

As a fast-follow to yesterday's post on using information_schema to inspect primary and secondary index key utilization in MySQL and Lucee CFML, I wanted to demonstrate how to then take that utilization information and persist it to a StatsD consumer, like Datadog , such that monitoring and al... read more »

Inspecting Primary And Secondary Index Key Utilization For MySQL 5.7.32 In Lucee CFML 5.3.7.47

By Ben Nadel on
Tags: ColdFusion, SQL

The day before Thanksgiving, I was paged at 3:30AM because one of our API end-points suddenly starting failing on all requests. A quick look at the errors logs revealed one of my long-time worst nightmares: a column in our MySQL database had run out of "INT space" . It was an old colum... read more »

Using InVision Principles To Experiment With Scroll Snapping In CSS

By Ben Nadel on

Earlier this week, I was talking about the criticality of customer empathy in our work . "Customer Empathy" is one of the core InVision Principles — principles that we take so seriously at work that we had them codified in a physical deck of cards (see the graphic in aforementioned a... read more »

Worth: A Movie That Underscores The Criticality Of Customer Empathy

By Ben Nadel on
Tags: Work

A few months ago, we watched the movie Worth starring Michael Keaton. To be honest, it's not a great movie; but, it has stuck with me because I believe it reminds us about just how critical it is to have customer empathy in our work. In the movie — and in our work — having and leaning into em... read more »

You Can Now Edit Your Comments On This Blog Using SHA1PRNG Secure Tokens

By Ben Nadel on
Tags: ColdFusion

This has been a long-desired and much-asked-for feature that I just never put in the time to create. But, in the last few weeks, I've been modernizing my blogging platform on Adobe ColdFusion 2021 . And finally, you can now edit your comments in the first few hours after posting them. Since this... read more »

Terrifying Excitement: My First CFUNITED Conference Experience From 2007

By Ben Nadel on
Tags: ColdFusion

Over the weekend, I was cleaning out old files on my computer when I came across a rough draft of an article that I wrote for (the now defunct) Fusion Authority Magazine 14 years ago. It was a retrospective of my experience as an attendee at my first full-size conference as a web developer: CFUN... read more »

Working Code Podcast - Episode 51: You Are Replaceable

By Ben Nadel on
Tags: Podcast

Engineers like to believe that they are non-fungible developers (NFDs). That is, that they are not replaceable - that they are special and bring a unique set of skills and perspectives to the table. And, for some engineers at early-stage companies, this may be true. However, as companies grow and e... read more »

Referencing String Characters Using Array-Notation In ColdFusion 2021

By Ben Nadel on
Tags: ColdFusion

A few years ago, I mentioned that you can treat Strings like character arrays in Lucee CFML . It turns out, you can do the same thing in Adobe ColdFusion. I am not sure what version this was added in; but, I'm guessing it was ColdFusion 2018 (and the introduction of "array slices"). To h... read more »

Standard Query Iteration Values Available During For-In Loop In ColdFusion

By Ben Nadel on
Tags: ColdFusion

A decade ago, ColdFusion introduced the for-in loop syntax for Query iteration . And, in the decade since, I somehow completely missed the fact that the underlying query iteration mechanics were still being used. That is, the .currentRow and default value accessors are still made available on... read more »