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

Recent Blog Posts by Ben Nadel

Using Abstract Classes As Dependency-Injection Tokens With "providedIn" Semantics In Angular 9.1.9

Earlier this week, I looked at saving temporary form-data to the SessionStorage API in Angular 9 so that a user wouldn't lose their form-data if they accidentally refreshed the page. In that exploration, I had a Storage class that used the SessionStorage API internally in a hard-coded fashion... read more »

Returning Promises From Async / Await Functions In JavaScript

Over the weekend, when I was using SessionStorage to cache form-data in Angular 9.1.9 , I had a service object that included a number of async / await functions. And, as I was putting these functions together, my mind began to stumble over an inadequate portion of my Promise chain mental m... read more »

Saving Temporary Form-Data To The SessionStorage API In Angular 9.1.9

I'm sure we've all been in one of those situations where we're filling out a big web-based form; then, we get some sort of an error page; so, we hit the browser's Back Button only to find-out that our form is now completely blank. Hulk smash ! Some applications do us the courtesy of storing unsav... read more »

Can't Cast Object Type [Struct] To A Value Of Type [image] In Lucee CFML

As I wrote about back in January, we were having some performance issues in one of our Lucee CFML services . One of the steps we took in the debugging process was trying to upgrade from Lucee CFML To Unfortunately, when we did that, we started seeing the following ColdFusion ima... read more »

Canonicalizing A URL By Its Individual Components In Lucee CFML

CAUTION : I am not a security expert . I do work with security experts; and I try my best to implement their vision and understanding of the world and malicious actors; but, I am just a flawed human. As such, please see this post as an exploration and not necessarily as any kind of best practic... read more »

Hiding Overflow Scrollbars Until Hover (ala Gmail Labels) In Angular 9.1.7

The other day, when using my Gmail account, I noticed an interesting little user experience (UX): my list of "labels", which is longer than my browser's viewport, is only scrollable when I mouse-over it. I assume this is done to hide the scrollbar which would otherwise create a strong &qu... read more »

Separating Layout HTML And CSS From Content HTML And CSS Is Good

I'm a slow learner. That's part of why I write so much - it takes ages for ideas to sink into my Neanderthal brain. Such is the case with something like the separation of concerns in HTML and CSS. 11-years ago, I looked at Nicole Sullivan's Object-Oriented CSS (OOCSS) ; then, 9-years ago, I looked... read more »

Application Setting "useJavaAsRegexEngine" Tells CFML To Use Java's RegEx Engine For Built-In Re-Functions In Adobe ColdFusion 2018

So, yesterday, when I was looking something up in the Adobe ColdFusion RegEx documentation, I saw something that blew my mind! Apparently, as of Update 5, there is now a ColdFusion 2018 Application setting - useJavaAsRegexEngine - that tells the CFML runtime to use Java's Regular Expression engin... read more »

Creating Squishy Tabs With CSS Flexbox In Angular 9.1.7

At work , my team is starting to ideate on a new user interface (UI) that has a tabbed navigation. The set of tabs in this navigation is going to be driven by user-provided content and preferences. Which means, the number of tabs and the size of those tabs is going to be variable from user to user... read more »

The canonicalize() Function Will Decode Strings That "Loosely Match" HTML Entities In Lucee CFML

Yesterday, I started running into an interesting issue when using the canonicalize() function in Lucee CFML to normalize the encoding of a given URL. The result of the canonicalize() call was leaving some URL search-parameters intact while corrupting others. At first, it seemed completely rando... read more »

Using Expando DOM Properties To Power The IntersectionObserver API In Angular 9.1.6

Earlier this week, I took a look at using expando DOM properties in Angular 9.1.6 . And, as I explained in that post, while your application's View-Model is the source-of truth in the vast majority of cases, there are instances in which the View-Model is not sufficient. One such case is when u... read more »

Performing A LEFT OUTER JOIN On An INNER JOIN In Order To Write More Expressive SQL In MySQL 5.6.37

Over the last week, I've been working with one of our senior data scientists, Kaitlin Seders , to generate reports from our MySQL and Redshift databases. It's been both thrilling and exhausting - when you think that you know your SQL pretty well, try sitting down with a data scientist and prepare ... read more »

Using Expando DOM Properties In Angular 9.1.6

In the vast, vast majority of cases, the View-Model in Angular is the source of truth for the application; and, the HTML template is little more than the manifestation of said truth. However, in some edge-cases, representing all information in the view-model is either inelegant or costly in ter... read more »


I just love SQL . I've been writing web-applications on top of relational databases (RDBMS) for a while; and, SQL always feels like a luxurious combination of structure and flexibility. Yesterday, when working with some data scientists, I had to merge a few columns from a database table into a CSV... read more »

Wrapping 3rd-Party Scripts In Angular Services In Case They Get Blocked In Angular 9.1.4

InVision , like all SaaS (Software as a Service) apps, include a few 3rd-party libraries to help with things like error-logging, in-app support (such as live-chat), and feature-tracking so that we can understand how people use the application. Increasingly, however, I'm seeing browsers and browser... read more »

Using Layer Blend Modes To Highlight Text In Graphics Design

This is just a note to self. But, for what feels like decades , I've struggled to clearly highlight text within a graphics file. Historically, I've positioned a yellow rectangle above the target text; and then, lowered the opacity on the rectangle in order to allow the highlighted text to show-thr... read more »

Generating A Word Search Puzzle Grid In Angular 9.1.4

Over the weekend, I felt like coding a little palette-cleanser - something that would take my mind in a different direction. I also don't want my Angular skills getting too rusty, what with the fact that I've been so focused on Lucee CFML lately. As such, I wanted to try writing a Word Search Puzz... read more »

The Affect Of File-IO On Performance Experimentation In Docker And Lucee CFML

Ever since I learned that Lucee CFML supports parallel array iteration , I've been itching to find a good place to really leverage it. And, recently, it occurred to me that I might be able to use it to boost PDF generation at InVision . Currently, when you generate a PDF for a prototype, we let... read more »

Reading EXIF Orientation And Auto-Orienting Images Using GraphicsMagick And Lucee CFML

This doesn't come up a lot at work ; but, sometimes, a user will upload a photo from their phone. And, while the photo looks "fine" on the phone (and on their computer), it will render as rotated in the browser. This is because the photo was taken with a non-upright camera orientation.... read more »

Creating A Partially-Transparent Overlay Using GraphicsMagick And Lucee CFML

Continuing my exploration of GraphicsMagick, one of the actions that I need to perform at work is to create a composite image in which one image is drawn over another image using a partial transparency. Meaning, I need to overlay a source image over a base image such that the base image is partia... read more »

Sprint Name Generator In Angular 9.1.3

I've had a stressful week. So, I wanted to cap it off with something a little on the fun side. At work , we've started to use "Sprints" to organize our team (as opposed to just working a Kanban board). And, as part of the Sprint planning, we have to pick a name the Sprint. As such, I tho... read more »

The Default MySQL Driver Settings Do Not Appear To Truncate Long Text In Lucee CFML

For the past few weeks, I've been trying to clean-up and normalize my blog content using Markdown . As you can imagine, this is not an easy process; but, I thought it was going quite smoothly. That is, until last night when I noticed that one of my posts was being truncated at 64,000 characters: ... read more »

Scaling An Image During A Draw Operation Using GraphicsMagick And Lucee CFML

Last month, I posted a demo in which I annotated an image using GraphicsMagick and Lucee CFML . In that demo, I used the -draw command to composite the source image over a blank canvas. The source image was drawn using its natural dimensions; but, the -draw command also provides a way to scale... read more »

Built-In Functions And Member-Methods Return Different Data Types In Lucee CFML

The other day, when I was exploring the ProcessBuilder class in Lucee CFML , I coded something that should have been a bug ; but, that ended-up working. In fact, I didn't even see the issue until after I had posted the article. In my code, I treated the result of an array.append() member-meth... read more »

Running CFExecute From A Given Working Directory In Lucee CFML

When you invoke the CFExecute tag in ColdFusion, there is no option to execute the given command from a particular working directory. That's why I recently looked at using the ProcessBuilder class to execute commands in ColdFusion . That said, the default community response to anyone who runs ... read more »

Looking At How Browser Zoom Affects CSS Media Queries And Pixel-Density

The older I get, the more zoomed-in my browser tends to become. I just don't have the patience for small-text - I want my font-sizes to feel luxurious and decadent. The other day, however, I needed to take a screen-shot of some graphs in Datadog ; so I ended up zooming in even more than I normally... read more »

Executing Command-Line Processes From A Working Directory Using ProcessBuilder In Lucee CFML

In ColdFusion, we've always had the CFExecute tag as a means to execute external command-line processes from within our CFML code. However, one of the big missing features in the CFExecute tag API is the ability to set the "working directory" for the execution. In many cases, this doe... read more »

Rediscovering My Love Of ColdFusion And CFML In 2020

I've never been shy about how much I enjoy ColdFusion. So many wonderful things in my life have sprung from the fact that I happened to get an internship under Glen Lipka 20-years ago; and, that his company happened to be using ColdFusion 4.5. But, my relationship with ColdFusion hasn't alway... read more »

Understanding ReadOnly And Exclusive Named Locks In Lucee CFML

The other weekend, as I was reading through the Learn Modern ColdFusion <CFML> in 100 Minutes book by Ortus Solutions , something about the way in which they described the CFLock tag really clicked for me. Historically, my understanding of the different types of locking has been fair... read more »

Behavior Change Of AutoComplete = "Username" In Recent Chrome Update

As a web developer, I have a lot of different email addresses, both valid and simulated, that I use to test my applications. And, for the most part, I don't give these emails a second thought; until a few weeks ago when the Chrome browser's behavior suddenly changed (I assume from some update that ... read more »