Life Updates
Hey, so, it's been a while since I posted. I guess I just wanted to post and update. Let's see... what has happened since February 2020....
Family

Yeah, so, we're having a baby. If you didn't see that on other social media already. He's1 due at the end of July2.
Lockdown
As you and everyone else knows, the world has been in lockdown since March due to the outbreak of SARS-CoV-2 causing COVID-19. My company sent us all on mandatory work-from-home on March 12th and I haven't been across the bridge into San Francisco since. Working from home is... tough. We have a house (unlike many of my workers who have apartments or even just single bedrooms), but it's still hard to get enough space that you can clearly delineate "work time" from "home time". Some parts are nice; I like being able to eat lunch in my backyard with Eva, and I like the fact that I haven't had a cold in two and a half months due to the lack of BART and the constant hand-washing. It's damned helpful that we bought a car when we did, both because public transit is basically gone now, and it's also really hard to buy a car right now.
The baby stuff is also incredibly stressful -- everything about preparing for a new child is a million times harder when the world is locked down. You can't go to any stores to buy clothing or supplies; it all has to be blind over the Internet. I can't go to my wife's OB appointments due to the strict contact procedures. And, of course, they still have no idea how this disease affects pregnant women or newborn children, so we're trying even harder than normal not to get infected.
I can't really write anything about this disease or lockdown that isn't said better by a million other people online, but my sympathies go out to all of those infected and affected. I wish that we had literally any other political leadership at this time, and I hope that we make it through anyway.
Rabbits
We had some sad news recently; one of our rabbits (Alot) was diagnosed with cancer in February and had her ear removed. Unfortunately, she developed a cough and then ended up going into severe stasis and passing away on May 24th. She was a good, brave rabbit and will be missed; she is survived by her bonded partner rabbit Mirabelle.

Hobbies
In preparation for having a new (and hopefully photogenic) baby and to entertain myself while locked in the house all day, I did buy a new camera recently. I decided that part of the reason I don't use my OM-D E-M5 enough is that it's pretty big and heavy with a lens on3 and I don't have it with me enough. As they say, the best camera is the one you have with you4. Anyhow, I got a Ricoh GR III after reading several hundred reviews of every high-quality pocketable camera, and for the few days I've had it, it's been absolutely fantastic. An APS-C sensors in a 250 gram package is completely insane, and I'd forgotten how much more light you get with that big of a sensor compared to the Micro Four Thirds sensor on my OM-D or the teensy sensor on my iPhone5. The Positive Film setting on the Ricoh in particular produces a delightful æsthetic. It also produces phenomenal RAW images which someone with time and skill could surely extract a ton out of; I have neither the time nor the skill so I mostly shoot JPEGs.
Stay safe out there, gentle readers.
Yes, it's a boy. The sonogram helpfully had arrows to point out where you can tell that it's a boy.
He'll have a good head start on all the lockdown babies getting born in January.
With my smallest non-potato quality lens, a 17mm prime, the OM-D weighs 588 grams and requires a rectangular prism of 8.57 deciliters. The new camera is 257 grams and 2.16 deciliters.
I've heard that maxim for at least 10 years but I cannot find out who said it first. Chase Jarvis wrote a book with that title, but the quote shows up in random places in Google from years before the book was written.
APS-C is 368 mm2; m43 is 225 mm2; the iPhone's 1/2.55" sensor is only 25 mm2.
systemd
I've had this sitting on my desktop for months and figured I'd post it. No idea where it originally came from.

New Car
After more than 10 years of avoiding it, I've finally rejoined the ranks of the private-car-owning bourgeois. $SPOUSE
and I spent the past few weeks doing research and reading reviews, spent Saturday and Sunday test-driving a bunch of
vehicles, and ended up buying a brand new Cosmic Blue 2020 Honda Insight yesterday
afternoon.

Austin, TX
Went to Austin, Texas this weekend for a work event1; it was my first time in Austin so I figured I'd write up some notes:
- Cities are so indistinguishable now. Downtown Austin has the same restaurant and store chains as San Francisco, Boston, Miami, or any other American city.
- Its is weird how much Confederate stuff there still is for the supposedly-liberal Texas city. Until '96, the Capitol Visitors Center was administered by the Daughters of the Confederacy; lots of Confederate flags.
- Live music everywhere, even at the broiest bars near the hotels --- even at the hotel bars! This was great! I wish more Bay Area bars had live jazz or blues or funk just as a regular thing.
- Everything was incredibly cheap compared to the Bay Area. For what I paid for my 1400sqft house in Berkeley I could get a mansion sitting on several acres in Austin. Despite how cheap everything is and how plentiful housing is, homelessness still seems to be a big problem. Tent cities under the overpasses and folks sleeping on all the benches. Kind of a downer for me as a YIMBY; more housing alone won't do it, we also need supportive socialized housing programs!
- Gun culture is insane. There were a number of gun stores near our hotel and businesses apparently have to have a giant sign if they don't want people to open carry into their restaurant or office. I don't care how many feral hogs are coming into your rural backyard; you don't need a gun in a WeWork. I could never be comfortable in a place where so many people live in such fear that they need to carry weapons to breakfast.
- Good barbecue2. Duh.
I'm drinking some coffee at the airport now3. Only another seven or so hours of air travel and I'll be home.
technically, an "engineering leadership retreat"
We got some Franklin Barbecue
AUS is a nice airport. Reminds me a bit of ONT; super fast security process, ample seating, not too many gates. I'm at the one place with pour over coffee --- one is better than none! There's also decent free WiFi which doesn't block WireGuard traffic... always nice to have...
Surprising Change in Python 3.7.6
Here's a surprising change for you: Python 3.7.6 (ostensibly, a patch bugfix release) totally changed how URLs are parsed by Python programs.
As of Python 3.7.5, a URL like foo:8888
would be parsed into the following:
>>> urllib.parse.urlparse('foo:8888')
ParseResult(scheme='', netloc='', path='foo:8888', params='', query='', fragment='')
As of Python 3.7.6, foo
is now detected as the scheme:
>>> urllib.parse.urlparse('foo:8888')
ParseResult(scheme='foo', netloc='', path='8888', params='', query='', fragment='')
This will cause massive chaos if you are ever parsing URLs with ports in them but without schemes. The relevant Python bug is bpo27657. I consider this to be a major regression, especially since it was introduced in a patch release.
Good luck out there...
Twenty-Teens in Review
Well, here it is, the end of 2019, the end of the decade1. 🎉 The end of the decade of my twenties, so probably the most eventful decade I'll experience2. Ten years ago, I was at my parents' house in Fall River, a senior in college on my last Christmas break of all time. I'd just accepted an offer from Yelp to start as a Software Engineer in June, 2010, reporting to Neil Kumar3. The world was uncertain before me. Today, I am sitting in my own house4, married, working for my third employer, sitting pretty in a very different world. What would 2010 me, using his dual-core ~3GHz computer and his iPhone think of 2019 me, using a quad-core ~3GHz computer and his iPhone5? Oh, indeed how times have changed.
Let's go through the highlights of the decade, shall we?
2010
- Graduated from HMC (with honors)
- Moved to San Francisco
- Started working for Yelp with a bunch of Mudders
2011
2012
- Started dating Eva
- Yelp IPOs people start leaving
- Paid off my college debts
- Obama gets re-elected to a second term. The dream of comfortable technocratic center-left governance seems to still be alive and kicking.
2013
- Left Yelp, started working for Uber with my former Yelp coworker Oliver Nicholas
2014
- Got non-trivially sick for pretty much the first time
- Got engaged
- Adopted our first pet rabbits
2015
- Got married, went on a fun honeymoon.
- Left Uber, started working at EasyPost for my former-Yelp-coworker Andy Bakun
2016
- The world collectively loses its mind. The United Kingdom decides to turn Britain into a global pariah. The United States decides that what everyone really needs is an excuse to fondly remember the greatness of John Tyler's presidency.
2017
- Lost one of our rabbits; gained a new rabbit
2018
- Bought a house; moved to Berkeley
2019
- Uber somehow managed to make it through its IPO
- Lost any remaining faith in the tech industry
- Wrote this blog post
Overall, I think I'd give this decade a solid B. Lots of character development and personal growth, but the work storyline was repetitive and the background political plot was unrealistic.
I think along the way I learned a lot about computers, a lot about American tech startups, and a bit about being a human being. But the big lesson I learned this decade was been the same lesson learned by young adults through the entire history of the world — there are no adults in the room, nobody coming to fix our mistakes and save us from our problems. There are no authority figures except us, ourselves. There are no elders whose experience we can lean on; the rich and powerful, the charismatic, the experienced — they're all just folks muddling through. I've seen a CEO worth six billion dollars have a temper tantrum, and I've seen our friend's two-year-old have a temper tantrum, and let me tell you: they're pretty much the same experience. Our entire planet is currently suffering through a protracted temper tantrum by a seventy-three-year-old millionaire politician and there are no adults in the room. People deserve your respect and trust because they earn it, not because they have a title or age or wealth or power.
What will the next decade bring? Will I keep making the same mistakes in my career? Will my family grow? Will the world continue its inexorable slide into totalitarian dystopia? Goodness knows that I have no idea. I guess we won't know until I write another post on January 31, 2029. See you then.
Currently listening to: Rogue Wave - Christians in Black
Note to the Powers that Be: that's not an invitation to start the robot uprising on January 1, 2020.
By the time I started, the CTO (Russ Simmons6) would've quit and Neil would be the VP of Engineering. I did not, in fact, report to Neil. Imagine how different my life would be if I'd worked as some generic "backend engineer"!
BART is all messed up for the holiday, so I'm nominally Working from Home today.
Yes, I know, the iPhone 11 in my pocket is 48x faster than the iPhone 3G I had in 2010 (at least at Sunspider, which is the only benchmark that runs reliably on both)
DMV
I went to the DMV today to get a REAL ID upgrade for my license, and to get it reprinted with my correct address so I don't need to carry the paper change-of-address confirmation any more. The DMV is always a fascinating microcosm of human behavior, and a unique experience to simultaneously see the best and worst in people.
For those of you who haven't been in a California DMV, the process follows several stages:
- (optional) Make an appointment. The North Oakland DMV doesn't have any appointments available in the next six months, and then next DMV available anywhere in the Bay Area is late March at Oakland-Colliseum, so I did not get an appointment.
- Get a number. This involves a long line. At bigger DMVs (e.g., San Francisco), there are separate lines for getting a number if you have an appointment and if you don't; at smaller DMVs (e.g., North Oakland), there's just one line. I got there a few minutes after the DMV opened today, so I only waited in line outdoors (in the delightful, 40°F weather) for about 45 minutes to get a number. Your "number" has two parts — a letter and a number. Appointments get letter G and an auto-incrementing number (e.g., G-002); non-appointments get letter H and an auto-incrementing number (e.g., H-003).
- Wait for your number to be called. Every minute or so the PA will call out something like
Now serving G-002 at Counter 12
. Today, they called approximately eight G's for every H, so I waited for about 90 minutes inside. - Actually do your business at the DMV. For me, this involved three different counters and took another half an hour.
These wait times are pretty great for a Bay Area DMV1, but still spending three or more hours doing paperwork isn't anyone's idea of a good time. This was extra fun for me, because I (foolishly in retrospect) decided to renew my license at the same time as I upgraded it to a REAL-ID, and apparently in California if you renew a license more than six months before it expires, you have to re-take the written Driver's Test2; it's not at all a difficult test, but it took an extra 20 minutes.
Anyhow, the whole process really magnifies the impersonality of bureaucracy — at one point, a woman and her disabled
daughter walked past the line to the number-issuing desk to ask if there was a way her daughter could sit down instead
of standing in line outside for hours. The answer, of course, was a resounding No, there is no way, you need to go to
the end of the line.
Eventually, someone volunteered to hold their place in line while she sat down. The best of
people, the worst of people.
Anyhow, I guess now I have five more years before I have to do this again. Yay.
I've heard horror stories of people showing up to the San Francisco DMV exactly at opening time and waiting five or six hours before they even got assigned their number.
Incidentally, I cannot find out where this rule is written down. The woman behind the counter told me that this was the rule; the Internet just says that you "may be required to take a knowledge test".
Unicode via Alfred
Something I miss a lot on macOS is a fast way to enter Unicode characters. macOS does a pretty good job of handling combining keys so that you can type é and ö, and it's got a fancy emoji picker, but if you want to enter ∫ or ⚠, you're stuck using the terrible character picker window1:

Well, no longer. If you, like me, use Alfred 4 on your Mac, you can download the following
Alfred Workflow to get a new "unicode
" Alfred command. This uses a fast index2 to look up unicode characters by name.
The first time you run it, it builds the index on your system (which might take 10 or 20 seconds; be patient); every
subsequent run will be super-fast. Just hit Return on your desired entry to copy the character to the clipboard; hold ⌘
while pressing Return to copy the metadata3 instead.

Note that this requires an up-to-date Python3 to be somewhere in your $PATH
.
download fast-unicode.alfredworkflow
Enjoy!
You can bring this up by enabling "Show keyboard and emoji viewers in menu bar" and then clicking "Show Emoji & Symbols" in the new menu item that appears. This window is strange; it floats on top of most other windows, but not all. I usually end up getting it stuck on another virtual desktop and spending 30 seconds searching for it when I need it.
Technically, it uses a sqlite database where I store tokenized emoji names, as well as bigrams and trigrams. sqlite is great.
For example, for ⌘, you get U+2318 PLACE OF INTEREST SIGN
On the Decline of Zipcar

I haven't owned a car in twelve years. Since I moved to San Francisco, I've exclusively relied on public transit, taxis/Uber, and the occasional rental car to get me where I'm going when I need to go somewhere. In general, this has worked well for me — I can get where I need to go, and most of the time I'm not emitting 300g of CO2 per person-mile the way an individual car does. On the rare occasions that I need to drive somewhere by myself (often to the vet, since rabbits really aren't good at public transit), my go-to choice has been Zipcar, an hourly car-rental startup1. This post is a rant about how terrible Zipcar has gotten over the last 9 years, backed up by the raw data of my actual 141 Zipcar trips2.

Price
Over the last year or so, Zipcar has been aggressively increasing prices. Individual vehicles that were once $8/hour are now $14/hour, and new cars being added are almost exclusively larger, more expensive cars (for example, the location near me now exclusively has a Honda HR-V). The overall data is noisy, but I never took a trip above $15/hour before 2013 (when the Budget acquisition of Zipcar was completed), and I have barely taken any trips under $15/hour in 2019.
Quality
As far as I can tell, Zipcar no longer maintains their cars with nearly the frequency or attention to detail that they used to. The Honda HR-V ("Hobart") that I've taken a few times from the location near me has the Check Engine light on, and has had it on for more than 500 odometer miles. I report this to Zipcar every time I drive, to no avail. The car that was there previously (a Subaru Crosstrek named "Liberty") had a malfunction in the cruise control that made it blare an annoying noise and pop up a big red modal dialog saying "adaptive cruise control unavailable" every time you powered on the car for the entire months of June and July.
Every time I get into a Zipcar, the gas tank is nearly empty. This despite the fact that the nearby Zipcars live at a gas station.
Even the paint jobs suffer — once upon a time, if I saw any scuff or scratch on a Zipcar, I would report it at pick-up time and it would be fixed by the next time I took a ride. Now, I find it hard to get motivated to report anything because the cars constantly look beat-up.
Convenience
Living in San Francisco, every year was an exercise in guessing which location Zipcar would stop providing cars at. I lived in "lower Nob Hill" (the Tendernob), which is the densest part of San Francisco (the six block census tract containing our apartment building has 2,839 residents3), and frequently there were zero Zipcars available in a one-mile radius. Sutter-Stockton garage went from six cars, to four, to two.
Now that I live in Berkeley, the situation is much the same. There's one Zipcar location within a mile (at a nearby Chevron), and it's dropped from three cars to one. I anticipate that the location will close soon and then my closest option will be to hike to the other side of Ashby BART, to an absolutely charming location in the middle of a homeless encampment.
Alternatives?
Getaround is the biggest alternative to Zipcar. It's a sketchy "disruptive" startup where individuals rent out their private cars (and are responsible for all the maintenance themselves). It's much less convenient (since the cars are in peoples' driveways in residential neighborhoods, usually in poor repair), and the insurance coverage is... questionable. CityCarShare is gone, absorbed by Getaround. Traditional rental companies (Budget/Avis, Hertz/Dollar/Thrifty, etc) don't offer hourly rentals around here and nobody wants to kill that many trees every time they drive somewhere.
Maybe we'll have to buy a car.
Well, it was a startup. Now it's owned by Budget.
Zipcar has an API, but it's behind an annoying signup process, so I just scraped the website. Aside from the 6 (six!) different kinds of authentication cookies you need to provide, it's not too hard, although it's kind of janky; for example, it returns no trips for 2011, despite the fact that I have email receipts for such trips.