Skip to main content
Steven Merrill

Latest 5 Posts

  1. Project Gaming Chromebook: What a difference 8 years makes

    This is the first post in my Project Gaming Chromebook series in which I chronicle getting a refurbished Acer 516 GE and turning it into the ultimate beater laptop.

    In mid-2016 I had just started at a new gig and I got the premiere web dev machine at the time, the final iteration of the pre-Touch Bar (thank goodness) 15" Retina MacBook Pro. That machine had great specs for the time:

  2. Secure Erase on Modern Mac OS

    I'm currently on vacation and helping my mother out with some tech-related chores. One of her requests was to securely erase an old Mac backup volume on an external hard drive that at one time contained a good amount of personal and financial data. In years past, I would have gone to Disk Utility and chosen Erase on the volume and used the Security Options dropdown to have it write over the disk 3 or 7 times.

    It appears that modern Mac OS has completely removed this option from the Disk Utility GUI. If you are still looking to do this it can still be accomplished via the diskutil CLI. From man diskutil on Mac OS Sequoia:

  3. Default Apps, 2025 Edition

    I didn't even realize that it was #blaugust until I read it on David Lyons's Mastodon, but I'm here now one day late to copy his post and chronicle the apps that I use on a daily basis.

  4. I promise you shouldn't fear rejection

    Pop quiz for node.js users — what does this program output if the promise resolves, and what is different if it fails to reject through its else branch?

    async function main() {
    	const promise = new Promise((resolve) => {
    		setTimeout(() => {
    			if (Math.random() > 0.5) {
    				console.log("We win");
    				resolve();
    			} else {
    				console.log("We lose");
    			}
    		});
    	});
    	await promise.catch(console.error);
    	console.log("Looks like we made it");
    }
    
    main();
    
  5. Why Is TypeScript Picking Up Old Types?

    At Campfire Learning we have a large TypeScript monorepo containing all the code for our various services as well as our various frontend applications that we use to deliver our curriculum and assessment experiences.

    While working on a new backend component, I installed the 1.0 version of the Cheerio XML parser to handle HTML and XML parsing. As I worked in a new package in the repository, I noticed that I was getting errors when trying to initialize a Cheerio 1.0 parser through its load() method:

39 more posts can be found in the archive.