Well, I’ve been in a deep-coding mindset lately and a lot of progress has been made. It’s a lot nicer looking than it used to be, and I’ve squished a lot of bugs. It has pretty much reached feature-parity with the stand-alone version. There’s still a fair bit of spit & polish needed, and further bug stomping to do. And most importantly, it still lacks an import tool for existing CRON-O-Meter users. Once I get through those bits, I’ll probably open up the site for beta testing (for any brave souls who like discovering bugs!).
Here’s a sneak peak at what it’s looking like today:
I haven’t consulted with a graphics designer yet, so while it doesn’t look too ugly, there’s not a consistent color palette in use yet. Those pastel chart colors don’t go so well with the bold orange theme… I’d appreciate constructive feedback on the design.
I’ve been getting more time lately to muck around with personal projects. One of those is ‘finishing’ my web version of CRON-o-Meter. Last week I finally got the food editor working. Now all that is left to bring it close to parity with the stand-alone version is the recipe system & editor.
I recently threw up a build onto Amazon’s new Elastic Beanstalk service to test it out. It worked quite fantastically well. The pricing for the MySQL instance is a little on the high side though (It looks like it would run close to $80/month just to sit there idle). It would still be a lot cheaper to rent a dedicated cloud server. But the simplicity of the Amazon solution is how it took virtually no configuration to get it all running and hosted. I’m impressed.
Today I got Facebook’s OAuth working, which means you can now log in using your facebook account, as an option. Surprisingly, their documentation was shit. It looked nice but it was repeatedly subtly wrong, and only intensive googling forums found the nips & tucks required to make it go.
Once the basics are all up and running, I’ll get a small private beta going. Longer term, I’ll have to see if it can be supported with ads, subscription fees, or a mix of both. That is, assuming there’s any sufficient interest in it. The market for web based diet sites is pretty crowded, so I’m pretty skeptical it can carve out much more than a small niche.
After moving to Ireland, I fell off CRON. I still managed to eat reasonably healthy, but a lot of factors in our lifestyle there made it difficult to count my calories. For one, my office provided free gourmet lunches every day. Being a life-nit, I could never pass up a free lunch, especially when it was such high quality deliciousness. While I tried to stick to the vegetarian and vegetable options, I’m pretty sure there was a lot of butter involved. The second factor was the frequent dinners out with friends and colleagues. We had a very active social life there, which meant eating out quite a lot. And lastly, and probably the biggest contributor to extra calories, was the drink. Jahy-zus, there were many a pint of frosty lagers and ciders consumed in those four years. I ended up coming back to Canada 30 pounds heavier than when I left.
Anyhow, I’m back now to preparing my own meals and living like a hermit with no friends, so I should have my calories reigned in on the old regime in no time. And to kick it all off, I’ve just pulled a steaming batch of mega muffins out of the oven — ahh that old familiar smell!
Besides diet, I’m also getting way more exercise than I’m used to. I’ve been out skiing quite frequently since my return and I don’t intend to stop!
Exactly four years ago today, we left for Dublin. Today we are moving back to Canada. How can I possibly summarize this chapter in my life? Quite an exciting chapter it has been. One of tremendous personal growth and experiences.
We did an incredible amount of traveling this past four years. A quick look at my pin-map of Europe shows we visited at least 13 countries while we were here. We visited London, Canterbury, Glasgow, Belfast, Paris, Lisbon, Barcelona, Amsterdam, Brussels, Prague, Berlin, Köln, Innsbruck, Rome, Malta, and Cyprus. And somehow in between all of that we managed to also squeeze in trips to Las Vegas, New York, and Hawaii, and several trips back to Canada. Wow. We need to buy some serious carbon offsets…
Speaking of which, Europe is sooo far ahead of North America in terms of sustainability. Small cars are normal, everyone uses public transit and there’s a great network of high speed rail. I paid a carbon tax on my natural gas, and alternative energy projects are widespread across Europe. The EU is on target to meet it’s Kyoto targets well in advance of the deadline. I feel ashamed at the current Canadian Government’s efforts in these areas, and downright embarassed at times. Canada has seemingly done nothing but regress while I’ve been away. Or perhaps it’s always been that way, and living over here has altered my perspective.
Career-wise, the past four years have been quite amazing. The recruiter told me it was going to be like being strapped to a rocket. He wasn’t kidding. This is one of those cases where the old adage rings true; That which does not kill you makes you stronger. In coming here I had to learn a huge complex system under extreme deadlines and serveral doublings of the peak load. It’s never been a dull moment, and it’s been a treat to have hands-on experience building a sophisticated real-time system that has to support hundreds of thousands of players. The previous software I worked on supported a peak load of less than 500 concurrent players. This one can now handle over 200,000. I arrived as a meek programmer and leave as a battle-weary, but confident architect.
As proud of those engineering accomplishments, I’m even prouder of my team. At times we’ve been a band-of-brothers sharing our foxhole while being shelled by server crashes, attacks from hackers, or the friendly fire shelling of insane deadlines. Much of the time, we’ve just been a merry bunch of good friends who laugh at each other’s farts and toss around the frisbee on fair-weather days. It’s been a treat serving with a bunch of top-guns.
Which brings me to the next highlight of the past four years…. all the friends! I’ve never had such a ridiculously full and busy social life. Part of it is the Irish culture. It is a very social place and centers around the (rather unhealthy) activity of going to the pub. As well, relocating here with a large group of co-workers was a major shared experience to bond around. In many situations, it’s not normal to socialize with your co-workers that much outside of work. Everyone has their own social lives anyways. But since we were all freshly transplanted to Dublin at the same time, we were all cut off from our normal social spheres. Naturally we all gravitated towards hanging out and exploring together.
There’s just never been a dull moment, with most evenings out for dinners or off to the pub with folks, or wild weekend parties, bbqs, concerts, trips to the west coast for surfing, or group ski trips in Austria, and so on… Every spare moment has been saturated with social activity. As typical anti-social computer geek, this has been pretty amazing, and at times overwhelming.
I’m gonna miss the hell out of ‘em all.
And what lies ahead, in this next chapter? Well, we’re moving to the Canadian Rockies. Christine’s going to be a ski instructor. I’m going to do some consulting, maybe tinker on some projects of my own, or maybe just ski the winter away and try a change of pace. Probably all three. The next chapter is still just a fuzzy idea, so I guess it’s time to start writing…
I spent a little time this afternoon chiseling away on the CoM GWT app. CRON-o-Meter has very basic support for tracking several different types of things for each day. Each type (Servings, Exercises, Biometrics, and Notes) are shown in a separate tab. I’ve always found this annoying as you have to tab between them just to see if there are any entries for each type.
I’m playing around with the idea of showing them all in the main diary table. I had written all of the code to specifically use a Serving class, and so the first order of business was to refactor everything to use a more generic DiaryEntry class.
I’ve now got Measurements showing along side of Servings in the list, with all the plumbing to create, edit, and delete measurements in different units. It’s not the most exciting bit of coding as it is just a lot of grunt-work wiring up all the bits and pieces, but somebody’s gotta do it, so I guess that means me.
Notes will be next. I need a cute little post-it note icon. I don’t like that pencil.
It’s not fully functional yet, and I don’t have a hosting environment set up yet, but you can see from this screenshot that it’s looking pretty decent. I’ve written the whole codebase from scratch, although it’s design is obviously heavily patterned from the current CRON-o-Meter application. I haven’t done any serious web programming since about 2003, so things have changed quite a bit. The technologies have improved greatly, but one thing that hasn’t changed is that web programming is still a giant pile of ass. CSS sucks, browsers suck, SQL databases suck, and client/server communication over http sucks. GWT helps immensely at hiding much of this, but to do anything non-trivial means getting down and dirty into all of these niggle idiosyncrasies of web development. Ranting aside, it has still been fun and I have enjoyed getting back up to speed with the latest cutting edge web technologies.
A big design decision was that you can only log in using a google account (using a service called OpenId that lets other websites authenticate your identity). I had initially started building it with my own home-baked user authentication system, but decided that for now it is ultimately a huge time saver to just use OpenId. It removes a huge amount of hassle from developing a system to securely manage accounts. I can just piggyback off of google this way, which is just great. I don’t have to worry about account creation, secure password hashing, validating email addresses, resetting forgotten passwords, and so on. If I had to write this all myself, it would likely have bugs and security holes. Instead, I can just focus on the application core.
It’s hard to put together a serious application like this in my spare time, as coding generally needs long sessions of uninterrupted flow time to make progress. Most evenings I’m too burnt out from work to do more coding, or I’ve got all that pesky socializing to do. So generally it’s a little fit of progress each Sunday afternoon. Alas, don’t expect a finished product anytime soon.
It occurred to me the other day, that if one is to take a big picture view, it doesn’t matter so much if I leave that light on in the kitchen, or drive to work instead of taking the bus. As a software engineer for a large company with a huge customer base, I have desicions to make daily that have a much greater impact. If I can optimize the server code than we need less giant energy sucking servers in the data-center. If I can reduce the bandwidth used in the client-server communication that means less work for the millions of clients and all the internet routers in between them and our servers, and far less coal burned as a result. At this scale it means a single thoughtless line of code I write today could mean the addition or subtraction of hundreds of tonnes of CO2. Luckily, efficiencies in the software world are good for the bottom line. Less bandwidth, CPU, and data-center footprint brings down costs, and provides headroom for future growth. But I think it’s too easy to get caught up in personal footprint and not realize the incredibly large impact a lot of us can have in the workplace, where the sheer scale of an operation makes anything personal pale in comparison.
I recently went skiing for a week in Austria with a group of friends (blogged nicely by Morgan & Diane). One cool feature of the resort we were at is that the lift pass is just an RFID card you keep anywhere in a pocket on the left side of your body. When you walk through the lift gate, it opens if you have a valid pass. The scans are linked to their servers and you can enter the ID number on your card to pull down data on every lift you took. The end result is an on-demand chart of your elevation over time through each day.
Another cool technology we’ve been playing with is google latitude, which lets you share your phone’s location data with friends. (GPS + cell tower triangulation). It’s a great way to see where your friends are on the hill.
This really got me thinking about what advances in augmented reality technology will bring to the skiing experience.
In 2020 your ski goggles will have a high resolution heads-up display (HUD). The goggles will have a wireless connection to your smart-phone (iPhone 9G?) running your iSki-AgR 2.1 app. The phone’s GPS, compass, accelerometer, and data-link will provide realtime telemetry to your goggle-HUD to display stats such as your altitude, speed and current weather conditions.
The goggles have a small camera in the rim filming everything you look at, and the phone will be processing the images doing basic image recognition correlated with your location. It will know what you are looking at and can overlay the name of the ski run you’re on and help you find the chair lift you’re looking for. It can suggest a run down to the lift with the shortest queue. Locations on the hill can be tagged by other skiiers and will show up on the HUD to warn you of rocks and other dangers.
Since the app has access to your open social network graph, it automatically discovers all of your friends that are skiing with you and also have iSki-AGR running. It will overlay arrows over the terrain to give directions to meet up with your friends at the lodge. It renders little icons over the heads of your companions so you can spot them easily on a busy slope.
When you ski a run the app tracks and remembers your trail and speed. When you ski the same run again you see a red trail of your previous line superimposed over the terrain. The app will keep track of your lines and best run times, and you can even race your own ghost. Later, one of your friends will beat your best time and your group will all get a little audio announcement of the event. When you ski the run again, you’ll be able to see all of your friends best ski lines (each in their own distinctive color), and try and beat their times.
The better ski resorts will have cameras set up on the hill in key locations filming high quality footage. Later, you’ll be able to call up footage of your best jumps (with stats on air time!) fastest runs, and most spectacular wipe outs. You’ll even be able to give a voice command to instantly blog footage of that sweet 360°-iron-cross you just did.
All of the basic technology for this exists today. It’s just a matter of integration and design for many of the components. By 2015 I expect a few more iterations of moore’s law will provide enough power to do the realtime image processing in your smart-phone. Assuming there’s still snow on the slopes, I think skiing in 2015 will be a remarkably different experience than it is today.
And guess what. I googled a bit just as I finished writing all of this and we’re already almost there.
Trip report lag. As you may have guessed, I couldn’t be arsed. The conference was fantastic, but boy was it mentally draining! We arrived back in Dublin this morning. Once I recover from the jet lag, I’ll try and catch up on the conference highlights.