Debugging Mysteries

This article is a repost promoting content originally published elsewhere. See more things Dan's reposted.

Just wanted to share with you something I found ages ago but only just got around to mentioning – Julia Evans‘ (of Wizard Zines fame) Debugging Mysteries:

There are five mysteries here right now:

The Case of the Slow Websites
The Case of the Connection Timeout
The Case of the DNS Update that Didn’t Work
The Case of the 50ms Request
The Case of the Failed Docker Connection

Go back to wizardzines.com

GitHub repository: jvns/twine-stories
Blog post about this project: Notes on building debugging puzzles

Each mystery is a Twine-powered “choose your own adventure” game in which you must diagnose the kind of issue that a software developer might, for real. I think these are potentially excellent tools for beginner programmers, not just because they provide some information about the topic of each, but because they encourage cultivating a mindset of the kind of thinking that’s required to get to the bottom of gnarly problems.

Better yet, she’s open-sourced the entire thing (and I was excited to see she wrote in Twee, which is very dear to my heart).

Note #20645

Unable to sleep, I found myself wondering whether anybody with a retro-hipster vibe had built a smart pocketwatch. All your smartwatch features, but in pocketwatch format.

Then I realised I was describing a mobile phone on a keychain.

How to date a recording using background electrical noise

This article is a repost promoting content originally published elsewhere. See more things Dan's reposted.

Matching a target ENF series with a section of a reference series

We’re going to use ENF matching to answer the question “here’s a recording, when was it was (probably) taken?” I say “probably” because all that ENF matching can give us is a statistical best guess, not a guarantee. Mains hum isn’t always present on recordings, and even when it is, our target recording’s ENF can still match with the wrong section of the reference database by statistical misfortune.

Still, even though all ENF matching gives us is a guess, it’s usually a good one. The longer the recording, the more reliable the estimate; in the academic papers that I’ve read 10 minutes is typically given as a lower bound for getting a decent match.

To make our guess, we’ll need to:

  1. Extract the target recording’s ENF values over time
  2. Find a database of reference ENF values, taken directly from the electrical grid serving the area where the recording was made
  3. Find the section of the reference ENF series that best matches the target. This section is our best guess for when the target recording was taken

We’ll start at the top.

About a year after Tom Scott did a video summarising how deviation over time (and location!) of the background electrical “hum” produced by AC power can act as a forensic marker on audio recordings, Robert Heaton’s produced an excellent deep-dive into how you can play with it for yourself, including some pretty neat code.

I remember first learning about this technique a few years ago during my masters in digital forensics, and my first thought was about how it might be effectively faked. Faking the time of recording of some audio after the fact (as well as removing the markers) is challenging, mostly because you’ve got to ensure you pick up on the harmonics of the frequencies, but it seems to me that faking it at time-of-recording ought to be reasonably easy: at least, so long as you’re already equipped with a mechanism to protect against recording legitimate electrical hum (isolated quiet-room, etc.):

Taking a known historical hum-pattern, it ought to be reasonably easy to produce a DC-to-AC converter (obviously you want to be running off a DC circuit to begin with, e.g. from batteries, so you don’t pick up legitimate hum) that regulates the hum frequency in a way that matches the historical pattern. Sure, you could simply produce the correct “noise”, but doing it this way helps ensure that the noise behaves appropriately under the widest range of conditions. I almost want to build such a device, perhaps out of an existing portable transformer (they come in big battery packs nowadays, providing a two-for-one!) but of course: who has the time? Plus, if you’d ever seen my soldering skills you’d know why I shouldn’t be allowed to work on anything like this.

×

Reply to OpenID for WP

This weekend I was experimentally reimplenting how my blog displays comments. For testing I needed to find an old post with both trackbacks and pingbacks on it. I found my post that you linked, here, and was delighted to be reminded that despite both of our blogs changing domain name (from photomatt.net to ma.tt and from blog.scatmania.org to danq.me, respectively), all the links back and forth still work perfectly because clearly we share an apporopriate dedication to the principle that Cool URIs Don’t Change, and set up our redirects accordingly. 🙌

Incidentally, this was about the point in time at which I first thought to myself “hey, I like what Matt’s doing with this Automattic thing; I should work there someday”. It took me like a decade to a decade-and-a-half to get around to applying, though… 😅

Anyway: thanks for keeping your URIs cool so I could enjoy this trip down memory lane (and debug an experimental wp_list_comments callback!).

Geohashing expedition 2022-10-24 51 -1

This checkin to geohash 2022-10-24 51 -1 reflects a geohashing expedition. See more of Dan's hash logs.

Location

Wharf Stream Way, Eynsham. I’ve visited this circular footpath many times to walk the dog or to take the children to swim in the river.

Participants

Plans

I hope to cycle/walk to the GZ about lunchtime? I’ve an opportunity to pass nearby the GZ between other errands this morning!

Expedition

I was excited to see this spot pop up on my radar, because it’s a lovely meadow that I’ve ocassionally walked my dog in, within comfortable cycling distance of my house. As it happened, I had an even easier route here because a drive this morning to drop the kids off at a half-term activity took me “close enough” to be worth stopping and walking from there.

I parked at The Talbot Inn, just West of the Swinford Toll Bridge (a bizzare old bridge that, for weird historical reasons, continues to use human operators to charge 5 pence per car to cross, which surely cannot be cost-effective!). From here, there’s a footpath along the back of the Seimens buildings in the nearby light industrial estate which eventually comes out into the Wharf Stream Way circular walk. It was pretty damp out here today and I quickly regretted my choice of light trousers which would have been fine to drive the kids to their camp and back but wasn’t really a good choice for stomping across the long grass of a damp meadow. Some way across I disturbed some grazing deer, but ultimatey it was following a deer-trodden trail that eventually provided the best route to the GZ.

I reached the GZ at 09:19, took a selfie, and then turned around to go and get to work. I also shot a video covering the whole expedition which is presented, unedited, below.

Tracklog

My GPSr kept a tracklog; note that this was an “on the way” stopoff so the start and end point isn’t the same!

Map showing a journey from Witney to Stanton Harcourt via Wharf Stream Way meadow, East of Eynsham.

Photos

Dan makes a silly grin while holding a GPS receiver in a damp grassy autumn meadow, on a grey and drizzly day.

Video

× ×

Dan Q found GC88Z3D SANT PAU DEL CAMP

This checkin to GC88Z3D SANT PAU DEL CAMP reflects a geocaching.com log entry. See more of Dan's cache logs.

Found with fleeblewidget during a meander around the city. She saw it ahead and remarked on the beautiful building before I’d even told her that was where we were heading. Greetings from Oxford, UK. Gracias por el caché.

Dan and Ruth in front of a monastary gates, smiling and waving.

×

How Chinese citizens use puns to get past internet censors

This article is a repost promoting content originally published elsewhere. See more things Dan's reposted.

A few months ago, people were posting a lot about the Netherlands on Chinese social media platform Weibo. “Wake up, sleeping people of the Netherlands!” said one post. Others lamented that the people of Amsterdam wanted their tulips back.

These Chinese social media users aren’t expressing a nascent interest in all things Dutch. They’re talking about recent protests over frozen bank deposits in the province of Henan. Ordinarily, discussions about a controversial topic like this would be censored on Chinese social media, and posts containing the word “Henan” could be blocked or deleted. But “Henan” (河南) sounds a lot like “Helan” (荷兰), the Mandarin word for the Netherlands. By swapping the names around, people were able to get past the censors and keep the conversation going.

I love this article. The use of homonyms and puns to work around online censorship by Chinese citizens is as innovative and heartwarming as its necessity is horrifying and tragic. If you’re wondering exactly how similar 河南 (“Henan”, the name of the Chinese province in which authorities abused social distancing laws and used violence to prevent rural bank customers from withdrawing their own money) and 荷兰 (“Helan”, The Netherlands) sound, have a listen for yourself:

Unless you speak Mandarin already, you’ll might struggle to even pinpoint which is which in that recording.

This clever and imaginative use of language to try to sidestep surviellance feels like a modern adaptation of cryptolects like Polari or rhyming slang as used in the UK for the same purpose. But writing in Han characters online seems to provide an amazingly diverse way to encode meaning that an in-the-know human can parse, but an automated machine or an uninformed human censor can not. The story about the use of the word for “paratrooper” on Chinese social media, touched upon in the article linked above and expanded elsewhere, is particularly enjoyable.

Anyway, after you’ve read the article and you’re ready for a whole new rabbit whole to explore, I’d like to kickstart you by introducing you to Totoiana, a Pig Latin-like (second-syllable onwards, then first syllable) dialect spoken with fluency exclusively in a single Romanian village, and nobody knows why.

Bisect your Priority of Constituencies

Your product, service, or organisation almost certainly has a priority of constituencies, even if it’s not written down or otherwise formally-encoded. A famous example would be that expressed in the Web Platform Design Principles. It dictates how you decide between two competing needs, all other things being equal.

At Three Rings, for example, our priority of constituencies might1 look like this:

  1. The needs of volunteers are more important than
  2. The needs of voluntary organisations, which are more important than
  3. Continuation of the Three Rings service, which is more important than
  4. Adherance to technical standards and best practice, which is more important than
  5. Development of new features

These are all things we care about, but we’re talking about where we might choose to rank them, relative to one another.

Semicircular illustration showing five facets of growing relative importance. From least to most, they are: new features, standards-compliance, service continuity, organisation needs, volunteer needs.
The priorities and constituencies portrayed in this illustration are ficticious. Any resemblence to real priorities and constituencies, whether living or dead, is entirely coincidental.

The priorities of an organisation you’re involved with won’t be the same: perhaps it includes shareholders, regulatory compliance, different kinds of end-users, employees, profits, different measures of social good, or various measurable outputs. That’s fine: every system is different.

But what I’d challenge you to do is find ways to bisect your priorities. Invent scenarios that pit each constituency against itself another and discuss how they should be prioritised, all other things being equal.

Using the example above, I might ask “which is more important?” in each category:

  1. The needs of the volunteers developing Three Rings, or the needs of the volunteers who use it?
  2. The needs of organisations that currently use the system, or the needs of organisations that are considering using it?
  3. Achieving a high level of uptime, or promptly installing system updates?
  4. Compliance with standards as-written, or maximum compatibility with devices as-used?
  5. Implementation of new features that are the most popular user requests, or those which provide the biggest impact-to-effort payoff?
Illustrated priority list from above, which each item split into two and re-named such that they are, from least to most important: popular features, impact features, compliance, usability, uptime, updates, future clients, current clients, other volunteers, our volunteers.
These might not be your answers to the same questions. They’re not even necessarily mine, and they’re even less-likely to be representative of Three Rings CIC. It’s just illustrative.

The aim of the exercise isn’t to come up with a set of commandments for your company. If you come up with something you can codify, that’s great, but if you and your stakeholders just use it as an exercise in understanding the relative importance of different goals, that’s great too. Finding where people disagree is more-important than having a unifying creed2.

And of course this exercise applicable to more than just organisational priorities. Use it for projects or standards. Use it for systems where you’re the only participant, as a thought exercise. A priority of constituencies can be a beautiful thing, but you can understand it better if you’re willing to take it apart once in a while. Bisect your priorities, and see what you find.

Footnotes

1 Three Rings doesn’t have an explicit priority of constituencies: the example I give is based on my own interpretation, but I’m only a small part of the organisation.

2 Having a creed is awesome too, though, as I’ve said before.

× ×

Note #20582

The output of this data anonymisation/scrambling script makes me feel seen. 🏳️‍🌈

Screenshot of log output, reading: finding 'sexuality', shuffling 'value'.

×

Dan Q performed maintenance for GC88ZY9 The Devil’s Quoits

This checkin to GC88ZY9 The Devil's Quoits reflects a geocaching.com log entry. See more of Dan's cache logs.

A fringe benefit to being CO to a virtual is that it doesn’t require much maintenance, save for ensuring that all logs are accompanied by a valid solution message and no spoilers are posted. But it’s still worth visiting them from time to time to ensure they’re still accessible and solvable! These stones have been here for thousands of years – minus a relatively short period from around the 15th to the 20th centuries! – so I couldn’t imagine they’d gone anywhere, and indeed they haven’t. Counted them to make sure, and the geopup checked that the outlier stone was in its proper place. Maintenance performed!

A French Bulldog runs towards the camera, her tongue hanging out, in a grassy field. Standing stones can be seen in the background, under a blue sky.

×

Note #20578

Kids: We want porridge for breakfast.
Me: How do you want it?
Kids: Surprise us.

Presenting… oatmeal, honey and sultanas with a toasted marshmallow.

Two bowls of porridge with sultanas, each topped with a jumbo marshmallow (one pink, one white) being toasted by a blowtorch (mostly off-camera).

×