the path to beauty is surrounded by thorns

do what you love

figure out what you enjoy and do that.  If money is what motivates you start planning for a miserable life.

When you start trying to do what you think you enjoy, you are bound to come across many, many barriers.  Some of those will seem insurmountable.

The key is, to realize the barriers are actually just in your head.  Once you realize everything is an illusion, you can move forward not only with ease, but with calmness in your heart.

If you can’t get past the illusions, go back to the step where you plan for a miserable life.

Apple Developer

Adventures in Objective-C: Categories

Every year Apple has been making Objective C and Xcode easier and easier to be picked up by developers like me – coming from a background in high-level OO languages (ActionScript, Java) with little to no experience in C – people for whom terms like “memory management” evoke images of creepy dark things crawling from under the shadows of our beds at night.  Still, Objective-C is basically an OO scaffolding to make C into an OO language, and as we have been learning through our development projects, there is plenty of history (or “baggage” as one of my CS engineer colleagues likes to say – he has the C background from back in the day that I don’t) as a result of C being a very old language.  The end result is, while we are able to jump in and crank out working applications, there seems to be always plenty to learn – there are lots of quirks and new twists that someone like me just isn’t used to.  The one I want to highlight today is Categories in Objective C.

Categories are the easiest way to modify existing classes in Objective C. And why not just extend the class like we would in any other OO language? Here’s why (from the apple docs):

Furthermore, it might not make sense to subclass the existing class, because you may want your drawing behavior available not only to the original NSString class but also any subclasses of that class, like NSMutableString. And, although NSString is available on both OS X and iOS, the drawing code would need to be different for each platform, so you’d need to use a different subclass on each platform.

Here’s the link to the full article in the Apple docs.


**Edit: comment from Luis Solano  over twitter:

@flexRonin nice. I’d strongly suggest to always prefix methods in categories with a three letter prefix to avoid collisions.

wide tires

go wide

Tires: How Wide is too Wide?

A placebo effect is very powerful. I know that when I raced, I loved riding my bike with its superlight wheels and hand-glued tires. How much was the wheels, how much the tires, and how much the fact that I rode the race wheels in races, when I had rested before, was excited and generally in optimum shape?

Jim Papadopoulos developed a spreadsheet that calculates bicycle acceleration, so it should be easy to get some realistic values for power output, wind and rolling resistance and figure out how much faster lighter wheels accelerate.

In the mean time, the stories of professional racers trying and rejecting bikes with lighter wheels, like Saronni in the previous post, might be powerful anecdotal evidence. After all, the easiest way to make wheels lighter is to make them smaller. The current minimum wheel size is 550 mm, and a 700C wheel is more than 100 mm larger than the rules require. If it matters as much as most people believe, why hasn’t anybody taken advantage of this, and why have those who tried returned to standard wheels?

Reminds me of a certain 80 mile ride where a certain rider with slick carbon rims and hand-glued tubulars got a flat.  Took them quite a long time, effort, and two people to change the tire.

ProForm Le Tour de France trainer

Hacking the ProForm Tour de France (part 1)

I have the version 2 of ProForm’s Le Tour De France bike trainer.  Unlike a lot of other folks who have been posting about this bike since v1 I haven’t had any mechanical problems with the bike, to date, but then again we’ve only put around 200 miles on this trainer in the two years we’ve had it.  I primarily like to ride outdoors on a real bike, and to date I really hate riding on any type of trainer. Still, will heavy snow fall outside I thought it was about time to start using the trainer more regularly.  Part of why I chose the TDF was it’s advertised integration with google maps, being able to plan actual routes anywhere in the world online and then downloading the route to the bike, and then seeing the actual road and scenery as you ride using google street maps.

As it turns out, the ProForm TDF uses for all its google maps integration and route access. basically is a joke – the only way they stay in business, I think, is they have somehow managed to broker deals with various hardware vendors, like ProForm.  Otherwise, basically they charge a steep premium membership fee and offer far, far less than what you can get for free from many other cycling & running sites, such as Strava, Garmin Connect, MapMyRide, and others.

Furthermore, users of can neither import ride data from a Garmin or other GPS device or a file (TCX, GPX, etc), nor can they export anything from the site, either.  That’s an essential, bare-minimum feature that every other fitness site has.  The only way, therefore, to create a route to use on your equipment, then, is to go to and slowly, painstakingly draw the actual route on a map.  And I do mean slowly – their route mapping software seems quite inefficient as it suffers from significant lag.

So I got to thinking, the TDF itself is a great piece of equipment, it even has a built in power meter so I can use it for my max threshold test…it would probably be well worth my effort and time to try to hack this thing so I can get at the ride data and export it to Strava, at the very least.

To that end, so far the only reference I’ve found online where anyone else has hacked it was this one by Bruce Potter:

If anyone has any additional info on hacking TDF, I’d love to hear about it.  Meanwhile I thought I’d start tracking my own attempts on this blog.

So, first off, I have been having an issue trying to get the firmware to update.  When I first got the trainer, I was able to update the firmware, but for about the last year or so I haven’t been able to get it to update.  I’ve filed a tech support request about this with ProForm, we’ll see if they respond or not.  As a side note, I found it interesting (and dismaying) that there is no link from the ProForm site to their support site.  Luckily I found the manual to my TDF, which lists their support site,  Then again, that site is also pretty useless, unless you need to download the manual or order parts.

Even though the TDF was saying it was connected to my WiFi network, I thought maybe the issue was something in the WiFi configuration.  I was able to connect to and login from the TDF, but I also couldn’t download my ride – it would get stuck on “Downloading: 0%”.  Setting up the WiFi on the TDF is a ridiculous pain, as the screen is not a touch screen and the interface is quite tedious to use.  However, I did discover this gem – the TDF has a WPS setup option.  Now, I have a Mac network, and a Verizon FIOS router.  I only use the Verizon router for my DNS, but the WiFi is all through an Apple Airport Extreme.  Apparently, the Airport Extreme supports WPS, which before tonight I had no idea about. I’ve created a separate post here explaining how to use WPS with the Airport Extreme.  Anyway, long story short, after doing the WPS setup, I was now able to successfully download a planned ride from onto the TDF.  However, still no luck with the Firmware update – it just sits there and never downloads any update.  Nor does it tell me what the latest firmware version is – I have no idea if my firmware version (2.0.30) is the latest version or not, nor could I find an online resource anywhere that states what the latest version is.

Anyway in my next post on this topic I plan to attempt to get to the ride data on the machine from my mac…



Apple Airport Extreme

using WPS with Apple AirPort Extreme

I had no idea until tonight that Apple’s Airport Extreme has built-in support for WPS.  WPS is a service that lets you automatically setup a device such as a printer, or, in my case, a ProForm Le Tour de France exercise bike, automatically with your WiFi network.  On the device you are trying to setup, you may need to select a WPS setup option.  On your Mac, go to /applications/utilities and find the AirPort utility application.

WPS Setup

click on the image of your AirPort extreme base station, then go to the menu up at the top of the screen and select BaseStation -> Add WPS Printer

After running it, click on the image of your AirPort extreme base station, then go to the menu up at the top of the screen and select BaseStation -> Add WPS Printer.  Yes, it says “printer” but it should work for any WPS device – it worked fine for my TDF.

WPS setup

WPS setup

Square Wheels

The idiocy of technical interviews

Some time ago I read this post, “I will not do your tech interview“.  It’s an awesome commentary and I agree with it wholeheartedly.  As a consultant, I have to do a lot of interviews, and many times it’s hard to know a lot about the company who is going to interview me, or their corporate culture, or what to expect, ahead of time.  Hence, for me interviews are a two-way street – I am as much interviewing my potential client, as they are interviewing me.  Today I had a particularly hilarious interview.  The interviewers started off the interview by telling me their names and then proceeding to read from a grocery list of academic text-book questions.  That alone made me do a double take, even though I had been warned this would be a ‘technical interview’.  What, you don’t want know jack about me?  How are going to know if I’m pleasant to work with, or what my personality is like?  If those things don’t matter to you, what kind of insane work environment do you guys have?

At the end of the interview, which was for a Flex project, I asked them, ‘so, are you guys using the latest Apache Flex build, or what version are you using?’.  One of the guys proceeded to give me another grocery list – this time of all the technologies they are using, from Ruby, to MySQL.  Hm.  Let’s try that again.  ‘WHAT VERSION OF FLEX ARE YOU ACTUALLY USING?’

He said, ‘oh we’re using the old (Adobe) one, because Apache Flex doesn’t support AIR’.

WOW.  Can you spell M-O-R-O-N?  Never mind, that Apache Flex has always supported AIR from day one, and that if it didn’t it would be like Microsoft not supporting Windows anymore.  Any monkey who bothered to even visit the Apache Flex web site would realize that.  So, what you’re telling me, is that at your company, where you’re building ‘enterprise level’ projects in Flex, nobody in your team has bothered to keep up with the current state of affairs of Flex itself, and you’ve made serious architectural decisions regarding your software based on some ridiculous assumptions?  Yeah, sign me up right away…NOT.