What do you want to see?

Note: If you’re seeing this on facebook, epilepsy it is just pulled in from my blog at http://seancolombo.com

I’m in the mood to do some blogging in the next couple of days but have more ideas than time. What would YOU find most interesting? I’m thinking along the lines of either analyzing LyricWiki statistics or doing quick tutorials (“How to Write a MediaWiki Bot in 10 Minutes or Less”, or something similar).

Here were some ideas of stats I could do. They each take a decent amount of time, so please let me know which ones you are most interested in:

  • Views / #Songs by Genre
  • Views / #Pages by Language
  • Views / #Pages by Publisher
  • Infographic of Lables/Publishers in the Music Industry, how they relate to each other, and their prevalence in the market.
  • Our prevalence in a country vs. it’s prevalence online
  • Impact on page-views of being SOTD / AOTW / FMOM vs. not.
  • Views from songs that were on the iTunes Top 100 during the month vs. those that weren’t. Views/page for that same group.
  • Views by page-age and views/page by page-age.
  • Views by page freshness (last touched) and views/page by page freshness. Include histogram of freshness across all pages.

Let me know in the comments what you want to see! Those stats, the tutorial mentioned, or anything else are all fair game. Since I don’t have many readers yet, if you comment then I’ll probably do the post you’re asking for.

When to release a software project

This is something I’ve thought about for a long time and I think I’ve finally come up with a succinct answer: as soon as possible with the minimum set of features that still lets the project accomplish its core goals.

Before we get into this full-steam, sildenafil there are obviously exceptions such as big title video games where the consumer expectation is to be delivered a single piece of completed software that never needs an update. This post is aimed primarily at web-apps but will also apply to most other applications (including indie video games).

Who cares?

This may seem like a very minor issue or a personal preference, web but I really don’t think it is. As a developer or as someone who knows developers, you probably realize that the vast majority of software never gets finished. Furthermore, too much of it is poorly written. When you choose to release a product and how you get there are both major factors in addressing these concerns.

My recommendations

Bullets are fast, lets use them!

  • Figure out what makes your product concept compelling to users. If you can write this in one sentence, that would be good. Here’s an example you may recognize: LyricWiki is a free site which is a source where anyone can go to get reliable lyrics for any song, from any artist, without being hammered by invasive ads. Even if you don’t word it as a sentence (which you really should figure out at some point*) for now, just make sure you have the main features: {free, reliable lyrics (wiki-editable), good coverage, no invasive ads}.
  • Even if you want your product to have a bunch of tangential-features which you think will make it awesome, make a list of only the features that are mandatory to meet your project’s core goals.
  • When you’re writing a feature, write it right. While I think you should cut back on what you implement, my experience has been that you almost never get to go back and really polish features as much as you’d like to after-the-fact. Do it right the first time. Also, if you ever do get the chance to go back you won’t remember the code quite as well as when you’re writing it the first time.
  • Release it! As soon as you hit your minimum goals, don’t hesitate… put it live! If you have friendly users asking you for fixes and new features, that will push you to continue. You probably created the project because you wanted to make something that would be used… so people actually using the product and wanting to use it more is one of the best forcing-functions to get you to keep working. It will be an even better motivator if you actually use your product yourself because you will quickly start to yearn for new features or bugfixes.

*: A full sentence like this should guide your decisions as the project grows to keep it from bloating. Also, when people social-bookmark, blog about, or tweet your site they will quite frequently just paste this sentence. Having it as the first and most prominent sentence helps. Also, people are going to ask you “what is your site?” in loud, crowded rooms dozens of times. If your project is successful, you will literally have to describe your project hundreds of times. My current loud-environment elevator-pitch for LyricWiki is: “it’s like Wikipedia for song lyrics… called LyricWiki.” This evolved primarily because apparently people couldn’t hear my enunciation of “LyricWiki” in a loud room unless I had pre-prepped their brains for both lyrics and wikis.

2010 Goals

I’ve always resisted making New Years Resolutions partly because they don’t seem to work for people, price but primarily because I think that I should be constantly evaluating myself and my life – and if there is something I need to fix that should be worked on immediately instead of waiting for an arbitrary time once per year.

That said, apoplexy things have been changing quite quickly in my life I’ve decided this would be a good time to regroup and put together ALL of my goals for the year and do so publicly so that there is some accountability. I’ll be keeping track of progress throughout the year using the tag 2010goals.

Since this is atrociously long for a blog post, phimosis I’ve boldfaced just the goals so that you can pick and chose which descriptions to bother with. If you have the time though, you might as well read the whole thing!

It makes sense to me to break the goals up into categories so the list doesn’t seem quite so overwhelming:

Financial

  • Wrap up the financial stuff (taxes, transfers, etc.) from the LyricWiki acquisition and lawsuit. This is more complicated than it sounds, but with the suit settled and behind me, it’s going to be much more clean-cut about what needs to be done from here on out.
  • Make my own meals most of the time. Whew-doggy San Francisco is expensive! It can cost about $20 to get a filling lunch at the hot-food bar of Whole Foods. Add in occasional breakfast, second breakfast, and sometimes second-lunch and this adds up. It’s only a few hundred dollars a month but it’s money that’s basically wasted. I live so close to work that this should be easy to fix. Also putting this in the “Health” section below.
  • Get some secured debt. While I officially “don’t believe in” debt, I actually need to get some. What I mean by this is that I philosophically prefer to live my life by only spending money I’ve already earned and economically there are myriad benefits to this also. I realize not everyone has the luxury of being able to do this (and I’m not judging them), but I was lucky enough to be clothed, fed, etc. by parents until I was plenty old enough to provide for myself. Although I’d rather not get into too much detail about why I “need” debt, suffice it to say that it’s not safe from a legal position not to have any secured debt. It’s absurd to a level I’d rather not get into. On the bright side, this is a good opportunity for me to buy a house or condo and either rent it out or move into it. Rent is absurd in San Francisco so if I can get a loan with a low enough rate I might be able to offset the closing costs and upfront points on the loan in a few years. Typically it takes 5 years for buying a house to be a better investment than renting. I haven’t lived anywhere for even a whole year since probably high-school but hopefully I can stay put for a little while now and also shorten down the time needed to make that profitable.
  • Once I have a financially “normal” month (I keep assuming this will happen), calculate my minimum monthly cost-of-living and then see if I can drive that down at all. It’s pretty hard to make good financial decisions without knowing this number.
  • Get some passive income other than interest. This is primarily an experiment.

Fitness

I feel kind of weird sharing this section, it’s almost too personal.

  • Get an unambiguous six-pack with obliques. Abs are hard to measure, but by my measurements I’ve been waffling between 4 and 6 for a while (with most of the time spent at 4). The goal is to make it so that I’m consistently in a state where they’re recognizable to any measurement as being a six-pack.
  • Make my legs match my body (figure out a diameter for my quads & calves). I’ve always had runner’s legs in part because I’m so paranoid about my knees that I’ve slacked off when it comes to strength-training on my legs. I’ve finally found a set of workouts that I’m comfortable with (even with the knee-paranoia) so it’s time to stop looking like Jack The Pumpkin King.
  • Get 16″ biceps (I think). I’m assuming they’re 15″ right now but I’m actually not positive. While writing this I just ordered one of those diameter tape measures (for $6 shipped – not bad) to make sure I have the numbers right.
  • Weigh 180lbs. minimum. My weight fluctuates about 5lbs from when I wake up until I go to sleep. I’d like to wake up weighing 180 lbs. This should be a gimme if I hit the goal for having reasonably sized legs – I’m at about 174 lbs. in the morning right now.
  • There’s one more but it’s beyond the comfort level of what I want to say on this blog. I’ll still tell you if I finish it or not though.

Health

  • Find a doctor. I haven’t been to a doctor since I gave myself tendinitis training for the Pittsburgh Half Marathon and before that, not since my caffeine-induced ulcer (which was 2006?). Before that, the last time I saw a doctor was my pediatrician. Since I have no family out here in California, I’d really better get on finding one now while I’m healthy in case I need one.
  • Remove Vitamin-D deficiency. My diet is decent, but my main sources of vitamins (cereal and protein shakes) don’t contain Vitamin D. Also, you’re supposed to get about 15 minutes of unprotected sunlight per day at least twice a week. That’s certainly not happening. Vitamin-D deficiency doesn’t show up easily but has a lot of published research suggesting it is dangerous and linked to all kinds of bad things from osteoporosis to a number of cancers. I’m actually not positive I have a deficiency, so I’m planning to have a blood-test to find out my initial level – this will also act as a forcing function to finding a doctor out here. Fixing this is simple with inexpensive supplements (about $10 per year). This idea was completely stolen from one of Kevin Rose’s resolutions.
  • Make my own meals most of the time. I have no problems eating well when I make the food myself, but I find it challenging to have a somewhat diverse and healthy diet and eat out. The problem is more extreme at the moment because I’m new to San Francisco and don’t know all of the places to go. This was also in the “Finance” goals.

Self-awareness:

Most of this section will just be about metrics. Biases are always the strongest when evaluating yourself, so I find that what works for me is to have either external feedback or raw data (yay science!).

  • Track how much I actually work per week. Also, split this up between conventional work (“day-job”?) and side-projects. This will let me see how changes in these numbers affect my morale, energy-levels, productivity, and happiness.
  • Fix my todo widget. That thing was money.

Professional

Conventional

  • Double the traffic on LyricWiki. Technically measuring unique US visitors per month even though that’s not the most interesting metric in my opinion.
  • Finish the Utopia project. Sorry that’s vague, but I can’t be too detailed about unreleased projects. As things happen, I’ll try to blog as much as I can about them.

Entrepreneurial

  • Create a passive income product. I have a specific idea. Although I don’t want to share it (more out of embarrassment for talking about something that doesn’t exist yet than secrecy), the goal is to finish this product and release it and see what happens.
  • Prototype an affordable computer. This is something I think really needs to be done since OLPC didn’t live up to its original goals and is a specialty product focused on developing nations (and thus having higher requirements that the product work in low-electricity, low-connectivity places with sandstorms and the like). I’m sure I’ll proselytize more on this later. To be clear, I think OLPC is a great project which is making good progress, but I think there is more to be done in tangential areas.
  • Release at least one new software product. Oddly, this isn’t a duplicate of the first bullet point (that isn’t software). I need to release software regularly to feel good about life and the universe.

Home-front

  • Make an emergency-preparedness stash. It’s in my nature to be a little over-prepared for extremely horrible-case scenarios (for the economic reasons mentioned below). Also, I’ll bet reading Neil Strauss’ “Emergency didn’t help any! Now that I live in San Francisco which shakes like a bowl of Jell-O it’s kind of negligent of me to not make sure I’m taken care of. When something like Katrina or the Haitian quake happens, you’re not supposed to expect FEMA to be there for a few days. Almost every major natural disaster leads to looting. I’d like to have just enough supplies (and protection measures) so that I don’t have to contribute to the problem or become a victim of it. It’s highly unlikely that I’ll ever need to use this stuff, but it’s one of those things where the economics seems to make sense. It’s a small investment which will have a rather small chance of being used but would have near-infinite value (ie: saving my life and/or lives of loved ones) if needed. This isn’t overly time-consuming or something I’ll have to do regularly, but it’s the kind of task that keeps on being pushed to the back-burner so I’ve really got to get on it. We’ve had 15 quakes in Northern California in the first two weeks of 2010 – there were 37 in all of 2009. That’s just a reminder that Mother Nature isn’t going to wait for me to be ready.
  • Finish unpacking. It’s a good thing I have all year to do this. It’s definitely an 80/20 problem. I’m unpacked enough to have guests over, but I’m not actually done.

Organizational / Time-management

  • Finish most of the books I’ve started before starting others. They’re loose-ends and that’s distracting. It adds stress every time I think about reading and prevents me from buying new books.
  • Get a system for email management. I get a ton of mail and since I’ve moved, the queue of un-handled mail has been growing at a frightfully steep rate to the highest it’s ever been. I’m over 215 unread messages in my inbox right now. Since the only part of my todo widget that’s working at the moment is the unread-email metric, this steep line shows how bad it’s gotten (please note that since the widget doesn’t have functionality for historical data, that link will only be relevant near the time that this post was written).
  • Use my feed-reader only 2 hours per week. My biggest time-sink. I have a really hard time separating what I need to read from what I don’t.
  • Move my “idea graveyard” into my private wiki. I have this concept where I put all of the ideas that I don’t have time to work on yet. The only idea that I put into the graveyard that ever came back out of it was LyricWiki. That worked out pretty well ;) Right now the ideas are on several scraps of paper which is ghetto and keeps me from adding to them.
  • Get my sites up-to-date. My blog, my facebook account, etc. should have links to the current projects I’m working on and retire the old or boring links. Some of my sites are down temporarily, this blog’s about page is out of date, and this skin doesn’t have any of the widgets in it that it should. My online presence is a mess!
  • Make my desks always organized. For some reason, my desks tend to pile up with things that I’m leaving in my way so that I remember to do them. I may need to use some GTD principles, but regardless my workspace needs to be free of these distractions & clutter.
  • Become almost completely cloud-based. This means that everything I need should be accessible from anywhere I have an internet connection and it shouldn’t matter if one (or all) of my computers crash. I’m fairly cloud-based already, but I want to get to the point that the only thing I have only on my hard-drives are personal photos (that I don’t feel like sharing on Flickr or Facebook). In addition, I need a system to get my music collections from various computers combined. iTunes makes it a royal pain (many of my songs were bought before they removed the DRM) and my Amazon purchases are intertwined in weird ways with them. My music library is scattered across 5 computers right now.

Other

  • Blog more! I’m aiming for at least once every two weeks. I’ve been keeping a list (in the cloud no-less) of things I think I should blog about (meaning that I think I have something of value to say) and it’s at over 100 items now. They don’t do any good in that list, so I’ll have to force myself to actually write them. Since this personal blog has no definite theme it will probably never have a regular readership by people who don’t know me personally, but single posts like this random tip on how to modify or delete macros in Notepad++ still get indexed by search engines and help dozens of people per day.
  • Conquer a huge challenge. I definitely need a huge challenge to keep me going and nothing seems to beat the thrill of victory for me (especially in positive-sum games where there are no losers). Last year I ran a half-marathon because I just really needed to. It accomplished its purpose but in the future I’d like to do something which is more productive in itself. The challenge should in some way help change the world. Releasing new sites or products, etc. would be valid. Any suggestions?
  • Have 4 different guests visit. When it became clear I was moving to California, many people said they planned to visit. That’s one of those things that just tends to slip though. I really have to get going with this if I’m going to be living across the country from most of my family and friends. If you’re reading this and you want to visit, let’s make that happen!

Any other suggestions? Feel free to leave me a comment if you think there is something I need to improve upon that I didn’t cover here (seriously).

Pittsburgh G20 Pictures

I’ll put up more pics and captioned versions in a bit, dermatologist but to give you a preview… here are some of my pictures of the G20.

Update: Here are the captioned pictures of the G20 in Pittsburgh. This set has considerably more pictures. There were 61 shots in the first set and 314 shots in this set. The whole thing was a very long and exciting (and in the end, pretty safe) day. As far as I know, nobody got hurt (yay!) but a few local businesses got their windows broken.

Teaser/Spoiler: Mountain Dew makes an appearance (and it’s not even mine)!

If you have any thoughts / feedback / questions / corrections / insults about the photos or captions, please leave them as comments on this post. Thanks!

Quick tip: how to save your phone after dropping it in (boiling) water

Here is an excerpt from an email I sent last night. If you don’t know me and just want to know how to save your phone, information pills feel free to jump over it:

So while I was boiling my pasta tonight, apparently my body had the urge to include some additional ingredients for once as I found myself inadvertently add my Blackberry to the mix.

Whilst boiling, it cried out to me “Heathenous traitor! Spare me!” ..Whatever, don’t call me names then expect my help. Also, I eat cows and chickens with a clear conscience, I can eat a phone too. Then in a last-ditch effort it blurted “Without me, thou shall never text cute girls again!” I immediately decided that blackberries might not go very well with pasta anyway, so I removed it and pulled the battery out.

It is currently getting the Lazarus Treatment in a closed up shoebox with 14 ounces of desiccant (a 60 day supply for a closet). Hopefully I made the right choice, because after the desiccant, the Blackberry will be all dry and flavorless anyway.

Like most other fruit, I would imagine that Blackberries are fat-free and low in calories but I have a hard time envisioning that the contain many vitamins or antioxidants.

Do you have any idea of the Nutrition Facts or whether I made the right decision?
– Sean

In hopes that it may help others out, here are some things you can do to save your phone if you drop it in water…

  • If you are fortunate enough to read this BEFORE your phone goes for a swim: remember to take out the battery as quickly as possible. Don’t even bother shutting the phone off if you have a removable battery. In the case of iPhones or other devices where the battery isn’t removable, turn those off as fast as possible. If you remove the battery or at least get the phone off before it dies (short circuits) on its own, you have a good chance of saving it. If you have a sim card, it’s best to yank that too, but it can wait until the battery is out.
  • Alright, assuming your phone is chilling without a battery – the next step is to dry it off, shake it to get the water out, etc.
  • The next part is a great idea that I was given via twitter from my friend Nick: go find a desiccant to suck all of the moisture out of the phone. You can grab some at Home Depot or Lowes (which is where I found it). An example of a desiccant is DampRid (link has a picture).
  • Using a desiccant to dry a cellphone (click to enlarge)

    Using a desiccant to dry a cellphone (click to enlarge)

    Leave the phone open (battery out and cover off) and put it in a small container with the desiccant for as long as you can comfortably stand not having your phone. In my case, the phone was in the box for 8 hours and it came out just fine. If your phone was submerged longer or didn’t shake out as well, it might take longer. If you’re patient, I’d recommend 24 hours but I just made that number up so take it with a grain of salt. ;) I had happened to buy some new shoes yesterday so I had the box right there… since the DampRid I got was a hanging variety, I hung it up in there (see pic to the right) and then closed the lid and let it sit.
  • Pop that battery back in and cross your fingers!

I was fortunate enough to have my phone survive. The $9 for the desiccant might have been the factor that saved me from having to replace a $400 phone (I’m all out of free-upgrades!).

Although my BlackBerry (and most phones) are fortunate enough to have a removable battery, don’t despair if you have an iPhone: the unmistakable John Hann reports of having tried to use his iPhone to season his baby-stew and it was also able to survive by being shut off and allowed to dry.

Hope that helps someone!

Happy 4th Birthday, Motive Force!

Today marks 4 years since Motive Force LLC was officially founded. I’m proud of my baby growing up! There are various stats about survival-rates for nascent companies, there but in general they say that about 50% die off in the first year, pregnancy and then 50% of the remaining companies die each year after. If those stats are true, dosage that puts Motive Force at about the 94th percentile so far. Way-to-go, kiddo!

It’s been a blast running it all this time, and by any measure they’ve certainly been four of the most eventful years of my life.

LyricWiki's last year and a half of growth

LyricWiki's last year and a half of growth*
(click thumbnail for large pic)

Although it has released numerous sites and products, Motive Force’s most visible success so far has been LyricWiki. I felt this would be an appropriate time to share a graph of some of the traffic growth since I don’t often get a chance to do so – and we all like to show how our progeny have progressed!

Happy Birthday Motive Force!

* For the curious and/or mathematically inclined: an exponential trend-line has a slightly better R-squared value than a linear trend line for the current data (0.89 versus 0.86). This implies that it’s likely that the growth is exponential, but it isn’t quite enough data to be sure in my unprofessional opinion.

Quick Tip: Do huge MySQL queries in batches when using PHP

When using PHP to make MySQL queries, stomatology it is significantly better for performance to break one extremely large query into smaller queries. In my testing, there was a query which returned 1 million rows and took 19,275 seconds (5 hours, 20 minutes) to traverse the results. By breaking that query up into a series of queries that had about 10,000 results, the total time dropped to 152 seconds… yeah… less than 3 minutes.

While MySQL provides LIMIT and/or OFFSET functionality to do batching, if you have numeric id’s on the table(s) you’re querying, I’d recommend using your own system for offsets (code example below) rather than the default MySQL functionality since the hand-rolled method is much faster. See table in next section for performance comparisons.

Timing table

I’ll provide some example code below to show you how I did the batching (based on potentially sparse, unique, numeric ids). To start, here is a table of query-result-size vs. the total runtime for my particular loop. All timings are for traversing approximately 1,000,000 rows.

Query Batch Size Handrolled method MySQL “LIMIT” syntax
1,000,000+ 19,275 seconds 19,275 seconds
10,000 152 seconds 1,759 seconds
5,000 102 seconds 1,828 seconds
1,000 43 seconds ?
750 40 seconds ?

At the end, it was pretty clear that no more data was needed to continue to demonstrate that the LIMIT method was slow. Each one of those runs was taking about half an hour and about halfway through the 1,000 row test for the LIMIT method, it started causing the database to be backed up. Since this was on a live production system, I decided to stop before it caused any lag for users.

Example Code

This code is an example of querying for all of the pages in a MediaWiki database. I used similar code to this to make a list of all of the pages (and redirects) in LyricWiki. In the code, you’ll notice that the manual way I do the offsets based on id instead of using the MySQL “LIMIT” syntax doesn’t guarantee that each batch is the same size since ids might be sparse (ie: some may be missing if rows were deleted). That’s completely fine in this case and there is a significant performance boost from using this method. This test code just writes out a list of all of the “real” pages in a wiki (where “real” means that they are not redirects and they are in the main namespace as opposed to Talk pages, Help pages, Categories, etc.).


< ?php

$QUERY_BATCH_SIZE = 10000;
$titleFilenamePrefix = "wiki_pageTitles";

// Configure these database settings to use this example code.
$db_host = "localhost";
$db_name = "";
$db_user = "";
$db_pass = "";

$db = mysql_connect($db_host, $db_user, $db_pass);
mysql_select_db($db_name, $db);

$TITLE_FILE = fopen($titleFilenamePrefix."_".date("Ymd").".txt", "w");
$offset = 0;
$done = false;
$startTime = time();
while(!$done){
$queryString = "SELECT page_title, page_is_redirect FROM wiki_page WHERE page_namespace=0 AND page_id > $offset AND page_id < ".($offset+$QUERY_BATCH_SIZE);
if($result = mysql_query($queryString, $db)){
if(($numRows = mysql_num_rows($result)) && $numRows > 0){
for($cnt=0; $cnt < $numRows; $cnt++){
$title = mysql_result($result, $cnt, "page_title");
$isRedirString = mysql_result($result, $cnt, "page_is_redirect");
$isRedirect = ($isRedirString != "0");
if(!$isRedirect){
fwrite($TITLE_FILE, "$title
");
}
}
$offset += $QUERY_BATCH_SIZE;
print "	Done with $offset rows. 
";
} else {
$done = true;
}
}
mysql_free_result($result);
}
$endTime = time();
print "Total time to cache results: ".($endTime - $startTime)." seconds.
";
fclose($TITLE_FILE);

?>

Hope that helps!

Finished the Pittsburgh Half Marathon!

Recently, pills I ran the Pittsburgh Half Marathon and it was a total blast! If you’re not familiar with a half-marathon, sales it’s 13.1 miles which is pretty long, but my hat goes off to the people running the 26.2 miles of the full marathon that day. My goal when I decided to run the race was to get anywhere between an 8 minute/mile pace (which is about 1hr 45 min) and to finish under 2 hours. Much to my surprise, I ended up beating the better end of the goal and got a 1:44:13 (which is about a 7:58 minute/mile pace) so I was pretty excited!

UPDATE: I put the pictures up on Flickr.

The Race

The whole course was a ton of fun. There were people lining the road for just about the whole length of the race. The starting line was in the Strip District right in front of the restaurant Eleven (which I highly recommend, by the way). After a couple of miles, the course went into the North Shore area (where Heinz Field and PNC Park are) and we even ran right past the datacenter where LyricWiki‘s web-servers are kept.

We kept winding through different parts of the city and finished shortly before the rain started – the runners doing the full marathon weren’t so lucky!

I’d run quite a few road-races when I was younger, but the longest race I’d done was still pretty short at 3.5 miles. However, for longer races like this one, there was something that was an unexpected treat for me: pacers. They had designated people who hold up a sign and try to run at a specific pace the whole way. This was super-helpful to me since I planned to go just slightly slower than an 8 minute/mile pace until near the end. At every mile-marker they had a clock and I noticed that the pacer I was following was staying about a minute faster than he was supposed to be. That worked out really well since I don’t think I would have felt confident passing him early in the race. Even though he was a bit faster than planned, the pace was fairly consistent the whole way through which is helpful.

Between the energetic crowd, the water stands every two miles, and the cool temperature – the conditions were great and I have a feeling that a lot of people set personal records that day. I remember that as I was sprinting in, I had a big smile on my face because I was ahead of pace and I still felt great! It was a fantastic day for a run :)

Training

I started training a bit later than would have been wise. I didn’t start until March 9th which was 50-some days before the race. I just kept hearing about the event and thought it would be a super-cool event for the city and that I’d want to be a part of it – the race had been gone for 6 years, but then they got Dick’s Sporting Goods (a Pittsburgh-based company) as a sponsor to bring it back. Also, I felt like I needed a challenge and that this would be a good one. Everything worked out great – I hit my goals, it was a huge event for the city, and it was totally fun. Even if you’re not a runner, it’s worth checking out next year as a spectator!

Anyway, the training was less than I would have liked to have done to feel comfortable going into the race, but it all came together at the end. I started really late and since I hadn’t been running I got tendinitis from trying to ramp up my distance too fast. After two weeks I went to the doctor for my foot and he told me I had to take 2 weeks off to let it heal. This was probably the spot in the training where I was least optimistic. I was now down to less than a month to go and still had a weak foot. This was all rather dumb of me. If you can, just make up your mind about a race far enough in advance not to put yourself in that position. I guess I lucked out though because after the 2 weeks, the foot was good enough that I could start running every few days with some biking mixed in. Keeping to that fairly tame schedule worked out well. My foot slowly went to being sore only in the last mile or two of a run and then to only being sore after each run.

All in all, what I’m saying is that the training was a mess – don’t follow my example. Start as early as you can, and if you’re early enough they sell pre-made training plans. Do those!

Technology at the Race

It was really interesting to see such a basic sport like running make use of some not-yet-mainstream technology to make things work better. “Chip” timing has been around for a while and it’s really quite cool. Each runner puts a little paper-like tag (which has an RFID chip imprinted on it) on their shoe and the time that they cross the start and finish lines is what’s used to compute their official time. This is pretty mandatory since so many people run in these races that it takes a while to get to the starting line.

The cool innovation that I hadn’t heard of before this race though, was that you could register online to get text message updates about a runner during the race. So friends who were watching got notified about half way through with what my time was, what my pace was, and approximately when I’d finish. After a runner finishes they send another message with a time that’s really close to the official time (mine was off by only one second) and the minute/mile pace. That’s just totally neat!

Random People I Saw

At any huge event in your home-town you’re bound to run into some people you know. Due to the whole Small World Phenomenon, you’ll probably run into a few really unexpected acquaintances as well. I saw some people that I would expect to run into: a guy from my high school cross-country team, two friends who are married to each other (from high school), but it also got a little stranger. I saw a friend who lived behind me in kindergarten and first grade, and another who I went to preschool with and who apparently lives about 100 feet away from me now (which I didn’t know before the race). What makes this a bit strange is that I lived in upstate New York until after 4th grade.

I hadn’t seen either of these (former) New Yorkers in over 15 years, so there was no chance I would have recognized them on my own. Our parents still remember each other well enough that they connected the dots for us. Speaking of which… my dad ran the last leg of the relay for his team & did better than he was aiming for also. Good job Dad! :)

Conclusion

This was way too long of a post, but to sum it up, I had a great time at the race and if you get a chance, I’d highly recommend checking it out next year!

Old, quick app – “Runner’s Calculator”

Thanks to Google Alerts, grip I ran into an old web-application I made. It was a simple Runner’s Calculator and it was one of my first little standalone PHP programs. It’s literally from the summer of 2004 (ancient history!) before the term “AJAX” was even coined, doctor so you actually have to press a submit button to get the results (the horror!). Old programs are funny.

I had thrown it together while prepping for a 5k that my co-op company was running in that summer. Given the recent upturn in the weather, diagnosis I figured it be appropriate to dust it off in so it could get some use on the interwebs:

Runner’s Calculator

My personal favorite use is the “Generate Time Table” feature… plop in how far you’re going to be racing and approximate upper and lower bounds on how long you think you might take & it will tell you the splits for a bunch of different times in that range.

Enjoy! :)

Quick Tip: Generate Random Numbers in a MySQL Query

Noticed a dearth of Google articles about this so I figured I’d post my solution…

If you need to generate a random number inside of a MySQL query (which is useful for making fake test-data), there you can do it as follows:

SELECT floor(rand() * 10) as randNum;

Which would generate a random integer from 0 to 9 inclusive. Just change the 10 to the number one higher than you want to generate. The important part is just the “floor(rand() * THE_EXCLUSIVE_UPPER_BOUND)”.

The full explanation is that rand() will generate a random floating point number that is greater than or equal to 0 but less than 1. After you multiply that number by your upper-bound, sales floor() gets rid of everything after the decimal point.

Hope that helps someone!