The other day I was wondering if I'd hit the age where there were as many people younger than me in the world as older than me.
In other words, I wondered what the median age of the world's population is. Yesterday, I was talking to our Chief Marketing Officer about it and we decided to look it up.
Turns out I passed it five years ago. The median age is 28.
The source is the United Nations Department of Economic and Social Affairs/Population Division in their World Population Prospects.
by : Created on Feb. 28, 2007 : Last modified Feb. 28, 2007 : (permalink)
The Canon EOS-1D Mk III (via) is due out in a couple of months. I'm very tempted to start saving for it.
I confess I was a little disappointed it's not full-frame but the other specs are amazing.
by : Created on Feb. 25, 2007 : Last modified Feb. 25, 2007 : (permalink)
The web panel went well. Rather than me trying to remember what I, or anyone else said, I direct you to James Bennett's excellent notes.
by : Created on Feb. 23, 2007 : Last modified Feb. 23, 2007 : (permalink)
I'm sitting in the plenary at PyCon where Ivan Krstic is giving an amazing talk about the One Laptop Per Child project.
Even though the laptops run Linux, most of the "operating system", including things like the filesystem, are written in Python. In fact, the goal is to write absolutely as much as possible of the operating system in Python.
Sounds like the Cleese vision has been fulfilled in a way I never could have imagined!
by : Created on Feb. 23, 2007 : Last modified Feb. 23, 2007 : (permalink)
In just over an hour I'll be heading off to Logan airport to catch a flight to Dallas for PyCon.
I'm staying at the Courtyard Dallas Addison/Quorum Drive. I won't be arriving there until after 11pm but, if you're around, email me.
by : Created on Feb. 22, 2007 : Last modified Feb. 22, 2007 : (permalink)
What do economics, computational neuroscience and differential geometry have in common?
Well, besides all being interests of mine, they also all happen to be the three topics in the PyCon session on science applications I just volunteered to chair. When I saw the topics and that they didn't have a chair, how could I resist?!
It will be on next Saturday afternoon and I'm looking forward to it a lot!
by : Created on Feb. 17, 2007 : Last modified Feb. 17, 2007 : (permalink)
Random interesting computer-related result:
People who prefer reddit to digg are 2.4 times more likely to prefer PostgreSQL to MySQL but people who prefer digg to reddit are 2.2 times more likely to prefer MySQL to PostgreSQL.
Random interesting non-computer-related result:
People who prefer Obama to Hillary are 6.0 times more likely to prefer letterbox to full screen but people who prefer Hillary to Obama are 50% more likely to prefer full screen to letterbox.
by : Created on Feb. 16, 2007 : Last modified Feb. 16, 2007 : (permalink)
I've been playing around with Google Code Project Hosting for one of my smaller projects and it's pretty impressive. Project Hosting basically provides file downloads, a wiki, issue tracking and subversion.
The issue tracking is tag-based but with a little bit of structure to the tag to allow the tags to act like values of arbitrary fields. So far, this works well—probably the simplest way to get extensibility I've seen in an issue tracking system.
It does miss some features that I really like from Trac. There isn't an equivalent to the timeline to see project activity. There's no way to browse different versions of files or do diffs. Hopefully these features will be added in the future.
I'm not necessarily ready to move all my self-hosted projects there, but I'd certainly chose Google Code Project Hosting over SourceForge in an instant.
However, there is one major annoyance. Project Hosting requires you to have a GMail account, not just any old Google Account. This by itself would not be a problem, but it uses the Google Account system for authentication. So to use Project Hosting, you have to log into Google Accounts with your GMail address. This is very annoying if you use other Google services under a non-GMail Google Account. I find myself constantly having to sign out and sign in again, sometimes even just switching between browser tabs that are open on different services provided by Google.
by : Created on Feb. 15, 2007 : Last modified Feb. 15, 2007 : (permalink)
I added a calculation of chi-squared to Cats or Dogs. This gives it a certain statistical honesty at the expense of some of the fun (because most of the funny results the site generates are not statistically significant and you are now told that). Nevertheless, some of the results are still surprising.
by : Created on Feb. 10, 2007 : Last modified Feb. 10, 2007 : (permalink)
Okay, just under four hours later, here it is...
Have fun! I look forward to the results.
by : Created on Feb. 9, 2007 : Last modified Feb. 11, 2007 : (permalink)
A few years ago, I read about a phenomenon that I always wanted to test for myself, but I could never work out how.
Well, tonight, over dinner, I came up with an idea for a fun little website that would test for said phenomenon and also a bunch of other interesting stuff.
So armed with half a bottle of Coke Zero and a can of Red Bull, I'm going to spend this evening coding it up.
What is it? Well, you'll just have to wait a few hours and see :-)
by : Created on Feb. 9, 2007 : Last modified Feb. 9, 2007 : (permalink)
Congratulations to the team behind Yahoo Pipes. As I've said to a lot of people recently, I still think Yahoo is a very exciting company to watch.
One thing I'd like to see possible with Pipes, which I couldn't work out how to do in the 10 minutes I played with it, is reading plans of the sort I described back in a post in 2004.
I've thought about reading plans like this for the Poincare Project. Basically, each reader gets a feed specific to their start date which, starting from the beginning, just adds a new item at some set interval, either daily or weekly.
Recently it occurred to me that this would also work for things like running plans as well (the "5K in 5 weeks" sort of thing).
So the pipe would take as an input a feed, a start date and an interval and introduce the nth oldest item in the feed on day = start date + (n -1) * interval. The input feed would have to be a complete feed, not a sliding window.
But I couldn't see quite how to do this in Pipes as it currently stands.
Of course, one could whip up a quick website that did the same thing too. Hmm, maybe someone already offers this service.
by : Created on Feb. 9, 2007 : Last modified Feb. 9, 2007 : (permalink)
My flashcard site, Quisition, has now been launched. Actually, it's been available for the last week but I wanted to test things out a little before announcing anything publicly.
You can sign up at:
http://www.quisition.com/
As of a couple of days ago, support exists for user-contributed cards, although no bulk import yet. That will come shortly.
Implementing this with Django has been a delight. Like Python in general, using it a combination of productive and fun that makes you just want to come up with more ideas you can develop with it.
by : Created on Feb. 5, 2007 : Last modified Feb. 5, 2007 : (permalink)
I'd been putting off booking PyCon because I wasn't sure which of three continents I was going to be on that particular weekend.
But now that I'm fairly confident I'll be in the US, I've registered for PyCon, booked my flight and hotel.
See you there!
by : Created on Feb. 3, 2007 : Last modified Feb. 3, 2007 : (permalink)
I've been using Django's templating language a lot recently and it pretty much hits the right 80-20 point for me. In general, a templating language with basic conditionals and for-loops is a great way of specifying how a complex data structure is to be serialized as a string. It certainly beats writing generation code.
But that got me thinking—if a template can take the place of generation code to go from abstract data structure to surface syntax string, can it also take the place of parsing code to go from surface syntax string to abstract data structure?
Obviously some templates are irreversible but a good number of them should be usable to driving parsing.
So imagine you have a data structure which is a list of people with a first name and last name and you have a template like this (in Django's templating language):
<people>
{% for person in person_list %}
<person><first>{{ person.first_name }}</first><last>{{ person.last_name }}</last></person>
{% endfor %}
</people>
Note that I've deliberately chosen element names which differ from the names used in the data structure.
It would be relatively straightforward to create a person_list data structure from an XML instance using this template in reverse.
One challenge is that there's no indication of whether the person variable is a dictionary or an instance of, say, a Person class with attributes first_name and last_name.
Has anyone done this sort of thing? I can't imagine it's anything new.
Note that, despite the example, it's not restricted to XML, so this isn't just an XML data binding. It could be used for many appropriate file formats. vCard comes to mind, for example.
by : Created on Feb. 3, 2007 : Last modified Feb. 3, 2007 : (permalink)