Watching our 2 year old navigate the iPad has been amazing. She has a huge capacity to figure it out, play her favorite songs, run her favorite apps, etc.
Of course she does a lot better when there are pictures. An icon, no matter how small, gives her tons more benefit than just a text label.
But it's about the Nouns
But the biggest concept I've learned is the idea of nouns vs. verbs.
When language starts developing, you see thousands of nouns appear, before verbs really show up at all.
And even for adults, the best interfaces are made of simple nouns. Apps are nouns. One of the big splits between an early "technology" for "professionals" and "consumer apps" seems to happen at the point a UI gets noun-ized. A photo, a song, a file.
It's not a "workflow" or a "write down these steps." It's, that app, or, that icon. It's when you become a noun that your software takes a leap in usability.
In real life, our most important tools do things, so software designers try to emulate that. But the best-loved tools are also nouns. And those tools, those nouns, can only do a few things. You start a sentence with a noun, and it limits which verbs apply. So your brain is just faster this way.
It's what toddlers do, and it's the same with people bigger than two years old.
Your users aren't so smart that they want a workflow or a wizard or an action.
Instead, you should try to start with nouns.
Nerdblog.com
On Crossfading Properly
Since Adobe Revel just replicated the thing Google+ did, and they're both wrong, I thought I would say this:
If you have two images over a black background and you want to crossfade between them, please DO NOT fade out the first one as you fade in the second.
(Exception: you can fade the first one out, quickly, at the very end of your animation, if the aspect ratios are different.)
The reason is this: in the middle of your animation, if you do it the Google+/Adobe way, you will have:
- image A at 50%
- image B at 50%
=============
Total opacity: 75%
And you didn't really mean to have 25% of the background showing through there, did you?
Crossfading between two images this way will leave you with a 25% darker image in the middle of your very fast crossfade, and that's very distracting and looks bad.
You don't want intensity to change in a crossfade, unless it's very slow and fades to black on purpose.
If you have two images over a black background and you want to crossfade between them, please DO NOT fade out the first one as you fade in the second.
(Exception: you can fade the first one out, quickly, at the very end of your animation, if the aspect ratios are different.)
The reason is this: in the middle of your animation, if you do it the Google+/Adobe way, you will have:
- image A at 50%
- image B at 50%
=============
Total opacity: 75%
And you didn't really mean to have 25% of the background showing through there, did you?
Crossfading between two images this way will leave you with a 25% darker image in the middle of your very fast crossfade, and that's very distracting and looks bad.
You don't want intensity to change in a crossfade, unless it's very slow and fades to black on purpose.
Windows 8
I bought a Lenovo Yoga to try out Windows 8. The good news is that screens are getting somewhat better on Windows laptops. The Yoga even has IPS, so it has contrast and the colors don't look insane when you look at it from a slight angle.
Many other touchscreen laptops have screens that bounce around when you touch them, which is a bad thing for a touchscreen to do. The Yoga is pretty solid.
I really disliked everything about the new OS, but now I find that I'm adjusting to most of it, and touch on the desktop is the unexpected HUGE benefit.
Overall the "new" parts of the OS feel very rough. In a way, Windows 8 gives me the ability to goof off and to work on the same machine (which feels more like working than using an iPad.) It's not going to be my main machine, though, because it doesn't deliver on work or play as well as the dedicated machines do.
What's Surprisingly Good
IE on a touchscreen! Because two-finger zoom on a desktop browser is just incredible. Of course, I don't use IE because Chrome is actually faster for everything other than zooming, and Chrome doesn't zoom yet. In my opinion, touch without zoom is not nearly as much fun.
Scrolling with your fingers in regular apps, when it works. Sketchup is pretty fun with touch especially.
What's Not Great
Touch almost works on the desktop, but you really can't click anything that's of a normal size. I can't close a tab in Chrome, can't close a Window, and I can't actually hit most buttons in a dialog box. This may be the accuracy of this model's touch screen, but it's very frustrating - I can use remote desktop on an iPad more easily than this, probably because it allows zooming when I really want to click a button.
Because Microsoft didn't spend enough effort fixing the desktop, a majority of the UI is inherited from Windows 7 (like the entire Control Panel and Explorer), which is made up of tiny close-together links, so nothing at all is usable with a touchscreen. There is apparently no gesture to zoom in to click on a thing you really want to, so you're absolutely stuck using the trackpad to click on small objects, which is almost everything.
The ugly desktop: the window chrome is huge and the visual design is completely lacking. It's like looking at a Powerpoint wireframe of a UI, and less customization than ever before. For instance, there is a narrow range of color settings that makes the taskbar look decent at all, and while they give you a couple color choices by default, it's very hard to see at a glance what's going on: which shade of gray is the active window, etc. This set of choices makes the desktop UI tiring to use.
The two-headed hydra of "Modern" vs the traditional OS: the launcher has never previously needed full-screen real estate on the desktop, and it pretty obviously doesn't deserve it. This UI is very half-baked, and it misses on some basic usability. Microsoft could have built a Quicksilver-style overlay view in the desktop mode that allows launching the 4 most popular Modern apps, but they might have also kept the benefits of the desktop UI.
In case this point hasn't been articulated by every single reviewer of the OS so far, I'll add my two cents. On the desktop I always have tons of state in my head, and I usually launch an app to add to it, not to replace it. When I haven't used my PC all day and I go to look something up, that is the time I want a modal UI that asks which task I meant to do, so I don't forget and admire all the old things I was reading yesterday. But other than this single case, I want the PC to be full of overlapping windows and tons of complexity.
The quality of the built-in Modern apps is mostly poor. The finance app and a few others are pretty nice, but most of them are too minimal, and all of them are too slow. On pretty much the fastest laptop I can buy, most of these apps take >5 seconds to launch. Scrolling is often chunky, not even animated. The email app is flaky. I'm not used to the gestures for sharing content from them, so I won't use them very much. I have existing ways to share content on the desktop, and I don't want new ones.
There are extra rough edges, like Modern apps switching in to tell me they need to update while I'm trying to do work on the desktop.
But overall, I'm surprised that I really like touch in a desktop environment. I almost bought a machine with no touchscreen, but it is more fun than you expect.
I wish Microsoft had spent more time making touch work on the desktop, rather than all the effort they put everywhere else. Touch on the desktop is actually a killer feature (not a flashy one) and it deserves more of their effort in the future. Adding multiple ways to do the same tasks (but in a more limited way) is just not useful.
If Microsoft spent all their effort in the next year making touch magical and seamlessly integrating the best of their new apps a la carte with the Windows desktop, they would have a product people would love, at least a little bit.
Many other touchscreen laptops have screens that bounce around when you touch them, which is a bad thing for a touchscreen to do. The Yoga is pretty solid.
I really disliked everything about the new OS, but now I find that I'm adjusting to most of it, and touch on the desktop is the unexpected HUGE benefit.
Overall the "new" parts of the OS feel very rough. In a way, Windows 8 gives me the ability to goof off and to work on the same machine (which feels more like working than using an iPad.) It's not going to be my main machine, though, because it doesn't deliver on work or play as well as the dedicated machines do.
What's Surprisingly Good
IE on a touchscreen! Because two-finger zoom on a desktop browser is just incredible. Of course, I don't use IE because Chrome is actually faster for everything other than zooming, and Chrome doesn't zoom yet. In my opinion, touch without zoom is not nearly as much fun.
Scrolling with your fingers in regular apps, when it works. Sketchup is pretty fun with touch especially.
What's Not Great
Touch almost works on the desktop, but you really can't click anything that's of a normal size. I can't close a tab in Chrome, can't close a Window, and I can't actually hit most buttons in a dialog box. This may be the accuracy of this model's touch screen, but it's very frustrating - I can use remote desktop on an iPad more easily than this, probably because it allows zooming when I really want to click a button.
Because Microsoft didn't spend enough effort fixing the desktop, a majority of the UI is inherited from Windows 7 (like the entire Control Panel and Explorer), which is made up of tiny close-together links, so nothing at all is usable with a touchscreen. There is apparently no gesture to zoom in to click on a thing you really want to, so you're absolutely stuck using the trackpad to click on small objects, which is almost everything.
The ugly desktop: the window chrome is huge and the visual design is completely lacking. It's like looking at a Powerpoint wireframe of a UI, and less customization than ever before. For instance, there is a narrow range of color settings that makes the taskbar look decent at all, and while they give you a couple color choices by default, it's very hard to see at a glance what's going on: which shade of gray is the active window, etc. This set of choices makes the desktop UI tiring to use.
The two-headed hydra of "Modern" vs the traditional OS: the launcher has never previously needed full-screen real estate on the desktop, and it pretty obviously doesn't deserve it. This UI is very half-baked, and it misses on some basic usability. Microsoft could have built a Quicksilver-style overlay view in the desktop mode that allows launching the 4 most popular Modern apps, but they might have also kept the benefits of the desktop UI.
In case this point hasn't been articulated by every single reviewer of the OS so far, I'll add my two cents. On the desktop I always have tons of state in my head, and I usually launch an app to add to it, not to replace it. When I haven't used my PC all day and I go to look something up, that is the time I want a modal UI that asks which task I meant to do, so I don't forget and admire all the old things I was reading yesterday. But other than this single case, I want the PC to be full of overlapping windows and tons of complexity.
The quality of the built-in Modern apps is mostly poor. The finance app and a few others are pretty nice, but most of them are too minimal, and all of them are too slow. On pretty much the fastest laptop I can buy, most of these apps take >5 seconds to launch. Scrolling is often chunky, not even animated. The email app is flaky. I'm not used to the gestures for sharing content from them, so I won't use them very much. I have existing ways to share content on the desktop, and I don't want new ones.
There are extra rough edges, like Modern apps switching in to tell me they need to update while I'm trying to do work on the desktop.
But overall, I'm surprised that I really like touch in a desktop environment. I almost bought a machine with no touchscreen, but it is more fun than you expect.
I wish Microsoft had spent more time making touch work on the desktop, rather than all the effort they put everywhere else. Touch on the desktop is actually a killer feature (not a flashy one) and it deserves more of their effort in the future. Adding multiple ways to do the same tasks (but in a more limited way) is just not useful.
If Microsoft spent all their effort in the next year making touch magical and seamlessly integrating the best of their new apps a la carte with the Windows desktop, they would have a product people would love, at least a little bit.
iTunes, by spamassassin
I found a copy of the iTunes Terms and Conditions and Privacy Policy in my spam folder.
Funny.
Here's what Spamassassin has to say about it:
Funny.
Here's what Spamassassin has to say about it:
X-Spam-Report:
* 2.2 INVESTMENT_ADVICE BODY: Message mentions investment advice
* 2.4 TVD_PH_BODY_ACCOUNTS_PRE TVD_PH_BODY_ACCOUNTS_PRE
* 2.1 ADVANCE_FEE_4_NEW Appears to be advance fee fraud (Nigerian 419)
* 3.5 ADVANCE_FEE_3_NEW Appears to be advance fee fraud (Nigerian 419)
* 0.0 FORM_FRAUD_5 Fill a form and many fraud phrases
How Daylights Savings Time made me Tired for Two Weeks
Along with everyone else, we stopped observing Daylight Savings Time a couple weeks ago. Lorna and I adjusted all our clocks, at least the ones that didn't adjust automatically.
Of course that switch makes everyone tired for a few days. But it's been worse this year, and I didn't understand why until recently.
It has something to do with our toddler.
Because in that way that babies are, the baby didn't notice. She just doesn't read most words or notice what time it is.
Now, a couple weeks after the "switch," I realized that I'm living in a house with a person who basically ignores what time the clock says. Baby Girl is going to bed and waking up at the same time as before, but the same solar time. We are going to bed an hour later, and then waking up when she does.
And interestingly, what's happening is: we're missing about an hour of sleep every night, and it took me a long time to figure out why. But I've been tired for two weeks now, and that's why.
It's seems so obvious that a person who can't read the clock is behaving differently than one who does. We must be really attached to going to bed at a certain time, and not when we're tired, right?
The temperature
Around the same time, my nest updated, and it seems to regard the numbers we set with a little more "flexibility" than before. So 72 doesn't seem to be 72 anymore. It's 71 or 73, or whatever. I can't really explain, just that I used to dial in particular magic numbers, and now they seem to overshoot sometimes.
And in nest's defense, I do think nest deserves to use numbers, because it can't adjust the temperature instantly. You need a way to say what you mean for the future.
Photo editing
And back in the old days when we were designing Picasa, we took the numbers off of a lot of the sliders, so you would look at what you were doing to the picture, rather than the number. This was really uncommon back then. In photo editing, you can actually make an argument that the numbers matter. What if you want to do the same thing to 5 photos, but you don't want to copy & paste the whole set of effects? Photoshop jocks do really use the numbers, and they like to see them, and then copy and paste and tell people about them.
But we took them off anyway, and we tried to make the sliders work right instead. So I guess what I'm about to say is a thing I've been thinking for a while.
That Analog Show
Mostly, I've been thinking about the next f.lux UI, and how much to show the color temperature number ("5000K!") and how important it is, or isn't. Maybe it isn't. I made it really big in one sketch and then I took it off completely in another.
And you wind up realizing that we use numbers when we need to coordinate. Like, "I'll meet you at 2PM." Or to make things reproducible ("Set the Photoshop levels to 0, 220 with a gamma of 1.2.") Or even when there's a delay, like "Make the temperature 72 sometime soon. I'm too cold." Or maybe, if you have to explain something to someone over email or on the phone.
But if you don't have a reason like this, you are...
In love with numbers
One big part of simplifying our interfaces is to make them more analog, more relative, and more human. It doesn't mean that we should give up the text that lets us coordinate and communicate.
But maybe we're ignoring our own best judgment, like when to go to bed, because we have this clock that says, "It's only 10:30!" And in these cases, it might be advisable to hide the numbers temporarily, unless you need them for some important reason. Like if you have an appointment you have to drive to, or if you want to talk about the details of your Photoshop filter.
In a way, wall clock time is just a technology. It's a pretty good one, suitable for coordinating activities and knowing if a store is opening without driving to it. But with modern devices, you could really pretty much replace the entire technology of time with realtime communications. It's a neat exercise to think through the implications of removing these numbers. Does it make it harder or easier? How much reinvention do you need to replace those numbers with something meaningful and intuitive?
So it's a challenge sometimes. But what if we did the experiment to dial numbers back a level in our interfaces, and then we figured out how to make things work without them? It's actually important not to lose the functionality that the numbers give, but to replace it intelligently and in an ambient way.
Maybe that's a challenge for you, too.
A Day with Philips Hue
I got a Philips Hue on the first day it was available at the Apple Store and had f.lux running 3 hours later. Here are my notes.
Some notes about Hue in general:
Discovery
Hue uses SSDP (like Roku and Sonos do). So, discovery is pretty standard. You can also walk your class-C network and look for a webserver responding to /description.xml, which is cheating (but it works.)
Authentication
Hue relies on client-generated secrets. Each client generates a secret (likely one of the device unique identifiers), and then uses that to talk to the hub.
So you'll see an http request like this:
Some notes about Hue in general:
- Color is great, whites look good
- Bulbs are efficient (8.5W)
- Brightness is good, useful as a regular bulb.
- The controller rate-limits updates from the software. So if you wire up a slider to send messages at 10fps, it won't work. You can send 2-3 messages per second, and then it does some interpolation on its own, which might not give the "look" you want.
- Powering down a bulb (like with a lightswitch) and restarting loses all the bulb's state! Depends on a client to restore it. The controller bridge really should do this automatically.
- Range isn't so great -- Zigbee loses to my DECT phones and baby monitor and wireless network. So you really need a "mesh" of nodes, not two bulbs 50 feet away.
- Minor: Bulbs have a front-facing distribution (put out less light to the side and back than the L-Prize bulb.)
Discovery
Hue uses SSDP (like Roku and Sonos do). So, discovery is pretty standard. You can also walk your class-C network and look for a webserver responding to /description.xml, which is cheating (but it works.)
Authentication
Hue relies on client-generated secrets. Each client generates a secret (likely one of the device unique identifiers), and then uses that to talk to the hub.
So you'll see an http request like this:
GET /api/{secret}/lights HTTP/1.1
And the switch will respond "unauthorized user." The client will then start polling to make a user:
POST /api
{"username": "{secret}", "devicetype":"{name}"}
And Hue will respond (in JSON):
"link button not pressed"
Once the button is pressed:
"success"
Basic Controller
The current iOS client appears to poll /api/{secret} once per second, which gives the whole dump of settings. Most of these seem writable.
To change a light you do a PUT to /api/{secret}/lights/#/state (not POST).
(where # is a number you found from the main lights feed. On the default kit you'll have lights 1-3 available.)
Contents are JSON! For single brightness and color settings (not groups or scenes) you might see something like this:
{"bri": 128, "ct": 200, "on": true}
Brightness appears to go to 255, color temperature is 500 to 154 (which corresponds roughly to 2100K to 5800K, somewhat nonlinear.)
Or you can send xy coordinates to control the bulb in color (use your handy sRGB to XYZ matrix):
{"bri": 255, "xy":[0.4, 0.4], "on": true}
You must rate limit your client in the range of 2-3 updates per second, or the hub will send you a 503 and throw away your changes. It appears to be "worth it" to stay in this range, or the rate limits get a little more severe.
Advanced Controller [TBD]
The software has the ability to define groups and scenes. Have not investigated yet.
{"username": "{secret}", "devicetype":"{name}"}
And Hue will respond (in JSON):
"link button not pressed"
Once the button is pressed:
"success"
Basic Controller
The current iOS client appears to poll /api/{secret} once per second, which gives the whole dump of settings. Most of these seem writable.
To change a light you do a PUT to /api/{secret}/lights/#/state (not POST).
(where # is a number you found from the main lights feed. On the default kit you'll have lights 1-3 available.)
Contents are JSON! For single brightness and color settings (not groups or scenes) you might see something like this:
{"bri": 128, "ct": 200, "on": true}
Brightness appears to go to 255, color temperature is 500 to 154 (which corresponds roughly to 2100K to 5800K, somewhat nonlinear.)
Or you can send xy coordinates to control the bulb in color (use your handy sRGB to XYZ matrix):
{"bri": 255, "xy":[0.4, 0.4], "on": true}
You must rate limit your client in the range of 2-3 updates per second, or the hub will send you a 503 and throw away your changes. It appears to be "worth it" to stay in this range, or the rate limits get a little more severe.
Advanced Controller [TBD]
The software has the ability to define groups and scenes. Have not investigated yet.
Just in case you want to avoid updating an iOS app...
If you're using a jailbroken phone and you want to avoid updating an iOS app for any reason:
1. Login via ssh and copy the sandboxed version of the app to /Applications.
2. Uninstall the sandboxed version.
3. Reboot/Respring to make Springboard notice the version in /Applications.
It's all about the Audience
It was 2004, and we were in a meeting at Google debating if Picasaweb would have comments in the first version. (There was actually a contingent saying that maybe this wasn't needed.)
And I remember this moment like yesterday. Lorna, our PM (who I married two year later, so I'm not biased at all) piped up to say, "You know, Flickr gives people who look at your pictures something fun to do. It's all about the audience." Blink.
This view won several years later, and it's one of the biggest network effects online today. You don't make photo sharing sites that make it easy to share photos--it doesn't matter. You make photo sharing sites that give you an audience for sharing. That's Facebook, and it's the reason it is so very hard to compete with Facebook right now. Best audience, and the rest doesn't matter.
I keep telling people if Facebook made it nightmarishly hard to post a photo, 10x harder than today, it actually wouldn't matter much. People would figure out how and keep doing it, because the audience is there, and they like being there. They look at me like I'm insane for a few seconds, and then it usually clicks.
Moral of the story: when you "focus on the user", it's important to know who the user actually is.
And I remember this moment like yesterday. Lorna, our PM (who I married two year later, so I'm not biased at all) piped up to say, "You know, Flickr gives people who look at your pictures something fun to do. It's all about the audience." Blink.
This view won several years later, and it's one of the biggest network effects online today. You don't make photo sharing sites that make it easy to share photos--it doesn't matter. You make photo sharing sites that give you an audience for sharing. That's Facebook, and it's the reason it is so very hard to compete with Facebook right now. Best audience, and the rest doesn't matter.
I keep telling people if Facebook made it nightmarishly hard to post a photo, 10x harder than today, it actually wouldn't matter much. People would figure out how and keep doing it, because the audience is there, and they like being there. They look at me like I'm insane for a few seconds, and then it usually clicks.
Moral of the story: when you "focus on the user", it's important to know who the user actually is.
iPhone vs. S3
Just a little spreadsheet for your day.
8GB iPhone: $99
16GB iPhone: $199 (+$12.50/GB)
32GB iPhone: $299 (+$6.25/GB)
64GB iPhone: $399 (+$3.12/GB)
Dropbox: $2/GB/year
Amazon S3: $1.25/GB/year
Cloud storage looks cheap when you compare it to storage in your pocket.
8GB iPhone: $99
16GB iPhone: $199 (+$12.50/GB)
32GB iPhone: $299 (+$6.25/GB)
64GB iPhone: $399 (+$3.12/GB)
Dropbox: $2/GB/year
Amazon S3: $1.25/GB/year
Cloud storage looks cheap when you compare it to storage in your pocket.
Sync is the new lock-in
I tried to run Firefox, instead of Chrome, yesterday.
And in that moment I realized how much I depend on Chrome's sync feature. Chrome owns my browsing because of its fantastic ability to sync all this stuff between all my computers, PC, Mac, everywhere.
But it felt so strange, because Firefox had none of my bookmarks, bookmarklets, passwords, and I just couldn't remember what I was going to do with it.
And in that moment I realized how much I depend on Chrome's sync feature. Chrome owns my browsing because of its fantastic ability to sync all this stuff between all my computers, PC, Mac, everywhere.
Dropbox contains tons of my important files, because it does the same thing.
And I've stopped buying music on Amazon because iCloud is so good at getting music to all my devices now.
Syncing is the bridge between the cloud and the PC and mobile devices. It saves dozens of steps, keeping everything merged intelligently, and even combining metadata automatically.
But of the three examples, only Dropbox provides a way to get to my data from anywhere, through a regular web browser, and with a good API that works with other services.
Google's Data Liberation page (which has a fantastic mission), has PC-era directions for moving your bookmarks to a new browser. You're supposed to sit at your computer and push an export button! And the instructions provided about how you can view your bookmarks in Google Docs haven't worked for over a year. Google has moved Chrome bookmarks somewhere else now, and while users ask for a solution, none is forthcoming.
This "online viewing" should be a much bigger priority for Google. What if I mostly want to use Chrome, but I want to own my data and occasionally use it somewhere else?
Google has a separate delicious-like "bookmarks" service that appears to be completely different than Chrome's bookmarks. And while I really like social bookmarking sites too, I use them for a different purpose. In the browser, I use lots of bookmarklets and folders, and I really care about what order my commonly-accessed sites appear.
This "online viewing" should be a much bigger priority for Google. What if I mostly want to use Chrome, but I want to own my data and occasionally use it somewhere else?
Google has a separate delicious-like "bookmarks" service that appears to be completely different than Chrome's bookmarks. And while I really like social bookmarking sites too, I use them for a different purpose. In the browser, I use lots of bookmarklets and folders, and I really care about what order my commonly-accessed sites appear.
The New Lock-In
Of course, if you think about it, while you're sitting on the couch with your iPad, there is no way to get the Chrome bookmarks exported from your Windows machine to show up in Mobile Safari. Part of this is Apple's fault, of course.
On the iPad, I can get to my Dropbox, but I can't get to my bookmarks.
On the iPad, I can get to my Dropbox, but I can't get to my bookmarks.
And I think there's at least a partial solution in Dropbox: if you care about your users, every proprietary sync feature should have a live webpage, that you can access from anywhere. (And you should work hard at cross-platform support, too.)
Otherwise, like Apple and Google do today, you have created a new form of lock-in. And it's almost worse than the old kind.
In the old way, files were mostly idle on disk, and data was sort of stuck in a hard-to-parse format on a server.
But it is worse with data that changes all the time, because "exporting" isn't good enough. You can't export a moving target.
If you want to access your recent Chrome Bookmarks, you really need to write your own sync utility, or at least periodically export from Chrome.
I want Google to do the right thing, and I want to use sync feature in Chrome, which is amazing. But maybe I will need to use XMarks instead. This feels complicated, hard to set up, and probably more prone to breaking than Google's solution, so I'm trying not to do it. But it may be the only solution available today.
Data that changes frequently is the hardest to "liberate", but it is also data that is very important to users. It is critical to get this right. We should insist that these amazingly-convenient sync features don't become the next form of vendor lock-in.
Google, at least give me a webpage with my Chrome bookmarks on it?
In the old way, files were mostly idle on disk, and data was sort of stuck in a hard-to-parse format on a server.
But it is worse with data that changes all the time, because "exporting" isn't good enough. You can't export a moving target.
If you want to access your recent Chrome Bookmarks, you really need to write your own sync utility, or at least periodically export from Chrome.
I want Google to do the right thing, and I want to use sync feature in Chrome, which is amazing. But maybe I will need to use XMarks instead. This feels complicated, hard to set up, and probably more prone to breaking than Google's solution, so I'm trying not to do it. But it may be the only solution available today.
Data that changes frequently is the hardest to "liberate", but it is also data that is very important to users. It is critical to get this right. We should insist that these amazingly-convenient sync features don't become the next form of vendor lock-in.
Google, at least give me a webpage with my Chrome bookmarks on it?
Always running, or at least running fast
There's something very compelling about writing a little script and putting it online. Because even if someone comes by once every three days and tries it out, there it is! Online always. Software like this is alive in a way that a binary on a PC is not.
It's been fun shipping our f.lux app to the desktop, because it's always on, and even though it does just a small thing, doing that thing without using a lot of resources, and running all the time is sort of neat.
Running all the time hasn't been true of the "app" on the desktop or device. Since we've historically tried to save RAM, launch times have remained inconvenient and excessive. Excel now takes 30 seconds. Visual Studio can take a minute. Photoshop, forever. Sure, we have these annoying tray icon apps with their inconvenient UIs, but the PC is getting slower for doing real work.
Dropbox is always on, and instantly useful. Gmail and Facebook are very fast, because they're already "loaded" into a server somewhere.
Excel XP from ten years ago launches in a half second. This year, Excel takes 30 seconds.
I'm not sure if Apple's quest, with OSX Lion, to ignore whether or not apps have launched yet is the right approach. Apple now hides the little "light" under each icon that says if an app is running, and it tries to restore some application state on reboot. This is good, but it's still too slow.
xCode now takes forever to launch, and so does iTunes. Launch times are getting worse, in a world where that really makes no sense. People's tolerance for 30 second launches is lower, since they're used to mobile OSes, which are fast because the apps are simpler. And people seem to be more distractible: when iTunes takes 30 seconds to launch, most people will have forgotten the song they wanted to hear and will have checked their Facebook messages instead.
You can't ignore the engineering around making launch times small, and complexity makes for sloppiness. A launch that takes a full second is noticeable, and probably most apps should strive for 500ms, at the most. 30 seconds is completely absurd and negligent.
Superfetch, Readyboost, etc., all aren't good enough. Important stuff needs to be loaded into RAM. How do we launch in one seek, rather than 10,000? SSD can't fix everything.
This problem, making apps launch fast, is 100 times as important as making Windows boot fast, and it's 100 times as complex. Hope the next versions of the OSes get to fix this, or application writers start paying attention to it.
Apps should launch instantly, and more real services (not launcher icons) should be loaded automatically, so the launch isn't there at all.
The perception of productivity on the desktop will wane quickly if this particular bloaty trend isn't fixed.
It's been fun shipping our f.lux app to the desktop, because it's always on, and even though it does just a small thing, doing that thing without using a lot of resources, and running all the time is sort of neat.
Running all the time hasn't been true of the "app" on the desktop or device. Since we've historically tried to save RAM, launch times have remained inconvenient and excessive. Excel now takes 30 seconds. Visual Studio can take a minute. Photoshop, forever. Sure, we have these annoying tray icon apps with their inconvenient UIs, but the PC is getting slower for doing real work.
Dropbox is always on, and instantly useful. Gmail and Facebook are very fast, because they're already "loaded" into a server somewhere.
Excel XP from ten years ago launches in a half second. This year, Excel takes 30 seconds.
I'm not sure if Apple's quest, with OSX Lion, to ignore whether or not apps have launched yet is the right approach. Apple now hides the little "light" under each icon that says if an app is running, and it tries to restore some application state on reboot. This is good, but it's still too slow.
xCode now takes forever to launch, and so does iTunes. Launch times are getting worse, in a world where that really makes no sense. People's tolerance for 30 second launches is lower, since they're used to mobile OSes, which are fast because the apps are simpler. And people seem to be more distractible: when iTunes takes 30 seconds to launch, most people will have forgotten the song they wanted to hear and will have checked their Facebook messages instead.
You can't ignore the engineering around making launch times small, and complexity makes for sloppiness. A launch that takes a full second is noticeable, and probably most apps should strive for 500ms, at the most. 30 seconds is completely absurd and negligent.
Superfetch, Readyboost, etc., all aren't good enough. Important stuff needs to be loaded into RAM. How do we launch in one seek, rather than 10,000? SSD can't fix everything.
This problem, making apps launch fast, is 100 times as important as making Windows boot fast, and it's 100 times as complex. Hope the next versions of the OSes get to fix this, or application writers start paying attention to it.
Apps should launch instantly, and more real services (not launcher icons) should be loaded automatically, so the launch isn't there at all.
The perception of productivity on the desktop will wane quickly if this particular bloaty trend isn't fixed.
More thoughts on Google+ (after using it for a few days)
My Google+ experience is in that exciting time, with new people are coming in every day. And the extended Google network is also very compelling. Most of the people on Google+ today were invited by Googlers, so it's mostly smart people saying interesting things. I'm amazed in some ways all the people I don't know.
Reshare and Publicity
Many of my earlier comments about discovery/serendipity have been dodged by one thing I didn't anticipate. A huge portion of the content in Google+ is public, like Twitter. This means that there is a public sphere and a very private one. Nice way for Google to be in the game. For me, it's becoming hard to find the private content now (and this is not necessarily good).
Re-share also has some significant benefits. I'm not a fan of the re-share presentation (it should be more compact and integrated), but I get the value of it. To take a public conversation into a small group and talk about it makes a ton of sense. Already, some of the huge public threads have become incredibly unwieldy. I don't care about 500 public comments, but more about what my friends have to say.
Invites
Reshare and Publicity
Many of my earlier comments about discovery/serendipity have been dodged by one thing I didn't anticipate. A huge portion of the content in Google+ is public, like Twitter. This means that there is a public sphere and a very private one. Nice way for Google to be in the game. For me, it's becoming hard to find the private content now (and this is not necessarily good).
Re-share also has some significant benefits. I'm not a fan of the re-share presentation (it should be more compact and integrated), but I get the value of it. To take a public conversation into a small group and talk about it makes a ton of sense. Already, some of the huge public threads have become incredibly unwieldy. I don't care about 500 public comments, but more about what my friends have to say.
The Plaxo Curve
When Plaxo first crawled our Outlook address books back in 2002 and encouraged everyone to invite all their contacts in one go, it was novel, because nothing had ever spread so fast. I recall it took Aol's Instant Messenger nearly 12 years to grow to 90 people per buddy list. But after Plaxo, it took this next generation of social networks not long at all. (My Google+ account has this many people, already.) Since then, it's become necessary for each new service to plumb your email contacts and IM contacts and make friend of a friend suggestions, in order to grow quickly enough.
If you think of it that way, the invite policy of social software results directly in a growth curve. Tagged.com took it too far, spamming friends without even asking your permission. Google's prior effort, Buzz, mostly confused users by not giving enough control. Facebook takes it right up to the line and stays on the side of user-controlled politeness, with a great Friend Finder that can login to a bunch of services.
But especially given the limited number of people on the service, Google's "Plaxo number" is very high indeed. People I don't know are adding me, sort of like Twitter. And I already have >100 people in my circles, despite being on the service for only a few days. Google isn't logging into as many services as Facebook, but they're making the contacts they have count for a lot. Never has adding people been quite so fun.
This bodes well for growth, and with Google's sorting tools, that growth is manageable too.
Invites
Based on promises that you would be able to share any entry by email, I uploaded a video and shared it to 20 people who haven't got Google+ accounts yet. They all got "permission denied" errors and emailed me about them. So it goes with a field test, I guess.
Integration and Speed
The integration with google.com navigation is incredibly compelling. Every search result tells me when Google+ has new stuff for me. I look at that top bar on Google more times per day than my email. Seriously, this is almost as good for Google as building Google+ directly into the browser.
A related bit: Google+ is incredibly fast to load, so I'm never afraid to popup the notification window or clickthrough. For me, Facebook's mobile app in particular has been taking >10 seconds per pageview, which gives me pause if I want to click through an email from my phone, or not.
Limited sharing a good match for photos
My usage of Picasaweb has been declining, but I expect Google+ to bring it back. Sharing by email was laborious, and the previous "groups" interface was daunting. It was becoming too easy to post a few photos on Facebook instead.
That said, I believe the Circles UI doesn't scale as well as it could.
I have too many people in the "friends" bucket, just like Facebook. I started adding "Family" to "Friends" also, halfway through, so I could just share with one group most of the time. Understanding which users are in multiple groups is often confusing. Knowing who you're sharing could be better, but today is not so clear: you have to be really precise about managing people in order for the experience not to devolve into an experience exactly like Facebook.
API
There's mention of an upcoming API. I can't wait.
Circles and Serendipity (Google+ thoughts)
After a few hours using it, I think Google has done a decent job with Google+. It's a gigantic improvement over Buzz.
I also believe they have over-thought the edge case "I'm in charge of my privacy", and perhaps killed some of the serendipity that is the real magic behind social software.
Let's start with some stories.
I'm a new parent
We recently had a baby, and we talk (a bit) about being new parents on Twitter and post pictures on Facebook. But what's amazing is the half-dozen people we both used to work with who've become "parent friends" due to this change in our lives, because of social media, because of the messiness of it, and because of the serendipity of it.
I wonder if in the Google+ world, we would have ever discovered these connections. Using the "Circles" UI to its fullest, I'd have a "parent friends" circle, and I'd not show any evidence that I've become a parent to my nerd friends. Why would they necessarily care? I don't really know for sure that they care, so I probably wouldn't pester them. And that's the fundamental problem with Google+.
And, Once I Broke my Foot
I broke my foot two years ago, and through a Twitter post that wound up in Friendfeed, learned that a former colleague had broken his arm at the same time. It became extra-interesting to post updates because I found out someone was going through a similar set of challenges at the same time.
Is it really like the real world?
The idea that "circles" represent the world exactly like real life seems to be failing me. In real life, people notice I have a baby carrier and had a foot brace, but online, these things don't happen.
Also, in the real world, I meet new people sort of by accident, and this doesn't happen as much online. The best approximation is a person who makes an interesting comment, and Google+ does this as well as anything else online.
But in some ways, that's why the messy, serendipitous social media "oversharing" works at all. Because it approximates context, not because it excludes it.
Much like eBay and Craigslist created markets that barely existed offline, I think the most magical experiences online are the unexpected and accidental. If you put a thing online that all your real-life friends think is weird, you'll find a million people online who actually agree with you. And if you had to name them all first, you couldn't do it.
I can't remember ever experiencing this sort of serendipity over email. But most certainly it happens every day on Twitter, and occasionally it happens on Facebook.
In some ways, Google+ is trying to do a better, more social email, almost a half Facebook and half an awesome address book, and I grant there's a place for that. But some aspect of it feels like work, not play. Perfect for a company that's a bit secretive but has a rich internal culture, but not so applicable to real life.
And so I worry that the lack of magic will hurt it in the end.
UI thoughts
My overwhelming feeling is that the UI that you use everyday in Google+ has tons of friction.
For instance, maybe I'll spend 5 minutes ever in my life adding friends to circles, and it's insanely cool and fun. Fantastic. Magic.
But then, there's this UI you use every day, the one that creates a "To line" email-style interface to making a post. I don't like it at all. It's cumbersome and a lot of work.
This part of the interface could be amazing, and instead, it's more boring than email. It feels transient, and it's on the wrong part of the page. Yes, if I click the "Friends" container before making my post it sort of auto-fills for me (okay!) but it doesn't show who I've left out, who I'm including, or anything like that.
But basically, it's too opaque. You get a little blue tile that says "Friends" on it, and that's all you know. Once you close the popup it doesn't say how many friends you have, or show their faces or who's online, who's been online in the last week, or anything. It's anti-social.
And it makes me think a lot before posting, which means I'm going to post a lot less. "Is that person in Family AND Friends or just Family? Maybe I'll just email it."
If they fix nothing else, let it be this interface:
I also believe they have over-thought the edge case "I'm in charge of my privacy", and perhaps killed some of the serendipity that is the real magic behind social software.
Let's start with some stories.
I'm a new parent
We recently had a baby, and we talk (a bit) about being new parents on Twitter and post pictures on Facebook. But what's amazing is the half-dozen people we both used to work with who've become "parent friends" due to this change in our lives, because of social media, because of the messiness of it, and because of the serendipity of it.
I wonder if in the Google+ world, we would have ever discovered these connections. Using the "Circles" UI to its fullest, I'd have a "parent friends" circle, and I'd not show any evidence that I've become a parent to my nerd friends. Why would they necessarily care? I don't really know for sure that they care, so I probably wouldn't pester them. And that's the fundamental problem with Google+.
I broke my foot two years ago, and through a Twitter post that wound up in Friendfeed, learned that a former colleague had broken his arm at the same time. It became extra-interesting to post updates because I found out someone was going through a similar set of challenges at the same time.
Is it really like the real world?
The idea that "circles" represent the world exactly like real life seems to be failing me. In real life, people notice I have a baby carrier and had a foot brace, but online, these things don't happen.
Also, in the real world, I meet new people sort of by accident, and this doesn't happen as much online. The best approximation is a person who makes an interesting comment, and Google+ does this as well as anything else online.
But in some ways, that's why the messy, serendipitous social media "oversharing" works at all. Because it approximates context, not because it excludes it.
Much like eBay and Craigslist created markets that barely existed offline, I think the most magical experiences online are the unexpected and accidental. If you put a thing online that all your real-life friends think is weird, you'll find a million people online who actually agree with you. And if you had to name them all first, you couldn't do it.
I can't remember ever experiencing this sort of serendipity over email. But most certainly it happens every day on Twitter, and occasionally it happens on Facebook.
In some ways, Google+ is trying to do a better, more social email, almost a half Facebook and half an awesome address book, and I grant there's a place for that. But some aspect of it feels like work, not play. Perfect for a company that's a bit secretive but has a rich internal culture, but not so applicable to real life.
And so I worry that the lack of magic will hurt it in the end.
UI thoughts
My overwhelming feeling is that the UI that you use everyday in Google+ has tons of friction.
For instance, maybe I'll spend 5 minutes ever in my life adding friends to circles, and it's insanely cool and fun. Fantastic. Magic.
But then, there's this UI you use every day, the one that creates a "To line" email-style interface to making a post. I don't like it at all. It's cumbersome and a lot of work.
This part of the interface could be amazing, and instead, it's more boring than email. It feels transient, and it's on the wrong part of the page. Yes, if I click the "Friends" container before making my post it sort of auto-fills for me (okay!) but it doesn't show who I've left out, who I'm including, or anything like that.
But basically, it's too opaque. You get a little blue tile that says "Friends" on it, and that's all you know. Once you close the popup it doesn't say how many friends you have, or show their faces or who's online, who's been online in the last week, or anything. It's anti-social.
And it makes me think a lot before posting, which means I'm going to post a lot less. "Is that person in Family AND Friends or just Family? Maybe I'll just email it."
If they fix nothing else, let it be this interface:
What's the filter?
In some ways the brilliance of Facebook is that they've spent a great deal more effort on what the receiver wants to see, rather than what the sender wants to share.
And in so many ways, this focus is a much better approximation to real life than the "need to know" classified access-control-list email addressbook complexity of making a person limit their sharing to a certain circle of friends.
My Facebook friends are mostly the people I believe aren't insane. They might not want to see baby pictures all the time, but I don't mind if they do.
And I'd rather the software takes care of that....if I put "Baby Girl" in the title, some people won't want that stuff ranked very high, so it can be harder to find. If Facebook doesn't do this already, I imagine their approach leads naturally to classifying content (not just people) and showing information to the right people. (Bubble filter indeed, but why not.)
I know there's an important "user story" about a 19 year old who goes to a party and doesn't want her parents to see the pictures. The trend we've seen is that people facing the un-coolness of their social network ("Mom's on Facebook!") will gravitate to using a different site for this purpose. No single site has been able to "fix" this problem, no matter how good its groups UI. Facebook has a fantastic Groups system that nobody uses, but they don't make it so prominent.
In some ways it will be neat to see if Google+ manages to catch this endless churn and contain it. But I think to do it you have to make cool and identifiable "spaces" for people/circles to interact. (Even Facebook Groups have their own photo galleries.) If there's a circle for your friends, you should be able to brand it, like the new cool site you moved to because your mom joined Facebook. I think a subtle tab highlighted on the left isn't enough.
In trying to contain the "mom problem", again, the network loses. Google+ has a "Share" (reshare?) feature, but this again has a ton more friction, compared with Facebook's version: "Michael commented on Lorna's photo..." with friend-of-a-friend visibility.
In some ways, the seamless way that FriendFeed would remix streams of friends based on "Like" clicks, and Twitter with Retweet, simply had no historical precedent in online communication. Email forwarding is hard work, and so is the Google+ Share button.
Serendipitous or intentional? Facebook's is magic. Google's is more like email forwarding.
Profiles fit great with Google search, but activity streams not so much
For years, Buzz and Picasaweb kept asking to make my profile public. And I kept deleting it. Here's why.
When you search for a thing on Google.com, you expect relevance. And if you're the one being searched for, you want to look good, or not show up.
If you search for my name, you want to find some relevant things about me. Putting "Mike once liked this dorky video on Youtube" (with a kind of authority) at the top of that is somehow out of context. And it's worse if I did that 4 months ago, and I just haven't done anything since.
In my Google Profile, social interactions I've had that happen to be public take up 80% of the screen (even if it's empty or out of date!), and links that I've made to important stuff in my life take up the small bit in the corner.
That sort of "information" makes sense if you visit a twitter.com page, but at a google.com URL, it is not a good representation of a person. You kind of expect "best post of all time" and you get "Mike was in a bad mood when he made a public post 2 months ago."
I'm sure Google has wrestled with this dozens of ways, but I think there's a conflict in there.
Social+
Perhaps Facebook's most audacious and brilliant move is in trying to make the receiver the filter of content, while keeping loose track of potential friends. The filter problem is very unsolved, but it's very exciting as well. If you can show me what I want to see in a single space (not in multiple tabs), and if you can make it relevant based on the content and the context, I think that's a brilliant user experience.
I think the Google+ emphasis on sender-driven sharing replicates email too closely, down to an awkward UI for sharing (which feels like email forwarding). It makes sense to a person who's in a certain habit of using email all day, but it also misses a huge number of interactions that magically, serendipitously happen online via Likes, Retweets, and simpler interactions online.
Google's first effort is impressive, and I think I will use it more than Buzz. It actually nearly solves the "huge niche" of private collaboration, and maybe people will use it for work more than play.
But in the initial version, I think it fails in not being cooler or more magical in any notable way, when compared to the thought leaders in the space, Facebook and Twitter. Google has tons of magic, but it's just not coming through. Lessons learned from the Buzz launch, I'm sure, an abundance of caution. Don't use the technology to scare people!
But when you allow and encourage serendipity, you get magic. If you worry too much about privacy, you capture a ton of niches that care about these things, but you don't become the new way people communicate online.
You just...become a better version of email.
A smartphone in my laptop
We all know the things our smartphones do well: check for mail in the background, get messages, wake up fast. In contrast, our laptops act a lot like desktop computers that are turned off sometimes. They work like they did ten years ago, before WiFi and 3g networks, and they don't do low-power background tasks very well.
Laptops today have "standby" mode, which disables everything the machine does except for keeping RAM alive. But the machine isn't really useful while it's in this mode. If you've stored a file on it, you can't get to it. If the file you saved is very large, uploading it to the "cloud" might take hours, and your favorite network filesystem probably didn't sync before you closed the cover.
You might have trouble backing up your hard drive (or uploading large files) at a time you're not using your computer for something else. Uploading big files is sort of a "non-foreground" task...you want backups to run while you're not using the laptop at all, not while you're streaming from Netflix.
Maybe to accomplish these things today, you have to leave your laptop plugged in with the cover open, glowing all night.
I copied 10GB of photos to my Windows laptop tonight, and then waited 40 minutes for it to copy over the network, with the cover open, sitting on a chair in the corner. The PC was across the room from my Mac laptop, which was downloading an OS update, with the cover open, also for an hour.
You would never design a device to work like that...it's like some mythological creature that can't be disturbed for fear that it will forget what files it was copying and make you start over. It's ridiculous, difficult, and fragile, but it hasn't changed in years.
Laptops wake up slowly compared to newer devices, and they can't do simple network tasks like making something light up when you get new email. When you're downloading a big OS update, and you leave the computer on, sitting on a table in the corner, it's not really using its CPU at all.
A much smaller CPU with very little RAM could do all these jobs well.
CPUs have gotten better at low power, even though they don't compete with the smartphone versions yet. So have hard drives, as they're being replaced by SSD. RAM still uses more than a watt per chip (smartphones have a lot less RAM than a laptop), and a WiFi radio uses <100mW.
One big culprit is the desktop-oriented chipsets, which use tons of wattage (like >10W) when you're not doing much with your PC. This is in contrast to the low-power chipsets that are emerging for Atom-based computers, which can stay in a true "idle" state for ten days. Presumably these improvements might come back to the PC, someday.
Intel has introduced a number of new idle states for their mobile platform that dramatically cut power during idle activity. This aggressive management of power state is why smartphones have long life, in addition to optimization of each component. Smartphones are good at waking up quickly, in response to a network event or a user-driven event.
But, I really just want a little smartphone in my laptop.
I want a computer that is a participant on my network, sharing files, backing up its filesystem, doing very slow uploads through my DSL, checking my email, all using a very tiny amount of power. Almost none of these operations is CPU-intensive, or even RAM-intensive. You could power down all but 64MB of RAM and I'd get by.
One complicated way is to make a hybrid version: a coprocessor that can access my disk and a portion of RAM when my "big" CPU is sleeping. Potentially a machine that runs most of its kernel on the low-power CPU, while apps run infrequently on the bigger one? For instance, an x86 CPU could wake up once a second to do a few cycles of work (a "sendfile" or an event-driven network stack?), handing off a buffer of data to a network controller and sleeping some more. If I'm doing a backup or uploading files, I could buffer a ton of data and go back to sleep.
In some ways, the PC model of "saving files" is very slowly being disrupted by the cloud. People are going to stop using Microsoft Office XP someday, in like 10 years. But the PC model is being disrupted much more rapidly by mobile platforms. Part of this is the square peg of PC hardware model that seems to have frozen some day back in the year 2000. The PC hasn't evolved to be part of the network, and in fact with the laptop, it's gone backwards, because you have to turn it off so much.
From what I can tell, people are not using laptops every day, and yet they are storing valuable data on them, and their home network connections can't sync everything instantly. This is just a very confusing state.
"Post-PC devices" have demonstrated some abilities to do background tasks all the time, not just when they're asked to. You could imagine tons of tasks that could run in the background.
The old platform might do well to try, just a bit, to keep up.
Is Microsoft's consumer failure actually developer failure?
Most people don't understand how far off-course Microsoft's developer tools have gone in the past five years. Today is just five years since Ballmer's "Developers developers developers..." keynote, and in retrospect, it likely was the unlucky omen, the "protest too much" that brought down the ship.
Let's talk about money first.
Today, Microsoft's most expensive developer tools package is called "Microsoft Visual Studio Ultimate Edition" and it costs $11,899. Regular developers who just want a compiler with a profiler can buy a version for $5,469. If you don't pay that much, you can't profile your code to see what's fast and what's slow.
And of course, there are many alternatives with fewer features: there are 1126 versions of Visual Studio to pick from.
Apple's most expensive developer tool is called XCode, and it is free. You can pay $99 for a subscription that allows you to publish stuff that people can download through the app store (and you also get early releases of Apple's OSes.)
Microsoft says very clearly that you should develop for their platforms if you have to, and not because you want to. It seems that they intend to make a ton of profit on these tools, rather than making a ton of profit on their operating system, Windows. And amazingly, revenues for Windows are down 4% this quarter.
To be fair, they have free "Express" versions of their software, which don't allow you to edit user interfaces, or use third-party plugins, like source control. I don't understand how these versions are supposed to encourage people to develop for Windows. For instance, many native apps written for Windows have some tie to MFC, but the Express versions don't support MFC.
Microsoft's developer tools come with all sorts of SQL databases and "team foundation servers" and enterprise-sounding integration, and there's a "servers" pane when you open their IDE that only connects to Microsoft servers.
But: if you want to write a game or deal with video or read an image, you have to separately download a huge DirectX SDK, and then a lot of your old code won't compile. For instance, with some code I made to read images from a webcam for f.lux, upgrading to the new versions has missing header files and no suggestion of what the replacement might be.
Microsoft has a very fragmented installed base (with XP at 40% of users), so certain features are only available on Windows Vista or Windows 7, and they do not make it easy to say, "I really want this app to run on Windows XP." Using Apple's tools, you say, "I want to support this level of OS" and the tools do the rest.
Microsoft's developer samples are mostly very old, and the basic story is that they spent all their effort on .NET/ASP/C#, to the exclusion of providing equal access to the OS from native code, or compatibility layers to make stuff run the same way on XP and later versions of Windows.
So if you do care about the 40% of users who haven't upgraded away from XP, you are in this strange game of chicken with Microsoft. You want tools that build one thing that runs everywhere, and Microsoft are obstinately waiting 10 more years for everyone to be running some Windows-Vista-derived OS with only managed binaries on their PC. You'd love to compile on 64-bit Windows 7 and 32-bit Windows XP at the same time, but you really don't get to.
Chicken.
Apple's XCode comes with subversion and git integration, and it builds "universal binaries" that package up multiple builds for multiple OSes. Apple's OS X has a nice shell with an SSH client, so you can manage your server that runs Linux. You can build binaries for multiple versions of OS X by pushing one button, and the code samples are up to date, and they all compile.
Windows 7 shipped "Powershell" which takes 15 seconds to launch and nobody understands.
Microsoft seems to say to developers: if you're not developing for Enterprise, we simply do not care. Our developer tools business unit can be profitable if we sell licenses for $11,000, but not if we give them away for free. And presumably, in some weird twist of Microsoft politics, the snake eats its own tail: maximize developer profits and your platform stops having any new apps in just five years.
It's confusing, right?
In Microsoft's "ecosystem", seriously talented hobbyist developers are not welcome. Not doors-open welcome, maybe junior-high-school welcome. Seriously, they turned off the dialog editor in their free tools.
So this part is obvious: all the people who are using Apple's free tools or Google's free tools or Linux's free tools to make cool stuff can ship it to consumers, while Microsoft's developers are a different breed, the stuck, the legacy...working for big companies who have to do it this way.
The big story isn't even about the iPad. It's why nobody else can get good developers on their version of the iPad, or the phone. And it's because Apple already had developers using their tools, years before they made an iPhone. And they made it easy for new ones to come on board. They made it free, they made it compatible, and they made their sample code compile.
Today, companies are developing for so many platforms at a time. When you use a tool only 20% of the time, for one of your platforms, for some of your users, it doesn't make sense to pay a premium for it. That $11,000 tool you use 20% of the time is like a $55,000 tool you use 100% of the time.
It seems that in the new world of free software, and Apple and Google, developers are sometimes kids from countries where people don't make much money. Certainly not enough to afford Microsoft's tools.
I don't think that the conclusion is hard: Microsoft needs to give up their little bit of revenue they make from exploiting IT budgets for the "developer tools" line item, and price, package, and explain their software so it makes sense to people who haven't already been doing it for ten years.
Consumers, consumers. consumers?
On writing things down
I found this wonderful little bit of advice-poetry from Manuel Blum a few weeks ago (probably via Hacker News.)
It's called "Advice to a Beginning Graduate Student":
http://www.cs.cmu.edu/~mblum/research/pdf/grad.html
While the whole thing is quite wonderful, the piece that has been wreaking all sorts of havoc in my head this week is the idea that writing makes us smarter.
And you start thinking about that, maybe with your pop psychology hat on for a minute, and realize that being in a certain "state of mind" is just a badly-made FA, where you loop and loop through the same state, never really breaking out of it. And if maybe you're depressed, you do some cognitive-behavioral therapy and fix it by converting that state of mind to something explicit, almost a program that is external to that state entirely.
Maybe back to getting things done in the real world, you think why there are limits to what you can talk about or how much you can get done in a verbal meeting, because your short-term memory is more equivalent to a FA than to a Turing Machine, with its rather large amount of tape. So to really make complicated things or organize complicated tasks, you again have to write them down.
And then again, you think of the successful user experiences, and how amazingly the Facebook news feed is almost literally a tape that a Turing Machine would use, a sort of written record that can be read and written...all of life but in a very linear fashion.
There are dozens more, but it makes it very easy to say that our written language is the most important invention, ever.
It's called "Advice to a Beginning Graduate Student":
http://www.cs.cmu.edu/~mblum/research/pdf/grad.html
While the whole thing is quite wonderful, the piece that has been wreaking all sorts of havoc in my head this week is the idea that writing makes us smarter.
You know what FINITE AUTOMATA can do.
You know what TURING MACHINES can do.
For example, Finite Automata can add but not multiply.
Turing Machines can compute any computable function.
Turing machines are incredibly more powerful than Finite Automata.
Yet the only difference between a FA and a TM is that
the TM, unlike the FA, has paper and pencil.
Think about it.
It tells you something about the power of writing.
Without writing, you are reduced to a finite automaton.
With writing you have the extraordinary power of a Turing machine.
And you start thinking about that, maybe with your pop psychology hat on for a minute, and realize that being in a certain "state of mind" is just a badly-made FA, where you loop and loop through the same state, never really breaking out of it. And if maybe you're depressed, you do some cognitive-behavioral therapy and fix it by converting that state of mind to something explicit, almost a program that is external to that state entirely.
Maybe back to getting things done in the real world, you think why there are limits to what you can talk about or how much you can get done in a verbal meeting, because your short-term memory is more equivalent to a FA than to a Turing Machine, with its rather large amount of tape. So to really make complicated things or organize complicated tasks, you again have to write them down.
And then again, you think of the successful user experiences, and how amazingly the Facebook news feed is almost literally a tape that a Turing Machine would use, a sort of written record that can be read and written...all of life but in a very linear fashion.
There are dozens more, but it makes it very easy to say that our written language is the most important invention, ever.
Intel AMT on new Thinkpads
I got the huge (but pretty) Thinkpad T510, with a big screen. It is good enough that I don't use my Macbook Pro all the time now. I've been doing some work on Windows 7 (mostly unrelated to Windows.) It has a gorgeous screen with high contrast, and great battery life. Quite a departure from the other PC laptops, even if it's moderately huge.
However, I wanted to grump about one thing. There's a whole lot of "remote management" software installed by default on this machine.
One technology is Intel's AMT. It runs a webserver on port 16992 underneath your operating system. It's not entirely obvious how to login or change settings for it. I never figured out how to change the settings, but I was able to disable it through the BIOS.
AMT allows remote reboots, remote web access, and some access to the filesystem.
Intel's RPAT allows remote KVM, also below the OS layer.
Intel's AT is an anti-theft technology that can keep the computer from booting.
All this stuff is shipping on new laptops, some of it vaguely "on". In theory your IT administrator is supposed to configure it and use it to do stuff to your computer, and it's all magically secure for the enterprise.
But this sort of interface massively increases the attack surface to a regular machine. And any worms that manage to also infect this layer could have some serious impact.
And just to be a little bit offensive: my computer shipped direct from China with all this stuff turned on. Given Google's experience earlier this year, configuration like this should probably be turned off by default. Even if it's just to make me feel better.
Consumers shouldn't feel paranoid when they inspect your default settings.
But it is a fine machine otherwise.
However, I wanted to grump about one thing. There's a whole lot of "remote management" software installed by default on this machine.
One technology is Intel's AMT. It runs a webserver on port 16992 underneath your operating system. It's not entirely obvious how to login or change settings for it. I never figured out how to change the settings, but I was able to disable it through the BIOS.
AMT allows remote reboots, remote web access, and some access to the filesystem.
Intel's RPAT allows remote KVM, also below the OS layer.
Intel's AT is an anti-theft technology that can keep the computer from booting.
All this stuff is shipping on new laptops, some of it vaguely "on". In theory your IT administrator is supposed to configure it and use it to do stuff to your computer, and it's all magically secure for the enterprise.
But this sort of interface massively increases the attack surface to a regular machine. And any worms that manage to also infect this layer could have some serious impact.
And just to be a little bit offensive: my computer shipped direct from China with all this stuff turned on. Given Google's experience earlier this year, configuration like this should probably be turned off by default. Even if it's just to make me feel better.
Consumers shouldn't feel paranoid when they inspect your default settings.
But it is a fine machine otherwise.
eBook typography + User Experience
I've been a Kindle user for a little over a year, and I was looking at Google's books effort just now. I've not seen the mobile clients, just the web version.
I have a half-dozen small complaints about Kindle, and mostly I'm a happy user. But Google does very little to improve on Kindle, which is disappointing.
For instance, I haven't seen what Google does when you buy 100 books, which is overwhelming and hard to understand on a Kindle device.
But I have two other complaints that don't seem to be addressed in what appears to be a Kindle clone:
I have a half-dozen small complaints about Kindle, and mostly I'm a happy user. But Google does very little to improve on Kindle, which is disappointing.
For instance, I haven't seen what Google does when you buy 100 books, which is overwhelming and hard to understand on a Kindle device.
But I have two other complaints that don't seem to be addressed in what appears to be a Kindle clone:
- Typography. Books have a personality, and a lot is due to the uniqueness of their layout and typographic choices. Much is lost in the eBook of today.
Real-life books use unique fonts, and they have a variety of typographic settings. Instead, by making every book conform to the same exact point size, to the same leading, to the same font (Georgia, but, look, I can switch to Times!), is boring and makes switching between books feel less engaging.
The world would be better if eBooks used Typekit, or even if they had random defaults to adjust their typography, to give a little more personality. Within a certain kind of variation (small color, spacing changes, etc.), readability wouldn't be impacted, but switching between the 5 books you're currently reading would be very much improved. Recognition at a glance is important, whether that's a book cover or a page. Today's eBooks badly need a typographic personality.
- Search. Another major limitation with a Kindle, especially the hardware version, is that "flipping through" is very slow. Google does a decent job "flipping" online with the arrow keys, but Google's search solution on the Web is no better than Acrobat's...it's off to the side, and dissociated from the paging interface. It's a 1998 interface.
Why not make accessing reference books much better than Kindle? For instance, why isn't search somewhere near the paging interface, and why aren't the results shown in the same spot instead of in a sidebar? Similarly, moving the slider bar doesn't flip through pages (or better, zoom out!)...instead it just does nothing at all until you mouse-up.
Openness is only a theoretical benefit. User experience is a real one. I don't see a real competitor to Amazon (on any front) right now.
Those Tricky PC makers (a hunt for a laptop)
I'm in the market for a decent Windows 7 laptop. We're getting enough Win7-related f.lux bugs that I want a machine that works to test and develop on. I'm mostly using XP now, and have a junky Win7 Best Buy Special laptop I got for $400. It wasn't worth it.
After a ton of shopping, I realized what everyone else has realized: probably the best PC laptop on the market is called a "Macbook". I had to think for a minute about why I will spend $1700 on a Mac laptop, and I'll hesitate whenever a PC laptop costs over $1100.
This $1100 effect...I wanted to put it into words, and I figured out what it was: "They're trying to trick me." If you pay the PC makers more money, they give you more junk. They have no taste and no guide for quality.
Lenovo thinks they can put a screen in their expensive T410 business laptop that has a backlight so dim that you can barely use it in a bright room. Their users complain for years, but they don't make a better one (except on their enormous models). The Macbook's is 2x brighter. The Macbook Air's is 2x brighter. Lenovo's has a contrast ratio a ton worse than my 1998 Dell (that's 1/6 the contrast of a Macbook). The display on my thinkpad inverts intensities if you tilt it upwards by 40 degrees. And their mouse/trackpoint thing has worse drivers now, after 15 years of being great. It's worse than Windows 3.1 again.
HP makes a super-high-end machine called the "envy", and then crams it with crapware, and makes trackpad drivers that are almost unusable. And then to make me extra-happy, kills their highest-end screen, to replace it with a lower-resolution one with worse specs. But the retail price is a bit lower.
Dell still has some of the same designs from 1998 (including the keyboard and battery life). I'm scared of their awful keyboards, or I'd spend more time looking.
Norton. McAfee. TRIAL. Slow.
And so literally, 10 years of shaving $5 here and there, and there's no PC laptop that has a moderate weight, a great screen, a ton of battery life, and doesn't ship with software you don't want. I actually miss spending $2500 on a laptop that tried to get some of this right. Because there is just no way to do it.
You can buy a 17" Desktop Replacement that has a pretty good screen and has 45 minutes of battery life. Or a Sony. Maybe a Sony.
Better screens cost more. So, no PC maker is willing to ship them, even as an option. Unless you're talking about a really heavy big model where battery life doesn't matter.
But the most interesting thing is that I can at least quantify my own Apple Effect.
I will pay 50% more if you don't trick me: if you have a product line that consistently gets better as I pay more, not just heavier. Battery life should get longer, screens should get better, in resolution and quality, and you should have some sense about why a laptop shouldn't have a full-size keypad and weigh 14 pounds. I don't want 8 cores or a 60W video card. But I do want a decent display and a great keyboard.
And you shouldn't ship anything, ever, with "trackpad gestures" that don't work.
The road to a good product cannot be about squeezing costs without actual engineering. It doesn't mean making make-believe "Adamos" and "Envys" that still have the same problems as the lower-end models, but nicer cases. It means a core promise: we are not going to trick you. We care about making the best thing we know how to, and we'll give you some cheaper options if you want that.
I would love to see a PC OEM say, "This model is $100 off because we filled your computer with craplets." Because that's why you're getting a deal. But on the high-end model, why?
Or "$50 cheaper because this screen can't be viewed at all if you tilt your monitor 20 degrees too far."
Or "Congratulations! You've saved $10 on a keyboard that sways around as you type!"
Or, if there were a retail presence for PCs that cost more than $600...then I could just look for myself. But retail is something only Apple is doing well, too.
I know everyone wants a useful computer for $400. But where is the one that lets you get actual work done?
After a ton of shopping, I realized what everyone else has realized: probably the best PC laptop on the market is called a "Macbook". I had to think for a minute about why I will spend $1700 on a Mac laptop, and I'll hesitate whenever a PC laptop costs over $1100.
This $1100 effect...I wanted to put it into words, and I figured out what it was: "They're trying to trick me." If you pay the PC makers more money, they give you more junk. They have no taste and no guide for quality.
Lenovo thinks they can put a screen in their expensive T410 business laptop that has a backlight so dim that you can barely use it in a bright room. Their users complain for years, but they don't make a better one (except on their enormous models). The Macbook's is 2x brighter. The Macbook Air's is 2x brighter. Lenovo's has a contrast ratio a ton worse than my 1998 Dell (that's 1/6 the contrast of a Macbook). The display on my thinkpad inverts intensities if you tilt it upwards by 40 degrees. And their mouse/trackpoint thing has worse drivers now, after 15 years of being great. It's worse than Windows 3.1 again.
HP makes a super-high-end machine called the "envy", and then crams it with crapware, and makes trackpad drivers that are almost unusable. And then to make me extra-happy, kills their highest-end screen, to replace it with a lower-resolution one with worse specs. But the retail price is a bit lower.
Dell still has some of the same designs from 1998 (including the keyboard and battery life). I'm scared of their awful keyboards, or I'd spend more time looking.
Norton. McAfee. TRIAL. Slow.
And so literally, 10 years of shaving $5 here and there, and there's no PC laptop that has a moderate weight, a great screen, a ton of battery life, and doesn't ship with software you don't want. I actually miss spending $2500 on a laptop that tried to get some of this right. Because there is just no way to do it.
You can buy a 17" Desktop Replacement that has a pretty good screen and has 45 minutes of battery life. Or a Sony. Maybe a Sony.
Better screens cost more. So, no PC maker is willing to ship them, even as an option. Unless you're talking about a really heavy big model where battery life doesn't matter.
But the most interesting thing is that I can at least quantify my own Apple Effect.
I will pay 50% more if you don't trick me: if you have a product line that consistently gets better as I pay more, not just heavier. Battery life should get longer, screens should get better, in resolution and quality, and you should have some sense about why a laptop shouldn't have a full-size keypad and weigh 14 pounds. I don't want 8 cores or a 60W video card. But I do want a decent display and a great keyboard.
And you shouldn't ship anything, ever, with "trackpad gestures" that don't work.
The road to a good product cannot be about squeezing costs without actual engineering. It doesn't mean making make-believe "Adamos" and "Envys" that still have the same problems as the lower-end models, but nicer cases. It means a core promise: we are not going to trick you. We care about making the best thing we know how to, and we'll give you some cheaper options if you want that.
I would love to see a PC OEM say, "This model is $100 off because we filled your computer with craplets." Because that's why you're getting a deal. But on the high-end model, why?
Or "$50 cheaper because this screen can't be viewed at all if you tilt your monitor 20 degrees too far."
Or "Congratulations! You've saved $10 on a keyboard that sways around as you type!"
Or, if there were a retail presence for PCs that cost more than $600...then I could just look for myself. But retail is something only Apple is doing well, too.
I know everyone wants a useful computer for $400. But where is the one that lets you get actual work done?
Metabolic Path Finding (day of hacking with Jeremy)
My college roommate Jeremy Horwitz visited, and he mentioned that he was trying to figure out how to solve a scavenger hunt path problem in San Francisco. It sounds on the surface exactly like classical Traveling Salesman: 16 points, and what order should you visit them?
But it turns out that walking in San Francisco isn't like LA. There are hills, and you sort of want to optimize for them when you're planning to walk around. So we started wondering if we could model how hard a hill is to climb.
Jeremy found the SF bike route planner, which we used as a base. The author had a friend with GIS software, who associated height data with each street crossing in the city. This height data makes it easy to compute slope for each span (and dx/dy is the standard way, not degrees).
However, the author just put a threshold to avoid ever taking paths that were too steep. There's no real sense in his code that going up or down is either worse or better than biking on a flat surface.
By now we had started Googling for biometric data about how efficiently people walk at different slopes, and it turns out there are some really great studies about this.
Back in 1938, a researcher named Margaria had found that walking at a -10% grade was the most efficient for humans. Fast-forward to 1993, and a paper by Minetti et al measures oxygen intake at different grades, and even does a nice quadratic fit at different speeds!
On to the races.
I was able to make the following two-liner change to the bike route planner to utilize this data. I just assumed the "most efficient" walking speed, but you can tune based on faster velocities or whatever you want.
inclinepct = 100 * incline
inclinePenalty = 110.87 + 10.114 * inclinepct + 0.516 * inclinepct * inclinepct
So now, we have a way to compute all the pairs of asymmetric weights for a graph, and the path finder will use it to compute routes around San Francisco!
But as you recall, the original problem is to do a walking tour to a number of points in San Francisco in minimal time. This is a "traveling salesman problem" and it's very expensive in the brute force case (O(n!) even). Most approximate solutions assume points are either Euclidean (i.e. simple edges weighted only by distance), or they assume symmetric weights (i.e. going from A to B costs the same as going B to A).
We found that most of the good approximate solvers at least made the symmetric assumption. However, we also learned about a technique to split the set of points into two digraphs (with twice the points total), such that each graph is only connected to the opposite side's nodes. This makes it possible to simulate an asymmetric graph using a symmetric solver.
We were able to convince ourselves using Georgia Tech's Concorde TSP solver that the whole thing could be solved for 16 points to visit using only seconds of CPU.
Time to prototype: ~12 hours to make scavenger hunts more efficient.
Most awesome thing: knowing how much oxygen you might use, walking between two places.
But it turns out that walking in San Francisco isn't like LA. There are hills, and you sort of want to optimize for them when you're planning to walk around. So we started wondering if we could model how hard a hill is to climb.
Jeremy found the SF bike route planner, which we used as a base. The author had a friend with GIS software, who associated height data with each street crossing in the city. This height data makes it easy to compute slope for each span (and dx/dy is the standard way, not degrees).
However, the author just put a threshold to avoid ever taking paths that were too steep. There's no real sense in his code that going up or down is either worse or better than biking on a flat surface.
By now we had started Googling for biometric data about how efficiently people walk at different slopes, and it turns out there are some really great studies about this.
Back in 1938, a researcher named Margaria had found that walking at a -10% grade was the most efficient for humans. Fast-forward to 1993, and a paper by Minetti et al measures oxygen intake at different grades, and even does a nice quadratic fit at different speeds!
On to the races.
I was able to make the following two-liner change to the bike route planner to utilize this data. I just assumed the "most efficient" walking speed, but you can tune based on faster velocities or whatever you want.
inclinepct = 100 * incline
inclinePenalty = 110.87 + 10.114 * inclinepct + 0.516 * inclinepct * inclinepct
So now, we have a way to compute all the pairs of asymmetric weights for a graph, and the path finder will use it to compute routes around San Francisco!
But as you recall, the original problem is to do a walking tour to a number of points in San Francisco in minimal time. This is a "traveling salesman problem" and it's very expensive in the brute force case (O(n!) even). Most approximate solutions assume points are either Euclidean (i.e. simple edges weighted only by distance), or they assume symmetric weights (i.e. going from A to B costs the same as going B to A).
We found that most of the good approximate solvers at least made the symmetric assumption. However, we also learned about a technique to split the set of points into two digraphs (with twice the points total), such that each graph is only connected to the opposite side's nodes. This makes it possible to simulate an asymmetric graph using a symmetric solver.
We were able to convince ourselves using Georgia Tech's Concorde TSP solver that the whole thing could be solved for 16 points to visit using only seconds of CPU.
Time to prototype: ~12 hours to make scavenger hunts more efficient.
Most awesome thing: knowing how much oxygen you might use, walking between two places.
Subscribe to:
Posts (Atom)



