My Development Setup/Flow

Developers seem to love to hear about how other developers work, so I thought I’d try to capture my entire environment, from end to end, in a single post. This will change (has changed) over time and depending on the project/company/whatever, but this is how things are for me right now. A couple of points up front:

  • I work for Automattic, so a lot of this is influenced by our internal policies/security/workflow.
  • I don’t always use all components of this “system”. I’ll try to detail when I do/don’t use certain parts of it as I go.

OK, here goes.

Note: This turned into a little bit of a summary of how we work internally at Automattic as well. Oh well, maybe it’ll provide some inspiration, I think we do some pretty cool things.

(more…)

Stroll in the Park

It is now 12:04am, and I just got back from a walk.

There are a few things about this walk to make it notable:

  1. I got up from my desk at 11:35pm and headed out for a brisk walk, mainly so that I could try to get over 6,000 steps today.
  2. I measured my steps using a Fitbit, and had the specific target because it’s part of an internal fitness challenge Automattic is hosting through Keas.
  3. I took the chance to compare Fitbit to RunKeeper for measuring walking (mainly looking at distance accuracy, but also at calorie burn).
  4. A guy (probably high) most definitely lined me up to attempt to mug me, he even tried to walk with me/talk/engage to distract me and get me to stop, but I out-walked him and he kind of gave up.

So; fun stuff all around. Here’s the data, from RunKeeper:

and for the same time period from Fitbit:

What’s interesting here?

  • FB reports that I burned 163 over RK’s 126; that’s a 23% difference.
  • FB reports that I covered 1.22 miles, while RK reports only 0.76 miles. Almost 40% difference.
  • Pace is barely even worth comparing when distance is so differently recorded. Time even shows as 40 seconds different, although I’ll give FB the benefit of the doubt and assume it’s rounding.
  • You can actually see the part where the guy approached me, because I sped up. If you look at the map from RK, it was on Larkin St, between Broadway and Pacific. He tried to “walk with me” so that he could get me to stop, but instead I just walked faster. I topped out right there at 14.4 minutes per mile according to RK (just over 4 miles per hour).
  • If I hadn’t been trying to meet a daily fitness goal, I wouldn’t have been walking around at midnight, making myself a target for getting mugged 🙂

Maybe I should run instead of walking, since high/homeless/whatever people are even less likely to give chase?

Closing a Window in JavaScript

If you’re having trouble closing a window using JavaScript, this might help. I’ve had this problem sometimes in Chrome in particular when I open a window, then follow through a bunch of redirects or something. It seems to lose track of the fact that I “control” this window object, so it doesn’t allow me to close it. This fixes that:

window.open('', '_self', '');
window.close();

Basically it reopens the window on itself, then immediately closes itself. Neat. Haven’t had any problems with it not working in other browsers, but I also haven’t super-widely tested it.

WordPress Authentication Framework: Keyring

Keyring: An authentication framework for your plugins

Quite a while ago (like, in at least 2009), I started thinking about regaining control of all the content I was producing online. I was posting photos to Flickr, saving bookmarks to Delicious. I started Tweeting. I was checking in. All fun and games, and all of those services offer great tools for interacting with them (let’s face it, tools that are much better than WordPress’, because they are focussed on one thing). So I figured, why not write importers for these services and pull my content back over to my WordPress. And keep doing it periodically, so that I could keep using those tools. I want WordPress to be my “home on the web”, my digital hub, but I want to use these neat tools with their fancy apps and what-have-you.

Very quickly, I realized that if I was going to do anything useful on most web services, I’d need to be able to authenticate with them. No biggie, right? I know my username and password… Oh. Right. OAuth. Turns out that most web services use OAuth (or something similar) to authenticate, and it turns out that that’s actually a bit of a bear to implement, when all you want to do is write a simple little Twitter importer. And then again for a Foursquare importer. And a Flickr importer.

What I needed was a shared, generic authentication framework that would do all the heavy lifting for me. I would tell it I wanted a connection to specific service, and if it didn’t have one, it’d walk the user through the process of getting one. It’d give me a standardized format of authentication credentials and abstract out all the complexity of making authenticated requests against those services. Then it would make me a coffee*. What I needed, was Keyring.
(more…)

A Random Idea Around Small-Group Collaboration

I use CloudApp a lot, and recently saw mention of Dropmark. That got me to thinking of a relatively simple, WordPress-powered application for small-group-collaboration which I thought I’d throw out here in case anyone wanted to build it.

  • A WordPress installation, with a group of people who all have accounts
  • A small Mac/Windows app that lived on your desktop/menu-bar/somewhere easy to get at. Let’s call it… Guppy.
  • All users download a copy of Guppy and configure it to point to the same WordPress install.
  • Guppy now sits on their computer, waiting for them to interact with it.
  • When they drop files on this copy of Guppy, it does some magic
    • Images will be uploaded and inserted into a Post, or set as a gallery (if there’s more than one),
    • Text files will be uploaded and rendered as pre-formatted text,
    • Other will be uploaded and attached to a Post,
  • Double-clicking/clicking Guppy would open a small window where they could type in some text (and perhaps also drop files into that window and have them appear as “objects” within their text)
  • Right-clicking Guppy would allow you to change options, jump to the configured website (like you didn’t already have it open in a browser tab!), create a new instance of Guppy, maybe some other stuff.
  • All of this content is published as Posts on the connected WordPress install, and is automatically formatted beautifully (perhaps via an optional theme that’s geared heavily towards collaboration?). Comments are enabled, so you can discuss things on that site, right there while you’re looking at it.

In essence this is just a streamlined, simplified, beautiful WordPress client. There is nothing stopping someone from creating this today. There you go internet, 1 more free idea.

First Siren Net Checkin

In October 2010, as part of my NERT training, I attended a “HAM Cram” class here in SF and gained my FCC HAM license. I picked up a Yaesu VX-7R radio and then tinkered around a bit, but never really got into HAM too much more than it just being a fun idea. Since then I’ve listened on and off to the weekly Siren Net that happens in SF, but I’ve never actually called in and reported what I was hearing.

Today I had my first check-in (from home), and it was fun. It also felt good to know that I was helping the city keep track an emergency system that might save lives at some point. I checked in via the repeater at 443.100+ tone 114.8 and had a bit of interference, but it was clear enough for the net control to hear/understand me after a clarification. “KJ6LFV, back to net control” 🙂

Mounting Remote Filesystems in OSX

       

Most of my work for Automattic is done on a remote sandbox machine, somewhere in Texas. I’ll often jump in and make smaller edits over SSH via vi, but when I’m doing something bigger I much prefer to work locally, using TextMate (I’m on a Mac, obviously). To do that, I need to be able to access files as if they were local, which means either duplicating them to my machine (lame, annoying) or mounting them directly.

I’ve been doing that via one of the following options, and I’m wondering if anyone out there has a better solution.

I’ve tried both for a while now. They both work. Except for when they don’t. Here’s what I’d found:

  • Transmit seems more responsive, when it’s working
  • Macfusion often crashes Finder the first time I access a newly connected filesystem (and is then reasonably stable)
  • Transmit much more randomly just stops working and gives no indication, I just can’t browse any more and have to disconnect/reconnect
  • Macfusion allows you to easily customize a neat icon for each filesystem
  • Transmit seems to have more aggressive caching (or a longer TTL on it) of filesystem details (part of what makes it feel more responsive)

So, have you used one of the following methods? Is there a configuration option I’m missing? How do you go about solving this problem?

UPDATE: I should have mentioned that I need to be able to do this over the open internet (securely), where I’m not connected directly to the same network as the server.

On Internet Addiction and Connectivity Bubbles

If there’s one thing that travel has done for me lately, it’s made me recognize and accept how addicted and reliant I am upon my smart phone (in my case, an iPhone).

When you travel (internationally), you have to make a hard choice — do I shell out big $$$ to AT&T to get an international data plan, do I shell out even bigger $$$ to use roaming data, or do I sever the umbilical and disable roaming data. Roll the dice on being able to get wifi. Or worse yet — don’t use the internet at all. Gasp.

Traveling with others, I get this feeling that some people who don’t get an international plan are hopping from connectivity bubble to connectivity bubble, holding their breath in between and hoping they make it to the next one alive. There’s a sense of relief when they can get back online. Check Twitter. Check email. Check in. Check a map. OK, now hold your breath and hope we can find somewhere else with wifi before it’s too late!

I’ve found myself more and more often opting to not get any data access at all, and to actually relish the experience of not having connectivity for the most part. When I was in Chile, it was rough at first, not having access to maps, Google, etc. But I got used to it. It was like taking a step back in time. I talked to people. I used a paper map. It wasn’t so bad. It turns out that not having connectivity to the world wide web forces you to live in… the world right in front of you.

That’s not a bad thing. Try it.