Ben Nadel
On User Experience (UX) Design, JavaScript, ColdFusion, Node.js, Life, and Love.
Ben Nadel at cf.Objective() 2011 (Minneapolis, MN) with: Jason Long
Ben Nadel at cf.Objective() 2011 (Minneapolis, MN) with: Jason Long

Recent Blog Posts by Ben Nadel

Using Presentation Components In Order To Hide Async Pipe Complexity In Angular 7.0.3

CAUTION : This post is really just me thinking out loud on state management concepts in Angular 7. Consider this nothing but a work in progress from the mind of someone who barely understands what they are doing . Last week, I shared some of my frustration over the elusive nature of State Mana... read more »

Async Pipe "as" Syntax Is Just The $implicit View Context Property In Angular 7.0.3

When I started to experiment with the Runtime abstraction for state management in Angular 7.0.3 , I used the Async Pipe for the first time. The Async Pipe is nice in that it inherently manages RxJS Observable Stream subscriptions for you; but, it ends up producing noisier Angular Template markup. ... read more »

Experimenting With The Runtime Abstraction For State Management In Angular 7.0.3

CAUTION : This post is really just me thinking out loud on state management concepts in Angular 7. Consider this nothing but a work in progress from the mind of someone who barely understands what they are doing. Earlier this week, I shared my current mental model for state management and the ... read more »

Considering State Management Boundaries And The Separation Of Concerns

For the last few weeks, I've been actively struggling to understand state management in a Single Page Application (SPA) . Or perhaps more specifically, I've been struggling to understand how to use Redux in a JavaScript application. And, the more I looked at reducers and action creators and thunks... read more »

Human Redux By Henrik Joreteg

For the last couple of weeks, I've been struggling to wrap my head around state management in a Single-Page Application (SPA). Or, perhaps more specifically, I've been struggling to understand how a library like Redux can be used to make state management easier to implement and to reason about. L... read more »

Creating A Simple setState() Store Using An RxJS BehaviorSubject In Angular 6.1.10 - Part 2

CAUTION : This post is a mostly a note-to-self, so that I can close the circle on a thought I was having yesterday. Yesterday, I took a look at creating a simple, React-inspired .setState() store using an RxJS BehaviorSubject in Angular 6.1.10 . Since a BehaviorSubject() is practically a state-s... read more »

Creating A Simple setState() Store Using An RxJS BehaviorSubject In Angular 6.1.10

After struggling to wrap my head around Redux-inspired state management , I wanted to step back and consider simpler solutions. I'm not saying that a simpler solution is the right solution - only that moving my brain in a different direction may help me make new connections. As such, I wanted to s... read more »

I Am Struggling To Understand The Atomic Boundaries Of Redux Actions

CAUTION : This post contains no answers, only questions and statements of confusion . I'm writing it in hopes that by getting it out of my head and onto paper, I might be able to make more sense of it. For the last few weeks, I've been noodling on the implementation of state management in JavaSc... read more »

Software Design Decoded: 66 Ways Experts Think By Marian Petre And Andre van der Hoek

Last weekend, I was listening to an episode of Software Engineering Radio in which the hosts were discussing the book, Software Design Decoded: 66 Ways Experts Think , with the authors Marian Petre and Andre van der Hoek . The conversation was fascinating; so, I ordered the book right then an... read more »

Searching For The Wrong Type Of Simplicity Can Lead To An Explosion Of Complexity

For the last few weeks, I've been revisiting the idea of state management in an Angular application. It's a topic that I've never felt very confident with; so, I've decided to start building some state management classes as a means to dig in and feel the pain such that I can better understand the e... read more »

Trying To Create A Message Bus Using An RxJS Subject In Angular 6.1.10

CAUTION : I'm very new to RxJS. And, I'm not particularly good at TypeScript. As such, this post should be viewed as an experiment and not as a confident suggestion. I've been thinking a lot about state-management in an Angular application lately. And, one of the thoughts that I keep coming back ... read more »

THIS IS US Opening Titles Animation Using CSS Animations

My brain is somewhat fried from thinking about state-management in a Single-Page Application (SPA). As such, I needed a little mental palette cleanser; and, something that I've been wanting to do for a while is try to recreate the "This Is Us" opening titles sequence using CSS animations. ... read more »

On The Code Smell Of Asynchronous Middleware In Redux

CAUTION : This post is 100% subjective . To start off, I like the idea of Redux. And, of one-way data flows. I like that Redux provides a predictable state management system. And, I even like the idea of having middleware so that I can perform cross-cutting concerns like logging actions and capt... read more »

Sanity Check: Shared Style URLs And Emulated Encapsulation Attributes In Angular 6.1.10

A year ago, I performed a sanity check to confirm that shared style URLs were only compiled once in an Angular application . And, now that I've been digging into the mechanics of emulated encapsulation attributes , the question of shared style URLs has popped back into my mind. Specifically, I wa... read more »

Emulated Encapsulation Host And Content Attributes Are Calculated Once Per Component Type In Angular 6.1.10

Yesterday, while experimenting with recursive components in Angular 6.1.10 , I was briefly confused by the fact that recursive nesting of a single component required a little bit of CSS chicanery in order to prevent CSS styling from bleeding down into descendant nodes. Recursion tends to mess your... read more »

Playing With Recursive Components In Angular 6.1.10

This past week, I started noodling on how to use recursion in an Angular application. And, instead of reaching directly for a component-based solution, I first took at look at implementing recursive views using the Ng-Template directive . Ng-Template is fairly flexible; and, it allows for a recurs... read more »

Playing With Recursive Ng-Template References In Angular 6.1.10

Yesterday, I started to think about recursive Angular layouts for the first time. And, as someone who has bought into the "everything is a component" point-of-view, my natural instinct was to reach for recursive components. But then, I remembered that Ng-Templates allow for some very dynamic rende... read more »

Updating InVision Router Experiment To Use Lazy Loading Feature Modules In Angular 6.1.9

Earlier this year, I embarked on an exciting adventure in trying to recreate the InVision app user interface (UI) with the new Angular 5 router . It took me several months to get it done, taking many tangents along the way to solve intermediary Angular problems. But, I have to say that I was very ... read more »

ProvidedIn FeatureModule Is A Confusing Concept For Me In Angular 6.1.9

CAUTION : I don't really have a good grasp on Angular Modules. Or, on how modules related to the dependency-injector hierarchy, as is clearly demonstrated in this blog post. This post is really just for my own codification and an attempt to build a better mental model. Feel free to ignore. TL;DR... read more »

It Doesn't Have To Be Crazy At Work By Jason Fried And David Heinemeier Hansson

I'm a long-time fan of the project-management system, Basecamp . But, more so, I'm a fan of the strongly-opinionated and often controversial co-founders, Jason Fried and David Heinemeier Hansson (DHH) . I've read and quite enjoyed their two earlier books, Remote and Rework. So, when I saw last ... read more »

Playing With RegExp Named Capture Groups In Node 10

A couple of weeks ago, at the NYC Node.js Meetup, Franziska Hinkelmann went over the exciting new features of Node 10, which had just recently entered Long Term Support (LTS). Of the features that she listed, the one that really caught my ear was the addition of "named capture groups" in the Regu... read more »

The Transformative Power Of Love

A few months ago, I watched the movie, Eight Grade , which was a challenging but rewarding peek into the final weeks of middle-school for an introverted and somewhat awkward young woman. Of all the memorable scenes, the one that has stuck with me the most is a phone exchange in which a high-school... read more »

Preloading Lazy-Loaded Feature Modules In Angular 6.1.9

In the last couple of days, I've started to dig into the lazy-loading of feature modules in Angular 6 . With lazy-loading, segments of the code-base get loaded on-demand as the user navigates to the relevant areas of the application. The Angular router, however, provides a configuration that can p... read more »

Showing A Loading Indicator For Lazy-Loaded Route Modules In Angular 6.1.7

Now that I've been able to get the lazy loading of routes to work in Angular 6.1.7 with Ahead of Time (AoT) compiling and Webpack 4 , I wanted to think about how to steward the user through a lazy-loaded application. Especially when that user is on a slower network connection and the lazy-loading ... read more »

Microservices Patterns: With Examples In Java By Chris Richardson

I first became familiar with Chris Richardson through his online resource, . Which, to be honest, provides an overwhelming amount of information - information that I've deferred consuming because I didn't really know how to approach it; especially with my lack of microservices e... read more »

Using Commons IP Math To Check If An IP Address Exists In An IPv4 Or IPv6 CIDR Range In ColdFusion

Last week, I discovered that ColdFusion's underlying Java resources expose a Jakarta Commons Net utility called SubnetUtils. This SubnetUtils class makes it super simple to see if a given IP address exists within a given IPv4 CIDR range . Unfortunately, SubnetUtils has no support for IPv6. As such... read more »

Experimenting With Lazy Loaded Modules, Ahead Of Time (AoT) Compiling, And Webpack 4 In Angular 6.1.7

Now that I've finally upgraded my Angular research and development (R&D) workflow to use Ahead of Time (AoT) compiling , I figured it was time to tackle another one of my white whales: lazy loading modules in a route-based Angular application. For a long time, other developers have told me tha... read more »

When Is A Change A Breaking Change For An API

As InVision continues its efforts to decompose the monolith into a distributed system, it has given me lots of opportunity to think about "breaking changes." A "breaking change" is any change that requires the consumer of an API to make lockstep changes in order for the consuming code to continue... read more »

Checking To See If An IP v4 Address Is In A CIDR Range Using ColdFusion And SubnetUtils

At work, I need to build a feature that allows an IP address to be validated against a CIDR (Classless Inter-Domain Routing) range. CIDR - as I just learned - is range notation that defines a High and Low IP address by identifying how many bits in a given IP address are "locked down" and how many a... read more »

JavaScript Demos Using Webpack 4 With Angular 6.1.7 And Ahead Of Time (AoT) Compiling

As you may know, I collect most of my JavaScript demos in a single GitHub repository (JavaScript Demos) . And, for the last year or so, I've been compiling my subset of Angular demos with Webpack 3 . These Webpack compilations have been using the ts-loader plugin to transpile and concatenate file... read more »