03/02/2015

My company has locations in various countries around the world, and our standard for video conferencing is Google Hangouts. We also use Google for our email and Calendars. This is convenient, because when you create a new meeting, Google will automatically set up a Hangout for the meeting and will include a link for the Hangout in the calendar event. Essentially, every meeting you create is a video conference, and everyone is invited without you having to do anything special. Nice.

The problem is that the Hangout link is stored in a special field that is unique to Google Calendar. This field does not sync to other calendar applications (like iCal or iOS's calendar app). Further, the mobile version of Google's own calendar app doesn't include the Hangout link.

This is a huge pain in the ass for me. I often attend Hangouts via my iPhone or my iPad. Here's how it usually goes down:

Oh shit, it's time for a meeting.

Open the event in the calendar app on my iPad.

Oh shit, the Hangout link is not there.

Open Chrome and go to google.com/calendar, log in, and open the event.

Oh shit, the Hangout link is not there either.

Switch to the full site view so I can open the event there and get to the link.

Oh shit, everything is so tiny!

I realized this would all be way easier if the link was just in the description field for the event. So, I wrote a script to do that.

You need to set this up as a Google App Script. I'm not going to walk you through it, but if you just follow that link, you should be able to figure it out.

While you're in the editor, set up a trigger to run that function every hour. Then, once an hour, it'll dig in to your next ten events and, if the event has a Hangout link, it will copy the link to the beginning of the description field. That field will sync to your iPhone or whatever else, since it's a standard field. You can tap on the link from within iOS's calendar, and it will launch in the Hangouts app. Boom!

Note: to find your calendar ID, go to your calendar in a browser. Select the calendar and go in to Calendar Settings and look next to Calendar Address to find the ID.

09/01/2014

A few months ago, I purchased a Public bicycle. I'd always dug their bikes - the styling is cool, and the components they use are of good quality. They're good bikes, and they're set up for tooling around a city like mine (San Francisco). My bike is a V7i, with seven internal gears via a Shimano Nexus 7 hub.

Last week, I grabbed my bike to ride home from work when I discovered that my back tire was flat. Luckily, we have a small bike workshop at our office, so I threw it up on the stand and got to work figuring out how to free the wheel from the frame so I could change the tire.

Public has no information anywhere that I can find that describes this process. Even the owner's manual for the bike tells you to take the bike to a mechanic, which is just ludicrous. I found a few crappy videos around that specifically show you how to deal with this hub, but they are a little hard to follow. I've put together this guide specifically for owners of Public bikes, but if you have a bike with an internal Nexus hub, you might find it useful as well.

What you need

The tools for this are actually not that big of a deal. You need a 15mm wrench, a small pokey device (I'll elaborate in a minute), and then whatever you would normally need to replace a tube on a bicycle. Here's what I carry in my emergency kit:

This tool. It has a 15mm wrench on one end and a tire lever on the other.

A four-inch piece of wire hanger. This is the aforementioned pokey thing. Some people use part of a spoke, and others carry a 2mm allen wrench. I didn't have either of those around, but I did have a wire hanger and this thing works really well for what you need to do with it.

An inflator and a few cartridges. Ask for these at your bike shop. The inflator needs to be compatible with Shrader valves.

Some tire patches.

At home, I have a regular Blackburn pump with a head that inflates both Presta and Shrader valves, and some extra tubes. Note that if you have a Public bike, you need tubes with a longer valve, as the bike has deep rims. The tubes I use are 700x28-35, with a 48mm Shrader valve.

What to do

First, shift in to first gear. Next, turn the bike upside-down. Be careful when you do this; don't break anything off or scratch up your rear rack, fender, or gear indicator.

Now you want to disconnect the shift cable from the hub. Here's how you do it. Find a little rectangular bit with a small hole in it (see pictures). Stick your poking device in that hole and pull it forward. You should be able to crank it over about an inch and a half or so, enough to achieve a decent amount of slack in the shift cable.

The next thing you need to do is free the nut on the end of the cable from its little channel. Push down on the free end of the cable (the tiny bit that's sticking out the right side of the nut) to rotate the nut clockwise a little bit. You should be able to then slide the nut upwards and out of the channel. You might need three hands to do this. I've found that if I use my left hand to hold the pokey thing, then I can use the tire lever end of my wrench to sort of wiggle the nut out of place. You might need to mess around with yours and try different approaches, but rest assured that thing does come out one way or another, without much force.

Now you sould be able to grab the cable housing and pull it out of the little arm that's attached to the hub. Yay!

Using the 15mm wrench, loosen the nuts on either side of the wheel. Flip open your brake calipers, and the wheel should be free. In practice, it's a little hard to get it out of the frame. If the tire isn't already flat, try letting all the air out so that you can shove it against the fender a bit more and free it from the slots on the frame.

Now, change the tire as normal. Do not inflate it yet, and when you mount it, make sure you pay attention to the arrow on the sidewall that tells you the direction of rotation.

Once you've got the tire mounted, you can put it back in the frame by following everything you did in reverse order. After you reattach the shift cable, make sure both ends of the cable housing are seated properly (mine usually unseats at the handlebar end).

Flip the bike back over and put it on the kickstand. You need to adjust your shift cable. Shift in to fourth gear and then look down on the shift mechanism from above the bike. Next to where the chain wraps around the sprocket on the hub, you should see a little window. In the little window you should see two yellow vertical marks. When the cable is properly adjusted, the two marks will form a straight line. You can adjust by turning the little nut on the handlebar end of the cable housing. As you turn it, the shorter of the two lines will move. Once you get them lined up, go for a test ride, run through all your gears, and adjust as necessary.

I hope this little guide helps out someone with a Public bike who doesn't want to rely on a shop to help them with this most basic task of bicycle maintenance.

04/17/2012

This is an interesting era. As participation in social networking becomes more and more compulsary for both individual and businesses, we find ourselves in another one of those weird beginning-of-the-learning-curve periods that makes many of us roll our eyes constantly, while others bang their heads in frustration. Those of us who have been doing this for a while become homocidal when our flow is interrupted by someone who might be a little wet behind the ears, while others try to figure out why they keep getting yelled at. It reminds me of the days when the early adopters had to crusade against the caps-lock-yelling clueless in every post, on every forum.

The new offense that I'm yammering about is the complete misuse of a Twitter account or Facebook page by a business. So many of the companies that I follow post complete bullshit on the regular that has nothing to do with their company or product, often leading me to unfollow and forget they ever existed.

The wiser companies, big and small, have recognized the need for a community manager, or a service to handle their tweeting and updating for them. This, to me, is akin to hiring an advertising agency and it's a good move. You make toilets. You don't know how to make ads. You hire someone to make ads for you. Maybe you give them a free toilet. That's up to you. The same should go for your social networks. If you don't know what you're doing (hint: you probably don't), then get someone who does know to do it for you before you irritate your customers and hurt your business.

Let me guess. You're the guy at the frame shop who knows the most about computers and the internet. All those old duffers you work with have been slingin' frames for 30 years, and they've never had a need to get in to all that social networking business. It has finally, however, invaded even their consciousness to the point where they recognize that it's a necessary evil. You can only have so many hipster kids tell you that they can't wait to like your Facebook page before you have to figure out what that is. Anyway, while you're pretty good at looking stuff up on the Google and even rotating pictures of your sister's kid to the appropriate orientation for posting, you still probably don't get the subtle differences between the social network as it pertains to individuals vs. how it pertains to a business.

My advice, if you're going to ignore my previous advice about getting someone to do this for you, is to think of your feeds as ads for your business and post accordingly. That means saving the cutesy or funny things you find on the internet for your personal accounts, and restricting the business accounts for... here comes a shocker... business. You know that hilarious video of the sleepy puppy or laughing baby someone sent you? It's hilarious, right? HILARIOUS. Still, don't put it on the frame shop's Facebook page. Chances are if someone sent it to you, someone sent it to me too. That's how these things work. I know you want to add some insightful commentary to it ("Look at this silly puppy falling asleep!"), but guess what? Your insightful commentary is meaningless to me, because I don't know you, and I probably don't care what you think about anything (except frames). I'm sorry to be so harsh, but it's true. I have people for that. Actually, I have HUNDREDS of people for that. They're people that I actually know in some way or another, and even they irritate the shit out of me with those damn sleepy puppy/laughing baby videos sometimes. The last thing I want, or should expect, is the damn frame shop, which hasn't posted an update on their special deals since the first week when they said "watch this space for new deals every week", to be posting the same stuff. I'm really, really sorry, but I didn't follow you because I want to see the funny things you find on the internet, or hear about how the Head Framesman is stylin' in his new car, or about how if everyone posts this to their wall, Obama will be forced to give everyone a hug and apologize for whatever his religious beliefs are. It doesn't belong there, and it severely dilutes your already limited access to your customers' eyeballs.

Now, I know what the next argument is. We're a small/family business, and we want our attitude/philosphy/down-home-folksiness to be part of our online identity. Seriously, don't do that. It's stupid. People can buy frames from literally anywhere in the world, son. When you portray an opinion or take a stand on ANYTHING, you alienate half your customers. Who am I going to buy my frames from? The guy online who might be a right-wing whack-job these-colors-don't-run baby seal clubber who keeps quiet about whatever dumb shit he's in to, or the guy down the street who confirms via his Twitter account that if I spend money with him, part of it is going to go toward lynching gays? Hell, I hate to be the one to break this to you, but some percentage of your potential customer base also hates maniacally giggling babies (or in my case, is just downright creeped out by the hypnotic trance they seem to incite over the general baby-loving public) and by posting something you think is just all in good fun, you've left a bad taste in their mouth associated with your company.

This isn't to say that you can't keep things light and fun. Did your shop get a sweet new display case? It's totally fine to post a picture of it and invite people to come check out the sweet merchandise you're filling it with. Is your shop "fun" with a "wacky" atmosphere? Go ahead and put the new guy in the case and mention how much you love clowning around. One picture, though. ONE. Not all the ones you took. Just the one.

Keep your stream light, both in terms of the amount of content and the mood of it, and most importantly keep it on point. Like advertising, use it sparingly so as to not innundate your customers to the point of irritation, and use it very wisely, because you have such a precious little sliver of their attention.

You'll be fine, kid. Now finish updating the shop's hours on Facebook and then get your ass in the back. That damn truck isn't going to unload itself!

03/15/2012

I received a comp yesterday for a mobile ad unit where the user would see some "frost" on their screen and underneath the frost is the ad content. The user would use their finger to "wipe away" the frost to reveal the content.

I decided to use the Canvas element to accomplish this. With the use of canvas' composite operation, this actually turned out to be pretty easy (although it took me a long time to find it). First, take a look at this rudimentary demo in a mobile browser. Drag your finger around on the screen and you'll see that the frost layer is erased wherever you touch. Here's the relevant Javascript I used:

The sauce here is in the ctx.globalCompositeOperation setting. There are several options for this, and Mozilla provides a really good description of what each does. It takes a little bit of mental gymnastics to get a handle on the whole source and destination concept, but once you have that, it's not hard to figure out which function will work for what you need.

In my case, I wanted my new shape to be able to poke holes in the shape underneath it. Destination-out does just that. When you add the new shape, the portion of the existing shape it covers will be removed. By setting the transparency of the new shape to less than one, I get a nice blend that allows the content below to become progressively more opaque as the user runs over the same spot multiple times. In this case, I use a radial gradient for the drawing point to achieve a soft edge.

When I actually integrate this, I'll need to figure out the right way to make the content beneath the canvas clickable and usable, so I'm sure that will lead to various nightmares, but for now I'm stoked to be able to create this effect using pure HTML/Javascript/CSS.

10/18/2011

A lot of people have been buzzing about Siri, the super-robust voice command software that's on the new iPhone 4s. It's really slick how you can tell Siri to call someone, or send them a text, or write an email, or read stuff to you, etc.. Today, I got the chance to create a sick and retardedly awesome marriage of this killer technology with another monster - the Scala Rider G4 headset that my homie gave me. The headset installed in to my helmet fairly easily. The main unit clamps to the helmet on the left and the speakers wires run behind the padding. My helmet has little spots that are intended to house speakers, so I could easily stick the little Scala speakers there, positioned right next to my ears, and they wouldn't cause any discomfort. I paired the headset with my phone and tested it out.

Oh my fucking god of awesomeness. The G4 is sooooo much better than the Parrot headset I had in previously. It has controls for volume and track skipping, and a button for the phone. The speakers are crazy loud and they sound amazing for their size. On my other headset, at full volume I had to strain to hear the music at high speeds. I actually have to keep the volume around the middle on the G4, and even when I do crank it, the sound stays awesome.

The real sweetness of this pairing is in the use of Siri. One button on top of the G4's controller activates Voice Control (which is now Siri on the new phones). It fades the music out and then prompts for a voice command. Without taking my eyes off the road or my phone out of my pocket, I can compose texts and emails, have my unread texts read to me, schedule reminders, and do all the other cool stuff Siri does.

If I need to call someone, I just tell it to call them. If I get an incoming call, I simply say "accept" and it answers. The microphone is good quality and it has a windscreen on it, so people I'm talking to will rarely be aware that I'm doing 50mph lane splits on the Bay Bridge, other than me squealing it at them like an excited child.

The headset also has a built-in FM radio and some killer bike-to-bike intercom technology that I've yet to try out. Supposedly, you can get ONE MILE of range between bikes and still use the intercom. A-fucking-mazing.

05/09/2011

Wow. I can't believe that Sony's Playstation Network is still down! I guess they closed it after a hacker attack about three weeks ago. I'm an XBox, but I was visiting my friend Otis the day after it went down and he was already getting twitchy.

Now it looks like they'll be down for another month, while they completely rebuild the system from scratch. This is never a good idea. It means they're going to push something out that was built in a hurry, and since the implication is that they're doing this to make sure it's hacker-proof, it's going to attract a lot of hackers. So, good luck with that, Sony.

02/15/2011

Ok, how does she not see this? It's happening like three feet away from her. The dog is LICKING the duck! So awesome. I sort of want to bust the little bastard, but I don't want to cause a huge scene. She's been working on that duck since yesterday. It's been a non-stop chore for her: basting, baking, stuffing, basting again, checking, adjusting, checking, rubbing, checking, checking, checking again.. It's like that duck is in Intensive Care and she's the nurse. You turn your back for five minutes, and that thing is as good as dead. Again.

She loves it, though. She always has. This is her big show. This is where she shines. She's wearing her favorite apron, rushing around the kitchen like she's on Iron Chef. She looks and acts stressed, but you can hear in her voice that she's having the time of her life. She answers questions in that mom-esque sing-songy way.

"Mom, how much longer until dinner?"

"About three HOU-rs hoooooney!"

Loves it.

And then there's the dog. What a sneaky little bastard he is. He's been watching her all day like a lion, stalking a gazelle. Waiting, waiting, waiting for her to let her guard down. He's watched every little move and tried to find his angle, never getting frustrated and never losing focus. He waits. He waits some more. She turns around to mash some potatoes and BLAM! He goes for it. Except instead of tearing ass across the desert to a crescendo of bongo drums, taking down the duck in one grand kill move, this little fuck just sidles up behind her, stands on his back legs, and goes to work licking the damn duck silently, right behind her back.

If I hadn't been there when you had them removed, I'd say you've got a lot of balls on you, my hairy little friend.

So what now? I am definitely not saying anything. Let her serve the damn duck. They deserve it anyway. Assholes. Sitting in there on their fat asses watching some stupid game while she slaves away all day. YES I KNOW I SAID SHE LOVES IT, but still. Fuck them. I'll just fake a stomach ache and eat some potato chips while they all chow down on mom's famous succulent duck, basted with dog drool. It'll be a hit as always and mom will be the star of her show again.

02/11/2011

Daily Writers is a new thing I'm trying out at node.nerdist.com. They give you a topic every day and you write for 10 minutes about it. This is my first submission.

Water Bottle

Where in the FUCK is my water bottle? It was right here, on the little table, right by the front door, where it ALWAYS IS. God dammit, this is driving me crazy. WHY ISN'T IT HERE? It's always here.

How the hell am I supposed to take the dog to the park if I don't have water? I mean... there are those fountains at the park but I don't know if I can... ugh... no fucking way I'm drinking from one of those things. I'm sure homeless people put their mouths on the spigot. No thank you, Hepatitis. Not interested.

Come fucking ON! It was RIGHT HERE. I came back from walking the dog last night, drank the last of the water in the bottle, and put it on the little table, right by the front door, with my keys. There are my keys, so where the fuck is my fucking water bottle?? GOD FUCKING DAMMIT.

The sun is starting to go down. Do I really want to deal with trying to walk the dog back through the Mission on a Friday night after the sun goes down and all the freaks are out? That's easy. NO. I'm not going anywhere without my water though. That'd just be ridiculous.

The store on the corner sells water, but screw that. It's the principle. I have a water bottle so that I don't have to buy bottles of water. I'm certainly not going to be the only dick walking the streets of San Francisco with a PLASTIC water bottle! I'd be the scourge of the city! No way. I did not spend $20 on a water bottle to be scourge. I know it's here somewhere. THINK, Steve... where's your water bottle?

The dog is starting to get crazy. He knows it's time for walkies. He couldn't care less about how much water we have on board. That's just not how he works. He'd rather just get going and solve problems like water along the way. That's why I'm the master and you're the subservient pet, man. I have the ability to plan for problems such as thirst, where you're just going to run yourself crazy in the park and then come up to me with your stupid pink tongue lolling everywhere and put it on me to make sure you're hydrated.

I need to find this bottle, or my dog will die of dehydration. I don't want that on my head. AND WHAT ABOUT ME? I get thirsty too. Oh god, I can feel my tonsils. Am I starting to get a headache? WHERE THE FUCK IS THE FUCKING WATER BOTTLE?

You know what? Screw it. I tried. I can't be expected to just go forth in to the city without water. That's not reasonable. But... the bottle's not here, so forget it. You win, Universe. I tried to be a good pet owner, but clearly it's not in the cards for tonight. Sorry, dog. Guess you'll just have to figure out some other way to entertain yourself. I'm going to watch Jeopardy and eat a burrito. No fucking idea what I'll wash that down with, because someone has clearly broken in to my fucking house, and stolen my fucking water bottle. God dammit.

02/09/2011

Ok, ok... I'll work on a better title for the post. It's not important. What is important is that you LEARN FROM MY EXPERIENCE. So if you have a phone, read this.

A few weeks ago, I'm sitting in my hospital bed the day after surgery on my back. In my hand is a button that, when pushed (as frequently as every six minutes), dispenses Dilaudid directly in to my bloodstream. I'm a bit loopy. I get a text:

Ok. Go away. I'm not fallin' for that shit. One more text, I figure, and I'll be annoyed enough to call AT&T and try to do something about it, but at the moment I don't have the energy. That was the last text I got, and I just forgot about them.

Today I get my bill from AT&T and it's higher than it was last month, so I take a look and see that there's a $9.99 charge on there for a "monthly subscription" from 54775.net, which is the number that the texts had come from. There's a note on there that says to text Stop to that number to stop the subscription, so I do it right away, and then I receive a text from 54774 confirming that the subscription has been canceled.

But that's not enough. Why should I have to pay ten bucks for something that I didn't specifically opt in to? Why should it be my responsibility, at the expense of ten bucks, to take action? I checked out 54775.net, and apparently all you have to do is put in your number, select some bullshit that you want to get alerts about, check a Terms of Service box, and you're signed up. You apparently don't have to initiate anything from your phone (I know that I did not). Theoretically, you could go to that site right now and put your ex-wife enemy's phone number in and subscribe they'd be in the situation I found myself in. I like to think that nobody hates me enough to have done that to me, but who knows? Maybe they have some way that they just harvest numbers and sign people up, hoping they won't notice and will, like me, figure that the text is a mistake or a scam, and responding is unnecessary or the wrong thing to do. Regardless, the fact that AT&T allows someone to subscribe to something without my consent is FUCKING RIDICULOUS. I suppose you could argue that by not responding to the text, my consent was implied, but if you did I would kick you in the nuts, and you would deserve it.

I called AT&T and had the pleasure of talking to a very nice person in India. I explained to her what happened and she happily and without any argument refunded the $9.99 to my account. She also informed me that she could see that I texted 54775 back to cancel the subscription, but that I was apparently still subscribed, so she manually cancelled it. She also made me an offer. This next part is the important part, so for fuck's sake, PAY ATTENTION.

On AT&T (hopefully other carriers), you can put a "purchase block" on your line. This prevents anyone from being able to purchase anything or subscribe you to anything without knowing a PIN. The rep sent me the PIN via email.

GET THIS ON YOUR PHONE.

Do it. Do it now. It's easy. Call 611 on your phone and talk to a rep. Then, you won't have to waste a bunch of time on this bullshit like I just did.

11/24/2010

As the era of Six Apart comes to a close, and I look back on my almost five years here, there is a group that I feel deserves just as much recognition as the rest of us... plus some treats and belly rubs. I'm talking, of course, about the Six Apart Dogs.

Dogs have been a huge part of the culture around here for as long as I've been on board. Like them or not, they've always been present. Most were well-behaved, but some would get their wild on from time to time, and that was ok. Sometimes we'd encourage them to run loose in the office, chasing each other and having fun, but most of the time we'd just keep them on hand in case someone needed some fuzzy love at some point during their day.

The office is covered in pee and hair, and there are chewed up toys stashed in many of the darkest corners, but I think most people who have worked here would agree that one of the best parts has been the dogs. I love every one of them, even if there were a few that Rudy wasn't down with. I look forward to the dog family at the new office.

In the meantime, here are most of the dogs I remember working with:

Pictured: Mocha, with Rudy and Maddy. Mocha was the first office dog I met at Six Apart. She belonged to our CEO, Barak. I remember sitting at my desk on my first day and seeing the conference room door slide open a little bit, and this sweet brown dog poke her head out and look around. I beckoned to her, and she came and got a few pets before dutifully returning to her meeting. My subsequent first blog post was about how awesome it was that our office was dog-friendly.

Pictured: Shelby (photo: Winnie Wong). Shelby was a rad but kind of crazy pug. We didn't work together for very long, but she was adorable, and had the best halloween costumes.

Pictured: Maddy. Maddy belongs to Ben and Mena Trott, the founders of Six Apart. She's been around almost as long as I have and she is Rudy's girlfriend. For years, she has been Rudy's favorite buddy to frolic and hang out with, and together they've been able to overwhelm the office with cuteness. Maddy is adorable and sweet, although she went through a phase where she'd turn over on her back to get you to rub her belly, and as soon as you would do it, she'd pee on you. Man that was good times.

Pictured: A blurry Major, with Brad Fitzpatrick (photo: Jamison). I didn't get to hang with Major much. I remember him being really fast. Good boy, Major.

Pictured: Stella (right) with Rudy. God I fucking love Stella. She's the coolest, most chill dog I've ever met. She's like one of the dudes. Rudy loves her, despite the fact that all of their wrestling usually ends in her attempting to eat his head. Stella is a good girl.

Pictured: Ophelia (dog) with Tiff (human). Photo: Tiff. Ophelia is Stella's sister. When they are together, the big dog/small dog adorableness dynamic is almost too much for any human to bear. I have seen the impure turn to stone and crumble in this dog's presence.

Pictured: Larissa, Randy, and Pista. Pista was one crazy bitch. She was Rudy's cubemate for a while, but they did not get along for whatever reason, so Randy and I had to alternate days that we could bring our dogs to work. Still, Pista was a very sweet girl and we all loved her. I think. Let's just say we did.

BLISS! Bliss was the fluffiest of the Six Apart dogs. She was unbelievably sweet and friendly and she liked cookies. A lot. Just look how fucking fluffy this animal was! There were many times where I was able to turn a shitty day around by just sticking my face in to her fluff and snuggling it all away. Good girl, Bliss!

OH MY GOD WHAT IS THAT THING? Her name is Precious, and she doesn't like anyone or anything. I am terrified of this animal. Do not feed after midnight, do not get wet.

Pictured: Sushi, with Rudy. Sushi is Sergeja's dog and she's hilarious. She's also Rudy's favorite Chase Game opponent. So much chasing.

Pictured: Poppy, and her matching couch. Poppy was Doug's dog, and she was pretty snuggly. I don't know if Rudy and her ever met.

Pictured: Jax. A lot of people don't remember Jax, but I do, because he was a sweetie. I honestly cannot remember whose dog he was, but I liked him.

I don't remember this dog's real name, but we all called him Cheddar. He was a loaner dog to Sarah and his tail was always wagging. He was really soft too.

This is Finn, Doug's other dog. He is patiently waiting for Doug to fix the servers so they can go home. Finn is ridiculously furry and loves belly rubs.

Pictured: TK, with Rudy. Short for TK421, which you can Google to see what it means and realize this dog has one of the coolest names ever. I love the shit out of TK. She is my home girl, and her mom is HOT. TK is one of Rudy's Special Lady Friends and they have some good frolics together.

Pictured: Rudy and Walter. Oh man, Walter is awesome! He's a ball of energy and he loves everything. Go check out his blog to see what he's worried about today. Bonus fun fact: Walter is named after Walter Sobchak, and if it's Saturday, then he sure as shit doesn't roll!

Pictured: Basil. Basil is the newest of the office dogs and one of the most fun. She and Rudy are still having a little bit of a hard time getting along, but there's clearly some attraction there. Basil is part Dachsund, and part bat.

Last but not least, Rudy. Here he is, kickin' it in his dog bed behind my desk, exhausted from running around with all of these other dogs. He's had a great four and a half years at this place, and his tail is wagging in anticipation of the new friends he'll meet at the new office.

My sincerest apologies to anyone whose dogs I've forgotten in this post. It took me a long time to put together this list, but it's entirely possible that there are a few I don't remember. Please pat their heads for me.

Special thanks to Six Apart for being an amazing place to work, where we could bring our best friends in so they didn't have to be lonely all day, waiting for us to come home. Thanks for not getting mad about all the peeing and barking, and for even giving them their own category in the Halloween contest that one year. Thanks to all my coworkers who have watched Rudy whenever I've been out of town, or who have snuck him treats. Thanks to the various people who've been responsible for making bacon happen in the break room every Friday, most of which was eaten by my dog. Thanks to all the dogs for endlessly amusing me. Thanks to Rudy for being my favorite one, and for being by my side all these years.