Something akin to a blog. Thoughts, photos, and relevant updates are collected here, click a tag to narrow by interest.
🔖
In memory of Mahmoud and tens of thousands of others
<script>
import Image from '../../lib/components/content/Image.svelte'
</script>
<Image path="/images/blog/2025/mah...
Before sending that email to hundreds of thosuands of customers... ask yourself, is announcing "we now have dark mode" b...
The NYC Primary
It’s been a rough couple of weeks in world news. A lot has been going on that I’ve felt moved to comment on but haven’t...
The Underground Railroad
I've been on a Colson Whitehead tear in the past year having started five of his books, finishing four of them. This yea...
White Fragility
**Full Title**: *White Fragility: Why It's So Hard for White People to Talk About Racism*
Although it's a short read thi...
Weekly Round Up: June 13, 2025 👻
It was a week of state machines. Two separate Rails projects, two separate state machine libraries (`state_machines` and...
Multi-tenancy with Phoenix and Elixir
There are lots of good places to start with multi-tenancy in Elixir (although I'd recommend Ecto's own docs for either [...
Today I Learned ~D[2025-06-02]
File this under "things I knew but have to look up everytime"...
If you want to spin up a Docker container without a se...
Everything is Tuberculuosis
I've never read anything from John Green but I used to watch his YouTube channel. As a young adult fiction author; I fel...
The Anxious Generation
America has a long history of moral panics, the phone, rock music, rap music, etc. I always want to be careful about bla...
Today I Learned ~D[2025-05-22]
There is only one `false` in Ruby... Or more broadly speaking since everything is an object, for the sake of efficency i...
Today I Learned ~D[2025-05-14]
I recently switched jobs, which means new BitBucket credentials. However; I remain an occasional consultant with my last...
Class Configs with Lambdas in Ruby
I've been getting reacquainted with Ruby, diving into a well established project which has been blessed by numerous smar...
Weekly Roundup: May 2, 2025
This week I formally transitioned from my fulltime consulting gig at [Objective](https://objective.dev) for a fulltime g...
Weekly Roundup: Apr 25, 2025
At the agency, we have a customer who has asked that customers accept terms of service *before* checking out. This is fo...
Cloud Atlas
Review of Cloud Atlas
Weekly Roundup: Apr 18, 2025
Working for a small agency I am fortunate to work on a number of fast moving projects simultaneously. For years I've fai...
Experience has shown that if you put out a bug bounty your server will be hit repeatedly with requests to `/wp_admin` fo...
Personal Heuristic: Make it Readable
I wrote this post back in January, just dusted it off to post today as I attempt to get back on the blogging horse.
***
...
Wintering: The Power of Rest and Retreat in Difficult Time
Reading 80% of this book was an exercise in torture. I'm always a little wary of personal memoirs cum self-help books bu...
Today I Learned ~D[2025-01-10]
Today's TIL has a twist ending... so stick around.
Elixir has a shortcut for creating anonymous functions. I've alway...
Morning walk
Interesting things I passed on the way to the library with my daughter here in Guelph.
Merry Christmas everyone!...
OptConnect Marketing Site
- Timeline: July 2020 - December 2021
- Status: the client switched to WordPress in May 2024
- Technologies: CraftCMS, B...
Canada Post Strike
For the past few weeks postal workers in Canada have been on strike....
Not to rush Christmas, but I think I'll try my hand at Advent of Code this year. It will be a good chance to play aroun...
Adding a `soft_delete` to Ecto Multi pipelines
I'm a big fan of `Ecto,` Elixir's database wrapper. The `Multi` library lets you build up a series of operations that ha...
(Untitled)
Went walking with my daughter and we picked some autumnal bouquets....
TIL Struct matching in Guards
Not so much a TIL but I always get confused with the proper syntax. You can pattern match on a struct and use it in a gu...
I'm 33 years old and I only learned how to spell "doesn't" this year. Getting enough practice where I almost spell it ri...
TIL UUIDv4 vs UUIDv7
I've always run with UUID v4 because it's the default for the `Ecto.UUID` library in Elixir. However a coworker recommen...
TIL INSERT INTO with SELECT constraints
In the past month I've had to write a lot of SQL to migrate a system and split existing "locations" into tenants ie. mig...
July 2024 Music Recap
One of the things I miss most about Spotify is Wrapped. I always feel a pang of envy at the end of the year when people...
Why Cybertruck when you could [Cyberduck](https://cyberduck.io/) ! I think I've been using Cyberduck for 100% of my FTP ...
SQL is the way, SQL is always the way! I killed myself for hours this morning trying to query/clean some data in Rails,...
Apparently I destroyed my fingerprint while climbing over the weekend- my MBP fingerprint no longer seems to work. It's ...
Morning Jog in Guelph. Rainy days like yesterday are perfect!
(Untitled)
I just modified the Journal theme to allow for microblogging....
The UW Encampment
I havve been watching with admiration and humility as students around the world have set up encampments demanding
On “Rewilding The Internet”
<script>
import Image from '../../lib/components/content/Image.svelte'
</script>
<Image path="/images/blog/2024/wil...
Back up and blogging? Sort of.
In conjunction with me finally overhauling my website I've decided to get on the blogging train. I've had a personal blo...
Today I Learned ~D[2024-01-03]
You can use Erlang's `tc` function to see how many microseconds a function takes. For example, say you were curious if ...