Monthly Archives: August 2018

Week 3004

Z-Ray is walking like crazy now. Her tiny feet are hilarious and she now just toddles everywhere. This morning she just ran into a room and hugged me.  She brought me my shoes!  She definitely understands when I ask her to put her shoes into the shoe bench.

I love her so much I want to squeeze her for hours.

Max Lazer is going to kindergarten next week! He’s not excited yet, but I think he’ll love it. Just got a call that his ear is large and swollen, but hopefully he’s ok. We’ve been reading a lot of choose your own adventure – I like that he’s seeing how different choices control consequences. When Z cries, he’s very loving and helpful and is doing his best to comfort her or distract her.


I’m thinking about how we will enhance our python support at work. As part of that I’m researching better ways to standardize configuration of objects.  You want to be able to initialize an object foo from a class Foo.

class Foo(object):
    def __init__(bar='baz') = bar
foo = Foo()

print(f"bar = {}")
# "bar = baz"

Swell!  But some people may think that bar should be set to “bazzz”.

foo2 = Foo(bar='bazzz')
print(f"bar = {}")
# "bar = bazzz"

Easy enough. But what if I work in a place where we need to change hundreds of uses of bar among tons of different scripts and applications and whatnot?

I may want to get it from an environment variable automatically on startup. Or maybe I work in a place where we like configuring things with a .env file. Or a settings.toml.

Or maybe we want to just this once pass it in as a commandline parameter. Flexibility is really good to have.

Ideally, we can say there’s a hierarchy.

  1. A parameter passed into the constructor is the highest priority.
  2. An environment variable is the next.
  3. A config file is the next most concrete. (I could be convinced to switch these, but as long as there’s a consistent pattern, it’s good enough)
  4. The default value of the parameter in a constructor if there’s not other choice.

There are lots of good libraries out there for achieving this, at least partially. Ideally, I think I’d want to have either something we can apply as a class decorator or as through multiple inheritance.

Some good python configuration libraries I came across that I really like:

For my problem with dreamhost, I’m making progress and have been able to get a set of forward rules pretty much ready. I’m hoping to publish it pretty soon.

I don’t think I’ll get around to auto fixing the mailbox filter rules though.


I got my Kobo back after it fizzled. I’ve missed having an e-reader so much! I did get to read “The Moon is Down” by Steinbeck because we had a paperback on our shelves, but it’s so nice to be able to read a book in bed or in the bath or in the dark while a kid settles down. It’s also nice to be able to just squeeze in A Road to Common Lisp in between things because of the integration with Pocket.


Only 50 miles this week. I skipped a day because there were some team drinks on Tuesday.

I also was gently hit by a car. An Uber driver pulled into the bike lane while I was riding to drop off his passenger. As it was happening I was pounding on his window and yelling stop. I was powerless, a thing I’ve known intellectually but I never really believe. He didn’t stop, he knocked me over. I ran up to his window and explained that I am a person, that people die this way and that my children want to see me. I’m fine. Scrapes and bruises and a tendency to replay it in my head.

It spurred me to donate to Transportation Alternatives. They advocate for better laws, for protected bike lanes that don’t get used as parking spaces. For bike lanes that aren’t truck unloading zones. Things that can really save my life and help me get home.

I also finally replaced my speaker.  It’s louder, but I’m not sure how awesome.  It’s designed with push buttons instead of a volume dial, it fucking talks to you instead of doing things and it isn’t clear what it’s doing. Physical interfaces are SO MUCH BETTER than this. On the other hand, it is louder and my old one was broken.


A good thing you can do about weeknotes is talk about what is going on in the world so you can notice slow changes and not think things were always the way they are.

The government has started confiscating passports from US Citizens who are Latino. There are a very small number of cases where some midwives fraudulently filled out birth certificates. This is the pretext that a racist administration is using to attack Hispanics. Midwife births are more common for those who cannot afford hospitals or who live in areas that are too poor to support a hospital. This is not a thing that started under the current administration – but the character of what is happening has changed.

I am renewed in my determination to work continuously to replace these terrible people with less terrible people. I would love to do that with you! If you wonder what you would do in a time of crisis, the answer is that it is what you are doing right now.

Boob sweat

My buddy Dawn Hunter is smart and charming as hell. She is working on a startup that helps with sweaty ta-tas. I’m no expert, but for people that have boobs and want more comfort with them, she’s writing tips on managing boob sweat and gathering interest from people who might want a product. Get in touch with her!

Week 3003

Things are a bit calmer this week.


Got through delivering a few projects and now I’m talking with my folks about getting a team into the annual Hackathon – maybe doing a chatbot.

Also talking about ways we can get better and faster at responding when things go wrong and how we can not fail at support. Pushing our goals a bit there.

Also in talks about visiting our remote teams, working from India with them for a bit.

Nerd stuff

As part of getting things working in tmux, I thought it would be nice to not only have test scripts running using entr, but to also see what’s going on with the machine I’m running, maybe in a corner pane. I installed python glances and I realllllly like it! It adapts really well to different resolutions.

a gif of python glances on ubuntu


Another full 5 days of bike commuting! Another 60 miles!

I had to get my brakes fixed – and City Bicycles was super nice. Charlie works the front desk looking like a super nice tiny Slash and we lost track of time talking about riding and music and New York.

Slash from gnr
This guy fixed my bike but smaller and skinnier and nicer.


A photo from Mark Rippetoe's Starting Strength showing bad squat form captioned "Don't do this, you fool."
My brain, right before I do this.

I’ve been working on a dragon flag. Negative isn’t looking too shabby! Christina took a video:


Max Lazer is being super creative. He’s been designing little video game maps on paper full of traps and zombies and bombs and portals. We get pens and work out how to get to our destination and win. It’s tiring and awesome and I love him.

Zelda is all kinds of tempermental! She’s gotta be teething. It’s lots of crying and cuddling and wah wah. On the other hand, she’s really playful and mischievous and working hard on her walking. She just gets up and stomps around a bit – but she really wants you to hold her hand.

Also, the biggest joy is seeing them play with each other.

On the web

I’m constantly thinking about quitting twitter. I quit facebook and have felt great about it. I hate that twitter is so welcoming to racists and awful people. I really like the non-awful people on it. If @jack is so welcoming to white supremacists I don’t want to be part of his business.

On the other hand, I like finding gems from Robin Sloan:

And I discovered Naomi Wu who made me think in much broader ways about western takes on feminism and maker culture biases and @xlnbwho got me thinking even more about my unconscious biases and on and on and all the smart good folks are so good.

As Carly Leinheiser put it, these places are hard to shift from. It’s that shitty bar you go to because your friends are there. And now that my friends aren’t at Floyd, I don’t go there.  I’m probably going to give Mastadon a go for a bit, but maybe I’ll just go back to emailing and blogging here and sign up for NewsBlur which looks like the greatest thing since google reader.



Week 3002

Vacation thinking

I’m almost into my first 90 days at the new job. I want to think about vacation. Sam and I have discovered the miracle of separate vacations. We like traveling together, but going with little kids is super hard. You don’t really recharge and a 1 year old doesn’t get much out of it either.

So in between jobs, I went on a “Broatia” trip of 3 dads together romping through Croatia. It was amazing. I was so relaxed to just not be responsible for 3 people. We could drink and carouse and hike and we all had so much energy because we just didn’t have the weight of our (loved) children.  I came back super refreshed from mountain biking, kayaking to islands, swimming in sub tunnels, hiking, jumping off cliffs, etc.

And when I was back I watched the kids for a week while Sam went off to Barcelona with friends from London. Sometimes it’s even easier to be a single parent – you just know it’s all on you and you get it all done without having to consult anyone!

So we are going to do that again. She’s figuring out what she’s going to do and I need to think about where I’ll go and what adventure to go on.


Friends! This is a good thing to reach out to me on. Let’s buddy up and do a thing! I miss you – let’s have an adventure. Snowboarding? Exploring a country? Volunteering somewhere? What would you do with up to a week of Matt?

Nerd Stuff


After my beloved Terminator died in my linux environment at work, I finally gave in and started using tmux. And of course, it’s better. All the old stuff that has survived is really good. Sure, I lost an hour mucking around with configuration and learning how to make it do the basics – but no more than that.

As an elderly nerd, I no longer spend days tweaking my environment and giving myself more cruft to maintain. I look for stuff made by other nerds and adapt it so I’m using their energy. In this case I just cloned a configuration called “Oh My Tmux!” and voila. Things are sweet and well configured now.

In tmux, I now use ctrl-shift-c and ctrl-shift-v to copy and paste.

Jumpstart a linux box

I have a little intel nuc at home that I’ve been trying to use as a mini server to convert video and do little tasks at home, but I rarely log in. For some reason, Sunday night I logged in to see if I could make a restore point and I ended up unable to log into the box, and applying updates to my router and damn near unable to do anything with that. So now I want to make sure I can flash the damn thing back to a usable state easier.

The box is dead! So if I bring it back I’m tired of going through and re-installing things on a linux box. I made a little script to jumpstart getting a linux environment working since I’m working in linux at home and at work.

Monetizing Machine Learning

While I was on a break from work, I spent some time helping Manuel Amunategui by doing a technical review for his book Monetizing Machine Learning.

Book should be out next month, I really enjoyed helping on it and I learned alot about actually using Machine Learning models. I feel like I started to actually get a handle on Bayesian predictions that I never understood before. I’ll put up a link when it goes on sale. I’ve already been paid for my technical review, I don’t get a commission.

Bike Stuff

Biked in the rain on Monday/Tuesday and used lunch time to install some silly wheel lights! If I had a car I’d be so atrocious and tacky.

This was a big week! I rode to work every day this week, even when I had things to do or it was rainy, etc. I just made it happen. Clocked up 60 miles this week! That brings me up to 237 miles so far this year.  My legs are feeling stronger and it is easier to go faster longer. The Manhattan Bridge is still a sonuvabitch, but I have started doing the downhill with my legs crossed or just standing on 1 pedal and a hand on the seat and the handlebars. Stuntin!

Z-Ray walks!

Week 3001


I managed to bring down a server at work while trying to do some experiments with multiprocessing. I also found that chunking out the data, starting a process and getting the data back all seemed to add up to a bigger time cost per chunk than the multiprocessing saved. This is using multiple workers to handle tax lot processing. When I can find time I’ll see if I can whittle it down more, but that was a very surprising note – if you don’t have a big chunk to process for each worker the coordination can be a bigger transaction cost. Just more times I see applications of the Ronald Coase’s work.

Caught up with some folks from  old workplaces and got lots of juicy gossip. What do you do when your workplace is being chaotic? Keeping your head down and getting things done always gets better results than conniving and rumor mongering. Still – chaos at work is distracting. Everyone wants to meet up at the coffee machine to talk about the latest development.

One thing that I’ve never really seen work well is Power Moves. Supposedly some people can do them, but I usually see them backfire. People don’t like being pushed, and they push back. Generally, people do like being led – it’s nice to know what direction we are moving in and to move together.

In general, I find that you can push and fight, but if you find yourself fighting, you have to question if you need to be in the fight. I do the best when I look at my employers as equals – I try to be a good bang for the buck they pay me. If I generally agree with the direction we are going I play my position, help out where I can and move us forward. If they don’t want what I’m selling or want me to do something I find repugnant – I go work with someone else. It isn’t worth it to fight when there’s such a big market out there. My job isn’t to make massive efforts to change the minds of the folks making decisions. They need to earn me as much as I need to earn them. Anything else and you aren’t in a good relationship.

I was also reminded of a good pattern for announcing changes at work. When you make any change, don’t send an email telling a group of people about the change. Instead, make it your practice to update the internal wiki docs and then send a link to the doc with the updates and maybe a summary. That way you don’t let the internal docs get out of date! People will rarely read your release email, but they’ll go to the docs when they are trying to get something done. Keep the docs up to date so they don’t give up and go to your support folks first. It’s a savings for everyone!

I’m also trying to get more of a culture around code review on my team. We’re all advanced tech folks and very good at what we do. But I think it’s always important to review together as a team. “Code should be written by a team and look like it was written by a single individual.” Code reviews are a tiny transaction cost (COASE AGAIN!) but they are a big review. I fully endorse my friend Nina’s talk on How to grow a Code Review culture and their benefits.


I find I am missing the people I care about that live far away a lot this week. I think my zillionaire dream would be to put all my favorite people as close together as possible. I’d live with them and play with them. But I also know they need their people. So my dream ends up a dense metropolis of cool folks – an NYC of my tribe. But many people in my tribe don’t want to live in a metropolis. Portals would be helpful.

Took Max Lazer into the Take Your Kids to Work day this week and it was great. He didn’t always participate, but I think I coulda told them more about helping him with transitions. Otherwise he was really interested in building robots and playing at work with Dad.


All of my work on performance improvements reminds me that we are just trying to get computing to resemble what we see in real life: instant feedback.

We do that naturally with physical things, and I like to see examples of physical computing. Why isn’t everything like this?

Physical computing is Super Different. Immediate feedback matters.

I guess this is one of the reasons I really like Jupyter Lab, and I’m writing a solution to my problems with DreamHost in a Jupyter Lab notebook. More details as soon as I have something. Which better be before October!

I installed the latest ubunto on a Lenovo Yoga 920 and it’s friggin awesome. Highly recommend, very easy. I can segregate work stuff fully from home stuff.

Also, on my reading list: A whole magazine issue dedicated to documentation in tech world.

I managed 49 miles this week on the bike! Commuted every day but Take Your Kid to Work day. I’m proud of it. Definitely more proud than I am of bringing down a server.

Week 3000

Still adjusting to working with offshore developers. There definitely is a pattern of setting up a request, expecting it to be all done in the morning, and having to answer a few questions or concerns the next morning. If you don’t get to those questions immediately, you miss another day cycle.

Speaking of cycling – I took a day off of biking to work on Monday. Tuesday I went again and hit tons of personal bests! I’ve given in and started using Strava and it’s interesting to see how there is a an actual trend of improvement. For example, here’s my times on the Manhattan Bridge.

It is cheesy, but all these personal records and gold medals against myself are very rewarding.

Another takeaway: maybe rested legs are stronger!  Due to rain and hangovers, I’ve only done 24 miles this week . Hope for more next week!

Also at work, we’ve whipped up some backpacks for kids that can’t afford school supplies.

I did some virtual phone banking at lunch on Thursday and Friday for Danny O’Connor. Mostly leaving messages, but every bit helps. There’s a special election on Tuesday in Ohio and I want to make sure I do what I can for it. I invite you to join me – these things are easy, they don’t take time and they make a  difference.

On twitter, I really like the #InvisibleNetworks tag. @ctrlcreep is running 30 days of story prompts and people are replying with weird imaginative little stories.

Max is writing a book. He’s done 2 chapters about a bunch of robots in space. Cute Bun, AVX and their pals are all fighting and using lasers and it’s awesome.

Zelda is still working on her walking. 3 or 4 steps at a time now.

This week I got to dig in a bit on some performance profiling.

While doing some performance testing I found I needed to put in a bunch of temp log statements, but ugh… So I just created a decorator that will log the docstring of any python function and voila!

It’s hard to know exactly where your performance hits happen – so Robert Kern’s line_profiler is a great help.

I set up a terminator session with a few open terminals (different terminals allow you to take advantage of multiple processes and cpus). Then I used entr in each one to run profilers and timers and linters on the scripts.

ls *.py | entr -cs 'kernprof -l ; python -m line_profiler

This tells entr that whenever any python file changes

  1. clear the screen “-c”
  2. profile the code: “kernprof -l;”
  3. then display the saved profile of the code: “python -m line_profiler’

In other terminals I put in

ls *.py | entr -cs 'flake8 *.py'
ls *.py | entr -cs 'pylint *.py'

This way I keep my code clean – with a dash of autopep8 -a -a -i  to solve the easiest pep8 errors automatically. It’s also really something how much easier it is to reason about the code as I break it down into smaller chunks.

I’ve installed PyCharm in the linux workspace, and it is definitely a step up. Comes with vim emulation built in and it’s got some nice refactoring tools.