Ben Nadel
On User Experience (UX) Design, JavaScript, ColdFusion, Node.js, Life, and Love.
Ben Nadel at CFUNITED 2010 (Landsdown, VA) with: Elliott Sprehn and Debbie Flax
Ben Nadel at CFUNITED 2010 (Landsdown, VA) with: Elliott Sprehn@ElliottZ ) and Debbie Flax

Recent Blog Posts by Ben Nadel

Sometimes, There Is Unavoidable Coupling To The DOM In AngularJS

In the last few posts, I've touched upon the "Angular Way" which includes a strong separation of concerns between the Controllers, which know about the view-model, and the Directives, which know how to "glue" the DOM (Document Object Model) to the Controllers. But sometimes, I think there is coupli... read more »

Conditionally Canceling Href Navigation Using Directives In AngularJS

Lately, I've been thinking a lot about the separation of responsibilities in AngularJS and about ways to make the View more expressive and explanatory. As a thought experiment, I wanted to take this mindset and revisit my previous post on managing conditional links and route changes . In that pr... read more »

Consuming Event Properties From Within The View In AngularJS

Yesterday, I posited that passing / injecting the $element and $event objects into a Controller should be considered an anti-pattern in AngularJS. I believe that doing so, while it has its uses, breaks the separation of concerns between the view-model and the DOM (Document Object Model). That sai... read more »

The User Experience (UX) Of Yesterday's Slack Outage

At InVisionApp , Inc, we're an entirely distributed team. We have about 150 people, all around the world, communicating exclusively through digital channels. A huge part of that workflow is our paid Slack subscription. Slack has become a critical part of our value chain. It's how we coordinate dep... read more »

Is Injecting The $element And $event Objects An Anti-Pattern In AngularJS?

In the "Angular Way," there is a strict separation of concerns. The Controllers aren't supposed to know anything about the DOM (Document Object Model); the Controllers simply manage the view-model and leave it up to the Directives to "glue" the view-model to the DOM. In the "Angular Way," the Direc... read more »

Managing A Shared Global UI Component In AngularJS

Lately, I've been doing a lot of thinking about how to manage a shared, global component in AngularJS. It's a rather complicated thing, especially when you want to keep the lines of communication "clean" and within the bounds of the "Angular Way." This means, no inline HTML in a directive's linking... read more »

Scattering Letters Based On Mouse Movements In AngularJS

At the bottom of our Design Disruptor movie marketing page , the marketing team (props to Devin Schulz ) put in a fun little effect where the scattering of letters, on the page, begins to converge as your mouse moves closer to a sign-up form. As a fun Friday experiment, I wanted to see if I could... read more »

Project HUGE: Building A Home Gym - Squatting, Benching, And Pulling On My Half-Rack

Over the last few weeks, I have been fulfilling my dream of having a home-gym. Little by little, I've been acquiring and assembling various weights and pieces of equipment. But, last night, things finally came to a head when my Fitness Gear Pro Half Rack arrived from Dick's Sporting Goods. It got... read more »

Watching And Responding To ngModel Changes In AngularJS

Last week, a co-worker of mine - Brian Kotch - was writing a custom directive and asked me about the best approach to use when responding to an ngModel change in AngularJS. He wasn't creating an input component that managed the ngModel value ; rather, he was creating a sort of helper directive f... read more »

Project HUGE: Building A Home Gym - CFF Landmine Rowing Attachments

When you're young and just getting into working out, all you want to is bench and curl. Build up your "show muscles." Unfortunately, this creates imbalances around your shoulder joints. These imbalances then, at some point, can cause injury (been there, done that). I am no stranger to this problem ... read more »

Cached Closures And User Defined Functions (UDFs) In ColdFusion

The other day, in my post about creating a closure-based tunnel between a CFThread and the parent function , Dan G. Switzer, II mentioned that I should be careful about using cached closures in ColdFusion. After he mentioned that, I did some preliminary testing and couldn't reproduce any problem... read more »

Project HUGE: Building A Home Gym - Dips

My home-gym adventure is really taking shape! I got the bench . I got the steel . The rack is on it's way (on some freight truck somewhere). Soon, I'll be able to move in just about every plane of motion, pushing and pulling. Well, almost. And that's where dips come into the picture. I love dips;... read more »

The User Experience (UX) Of Pagination

Years ago, when I was working at Nylon Technology , I was designing a data management system for one of our global law firm clients. As I was fleshing out one of the internal landing pages for Attorneys, I added a paginated list of all the attorneys, starting with the first 10, listed alphabetical... read more »

Project HUGE: Building A Home Gym - Buying The Steel

Last week, I embarked on a life-long dream of owning a home gym . It's been years since I've worked out seriously. And, it's time to get my life - and my body - back on track. After my Fitness Gear Pro Utility Bench finally arrived, I was able to test the waters with a few light workouts over th... read more »

Var For Life - Why Let And Const Don't Interest Me In JavaScript

WARNING : This is just an opinion piece from one person. For as long as I've been creating variables in JavaScript, I've been using the Var keyword. And I like to think that I've been doing alright with it. Now, with ES6, there are a lot of really smart people talking about how many of our vari... read more »

Creating A Closure-Based Tunnel Between A Thread And A Function In ColdFusion

When ColdFusion 10 introduced the concept of Closures to ColdFusion , I did a number of exploratory blog posts. But, I didn't really do much with them after that. A big part of this hesitation was because I was still running ColdFusion 9 in production (until only recently) and just didn't have the... read more »

Adding Closure-Based Distributed Lock Management To CFRedlock

Yesterday, I release CFRedlock, which is my ColdFusion implementation of the distributed locking algorithm proposed by the Redis group. Unlike the native CFLock tag, however, using CFRedlock requires you to manage the lock life-cycle in your calling code. I really missed the cleanliness of the CF... read more »

Project HUGE: Building A Home Gym - Proof Of Concept

Holy freaking cow! It's been almost five years since my last " Project HUGE " post. And, sadly enough, that also represents my general level of physical activity in the past five years. Unfortunately, as my work schedule and InVision App, Inc were ramping up (#StartupLife), my time at the gym t... read more »

CFRedlock - My ColdFusion Implementation Of The Redlock Distributed Locking Algorithm From Redis

When you're working on a single server, using the CFLock tag is an easy way to synchronize code across various parts of your application. However, once you have two or more servers, CFLock loses its guarantees. In order to lock across a distributed system, you need to use a distributed lock. Recent... read more »

Snooper.cfc - A ColdFusion Component For Finding Live Variable Leaks

Hopefully, variable leaks never make their way into a production application. But, sometimes they do. And, the more cooks you have in the kitchen, the more likely this is to happen. Variable leaks or, improperly scoped variables, can be insanely frustrating to track down because they don't "explode... read more »

Using LaunchDarkly With ColdFusion And JavaLoader

Lately, at InVision App , we've been thinking about using LaunchDarkly as our feature flag service so that we can slowly - and safely - roll out new features to a targeted subset of users. But, integrating LaunchDarkly into a ColdFusion app is not exactly a straightforward process. Not only does... read more »

Adding RSA Support To JSONWebTokens.cfc - My ColdFusion JWT Library

Last week, I released JSONWebTokens.cfc, which is a small ColdFusion library to facilitate the encoding and decoding of JSON Web Tokens (JWT) . When I released it, it only had support for the Hmac (Hashed Message Authentication Code) algorithms. However, I recently took some time to experiment wi... read more »

Experimenting With RSA-Encrypted Signature Generation And Verification In ColdFusion

CAUTION : I know very little about encryption and cryptography, so take this with a grain of salt. Last week, I released a small project to facilitate the creation and consumption of JSON Web Tokens (JWT) in ColdFusion . The JWT standard is supposed to support several different classes of signin... read more »

Leverage CSS user-select For A Better User Experience (UX)

There is a non-standard CSS property - user-select - which determines whether the text of a given element is selectable (ie, can be high-lighted by the user). I don't see this CSS property getting used very often. So, I wanted to write up a quick post about how I think the user-select property can ... read more »

Isolating The ngModel Two-Way Data Binding Life-Cycle In AngularJS

In AngularJS, I love the two-way data binding that the ngModel directive provides. But, I don't necessarily want the two-way data binding to directly affect all my data. I know that might sound contradictory. But, instead of having ngModel alter my core data, I like to isolate the two-way data bind... read more »

JSONWebTokens.cfc - A Small ColdFusion Module For JSON Web Tokens

Recently, I had to use JSON Web Tokens for the first time to integrate with Zendesk's single sign-on system (SSO). JSON Web Tokens are a secure and simple way to pass data (known as claims) between web systems. Essentially, you pass a base64url-encoded JSON payload, along with a secure signature,... read more »

The CFParam Tag Doesn't Care About White-Space In ColdFusion

For months, I've been trying to track down what I thought was a Cookie problem at InVision App. Every now and then, we'd start logging thousands upon thousands of cookie errors. Finally, I realized that it wasn't a problem with the cookie itself, per-say, but rather with the fact that the ColdFusio... read more »

Creating An Isolate-Scope Directive With Multiple Transclusion Points In AngularJS

When creating a component directive, in AngularJS, transcluding a single chunk of content is fairly easy; you define the directive as using transclusion and the AngularJS $compile() function takes care of the rest, creating an isolate scope and providing a transclude() function to your linker. But ... read more »

Enable Animations Explicitly For A Performance Boost In AngularJS

The other day, I came across an excellent blog post by David Chin on disabling ngAnimate animations for selected elements in AngularJS. I didn't know that this was something that could be done. And, I felt like it was important enough to write up a quick demonstration of how this can affect you... read more »

Handling Window Blur And Focus Events In AngularJS

Out of the box, AngularJS has ngBlur and ngFocus directives for handling blur and focus events, respectively. And, these work great for form inputs. However, they don't really help you if you want to know when the user has blurred or focused the actual browser window. If you're building "component... read more »