This is what a snow day looks like if you’re a developer.

GitHub Status page saying "We are currently experiencing an outage of GitHub products and are investigating."

This is a cool dotfiles repo for Mac. I keep dotfiles for unix-y stuff, but hadn’t considered it for macOS settings and even a homebrew install list. Via Syntax.fm

github.com/DSchau/do…

My new Mac Studio arrived! This is my first desktop computer since the 2008-era Mac Pro I had in grad school. It’ll also be my second M-series device, alongside my beloved iPad.

Now, what to name it?

A messy desktop with a brand new Mac Studio box beside a 2009 Mac Book Pro and a 32 inch display showing code in the background.

Hacking push notifications for deliveries on the iPhone

My Mac Studio is arriving soon 🎉 and I need to sign for it. The problem is I’m usually working in the basement with headphones. My house didn’t have a door bell either. The result is I never hear when a delivery person knocks. So I solved it:

  1. I got a cheap (CA$25) bluetooth doorbell chime and plugged the receiver in at my office.
  2. Turned on Settings → Accessibility → Sound Recognition → Sounds → Doorbell on my iPhone.

Now when the door bell rings I get a time-sensitive push notification on my phone.

As the saying goes, accessibility technology is for everyone.

tree.nathanfriend.io is a little website/app that generates an ASCII file tree from indented text (like a mock of the tree CLI). I make these diagrams all the time for docs, and this tool will speed that up a bunch. Via Chris Coyier.

I ordered a shed today from a website. It’ll be built to my specifications and installed by skilled humans in a few weeks. We truly live in an age of wonder!

The rainbow pride waffles from Planted in Hamilton Ontario are pretty awesome 🌈

Two big waffles in take our containers that are coloured in a rainbow of red, yellow, green, and purple like a pride flag. Drizzled with delicious maple syrup.

A consistent problem I have with my development workflow is knowing that I did something before, but not exactly where. What repo did I do that in? What GitHub org even? Perhaps the answer is “Zettelkasten” but where do I find the time for that?

Here’s what I’m going with: Mac Studio M2 Max (12 core, 38 core GPU) with 2TB storage and 96GB RAM. I hate closing windows and quitting apps for anything remotely in-flight, so 96GB it is. Overkill? Maybe? Will it last four more years? Hopefully. 🤞

Between going 100% indie with my software company, my MacBook Pro 2019’s fan’s screaming incessantly, and Apple dropping the M2 Mac Studio, it looks like I’m in the computer market again. Oh, and Chris Lawley says they fixed the fan noise. The question is, what spec?

I have visions of coding and taking Zoom calls from the lakeside. Sign me up!

Did anyone else get the Ulysses app newsletter on May 31st? I hope it’s a prank because yuck! gross! In the meantime, I’ve pulled my App Store renewal for it. If you care, maybe let your friends know about this too. [Update: apparently it was a “joke,” but I’m still moving away from Ulysses]

<img src=“https://cdn.uploads.micro.blog/907/2023/dd75de23d5.png" width=“600” height=“467” alt=“Email screenshot from Marcus, Ulysses app co-founder saying “I love Elon Musk. [..] He’s a great innovator, probably a fantastic lover and an overall nice guy.”">

I’m writing a technical note with GitHub Copilot enabled for the first time and it’ll suggest a fact about something and I’m like “wait, is that true?” It’s a fascinating interaction. Like pair coding with a teammate that seems confident but you don’t 100% trust yet.

Thank goodness for Fernando Alonso who might just distract the Formula 1 2023 season from the monotony of another Verstappen / Red Bull sweep.

GitHub is killing it with the new new code view and search. The confluence of GitHub and VS Code is amazing. Colour me surprised, but Microsoft buying GitHub was such a good thing.

https://docs.github.com/en/repositories/working-with-files/managing-files/navigating-files-with-the-new-code-view

I finally used Python’s Walrus := operator to clean up a hacky situation. Maybe I could be more proactively finding uses, but it was fun to have an obvious one appear finally!

Last eggnog of the season 😢

Finished reading: Crucible of Gold by Naomi Novik 📚It’s kind of an old-school adventure novel. But with dragons that have the temperament of cats.

We finished watching Orphan Black 📺 last week and I just gotta proclaim: wow. Tatiana Maslany played 14 different characters, sometimes in the same scene (!), and I never felt out of it. Even the way she acted as one character acting as an another character — chef’s kiss.

Apparently storm chips are a Newfie thing but they work great for Ontario snow storms too.

Here’s a maple plywood feature wall I made for my workshop. 🪚 This will be the future home of my tool chest, some shelves for things like saws and (on the nerdier side) a network cabinet. I shiplapped the panels together by cutting rabbets with my router. As a fun highlight, I painted the rabbets green. To get the reveal between the panels just right, I used 5 mm plastic shims. This was also an opportunity to update the plugs and switches from the grimy ’70s hardware we had before.

I created a widget with Up Ahead for the latest Rubin Observatory milestones. It’s happening folks!

I just got into the beta for Reader by the Readwise folks and just a few minutes in I’m already astounded. It’s your read-later, but also your web research notebook, and your RSS feed and newsletter inbox. I also hear they’re thinking about a YouTube “highlighting” feature. 😍

The timeline isn’t settled. The @-mention isn’t settled. Nothing is settled. It’s 2003 again!

Robin Sloan’s A Year of New Avenues speaks to the renewed excitement I have about the web, and working on the web.

Inspired by @rosemaryorchard and @heyscottyj on Unnested Folders #90, I figured out how to create a “Personal Automation” in the Shortcuts app that starts playing Apple’s Indie Christmas playlist once I tap my alarm off. Delightful for the winter blahs!

Screenshot of the shortcuts app showing an automation triggered by waking up that starts a music action.screenshot of the details of the music action: play infie christmas playlist on shuffle.

I’m kind of surprised about Amazon Prime’s redesign with black on blue. I’m sure they ran a contrast checker but I feel a white on blue is the friendlier and clearer choice. Even iOS’s notifications automatically choose white text for the brand of blue!

Finished reading: The Golden Enclaves: A Novel (The Scholomance Book 3) by Naomi Novik 📚 We really enjoyed the series, and I loved how the third book veered into an allegory for human suffering inflicted by the greed and environmental destruction of an elite class.

Via Mac Power Users #668 I found out you can follow YouTube channels in most RSS services. I’ve always wanted a distraction-free way to follow channels and sort them into categories and I think this is it.

November 2022 in review

I missed the review for October, but I’m getting back on track. I’m finding these reviews, even if I’m the only person who interacts with them, are a useful for gauging progress. You can find my past monthly reviews here on the micro blog.

Doing the work

Documentation engineering for Phalanx

My highlight for October at Rubin Observatory was overhauling the documentation for Phalanx. Phalanx is how we deploy the Rubin Science Platform across different environments, whether it’s in Google Cloud or at institutional data facilities. The first phase of that work was to re-organize (and in many cases, edit and augment) the content into core categories (Overview, Application Developers, and Environment Administrators). I think the new theme is really working well for this purpose, with the top-level sections clearly defining different domains in the documentation.

On top of that narrative documentation, I built out two reference categories for applications and environments. These pages are intended to provide quick access to information about apps and environments. You can get a link to an application in an environment’s Argo CD, or see what environments an application runs in, or see what groups are configured with different authorization scopes, and so on. All of this information is already embedded within the Phalanx repository (an Argo CD GitOps repo, lsst-sqre/phalanx), so I engineered the Sphinx documentation build to pull the necessary information automatically. Essentially, in the Sphinx conf.py file I fire off a Python service that crawls the Phalanx repository’s Helm charts to collect datasets for each app and service. These get loaded in Jinja templating environments for sphinx-jinja, which I use to render out templated reStructuredText content, such as tables, just in time for the Sphinx documentation build. These are the things I really love about docs-like-code and a system like Sphinx — there are lots of entry points for creating very custom documentation tooling that enable us to document things accurately and efficiently.

Technote

In November, I started working on a brand-new project called Technote. It’s on GitHub at lsst-sqre/technote. At Rubin, we’ve been using technical notes or “technotes” since 2015 when we introduced them. You can read in SQR-000 why we created the technote format, and how we use it. The gist is that technotes are a lightweight documentation format for communicating within and across teams that is built on GitHub as the core platform for collaboration, and static web servers as the presentation platform (in our case, LSST the Docs, but you could use GitHub Pages or Read the Docs effectively too).

Initially, we created technotes just for ourselves in SQuaRE, but over time the format was organically adopted by more and more teams throughout the observatory. There are several hundred technotes already at Rubin (you can find them at www.lsst.io). Although the format took off, the Rubin technote platform stayed on the original Sphinx prototype theme I created in 2015 — a hacked version of the Read the Docs theme. And yes, you can now write technotes in LaTeX, but HTML-native technotes are still at the heart of the platform.

This month, at last, I carved out work time to start properly engineering the technote document format. At its core, the Technote package provides a Sphinx theme that’s geared towards single page articles (i.e., technotes) that have a title, document identifier, abstract, and other metadata like author lists and versioning information. Technote is a base layer, so organizations like Rubin and others can customize the branding and design of their documents. The long-term goal is to enable team members to write technotes in reStructuredText, Markdown, or Jupyter Notebooks, and render technotes in HTML, EPUB, and PDF (for archives). It’s early days, but I think there’s considerable potential in enabling teams to write documents on GitHub that are shared on the web.

Pursuits

It doesn’t feel like I’ve been making a lot of progress down in the woodshop, but my current goal is to organize the shop space into something that’s functional for both woodworking / making and also home storage.

Currently, I’m panelling a small section of wall under the stairs in maple plywood. I’ve ship lapped the panels and painted the rabbets with a splash of mint green. That wall will become the future home for my tool chest and a network cabinet.

Reading

Amanda and I have been reading The Golden Enclaves, the third book in Naomi Novak’s Scholomance series. They’ve made it out of the Scholomance — now they’re facing the “real” world of wizards.

I’ve also been on a personal knowledge management kick, trying to figure out how to build a system for gathering information and making it accessible to me. I read Tiago Forte’s Building a Second Brain, which I think is a system that has a lot of good ideas. I’ve also been re-reading How to take smart notes by Sonke Ahrens, who teaches the Zettlekasten system of literature notes and atomic permanent notes — and leaves project management aside. In some ways Ahrens’ approach is more appealing because I can see it scaling more easily than Forte’s approach of literally moving notes from one bucket to another. I’m working out how all of these ideas can become a personal knowledge management system for myself, centred around DEVONthink.

Heavy rotation

Carly Rae Jepson and Taylor Swift both released albums on the same day, so apologies to other artists but these are all I’ve been listening to lately.

I’m in love with CRJ’s The Loneliest Time, and the title track with Rufus Wainright is my personal hit for the year. I also especially love Surrender My Heart, So Nice, and Shooting Star. Actually, every song is a banger. Full stop.

On screen

Season 6 of the Great Canadian Baking Show was a fantastic display of diversity. Don’t pay any attention to the dribble that the Walrus publishes about it.

Sort of season 2 on CBC Gem started and it’s a brilliant masterpiece.

We’ve also started watching Orphan Black, which I missed out on when it originally aired. Tatiana Maslany’s acting is astonishing.

So why do my colleagues often pray whenever I answer their question on Slack? 🙏

People who write extensively about note-writing rarely have a serious context of use

Andy Matuschak via Maggie Appleton. 💬

i.e. what works for productivity writers probably needs to be re-engineered for a software developer or woodworker.

On the PKM beat, it seems like Apple Books in iOS 16 doesn’t permit exporting a book’s notes and highlights anymore (you can only share one highlight/note at a time). And on top of that, the delightful page turn effect is gone. Time to go to Kindle? 🤷‍♂️

This new Interactive guide to flexbox by Josh Comeau is so good. Hopefully it’ll click in my head now… I’ve been using flexbox for years and I still look up CSS Tricks’ guide every time.

Currently reading: Building a Second Brain by Tiago Forte 📚 I’ve slowly been adopting DEVONthink for project notes and reference material for work, home, and even woodworking. I’m hoping to refine my system with Tiago’s book.

It’s really cool to see how GitHub Codespaces and science platforms like Rubin’s are all working towards the same goals of reducing set up time and eliminating computing resource bottlenecks by providing cloud-based containerized environments.

One of the surprising things I’ve learned after moving back to Canada is brokerage fees when buying things online from the US. The brokerage fees that UPS changes are about 220% of the taxes.

Another new-ish gem in the Sphinx ecosystem, sphinxcontrib-mermaid makes it easy to drop Mermaid diagrams-as-code into docs, even Python docstrings.

The Sphinx documentation ecosystem is getting better and better. Latest example: autodoc_pydantic drops in for documenting Pydantic schemas. 🥳

Can I admit something? I haven’t yet given Taylor Swift Midnights a proper spin yet. The whole week has been Carly Rae Jepsen The Loneliest Time on repeat. What a gem.

September 2022 in review

Doing the work

September was all about shipping the new system for Rubin Observatory user guides in Documenteer. When I first started working on documentation for Rubin back in 2015, I always struggled with getting Sphinx documentation themes to do exactly what we wanted. For years I told my colleagues we’d fix all the issues — from typography to navigation to branding and more… eventually. Now I think we’ve finally got to a point where we are shipping polished documentation sites we can really be proud of. And the best part is I didn’t have to do the ground-up production of a custom Sphinx theme. Instead, we used the new and awesome PyData Sphinx Theme as an open source foundation. I really appreciate how the PyData folks have thought through the customization and branding use cases. For example, CSS custom properties make it a snap to apply Rubin’s brand colours in both light and dark themes. In the past this would have been a fraught task that yielded rather fragile CSS overrides.

What I spend most of the month though was productizing the user guide theme and configuration for the Rubin organization. Sphinx documentation projects use a Python module, called conf.py for configuration. To help Rubin projects use the same core configuration (and therefore benefit from consistent features and branding), we provide a configuration module in Documenteer that each project can import into its conf.py file:

from documenteer.conf.guide import *

Each project still needs to customize its Sphinx configuration in many ways. The technically simple way to do this is to have each project extend the core configuration in its conf.py file. But in some cases this is tricky because you need to customize existing lists and dictionary provided by the core configuration. It’s just awkward and error prone.

What we’ve done instead is introduced a file, called documenteer.toml, where a user can configure their project. The documenteer.conf.guide configuration merges this information with the Sphinx conf.py file for you. This lets us also do smart and semi-automated configuration. For instance, if a project is a Python package, the configuration can automatically pull out the project’s name, version, and repository URL.

[project]
title = "Documenteer"
copyright = "2015-2022 Association of Universities for Research in Astronomy, Inc. (AURA)"

[project.python]
package = "documenteer"

Overall, the documenteer.toml file means we can document and support a well defined set of configuration that each Rubin documentation project can manipulate.

Within Rubin Observatory, this is the sort or work that I find both satisfying and also really powerful from an organizational perspective. We’re able to take together elements of the open source ecosystem, edit and mix them together, and then provide and document a simple interface that other members and teams in the observatory can use in their own work. Rather than personally running all the documentation sites for the entire observatory, I can help the entire observatory create their own documentation. That’s how a small team like ours can have an outsized influence on an organization.

Pursuits

Amanda and I joined our friend couple on a hike to McCrae Lake Conservation Reserve, a popular site just north of us that’s the beginning of the Canadian shield country. The purpose of the trip was to take some wedding anniversary shots for our friends, and they turned out adorably cute. I also flew the drone and managed to capture a glimpse of a beaver near it’s lodge. I put the video up on YouTube.

I’m getting the hang of Lumafusion and even had some fun mixing some nature sounds and atmospheric sound tracks from the Audiio library. Video editing gets easier the more you do it, and I could see this being something I want to keep doing more.

Down in the workshop I’ve been slowly getting the sliding trays for the tool chest project. I got the tray slides in (made from white oak) and milled the pine stock for the trays themselves.

Reading

Finished reading The Thursday Murder Club by Richard Osman, After Dark by Haruki Murakami, and Make Time by Jake Knapp and John Zeratsky. Make Time is a quick book with loads of strategies to experiment with for getting better at focusing. Amanda and I started reading Husband Material by Alexis Hall together, which is the sequel to Boyfriend Material.

Heavy rotation

Amanda and I went to see Carly Rae Jepson play in Ontario Park in Toronto for her So Good tour. And it was so good. Every song of hers is a hit and she sounded amazing with her band. Bleachers opened for her and it was really cool to see Jack Antonoff for the first time.

On screen

We’ve been watching Only Murders in the Building, a hilarious take on the true crime podcast phenomenon with Steve Martin, Martin Short, and Selena Gomez. Enough said!