Dev
Tips
Archive
Here’s the complete list of all our tips, tricks, techniques, tutorials, and tidbits since 2014.
2023
Use a .mailmap file to merge, consolidate, or replace author names and email addresses in Git
July 3rd
LTR/RTL text direction support and localized content examples in Storybook
February 3rd
2022
Short-circuiting promises using timeouts in JavaScript
May 20th
Feature branch deployment and preview environment in GitLab CI
March 29th
Rename case-sensitive files in Git on macOS
January 2nd
2021
Passing Web Component HTML attributes to React
November 12th
Change the author and committer of a Git commit
October 27th
Anonymize author names for historical commits in Git
October 26th
Conditional mandatory properties depending on other properties in TypeScript
October 18th
Resolving JavaScript promises from the outside using the »Deferred« pattern
July 3rd
Exporting outputs from CDK and CloudFormation to environment variables or ».env« files
June 26th
Deploying updates to ECS Fargate services for every ECR push with AWS CodePipeline and AWS CDK
June 20th
Using »jq« to filter JSON output
June 12th
»Big O« notation
June 5th
A/B tests with React and Google Optimize or Optimizely
May 29th
Modernize legacy frontends from inside-out via SPA injection
May 22nd
Rendering React applications as native Web Components
May 15th
Testing multiple values using table-driven tests in Jest
May 9th
GitLab CI YAML configuration linting
May 1st
Sharing/Extending configuration between GitLab CI jobs
April 24th
Building Docker images in GitLab CI
April 18th
Difference between caches and artifacts in GitLab CI
April 10th
Getting started with GitLab CI
April 4th
Why »0.1 + 0.2« results in »0.30000000000000004« in JavaScript
March 21st
Persisting React state in localStorage with »useStickyState«
March 13th
Providing React contexts via custom component
March 7th
Consuming React contexts via custom hook instead of using »useContext«
March 6th
Ensuring reliable typings using TypeScript’s type guards
February 28th
Why generic type parameters are called »T« and why you should not use these short names
February 20th
Enable type checking for .js files
February 7th
Fail-safe localStorage and sessionStorage in JavaScript
January 30th
The four types of software testing
January 24th
Software testing in a nutshell
January 16th
Asynchronous event bus
January 10th
2020
Writing BEM selectors in SCSS
December 20th
Grandchild elements in BEM
December 12th
Getting started with BEM
December 6th
Dark mode in CSS
November 29th
Get all unique/distinct values in a JavaScript array based on an object property
November 21st
Get all unique/distinct values in a JavaScript array
November 14th
Sort an array by multiple properties/fields in JavaScript
November 1st
Sort an array of objects by property in JavaScript
October 31st
Why .sort() orders numbers and special characters in JavaScript wrong
October 24th
Linting Dockerfiles using hadolint
October 16th
Adding TypeScript typing to IntelliSense in .js files
October 2nd
Difference between »npm install« and »npm ci«
September 27th
Install and manage multiple Node.js versions using »nvm«
September 19th
Executing recurring tasks automatically using crontab
September 6th
Find erroneous/broken commits with »git bisect«
August 29th
Linting Git commit messages
August 16th
Semantic branch names and commit messages in Git
August 8th
Orphan branches in Git
July 31st
DevOps is not a technology, role, or job title – it’s a mindset and attitude
July 18th
Best practices for Git
July 10th
Imperative vs. declarative events
June 6th
Reference any package.json property in npm scripts via environment variables
May 9th
Pass custom command-line arguments to npm scripts
April 24th
Speeding up sites and apps by using just-in-time preloading for faster page transitions
April 12th
Transpile old ES5 code to latest ECMAScript using Lebab
April 3rd
Capture network traffic for reverse engineering APIs of iOS apps
March 15th
Overlapping bottom navigation bar despite 100vh in iOS Safari
February 9th
Conditional overriding of Git configurations for single and multiple repositories
February 4th
Node.js package names are case-sensitive
February 3rd
Announcing Dev Tips
February 2nd
Update existing SSH private key
January 20th
2019
Micro-frontends: porting the micro-service approach into the frontend
February 23rd
2018
Difference between »throttling« and »debouncing« a JavaScript function
March 4th
Using the publish/subscribe pattern and a shared event bus to decouple frontends
March 3rd
2017
CSSplexity: Applying complexity metrics to a non-programming language
August 19th
How to log client-side JavaScript errors/exceptions/bugs
August 15th
Hello World, again.
April 9th
2015
Reverse Engineering of Android apps
November 5th
Difference between ».apply()«, ».call()« and ».bind()« in JavaScript
April 8th
Consynchronous Assurency: How to achieve quasi-concurrency with Array.prototype.forEach
April 8th
Complex/variable object keys in JavaScript
April 8th
Passing arguments to another function in JavaScript
April 8th
Prefixing immediate functions with a semicolon in JavaScript
April 8th
»Truthy« and »falsy« values in JavaScript
April 8th
How to fix »EACCES« errors with npm on Mac OS X
February 15th
2014
Don’t use fat arrows in CoffeeScript just because of »this«
November 22nd
Override JavaScript functions
September 5th
Multi-line strings in JavaScript
September 5th
typeof null === "object"
July 16th
Default arguments/parameters in JavaScript
July 12th
Class constructors without using "new" in JavaScript
July 12th
jQuery’s .load() callback for cached images in Internet Explorer
July 12th
I see some JavaScript scripts using »!0« and/or »!1« occasionally. What does that mean exactly?
July 12th
Prevent links in standalone web apps to be opened in Mobile Safari under iOS
July 12th
Detect Touch devices using JavaScript
July 12th