John Lam on Software

  • About me
  • Predictions for 2011

    • 31 Dec 2010
    • 1 Response
    •  views
    • Edit
    • Delete
    • Tags
    • Autopost

    Mostly, I'm writing this post so I'll have something to make fun of in a December 31, 2011 blog post. So here goes ...

    1. We're going to see a lot of interest in business models that sell new customer relationships to existing businesses. The current poster child for this business model is Groupon. If they can successfully validate this business model (and this is by no means a slam dunk) look for Facebook to pull a fast-follow and enter the market in 2011. 
    2. Kinect is going to have a big impact on Microsoft's image in the consumer market. Last Wednesday, I saw a crowd of nearly 50 people watch a kid play Dance Central at the Microsoft Store in Bellevue. The kid was good - and got a big round of applause from the crowd when he was done. The crowd spontaneously formed around him as he played, with some people literally stopping dead in their tracks walking by the store. Kinect's open relationship with the hacker community is also going to play a huge role in establishing it as a mainstream technology, particularly for PCs; the guy in the picture is playing WoW via Kinect. I predict that we'll see a Kinect "halo effect" that extends into consumer PCs, which will be driven by ISV's who take advantage of some of the libraries being created by the hacker community.  
      Kinect
    3. We're going to see a lot more evidence that HTML 5 is a legitimate application platform. The major platform vendors  The Pirates and Daisies tower defense game is just the first of many more apps to come. I predict that a major game publisher will announce and/or deliver a web-based game using nothing but HTML 5 in 2011.
      Html5

    Happy New Year everyone!

  • Got Lower Back Pain?

    • 30 Dec 2010
    • 0 Responses
    •  views
    • cycling
    • Edit
    • Delete
    • Tags
    • Autopost
    Media_httpwwwtri247co_sgocj
    via tri247.com

    I've got a spotty track record of working on strengthening my core. During the winter, I'm usually on a 16 week weight program, and I make really solid gains in strength then. But during the riding season, I neglect my core and ultimately wind up paying a price for it with lower back pain on my rides. This article does a great job at explaining why you might get lower back pain during rides. It does, however, assume that you've been competently fitted to your bike. This winter is the first that I'm doing a mixed riding / weight program. Early signs point to it helping me keep my spine in a neutral position during my rides (losing some weight around my midsection will also help this too!).

  • Using Games To Help Us Learn

    • 29 Dec 2010
    • 2 Responses
    •  views
    • Edit
    • Delete
    • Tags
    • Autopost

    Late last night, I discovered VimGolf, and I was instantly hooked.

    Vimgolf

    VimGolf is a social game that encourages people to simultaneously compete and teach at the same time. In VimGolf, you're given a file that contains the starting text, along with a file that contains the "solution". Your job is to transform the starting text into the solution in the fewest number of keystrokes. If you want to see other people's solutions, you have to submit one of your own. Your submission will only let you see people's solutions that are worse (higher number of keystrokes) than yours, and a small number of solutions which have a better score than yours. By looking at other people's solutions, you will likely learn a trick or two that you can use to improve your score. You can then submit another solution and repeat the learning process.

    It's a fantastic example of using a game to improve your skill. The general idea of using games to teach is more broadly applicable as well. For example, it's well known that most users only use a small fraction of the features in their software. If your game encourages users to try new features of the software that they haven't used before in order to "win" at the game, you're going to be far more successful at teaching them how to use your software. Users don't want to read a manual; they would much rather learn by doing, and games are a great way to make that happen. 

    VimGolf encourages users to practice using vim. Daniel Coyle's excellent book, The Talent Code, talks about how people improve through "deep practice", or practicing at the edge of one's abilities for a sustained period of time.

    I've seen this in action first hand in our house. Since the start of the school year, my 7-year old son has been really interested in learning how to play chess. I remembered learning how to play chess as a kid: the only way for me to "practice" was to play a real game. And since my dad was a lot better than me, I wasn't learning a whole lot during the infrequent games that we would play (losing repeatedly did not encourage me to want to play more games).

    Chessmagnet

    Matthew is fortunate to have ChessMagnetSchool available to him through his chess club at school. In Chess Magnet School, you are presented with problems like the one shown above, and you're asked to solve it. Matthew has solved over 1000 problems to date. As he solves more problems, he continues to advance. After a certain number of problems are solved correctly, he gets promoted to the next level. Right now Matthew is a Herald and he really wants to move on to be a Jester. He has concrete goals that he sets for himself "Daddy, tomorrow I want to go from 30% to 50% of the way to becoming a Jester". The game adapts to his ability, and he gets a ton of practice working on problems right at the edge of his ability. He's learning at an incredible rate; it won't be long before he's moping up the floor with his Dad.

    So the next time you're designing a program, try and think about whether you can use a game-based learning approach. It can easily be the difference between a program that has tons of features that nobody knows about and a program that has a fanatic online following.

  • Using Google Voice To Optimize the Pre-Paid Experience for Cheapskates Like Me

    • 28 Dec 2010
    • 0 Responses
    •  views
    • Edit
    • Delete
    • Tags
    • Autopost

    I recently blogged about the advantages of prepaid cellular on T-Mobile, so I won't rehash those arguments here. Let's assume for now that you agree with my earlier arguments. In this blog, I'll show you how you can use Google Voice to optimize the experience further.

    I've been using Google Voice for the past year. It has three key features that will help reduce your prepaid bill further. At Microsoft, I have a direct-dial line to my office. I can program Google Voice to always ring my office phone during office hours. This means that my office phone and my cel phone will ring simultaneously. This way, I can pick up the call on my office phone, and avoid consuming minutes to take the call.

    Another key feature of Google Voice is the voicemail service. It will record messages, of course, but it will also transcribe those messages for you and email you the transcript. Since you need to pay for the minutes that you spend accessing your voicemail, being able to read your voicemail using your email client helps to reduce the minutes that you use as well. For this to work, your friends have to call your Google Voice number. Unfortunately, prepaid customers on T-Mobile cannot forward their cel number to their Google Voice number. A stop-gap feature is to change your voicemail message to one which tells the caller to try calling you on your Google Voice number instead.

    The final feature of Google voice is free text messaging. If your friends text your Google Voice number, you can use a Google Voice client to read and reply to those text messages without paying any additional charges. At the time that I wrote this blog, there isn't an "official" Google Voice client for Windows Phone 7, so I'm using a third party Google Voice client called GoVoice to send and receive text messages while I'm on WiFi. It's not as integrated as the text messaging client in Windows Phone 7, so if your friends need to get a hold of you no matter what, have them text your cel phone #, but you'll have to pay a 5 cent fee to receive their text.

     

  • Riding Indoors In The Winter

    • 27 Dec 2010
    • 0 Responses
    •  views
    • cycling
    • Edit
    • Delete
    • Tags
    • Autopost

    Riding a Computrainer indoors during the winter is a great way of maintaining or even improving fitness. With my impeccable sense of timing, I purchased my Computrainer this fall a week after their $100 off deal expired (the summer, understandably, is their off season). 

    Computrainer

    Setup

    The Computrainer unboxing experience is quite unlike the unboxing experience of modern electronics. It arrives in a large brown box, and has manuals that look like those from 1980's era software; if they only came in a 3-ring binder and had floppies in a zip-lock bag, it would complete my trip down memory lane. The cables use DIN-5 connectors, 1/8" mono headphone jacks, and serial connectors. I'm not kidding. It's almost like they manufactured all of their inventory in the 1980's and are still selling that stock. To connect it to your computer you need to use a serial to USB adapter, which is thankfully included in the box. While it's easy to make fun of the primitive state of the electronics, the setup does work remarkably well and is quite reliable. 

    The trainer itself is sturdy and well-built, and is a cinch to calibrate. Calibration involves spinning up to 25mph and letting the rear wheel freewheel to a stop so that the electronics can measure the rolling resistance between the tire and the rear roller. You'll need to calibrate it each time you ride it, and calibration is best done when the tire is warmed up after riding for a few minutes first.

    One major point of frustration:getting the cadence reading to work at all. No matter how I tried to reposition the cadence sensor to minimize the gap between the magnet and the sensor, it failed to register a reading. So I decided to throw some science at the problem: I ordered a tube of rare earth magnets from Amazon. These are incredibly powerful magnets; pulling two of them apart is virtually impossible (instead, you separate them by sliding them apart). I stuck one onto the spindle of my pedal and my cadence sensor began reading signals right away. One nice side effect of using these magnets is not having to have ugly straps to hold your magnet onto your crank arm, something I appreciate more now that I have Campy Super Record 11 carbon cranks on my "good" bike.

    Magnets

    Finally you'll need to find a place to setup the trainer. Mine is setup in the storage room in our basement. I have enough room there for the bike, a 22" LCD panel, and a large diameter fan. I really appreciate convenience of having my old road bike permanently mounted to the trainer. Taking the bike on and off the trainer is about a 5 minute procedure, which would quickly become annoying at 5AM. There are many ridable days during the winter in Seattle, so this would be something that you'd have to do if you only had one bike.

    Riding

    I'm not a fan of the Computrainer software. I'm hoping that their upcoming release of their Racermate One software update in February 2011 will be an improvement. Fortunately, there's a fantastic software available from Ergvideo, a Canadian company. Here's a sample from one of their videos:

    The video experience makes you feel like you're riding in the middle of a pack. The wattage that you must output depends on what's happening in the video. For example, you'll need to increase your wattage on an uphill or when the rider in front of you pulls off. You can decrease your wattage when you bridge up to the break or start descending a hill. It's remarkably realistic once you get the hang of it.

    So how does the trainer know how many watts to make you pedal at? You provide it with your functional threshold power, which is the average power that you can generate for 60 minutes. This way the ride is tailored to your current fitness levels. 

    One thing that was initially counter-intuitive to me is the fact that you should never ever need to change gears in "erg" mode. If you output too many watts, the trainer will automatically reduce resistance. So all you need to do is try to pedal at a constant cadence in a fixed gear and you'll get the workout that's programmed into the video. 

    Make sure you have a lot of music handy - riding indoors is incredibly boring and it's hard to stay motivated. I use my HTC HD7 Windows Phone as a music player, which means I can also use it to surf the web in desperate moments!

  • What Happens When You Steal a Hacker's Computer

    • 26 Dec 2010
    • 1 Response
    •  views
    • Edit
    • Delete
    • Tags
    • Autopost
    via gizmodo.com

    This is awesome. 2 years after it was stolen ... DynDNS, SSH, keyloggers and more!

  • Am I Out Of Shape Or What?

    • 25 Dec 2010
    • 0 Responses
    •  views
    • Edit
    • Delete
    • Tags
    • Autopost

    A nice easy ride around the north end of Lake Washington on a really quiet, beautiful winter day in Seattle.

    Ride
    Details of the ride are up on Garmin Connect.

  • Save Real Money: Switch to Prepaid Cellular

    • 25 Dec 2010
    • 9 Responses
    •  views
    • Edit
    • Delete
    • Tags
    • Autopost

    Switching to prepaid cellular has been a hot lunch topic discussion within the Technical Computing Group. It all started when Tomas Matousek told me about T-Mobile's $1.49/day web pass. It's in the fine print at the bottom of this section within T-Mobile's prepaid calling plans:

    Prepaid
    It was also around this time that I realized that what I thought was an iPhone that Sam Ng was looking at during meetings was actually an iPod Touch. Sam's logic was pretty good: he lived in a wifi bubble at home and work, and he had a regular feature phone to use for texting.

    This got me thinking: why am I paying ~$130/month for a family plan on Verizon with two data plans? I live in a wifi bubble at home and at work, and free wifi is pretty much everywhere these days. So when I got my shiny new HTC HD7 Windows Phone, I decided to take the plunge and switch to T-Mobile prepaid. 

    Hd7

    That was on the Wednesday before Thanksgiving. After just over 4 weeks of use, how much have I spent? Less than $20. The wife has spent more, but not much more: she's at around $30. That's a savings of $80 this month alone. I've used the web day pass exactly once: on Black Friday when I was bored standing in a really long line at Target at 5AM.

    An HD7 will cost you $500 without a contract vs. $199 with a 2 year contract. I'm pretty sure that I'll save more than $300 over the lifetime of a 2 year contract. Based on my projections, I'm likely to save that much over the first 6 months. If my projections are correct, I'm going to be keeping around $900 for my line that I would have otherwise handed over to the carrier over the lifetime of a 2 year contract.

    So far I've convinced one guy on my team to switch over. I'm pretty sure that others are soon to follow. Oh, and get the HD7. It really is a great phone. More on that later.

  • Optimizing a Web Site Part 1: Measure!

    • 23 Dec 2010
    • 0 Responses
    •  views
    • Edit
    • Delete
    • Tags
    • Autopost
    I'm helping my brother fix his web site. He's put a lot of effort into creating a great web site with a lot of excellent content on it. But he's not getting the results that he needs to help grow his business. So ... I offered to help. I'm writing this down in hopes that someone else can find this useful. And, on the other hand, since I don't optimize web sites for a living, I'm really hoping that some of you can help me figure out what I'm doing wrong!
     
    The first thing that I notice is that his homepage loads really slowly. So I pull out FireBug and start measuring.
     
    Firebug_logo
     
    Two striking observations:
     
    1. His home page is only 5.8KB, but takes 5.95s to load
    2. His home page makes 65 requests to the server, and weighs in at a hefty 874KB
     
    I log into his web site, and start poking around. He's using WordPress since it's easy to get up and running for folks without a web background. That's a double-edged sword, of course since it's easy to build a site that looks great, but loads incredibly slowly. WordPress is the FrontPage of the 21st century.
     
    Other observations:
     
    His page loads 378KB of JavaScript:
     
     
    Javascript
     
    There are 44 images weighing in at 444KB:
     
     
    Image_files
     
    There are 13 CSS files weighing in at 46.3KB:
     
     
    Css_files
     
    There's clearly room for improvement here. I'm not sure who to blame for the ~6s in latency in serving up the initial 5KB web page for his site. That's clearly unacceptable, and is present on every other page on his site as well. Right now I don't know if WordPress will stay in the picture. Thoughts from the peanut gallery?
  • The Boys Discover Captain Underpants

    • 22 Dec 2010
    • 0 Responses
    •  views
    • Edit
    • Delete
    • Tags
    • Autopost
    Media_httpecximagesam_vtzck
    via amazon.com

    The boys recently discovered Captain Underpants. Ben (now 5!) is actually sitting down and reading the books on his own. Yay for self-motivation even if it means living with the inevitable potty jokes at dinner!

  • « Previous 1 2 Next »
  • About

    I create software tools for scientists and engineers in the Technical Computing Group at Microsoft. Before that, I was a founding member of the IronRuby team.

    115689 Views
  • Archive

    • 2011 (4)
      • February (1)
      • January (3)
    • 2010 (13)
      • December (12)
      • November (1)
    • 2009 (5)
      • December (1)
      • November (1)
      • May (1)
      • January (2)
    • 2008 (30)
      • October (1)
      • September (2)
      • July (1)
      • June (2)
      • May (1)
      • April (2)
      • March (9)
      • February (8)
      • January (4)
    • 2007 (59)
      • July (4)
      • June (16)
      • May (23)
      • April (2)
      • March (6)
      • February (4)
      • January (4)
    • 2006 (214)
      • December (2)
      • November (2)
      • October (8)
      • September (12)
      • August (34)
      • July (29)
      • June (23)
      • May (34)
      • April (15)
      • March (23)
      • February (23)
      • January (9)
    • 2005 (46)
      • December (22)
      • November (17)
      • October (7)

    Get Updates

    Subscribe via RSS
    Twitter