It seems pretty obvious to me that the right way to view the iPad is in relation to the Mac and the iPhone, existing in an ecosystem where they can each seamlessly be peripherals of each other.
About eight years ago, I wrote this in reference to the way in which the burgeoning market of personal computer electronics were starting to work with each other and play off of each other:
'I think the real point here is that it's a mistake to take the view that all of these technologies are “products”. They are producers, consumers, and translators of various digital services, all of which are merely models of real or imagined concepts. They might be modeling music, or images, or a committment to be in a particular place at a particular time. As a general rule, the value of modeling lies in its openness to manipulate the model. While a photograph is just a photograph, a digital representation of a photograph can be used by other services, protected against loss, replicated, and made easily available to others. When you buy a digital camera, you're not buying a camera in the traditional sense, you're buying an entry point (a producer) into that network of services, which is largely useless until you also acquire other devices and other people with devices that can also access that network of services.'
Viewed this way, why would you need a camera on the iPad? Your iPhone has one. (Also your Macbook, and you probably have a really nice digicam or dSLR, and you’re probably surrounded by cameras, but the iPhone one is going to be most likely to be with you). To be sure, a dedicated camera in the iPad would be nice for videoconferencing, but I don’t see a real need, and I think it’s unlikely that you’ll have your iPad and leave your iPhone at home.
Let’s look at another scenario. The first thing I thought of when I saw the iPad demo was that it would make a great multiplayer game board. You want to play a game with your friends, so you whip out your iPad. But there’s no good place on the iPad to put individual player hands, or anything that needs to be hidden from view of the other players. Taking turns doesn’t help, because it breaks the experience. So - enter the iPhone. Pair your iPhone with the board, and it can display just your hand. With an iPad and 2-4 iPods touch or iPhones, you’ve just replaced a whole bunch of board games and a deck of cards. I imagine a UI that will let you flick cards or pieces from your hand onto the board (iPad), where you can then position them and confirm your move (of course, there’s no reason every game shouldn’t also have an integrated chess clock).
Furthermore, there are already apps that will let you use your iPhone as a mouse for your mac. The iPhone display is too small to use this for serious desktop work, but the iPad could be a detailed control pad companion for mac applications. It would be like a graphics tablet, but much more interactive and smarter. I haven’t even really begun to consider how this should work, but I think this may be a very big use.
A lot of people seem to be responding to the iPad with a general feeling of “I can’t see what it’s good for”, but my reaction is “what isn’t it good for?”.
I guess I’d better get busy on building some of this stuff. I find the UI potential for a device like this very exciting.
I strongly agree with this. Mozilla is pushing an inferior competing standard because it’s open. Openness is an important feature, but it’s not the only one, and I agree that this won’t have the desire effect of increasing openness but will instead drive people more towards proprietary solutions. In other words, people will use flash for video, and when they do, they’ll be more likely to use other flash features. This will have an overall detrimental effect on whether HTML5 is a standard on paper or in practice. Standards that nobody uses are worthless, and proprietary video isn’t worth sacrificing uptake of HTML5 as a whole.
I discovered something cool today - if you build ruby from source, you have the option to install additional components after the fact, pretty easily and independently.
For example, I’ve often lamented that some of the builds I’ve done didn’t install readline support, and I didn’t really realize how to add that. As it turns out, it’s pretty trivial.
In your source directory, there will be an /ext folder, e.g.:
Inside that directory, there are lots of other folders. Install the readline libraries (this will be readline from source, or the readline-dev or readline-devel package depending on your platform), and then do:
make && make install
That’s it! If they didn’t get installed properly when you first built from source, this works the same way with all of the common extensions you probably want - openssl, zlib, iconv, etc…
In defense of the App Store (Why Apple has sold millions of iPhones, and will sell millions of iPads, and will continue to do so)
While the entire tech community is ranting and raving about the limitations imposed on developers for the iPhone, Apple is busy providing the first actual usable computing platform for everybody else. Think of the iPhone (and the iPad, by extension) as an omelet made by Apple. There are a lot of things that can go into the omelet to make it delicious, but you don’t get to put, say, rainbow sprinkles in the omelet. Even if you really like rainbow sprinkles.
Where they fail to coincide with the Apple vision of the experience (which seems to be hovering at around 100% overlap with the average user’s good experience), some developer choices have to go by the wayside, because the fact is that not all opinions are equally valid. Maybe Apple is using the restrictions it has in ways that are unfair, but by and large all I’ve seen is this - rule #1 is ‘you don’t get to break the experience’.
While there may be some legitimate complaints, I have little sympathy for someone who wants to ship an iPhone app without conforming to the GUI guidelines. Get the picture - it’s _your_ broken UI that the iPhone is a response to, and users are buying it in droves because almost all of the time it works without even _thinking_ about putting up a fuss. (And ‘works’ has a deep implicit component of being consistent with the rest of the phone’s UI, or at least of utilizing innovative and functional design.) I have a little more tolerance for other applications that have been blocked for various reasons, but I don’t fundamentally think that the App Store approach is wrong. The ends justify the means… but only if the ends actually justify the means. The App Store has provided what no other mobile platform has to date - near-complete user satisfaction. It is far from obvious to me that the iPhone would be as good as it is without those restrictions in place.
I had a Palm for 10 years, and a Blackberry for 18 months, and I build my own gentoo boxes from scratch, and I’m probably still fully capable of troubleshooting an ornery scsi chain, and so on. The iPhone has made me realize that even though I have the technical skill to deal with complicated configurations and obscure UI, I am often much happier with something that just works. Apple’s control over the entire process is integral to that. It may be the case that free developer reign is compatible with this kind of exceptional user experience, but not one other platform has yet shown that to be possible. I’m not _entirely_ convinced, but I think the above is how I feel.
In theory, I support the freedom of developers to build what they want and get it into the hands of customers however they want. I have a lot of trouble reconciling that with the fact that I really don’t want sprinkles in my omelet.
[ Update on the food metaphor: No one would suggest that Thomas Keller should serve Domino’s pizza in his restaurants, and no one would object if he had a program for visiting chefs to serve food to his customers at Per Se or the French Laundry but required that he personally approved all of the dishes they were going to serve. Is this really any different? ]
I was looking around for an easy way to sum the individual elements in a hash without referencing the individual keys. It turns out that there’s an easy way to do this - just pass a block to hash.merge and you get access the key, old, and new values. From there, summing the keys is easy:
This was frustrating, and maybe I missed it in the documentation, but I didn’t see it anywhere - when you have two machines in the same AWS Security Group, the assumption would be that they can interchange network traffic freely between them (at least, that was my assumption), but they can’t. If you want them to be able to talk to each other, you have to add the security group to itself as a valid connection endpoint.