Week 2201

I zoomed with a crew of mostly ex PWP folks to catch up and drink a beer and remember our sweet trip to Stowe this winter, my last snow trip of the season. Also got lunch with Ian Sudderth, always a pleasure.

Fixed this website!

Back when letsencrypt was launching I was trying to get it to work here and broke my .well-known directory, which is also where you prove you own your website to keybase.io. Keybase told me it didn’t think I owned my website anymore. Trying to fix that ended up making the front page of this work, but no hyperlinks anywhere worked, because I suck at .htaccess, the magic format for manipulating apache webserver redirection rules. Eventually I just removed many “fixes” and hey it works and I won’t touch it again for a few years.

Released Pingplotter

I published it here, made a screencast, and posted it on reddit. I also wrote down my recipe for making the screencast in case I ever need to do that again or it could help some other nerd. (That will publish next week).

Got on Mastodon

I had a mastodon account back when it bloomed, but I lost it. I’m trying to get back into putting my energy into things I own or where I’m not the product and the Fediverse is the party to be at. It’s decentralized, hard to shut down and open source. I’m trying to blog more (maybe you noticed), toot more, tweet less. I’m randomly chose a mastodon server to join and now you can connect with me at https://hostux.social/@mattk

Come Join Mastodon! Right now I think the biggest problem is that I don’t know who I want to hear from or talk to, but I’m gonna take it easy and spend more time just getting to know people. This guy Jonathon posts really interesting stuff about Africa all the time!

Started selling our apartment

We probably need more room now. So we’re looking to sell our place in Brooklyn. I love that place but it’s hard to imagine moving back with 4 people to that two bedroom. I wanted to stay there a bit longer, but you gotta roll with the punches.

Sweaty stuff

I entered into the hyrox virtual championship and I am super outclassed there! Also got some wooden gymnast rings for pullups and put them up on the big tree out back.

No zombie runs in a while, want to get one of those tomorrow in the rain.

Buying a car

Sam is doing most of the work on this, but we’ve been renting a car for months now and there’s no clear end in sight. Our goal is to own a car of some sort before the next time we’d renew the rental car. If we move somewhere we don’t need a car, we can sell it. But it’s time to stop renting – this is gonna last a while.


I need to see if my remote connection to work is healthy and if my remote connection to video conferencing is suffering.

I wrote a little utility to handle that in the commandline. It’s dumb but it works. Let’s call it pingplotter. It’s in the public domain, go nuts.

It’s fine to just pop in a terminal you have open, but it plays really nice with tmux and glances (I use both).

I think I spent nearly as much time making these screencasts as I did writing the shell script. I should blog that too, if only so I don’t have to research that again.

Max silhouetted against glorious fireworks

Plague update 2

I didn’t think America was ever going to take black lives seriously in my lifetime. I’m close to thinking we might. There was finally a murder so slow and egregiously awful by police that it seemed fewer people came out to defend it than normal. People protested – which has happened before, but this time the police responded swiftly and brutally all over the nation, which helped more people realize the urgent need to demilitarize and defund or abolish police departments all over the nation.

More people have been murdered by police and by right wing activists. More people are seeing that there is significant infiltration of right wing racist groups into military and civilian armed forces like the police and the national guard. Significant effort seems to be put into either pretending the grievances we list are fake or that protesters are the same as rioters or into sparking riots to give a chance for crackdowns or to trigger broader societal conflict and breakdown.

The plague of systemic racism is getting acknowledged and the movement is being recognized enough to be co-opted. Many states have decided to paint a road with “Black Lives Matter” which is nice. None have revoked qualified immunity. Still, this co-option is a good sign – people are uncomfortable enough to start making the most basic gestures. DeBlasio still sucks. He can’t get the road painted in front of Trump Tower because he sucks. He and the City Council failed to defund the NYPD, instead shuffling money and police officers around.

Still the streets fill with people angry that they have to fight for simple recognition that black lives matter and the police are not here to protect or serve them. Even in the tiny village of Saugerties, people are showing up every day to stand vigil with their plague masks on.

I hope that we can skip reforms and channel some of our vast wealth into things that benefit people instead of control them.

In our home, we are much more settled into a routine. I’ve got a space to work. Max has rules around how he can earn precious screentime by doing workbooks or reading a new book. Zelda has similar… She’s learning to count and does M&M math with me because she’s insatiably into chocolate. Sam’s growing an impressive number of things outside, where the filthy dirt is. I’m no farmer, but it’s really nice to eat a sandwich with your own lettuce in it! Today she showed me where beans are coming up near some corn.

It’s been a ton of activity around here for home improvement. I’ve built a pretty large stone patio by leveling one stone at a time. Sam came up with the idea of putting an outdoor rug over it and it looks great – gotta finish the edges somehow though.

Sam’s gardening has been huge – we’ve got plants everywhere and it looks amazing. Together, we built some raised planters and they are full of the three sisters: corn, beans and squash. She tore out our old sink since there was a leak that screwed up the cabinet and we put in the replacement. We also tore out the old vent exhaust light and put in a new one – plus a better light for the entranceway. Sam bought a tiny washer and got it installed near the kitchen so we can continuously wash clothes. Speaking of continuously washing, we have to continuously wash dishes since we don’t have a dishwasher and don’t want to be set upon by insects.

We celebrated July 4th in style with a TON of fireworks. The neighbors applauded.

I’m working too many hours because work bleeds into everything when it is so close. I also think we are all sick of sitting around the house – the newness has worn off and we crave change. I started running with Zombies, Run to explore the neighborhood. I registered for a virtual fitness championship, and tomorrow afternoon I’m going to try to submit my first workout.

We’re still getting out and exploring.

That picture is from earlier on the 4th. To get here you park your car by the side of a road on the path through the Catskills on the way to hunter mountain. You hop a guardrail and navigate the rock fill to get down to this paradise of mountain streams and waterfalls everywhere.

Hike down a bit and we came to little pools dug into the bedrock, natural water slides and everywhere it was gorgeous.

It was amazing. The mostly black and brown families around us had managed to bring music, barbecues, hookahs, kids – it was amazing. We left as it got packed. When I got to the road, of course the police were ticketing and towing cars. We got a $75 ticket.

Worth it.

The federal government is paralyzed from the top down, offering no solutions, only misinformation and confusion. As NY is beginning to be less wildly dangerous, other states are beginning to see their lax policies have the same payoff as Cuomo and DeBlasio’s initial bungling. Here in Saugerties I see some restaurants reopening with “social distancing” but it’s very poorly observed. Here’s an idea: people can’t be trusted to make smart decisions when they are drinking. So no wonder I’m seeing even in big open spaces people hopping from group to group, saying hello and hugging with masks around their necks. Places that haven’t seen ice trucks holding bodies are probably going to have to experience it for themselves.

I told Max we might not be back in Brooklyn for a long time or that we might sell our place so he could have a place with a backyard and more room. He seemed heartbroken by the idea – I think I really messed up. He could articulate that he missed it and it was special to him. But given that we think there’s very little chance the schools can safely reopen by September, what can we do? I think about how I never felt attached to the second place we moved to in Colatown.

As always, our problems pale in comparison to what’s happening around us.

Since my internet connection is crucial to my work these days, I wrote a little utility to graph ping time so I can see if things are going wrong early. I’ll neaten it’s up and share it.

Just looked up and realized it’s tomorrow so I’m gonna schedule this to publish in a few hours and get some sleep. Let this be a reminder to me to never mess with .htaccess rules again.

Plague update

A drawing by Max of him and Dad hiking and doing a “skramble”

We’ve been weathering the Coronacrisis upstate in Saugerties. It was immediately clear that trying to work full time remotely while educating a 2E kid and a toddler in a small apartment was going to end up in an Overlook Hotel situation.

Up here we have a backyard with a a swing and some room to run. Put in a trampoline. On the weekends we can go for hikes.

Max in a sweet pose with Sam and Z in the background at the Esopus creek nature preserve

Max says he’s forgetting his home because he’s been up here so long. On the bright side he’s also much more interested in hikes and walking outside. He’s noticing that and thinks it might be because there’s less noise outside up here.

Queen Z with a stick she was twirling

Zezus has been having a grand time. Hikes wear her completely out. She’s been doing walks around the block and stomping in puddles with me. Bath times are capped by putting on pajamas in front of the fire.

We’re still trying to find a balance so that Sam isn’t overwhelmed and I can get some work done. Trying a new schedule with some explicit breaks for each of us. Trying to just be more chill with each other and be ok that the kids are gonna get more screen time.

Sam being abused by a pile of tiny monster children

One more thing to do after upgrading python

This is mainly a note-to-self to remind me for my next upgrade – but hope it helps you too. TL;DR – install python-dev tools, export old installs into a requirements file, import into new python site-packages.

I upgraded the python on my laptop from 3.6 to 3.7 so I could use dataclasses for a little project. Then I got on a plane to Zurich and planned to get some work done on the 9 hour flight. Unfortunately I spent most of that time wrangling my python install – little cli tools I like to use like black, glances, sphinx, cookiecutter, etc – none of them worked!

When you do a python pip install of a library, it puts the library in a directory called site-packages under lib/python3.<your-version>/site-packages/<your-package-name>. If the library has defined command line entry-points, you will find it has also installed a file under bin/<your-package-name>. If bin is in your PATH, it means you can just type something like cookiecutter and it will call a function in the library to do stuff for you! Here’s what one of those files looks like:

➜  ~ bat ~/.local/bin/cookiecutter
       │ File: /home/matt/.local/bin/cookiecutter
   1   │ #!/usr/bin/python3
   2   │
   3   │ # -*- coding: utf-8 -*-
   4   │ import re
   5   │ import sys
   6   │
   7   │ from cookiecutter.__main__ import main
   8   │
   9   │ if __name__ == "__main__":
  10   │     sys.argv[0] = re.sub(r"(-script\.pyw?|\.exe)?$", "", sys.argv[0])
  11   │     sys.exit(main())
➜  ~

It tells the shell to execute it using /usr/bin/python3 – that’s a link to the latest version of python3 – in this case it’s now python3.7, while the library was installed under python3.6. So the command line now fails! Python3.7 doesn’t know about libs installed for 3.6 at all.

On the flight I realized I could either copy from the python3.6 site-lib to the python3.7 one or just switch python3 to point back to python3.6 to make things work. But once you have internet access, here’s the magic to get it all working.

First, install the python3.7 dev stuff so you can compile anything that needs compilation.

➜  ~ sudo apt-get install python3.7-dev

Then let’s export everything we used to use under 3.6 and then reinstall it under 3.7.

➜  ~ python3.6 -m pip freeze > old_requirements.txt
➜  ~ python3.7 -m pip install --user -r old_requirements.txt