UUIDs are a 128-bit number, represented as groups of hexadecimal digits, separated by - characters. For example, a UUIDv4 looks like 62b5dcd2-1549-4e1c-8315-0e83b2518b35. They're primarily intended as identifiers, and they have a few versions that have different properties. I'm going to focus on UUIDv4 here and why you might not need them. Side quest: Why not use sequential integers? If you use a relational database (RDBM) like PostgreSQL or MySQL, you can set an autoincrementing integer as a...| Forkcasting
There have been a couple of posts on Statistical Process Control (SPC) recently. The most common objections are that you can't measure software development, that software development is too intrinsically variable for these techniques to be worthwhile, or the measures have no effect on outcomes that matter (e.g., Free cash flow (FCF), return on invested capital (RoIC), etc.). Here's an incomplete list of measurements that might apply to software systems and their associated development process...| Forkcasting
About a year ago, Amazon Music switched their offering to a "shuffle-only" model. This is fine for most albums, but there are some albums that I love to listen to in-order. Think, Miles Davis' "Kind of Blue" or literally anything by Tool. I'd been a Prime subscriber for well over a decade, but I wasn't about to pay extra for a feature they'd previously offered. Especially not one that seems to cost them nothing extra. It felt like an unfair cash-grab. So what's a music afficiando to do? Well,...| Forkcasting
In the Twelve Factor App, section III. Config, Wiggins writes that config should be stored in environment variables, including "Credentials to external services such as Amazon S3 or Twitter". However, this neglects one important aspect of service-to-service credentials: rotation. Credentials are one of the few configuration values that need to be regularly changed in running systems. To rotate a credential stored in an environment variable, you need to: Create the new credential with the othe...| Forkcasting
On 2023-Dec-31, Keybase had an outage because a TLS certificate expired. Expired TLS outages have happened at GitHub, Oculus/Meta, Microsoft Teams, and Vim. It doesn't seem to matter if you're a large organisation or an Open Source project. Expired TLS certs keep causing outages. I've even seen automated renewal systems fail from time to time. Failure modes Getting a TLS cert is cheap and easy with LetsEncrypt. Even better, they offer a battle-tested automatic renewal tool, certbot. Unfortuna...| Forkcasting
In the noughties, I found a blog post that showed how to setup vim as a Python IDE. I lost that config and I've been on the look out ever since. I've also been looking for the "components" of it -- what gave the file explorer? How did it split the screen? etc. Today, Ben Eater released a video about writing a BIOS for his homebrew 6502 computer. At about 09:14, he split the vim window, opening a file explorer in the current directory on the left-hand side of the screen, moved to the cursor ov...| Forkcasting
Changes aren't free. They're low cost, but not free. Changes are also risky, any change can cause an outage. Many places require code review for every change, so it's not just your time you're choosing to spend. I apply two rules and a judgement call. I make a change when: It moves us towards a new customer feature. It fixes a customer-relevant bug, including security problems. It will improve our long term delivery rate enough to pay off the investment. These only work if the team has “wor...| Forkcasting
Back in the day, at $Job-N, I was "in charge" of security things. This was after the Heartbleed fiasco, so we were trying to get our ducks in a row. We decided to regularly patch our Debian "fleet." We had 3 or 4 servers at that time, one of which was our test server. Each of the live servers housed 2 to 5 customers, depending on customer size. They also had a database cluster on each server, and each customer had a database in the cluster. This was the days before server-name indication was ...| Forkcasting
I've worked with Terraform for about 1.5 years now and I'm not impressed. I think I was spoiled by Amazon's internal (and later, external) tools. Terraform unfortunately falls short in many (fixable!) ways. Let's get into it. Open-loop control Open-loop and closed-loop control is a concept from control systems. An open-loop control system makes changes. A closed-loop system makes changes and checks the outcome is as intended. Terraform checks the state file, queries the service for it's curre...| Forkcasting
Let's start with a thought experiment. Someone says you can bet $100 on a loaded coin flip. You get $200 if you're right and lose your stake otherwise. You can also decline to bet. Ignoring the the really deep questions like "why is this weirdo carrying around a loaded coin?", "if they're offering me a bet they expect to profit, right?", and "how do I get them to go away?" we continue with the experiment. Noticing your discomfort, they offer you one additional service: you can pay $5 to see a...| Forkcasting
Small businesses have less capital than larger businesses, so they need better judgement to manage that capital. A string of unlucky outcomes can wipe out a small business more easily than a larger business. We can use the Kelly Criterion to see this in action: When you don’t have a lot of capital, each “bet” takes up a larger fraction of your total capital. When you stake more you can withstand fewer misses. The Kelly Criterion formalises this, and we can use it to show the point with ...| Forkcasting
What is noise in software estimates? Noise is the variability in human judgements, either between people or when people disagree with themselves. With software estimates, this is the difference between people's estimates, or unjustified changes to an estimate. For example, I led a small project with 2 other devs to add a feature to a system. At the outset we wrote a short design doc, and I asked the other devs to estimate how long it would take until the customer got the feature. With the sam...| Forkcasting
I recently bought a Retroid Pocket 2 from GoRetroid for USD 132.00 including all shipping and taxes. The Retroid Pocket 2 I've made a few crossings on the ferry since then and it's been really nice. I used to play my GameBoy (Advance) almost every day on the bus to school. I loved it. Getting this back is a huge throwback. It's a lovely little machine. It feels well built, the buttons are nice to use, and the battery lasts more than enough time for me. So far I've played GameBoy, GameBoy Adva...| Forkcasting
We have a beautiful fur baby. Her name is Figueroth Turner-Hallow (Fig for short). She was born on 2022-01-23. Her dad is a border collie and her mum is a border collie-corgi mix. On the ferry ride home Big eyes on the sofa Snoozing on a cushion on the sofa Bean tax We love her with all our heart.| Forkcasting
I spotted two misleading statistics on CBC yesterday. I think that both have a similar cause: there wasn't enough context for the reader to easily see that they were being misled. Vaccine efficacy: just, like, your opinion man On 2021-Dec-03, CBC News posted an opinion piece that argued public health measures are "government overreach." As part of this argument, Richarz tries to cast doubt on the vaccine efficacy: And now, with new case numbers in Ontario essentially split evenly between the ...| Forkcasting
In my previous article on audiobooks I showed a short script that converts *.mp3 audiobook files into much smaller *.ogg files. At the end of that article I mentioned that I have a very ugly process for handling whole zip archives of audiobooks. Today I show another terrible shell script! You guessed it, it fixes some of the problems of my first script. #!/bin/sh # Safer shell scripting. -x also helps debugging set -eufx INPUT_ZIP="${1}" TRACK_LIST=$(mktemp) # Find out what's in the zip file ...| Forkcasting
As far as possible, I track all of my work time. Meetings, projects, tickets, Slack, email, filing expense forms. Even my breaks (lunch, snacks, or otherwise) are timed. What good is time tracking? I have one big reason and one small reason for timing everything. First, I need to be able to look back and answer the question: "did I waste my time?" Second, I want to know how long future work will take. Time wasting I need two bits of information to know if I've wasted my time: How did I spend ...| Forkcasting
We use barcodes to track many physical things. Groceries, over-the-counter medications, computer parts, housewares, books, CDs, DVDs. Barcodes even make their way into weird places. My health card has a barcode on it, as does my library card. Even some medical samples get a barcode. Barcodes are everywhere. An example UPC-A barcodeRecognise me? Of these, UPC-A [1] is probably the most recognisable. This is the "Universal Product Code" and you'll see it on most things you buy day-to-day. You c...| Forkcasting
Finally safe Just like before this was a very simple affair. I went through a fast and efficient two stage queue, got my vaccine, waited to see what happened for 15 mins, and left. I did a sudoku while I waited, it was that uneventful. What this represents to me is more important. I am not at-risk and I am only fully-vaccinated because of where I live -- somewhere rich. On a global scale, these vaccines are incredibly rare. You need to be disproportionately wealthy to get it. We first detecte...| Forkcasting
Let's say that you want to record the day's mean temperature accurately. You hook up a temperature sensor to an analogue-to-digital converter, then record that value with a Raspberry Pi. When building this kit, you measure the output of your temperature sensor with your Fancy oscilloscope, and see a signal: A continuously-varying signal between 100 and 101 mVYour oscilloscope output. A nice smooth line. This has a mean of 101.1 mV. Running your logger and looking at the output, you see someth...| Forkcasting
I recently got my basic amateur radio certificate. It was a lot of fun and I want to share some of what I've learned. I found this information hard to find or scattered, so I'll take a run at it. This blog post explains how CW works conceptually, not how to build a CW transmitter or receiver. What's CW? CW stands for "continuous wave", which is a bit of a misnomer. We use it to send Morse code by interrupting the radio wave. We send Morse by tapping a key. A short press is a 'dit' and a long ...| Forkcasting
The good A lot of good things happened to me this month. Most of them were down to chance, but I trace a few of them to my own decisions and actions. I got vaccinated! This is our first step towards getting back to normal. My partner and I have started planning where we'll go, date nights, and so on for when we've had our second dose. We're both really excited. I passed my basic radio qualification. Studying was really fun, but it was also amazing to get my first QSL card from VE3SCN. I did r...| Forkcasting
I've never been able to build a tone generator or the lines on any platform. I understood that cat /dev/urandom | /dev/dsp made a white noise generator, but that was it. Times have changed, and I want something more sophisticated. Tools We'll use a few tools: Rust -- because I want to learn it better pacat -- To send our sound to the speakers sox and ffmpeg to convert the output to something smaller. Sound format First, we need to know what pacat expects as input. The --format argument has ma...| Forkcasting
I feel like this should be a huge thing, but it was a simple affair. Understated importance I got my dose at the Victoria Conference Centre. There were Canadian Red Cross vounteers helping to check folks in, give sanitiser, etc. There were two queues; both single file, multi-server. The first queue went to the registration desk. From there, you joined the second queue to see your vaccinator. A few questions later and a sharp poke, it was over. I sat in the hall for 15 minutes to check I didn'...| Forkcasting
Montano posted photos from the Tuscaloosa Tornado. Looking over the photos I saw a few had damaged buildings with a weird 'X' marking on them. I didn't understand it, so I looked it up! My search took me to the National Urban Search & Rescue (US&R) Response System Rescue Field Operations Guide from the Federal Emergency Management Agency (FEMA). That had the answers I wanted, and a bunch of other curios. For our purposes, the most important section is Section 5.5, 'FEMA Search Assessment Mark...| Forkcasting
I listened to Chesley B. Sullenberger's memoir "Highest Duty: My Search for What Really Matters". It is a clearly written memoir, with both humour and heartbreak. The good Sullenberger recounts many of his experiences: learning to fly, his military career, significant events in his personal life, and the events of Flight 1549. It felt comprehensive but every detail also felt important. Sullenberger's core principles seem to be preparedness and integrity. I feel strongly about these values too...| Forkcasting
Today, I sat my Canadian Basic Amateur Radio exam and passed! I have chosen the call-sign VE7YRK. VE7 is the "area prefix" for British Columbia. YRK is to link back to my home area, Yorkshire, UK. In this article, I'll explain how I studied. History I built small receivers (and the odd low-power transmitter) when I was a teenager. I also played around a lot with CB radios. I never got my UK Amateur radio license. I took AS Level electronics when I was in school. This gave me a good grounding ...| Forkcasting
The good So far, my self-care has been going well. I generally feel much better. In January I recorded 11 "negative moods", 8 in February, and only 4 so far in March. 3 data-points isn't enough to call a trend, and I'm not yet willing to rule out the improving weather. It's encouraging none-the-less. My partner and I have had some wonderful times together. We've watched anime, listened to podcasts, made great food, and chilled together while playing video games. Overall, I think our relations...| Forkcasting
On 2020-Mar-03, I left work with a headache. I think I'd not slept well the night before or something. I went home and slept on the sofa until my headache went away, then I did some more work. I went into work once more before 2020-Mar-13, then the stay home order came down in BC. A week or so before my headache, I sat on my bed and confessed to my partner that I was scared by the pandemic. I'd been following the news and gradually buying things. A bag of rice here, some tinned beans there, a...| Forkcasting
This was a little bit of trial an error. First, I tried Aurora Net, but I couldn't hear anything. I tried VE6SLP's KiwiSDR, and I still couldn't get it. One day I thought it'd be nice to have some "company" while working, so I loaded up VE6SLP's site around 15:00 Pacific time. I found folks on Aurora Net, including some British Columbia call signs! Next, I tried my SDR again at the time I'd found. No dice. I think either my antenna isn't up to the job, I'm on the wrong side of my building, or...| Forkcasting
I listened to Malcolm Gladwell's "Talking to Strangers" recently. It's made it onto several best seller lists and received good reviews generally. It falls disasterously short. The Good Gladwell says that the audiobook is like a "well polished podcast." He's right, he narrates it well and the music choice is good. Where possible, he includes actual audio from interviewees and other quotes. This does make the audio book more engaging and entertaining. The core of Gladwell's thesis is that stra...| Forkcasting
I am a bit of a digital pack-rat. I buy fairly large disks for my machines, then never upgrade. I hate moving computer almost as much as I hate moving house. I am constantly at or near the limits of my disks. This usually isn't a problem, but it's presented a unique challenge for audiobooks. I found out that I rather enjoy them, but I don't really have the disk space for them. I have, however, found a work around. I convert them to Opus/Ogg at 16 kb/s. My phone speakers render this acceptably...| Forkcasting
I had great fun building simple radios as a kid, I even had a CB radio. I didn't set it up again after we moved house. I didn't use them all throughout my late teens or either of my degrees. Eventually, I left them in the UK when I moved out to Canada. Enter RTL-SDR I bought an RTL-SDR, a cheap Software Defined Radio (SDR) receiver. I also got a set of three cheap antennas (not an affiliate link.) Total cost was 90.05 CDN, including tax and shipping. My RTL-SDR I found that I can use it with ...| Forkcasting
This originally appeared on my Medium on2018-Jun-30. Sometimes the shit hits the fan. You need to stop the HIT going to more workers and you need to stop it now. This is what an Andon is for in manufacturing. Cancel, stop, abort, or otherwise halt immediately. This happened to me tonight. I setup an academic experiment as a HIT, piloted the test with friends and family, trialled it manually in the sandbox, created a CloudWatch dashboard to monitor my experiment, and finally deployed it to one...| Forkcasting
I estimate there is 8% probability of the WHO declaring a new pandemic in any given year. I estimate it's 7% in 2021. Historically, there is an 8% chance of the WHO declaring a new pandemic. An on-going pandemic does not stop a new one starting, but COVID-19 controls may help stop an outbreak, like the it has made this year's flu activity much lower. There are reasons to be pessimistic: more intense farming, anti-vax sentiment, a lot more travel, antibiotic resistance, and climate change. On ...| Forkcasting
This originally appeared on my Medium on2019-Mar-28. This is not my story, but it is one I’ve seen it several times now. It’s a story worth telling because it happens time and time again. It is an excellent example of deeper problems in software and systems engineering. Let’s follow a system’s growth over several years to explore the problem. In the beginning, the system was built. Users were happy, on-call pagers were quiet, and for a time, things were good. Users connecting to a ser...| Forkcasting
When the on-call's pager goes off, they should be able to react quickly. If the system has a lot of false alarms, they may waste time checking if there is a real problem. If there are too many false alarms, the on-call may need prioritize some pages and ignore others. This lowers system availability as the time-to-repair increases. There's also the human side of false alarms. On-calls will make lower-quality decisions when their sleep is distrupted, again, reducing the time-to-repair. If they...| Forkcasting
GJOpen asks: "Before 7 May 2021, will the Bank of England set its Bank Rate to below zero?" I estimate the probability that Bank of England will set its Bank Rate below 0 is 6%. Base rate Since 1900, the Bank of England has released over 400 rates. It has never released a negative bank rate. Naively, the base rate is less than 1%: > options(digits=2) > binom.test(0, 400) Exact binomial test data: 0 and 400 number of successes = 0, number of trials = 400, p-value <2e-16 alternative hypothesis:...| Forkcasting