An Adventurous Story Of An (Un)Spectacular User Journey

Whatever the nature of a configurator, usually it exists for two reasons: to inspire customers to explore a product, or to help them configure an existing product to match their needs. The former doesn’t necessarily matter only for undecided customers, and the latter doesn’t necessarily serve only customers who have already committed to a purchase. Sometimes, customers find themselves in between these two states; so, although they might not want to purchase an item at the beginning of the user journey, they might choose to buy it when they start customizing it.

This is a small explainer that I built for a talk on web fonts and performance.

Before we talk about what font-display is, let's talk about the lifetime of a web font. For a super detailed explanation of where web fonts fit in the browser rendering process, Ilya Grigorik has an amazing blog post on web font optimization. But, if we're just trying to understand the basics, there are basically three parts to it:

During the block period, the browser renders your text in an invisible font. This is why on a lot of webfont-heavy websites, during the first load of the page you will see no text or worse, phantom underlines.

React was open-sourced in 2013. Since then, it has evolved. As you search the web, you’ll stumble across old posts with dated approaches. So, here are eight key decisions your team needs to make when writing React components today.

Before you write your first component, your team needs to agree on a dev environment. Lots of options…

You can ignore types, use prop-types, use Flow, or use TypeScript. Note that prop-types was extracted from to a separate library in React 15.5, so older posts will show imports that don’t work anymore.

The community remains divided on this topic:

I prefer prop-types because I find it provides sufficient type safety in React components with little friction. Using the combination of Babel,

React was open-sourced in 2013. Since then, it has evolved. As you search the web, you’ll stumble across old posts with dated approaches. So, here are eight key decisions your team needs to make when writing React components today.

Before you write your first component, your team needs to agree on a dev environment. Lots of options…

You can ignore types, use prop-types, use Flow, or use TypeScript. Note that prop-types was extracted from to a separate library in React 15.5, so older posts will show imports that don’t work anymore.

The community remains divided on this topic:

I prefer prop-types because I find it provides sufficient type safety in React components with little friction. Using the combination of Babel,

React provides two standard ways to grab values from <form> elements. The first method is to implement what are called controlled components (see my blog post on the topic) and the second is to use React's ref property.

Controlled components are heavy duty. The defining characteristic of a controlled component is the displayed value is bound to component state. To update the value, you execute a function attached to the onChange event handler on the form element. The onChange function updates the state property, which in turn updates the form element's value.

(Before we get too far, if you just want to see the code samples for this article:

A list of practical projects that anyone can solve in any programming language (See solutions). These projects are divided in multiple categories, and each category has its own folder.

To get started, simply fork this repo.

See ways of contributing to this repo. You can contribute solutions (will be published in this repo) to existing problems, add new projects or remove existing ones. Make sure you follow all instructions properly.

You can find implementations of these projects in many other languages by other users in this repo.

Warning: this is alpha software. Test thoroughly before using in production! Consider using the check option. Please report any bugs you find!

Why?

Butternut is significantly faster than other JavaScript minifiers, and works with the latest version of JavaScript (ES2015, aka ES6, and beyond). It's typically around 3x faster than UglifyJS with default minify options, and 10-15x faster than Babili.

The compression is better than Babili and closure-compiler-js (in standard compilation mode — you can get better results with Closure in advanced mode, but only by writing your code in a very particular way). It's

I started coding in the bad old days of plain filesystem copies and Visual SourceSafe with its exclusive locks on checkout. Even so, back then the concept of source control was so amazing to me I wished I had access to it when coding at home.

After finishing up a component to filter data, generically, client-side paging seems like the next logical step to implement.

Initially, I thought about putting paging functionality within the table component itself. But then, I thought it would kind of neat if the pager could kinda-sorta stand on its own. This does create a few challeneges since, now, the controlling component would have to control dataflow. That is to say, if it gets notified that the data within the table has been filtered, it would also need to trigger sorting and paging prior to returning data to the table for display. Essentially, it means the table would always need to receive paged data.

This is a command line application, using Node.js, that fetches the GitHub Issue/s you specify and writes them to files on your computer in both HTML and markdown formats. This way you can view them without an internet connection.

Last year, I started working with Swift and have come to absolutely love the language. It does have its flaws (in particular, the API is still developing and not fully stable). However, for a someone with a web development background, it feels like a good mix of familiarity from JS, “beautifulness” of Ruby, and a sprinkle of predictability that comes with static typing in Java.

One of the most unique design patterns in Swift is the core use of Optionals and Optional Chaining (also called safe navigation or the existential operator). According to Wikipedia, only 7 other major languages have Optional Chaining.

A full-featured framework for building command line applications (cli) with node.js, including help generation, colored output, verbosity control, custom logger, coercion and casting, typos suggestions, and auto-complete for bash/zsh/fish.

Install

Simply add Caporal as a dependency:

npm install caporal --save // Or if you are using yarn (https://yarnpkg.com/lang/en/) yarn add caporal --save

Glossary

Program: a cli app that you can build using Caporal

Command: a command within your program. A program may have multiple commands.

Argument: a command may have one or more arguments passed after the command.