John Lam on Software http://iunknown.com Most recent posts at John Lam on Software posterous.com Mon, 07 Feb 2011 23:22:00 -0800 My First Day in Windows http://iunknown.com/my-first-day-in-windows http://iunknown.com/my-first-day-in-windows

Every now and then an opportunity opens up that so lines up with my interests that I can't pass it up. Today, I just completed my first day as a member of the Windows team. My career so far has been a series of these interesting changes, all of which has led me to my new team.At each step I've learned something new, be it launching my own start-up to sell software to OEMs to working on a start-up team at Microsoft building some fantastic tooling for Technical Computing. The next step of my journey will involve learning how to ship software at scale. I'm looking forward to the challenge, and being able to share with you (at the appropriate time) all of the hard work that we're doing in Windows!

Permalink | Leave a comment  »

]]>
http://posterous.com/images/profile/missing-user-75.png http://posterous.com/users/1kW4B7q2NTDX John Lam jlam John Lam
Mon, 17 Jan 2011 23:44:00 -0800 How Lexar/Micron Electronics Makes Memory Chips http://iunknown.com/how-lexarmicron-electronics-makes-memory-chip http://iunknown.com/how-lexarmicron-electronics-makes-memory-chip

Love this video. LOTS of robots in action. A few people too.

Permalink | Leave a comment  »

]]>
http://posterous.com/images/profile/missing-user-75.png http://posterous.com/users/1kW4B7q2NTDX John Lam jlam John Lam
Sun, 02 Jan 2011 15:34:18 -0800 Photos From China: Bicycles Everywhere! http://iunknown.com/photos-from-china-bicycles-everywhere http://iunknown.com/photos-from-china-bicycles-everywhere

This fall, I spent a couple of weeks traveling through China with my Dad, who's now 75. Amazingly enough, was the first time that either my Dad or I had been to China.

I shot a lot of photos there, and here's a collection of photos of bicycles. Bicycles were once ubiquitous throughout China, but they're an endangered species in urban areas. Here's a collection of photos of people using bicycles in interesting ways. Almost nobody wore helmets, and often you could see entire families commuting on a single bicycle.

 

Permalink | Leave a comment  »

]]>
http://posterous.com/images/profile/missing-user-75.png http://posterous.com/users/1kW4B7q2NTDX John Lam jlam John Lam
Sat, 01 Jan 2011 07:00:00 -0800 Looking Back On A Year Of Cycling http://iunknown.com/looking-back-on-a-year-of-cycling http://iunknown.com/looking-back-on-a-year-of-cycling

2010 was my first year back on the bike after a long time off. It felt good to be a bit more "selfish" now that the boys were 6 and 4, and take some time to do some riding just for me.

Edge_500

Without a doubt, the best purchase I made this year was my little blue friend: a Garmin Edge 500 bike computer. It's an ANT+ compatible device that records data from a number of different channels:

  • Heart rate
  • Cadence
  • Speed
  • Temperature
  • Location
  • Power

For a fantastic review, check out Ray Maker's write-up on the Edge 500. The Garmin software is pretty good (I've re-implemented a good chunk of it on my own as well - look for details in the new year). It makes it really easy to analyze your rides after you're done.

My goals this year were pretty simple: 1) get out and have fun, and 2) ride up as many hills as I could find to force myself to get into some kind of shape. I didn't have any well-defined goals this year, since that would have defeated the get out and have fun goal. Looking back on my training logs on Garmin Connect, I can see that I:

  • Rode over 2000 miles
  • Climbed over 115K vertical feet
  • Completed the Seattle LIVESTRONG century in abysmal conditions
  • Rode up my first mountain pass (I spent most of my life in Toronto) when I rode up to Johnston Ridge. 
  • Recorded an FTP of 207W on one of my loops around Lake Sammamish.

Next year I'll follow a much more structured training plan to see what I can pull off. Looking forward to it!

 

Permalink | Leave a comment  »

]]>
http://posterous.com/images/profile/missing-user-75.png http://posterous.com/users/1kW4B7q2NTDX John Lam jlam John Lam
Fri, 31 Dec 2010 21:03:22 -0800 Predictions for 2011 http://iunknown.com/predictions-for-2011 http://iunknown.com/predictions-for-2011

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!

Permalink | Leave a comment  »

]]>
http://posterous.com/images/profile/missing-user-75.png http://posterous.com/users/1kW4B7q2NTDX John Lam jlam John Lam
Thu, 30 Dec 2010 07:00:00 -0800 Got Lower Back Pain? http://iunknown.com/got-lower-back-pain http://iunknown.com/got-lower-back-pain
Media_httpwwwtri247co_sgocj

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!).

Permalink | Leave a comment  »

]]>
http://posterous.com/images/profile/missing-user-75.png http://posterous.com/users/1kW4B7q2NTDX John Lam jlam John Lam
Wed, 29 Dec 2010 21:09:00 -0800 Using Games To Help Us Learn http://iunknown.com/using-games-to-help-us-learn http://iunknown.com/using-games-to-help-us-learn

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.

Permalink | Leave a comment  »

]]>
http://posterous.com/images/profile/missing-user-75.png http://posterous.com/users/1kW4B7q2NTDX John Lam jlam John Lam
Tue, 28 Dec 2010 22:32:00 -0800 Using Google Voice To Optimize the Pre-Paid Experience for Cheapskates Like Me http://iunknown.com/using-google-voice-to-optimize-the-pre-paid-e http://iunknown.com/using-google-voice-to-optimize-the-pre-paid-e

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.

 

Permalink | Leave a comment  »

]]>
http://posterous.com/images/profile/missing-user-75.png http://posterous.com/users/1kW4B7q2NTDX John Lam jlam John Lam
Mon, 27 Dec 2010 23:27:00 -0800 Riding Indoors In The Winter http://iunknown.com/riding-indoors-in-the-winter http://iunknown.com/riding-indoors-in-the-winter

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!

Permalink | Leave a comment  »

]]>
http://posterous.com/images/profile/missing-user-75.png http://posterous.com/users/1kW4B7q2NTDX John Lam jlam John Lam
Sun, 26 Dec 2010 10:32:00 -0800 What Happens When You Steal a Hacker's Computer http://iunknown.com/what-happens-when-you-steal-a-hackers-compute http://iunknown.com/what-happens-when-you-steal-a-hackers-compute

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

Permalink | Leave a comment  »

]]>
http://posterous.com/images/profile/missing-user-75.png http://posterous.com/users/1kW4B7q2NTDX John Lam jlam John Lam
Sat, 25 Dec 2010 17:58:00 -0800 Am I Out Of Shape Or What? http://iunknown.com/am-i-out-of-shape-or-what http://iunknown.com/am-i-out-of-shape-or-what

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.

Permalink | Leave a comment  »

]]>
http://posterous.com/images/profile/missing-user-75.png http://posterous.com/users/1kW4B7q2NTDX John Lam jlam John Lam
Sat, 25 Dec 2010 00:06:00 -0800 Save Real Money: Switch to Prepaid Cellular http://iunknown.com/save-real-money-switch-to-prepaid-cellular http://iunknown.com/save-real-money-switch-to-prepaid-cellular

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.

Permalink | Leave a comment  »

]]>
http://posterous.com/images/profile/missing-user-75.png http://posterous.com/users/1kW4B7q2NTDX John Lam jlam John Lam
Thu, 23 Dec 2010 22:11:22 -0800 Optimizing a Web Site Part 1: Measure! http://iunknown.com/optimizing-a-web-site-part-1-measure http://iunknown.com/optimizing-a-web-site-part-1-measure
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?

Permalink | Leave a comment  »

]]>
http://posterous.com/images/profile/missing-user-75.png http://posterous.com/users/1kW4B7q2NTDX John Lam jlam John Lam
Wed, 22 Dec 2010 17:09:00 -0800 The Boys Discover Captain Underpants http://iunknown.com/the-boys-discover-captain-underpants http://iunknown.com/the-boys-discover-captain-underpants
Media_httpecximagesam_vtzck

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!

Permalink | Leave a comment  »

]]>
http://posterous.com/images/profile/missing-user-75.png http://posterous.com/users/1kW4B7q2NTDX John Lam jlam John Lam
Wed, 22 Dec 2010 12:55:45 -0800 Olympic Silver Medalist Dabaya Demonstrates Front Squat Technique http://iunknown.com/olympic-silver-medalist-dabaya-demonstrates-f http://iunknown.com/olympic-silver-medalist-dabaya-demonstrates-f
 
Vencelas Dabaya shows off his front squat form.

Permalink | Leave a comment  »

]]>
http://posterous.com/images/profile/missing-user-75.png http://posterous.com/users/1kW4B7q2NTDX John Lam jlam John Lam
Tue, 21 Dec 2010 20:53:00 -0800 Is Apple the only company who cares about beautiful displays? http://iunknown.com/is-apple-the-only-company-who-cares-about-bea http://iunknown.com/is-apple-the-only-company-who-cares-about-bea
Media_httpimagesapple_cmuxe

The 27" iMac has the best looking LCD display of any PC that I've looked at (and I've looked at a lot). While $1699 is a wee bit expensive for a 27" 2560 x 1440 display, they do throw in a rather capable, yet inexpensive computer as well.

The ultimate PC for me would be one of these 27" iMacs with two accessible 2.5" drive bays. I'd drop an Intel 160GB X25-M SSD into one and a 500GB Momentus XT 4GB flash-backed spinning disk into the other. That would make me very happy.

Update: I just found a DIY tutorial that shows you how to replace the Superdrive in the iMac with an SSD.

Update 2: You can configure a 27" iMac with up to two internal HDDs. The $750 asking price for a 256GB SSD + 1TB spinning disk is a bit steep though. Does Mac OS X support TRIM yet?

Update 3: Looks like OS X Lion will be the first version to support TRIM. Wonder why they can't retrofit it to Snow Leopard? Windows 7 has had it for over a year.

Permalink | Leave a comment  »

]]>
http://posterous.com/images/profile/missing-user-75.png http://posterous.com/users/1kW4B7q2NTDX John Lam jlam John Lam
Sun, 21 Nov 2010 17:15:14 -0800 Obama on the TSA http://iunknown.com/2010/11/obama-on-the-tsa.html http://iunknown.com/2010/11/obama-on-the-tsa.html This is what Obama said during his Inaugural Address. These were powerful, inspirational words: "As for our common defense, we reject as false the choice between our safety and our ideals.  Our Founding Fathers -- (applause) -- our Founding Fathers, faced with perils that we can scarcely imagine, drafted a charter to assure the rule of law and the rights of man -- a charter expanded by the blood of generations.  Those ideals still light the world, and we will not give them up for expedience sake." This is what Obama said in Lisbon, Portugal to answer a question about recent events at the TSA: "One of the most frustrating aspects of this fight against terrorism is that it has created a whole security apparatus around us that causes huge inconvenience for all of us,” Obama said. Wow.

Permalink | Leave a comment  »

]]>
http://posterous.com/images/profile/missing-user-75.png http://posterous.com/users/1kW4B7q2NTDX John Lam jlam John Lam
Fri, 11 Dec 2009 05:19:40 -0800 Motorola DROID Review http://iunknown.com/2009/12/motorola-droid-review.html http://iunknown.com/2009/12/motorola-droid-review.html
Media_httpwwwtelefoni_bteja
Yesterday, I left my iPhone and the AT&T network behind and switched to Verizon. In no particular order, here are the set of things that I was unhappy with:
  • Spotty AT&T network. In most of the places where I used my phone, things tended to work. Except of course for the times when they don’t.
  • Draconian App Store approval process that kept Google Voice out of the App Store and kept other app updates running at a snail’s pace.
  • Lack of multitasking (notifications don’t count).
  • Paying $10 / month for SMS on our two lines
  • Paying for a home phone line so that I could get cheap calling to Canada where our extended families live.
Yesterday, I went out to the local Verizon Wireless store and moved both of our family’s phones over to Verizon. It was a completely painless process – I just had to give the Verizon rep, Pete, my AT&T account number and they moved both of our phone numbers to Verizon in under 5 minutes. I wound up purchasing the Motorola DROID, and the HTC Eris phones. I've heard good things about Verizon’s network, and I put it to the test today. I used the New York Times homepage as the test and raced a few folks at the office who have iPhone 3G and 3GS’s. The DROID beat them hands down at page load times. I don’t have timing numbers, but it was a very noticeable difference.

Hardware

The DROID is a sturdy and surprisingly small phone. It’s just a bit thicker than my iPhone 3G, and quite a bit heavier. I really wanted to have a phone that does not have a physical keyboard since the DROID’s keyboard is more-or-less unusable. It doesn’t have staggered keys, and you have to move your fingers too far and too deliberately to type. I can type much faster and more accurately using the on-screen keyboard. One gripe about the on-screen keyboard: I can type faster than it can react. If you hit two keys too closely together in time, it will ignore both keystrokes. If I slow down my typing just a bit, my accuracy improves tremendously. With the iPhone, however, I never had to slow down – it totally nails the experience. Hopefully a future software update for the DROID will fix this. The Android 2.0.1 update that just arrived while I was typing out this review definitely improves things quite a bit. The jury’s still a bit out on how close to the iPhone typing experience it is. The screen is gorgeous. How could a 267 PPI display not be gorgeous? At 854 x 480, text is incredibly legible, even at small point sizes. It looks like this resolution is going to be fairly standard on high-end smart phones next year if the leaked HTC roadmap is to be believed. The AMOLED displays on those HTC phones should be fantastic too.

OS

Multi-tasking is something that I didn’t realized I missed on my iPhone until I experienced what it could be like on Android. The modal notifications system on the iPhone is pretty useless, especially when the notification text runs long, or if there are a bunch of notifications batched together. On Android, there’s this ‘window shade’ UI concept which shows you a list of notifications, as well as a series of icons on the task bar that tell you there’s more information in the Window Shade. One thing I really like is having the current outside temperature displayed on the task bar, something that just isn’t possible using the iPhone. However, multi-tasking is a mixed blessing. If I notice the DROID running hot, I’ll have to run my Advanced Task Killer app to kill any offending apps running in the background. This is annoying, and I look forward to better job quota support for background tasks to help maximize battery life in the future. The turn-by-turn navigation feature is great. My car dock arrives tomorrow so I’ll be able to better put it through its paces then. But in my tests today, I was able to speak the name of my destination to the phone, click on “Get Directions” followed by the Navigation button and I was on my way to my destination. I don’t own a GPS, but it’s at least as good as Scott Hanselman’s Garmin Nuvi that got us lost on the way to Foo camp a couple of years ago :)

Contacts

This is one area where Android totally nails the user experience. Your contacts are now a union of your Exchange, Gmail and Facebook contacts. For each contact on your list, they will display all possible forms of communication with them, and integrate things like their current Facebook status directly into the contact page! If you interact with a contact anywhere else in the OS (in a email message, a SMS etc.) you can just double tap on the contact and you’ll get a popup menu with a list of all possible ways that you can interact with that user (call, email GTalk SMS etc.) Google Voice Integration This was the feature that I really wanted. I got a taste of how good it could be on my iPhone, but Android really makes this feature sing. For my family in Canada, if I call them (via my contact list) the DROID will automatically route that international call through Google Voice. For Canada it’s free, and for other countries it’s substantially lower than Verizon’s existing rates. You get to call people without having to dial an access number first, which was how you had to do things on the iPhone. But for me this lets me cancel my home phone # that will save me around $30 / month. I just got a Google number (you can get one through your Google Voice settings page if you were like me and picked the “I want to keep my existing wireless number option”). Now I can send and receive SMS messages for free ($10 / month). Note that this only applies to SMS messages sent to my new Google number and not my existing wireless number. Sometime in the future Google Voice will offer # portability, so I’m hopeful that I can bounce my number then. The voicemail feature of Google Voice is awesome. It does speech-to-text conversion for you. In the Google Voice app, you can playback the message and watch as it highlights the words that it transcribed in real-time. Fantastic feature.

Applications

The iPhone App Store is not as big of a moat for Apple as I once thought. Here are the apps that I really loved on my iPhone:
  • Now Playing
  • Shazam
  • Page Once Personal Assistant
  • TweetDeck
  • Facebook
  • Weather Bug Elite
  • Red Laser
  • Amazon
  • Kindle
  • The Best Camera
Of these, only The Best Camera, TweetDeck, Red Laser and the Kindle app are not available for Android. But reasonable substitutes were available: I substituted Twidroid for TweetDeck (not quite as good, but certainly a more than capable Twitter client). Google Goggles is definitely superior to Red Laser on my non-autofocus iPhone 3G. Not sure yet what a good camera app is for the Android; The Best Camera was a fantastic app for the iPhone. The only app that I don’t have an equivalent for today is the Kindle app. But I’d be shocked if Amazon didn’t fill that hole in early next year. I’m happy that the iPhone has real competition with the DROID + Android combination (although as a MSFT shareholder I’m less happy that we’re not the real competition here). I suspect the Android app store is going to be quite disruptive to Apple since apps update much faster and appear much faster than on the iPhone app store. Price What’s the bottom line here? I can sell my used iPhone 3G 8GB for about $250 on Craigslist. My new DROID cost $50 after rebates using my MSFT employee discount. My phone bill rises to $118 / month from $100, but I’m getting a second data line and an additional 250 anytime minutes. Keep in mind that I’m also canceling my home phone # which should save about $45 / month. So net savings of around $27 / month and my iPhone will pay for my early termination fees from AT&T. I’m also eligible to upgrade my primary line’s hardware every year as opposed to the 20 month policy in AT&T. That’s freaking incredible.

Permalink | Leave a comment  »

]]>
http://posterous.com/images/profile/missing-user-75.png http://posterous.com/users/1kW4B7q2NTDX John Lam jlam John Lam
Tue, 17 Nov 2009 19:59:03 -0800 Passing the torch http://iunknown.com/2009/11/passing-the-torch.html http://iunknown.com/2009/11/passing-the-torch.html
Media_httpfarm1static_vtggo
I'm going to miss my first RubyConf since 2005. The IronRuby project is still going strong, and is in the capable hands of Jimmy Schementi. It's heading towards a 1.0 release (0.9.2 today), and Jimmy is going to lay out what that roadmap looks like at RubyConf on Friday. So what have I been up to? I've been a happy IronRuby user since December, and working on a fantastic new project. It really was one of those opportunities where I was in the right place at the right time with the right preparation.These days I'm spending a large chunk of my time building an awesome new team from scratch from folks who are currently at the company. Before this year is out, we'll be announcing (in broad terms) what I've been working on since last December and I'll be expanding hiring to folks who aren't currently at the company. I'll also finally be able to talk about what I've been working on. It wasn't easy leaving the IronRuby team, and I'm hopeful that you'll love what we're building as much as we love building it!

Permalink | Leave a comment  »

]]>
http://posterous.com/images/profile/missing-user-75.png http://posterous.com/users/1kW4B7q2NTDX John Lam jlam John Lam
Mon, 18 May 2009 17:11:00 -0700 Dynamic Languages at TechEd 2009 http://iunknown.com/2009/05/dynamic-languages-at-teched-2009.html http://iunknown.com/2009/05/dynamic-languages-at-teched-2009.html

Media_httpfarm4static_gibdi
Dynamic languages on .NET are picking up momentum at this year's TechEd. Your typical TechEd attendee is a mainstream .NET developer, since this conference focuses on technologies that are shipping today (as opposed to futures conferences like the PDC). To speak more to this crowd, I focused on how they can make their existing .NET apps better by mixing in some end-user scripting. My talk was DTL332 if you're a TechEd attendee (not sure when/if the videos will open up to the general public). I showed how you can add Ruby and Python scripting to an existing app, and spent some time building some simple REPLs. Toward the end of the talk, I showed a more realistic scenario where I embed a REPL in an existing Open Source .NET application: Witty. During the demo, I showed off a twist on the traditional REPL - one where the editor and the REPL are one and the same. To run code in this REPL, you select the code that you want to run, and the output appears immediately below the selection. Since the REPL is just an editor, you can just delete any output that you don't want. History behaves just fine as well. Here's a screenshot of the REPL in action:
Media_httpiunknowntyp_apnwl
There are a couple of other notable things in this REPL. First, it syntax colors the text that ran correctly. Second, it supports more than one .NET language - you can switch between Python and Ruby using %python and %ruby (although whether that's a good idea is left to the reader). Third, all of its configuration is self-contained inside of a single DLL. This means that all you need to do to add scripting support for your app is add a reference to a single assembly. The assembly will write all user configuration files to well-known locations on disk (within your HOME directory) the first time it is run. This idea of a REPL within an editor buffer isn't new by any means. I've been spending some time hanging out with Mark Hamburg recently, and this is his favorite way of implementing a REPL (he's done quite a few, including the embedded IDE that the Adobe Lightroom folks use to build Lightroom). He won me over on the idea, so I thought that I'd hack up an implementation for folks to experiment with. I pushed the code up to Github as the repl-lib project, so feel free to fork, play with the code, and send me some feedback on the idea. Note that there's a nice long tail of bugs in this REPL, so feel free to fix bugs and submit changes! Here's a screenshot of the Witty main window; notice the console button:
Media_httpiunknowntyp_hkehz
Here's a sample console session:
Media_httpiunknowntyp_fhfpj
The last line of code causes the Witty UI to display:
Media_httpiunknowntyp_bqfkt
After poking around inside Witty, I think there is some work that needs to be done to make scripting truly a first-class citizen in the project. While some might look at this as bad news or an indictment of Witty, it really isn't. Any project that isn't designed for such an invasive feature will likely make lots of assumptions that make it hard to make that feature successful. But the good news here is that if you use scripting as a end-user feature to drive your refactoring efforts, you will wind up with an app that is easy to script, but more importantly, is better designed. I argue that your design is better because it's forces a clean separation of concerns in your code: especially your models and your views. This separation of concerns will make it easier to test your end-to-end scenarios and script your integration tests. This all adds up to better software for everyone. I've made it pretty easy to add scripting support to your app. Grab the repl-lib project and spend a few minutes (that should be how much time it takes) to integrate scripting into your project. If you're interested in how much work it took to integrate these changes into Witty, check out this diff; most of the stuff is VS-related, and ReplResources.xaml is no longer required in current builds of repl-lib:

Permalink | Leave a comment  »

]]>
http://posterous.com/images/profile/missing-user-75.png http://posterous.com/users/1kW4B7q2NTDX John Lam jlam John Lam