Ben Nadel
On User Experience (UX) Design, JavaScript, ColdFusion, Node.js, Life, and Love.
Ben Nadel at Scotch On The Rocks (SOTR) 2011 (Edinburgh) with: Cyril Hanquez and Hugo Sombreireiro and Reto Aeberli and Steven Peeters and Guust Nieuwenhuis and Aurélien Deleusière and Damien Bruyndonckx
Ben Nadel at Scotch On The Rocks (SOTR) 2011 (Edinburgh) with: Cyril Hanquez@Fitzchev ) , Hugo Sombreireiro@hsombreireiro ) , Reto Aeberli@aeberli ) , Steven Peeters@aikisteve ) , Guust Nieuwenhuis@Lagaffe ) , Aurélien Deleusière@adeleusiere ) , and Damien Bruyndonckx ( @damienbkx )

Recent Blog Posts by Ben Nadel

Using Multivariate Feature Flags In LaunchDarkly To Drive Operational Settings Like Minimum Log Level

After having used LaunchDarkly as our feature flag service provider for several years, I'm taking a fresh look at their documentation in order to see what new hawtness they offer above and beyond the traditional On / Off toggle. Yesterday, I looked at LaunchDarkly's ability to target users based o... read more »

Using LaunchDarkly To Target Personally Identifiable Information (PII) During Feature Flag Evaluation Without Leaking Sensitive Data

At InVision , we've been using LaunchDarkly as our feature flag service provider for the last few years; and, it has completed changed the way that our teams think about feature deployment. But, we've been using LaunchDarkly for so long that we've missed out on a lot of the new features they'v... read more »

Using Java's AtomicInteger To Loop Over A Range Of Numbers In ColdFusion

The other day, as part of my cuid for ColdFusion implementation , I had to create an internal counter that looped over a static range of numbers. Once the counter reached its upper-bound, it reset back to zero. Since this was operating in a multi-threaded environment, I decided to use Java's Atomi... read more »

Enterprise Integration Patterns: Designing, Building, And Deploying Messaging Solutions By Gregor Hohpe And Bobby Woolf

Over the weekend, I finally finished reading Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions by coauthors Gregor Hohpe and Bobby Woolf . I've been reading this 700-page tome since the beginning of February. And, while there were two chapters at the end t... read more »

Adding Slug Generation To cuid For ColdFusion

Yesterday, I released cuid for ColdFusion - a ColdFusion port of the cuid library. In my initial write-up, I omitted the "slug()" method because it felt only tangentially related to the concept of UUID generation. However, after a conversation with James Moberg , I decided to add slug generation... read more »

cuid For ColdFusion - Collision-Resistant IDs Optimized For Horizontal Scaling And Performance

At InVision , we've decided to use Eric Elliott 's cuid library when it comes to generating UUIDs (universally unique IDs) in our upcoming microservice-based, highly distributed version of the platform. The cuid library provides collision-resistant IDs that are optimized for horizontal scaling ... read more »

Obtaining A Wildcard SSL Certificate From LetsEncrypt Using The DNS Challenge

Yesterday, I shared my journey of going from total noob to mostly noob with a Docker host running nginx, Node.js, and DataDog on a DigitalOcean droplet . As part of that journey, I was using the LetsEncrypt Docker container to obtain an SSL certificate for my Express.js site. Right after I posted ... read more »

From Noob To Docker On DigitalOcean With Nginx, Node.js, DataDog Logs, DogStatsD, And LetsEncrypt SSL Certificates

Historically, when I've deployed code to the internet, it's either been a ColdFusion website running in managed hosting; or, it's been a static file that I've deployed to GitHub Pages. This is really all that I know how to do. And, this dearth of knowledge has started to hinder my creative outlet. ... read more »

Bug When Passing Nested-Struct Data Into CFThread In ColdFusion 10

I know that Adobe ColdFusion 10 is no longer supported by Adobe. But, yesterday, I ran into a rather strange bug involving unreachable struct-data passed into a CFThread context; and, given the fact that other people out there may still be running ColdFusion 10, I figured it would be worth sharing.... read more »

Using No-Op Transitions To Prevent Animation During The Initial Render Of ngFor In Angular 5.2.6

When Angular 2 first came out, the Animations module didn't block nested transitions (like it did in AngularJS 1.2). So, we had to jump through a bunch of hoops to try and have animation "state" drive the blocking. As of Angular 4.2, however, the revamped Animations module will block nested anima... read more »

Animating Modal Windows While Blocking Intra-Modal Transitions In Angular 5.2.6

The other week, I finally released a demo that I had been working on for several months: recreating the InVision App user interface (UI) using Angular 5 . When I embarked on that demo, I had hoped to include animations; but, by the time I was done, it had gone on for so long that I had to defer an... read more »

Creating A Poor Man's Exponential Backoff And Retry Algorithm In Legacy Code Using ColdFusion

The other day, I was attempting to implement a backoff and retry algorithm around a remote API call that was failing intermittently due to network connection errors. Normally, I would try to find some sort of abstraction that encapsulated the backoff and retry logic . But, I was working in legacy ... read more »

The User Experience (UX) Of The Rogue Fitness Shipping Map

Two years ago, I purchased a beautiful, black-zinc Ohio Power Bar barbell from Rogue Fitness in Columbus Ohio. And, like most fitness equipment, the Ohio Power Bar is large and heavy - about 86-inches long and 45-pounds in this case. So, you can imagine that shipping such an item would require mo... read more »

The Practice Of Empathy And The Avoidance Of "It Depends" As An Answer

It's been almost a decade since I've ranted against the use of, "It Depends", as an answer to any question. And, in the last 10-years, my feelings about "It Depends" haven't really changed; but, to be honest, I haven't given it much more thought. The other day, however, while listening to episod... read more »

Using The Anchor Tag href And download Attributes To Force A File Download

The other day, I happend across an article titled, "5 HTML5 Features you need to know" by Adnane Belmadiaf . In that article Adnane mentions the "download" attribute of the HTML Anchor tag. I'd never heard of this feature before; but, apparently, the "download" attribute tells the browser to downl... read more »

The User Experience (UX) Of Image-Oriented Lists On Apple TV

When I'm not rewriting the entire InVision App UI in Angular 5 or noodling on the proper deployment boundaries for feature flags , I'm watching movies. Specifically, I'm watching movies on my Apple TV in the bedroom. For the most part, I consume movies and shows on Netflix. But, the other day, I... read more »

Experiment: Recreating The InVision App User Interface With The Angular 5 Router

Sometimes, it's hard to see where the rough-edges in a framework exist until you actually try to do something non-trivial with said framework. This is true for all frameworks, including Angular. Maybe especially Angular, since this framework provides an end-to-end solution for application developme... read more »

Using Position Absolute Inside A Scrolling Overflow Container

CAUTION : This is primarily a "note to self". The other week, I tried to use absolute positioning inside a container that had "overflow: auto" enabled. And, somewhat to my surprise, the absolutely-positioned elements were rendered relative to the overflow "viewport," not to the "natural bounding ... read more »

Creating A Dynamic Favicon Service In Angular 5.2.4

A little while ago, GitHub added a feature to their Pull Request (PR) pages in which the browser's favicon would reflect the state of the PR (pending, failed, approved, etc.). This way, you could use other browser tabs and still maintain some sense of how your PR was progressing. I think this is a ... read more »

Restoring And Resetting The Scroll Position On Navigation With A Polyfill In Angular 5.2.3

In a "normal" web application, with a full round-trip request-response life-cycle, restoring and resetting the scroll position of the page is simple: the browser's native functionality just handles it for you. But, in a Single-Page Application (SPA), were pages are rendered with DOM (Document Objec... read more »

Each Feature Flag Should Be Owned By A Single Deployment Boundary

For the past two years, InVision has been using LaunchDarkly to manage its feature flags (aka feature toggles). At first, we were just trying to understand how to use feature flags; but now, we use feature flags aggressively in our day-to-day development requirements. In the same two years, InV... read more »

In Node.js, The error.stack Property Will Represent The Point In The Code At Which new Error() Was Called - Not When The Error Is Thrown

Yesterday, I was trying to help my co-worker figure out why one of his Node.js containers was throwing errors. When looking at the logs, however, I discovered that the errors weren't all that helpful. The stack-traces in the log only pointed to the line of code on which the Error objects were being... read more »

Practice: Progressively Enhancing A Flexbox Grid To Use CSS Grid

CAUTION : I'm a super-noob with CSS Grid. As such, everything I say here should be taken with a grain of salt and should be considered primarily as a note-to-self. After watching "CSS Grid", the free video course by Wes Bos , I'm pumped up and excited to start experimenting with the CSS grid lay... read more »

CSS Grid: A Free Video Course On The CSS Grid Layout By Wes Bos

Over the weekend, I watched " CSS Grid " - the newly released video course by Wes Bos . If you've been following my blog, you know that I'm a huge fan of Wes Bos and the consistently high-quality content he creates. "CSS Grid" is no different. In this course, Wes covers many of the CSS Grid featur... read more »

Creating A Jump-To-Anchor Fragment Polyfill In Angular 5.2.0

On top of navigating from view-to-view, the Angular 5 Router provides a lot of advanced features like lazy-loading modules, data-resolvers, and route-guards. But, ironically, it doesn't support one of the oldest and most basic browser navigation features: jumping to an anchor farther down on a give... read more »

Wildcard Routes (**) Can Redirect Relative To Their UrlTree Location In Angular 5.1.3

Yesterday, I demonstrated that wildcard routes (**) can be scoped to a route sub-tree in Angular 5.1.3 . I described this behavior as good for "modularity" in that it made it possible for a feature module to handle invalid URLs within its own local logic. But, the "redirectTo" route configuration ... read more »

Wildcard Routes (**) Can Be Scoped To Route Sub-Trees In Angular 5.1.3

In the Angular router, you can use the wildcard path - ** - as a catch-all route to render things like a "Not Found" view or to redirect the user back to the root of the application. But, from the documentation, and from many of the Angular Router demos that I've seen, one aspect that's usually omi... read more »

Sanity Check: Chrome 63 Still Causes Blurry Borders With Percentage-Based CSS Translation

The other day, I looked at creating slightly off-center elements using CSS Flexbox and "spacer" flex-children with a 40/60 flex-basis split. Afterwards, in an offline conversation that I was having with Matt Vickers - one of our lead front-end developers at InVision - he suggested using a CSS... read more »

Converting TechSmith JING SWF Movies To MP4 Videos

For the last few years, I've been using TechSmith's Camtasia For Mac in order to record my web development screencasts as MP4 video files. Prior to Camtasia, I was using another TechSmith product called JING. JING was an awesome tool and made sharing screencasts super easy with its built-in file up... read more »

You've Kissed The Lips Of JavaScripts

The other day, I was presenting an argument that Frameworks and Libraries can make you a better JavaScript programmer . In that write-up, I was reminiscing about the power of jQuery ( which is not unusual for me ); and, about how much jQuery has given me over the years. This got me all fuzzy and s... read more »