Monthly Archive for March, 2006

Becoming an ultrarunner

So, it’s been decided: I’m going to run the Chicago Lakefront 50K in two weeks. I’ve been reading a collection of ultrarunning stories since I bought it for myself a few months ago, and I’ve been contemplating ultramarathons seriously since I attempted my first marathonish distance (WARNING: PICTURES OF MY SWEATY HAIRY CHEST! DO NOT CLICK WHILST EATING!)

Anyway, I found out about the 50K in Chicago, and I thought it would be a good first ultra.

After my ankle injury in December, and my general lack of serious training, I wasn’t sure if I was going to attempt it, but yesterday I ran a 25.5 miler (my longest run yet!) and I think I am ready. So it’s on. As soon as I can find my credit card, I am registering.

Josh volunteered to “crew” me, or cheer me on or whatever. Basically, he’ll meet me at the checkpoints, provide moral support, and massage my groin.

I haven’t told him about the groin massaging yet.

For those of you who like to hear details about runs, the route I took yesterday consisted of a 13 mile loop around town, plus my standard 7.5 mile loop on the Clear Creek Trail, and then a shorter 5 mile version of the same loop. My time was 4:40, which comes out to 11 minute splits, which I am pretty proud of.

That’s all for now. I need to find my wallet so I can go drink wine and listen to jazz and register for this silly race.

The danger of psuedo-openness

As I was walking across campus in the beautiful snow today, I had a little revelation:

The biggest threat to Free Software (Free as in Freedom) will not be proprietary software, it will be psuedo-open software.

The web has always been sort of open source. If you are using Firefox, you can look at the code for this page right now by pressing CTRL+U. It takes like a millisecond. It’s that fast. And two recent web technologies–AJAX and GreaseMonkey–have enabled an even greater degree of openness. But this openness can be deceiving.

Probably half of you are wondering what a cleaning solution and an oiled orangutan have to do with the internet, so here’s a quick explanation of what AJAX and GreaseMonkey are:

AJAX

It used to be that the web was simple. People created web pages. Web pages had hyperlinks in them. People clicked the links, and they got new pages.

But around 1995 the clever people at Netscape decided that they were going to let people put little programs in web pages, and so they invented a programming language for web pages called Javascript. Ten years later, we are finally figuring out what kinds of cool stuff we can do with this, and that’s where AJAX comes in.

Under the AJAX model, you download a web page, and those little Javascript programs can keep talking to the computer that page came from, getting more and more information. So when you visit Google Maps, and you click and drag the map, the web page is just talking to the server asking for more map. You don’t have to click any links or change pages to get more information.

GreaseMonkey

GreaseMonkey is an extension that you can download for the Mozilla Firefox web browser. It lets you write your own Javascript programs that you can add to web pages. It’s kind of like infecting the page with a virus, except it’s a good virus. It’s one that makes the page better.

A few days ago I wrote about some GreaseMonkey scripts that I wrote. One is a little program that goes through every web page I visit and adds the address of every link to its tooltip so I can see it when I mouse over the link. The other is a program that changes the Google results links so I can copy and paste them.

Enabling Openness

So, how do AJAX and GreaseMonkey increase openness? Well, an AJAX web application is made of two parts: 1) the web page with the Javascript programs that is reacting to the user and assembling the page, and 2) the web server that is passing data to the page. What makes this arrangement more open is that can replace the page (part 1) with your own page that does different stuff.

So when Google released their AJAX-oriented Google Maps application, people made all kinds of applications that did just this. I use Gmaps Pedometer to measure the routes I run, and it’s a great example of what can be done.

Riding on the coattails of the AJAX movement, GreaseMonkey enables even greater openness. It lets you change how AJAX applications work without having to build a whole new site, as the Gmaps Pedometer people had to do. With some limitations, GreaseMonkey makes the web page half of AJAX applications pretty much open source.

The easy sell

There are a lot of benefits to Open Source software, and when you compare it to proprietary software, the value propsition is pretty clear:

  1. Anyone who wants to work on an Open Source application can just jump in and do it. That means lots of people thinking up cool innovations and making them happen. It makes software exciting again.
  2. If something truly annoys you, you can just fix it.
  3. You own the code. You aren’t at the mercy of some developer to fix and improve your software. If push comes to shove, you can do it yourself. Business love this, because it gives them more leverage.
  4. Lots of people see the code, lots of people test the code, so it generally has fewer bugs.
  5. The only kind of proprietary applications that get built are ones that are worth building a business around. If it can’t make money, it doesn’t happen. In the Open Source world, however, the only requirement is that there is a developer that things something is worth building, so you get a wider range of software.
  6. It’s cheaper to get. You don’t have to pay.
  7. It’s cheaper to develop. You might have 20 companies each contributing one developer, and each company reaps the benefit of the other 19 developers that they aren’t paying. If you wanted to build the same software under the proprietary model (i.e., alone) you’d have to pay 20 times the cost.

The problem is, while these AJAX-enabled, GreaseMonkey modified applications offer some of these benefits, they don’t offer them all. #1 is especially powerful, because it pulls developers away from fully Open projects. The Web 2.0 world, where all this AJAX stuff is happening, is really exciting, and developers have access to a lot of interesting code. But they don’t have access to all of it, and when you hit a wall and realize that you don’t have access to the code you want to change (because it’s running on Google’s servers, for example) that’s going to be pretty frustrating.

And while it may not seem like it, proprietary software developers are still the gatekeepers. Gmaps Pedometer will only function as long as Google keeps Google Maps up and they don’t change the API, or introduce security measures to lock out 3rd parties.

Thankfully, the web is an ecosystem, and if Google locked out 3rd parties, those parties could just switch to leeching off of Yahoo or Microsoft. But this brings us to my main point.

The Dark War

AJAX and GreaseMonkey give us a lot. The developer community growing up around them is exciting. It’s fun to write apps, and we’re seeing a lot of cool Mashups. It feels a lot like the Open Source community.

However, we don’t own the software we’re writing. There are restrictions hiding in the shadows that will come to bite us. And the people who control these applications in the end are beholden to shareholders. It’s tempting to buy into these technologies, but we must be wary of these facts.

I am not saying that we should stop hacking AJAX applicatios and disable our GreaseMonkey scripts. They are useful and fun, and half-open is better than closed. What I am advocating is that we continue to be aware of what elements of our computing world are still closed, and try and support more open ones.

MovableType is perhaps half-open and for a while many people supported it because it was high quality, and had a lot of the benefits of Open Source even though it wasn’t truly open. But when Wordpress appeared as an alternative, a handful of Free Software devotees rallied behind it and now it is eclipsing MovableType in terms of developer brainshare. And that’s a good thing.

So I’m keeping an eye on Nutch, the Open Source search engine, even though I use Google every day. And I’m watching the Hula email server while I send messages through gmail. Certainly if I find myself writing uglier and uglier GreaseMonkey hacks to get Google’s stuff to work the way I want, I will start seriously thinking about switching to the Free alternatives.

The time may come when it’s important that people start shifting to these applications from the proprietary alternatives, but for now I’m just watching.

Risk, Uncertainty, and Doubt

Jean Tabaka of On Be(come)ing Agile writes about the difference between risk, uncertainty and doubt in software development and how she feels this difference highlights the primary motivations for Agile software devemlpment methodologies:

When we assume that more analysis and more calculation will reduce risk, we are assuming that risk is all that that stands between us and project success. What is more true, and what is fully absorbed in our agile practices, is that there is far more at play here than just risk. In truth, uncertainty, that unknowable and uncalculable stuff, cannot be managed away by assuming it is risk.

I think this risk, uncertainty, and doubt concept applies in interaction design too.

The dynamics of the user/interface system are so complex that sitting in a room for weeks drawing out elaborate specifications is almost always a recipe for disaster. I guess that’s uncertainty and doubt rearing their ugly heads.

The best designs seem to come from highly iterative processes. You need to start interacting with users and prototyping as soon as possible, and get to testing design assumptions right away. Things being as foggy as they are, creating actual artifacts and seeing what happens seems to be the only reliable way to navigate the design space.

There seem to be a lot of parallels between Agile development and iterative interaction design methods that would be fun to flesh out. I should bug Alex about this more.

Vacation in Pictures

Spring Break in Boulder: I skied, I slept, I ate well, drank well, and played a lot of Mario Kart. Full photoset is here

Playing%20GoMel%20preparing%20insanely%20delicious%20fajitasThe%20catsHeading%20out%20to%20CopperPacking%20the%20carOn%20the%20liftOn%20top%20of%20Copper%20MountainSkiingSkiingimg_3314%20%28Modified%29SkiingOn%20the%20liftThe%20view%20off%20the%20back%20of%20the%20liftThe%20sign%20at%20the%20%22Storm%20King%22%20Poma%20liftThe%20Storm%20King%20liftKate%20is%20waiting%20for%20me%20by%20the%20ExceleratorAt%20the%20baseAt%20the%20baseLunchSkiingSkiingThe%20view%20off%20the%20back%20of%20CopperThat%27s%20meI%20almost%20look%20like%20I%20know%20what%20I%27m%20doingSkiingSkiingThe%20drive%20from%20Copper%20back%20to%20BoulderMe%20drivingMaking%20facesLook%20at%20my%20big%20pants%21Alex%20eating%20KateRed%20RocksDriving%20back%20to%20BoulderMaking%20facesOn%20the%20road%20into%20BoulderThe%20drive%20from%20Copper%20back%20to%20BoulderWalking%20back%20to%20the%20apartmentWine%20tastingPiqued%20curiosityThe%20wine%20stewardSippingPlaying%20video%20gamesThe%20drive%20from%20Boulder%20to%20Copper

Fixing Firefox and Google

Firefox’s status bar has been annoying me for a while because it’s such a waste of space. The only thing I use it for is to check what the URL of a link is before I click it. It’d be great if firefox would just show me the URL of each link in a tooltip. So I poked around a bit to try to figure out how to a write a Firefox extension that would do the job, and realized that I could just write a quick greasemonkey script instead. It didn’t take long to write a three line script that would add a URL to every link’s tooltip.

When I went to post my script on the web for others to use I found out that someone already wrote a greasemonkey script with almost the same behavior. Ah well, I learned something by writing my own. And my current version of the script handles gracefully links that already have long tooltips, which is a nice feature.

Another annoyance I recently patched with greasemonkey is that whenever I try to copy and paste a link out of some Google results, I get a crazy link that looks like this:

http://www.google.com/url?sa=t&ct=res&cd=2&
url=http%3A//snowedin.net/&ei=vLAdRKeuOJb2owKagK
GxCg&sig2=qxWiLpszWzdXgPxUI3kD-w

Which is not really suitable for pasting into an email or a blog entry. I seached Userscripts.org for a script that would strip these out, but I couldn’t find one. There has to be something that does this in their database, but I couldn’t find it, so I went ahead and wrote my own. Update: It should be noted that there is some controversy about a new ping attribute for tags that would obviate the motivation for this whole situation.

And now my browsing experience is much nicer. This is a neat example of end-user programming, and a blurring of the designer/user line. Great things can happen when you start thinking of your products as starting points for a lifelong design process instead of finished, static objects.

However, not everything is roses in user scripting land. Many web developers are less than thrilled that user scripts are wreaking havoc on their pages. Dean Edwards blogged that there are cases where “you just don’t want your DOM screwed with” and offered some code that to “turn the bloody thing off”.

User scripts can certainly break web developer’s sites. My Google results script makes it impossible for Google to track which links I click. But the added usability is worth it to me. And as one commenter on Edwards’ blog pointed out:

“Your DOM”? I am sorry, but once your code leaves your server, it is no longer “your DOM” but the “user’s DOM” and they can screw with it as they please.

The fact is, user scripting is here to stay, and web developers are going to need to design their applications accordingly. With the scripting-heavy trend of Web 2.0, I imagine things are going to get worse before they get better. But that’s what’s fun about the march of Progress.

If you want to add these enhancements to your browser, install Firefox, get Greasemonkey, and then click each of the links below, each time hitting the “Install” button that comes up in the yellow bar at the top of the page:

Add URL tooltips to every link
Fix Google results links

On Brackets

All of this talk of brackets makes it seem like watching sports is all about predicting who is going to win and why. Am I the only one who doesn’t care that much who wins?

I don’t watch much sports, but when I do its from the perspective of an athlete. I love watching UConn move the ball up the court in fractions of a second thorugh a series of beautifully choreographed passes culminating in an easy layup. But I get almost as much of a kick from watching their opponent sink an unlikely three-pointer. Either way, I’m thinking “holy shit, that was sweet.”

I’ve never particularly cared whether one team’s center is a good match against another’s, or how deep someone’s bench is. I mean, I pay these discussions lip service, but mostly I just want to watch hugely talented athletes tear shit up.

So while I want to see UConn win because they are my alma mater, I honestly don’t care about picking winners. Unless we are talking about horse racing, where picking winners is the whole point of the sport, and the spectators are playing as much of a game as the jockeys, it’s just not that interesting to me.

Maybe if I watched more sports I’d care more about predicting outcomes. Maybe if I cared more about predicting outcomes I’d watch more sports. Who knows.

One Laptop per Child

Chris Blizzard just posted a piece about the software for the OLPC project. I’ve been really inspired by the project and every time I read about it I get an intense desire to be a part of it, but until now I haven’t been sure about how to get involved. There are some suggestions about how to do that here and here, but I’ve been pondering some specific ways I might help, including…

  1. Do research in programming environments for kids. (hey! I’m already doing this!)
  2. Contact the Fedora OLPC people and offer my services.
  3. Contact the OLPC people and offer my services.
  4. Start teaching kids how to program on Linux. Consider this a usability test.
  5. Install the OLPC system. Do usability testing with kids.
  6. Apply for a big grant to get some laptops, give them to kids in some foreign country, and do an ethnographic study about what works and what doesn’t. (Unlikely to happen before next year)

I’m in a wierd place because I’m transitioning from Indiana to another (as yet undecided) institution, because my summer plans are extremely vague, and because I’m pretty entrenched in my current research projects. Probably the thing to do is stay focused on what I am doing (as it relates pretty directly to the OLPC’s goals anyway) and start looking more aggressively in May for ways to get involved.

I think any combination of the things I’ve listed would be great fun, but #4 really really really appeals to me. I’m not very well read in the research about teaching programming, though people have been studying this since the Logo era at least. But I doubt anyone has done research about kids learning programming on Linux, and I would love to do that project.

Anyway, just a thought to tuck away for the future.

Goodwill



IMG_2279

Check out the Disney’s Animal Kingdom t-shirt. That thing cracks me up.

Pizza was insanely good. But what was even better than the pizza was the Cilantro Pesto we made. I figured: “Cilantro Pesto… that’s going to be harsh! Only just tolerable embedded in pizza with other strong flavors like onion and tomato!” But in actuality, it was mild and delicious; perfectly suited to be eaten straight up on a tortilla chip.

Recommended.

Open Source Knowledge Transfer

In the Open Source world, there’s a bit of a knowledge transfer problem. It’s hard for new developers to get into an existing codebase, and it seems like little of the accumulated wisdom of older developers gets passed on.

But what if people started adopting a model similar to the one we use in academia? There you have graduate students managing projects, while faculty act as advisors and ambassadors, undergraduates take on well-defined chunks of work. And at each level you are essentially training for the next level.

This happens a little bit with Love (i.e. Gnome Love), I suppose. But in academia, an undergrad often gets a project from a person, which means that they have someone who they can get guidance from. Love projects seem to be thrown out in the open like “someone should do this” without a mentor attached.

Additionally, I don’t see a lot of OSS hackers turning into full-time advisors. People stop working on code and start doing other things, and providing more in the way of specifications, but I don’t see them advising young hackers directly. Perhaps this is because in the Free Software world, your credibility is based on your ability to produce working code. Or maybe it’s there and I just don’t see it because I’m not very integrated into the hacking culture.

Who knows.

Google Video, two months late

Google finally got around to approving the video I uploaded on January 2nd. Fast service there, folks.