svgbobrus - Convert your ascii diagram scribbles into happy little SVG
With HMR enabled you can’t use [chunkhash] for technical reasons.
>
> For dev builds with HMR -> use [hash].
Leap seconds, go and cloudflare
hyperHTML - great virtual dom
xkeshi/image-compressor
A simple JavaScript image compressor. Uses the Browser's native canvas.toBlob API to do the compression work. General use this to precompress a client image file before upload it.
Writing an automatic code formatter
Data transfer
Text
Time
Just use UTC. For transfering time over the wire - ISO 8601. RFC 3339 - basically ISO 8601, just a little bit more strict.
Where to store dotfiles data - XDG Base Directory Specification
$XDG_DATA_HOME
$XDG_DATA_HOME defines the base directory relative to which user specific data files should be stored. If $XDG_DATA_HOME is either not set or empty, a default equal to $HOME/.local/share should be used.
Example usage: storing plugins downloaded by the user, databases created by your program, user's input history, bookmarks, emails, and so on.
$XDG_CONFIG_HOME
$XDG_CONFIG_HOME defines the base directory relative to which user specific configuration files should be stored. If $XDG_CONFIG_HOME is either not set or empty, a default equal to $HOME/.config should be used.
You should use this directory to store user-specific configuration files for your program. You will most likely want to create a default configuration file with sane and sensible default values the first time your program is executed.
$XDG_CACHE_HOME
$XDG_CACHE_HOME defines the base directory relative to which user specific non-essential data files should be stored. If $XDG_CACHE_HOME is either not set or empty, a default equal to $HOME/.cache should be used.
Example: caching thumbnails generated by your file manager, songs that the user of a music straming software is often listening to, and so on. Your program should continue to function without any problems if this directory is removed by the user. Ensure that the files that are no longer needed are properly removed. Remember that exceeding the sensible amount of storage space used by your files will most likely upset the user who will quickly track down your program as a culprit.
$XDG_RUNTIME_DIR
$XDG_RUNTIME_DIR defines the base directory relative to which user-specific non-essential runtime files and other file objects (such as sockets, named pipes, ...) should be stored.
The specification lists a series of requirements that have to be fulfilled by this directory. As described by the specification you should use this directory to store sockets and similar files used for communication.
System-level variables
$XDG_CONFIG_DIRS
$XDG_CONFIG_DIRS defines the preference-ordered set of base directories to search for configuration files in addition to the $XDG_CONFIG_HOME base directory. The directories in $XDG_CONFIG_DIRS should be seperated with a colon ':'.
If $XDG_CONFIG_DIRS is either not set or empty, a value equal to /etc/xdg should be used.
This directory should be used for storing system-wide configuration files that can be overwriten by user-specific configuration files. This directory would most likely be populated during the installation process.
$XDG_DATA_DIRS
$XDG_DATA_DIRS defines the preference-ordered set of base directories to search for data files in addition to the $XDG_DATA_HOME base directory. The directories in $XDG_DATA_DIRS should be seperated with a colon ':'.
If $XDG_DATA_DIRS is either not set or empty, a value equal to /usr/local/share/:/usr/share/ should be used.
Example: storing plugins or themes that can be used by all users of your program. This directory would most likely be populated during the installation process.
Reliability
In God we trust, all others must bring e2e tests.
The flakiness of your integration tests is a lower bound for the flakiness of your user experience.
I recently learned about Hyrum's Law, which states:
With a sufficient number of users of an API, it does not matter what you promise in the contract: all observable behaviors of your system will be depended on by somebody.
Kevin Mahoney has provided a new neat mathematical illustration of the availability problem of inter-connecting services:
Take the example where service C depends on services A and B[…]
If A has an availability of 0.8 (80%) and B 0.95 (95%), C will have a best case of 0.8 (80%), an average case of 0.8 × 0.95 = 0.76 (76%), and a worst case of 1 - ((1 - 0.8) + (1 - 0.95)) = 0.75 (75%)