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.
I’ve been tinkering again. I’ve been working on a web app version of CRON-o-Meter. I’m using GWT (Google Web Toolkit) which lets you write your client & server portions in Java, and converts the client java code into native javascript to run in the browser. It’s a pretty slick hack. While web apps are not nearly as clean and responsive as a stand alone app, there are a few nice benefits. For starters, there’s no configuration or installation for anyone to do. It should ‘just work’. Secondly, all the data is kept server side which means you can log in from any machine (work, home, cafe) and update your data. It also makes it easier to share recipes and results.
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.
Christine has penned the antidote to my lack of a proper Singularity Summit Trip report with her latest blog post.
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.
Well it’s evening and the Jet lag is kicking in big time. I’ll be lucky to finish writing this post without dosing off. We sproinged awake this morning at 7am and hit the hotel gym and then had a leisurely morning with some porridge and fruit for breakfast. We walked the 20 minutes to the Guggenheim and spent a while there taking in the exhibit and the buildings structure. Next we hopped in a taxi to see Times Square. Talk about sensory overload. We were very hungry by that point so we stopped for lunch in the Planet Hollywood. While we were eating a press conference materialized right next to us. Lou Diamond Phillips and two of his co-stars were premiering their new Star Gate TV show. So I quietly ate my spinach salad while Lou made some hand prints and a gaggle of papparazi snapped photos a few feet from my table. We explored times square for a bit and then moved on to Rockefeller Plaza (we love 30 Rock). Then we wandered 5th ave and looked at all the fancy shops where you can buy handbags that cost more than used cars, and I made the obligatory geek pilgramage to the Apple Store. We popped into a non-ridiculous shoe store and I go some new shoes since my ratty old scetchers were really hurting my feet from all the day’s walking. Finally we wandered off to an English Pub and had a few pints with Aubrey De Grey, and chatted about his latest efforts to fundraise for SENS, which is a charity that directly funds scientific research into therapies that will clean up after metabolic processes that lead to aging and age related diseases.
Fun day, nuff said.
Christine & I arrived in New York this afternoon. We’re staying in the upper east-side of manhattan. Besides being NYC tourists, we’re here primarily to attend the Singularity Summit this weekend. I’m ridiculously excited to be attending. There is a roster of fascinating speakers (Ray Kurzweil, Aubrey De Grey, Anders Sandberg, Stephen Wolfram, David Chalmers, Eliezer Yudkowsky, & Ben Goertzel, and so on…).
I have not been to a conference of this type since 1999, when I attended the Extropy-4 Conference in Berekely. I had such an amazing experience at Extro-4. It will be very interesting to see what has changed in a decade. Certainly a lot of the big topics that were being discussed 10 years ago (like radical longevity, technological singularities, uploading (whole brain emualtion), seed AI, nanotechnology, and gene therapy) were very fringe and shocking ideas at the time. In the last 10 years, a lot of these ideas have moved much more into mainstream awareness.
For me it’s all about the big crazy ideas. Why the rest of the world spends so much time worrying about what to wear and which celebrities are dating each other is beyond me. This stuff is just way more interesting. Even if it all turns out to be nonsense (and surely some of it is, but I’m convinced most of it is solid), it is infinitely more interesting and rewarding to contemplate. I look forward to a solid weekend of mind-bending talks followed by schmoozing and discussing the rapture of the nerds over beers.
If I can be arsed, I will attempt to post notes on the best talks in the coming days.
Last Sunday, Full Tilt Poker pulled off quite an impressive feat in the online poker world, running a tournament with 50,000 players. The previous world record had been set last year by Poker Stars with a field of 35,000 players.
A tournament this large is no trivial task. One must coordinate that many players with real-time information about the status of all the other players in the tournament. So as the number of players in the tournament grows, the effort and bandwidth needed grows as the square of the number of players. This is particularly nasty for bandwidth. The techniques you might use to keep players in a 500 player tournament updated don’t work so well when you add a few more zeroes.
We were aiming to shatter the world record with this attempt. Unfortunately, it was announced 4 or 5 days in advance, and Poker Stars used this time to scramble and put together an even larger tournament of 65,000 players. They scheduled it to start just an hour before our would-be record breaker. D’oh! No Guinness for me, unless you count the Dublin variety. Still, not a bad result considering that last year we couldn’t even run a decent 5000 player tournament. And as a colleague of mine commented, “there has never been so many people in the world player poker as much as there are right now”.

Another update is ready for CRON-o-Meter today. This should fix the weird error dialog people were reporting when trying to go to the user settings dialog. It took me a long time to get around to diagnosing this one, as I’ve been very busy at work and in my social life, leaving little time for extracurricular debugging. To further complicate things, I wasn’t able to witness the error first-hand.
It turned out to be happening only when running with the very latest versions of the java runtime. Apple is way behind in keeping it’s java support current, so I wasn’t seeing this problem on my mac. And on my windows machine, I had an older JDK installed, and when debugging out of eclipse, it launches in the JDK instead of the current JRE — and again, I couldn’t reproduce the issue. It wasn’t until I finally stumbled upon the right combination that I was able to see the problem and get to the bottom of it in my debugger.












