If you’ve seen a recent flood of backlogged blog posts of mine in your feed reader then I sincerely apologize. I finally pulled the trigger on switching from Drupal, the fantastic CMS, to Jekyll, a fantastic site generator.
Howdy!
Welcome to my blog where I write about software
development, cycling, and other random nonsense. This is not
the only place I write, you can find more words I typed on the Buoyant Data blog, Scribd tech blog, and GitHub.
Learnings Week 19 2011
I saw this on another person’s blog and I figured I’d give it a try. I’ve been keeping a note in Evernote this week with all the little interesting tidbits I’ve learned this week. Nothing major or ground-breaking, just little facts and snippets of information I was fortunate enough to absorb over the course of the week.
- How to use “gemsets” with RVM effectively thanks to this blog post which compares it with Python’s virtualenv tool
- CalTrans runs a Bike Shuttle from the MacArthur BART Station in the east bay to the Transbay Terminal in San Francisco during rush hour commute times. The cost, $1.00 (for reference Ashby -> Downtown SF is a $3.50 ticket)
- Provided you give Wells Fargo enough lead-time (about a week), they will order you a stack of $2 bills ($200)
- Using elinks with Tor is fast enough to make browsing with Tor not completely painful
- Most single-window WebKitGTK+ browsers (
vimprobable2comes to mind) don’t do proper certificate checking, making you extremely vulnerable to man-in-the-middle attacks, particularly with misbehaving exit nodes on Tor
New Light on Dark Energy
Last night I was fortunate enough to squeeze into a packed house in the Berkeley Repertory Theatre for a panel titled “New Light on Dark Energy”. Suffice to say, I was thrilled about the entire event, I didn’t expect such a massive line and a filled 600 seat theatre.

After I managed to grab one of the last three or four open seats in the audience for the two hour long series of presentations and Q&A session.

During the Q&A session I managed to get up to a microphone to ask a softball question to the panelists: “If we could give you an infinite supply of funds and grad students, what would you focus on to identify ‘Dark Energy’ in your life time?” Panelist Greg Aldering had a fantastic response that ellicited a number of laughs and sad-pplause from the audience (paraphrased) “The concept of infinite resources is more mind boggling to us than any of the stuff we’ve talked about tonight.”
The night was a blast, if you’re in the Bay Area I highly recommend you check out the Friends of the Berkeley Lab newsletter and attend some of their seminars and panels in the future.
SCIENCE!
Sent from my iPhone

Since moving to Berkeley a little under a year ago, I’ve started to have a commute. A good and proper, bored to tears commute via BART. A commute combined with a proper smartphone means I spent the first and last 40 minutes of every single workday answering emails and reading reddit.
While firing off some emails this evening I noticed the signature I added a long time ago: “Sent from my Nokia n900”
Originally I added the signature as a caddy jab at iPhone users who have had the “Sent from my iPhone” appended to every email sent from the device going back to January of 2007. The more I started to
think about it, these signatures actually make a lot of sense and should be included on just about every device that offers a limited email client.
If for no other reason than to inform the reader(s) of the email that it might suck, for a number of legitimate reasons.
Goddamn autocorrect: sending a grammatically flawness email from a
smartphone is impossible. Invariable an phone will auto-correct “schmidt” to
“schlong” and all of a sudden you look like a moron. Having a “Sent from my
mobile device” footer is like a disclaimer. To whom it may concern, my email
may be riddled with mistakes, you’ll have to forgive me, I’m walking down the
street responding to emails that could probably wait.
Top posting: for the record, I hate top-posts and typically try to avoid them at every turn, for reasons that I won’t go into in this post. If your top-posted message contains your “mobile disclaimer”, it’s acceptable. Trying not to top-post on smartphones these days is near-impossible, so nobody will think any less of you.
Brevity: let’s face it, there’s a lot of extra words in sentences that exist purely to provide some inter-personal lubricant. “Hey Jared, would you mind checking on those services running on those machines when you get a chance, thanks, love you too, etc.” When emailing on the go, particularly when you’re in an on-call situation, brevity is key (especially if somehow your production machines are offline). “Check services on machines 1-12” without the mobile disclaimer might make the reader think I’m an impatient twat (I am, but irregardless), instead of being strapped for time.
On the flip-side of all these reasons, if you’re using a desktop/web client, I expect you to put as much thought into composing your email as you expect me to put into reading it. You know who you are.
S.A.D. - Seasonal Ada Disorder
Last Sunday, I announced the “0.1” release of my memcache-ada project on comp.lang.ada, thus ending a 2 month experiment with the Ada programming language.
In my previous post on the topic, I mentioned some of the things that interested me with regards to Ada and while I didn’t use all the concepts that make Ada a powerful language, I can now confidentally say that I know enough to be dangerous (not much more though).

This is what my coworkers thought of me, learning Ada.
All said and done I spent less than two months off and on creating memcache-ada, mostly on my morning and evening commutes. The exercise of beginning and ending my day with a language which tends to be incredibly strict was interesting to say the least. Due to the lack of an REPL such as Python’s, I found myself writing more and more unit and integration tests to get a feel for the language and the behavior of my library. Due to my “fluency” in Python, I tend to think in Python when scratching out code, similar to how a native speaker of a language will write or speak “from the hip” instead of doing large amount of mental work to construct statements. With Ada, not only am I not yet “fluent”, the langauge won’t let me get away with as much as Python allows me.
The overhead of writing Ada, in my opinion, is a double-edged sword, I can very quickly informally test, debug and rewrite Python but with Ada such a process is (in my opinion) onerous. My 20 minute walk to the train station would be spent contemplating how and what I wanted to write and where. By the time I sat down on the train, I had thought out and designed things internally, so I would immediately write out tests around my ideas and assumptions before writing code to pass the tests. The time spent writing code was minimal since I rarely had to rewrite code, I can think of only one function that had to be rewritten after it had passed tests (botched some socket reading) in the whole project.
I’m not yet sure what will be my next project in Ada, I am certain that I don’t want to build anything of consequence in C again. Working with a language, like C, that not only gives you the rope with which to hang yourself but will often times push you off the chair is more masochism than I feel comfortable with these days. Ada on the other hand will allow you to hang yourself, but it’ll make damn certain that have the perseverence to go through with it. Frankly, I don’t have that kind of drive to really shoot myself in the foot anymore. I want to build software that works with a language that doesn’t want to make me suffer, which means I’ll be in a weird Ada + Python love triangle until future notice.
Catch me at SCALE!
Let’s all pretend I have a Geeko-related pun for “SCALE.” Anyhoo, SCALE, otherwise known as the Southern California Linux Expo, is coming up in February (25th - 27th) and yours truly will be present and accounted for.

Yes, those are bus tickets you see there. I will be heading down from Oakland to Los Angeles by bus instead of flying for ideological reasons, so I’ll try to be in a good mood when I arrive!
At this year’s SCALE, the openSUSE project is making a big splash. Contributors and ambassadors will be showing up from all over the globe to show off openSUSE, talk nerdy, socialize and eat tasty snacks supplied by Cruise Director, GNOME Accessibility contributor and openSUSE Board Member Bryen Yunashko, who just got his annual haircut in preparation for the momentous occasion! ;) If you’re in the area, check out this amazing speakers listing and be sure to register as soon as possible!
I’ll be covering the specifics of SCALE more in the coming weeks on OMG! SUSE!, so stay tuned and I hope to see you there!
Twenty Eleven
I wanted to wish everybody foolish enough to keep my RSS feed in their news reader a happy twenty eleven from Victoria, Canada. While I won’t do a big 2010 “year in review” style post, I wanted to point out some milestones the year has had for me:
- In 2010, I became a married man. Hooray new tax status!
- In 2010, Slide was acquired by Google, giving me the liquidity to use previously purchased stock to buy a nice BLT sandwich on Wed. September 15th.
- In 2010, my lovely wife finished her paralegal studies. Bringing her degree count to two, eclipsing my zero.
- In 2010, I moved from San Francisco to Berkeley, adding two more modes of transportation to my morning commute
- In 2010, I managed to not die in any fashion, comically or otherwise.

Ada? Surely you jest Mr. Pythonman

The past couple weeks I’ve been spending my BART commutes
learning the Ada programming
language.
Prior to starting to research Ada, I sat in my office frustrated with Python
for my free time hackery. Don’t get me wrong, I love the Python language,
I have enjoyed the ease of use, dynamic model, rapid prototyping and expressiveness of the
Python language, I just fall into slumps occasionally where some of Python’s
“quirks” utterly infuriating. Quirks such as its loosey-goosey type system
(which I admittedly take advantage of often), lack of good concurrency in
the language, import subsystem which has driven lesser men mad and its
difficulty in scaling organically for larger projects (I’ve not yet seen a large
Python codebase that hasn’t been borderline “clusterfuck”.)
Before you whip out the COBOL and Fortran jokes, I’d like to let it known up front that Ada is a modern language (as I mentioned on reddit, the first Ada specification was in 1983, 11 years after C debuted, and almost 30 years after COBOL and Fortran were designed). It was most recently updated with the “Ada 2005” revision and supports a lot of the concepts one expects from modern programming languages. For me, Ada has two strong-points that I find attractive: extra-strong typing and built-in concurrency.
Incredibly strong typing
The typing in Ada is unlike anything I’ve ever worked with before, coming from
a C-inspired languages background. Whereas one might use the plus sign operator
in Python to add an int and a float together without an issue, in Ada
there’s literally zero auto-casting (as far as I’ve learned) between types.
To the inexperienced user (read: me) this might seem annoying at first, but
it’s fundamental to Ada’s underlying philosophy of “no assumptions.” If you’re
passing an Integer into a procedure that expects a Float, there will be no
casting, the statement will error at compile time.
Concurrency built-in
Unlike C, Java, Objective-C and Python (languages I’ve used before), Ada has
concurrency defined as part of the language, as opposed to an abstraction on

top of an OS level library (pthreads). In Ada this concept is called
“tasking”
which allows for building easily concurrent applications. Unlike OS level
bindings built on top of pthreads (for example) Ada provides built in
mechanisms for communicating between “tasks” called “rendezvous” along with
scheduling primitives.
Being able to define a “task” as this concurrent execution unit that uses this rendezvous feature to provide “entries” to communicate with it is something I still haven’t wrapped my head around to be honest. The idea of a language where concurrency is a core component is so new to me I’m not sure how much I can do with it.
For my first “big” project with Ada, I’ve been tinkering with a memcached client in Ada which will give me the opportunity to learn some Ada fundamentals before I step on to bigger projects. Disregarding the condescending jeers from other programmers who one could classify as “leet Django haxxorz”, I’ve been enjoying the experience of learning a new vastly different language than one that I’ve tried before.
So stop picking on me you big meanies :(
GNU/Parallel changed my life
Over the past month or so I’ve fallen in love with an incredibly simple command line tool: GNU/Parallel. Parallel has more or less replaced my use of xargs when piping data around on the many machines that I use.
Unlike xargs however, Parallel lets me make use of the many cores that I have access to, either on my laptop or the many quad and octocore machines we have lying around the Apture office.
Using Parallel is incredibly easy, in fact the docs enumerate just about every possible incantation of Parallel you might want to use, but starting simple you can just pipe stuff to it:
cat listofthings.txt | parallel --max-procs=8 --group 'echo "Thing: {}"'
The command above will run at most eight concurrent processes and group the output of each of the processes when the entire thing completes, simple and in this case not too much different than running with xargs
With some simple Python scripting, Parallel becomes infinitely more useful:
python generatelist.py | parallel --max-procs=8 --group 'wget "{}" -O - | python processpage.py'
There’s not really a whole lot say about GNU/Parallel other than you should use it. I find myself increasingly impatient when a single process takes longer than a couple minutes to complete, so I’ve been using GNU/Parallel in more and more different ways across almost all the machines that I work on to make things faster and faster. So much so that I’ve started to pine for a quad-core notebook instead of this weak dual core Thinkpad of mine :)
GNU/Parallel Demo
Experimenting with reddit's self-serve ads
A couple weeks ago I decided to try out reddit’s self-serve advertising system for one of our products at Apture: the Apture Highlights browser extension. While I am an Apture employee, I’ve also turned into a rabid user of our browser plugin while browsing the web, I’ve found it to be perfect at answering a number of quick questions like “what does this word mean?” or “who the hell is this?” In a mix of curiosity regarding reddit’s advertising system and advocacy for our browser extension, I decided to run a trial campaign on reddit.

If you’ve not been exposed to reddit’s self-serve advertising platform, here’s a quick overview. The entire system is bid-based, with minimum bids starting at 20 USD a day. Ads are created by users (like me) and submitted for approval with tentative dates. Once the ad is approved by reddit, it is scheduled to run on a particular day. From my understanding of the system, the number of impressions given to your advertisement is based on your bid and the demand for ad impressions on the given day. On top of this basic structure, you can run advertisements “targeted” to a specific subreddit or reddit-wide.
For the purposes of my campaign, I wanted to try both reddit-wide and targeted ads, for my targeted portion of the campaign I ran my ad for two days on the /r/todayilearned, a subreddit with nearly 80,000 subscribers who all are looking to share an interesting nugget of information that they have learned today.
In addition to targeting the ad to the specific subreddit, I tried to make the copy of the advertisement as compelling as possible for my potential clickers:

(note: The acronym “TIL” generally is used as a substitute for “today I learned” in threads on reddit)
This ad ran for two days on /r/todayilearned and for one day reddit-wide, bringing my total campaign expenditure to $60. The breakdown in numbers is as follows:
Impressions (unique -> total): 21,420 -> 141,037 Clicks (unique -> total): 146 -> 157
While the click-through rate is frustratingly low, what I found astonishing was the huge disparity between unique and non-unique impressions. What that indicates to me is that readers have a tendency to refresh a page (such as the subreddit homepage) a number of times during the day.
What you cannot tell from those numbers above is how many of the clicks came from the targeted placement (/r/todayilearned) versus the reddit-wide run. When the ad ran reddit-wide it received zero-clicks, not only did the targeting to /r/todayilearned garner more repeated (non-unique) impressions, it received all of the clicks received throughout the entire campaign.
The big take-away lesson for me from this brief trial advertising on reddit was: avoid reddit-wide advertising. Finding a subreddit with a large number of passionate users isn’t that difficult, so you should be able to identify a subreddit that overlaps with your target market and advertise to them specifically. Other than that, I don’t have any great “analysis” to offer, it was an interesting experiment but not a rigorously scientific one.
If you’d like to download the CSV with the data from the campaign, you can grab that here. The columns are: date, impression_unique, impression_total, click_unique, click_total, clickrate_unique, clickrate_total.
So. I'm married.
A few weeks ago I finally tied the knot after a rather long engagement, putting my relationship with then-fianceé into a legally binding relationship. While a wedding should hold a very special place in the bride and groom’s heart forever, I feel like it is safe to say that our wedding objectively rocked.
I don’t want to dive too much into the nitty-gritty details of the entire weekend which culminated in a great ceremony and reception at the phenomenal Madrona Manor Restaurant and Inn. The entire atmosphere, from both families having a great time together, to impeccable weather and the fantastically prepared dinner, was damned near perfect. Cue a brief slideshow of pictures taken by my good friends Dave Young and Annika Lindner:
Now that we’re properly married, and no longer engaged, the typical annoying question has changed from “When are you getting married?” to “When are you having children?”
Considering I can barely take care of our big moron of a cat, I don’t think children are in the cards anytime soon. I’m curious what milestone comes after children though, “when are you going to retire” might be next and then perhaps “when are you going to die” after that.
Either way, I think it’s safe to say, it’s all down hill from here.
Being a Croy
The name change that I mentioned in my previous post is now official. This means I now have to update everything. I’m in for a world of hurt between the DMV, banks, brothels and strip-Parcheesi clubs.
The only thing you need to do is update your address book, lucky you! I know at least one friend of mine has, who messaged me to say:
I put your old surname in the “Maiden Name” field in Address Book. Just thought you’d want to know.
I spoke to my step-dad George on the phone immediately after the hearing was over and asked if there are “any perks to being a Croy?”
Still haven’t gotten a response to that one yet.
What's in a name?
Tomorrow morning I will be in court, hopefully finalizing a process I started earlier this year. I will be changing my name.
When I was first considering it, I found the entire idea a bit scary. I have worked tremendously hard to make a name for myself, from my work in the open source community to conferences I’ve spoken at and interactions with numerous companies and people who have been instrumental in my whittling out a career in software engineering. I have been very particular about being referred to as “R. Tyler Ballance,” ensuring that my “self-branding” remains consistent, netting me somewhere north of 36,000 results when searching Google.
Tomorrow I intend on throwing all that out the window, there are more important things in life than Google results (as shocking as that may sound).
I’m hesitant to go too much into the motivations for the change, knowing full well that everything I publish might as well be set in stone on the internet.
Those close to me know that my parents divorced when I was young. After a particularly nasty divorce, my mother and my three sisters parted ways with my father who I have since only had sporadic contact with. After a couple dark years for my sisters and I, my mother married another Navy man, George P. Croy, III. George came into the marriage with his daughter, bringing my sister-count up to four.
Over the past fifteen years or so, I have become George’s son. Successfully exploring his emotional spectrum from tears of joy to turning him a bright crimson shade of pissed-off, never once treating me as if I were anything less than his kin. I’m convinced my attitudes towards family, women and friends not to mention my strong opinions on honor and integrity have all been heavily influenced by him
Plainly put, I would not be the man I am today without his guiding hand.
Provided everything goes well at the courthouse, I enter as R. Tyler Ballance and leave as R. Tyler Croy.
Might as well update your address books.
Unclog the tubes; blocking detection in Eventlet
Colleagues of mine are all very familiar with my admiration of Eventlet, a
Python concurrency library, built on top of greenlet, that
provides lightweight “greenthreads” that naturally yield around I/O points. For me, the biggest draw of Eventlet
besides its maturity, is how well it integrates with standard Python code. Any code that uses the built-in
socket module can be “monkey-patched” (i.e. modified at runtime) to use the “green” version of the socket
module which allows Eventlet to turn regular ol’ Python into code with asynchronous I/O.
The problem with using libraries like Eventlet, is that some Python code just blocks, meaning that code will hit an I/O point and not yield but instead block the entire process until that network operation completes.
In practical terms, imagine you have a web crawler that uses 10 “green threads”, each crawling a different site. The first greenthread (GT1) will send an HTTP request to the first site, then it will yield to GT2 and so on. If each HTTP request blocks for 100ms, that means when crawling the 10 sites, you’re going to block the whole process, preventing anything from running, for a whole second. Doesn’t sound too terrible, but imagine you’ve got 1000 greenthreads, instead of everything smoothly yielding from one thread to another the process will lock up very often resulting in painful slowdowns.
Starting with Eventlet 0.9.10 “blocking detection” code has been incorporated into Eventlet to make
it far easier for developers to find these portions of code that can block the entire process.
import eventlet.debug
eventlet.debug.hub_blocking_detection(True)
While using the blocking detection is fairly simple, its implementation is a bit “magical” in that it’s not entirely obvious how it works. The detector is built around signals, inside of Eventlet a signal handler is set up prior to firing some code and then after said code has executed, if a certain time-threshhold has passed, an alarm is raised dumping a stack trace to the console. I’m not entirely convinced I’m explaining this appropriately so here’s some pseudo-code:
def runloop():
while True:
signal.alarm(handler, 1)
execute_next_block()
if (time.time() - start) < resolution:
clear_signal() # Clear the signal if we're less than a second, otherwise it will alarm
The blocking detection is a bit crude and can raise false positives if you have bits of code that churn the CPU for longer than a second but it has been instrumental in incorporating non-blocking DNS support into Eventlet, which was also introduced in 0.9.10 (ported over from Slide’s gogreen package).
If you are using Eventlet, I highly recommend running your code periodically with blocking detection enabled, it is an invaluable tool for determining whether you’re running as fast and as asynchronous as possible. In my case, it has been the difference between web services that are fast in development but slow under heavy stress, and web services that are fast always regardless of load.
Paw paw?
I feel like I’m slowly starting to blog like @cansar with just excerpts of other stuff that other people have said on the internet, so this is the last non-technical post for a little bit, promise.
This thread on reddit just about made my morning, well, in addition to that delicious peach I ate.
The mere thought of my own grandfather on reddit or any other online community I frequent is a pretty big stretch, but to have him be a notable member of the community is unfathomable (not to mention, run a part of it like r/mayonnaise).
I suggest you read the whole thread and enjoy a hearty belly laugh, only so long as you’re not doing anything important like driving a bus or performing a colonoscopy.
Updated: As with most things, too good to be true. Although, I must say one of the most well done trolling performances I’ve seen yet. I remain unrepentant in my enjoying of a good belly laugh however
LeBron James
I love Sonic.net already
Thanks to @pemullen, I was introduced to Sonic.net some time ago. Unfortunately I never took the time in my old apartment to switch out my AT&T DSL for Sonic.net’s Fusion service; the thought of home internet downtime was just too dreadful to even contemplate changing, despite AT&T’s absolutely awful service.
Now that I’ve left that apartment, I can finally take the dive into some delightful Sonic.net service, and while it’s not even installed yet, I can tell this is going to be a wonderful relationship just by some of the support emails I’ve been exchanging with their folks.
From me:
Like an idiot I moved in last weekend instead of this upcoming weekend, so I’m now in the unenviable position of zero home internet service. In the interest of time, can you guys just ship the kit instead of sending some poor tech to Berkeley? :)
I understand that AT&T still needs to install a line, but after that I’m hoping to get up and running as soon as possible, I’m almost to the point of considering opening a book to read.
Oh the horror.
After only a couple hours Kelly R. got back to me:
Sorry to hear that you’ve been driven to such desperate measures. I know the lead time takes a while from AT&T, but we here at Sonic.net have been working on expediting our end of the install process as much as possible. I’ll keep my fingers crossed that this installation process doesn’t result in a library membership.
Pride
This fourth of July I find myself thinking a great deal about being an American in the 21st century, and pride. In the back of my head I have that hokey country song “God Bless the USA” with its chorus:
That I’m proud to be an American, where at least I know I’m free. And I wont forget the men who died, who gave that right to me.
The concept comes off so comical to me, “proud to be an American.” What does that even mean? I am no more proud to be an American than I am:
- Proud to have been born in California
- Proud to be white
- Proud to be tall
- Proud to have four sisters
- Proud to have a grandpa named Bob
I had no control in any of it, I won the birth lottery and just happened to be born in the United States. I just happened to have grown up to be a tall, white guy with four sisters and a grandpa named Bob, I didn’t select this configuration, it just happened to me. What’s to be proud of?
Taking pride in one’s country however, I entirely understand. I feel that one should take pride in the positive actions that we undertake as a nation, since it’s actions are theoretically comprised of our collective wills, by the same token, I think one should feel ashamed of the negative actions.
That said, I’m struggling to find things to be proud of America lately, there’s certainly a good bit to be angry and ashamed of:
- Our participating in the secret ACTA treaty negotiations
- The tarring of the Gulf of Mexico, a body of water I’ve spent nearly 40% of my life around.
- Guantanamo
- The shrinking middle class
- Shutting down Shuttle service without a viable Shuttle replacement
- Four horrifically expensive failed wars:
- Drugs
- Terror
- Afghanistan
- Iraq
- A bloated federal government, with representatives who’ve forgotten who they represent (looking at you Orrin Hatch)
- Irrational fear of nuclear power
I could go on, I could even start a whole new list of all the things we’ve screwed up here in California too, but it just makes angry, then sad, and then sleepy.
I’m sure there are plenty of things that Americans have done lately that one could take pride in, but none are coming to mind.
We have a mighty big hole to dig ourselves out of.
Fatso Adventures: "I wonder what's down here?"
Quite the mixed bag today has been, I went to court (more on that later), I signed a lease (more on that later too), and I worked from home. Since ET and I are leaving this apartment soon, the management company has been showing the apartment during the day. Not a big deal, strangers walk around the apartment, all the windows are opened, all the lights are turned on, doors are opened and closed and if you’re lucky enough to be around, you get to field questions.
About an hour or two after the showing of the apartment was over, ET looks up from the couch and asks “Where’s Buddy” (a.k.a. Fatso). After looking in all of the usual hiding places, she grabs a can of food and taps the lid and listens. A faint meowing is heard. She opens the closet door and taps the lid again. Meow, meow, meow. I think to myself “no way in hell is that cat in the closet, so I hold the can out the window and tap, tap, tap. Meows are coming from outside of the bathroom window.
Our bathroom window opens onto this tiny area between two buildings, and is rarely opened because the view sucks, and we don’t stink up our bathroom too much.
Not entirely sure where the cat is, I go to the other side of this little area, in the buildings stairwell and open the window, climb out, and poke around for Fatso, a.k.a Buddy, a.k.a Missing Kitty #1. I can’t see Fatso at all but I can hear him. I tapped on the hood for the ventilation shaft and I hear meowing. I tap again, meowing. Reaching my hand around under the hood, I hear more meowing but I don’t feel anything.
Thanks to a flashlight and mirror loaned from a friendly neighbor, who’s more earthquake prepared than ET and I, I was able to look down the ventilation shaft. and I see Fatso’s stupid little face, all the way at the bottom.

Running down to the basement confirms two things, this cat is stuck, secondly, he’s stuck in the ventilation inlet to the heating system for the building. Stupid cat. While I continue to investigate possible exit strategies, something Fatso clearly hadn’t considered, ET is on telephone duty. First we call the management company, who are characteristically useless, then it’s on to the fire department’s non-emergency line. 
When the calvary (see: firemen) arrive, the first thing we do is rip the hood off the ventilation shaft to determine whether we can fish the stupid cat from the depths, which after removing the hood, turns out to be about 15ft. To add insult to injury, there are a couple pieces of wood fastened into place at the top, preventing any beings larger than a 12 pound stupid cat from fitting down the shaft. Looks like we’ll have to attack it from the basement, and be “we” I mean the firemen, I’m useless.
The good boys from the SFFD find a seam in the sheet metal where the shaft attaches to the furnace and using some basic tools (pick) and their hands, are able to tear back some sheet metal so I can poke my head in the bottom of the buildings furnace, only to see our stupid cat, a.k.a Fatso, a.k.a Buddy, a.k.a Missing Cat #1, as far away as possible, entirely unwilling to exit the dark bowels of the furnace he’s occupied for nigh three hours now.
I explain to the firemen, that I can probably handle it from here since they likely have “real shit to do”, but they are unwilling to budge, waiting on “verification” of the cat; they had not actually seen the cat at all up until this point. I shove my head back in the furnace, this time with an arm and grab Fatso by the neck and drag him, against his will, from the furnace to greet the four smiling faces of the SFFD’s finest (and ET). 
The firemen are kind enough to seal the now warped sheet metal enough to hold the system over until the management company can repair the damage, and after thanking them they were on their merry way, ideally to save somebody’s life, but most likely to watch Real Housewives of New Jersey back at the station while they wait for something to catch on fire or some stupid cat to poke its head where it doesn’t belong.
Fatso’s favoring his hind-legs a little right now but is all and all in good condition. I want to say he’s learned his lesson, but I’m certain he hasn’t.
Silly Problems
In the next few weeks, ET and I will be moving out of San Francisco, perhaps for good. I am living up on the promise I made back in April and leaving. Over the past weekend I was struck by how picky I’ve become, particularly with where I live.
For starters, living in San Francisco, I live in a place with:
- A thriving bicycle culture, which is only looking to get better
- Hundreds of restaurants with all sorts of delicious food stuffs
- Surprisingly few douchebags (hipsters and Mission bartenders not-withstanding)
- Fantastic weather
- Low violent crime
And I’m still not happy with it.
In the past, I’ve lived in places where enormous cars are a status symbol, giant belt buckles that double as shields are accepted; truck nuts. Moving here from Texas I left, stale, windless 100+ degree heat, random people shouting “faggot” at pedestrians from their cars, no tolerance drug policies coupled with binge drinking and drunk driving. To its credit however, Texas is cheap and areas like Austin are wonderful (not counting traffic). When I lived in eastern Germany, I was constantly confused, cold and more than once crashed a bike due to black ice on the roads. Before that, Northern Virginia, living dangerously close to the “south will rise again” group of folks, an area of the country where the Ku Klux Klan is still surprisingly strong, albeit more hidden than before.
Every place that I have lived has had its own unique set of problems, San Francisco included; the lack of progress for a progressive city still irritates the hell out of me.
There are so many parts of this country that unabashedly fucking suck compared to San Francisco, and I’m still not satisfied. What a silly problem to have.