Monthly Archive for April, 2010

JSConf US Gear Report

JSConf was my trial run for a bunch of new equipment, so here’s a separate report on those experiences.

iPad

Conference like settings are one of the situations where I felt that I could make the best of the iPad. Apparently, I was not alone, because there were probably somewhere between 5 and 10 iPads at the event.

My flights from Seattle to JSConf included 6 hours of flying time, and hour and a half of layovers, plus the usual waiting around time in airports. During that time I read some e-mail, watched about 90 minutes of video, and read several PDF books / documents. By the time I finally ended up in my hotel room, I still had around 80% of the battery charge remaining. I used the iPad as much as possible during the first day of JSConf, and the battery finished at 49% at the end of the first day. Thus far, the battery life is beyond my expectations.

During the conference, the primary activities that I was doing were e-mail reading, web browsing, twittering, and taking notes. For the first two activities, I used the built in Mail and Safari. For Twitter, I switched back and forth between Twitterific and TweetDeck. I used Evernote as my primary note taking tool.

I started out using Twitterific, but at some point it stopped working and was giving a message about an nvalid server certificate error. Echofon on the Mac was having a similar problem. I had TweetDeck installed on the iPad as a leftover from trying it on the iPhone, so I gave it a try and it worked. On the desktop I am not a fan of Tweetdeck’s AIR based user interface, which outweighs it’s advantage of having columns. When I use Syrinx on the desktop, I just open a stack of windows and that works fine. But on the iPad, Tweetdeck’s column based model makes a lot of sense, especially if you hold the iPad in landscape mode. I was mostly happy with the experience, although Tweetdeck has some weird UI in places:

  • It’s hard to get a sense of when the various columns refresh, and there doesn’t appear to be a way to get individual columns to refresh. I’d love to be able to use Tweetie 2′s pull down to refresh gesture to do this.
  • Favoriting tweets (which is how I keep track of interesting information on a mobile device) takes over the whole screen for a moment, causing an annoying flash/blink effect.
  • In Landscape mode you can’t click links or view profiles (the latest update to TweetDeck has added support for link clicking)
  • If you select a tweet and then discover that you need the additional menus popup, then you need to select another tweet and then reselect the tweet you want to act on

I love Evernote, and I’ve written about that before. The iPad version of Evernote is fantastic, with perhaps one exception. If you try to edit a rich text note, you are put into a weird append only kind of mode. I have some Python scripts that create rich text notes from items on my calendar, so it’s annoying to go back to Evernote on the iPad and then be put into append mode. I would love to see a full rich text editing capability come to a future version of Evernote for iPad (and sure, iPhone). Other than that, it was a workhorse at JSConf.

At many conferences, there are multiple WiFi networks, and you have to switch among them as you go from room to room. This was the case at JSConf. On the iPad, this meant a trip to the Settings app in order to select a new network. It would be great if the iPad would switch among multiple known networks based on signal strength. I can think of some reasons why you might not want to do this, but in my situation, it would have been really convenient.

All in all I had a pretty good experience with the iPad as my primary device. I can definitely see it as my primary conference machine, as well as my “in a meeting” machine. iPhone OS 4.0′s “multitasking” will reduce the annoyance associated with waiting for apps to restart on switching.

MacBook Pro

At work they issued me a unibody MacBook Pro 15″. These are supposed to have much better battery life than their pre-unibody forbears. As far as I can see this is true. I imagine that the recently refreshed models are even better on this count. The only other thing that I noticed was that the power adapter gets pretty hot while recharging the machine.   

GF1

Like many photographers, I’ve been looking for a small, high quality, camera that I could carry with me almost all the time. I have my cell phone at all times, and in a pinch, a cell phone picture is better than nothing. But a cell phone camera, regardless of megapixels lacks the controls that I’ve grown used to when making pictures. I’ve started carrying a Panasonic GF1 with the 20mm lens. The wide aperture prime suits the style that I like to shoot in, and the Micro 4/3 sensor gives pretty decent looking pictures. The GF1 produces 12 megapixel RAW files, which in principle is the same as my D3. Of course, there’s a vast difference in quality of those pixels, but thus far I am pretty happy. It has all the controls that I was looking for, as well as a hot shoe for Strobist shenanigans. It’s going to take me a while to master the controls, but I’m in no hurry. It did seem odd to be setting around with the tiny GF1 while the DSLR toting strobists were doing the photos of JSConf. I’ll be doing most of my Dailyshoot assignments with the GF1 — I’m looking forward to drawing material from downtown Seattle. Here are a few of the shots so far:

Dailyshoot 152

Dailyshoot 153

Dailyshoot 155

Bose QuietComfort 15

I am pretty sensitive to noise. Between commuting on the ferry every day, working in a building with thin walls, and spending time on airplanes, I decided that I needed help in coping with all the noise. Ever since the Bose noise canceling headsets came out, I’ve been interested in them for cutting the noise and helping me concentrate. I’ve started carrying a set of the Bose QuietComfort 15 headphones. These do a great job of cutting out noise. Most kinds of background noise gets cut out, but you can still hear human voices, albeit at a reduced volume. A little bit of music takes care of that quite easily. Like many people who reviewed these headphones, I do experience the sensation of pressure while wearing them, but these headphones are much more wearable than the earplug style Etymotic headphones that they are replacing. The only other drawback that I’ve found is that they don’t appear to built super well, so I am taking care to carry them in the semi hard case that they came in, which makes them a little less convenient.   

I think that I am well equipped to survive commuting and office life.

JSConf US

I spent the weekend in Washington, DC attending JSConf.US 2010. I wasn’t able to attend last year, due to scheduling conflicts. Javascript is a bit higher on my radar these days, so this was a good year to attend.

The program

The JSConf program was very high quality. Here are some of the talks that I found most interesting.

Yahoo’s Douglas Crockford was up first and describe Javascript as a “a functional language with dynamic objects and a familiar syntax”. He took a some time to discuss some of the features being considered for the next version of Javascript. Most of his talk was focused on the cross site scripting (XSS) problem. He believes the solving the XSS problem should be the top priority of the next version of Javascript, and he feels that this is so urgent that we ought to do a reset of HTML5 in order to focus on this problem. Crockford thinks that HTML5 is only going to make things worse, because it adds new features / complexity. He called out local storage as one feature that would introduce lots of opportunity for XSS exploits. I was very surprised to hear him advocating a security approach based on capabilities. He mentioned the Caja project and his own proposal at www.adsafe.org. He stated that “ECMAScript is being transformed into an Object Capability Language; the Browser must be transformed into an Object Capability system”. This was a very good talk, and it caused a swirl of conversation during the rest of the conference.

Jeremy Ashkenas talked about Coffeescript, which is a language that compiles into Javascript. It has a very functional flavor to it, which was interesting in light of Crockford’s description of Javascript. It also seemed to be influenced by some ideas from Python, at least syntactically. I really liked what I saw, but I’m wary of the fact that it compiles to Javascript. I am not bothered by languages that compile to JVM bytecode, but somehow that feels different to me than compiling to Javascript. I’m going to spend some time playing with it – maybe I’ll get over the compilation thing.

Gordon is a Flash runtime that is implemented in Javascript.   Tobias Schneider caused quite a stir with his talk. He showed several interesting demos of Gordon playing Flash files that were directly generated by tools in the Adobe toolset. Tobias was careful to say that he doesn’t yet implement all of flash, although he definitely wants to get full support for Flash 7 level features. It’s not clear how Gordon would handle newer versions of Flash, because of the differences beween Javascript and Actionscript. Bridging that gap is probably a whole lot of work.

Since 2008 I’ve had several opportunities to hear Erik Meijer talk about his work on Reactive Programming at Microsoft. He’s talked about this work in the context of AJAX, and a common example that he uses is autocompletion in the browser. Jeffrey Van Gogh came to JSConf to talk about RxJS , a library for Javascript which implements these ideas and provides a better experience for doing asynchronous programming, both on the client and server side. In his talk Jeffrey described RxJS bindings for Node.js.  I also met Matt Podwysocki, who I’ve been following on Twitter for some time. Matt has been writing a series of blog posts examining the Reactive Extensions. One hitch in all of this is that the licensing of RxJS is unclear. You can use RxJS in your programs and extend it but it’s not open source, and you can’t distribute RxJS code as part of an open source project. I’m interested in the ideas here, but I haven’t decided whether I am going to actually click on the license.

I dont’ remember the first time that I heard about SproutCore, but I really started paying attention to it when I saw Erich Ocean’s presentation at DjangoCon last year. The original speaker for SproutCore couldn’t make it, but Mike Ball and Evin Grano, two local members of the SproutCore community stepped in to give the talk. Their talk was heavy on demonstrations along with updates on various parts of SproutCore. They showed some very interesting UI’s that were built using SproutCore. The demo that really got my attention was related to the work on touch/multiouch interfaces. NPR had their iPad applications in the App Store on the iPad launch day. Mike and Evin showed a copy of the NPR application that had been built in 2 weeks using SproutCore. The SproutCore version can take advantage of hardware acceleration, and seemed both polished and responsive. Dion Almaer has a screenshot of the NPR app up at Ajaxian.

Raphaël is a Javascript toolkit for doing vector based drawing. It sits on top of either SVG or VML depending on what browser is being used. In the midst of all the hubub about Flash on Apple devices, Dmitry Baranovskiy, the author of Raphaël pointed out that Android devices don’t include SVG, and thus cannot run Raphaël. Apparently people think of Raphaël as something to be used for charts but Baranoskiy showed a number of more general usages of vector drawing that would be applicable to every day web applications.

Steve Souders works on web client performance at Google and has written several books about this topic. His presentation was a conglomeration of material from other talks that he has done. There were plenty of useful tidbits for those looking to improve the performance of their Javascript applications.

Billy Hoffman‘s talk on security was very sobering. While Crockford was warning about the dangers of XSS in the abstract, Hoffman presented us with many concrete examples of the ways that Javascript can be exploited to circumvent security measures. A simple example of this was a simple encoding of javascript code as whitespace, so that inspection of a page’s source code would show nothing out of the ordinary to either an uninformed human or to a security scanner.

In the past, Brendan Eich and I have had some conversations in the comments of my blog, but I don’t recall meeting him in person until this weekend. Chris Williams snuck Brendan into JSConf as a surprise for the attendees, and many people were excited to have him there. Brendan covered a number of the features being worked on for the ECMAScript Harmony project, and he feels that the outlook for Javascript as a language is improving. Someone did ask him about Crockford’s call to fix security, and Brendan replied that you can’t just stop and fix security once for all time, but that you need to fix things at various levels all the time. His position was that we need more automation that helps with security, and that the highest leverage places were in the compiler and VM.

I’ve been keeping an eye on the server-side Javascript space. Ever since the competition between Javascript engines heated up two years ago, I’ve been convinced that Javascript on the server could leverage these new Javascript engines and disrupt the PHP/Ruby/Python world. If you subscribe to that line of thinking, then Ryan Dahl’s Node.js is worth noting. Node uses V8 to provide a system to build asynchronous servers. It arrived in the scene last year, and has built up a sizable community despite the fact that It is changing extremely rapidly – Ryan said he would like to “stop breaking the API every day”. In his presentation Ryan showed some benchmarks of Node versus Tornado and nginx, and Node compared pretty favorably. It’s not as fast as nginx, but it’s not that much slower, and it was handily beating Tornado. He showed a case where Node was much slower because V8′s generational garbage collector moves objects in memory. In the example, node was being asked to serve up large files, but because of the issue with V8, it could only write to the result socket indirectly. Ryan added a non-moving Buffer type to Node, which then brought it back to being a close second behind nginx. I was pleased to see that Ryan is very realistic about where Node is at the moment. At one point he said that noone has really built anything on Node that isn’t a toy. If he gets his wish to stabilize the API for Node 0.2, I suspect that we’ll see that change.

Jed Schmidt is a human language translator for his day job. In his off hours he’s created fab.js a DSL for creating asynchronous web applications in Node. Fab is pretty interesting. It has a functional programming flavor to it. I’m interested in comparing it with the RxJS bindings for Node. It’s interesting to see ideas from functional programming (particularly functional reactive programming) percolating into the Javascript server side space. In some ways it’s not surprising, since the event driven style of Node (and Twisted and Tornado) basically forces programmers to write their programs in continuation passing style.

I didn’t get to see Jan Lehnardt’s talk on evently, which is another  interesting application of Javascript (via JQuery) on the server side. I need to make some time to go back and watch Chris Anderson’s screencast on it.

The conference

As far as the conference itself goes, JSConf was well organized, and attendees were well taken care of. The conference reminds me of PyCon in its early days, and that’s my favorite kind of conference to go to. There was very little marketing, lots of technical content, presented by the people that are actually doing the work. I heard lots of cross pollination of ideas in the conversations I participated in, and in conversations that I heard as I walked the halls. I especially liked the idea of “Track B” which was a track that got assembled just in time. It’s not quite the same thing as PyCon’s open spaces, but it was still quite good. Chris and Laura Williams deserve a big hat tip for doing this with a 10 person staff, while closing on a house and getting ready for their first child to arrive.

Last thoughts

The last two years have been very exciting in the Javascript space, and I expect to see things heating up quite a bit more in the next few years. In his closing remarks, Chris Williams noted that last year, there was a single server side Javascript presentation, and this year the content was split 50/50. This is an area that you ignore at your own risk.


iPad = Newton 3.0

On Saturday (iPad day), I had a brief twitter exchange with someone comparing the iPad to Newton 2.0. Of course, this was inaccurate, because the Newton Operating System actually reached version 2.1. But in spirit, at least to me, this was correct.

The User Experience

After playing with my iPad for a bit, I feel that it has captured some of the things that I envisioned in an ideal Newton experience. The form factor is right – we had had slate sized Newton prototypes that were never produced. The MessagePad 2000/2100, which you can see next to my iPad, was both too small and too large. The split between the iPhone and iPad form factors is closer to the right set of tradeoffs, at least for me. The achievements in hardware are impressive. The A4 powering the iPad can trace its lineage to the StrongARM powering the MessagePad 2xxx’s, and the ARM 6xx’s that powered the original Newton. The iPad is very responsive, much more so than my iPhone 3G or the MessagePad. That makes a huge contribution to the overall experience when you use the device. Performance is part of the user experience. Going back to the iPhone after using the iPad is a very frustrating experience. I hope that Apple will be announcing an A4 powered iPhone on Thursday. A4 and the rest of the hardware design have pushed iPad’s battery life over a key threshold. The 10-12 hour lifetimes being reported mean that the iPad should easily be able to run all day on a single battery charge. It also means that I can use the device all day without worrying about whether the battery is going to die on me. In contrast, if I am using wireless data on my iPhone, human power management is part of the user experience. Internet access is also part of the user experience. The iPad is significantly less valuable without a network connection – the Newton barely had any connectivity.

The Hardware

As happy as I am with the performance and the battery life, there are some aspects of the hardware that could be improved. The iPad screen has a glossy finish, a featured shared by my new work MacBook Pro and LED Cinema Display. Much as I love the way that photographs and colors render on these displays, the reflections and glare are problems that I haven’t been able to get over. I would have preferred a matte screen. The iPad casing is a machined single block of aluminum, again, like the MacBook Pro. I have no problems walking around carrying the MacBook Pro (at last with the display closed). When carrying the iPad in the halls in the office, I have this feeling that it might just slip out of my hand. The MessagePad 2000 series had a special rubberized paint (which was expensive) which made it easy to grip. It also had a fold over plastic cover for the screen. This version of the iPad really needs some kind of case to overcome these two issues.

The iPad has an issue when charging from non “high-power” USB ports. When attached to one of these ports, the iPad will only charge when it is asleep. If you charge your iPad overnight, this shouldn’t be a big issue, but it would have been nice to find this out from the Apple documentation rather than one of the Mac news sites.

The Software/Apps

The iPad software is largely like the iPhone software with some additional interface elements to deal with the larger screen. On the surface this just doesn’t seem like a big deal, but it is. The combination of the large screen and the performance, along with those new elements yields a much better experience. This is obvious if you run the iPhone only version of an application and then try the iPad version. In every case where I did this, I much preferred the iPad version. It is true that iPhone applications run just fine on the iPad, and that you can use pixel doubling to make them fill the full screen. But compared to a native iPad version, apps running in compatibility mode are a joke. This puts the truth to the idea that there is a new form factor in between the smart phone and the desktop/laptop. I know that in any place where I have WiFi, I will reach for the iPad instead of my iPhone. Going back to doing things on the iPhone after using the iPad seems like a kind of torture.

I wish that there were more iPad applications out there. Many of the ones that I use regularly have not been updated yet. Some of the applications that I like at the moment:

  • Evernote – this is my go-to note taker on the Mac, mostly because of the syncing to iPhone. The iPad version really takes advantage of the new form factor, and I’m looking forward to being able to use the iPad as a real replacement for a paper notebook.
  • Instapaper – I love Instapaper, and I’d definitely prefer to read my Instapaper articles on the iPad’s larger screen. My need for it has gone down a little bit because I signed up for Boingo in order to use WiFi on the ferry to work, so I have connectivity in many more of the situations when I would have used Instapaper
  • Goodreader – This is a big one. The e-reader that I want can show me my Manning MEAP editions, the research papers from the ACM Digital Library, and MIT PhD dissertations from 1978. That means it has to do PDF. Unfortunately, the iPad doesn’t come with a PDF reader built in, which seems nuts to me. Goodreader was only a dollar and seems to have more features that an iPad of Preview might, but still.
  • AccuWeather Cirrus – This is a flashy weather display program. It looks cool. And I love the little clock based UI for the hourly forecast. Yes, it’s eye candy.
  • MindNode – MindNode Pro on the Mac is my program of choice for Mind Mapping, and the iPad is great form factor for mindmapping, especially that stage where you are trying to organize jumbled up thoughts
  • Adobe Ideas – This is a cool little visual sketchbook application – I’m sure it will be good for doodling and quick napkin type sketches. For the heavy duty diagramming, I’m probably going to end up at OminGraffle.
  • The Elements – This is an “interactive” book rendition of the paper book “The Elements” which is about the periodic table. Thus far, this is the best example of what books could become on a device like the iPad. That said, I think that we are just at the beginning of what will be possible – we’re going to see a lot of exploration and experimentation in this area over the next several years, I am sure.

In my original post on the iPad, I was inspired by the UI interactions that I saw in iWork. Of the three programs in the suite, I’ve only downloaded Keynote. I am still impressed by the UI, but I am not impressed by the compatibility restrictions. When I imported my presentations from 2009, Keynote reported a number of problems. Some of the fonts that I used were not present on the iPad, but more importantly, Keynote stripped out all my speaker notes. I hope that Apple will be adding speaker note support in a future update. On the font side, it seems like it ought to be possible to package the needed fonts as part of the Keynote presentation itself. I’m less hopeful that this will happen since there is probably some legal restriction on the ability to “distribute” fonts in this way. Keynote and iWork also showcase an area which I am unhappy about, which is integration with the filesystem on the Mac (or PC, if you must). It is very annoying to have to use iTunes to manage the files that are going in and out of iWork. It’s even more annoying when you consider something like Dropbox. I’d really like to see Apple improve this part of the experience. At the moment it feels like a copy of the Newton Connection Kit, and unforunately, that’s not a compliment.

Many applications developers still haven’t finished their iPad versions. Here’s are some of the applications that I am still waiting for:

  • Either Tweetie or Echofon. I am using Twitterific at the moment, and it’s good, but on the iPhone, both Tweetie and Echofon are better. As in worth paying for better.
  • Dropbox
  • Facebook, Foursquare, and Yelp
  • Tripit
  • Meebo
  • Airsharing
  • Darkslide
  • Google Earth
  • Almost the entire Omni Group’s product line. Ok well really OmniOutliner and OmniFocus

The Omni apps are particularly important to me because they will be ports / companions of their desktop versions, which should make the iPad more usable for me in a work setting.

Open Issues

There are some other issues with the iPad which are getting a lot of discussion.

First there is the issue of freedom or openness, depending on where you come from. This has been beaten to death already. I would certainly prefer a more open ecosystem on the iPad, and I don’t think that there is an enormous amount that would need to change in order to satisfy me. After a few days of playing with a production iPad, I am convinced that this is an important device, and that the iPad is the first entrant in a mass market tablet space. I also believe that it is likely to be the most innovative because of Apple’s ability to integrate the hardware and software. There is plenty of room in the space for other players, and I believe that in the end Apple will need to make some concessions if they want to be the high volume player in the space.

The next issue is the “multitasking” issue. I remember the MacOS when there was no multitasking, then cooperative multitasking, and finally in OS X, true preemptive multitasking. At the end of the day, I want to be able to switch between multiple applications without them losing their context. I do use a few applications that could benefit from running in the background all the time, but that’s not a huge number. I would happily trade a hour of the iPad’s 10-12 hour battery life to get this capability. I am sure that the Apple team knows how to implement both the low level functionality needed as well as a good end user interface for this functionality. Multitasking is just a matter of time. It’s inevitable. Maybe it’s even tomorrow.

For those in the ebook side of the world, there’s a different sort of issue. I’ve heard several people pontificating about the difficulty and cost of creating / producing interactive books. As far as I can tell, the toolchain for this is non-existent. It looks to me that iLife includes many of the applications that someone might need in order to produce an interactive or multimedia book. Conventional wisdom used to be that it took a big movie studio to produce a decent movie. The advent of consumer HD cameras and the broadening availability of powerful computers and production is changing that. Expect the same thing to happen to interactive books.

It’s the beginning

I look at the iPad and I see the beginning of something. Even though it appears polished, I think that we have a lot more to learn about the form factor, size appropriate UI’s, the more intimate experience that tablets create, and other attributes of the platform. I for one, am looking forward to learning the lessons.