The personal blog of Sam McLeod

Budgeting for Subscriptions & LicensesTransparently tracking my financial expenses spent on subscriptions and licenses.
I’m doing this in the interest of exploring subscription fatigue and to help others who might interested in doing similar.
Recurring Expenses Expense Cost (Yearly) Category Required/QoL Want To Cancel/Replace Usefulness Satisfaction Frequency 1Blocker $12 Security/Privacy Required No Critical High Yearly 1Password $55 Security Software Required Yes Critical Medium ^1 (Was high before v8) Monthly Amazon Prime $85 Utilities QoL Yes High Medium Yearly Apple iCloud $54 Backup Software Required No Critical High Yearly Apple Music $130 Entertainment Required No High High Yearly Aus.Social $24 Entertainment/Donation QoL No Medium High Monthly Backblaze $96 Backup Software Required No Critical Medium 2 Yearly Bear $22 PKM Required No/Maybe High Medium Yearly BetterTouchTool $8 Utility QoL No High High 2 Yearly Fastmail $81 Utility QoL No Critical High Yearly Github CoPilot $120 Coding/Writing Tool QoL No High High Yearly Infuse $14.
Numerous research shows that group “Brainstorming” isn’t just ineffective - it has a negative correlation with quality, produces less results and reinforces biases.
Studies have shown the negative effects to be especially apparent in person (as opposed to remote/online).
By contrast “Brainstorming” alone / asynchronously produces higher quality results, surprisingly - with less biases.
HBR - Why Group Brainstorming is a Waste of Time Open for Ideas - Science shows Brainstorms don’t work. Why do we still use them? Psychological Science - There’s a Better Way to Brainstorm The group dynamic of brainstorming is a “social trap” - where the group is incentivised to agree with each other, rather than produce the best ideas.
Deployment / Delivery FrequencyI often end up needing to advocate for more frequent delivery/deployments with clients.
Abstract Frequency = Energy, Energy = Sustainability There’s the usual benefits commonly discussed such as improved feedback, reduced risk, well understood processes, maintainable dependencies etc… however what’s often missed entirely is how it relates to the health and sustainability of the team. Note: I use the term “delivery” and “deployment” interchangeably throughout this post.
How We Get Our Energy I like to think of how get my energy throughout the day/week/month/year in terms of “wins”.
“Wins”I get the majority of my energy from “wins”.
Zsh Configuration and Plugins - Part two
You can find the first post in this series here.
FunctionsMany of my functions start out as aliases and then I convert them to functions when I need to add more functionality. You can find these in 9-function.rc.
pdfcompress () { gs -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=pdfwrite -dCompatibilityLevel=1.3 -dPDFSETTINGS=/screen -dEmbedAllFonts=true -dSubsetFonts=true -dColorImageDownsampleType=/Bicubic -dColorImageResolution=144 -dGrayImageDownsampleType=/Bicubic -dGrayImageResolution=144 -dMonoImageDownsampleType=/Bicubic -dMonoImageResolution=144 -sOutputFile="$1".compressed.pdf "$1"; } function echoerr() { printf "%s\n" "$*" >&2; } Navigation fcdInteractive cd using fzf
function fcd() { local dir; while true; do # exit with ^D dir="$(ls -a1p | grep '/$' | grep -v '^.
Github Actions is a “BYOBE” (Bring Your Own Bloody Everything) offering that provides basic CI with surprisingly convoluted configuration to Github.
The product as a whole is an exercise in frustration, one of the worst parts is the lack of reusability and the complexity required to achieve it. Github’s concept of reusable workflows on Github Actions is clearly a cobbled together afterthought.
There’s no one way to reuse workflows - you can’t simply include / inherit FROM another workflow and no support for standard YAML anchors/aliases1.
Reusable Workflows Composite Actions Composite ActionsComposite actions are a way to combine multiple steps into a single step.
The YAML Spec defined a simple way to reuse values in YAML documents by means of Anchors and Aliases.
Anchors (&) are used to define a value. Aliases (*) are used to reference a value. Overrides (<<:) are used to merge values. ExampleThis may look more complicated at first, but once you know what it’s doing it’s very simple and can greatly reduce the amount of duplication in your YAML files and with that the risk of config drift and copy/pasta errors.
simple-anchor: &hw "echo Hello World" env: &env-common - MY_ENV_VAR_1: "my value 1" - MY_ENV_VAR_2: "my value 2" - MY_ENV_VAR_3: "my value 3" with: &with-common my-input: "my value" my-secret-input: ${{ secrets.
As of 2022, I’ve been using zsh as my primary shell for 14 years.
Over that time I’ve experimented with and accumulated a lot of configuration, scripts, hacks, plugins and themes. I’ve settled on a configuration that I’m mostly happy with, over this series I’m going to share my current setup.
I store all of my configuration in a git repository available here: zsh-bootstrap Star Fork File StructureI’ve organised my setup into a few different files.
Installationbootstrap_shell.sh- Used to install the shell, configuration, plugins and homebrew packages when first setting up a new macOS machine/VM.
Configuration zshrc - The main zsh config file, it sources the following (.
Contributing to Open Source is important to the quality and maintainability of the software and engineering communities we rely on every day - so why is it that so many developers/engineers never participate?
I frequently cross paths who may have been in tech for some time - but don’t contribute to Open Source projects.
Their Github/GitLab accounts are bare with almost no activity. They don’t add to or fix problems find the answers to in documentation - even log bug reports.
Most companies don’t do enough to contribute back to open source projects. It’s not just that they don’t provide time for their employees to contribute, they don’t even encourage it let alone educate people on how to do it, or why it’s important.
We create more value by having conversations in public instead of behind closed doors.
This is a blurb I add to the teams wiki page.
Avoid sending DMs/PMs for support and technical questions We value making work visiblePart of this is achieved by us making an effort to ensure we’re asking for support and technical questions by starting a thread in our squads (or the relevant) room - instead of via of direct messaging (or calling) an individual.
This helps with:
Sharing knowledge amongst the team. Identifying common problems that others might be having or aware of. Balances support to prevent any individual getting overloaded.

Near the end of each year I note down a summary of the best apps I’ve enjoyed using throughout the year, here’s 2022.
Info See also Firefox Addons - 2022 The Best MeetingBar (Meetings in your menubar) - Get MeetingBar Reeder (RSS) - Get Reeder Shottr (Better screenshots) - Get Shottr Bumpr (Multi-browser rules for links) - Get Bumper Onyx (macOS customisation) - Get OnyX Brew (Package manager) - Get Brew mas (Mac App Store manager for Brew) - Get mas Little Snitch (Firewall) - Get Little Snitch RadioSilence (Simple Firewall) - Get RadioSilence Pixelmator Pro (Image/Photo editor) - Get Pixelmator Pro Keka (Archive/Compression tool) - Get Keka LaunchControl (Frontend for launchd) - Get LaunchControl Peek (Quicklook plugins) - Get Peek MusicHarbor (Track new and upcoming music releases) - Get MusicHarbor DaisyDisk (Disk usage inspector) - Get DaisyDisk Things (GTD/Notes/Lists app) - Get Thing BetterTouchTool (macOS automation and customisation) - Get BetterTouchTool Parcel (Track parcels) - Get Parcel Backblaze (Backups) - Get Backblaze MicroSnitch (Get notifications for active mic/webcam) - Get Micro Snitch Handbrake (Transcode video files) - Get Handbrake Amphetamine (Keep you mac awake) - Get Amphetamine Bear (Markdown/notes/web clipping) - Get Bear Calibre (eBook management and conversation) - Get Calibre ImageOptim Beta (Image compression) - Get ImageOptim Note: This is a beta version, but it’s the only version that supports Apple Silicon natively, the author is working on ImageOptim 2 - A complete rewrite.
This post was written using Machine Learning (GPT3) with minimal intervention from me beyond providing prompts and sources. We’re (still) not deploying enoughIt’s 2022 and not deploying frequently enough is still one of the most common causes of software failure.
I couldn’t tell you how often I work with clients that have deployment problems and it turns out they haven’t deploy the code in production for weeks, sometimes months, or in a few cases years.
Sometimes it’s because they’re afraid of change, sometimes it’s due to a lack of resources, but more often than not it’s due to fear of the unknown.

Over the past month I’ve been playing with OpenAI’s DALL·E 2, below are some of the interesting images I’ve generated.
“DALL·E 2 is a new AI system that can create realistic images and art from a description in natural language.”
“A renaissance oil painting of two developers arguing over which javascript framework is the worst” “A Ralph Steadman painting of 7 cats sitting on a fence, and one raven” “A poster of Bruce Lee posing in front of a wall painted with traditional Japanese dragon artwork” “An Art Nouveau painting of Batman outside a church” “Old man yells at cloud” Variations on “A romantic oil painting of a chicken wearing beats by dre and smoking a cigarette” “A Romantic oil painting of a chicken wearing ripped jeans, aviator sunglasses, smoking a cigarette leaning up against a wall” “A romantic painting of snoop dog and a cool chicken wearing ripped jeans and aviators standing in a recording booth rapping into a microphone” “A dutch masters style oil painting of the rapper snoop dogg rapping into a microphone along side a cool looking animal wearing ripped jeans” “An oil painting of the rapper snoop dogg as a marvel super hero whose super power is smoking” “A romantic style oil painting of the rapper snoop dogg as a marvel super hero whose super power is smoking” “A detailed psychedelic painting of a person listening to the band TOOL for the first time and having their third eye opened” “A white Romantic Sculpture of the dude from the film the big lebowski” “A dutch masters oil painting of a robot cat” “A red Tesla model 3 crashed on the side of the road due to it’s poorly designed suspension” “A kiwi walking over hot coals” “A Ralph Steadman style ink painting of cats sitting on a fence smoking” “Two chickens playing chess while smoking” “Cats get dressed up to go to the theatre” “A grumpy cat drinking black coffee and smoking a cigarette” “A female artist with brown and grey hair hangs white deer antlers in an art gallery” “A black and white cat and a boarder collie dog in the style of Grayson Perry” “A lonely cat by a window in a Ralph Steadman style” “A post-apocalyptic city at night ruled by cats” “A border collie dog and black and white cat in the style of Gustav Klimt” “DevOps hipsters deploy to the cloud” “A psychedelic monkey smoking” “Cats smoking cigars and playing poker” “An elite hacker breaks into the computer mainframe, his eyes are red, his beard is long, he is in a dark room at his desk” “Cats captaining space ships with lasers” “Two lamas duelling with lightsabers at a disco” “A dark, detailed oil painting of a post-apocalyptic city a night, two terminator cyborgs are patrolling the street” “A photo of a beautiful British field in the summer, there are butterflys, birds and a small pond.