I recently started using tmux. It’s been a long time coming. I first became aware of GNU screen back in the early oughts, but only recently became enough of a terminal jockey to justify investing the day of work to improve my workflow. Despite it being really awesome, there are some minor issues that remain, such as decent mouse support. But more importantly, it’s reminded me that unless you always push yourself and provide yourself with real challenges, you never really grow, not as a programmer, and not as a person.
Since I started working with tmux, I’ve dedicated a few hours every week to improving my tooling. This can be cleaning up my bash scripts, or speeding up something I do on a daily basis (or automating it altogether). One of the things I’ve noticed is that while I’m able to optimize away big delays, sometimes it’s really common small delays that annoy you far more. Good example is that we used to use DisplayLink hubs to connect 2 external screens to our laptops. It sucked. Their kernel module would start chewing 100% CPU when an animation was playing, which meant slow loading pages in Firefox would make the laptop slow to a crawl. The refresh rate for the screens was also crappy, and they would randomly decide to crap out and change their configuration. Replaced it with a DisplayPort multiplexer, which is smooth as butter, and I can finally put Firefox on one of the screens without it being unbearably slow.
All this makes me ponder how I can identify the smallest things that take a long time, and make them just a tiny bit faster. Maybe if I had a shell that stored how long it took each command to finish (as well as how it finished, so I can slice by commands I interrupted). At least I know what I’m going to build next week: A script for extracting rows/columns from stdin (think head/tail, and cut on steroids).