EagerEyes Shorts

Musings on visualization, photography, programming, etc. that are too long for Twitter but too short for (or don't fit) my visualization website, EagerEyes.org. Part of my vanity website, kosara.net, which is most notable for hosting my list of publications. If you still want to know more, see my university page at UNC Charlotte, and/or follow me on Twitter.

Like many others, I started running using Nike’s Nike+ GPS app on my iPhone. It’s been a great ride for the last three months, but I am now feeling its limitations. The app isn’t self-contained at all, and the website is slow and buggy. So I’ve decided to use RunKeeper instead, but what about all that run data Nike has locked up on its website?

While looking around, I found a forum discussion where somebody had figured out how to coax the GPS data from the Nike site in a JSON format. Obviously, RunKeeper can’t import that directly, but it does accept GPX (GPS Exchange Format). So I wrote a little conversion script and make it available. It’s written in Python and available on github:

Nike2GPX

The process how to download and convert the data is described in the README. It has to be done manually for every single run, and you’ll have to then manually import the data into RunKeeper (or whatever you want to use). But it works, and it’s great to have my entire running history available on the new site.

Posted at 9:00am and tagged with: runnning, nike, programming,.

Open Source project hosting has taken a huge step forward over the last year or so. This was facilitated by the emergence of a new breed of version control systems, which are distributed rather than server-based (like CVS and SVN). There is a whole list of these systems now, but the ones that get the most mindshare are git and Mercurial (hg).

Collaboration in open source always used to be complicated and bureaucratic. While there is a lot of talk about how anybody can fix bugs in open source, etc., the practice was quite different. Most projects required you to prove yourself by submitting patches to the maintainers and earn their respect before you would be granted commit access to the CVS or SVN server. That’s understandable, they didn’t want you to submit bad or even malicious code; but it also meant that few people ever fixed bugs they found, because they just didn’t want to put in all that extra work. Many open source projects have also died a slow death by abandonment because there was no easy way for others to take over.

Distributed version control systems have made this much easier, and hosting services like github and bitbucket have added some simple but effective tools. Now, it’s easy to clone a repository, make changes, and then send a pull request to the maintainer. If the maintainer likes the code, he or she can incorporate it into the “official” version. If not, you can maintain your forked version, and the users can decide which one they prefer. It’s even possible to take changes from several people’s forks and combine them into a new version. That makes it possible to effectively take over a project, even if the original repository has been completely abandoned.

I originally signed up with github, and I really liked it. The only real downside was their use of git. Now git is without doubt the most flexible and powerful distributed version control system, but it has a lot of features I simply don’t need. I prefer using hg for its more streamlined workflow and better integration in eclipse. It’s also less of a hassle to set up in Windows and easier to explain to my students.

Perhaps bitbucket is just ripping off github, the two are really quite similar. But what made me switch was a simple limitation: Both github and bitbucket allow up to five private repositories on their lowest paid tier, but github limits the number of collaborators on these to only one. That’s just too limiting for me, and severely limits its usefulness.

Both provide cname support, which lets you set up a (sub-)domain to point to your github or bitbucket stuff. On github, you can create HTML pages, and they even include an elaborate way of creating static websites from configuration files that are hosted there. A cname domain points to your pages rather than your profile, so you can effectively use it to host your website there - but that’s completely useless for me. bitbucket simply points your domain to your profile page, and even changes your repositories’ clone URLs to use the domain. That’s a nice little touch and makes a lot more sense to me.

Maybe I’m making too much of this, but it seems that github is going the route of more complexity for little practical benefit - just like git. I prefer the balance of complexity and power that Mercurial (and, so far, bitbucket) provide.

Posted at 5:33pm and tagged with: Mercurial, dvcs, git, hg, programming, scm, opensource,.

Looking for a way to make a DMG for my application that would show a license and then self-extract when downloaded with Safari, I came across this helpful Apple documentation page today. It describes how you can “Internet-enable” it and links to a tool for adding a license. The latter points to the somewhat cryptic “Software License Agreement for UDIFs software development kit” on Apple’s Development Tools page.

It turns out that that SDK is really just two files, and the download weighs in at 33kB. I may not be an experienced Apple developer, but the description is very cryptic; and no program on my machine can open the other included file.

It mentions the use of ResEdit, a program I have heard about but never actually seen. So I go hunting for it, and I find ResEdit 2.1.3. In an ancient .sea.bin file. After unpacking it, it turns out to be a “Classic” app, i.e., for Mac OS 9 or before. Further digging reveals that it was last updated in August 1994 - almost 15 years ago. And it’s an OS 8 program. Oh Es Eight.

Apple’s developer tools are generally pretty good, even though there are some exceptions (Jar Bundler, for example, is nothing to write home about). But finding documentation about a perfectly useful feature in 2009 that requires a tool that doesn’t even run on new hardware anymore (and only in the Classic sandbox on PowerPCs), is disappointing.

I eventually found DropDMG, which gets the job done for $20. It’s slightly odd in the way it works, but it works, and I don’t have to build a time machine to use it.

But this kind of basic tool should really be a part of Disk Utility or Xcode or something. Or Apple needs to just link to DropDMG, instead of sending people on a trip down memory lane to the mid-90s.

Posted at 9:41pm and tagged with: Apple, Programming,.

StackOverflow is awesome. And this is a list of awesome and useful stuff for iPhone programmers.

Posted at 9:18pm and tagged with: iphone, programming,.

A brilliant tool from the guy who wrote Tweetie for iPhone (and who’s been teasing about Tweetie for the Mac for a few days now). It adds a border with reflection, a finger “circle” that indents when clicked, and even fake apps. Excellent idea, and very well done.

Posted at 10:50am and tagged with: iPhone, programming,.

Actually, a lot of it is also on Google Code. But the stuff that’s not on Google Code is on github. It’s actually surprising, given the 10 projects/lifetime limit, whereas it’s very easy to set up (and delete) new projects at github; and the free account gives you plenty of space for lots of code.

Posted at 10:06am and tagged with: git, programming, iPhone,.

I love how the iPhone community is sharing useful code. Makes me forget all those fart apps and other nonsense. Also interesting that most of it seems to be happening on github - perhaps a hint to Apple to support git in Xcode?

Posted at 8:35am and tagged with: programming, git, iPhone,.