A king has 100 barrels of wine, but one of them is poisoned. The poison only shows symptoms after 1...
JSON is a rather simple format, this makes it easy to use, understand, and parse. But sometimes you...
"Balatro" is a rogue-like poker game that comes with all sorts of modifiers to change the rules mid...
It's been 3.5 years since I created the series TDD course with Adonis.js using Adonis.js version...
SRP (Single Responsibility Principle) The single responsibility principle (SRP) is a...
If Marcus Aurelius and his philosophical peers were modern-day software engineers, what wisdom might...
A bunch of Twitter API clients which upgraded from v1 API to the free v2 API were suddenly suspended....
"Baba is You" is a unique and innovative puzzle game that offers players the ability to dynamically...
An increasingly common practice in JavaScript is destructuring. This is great to get rid of otherwise...
What do you look for when you review your peer's code? Is it that the new code is consistent with the...
For quite a while I've been thinking how cool it would be to have a website in the style of the...
Experiment For this experiment, please have a mac ready and open this sandbox:...
Last but not least, let's talk about Cross-Site Scripting (XSS)! XSS attacks are all about writing m...
Even with the right CORS setup and CSRF protection cookies present a few more attack vectors. Let's d...
In the previous post, we discussed CORS, CSRF tokens, SameSite, clickjacking and JSON hijacking. With...
One of the best features of the web is its backwards compatibility. But ironically, this also makes the web somewhat insecure by default. Let's have a look
Say you have a piece of code that depends on the current time. function isAM() { return new Date(...
It's been almost a year since I posted my first article on git aliases. Since then I've applied a...
If you are working on a SPA that connects to an API somewhere, you are going to need to write a lot o...
In a previous post I created a prototype of seamless integration between frontend and backend. To sa...
My Workflow I've created two workflows to manage an open source NPM package of mine....
Now that we are all done with CI, let's tackle CD. There are a couple of ways we can set up publishi...
This is a follow-up article to set up CI using GitHub Actions. Make sure you check out the previous a...
Having used and modified CI/CD systems in Jenkins and GitLab CI in the past, I have never set it up m...
A slug is the last part of the URL and identifies a specific page on a site. For example, on my blog...
Isn't Flexbox amazing? All these years where we had to fight with floats, try vertical-align: middle...
I've been working with React Hooks for over one year now. Working on a variety of things, there has b...
Vue 3 has been on my radar for a while, but a recent RFC got me from "interested" to "excited". I am...
Originally posted at michaelzanggl.com. In my first job, besides web development, there was also...
Tailwind CSS is an amazing framework, but when people first see this: <div class="md:flex bg-whi...