Skip to main content
Ben Nadel
On User Experience (UX) Design, JavaScript, ColdFusion, Node.js, Life, and Love.
Ben Nadel at InVision In Real Life (IRL) 2019 (Phoenix, AZ) with: Azeez Olaniran
Ben Nadel at InVision In Real Life (IRL) 2019 (Phoenix, AZ) with: Azeez Olaniran@olaniranazeez )

Recent Blog Posts by Ben Nadel

Request Tracing Propagation When Consuming Amazon SQS Queues In Lucee CFML 5.3.8.201

As I continue to explore the use of Amazon SQS queues in Lucee CFML , I have to start thinking about request tracing. In a monolithic application, request tracing is much less of a value-add since most operations happen within a single request. Once I start using a message queue to decouple steps ... read more »

Spreading Http And HttpParam Tags Across Multiple Function Calls In Lucee CFML 5.3.8.201

Back when InVision was running on Adobe ColdFusion 10, I leaned heavily on the native Http.cfc component when making network requests. However, once we switched over to Lucee CFML 5.3, where tag support in CFScript is much more robust , I found myself reverting back to the http and httpPa... read more »

Generating SQL INSERT Statements From SQL SELECT Statements In MySQL 5.7.32

I've spent the last 2-days slicing-and-dicing data for one of InVision 's enterprise clients; and, I'm as happy a pig in slop! As I've said before, data is my happy place. Few things give me as much joy as writing SQL queries - as bending relational database tables to my will. We have a client tha... read more »

Yahoo! Mail Does Not Render Anchor Tags With Encoded HREF Attributes

When rendering view templates in Lucee CFML (or any server-side language for that matter), rule number-one is don't trust the content . This is a corollary to an older rule, don't trust the user . As such, when I render content, I almost always wrap it in one of the many encoding methods that Col... read more »

Working Code Podcast - Episode 040: Are Database Transactions Overrated?

The other day, I was listening to an episode of the MongoDB podcast in which Mat Keep shared a story about the adding of atomic transactions into the MongoDB product. Mat said that the engineer who spearheaded the effort used to joke about the fact that his team was spending a huge amount of ti... read more »

Organizing My Application Layers Using Z-Index Stacking Contexts In CSS

A few years ago, the concept of a stacking context in CSS finally clicked for me. And, as I've continued to maintain the same Single-Page Application (SPA) over the last decade, my thinking about z-index and stacking contexts has continued to evolve. My current mindset is that I want to go in... read more »

Checking CFLock Acquisition Success In Lucee CFML 5.3.8.201

Yesterday, in my post about considering the separation of concerns when consuming Amazon SQS queues in Lucee CFML , I created a demo in which I synchronized long-polling requests through the use of an exclusive CFLock tag. For the demo, I had logging in place to trace the workflow of each reques... read more »

Separation Of Concerns When Consuming Amazon SQS Queues In Lucee CFML 5.3.8.201

Last week, I started to explore the consumption of Amazon SQS (Simple Queue Service) in a Lucee CFML application . That first post was a low-level look at the mechanics of using the AWS (Amazon Web Services) Java SDK to add and remove messages to and from a given queue, respectively. Today, I want... read more »

Producing And Consuming Amazon SQS Messages In Lucee CFML 5.3.8.201

A year ago, I shed some light on my quest to merge microservices back into my ColdFusion monolith . For my size team and the type of domain boundaries that we have, a monolith just makes the most sense. And while I've been thrilled with the progress my team has made in its re-consolidation effor... read more »

Working Code Podcast - Episode 039: Ben's Future At InVision

For last 8-years, I've poured my heart and soul into InVision , a product that drives design collaboration. During this period, my area of expertise has focused on the (now named) "legacy" platform - the ColdFusion and AngularJS monolith that has built the business into what it is toda... read more »

Maintaining Route Information During SPA (Single-Page Application) Authentication In Lucee CFML

NOTE : While some parts of this post are generally applicable, much of this post is a byproduct of working with a system that has been around for a decade and used to have to support old browsers like IE6. Your mileage may vary. The InVision platform is composed of a series of SPAs - Singl... read more »

I Wish My Relational Database Tables Were Narrower

Naming things is one of the hardest parts of computer science. Which I believe is a big part of why data modeling is so hard: it's challenging to see how one concept can be decomposed into multiple concepts when you don't know what those smaller concepts are called . This is why my relational data... read more »

Using Relative File Paths To Configure Application Mappings In Lucee CFML 5.3.8.201

Historically, Adobe ColdFusion was never very friendly to relative file paths on the server - a relative file path always seemed to point to a different folder than the one in which my script was executing. Lucee CFML, on the other hand, has made it a point to be much more intuitive when it comes... read more »

Working Code Podcast - Episode 038: Holding Developers Accountable

Recently on Facebook, Hal Helms -highly respected author, speaker, and computer programmer-shared some of his views on the use of "Sprints" to drive engineering work on a product team. In short, he despises the idea of asking engineers to commit to achieving a goal within an estimated... read more »

Code Kata: Water Breathing Exercise In JavaScript

Yesterday, I happened upon a TED Talk by Lucas Rockwood on the power of breathing . In his talk, Rockwood covered three different types of breathing: Water, Whiskey, and Coffee , each with different inhale, exhale, and pause tempos. As I was trying this out for myself, I found it very challenging... read more »

Tracking User Interactions And Analytics With Small Abstractions In AngularJS

In order to get a sense of how people are using our JavaScript applications at InVision , it's important to track various user interactions. Doing so can expose popular workflows, usability issues, and blind-spots; and, in general, allow us to make future decisions based on actual data . When I f... read more »

Embracing Asymmetrical Design And Overcoming The Harmful Effects Of "text-overflow: ellipsis" In CSS

At InVision , few things give me as much joy as sitting in on a user interview . Users help me see and experience our product with fresh eyes. And one piece of fresh feedback that keeps coming up over-and-over again is the harmful effect that text-overflow: ellipsis has on our product's acces... read more »

Working Code Podcast - Episode 037: Brian Klaas Talks Cloud

As we alluded to in Episode 20: Carol Needs a Consult , there are a lot of different products under the Amazon Web Services (AWS) umbrella. In fact, the number of products is somewhat mind-boggling. It can be overwhelming just figuring out where to start, let alone understanding which service is r... read more »

Using The LaunchDarkly Feature Flag Java SDK With Lucee CFML 5.3.8.201

A few days ago on Twitter , Mary Jo Sminkey asked me if consuming the LaunchDarkly feature flag Java SDK in ColdFusion was as cumbersome as it appeared to be in my post from 2015 . That post used the JavaLoader library and had to jump through some funky thread-management hoops in Adobe ColdFu... read more »

Brute-Force Refreshing View-Data In The Background In Angular 11.0.5

At InVision , my team - the team that works on the legacy platform - continues to shrink as more resources are dedicated to the new platform. Which means, I continually need to do more with less . As such, I'm always looking for ways to simplify my coding techniques in order to move more Produc... read more »

Working Code Podcast - Episode 036: Blogging And Digital Gardening

Blogging is a win-win activity. Not only does the act of writing help burn knowledge into your long-term memory, it also acts as an easily searchable repository of your own thoughts. Furthermore, it helps other people solve similar problems when they stumble upon your blog in the future. The valu... read more »

Restoring ActiveElement Focus After A User-Interaction In JavaScript

Yesterday, I looked at trapping focus within an element such that a user couldn't use keyboard-based navigation to tab outside of the given element. That kind of technique would be helpful in a modal window scenario where you don't want the active-focus to leave the modal. However, if the user ... read more »

Trapping Focus Within An Element Using Tab-Key Navigation In JavaScript

As an engineer, I'm not good at building accessible applications, yet. But, I want to be - accessibility is good for everyone, thank you Laura Kalbag . I've started to try and apply what I learned in Inclusive Components by Heydon Pickering ; but, none if it is second-nature yet. So, when I came ... read more »

Working Code Podcast - Episode 035: Being A Swamp Guide

Software is never "done". And, as it continues to evolve over time, it often gathers a lot of accidental and essential complexity. This makes it harder to on-board new engineers into a legacy application (and a legacy organization). Enter swamp guides : the aged and battle-hardened s... read more »

Applying Multiple Animation Keyframes To A Loading Indicator In CSS

The world seems obsessed with this idea that users don't want to see loading spinners if the loading process will only take a fraction of second. A few years ago, I demonstrated that this kind of delay can be accomplished with a simple CSS animation-delay property ; but, in that post, I assumed ... read more »

RandRange() With Algorithm Argument Uses java.security.SecureRandom In Lucee CFML 5.3.7.47

Six years ago, I looked at generating "cryptographically secure" random tokens in ColdFusion by using Java's java.security.SecureRandom class. To which, Henry Ho pointed out that he had been using randRange() with the SHA1PRNG algorithm for the same purpose. After Henry's comm... read more »

Working Code Podcast - Episode 034: Some Of My Best Friends Are React Developers

This week, Adam talks about his "obnoxious optimism": his general tendency to believe that all problems can be solved and that everything will just sort of work itself out. This optimism allows him to take action and make decisions quickly. However, it also means that he may not be fully ... read more »

Why Do People Think React Teaches You More JavaScript?

I don't understand it. Once again, someone with a good amount of community influence said that when you use the React JavaScript framework you learn "more JavaScript" when compared to other frameworks (Angular in this particular case). I've dabbled in React; and, I've been using Angular... read more »

Capturing Keyboard Event Modifiers Across Operating Systems In JavaScript

I have something rather embarrassing to admit . At some point, for reasons that I can't remember, when I switched over to using a MacBook about a decade ago, I somehow got it in my head that the event.metaKey represented a "generic modifier" that worked across operating systems. Mean... read more »

Feature Flags Shift The Balance Of Power Away From Designers

I've been using and loving Feature Flags for a long time . And, historically, I've embraced feature flags as a construct that makes product development faster, easier, and safer . But, last week, on the Deploy Friday podcast , I started to formulate some novel thoughts on what makes feature fl... read more »