A little development environment in vim and tmux

I’ve been doing a little project and took a moment to get a bit better at using tmux.

Every time I go into this project I set up some splits. A main window where I’ll edit files using vim, then I split a pane off to run the code or test suite on every save. Another split where I pip install after any changes to my requirements.txt file.

Since I do the same thing repeatedly I was pretty sure tmux has a way to set this up so I don’t need to do it by hand. I tried using tmux session saving plugins, but they are too much for what I need right now.

Turns out tmux is incredibly easy to script. This gist is very long and very informative on how to split windows in tmux and covered everything I needed.

#! /bin/sh

# split -h horizontally to take up 30% of the width to run my __main__.py file on every save of a python file
# this is -d detached so that focus remains on the main window
tmux splitw -d -h -p 30 'ls *.py | entr -c env/bin/python . ./goodreads_library_export.csv data.csv ~/books'
# split my second pane vertically with 20% for rerunning pip installs on save of requirements.txt
tmux splitw -d -t 2 -p 20 'ls requirements.txt | entr -c env/bin/pip install -r requirements.txt'
# create a little detached shell just in case I need to try something
tmux splitw -d -t 3
# open up the python files in tabs in my main pane
vim -p *.py 

entr is a great little tool I like for monitoring for file changes and running a command in response.

a quick development environment for a project

Grepping a process output

I’m just noting this down because I had to do a lot of reading to get this right. Now that I’m actually using log libraries in a good way for my scripts, I want to dial up and down the log level easily – but setting the loglevel on my overall script to debug makes EVERYTHING output, and I don’t really need every library’s output. I’m sure there’s a better way to control the log level of a specific logger for my script from the command line, but this works for me in a quick and dirty way.

env LOGLEVEL=DEBUG ./myscript.py |& grep my_logger_name

I set the log level for just this run, then use the |& to capture both stdout and stderr, then pass that to grep.

Automated export of your goodreads library

Goodreads used to have an API but they stopped giving access and it looks like they are shutting it down. A real garbage move.

I like to be able to use my data that I put in so I wrote a script to automatically download my data regularly. Then I can do stuff like check to see if books I want are in the library or keep my own list or analytics, etc.

Here’s the python script to export your good reads library, hope it helps you. I’ll put it in the public domain.

Young Fathers – Shame

I can’t get enough of Young Fathers – I slowly realized I’m a fan after noticing I’ve listened to tons of their stuff and saved it to listen to again. Look at this beautiful story:

How about this gorgeous track with a gorgeous video that goes meta and comes back to itself? Notice the proportions!

I can’t stop dancing around to Border Girl either:

Oh I grin every time when the beat comes back at 1:58.

Week 2207

Joe Biden is the Democratic nominee vs Donald Trump. No matter who wins, it will not be a progressive 4 years.

Met our neighbors Tim and Nicole – I think we met before, but it’s been a while. Talked about his very cool wakesurfing boat. He is way more conservative than me but very nice.

At work I’ve been working on a side project to improve documentation and it’s starting to really come together. I’m going to pitch it as a thing that should get funded with a team and see what happens. It’s hard to see a fun little project turn into something that is going to be implemented by more folks, but the tradeoffs on my time mean that once I’ve blazed out a rough trail it makes sense for other folks to lay down the rails and ties and get it productionalized. Projects where I’ve done that have had a good life after I’ve created them, so it always pays for me to hand them off and work on other big initiatives.

We’re also re-engineering tons of things. I’ve been looking at how we managed incidents and issues because relationships often get pegged to how a team performs in a crisis. In addition to incorporating some of my work like How to do a crisis call in technology, other people in the team turned me onto Crew Resource Management, which is how the folks in a cockpit handle similar situations.

Max finished his first ever chapter book! 90 pages of reading, a chapter or two at a time. He was really proud of himself. Just today as I’m writing this he’s one chapter away from finishing his next chapter book. His behavior has generally been really good too!

Zee has memorized Mr Nogginbody Gets a Hammer and she now wants to read to us for bedtime! She’s also asked me to teach her to read, so I guess it’s time to get into the ABCs again. We’ve put up letters on the fridge for her and some magnetic poetry for him.

Her counting is getting pretty good and we’ve been doing m&m math every time she goes potty. One worry with Zebus is that she’s started being really bitey – lots of little bites and nibbles and licks to indicate when she’s frustrated. Also, a little bit of hitting. It’s ok now with us, but if she was in a daycare I’m sure we’d be getting a call about it.

Week 2206


I donated money to the Alex Morse campaign, a progressive candidate who’s trying to unseat Richard Neal, a greedhead Democrat. That happened earlier, but recently it appears that there was a sex scandal accusation against Morse. He’s accused of having consensual sex with adult students at the university he teaches at that are not in his class and also messaging people he’s met on Tinder. Sexual harassment and consent are incredibly important, but weaponized accusations are exactly the sort of thing that conservatives have professed concern over. In Alex’s case, the investigation by the Intercept certainly makes it seem like people who want to work for Richard Neal have been manufacturing a scandal instead of uncovering one.

Other campaigns I’m looking closely at:

  • The State Slate – The great slate didn’t do great in 2018, but I still like these ideas and I’m willing to give again. These candidates are all good chances to flip a district and any campaigning they do is good for upballot races.
  • Donna Imam – an engineer who might be able to flip a texas district.
  • Dani Brzozowski


The fam out at the Esopus Creek trail

We’ve been doing more hikes again. I’m trying to make sure the little monsters leave the house every day. We’ve been going out to the village a little bit as well. I haul the kids in our expandable wagon and we can eat at an outside restaurant called The Partition.

We’re getting an eensy bit more social (in safe and measured ways).

ZZ had an extended encounter with a nice lady named Alexa and her dog Chacho. They spent an hour hanging out and I can’t recall having a nicer meal in ages. Here’s pro tip – if you hang out with the children and amuse them while we have drinks and dinner I’m grabbing your bill!

Beer Club had a mini executive retreat when Ray showed up in Rhinebeck! We took the Ho’s to the FallingWater trail where I finally got to meet Finley! He loves Max and Zelda loves him.

The Scott’s dropped by! We took them out to Fallingwater as well, where Max and Ben got along really well and explored up the waterfall all the way to its source. Zelda is in love with Zoe and asks about her.

Max and Ben never usually play together, but for some reason this day was just perfect. Everyone got along famously.


Around the house, we’ve been struggling a little to knock out more projects. It just seemed like we lost steam. So we dug out the back yard next to our house and put in a bunch of marble rock chips over garden cloth. Now things are better looking and won’t require any weeding – instead of a dirt patch next to the house we have clean white stone which doesn’t need maintenance.

We cleaned out the trampoline, which had been under a mulberry tree, trying to become a mulberry jam strainer. Yecchh.

We spent a couple of meeting looking at adding solar panels to our roof – I really like it for a lot of reasons including my predilection for distributed systems over centralized ones. Sadly, the tradeoffs right now don’t seem worth it. Even with incredible financing and all sorts of incentives it would take forever to pay off the panels and require trimming trees.

This helped me feel like we can really start getting going again. I’m gonna finish that Patio!

Code and nerdery

Great news here! I’ve been thinking at work about ways to better handle and test documentation across multiple languages. The key here is to make sure that you can extract code samples from documentation and then push it out to a testable format.

I found mkcodes, an excellent tool for pulling code out of markdown documents. It worked great, but only for Python. I submitted a pull request extending it to work with multiple language code blocks and it was a real treat to work with Ryne Everett on getting this live. Which is to say, now it can handle java, dotnet, any other language you like that’s embedded in your docs. Expect more on this as I make progress building a docsite with eleventy.

I also type this on the linux laptop as I managed to resize partitions without destroying anything. I thought 80 gigs would be enough for my Ubuntu partition, but it seems to be growing and I had to give it a few hundred more gigabytes to grow.