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.

1

technically, an "engineering leadership retreat"

2

We got some Franklin Barbecue

3

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

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

2

Note to the Powers that Be: that's not an invitation to start the robot uprising on January 1, 2020.

3

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"!

4

BART is all messed up for the holiday, so I'm nominally Working from Home today.

5

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:

  1. (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.
  2. 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).
  3. 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.
  4. 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.

1

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.

2

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:

screenshot of the character picker

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.

screenshot of fast-unicode

Note that this requires an up-to-date Python3 to be somewhere in your $PATH.

download fast-unicode.alfredworkflow

Enjoy!

1

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.

2

Technically, it uses a sqlite database where I store tokenized emoji names, as well as bigrams and trigrams. sqlite is great.

3

For example, for ⌘, you get U+2318 PLACE OF INTEREST SIGN

On the Decline of Zipcar

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.

trips per year

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.

1

Well, it was a startup. Now it's owned by Budget.

2

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.

Crime Happened

Today we got a nasty surprise in the form of an email from my next-door neighbor informing me that somebody had attempted to break into our home1! An hour later (while I was on my way home from work), we got another email indicating that the suspect had been arrested.

Apparently, someone was messing around with the lock on the gate to our backyard and my next-door neighbor yelled at them. They hopped the fence, so he called the police and yelled at them some more. They fled. The police came2 , patrolled the neighborhood, and caught the guy breaking into a house a couple of blocks away.

Nothing was stolen or damaged (except some flowers the police stepped on while poking around the backyard to look for clues), but an unsettling event for sure!

1

for more details about said home, see this article

2

about five minutes later β€” super-quick response for a prowler who ran away when yelled at

Fall; or, Dodge in Hell

Over my recent vacation, I read Neal Stephenson's latest book Fall; or, Dodge in Hell, which is a rough sequel to 2011's REAMDE. I thought I'd write up some brief thoughts I had on it and maybe some questions for a hypothetical future reader. Like all of Stephenson's work from the last couple of decades, this book is a meandering combination of science fiction, philosophy, political commentary, and mythical fantasy. The Kindle edition I read is 880 pages long, and went pretty quickly over four three-hour flights.

In general, I'd give it β˜…β˜…β˜…β˜†β˜†. It's got lots of interesting ideas, but it's shot through with too much ridiculous libertarian ideology, and it tries to tell too way too many stories in parallel. If you liked Cryptonomicon, you'll probably like this book, but I would be surprised if anyone likes it enough to plod through it twice.

WARNING: This post will contain significant spoliers for both Fall and REAMDE; don't keep reading untless you've either read both or are highly confident you aren't going to read either.

read more

Dark Mode

Small update: this website now supports "Dark Mode" on macOS 10.14+ iOS 13+, and the forthcoming Android Q, all using the prefers-color-scheme CSS media selector. Let me know if you see anything that looks janky!