My
#FeatureFlags
book is done! 🎉🍾 After 2 months of "early access", I've finalized the cover and content. I plan on closing the early access program this week. If you want to purchase the book at a $$ discounted price $$ act now before it's too late:
Nothing makes you more humble than having to maintain a single codebase for years. Only then do you really get see the full extent of your poor choices and ill-informed thinking. I feel lucky to have this learning opportunity.
You know how sometimes you start coding. And then you keep coding. And hours go by. And you realize you haven't even tried running the code. So you stop and load it in the browser. And, as if by a MIRACLE, it all WORKS ON THE FIRST TRY!
Well, today was definitely NOT that day.
I `console.log()` all day, every day in
#JavaScript
. But, I always forget that you can style the `console.log()` output using
#CSS
. This feature is awesome; and, hopefully by writing it down, I'll remember it better in the future.
Oh sweet chickens! I just learned about a
#CSS
property called `overscroll-behavior`. This can be used to "trap" scrolling in an `overflow` container, preventing unwanted scrolling in a parent element (such as the `body`). This is a game changer! So nice!
ANGULAR DEVS 2015: Inversion of Control (IoC) is amazing! It changes everything!!!
REACT DEVS 2015: IoC is hella lame—I can just require() all the things!
REACT DEVS 2020: Context is amazing! It changes everything!
ANGULAR DEVS 2020: Yeah, Context is IoC! Welcome to the party!
The other day, on the
#CSSPodcast
,
@argyleink
mentioned that in "the real world" shadows actually shrink as an object moves away from a surface; and that we can do this using a negative box-shadow spread. I didn't even know that spread could be negative?!
I just finished watching “CSS Grid” - the new and FREE video course by
@wesbos
. As always, just top-quality teaching material. Definitely a recommended-watch for anyone not yet familiar with the CSS grid specification (like myself).
EVERY REACT DEV: React is amazing because it forces you to learn native JavaScript.
ALSO, EVERY REACT DEV: I need to touch the Date object. Better install moment.js.
Over the weekend, I read Refactoring UI by
@adamwathan
and
@steveschoger
. The content is amazing and the writing is clear, concise, and to-the-point. I need to come up with a strategy that ensures that I weave this book into my ongoing development efforts.
In the past 8-years, I've gone from not know what feature flags are to seeing them completely transform the way our product team approaches work. I feel that I have a perspective worth sharing. As such, I'm going to try my hand at writing a book.
I code every day, all day … and still, whenever I start a totally new project, I feel I have no idea what I’m doing :D
So much changes between each project. Currently trying to figure out how use Webpack to manage assets inside a simple Node.js application. Feeling like a noob!
I think, as a community, we should stop postulating that frameworks or libraries “prevent” people from learning
#JavaScript
. If anything, these things “facilitate” the learning of more JavaScript because they broaden the type and scope of projects we can work on.
I've been a long-time user of
#ColdFusion
. But, the journey hasn't always been smooth. After using
#Lucee
#CFML
for the last year, however, I find that I've completely fallen back in love with the language. And, I wanted to share what about it sparks Joy.
I *know* that I'm incredibly biased here. BUT, I honestly have trouble wrapping my head around why
#JavaScript
developers think that JSX in
#React
is easier to read and write than
#Angular
templates? 🔥 The NgIf and NgRepeat directives are life! 🔥 Such clean! Much streamlined!
I spend a lot of time combing through structured
#JSON
logs. So, I created a fun little
#Angular
app that uses
#CSS
#Grid
and recursive components to parse and render a JSON payload, including the ability share payloads via URL.
As an engineer, I almost never use the phrase "It Depends". Instead, I ask you questions about what you are trying to do - and then I tell you what I think you should do based on those insights and my past experience.
Over the last week, I've been torn-up inside about the way that I've acted, the things I've written, and the example that I've set in the community. It makes me feel sick to my stomach. I want to atone and apologize and promise that I can be better.
Because of all the mask-wearing in public, I’m finding it harder to communicate my emotions with a simple smile. As such, I may have to start using the vein in my forehead to show appreciation 🤣 😷 🤣 😷 🤣 😷
Yesterday, I accidentally solved a bug that's been plaguing
@InVisionApp
for over 5-years. It was a parseInt() call in
#JavaScript
. And, given subtle parseInt() failures, I thought I should share why I almost always prefer the unary plus operator.
Been doing a ton of state-management reading the last few days. So far, these articles by
@brechtbilliet
:
*
*
... and this one by
@ThomasBurleson
:
*
... have been really striking a chord in me.
For the last few years, my mental model for Ng-Template in
#Angular
has been that of the JavaScript closure. However, based on a reader comment, I wanted to SANITY CHECK nested TemplateRef usage. As it turns out, this works exactly as I thought it would :D
This morning, I am beside myself with joy. Me and my teammates have been working hard to improve the performance of one of our
#Lucee
#CFML
services. These are (roughly) the same graphs, separated by 2-months of experimentation, refactoring, and instrumentation. Will write more.
Writing a post about databases. I enjoyed this statement:
"I spent the first half of my career figuring out how to write super complicated, multi-hundred-line queries; and, I've spent the second half of my career trying to figure out how to undo all that complexity.”
#SQL
I found this conversation between
@dhh
and
@jason
to be completely fascinating. They cover a lot of economic concerns and perspectives that I had not considered before. Definitely worth a listen.
Most of the code I write will probably be crap in one way or another.
No choice of technology is going to change that.
So I better love the technologies that I choose to work with. If not, every day is gonna be laced with minor frictions that will eventually wear down my soul.
Am I the only one who would rather just see a spinner than a "skeleton UI"? I find a skeleton UI actually makes the page feel like it's loading slower, likely due to a misalignment of expectations. I expect spinners to take a moment. But, skeleton UIs feel sluggish.
#UX
#Design
If I write code like this in JavaScript:
a => b => c => d => { ... }
... and I can't clearly articulate why all the intermediary functions are required, do I *really* understand what this code is doing?
This is why I tend to shy away from Functional programming.
Over the past 7-years building
@InVisionApp
, I've come to strongly believe that ALMOST ALL modal windows in an
#Angular
app should be directly accessible by Route. This creates a more flexible and useable application; and forces devs to decouple views.
At
@InVisionApp
, my team's designer -
@MarthaABerg
- has introduced some really interesting techniques around ideation, one of which is sorting-out MVP (minimum viable product) feature selection. I've been enjoying it so much, I wanted to see if there was potential product in it?
One of the best indicators that I’ve made a bad abstraction is when I have two object-path segments in a row that are the same. Examples:
- `item.item`
- `product.product`
- `person.person`
Usually means the top-level thing is poorly named / identified.
Just came across this photo of me and the one-and-only big Ronnie Coleman back from college.
I’m the one on the left.
YEAHHHHH BUDDY! LIGHT WEIGHT! LIGHT WEIGHT BAAAABAAAAY!
Just realized my UPDATE statement had no WHERE clause. The tiny detail that tipped me off: every record in my table suddenly having the exact same value.
N-n-n-n-noice!!!!
I know that `JOIN` and `INNER JOIN` are functionally equivalent. But, omitting the `INNER` portion—to me—feels like omitting parenthesis in a complex mathematical equation:
The author had an opportunity to make the code more clear for the next person; but, elected not to do so.
Anyone who says anything is “easy” to learn (especially in the tech world) is likely suffering from the “curse of knowledge”. If I ever tell you that something is easy to learn, please slap me :)
Over the weekend, I read “Designing Distribute Services” by
@brendandburns
. As someone who is very new to the world of containerization, this book gave me a lot of perspective on how to design decoupled and reusable services.
I've been having a lot of fun playing with the File object in
#Angular
lately. As a new experiment, I wanted to see if I could let the user Copy-Paste an Image into my Angular 7.2.15 app. Turns out, it's actually pretty easy to do - awesome sauce!
When you get back to your desk only to find that your build broke because some linting rule decided that it would mean the end of the world if the extra space at the end of one of your code comments went to production.
The other day when I was listening to the
#CSSPodcast
with
@Una
and
@argyleink
, Adam said something very thought-provoking: using
#CSS
#Flexbox
on pseudo-elements. What's so cool about this is that we can apply NESTED Flexbox layouts to pseudo-elements.
I'm having one of those mornings where I write a bunch of code, commit it to my feature branch, and then run:
`git checkout master`
... only to see:
`Already on 'master'`
.... D'oh! Time to:
```
git checkout -b feature
git checkout master
git reset --hard origin/master
```
Rocking out in my
#ColdFusion
Lives tshirt today. Gotta represent that sweet sweet
#CFML
goodness! Making web development luxurious all day, every day! 😎
I think
@raelehman
designed this shirt?
After failing to build a list animation in
#Angular
7, I tried building it in
#VueJS
2.5.21 and was blown-away to find it natively supported with almost no code. WAT!? What is this madness!!
Good morning my beautiful, beautiful friends! I'm thrilled to announce that I have an "early access" version of my
#FeatureFlags
book available at 50% off. I've poured 7-years of experience into this book; and I hope someone finds it helpful.
#CyberMonday
After 2-weeks of writing, I finally finished my opus on Database Index Design. The goal of this exercise was to write the article that I *wish I had had access to* 10-years ago. It is an attempt to demystify the art of index design.
Hmmm, having a very "down" week.
Not feeling like I'm getting anything done at work.
My blog infrastructure is breaking, and I don't have the skills to fix it.
I haven't been to a MeetUp in months.
And I'm feeling stunted creatively.
.... I need to find some small victories.
PAST BEN: I’m gonna lift lighter weights so I don’t mess up my joints.
RECENT BEN: My joints feels pretty good, let’s do a few weeks of heavier weight!
CURRENT BEN: Oww! My left shoulder!
FUTURE BEN: I’m gonna lift lighter weights so I don’t mess up my joints.
… repeat.
I DONE FLIPPED MY FIRST TIRE!! It was fun, but made me light headed. Only did it twice on the way to the car (after a quality deadlift workout). Life goal unlocked!! 😎
#ProjectHuge
#BeastMode
I just came across a logical expression in the code that took the form of:
( a && ! ( b && ! c && ! d ) )
My brain died a little bit. This is the kind of expression that perfectly illustrates why guard statements and intermediary variables can be so helpful!
As someone who loves
#Angular
, it's interesting to watch
#React
devs—who used to love React for its unopinionated ways—now moving onto other frameworks because of their "holistic" solutions. Obviously, this doesn't apply to all React devs. But, holistic solutions are underrated!
My wife's been trolling me lately by shouting "I LOVE YOU" whenever I tell the dog that I love her.
So now, I have to pass secret hand-written love notes to my dog so that my wife doesn't feel left out.
Families are hard.
I keep hearing people say, "With CSS custom props (ie, variables), we'll no longer need CSS pre-processors."
I don't understand this mentality. Am I the only one who will still be using pre-processors for things like:
&::after {}
&--selected {}
&:hover {}
Pre-processors rock!!
Trying to debug someone else’s
#React
code is tough. I’m like 7-layers deep in prop-passing, and just hit an “action creator” in a click-handler. Now, CMD+F to figure out where that heck the action is being consumed.
Props -> Props -> Props -> Props -> Props -> Props -> Action