Skip to main content
Ben Nadel
On User Experience (UX) Design, JavaScript, ColdFusion, Node.js, Life, and Love.

Recent Blog Posts by Ben Nadel

Printing Emoji Characters From Unicode CodePoints Using HTML Entities In Lucee CFML

Earlier today, I mentioned that I wanted to make it easier for people to use emoji characters within my blog comments. As part of that facilitation, I need to add emoji glyphs to a textarea , which I can do using String.fromCodePoint() in JavaScript . But, in order to render the list of emojis ... read more »

Rending Emoji Glyphs Using Hexadecimal CodePoints In JavaScript

A year ago, I updated my comments to use the utf8mb4 character set so that the comments could contain emoji glyphs. But, using emoji still isn't that easy. On MacOS, to add an emoji, I have to use Ctrl+Cmd+Space (on MacOS) to trigger the emoji keyboard; then, I have to make sure the cursor is... read more »

Extolling The Benefit Of Feature Flags On The Deploy Friday Podcast

This morning, I had an opportunity to join Episode 64 of the Deploy Friday podcast , hosted by Chad Carlson of . In this episode, Dave Karow - CD Evangelist at - and I celebrate the multitude of benefits that your team, your product, and (most importantly) your cus... read more »

I Assume That I'll Never Complete My Work, And I Plan Accordingly

What I'm about to say is nothing new - I've discussed working under constraints many times in the past . But, after my post on the deleterious effects of working at full utilization , I had a moment of insight that allowed me to coalesce some feelings into more meaningful thoughts. I realiz... read more »

Working Code Podcast - Episode 032: What Comes After Senior Developer?

The world of web development is still a nascent industry. According to Robert "Uncle Bob" Martin, the number of programmers roughly doubles every 5-years. Which means that most of the developers that you interact with are relatively new and relatively young. It's not often that you look a... read more »

The Deleterious Effects Of Working At Full Utilization

At work, I'm on the Rainbow Team. Historically, my team's strategy has always been to allocate about 70% of our time to the planned work ; and then, to leave the other 30% of time open for the inevitable unplanned / interrupt-driven work which is an inescapable fact of life. In the past, I've il... read more »

Video Presentation: Feature Flags Change Everything About Product Development

A few weeks ago, I had the honor of participating in the Adobe ColdFusion Developer Week conference. I wanted to share a topic that I am extremely keen on : Feature Flags . My presentation was called, Feature Flags Change Everything About Product Development - a title that is in no way hyperb... read more »

Working Code Podcast - Episode 031: To The Cloud, But Why?

There is no one thing that is "The Cloud". Instead, there are a set of general characteristics that underscore cloud technologies: we can provision, deprovision, and scale resources at will; we don't need to manage those resources; and, we only pay for the resources that we use. But, ... read more »

Animating The Pseudo-Element Content Property Using CSS Keyframes Animation

At InVision , I'm building a small user interface (UI) that loads a list of documents and then caches them in memory for all subsequent renderings of the UI. During that one-time-only loading phase, I'm showing the static text, Loading.... , in the view. But, this static text got me thinking abou... read more »

Working Code Podcast - Episode 030: Carol Is Crushing It

Ten weeks ago, in Episode 20 , Carol described a problem at work in which her customers were using Support Tickets as a means to look-up information in lieu of logging into the customer dashboard. This email-based workflow has been putting a large burden on the Support staff. And, Carol wanted to ... read more »

TimeMachine-Inspired Progress Indicator Using CSS Keyframes Animation

As I mentioned on the Working Code podcast a few months ago, I finally started using Apple's TimeMachine to back-up my Mac. The back-up process goes through a few difference phases: preparation, backing-up, and clean-up. During the "preparation" phase, the TimeMachine system menu shows ... read more »

Using The Directory Attribute To Invoke CFExecute From A Working Directory In Lucee CFML

At InVision , I generate a lot of ZIP files using the CFExecute tag and the zip command-line utility. And, in most cases, I need to execute that zip CLI from a "working directory" in order to maintain the input directory's local folder structure. Historically, I've had to execute ... read more »

The User Experience (UX) Of A Graceful No

Over the weekend, I listened to an episode of the Hidden Brain podcast titled "The Influence You Have" . In it, Shankar Vedantam discussed the power of influence that we can unknowingly exert over other people; and, conversely, how difficult it is for people to say "No" when as... read more »

Working Code Podcast - Episode 029: Potluck

This week on the podcast, the crew discusses various topics: What would you do as an engineer if you knew you couldn't get fired? What conscious and unconscious fears might be holding you back from executing on tasks that you know are important? What does a healthy work-life balance look like aft... read more »

Using The OWASP Java HTML Sanitizer In Lucee CFML To Sanitize HTML Input And Prevent XSS Attacks

Earlier this week, at the Adobe ColdFusion Developer Conference, Charlie Arehart mentioned that the OWASP AntiSamy project was added to Adobe ColdFusion 11. I started using the AntiSamy project back in ColdFusion 10 , and hadn't realized that it was now a native part of the ColdFusion runtime. T... read more »

Generating Color Swatches With GraphicsMagick And Lucee CFML

At InVision , I've been playing around with an export feature for Boards. Unlike Prototypes - which only aggregate a single "type" of data (screens) - a Board can include files, notes, and color swatches. Since color swatches are just HEX values, I thought it would be fun to try and mate... read more »

Working Code Podcast - Episode 028: Build vs Buy

Engineers love to build things. Materializing an abstract concept into the form of a working piece of software is one of the most thrilling experiences available on planet earth . As such, we engineers often favor building new software over buying existing solutions. However, doing so takes time a... read more »

Product Design And Meeting Customers Where They Are

A few weeks ago, I listened to an episode of Software Engineering Daily with Corey Quinn . It was about Amazon Web Services (AWS). And, Corey kept using a phrase that I can't get out of my head. He said, Amazon is great about meeting customers where they are . As someone who builds a product tha... read more »

Managing And Reporting Errors During Parallel Array Iteration In Lucee CFML

Hands-down, one of the most bad-ass features of Lucee CFML is parallel iteration over collections. This feature allows us to call map , filter , each , any , and some using low-level threading. Except, we don't have to care about the threading - Lucee just handles it for us . That said, ... read more »

Working Code Podcast - Episode 027: Giving Technical Presentations

As Jerry Seinfeld joked , when it comes to funerals, most people would rather be the one in the casket than the one giving the eulogy. Because, public speaking isn't easy. And, for many, it's a source of great anxiety. A technical presentation takes that anxiety and compounds it by layering on a n... read more »

Strange Variable-Name Error When Writing To Base Tag In Adobe ColdFusion 2018

Yesterday, I posted an Adobe ColdFusion compatible version of my DSL for HTML emails . In that post, I listed getBaseTagData() as one of the compatibility issues between Lucee CFML and Adobe ColdFusion. It's actually a nuanced issue with several different stumbling blocks; one of which is a stra... read more »

Adobe ColdFusion 2018 Compatible Version Of My ColdFusion Custom Tag DSL For HTML Emails

Over the past couple of months, I've been working on a ColdFusion custom tag DSL (Domain Specific Language) for HTML emails . It's been a thrilling adventure; and, it's been tremendously satisfying to see this approach being applied for great good at InVision . That said, InVision runs on Lucee C... read more »

Using The LaunchDarkly REST API To Update Rule Configuration In Lucee CFML

I am not bashful about the fact that I love using LaunchDarkly for our feature flags at InVision . But, the vast majority of my experience revolves around their Java SDK which implements the rules engine consumer and the server-sent event streaming. I actually have very little experience wit... read more »

Working Code Podcast - Episode 026: Passwords

This week, the crew talks about passwords. Web applications store a great deal of sensitive information. But, there is something categorically different about storing passwords. Because - if compromised - a password from one application may grant a malicious actor access to another application.... read more »

Managing Lists Of IDs Using HTML FORM Posts In Lucee CFML

At InVision , I'm in the middle of building a custom feature for one of our clients. This feature lives outside of any SPA (Single-Page Application); and, uses "old school" form submission techniques to process the interactions. The techniques that I'm using are the same ones that I lear... read more »

Changing Function Argument Defaults At Runtime In Lucee CFML

In the vast, vast majority of cases, when I author a Function in ColdFusion that has default argument values, those values are static. Meaning, the argument falls-back to a hard-coded token like 0 or "" or false . The other day, however, when I was exploring the Password4j password ... read more »

Working Code Podcast - Episode 025: Breaking Up With Your Stack

There's no one reason that companies move away from or onto a technology stack. Sometimes a given technology is no longer actively updated; sometimes the pool of developers that uses a technology shrinks, making it hard to hire new engineers or find community support; sometimes people just li... read more »

The 14th Annual Regular Expression Day - June 1st 2021

For 14 years I've been trying to spread the joy - nay, the awesomeness - of Regular Expressions. And while my love of Regular Expressions continues to grow with each year, it turns out, so does the complexity and overhead of adulting . For the past few years, this day of reflection has snuck u... read more »

Migrating Password Hashing Algorithms In Lucee CFML

Over the weekend, I looked at using the Password4j password hashing library in Lucee CFML . One of the APIs that the Password4j library includes is the ability to update a hash with new hashing characteristics. This is actually something I've had to do in the past - migrating a system to a stron... read more »

Using Password4j And The BCrypt, SCrypt, And Argon2 Password Hashing Algorithms In Lucee CFML

At InVision , we use BCrypt to perform a one-way, cryptographic hash of user passwords. Which we've been doing for as long as I can remember. In a conversation the other day, however, I mentioned to Adam Tuttle that I thought there was now a more "modern" hashing algorithm; but, that... read more »