* * *
Recent Posts
------------
### [Introducing Mentoss: The fetch mocker](/blog/2025/01/introducing-mentoss-fetch-mocker)
_January 27, 2025_ - A new approach to mocking global fetch() calls that works in both browsers and server-side runtimes.
### [Present technical information using a storytelling framework](/blog/2024/09/present-technical-information-storytelling-approach)
_September 4, 2024_ - Streamline presentations to stakeholders using a storytelling approach.
### [How someone temporarily took over my subdomain](/blog/2024/05/someone-temporarily-took-over-subdomain)
_May 21, 2024_ - How an old DNS record set up my subdomain to be occupied by someone else.
### [Backing up my life with a Synology NAS](/blog/2024/04/backing-up-my-life-synology-nas)
_April 23, 2024_ - Data in a public cloud is out of your control, that's why I decided to create my own private cloud in my office.
### [Managing your to-do-list as a staff+ engineer](/blog/2024/04/managing-your-to-do-list-staff-engineer)
_April 20, 2024_ - With great agency comes responsibility – to yourself. Learn how to triage your projects and tasks into a structured to-do list.
### [What's the difference between JavaScript engines and JavaScript runtimes?](/blog/2024/03/javascript-engines-runtimes)
_March 26, 2024_ - Runtimes and engines are often incorrectly referred to as the same thing.
### [Introducing humanfs (formerly fsx): A modern filesystem API for JavaScript](/blog/2024/01/fsx-modern-filesystem-api-javascript)
_January 10, 2024_ - Filesystem APIs in JavaScript runtimes haven't been great for a long time. This is my attempt to make a better one.
### [JavaScript WTF: Why does every() return true for empty arrays?](/blog/2023/09/javascript-wtf-why-does-every-return-true-for-empty-array)
_September 8, 2023_ - How can a condition be satisified when there aren't any values to test?
### [Managing your interrupt rate as a tech lead, part 3: Office hours and appointment blocks](/blog/2023/08/managing-interrupt-rate-tech-lead-office-hours-appointment-blocks)
_August 1, 2023_ - You can more easily eliminate interruptions when you create a specific time for them.
### [Managing your interrupt rate as a tech lead, part 2: Time blocking](/blog/2023/07/managing-interrupt-rate-tech-lead-time-blocking)
_July 25, 2023_ - Your calendar is a place where you should be in control and not be at the whims of others who send you invites.
[« Older Entries](/blog/2)
Additional Information
======================
My Books
--------
* [](https://www.lulu.com/en/us/shop/nicholas-c-zakas/understanding-javascript-promises/paperback/product-2yvnqn.html)
* [](https://geni.us/hwc-es6-book)
* [](https://geni.us/hwc-oopjs-book)
* [](https://geni.us/hwc-mjs-book)
Recent Snippets
---------------
* [Passing GitHub Actions workflow step output to JavaScript](/snippets/2025/02/passing-github-action-step-output-to-script/)
* [Publishing to JSR using release-please](/snippets/2024/03/publishing-to-jsr-release-please/)
* [How to setup a known\_hosts file for a Jenkins pipeline job](/snippets/2023/11/how-to-setup-known-hosts-jenkins-pipeline/)
* [Mimicking \_\_dirname and \_\_filename in ESM modules in Node.js](/snippets/2023/01/mimicking-dirname-filename-nodejs-esm/)
* [How to add npm packages for client-side use in Eleventy](/snippets/2022/02/eleventy-npm-modules-client/)
* [Creating a new user with an SSH key on Linux](/snippets/2021/03/create-user-linux-ssh-key/)
* [How to setup and deploy a web application on Dokku](/snippets/2021/02/how-to-setup-deploy-web-application-dokku/)
* [How to regain Jenkins web access after being locked out](/snippets/2021/02/how-to-regain-jenkins-web-access-after-lockout/)
* [Create TypeScript declarations from JavaScript and JSDoc](/snippets/2020/10/create-typescript-declarations-from-javascript-jsdoc/)
* [How to read environment variables in Deno using JavaScript](/snippets/2020/10/read-environment-variables-deno/)
Archives (21 Years)
-------------------
* [2025](/blog/2025/)
* [2024](/blog/2024/)
* [2023](/blog/2023/)
* [2022](/blog/2022/)
* [2021](/blog/2021/)
* [2020](/blog/2020/)
* [2019](/blog/2019/)
* [2018](/blog/2018/)
* [2016](/blog/2016/)
* [2015](/blog/2015/)
* [2014](/blog/2014/)
* [2013](/blog/2013/)
* [2012](/blog/2012/)
* [2011](/blog/2011/)
* [2010](/blog/2010/)
* [2009](/blog/2009/)
* [2008](/blog/2008/)
* [2007](/blog/2007/)
* [2006](/blog/2006/)
* [2005](/blog/2005/)
* [2004](/blog/2004/)
* * *