Planet OTI

July 01, 2009

John Duimovich

June 30, 2009

Rick DeNatale

The Value of Co-Location in Agility

Last night there was a very interesting extra meeting of the local AgileRTP group. Johanna Rothman was in town and Jared Richardson arranged an extra meeting so that she could present some of the issues which arise in adopting agile methods, and how to deal with them. Johanna is very knowledgeable and gave an interesting and thought provoking thought.

One of the issues she talked about was "distributed" agility. This is a hot button as many companies are outsourcing some development to "offshore" locations. Johanna talked about the issues in following agile practices, and I'm vastly oversimplifying here, pointed at time zones as the major issue.

Someone in the audience, who works in a distributed team with members across the US, questioned her on this. As the discussion unfolded, other issues came up, such as dealing with a team in China which had one person fluent enough in English who acted as the "email-translator", as well as cultural differences affecting communication.

Language and cultural differences certainly can inhibit the free exchange of information which is the coin of the realm in Agile practices, but I had to observe that these are not really geographical or time zone issues. I've seen similar difficulties with co-located teams.

Distributed development using agile methods can indeed work, I've seen it. OTI was quite good at it. We did timeboxed projects with development spread across the globe. A given project might comprise team members in Ottawa, Zurich, Sydney, Raleigh, and Vancouver. Large projects might use a "team of teams" but smaller ones had individual members who were geographically dispersed. There was lots of communication by phone and email, and it worked quite well.

OTI had one "stand-up" meeting every year, usually in February in the balmy clime of Quebec, an annual Tech Conference where everyone in the company got together at a sort of internal "OOPSLA" to talk about what they were doing and to exchange interesting ideas, and just get to know each other better.

Now the main thing that made this work was that we shared a common culture when it came to development. Although not everyone at OTI was a native English speaker, all were fluent.

"Big Dave" had a tendency to hire good people wherever he found them. Often such a person would seed a new multi-person laboratory, but sometimes a "lab" would be a single person.

So distributed development can work, and work well, given the right people.

Some agility advocates stress the need for co-location, a notable exception is Kent Beck, the founder of eXtreme Programming, who now spends most of his time based a his farm in southern Oregon, and does remote pair-programming using VNC and Skype, with programmers around the world.

And Kent is currently auctioning off a two-hour pairing session this is a good opportunity to sample distributed agility at a high level.

I wish I could afford to bid, the current bid is at $200, which is cheap. I've learned a lot every time I interacted with Kent personally in the past. Someone is going to get a deal, whatever the winning bid turns out to be.

by Rick DeNatale at June 30, 2009 12:24 PM

June 29, 2009

Kevin McGuire (Eclipse)

Why choice reduces usability

We usually consider choice as being a good thing, whether it be around choice of restaurant, chocolate bar, clothing, or technology.  Choice makes us feel empowered, and variety adds richness to life.

Not surprisingly, embedded in the design philosophy of Eclipse is the notion that “choice is good”.  Clearly then, if some choice is good, more choice is better. And darn if Eclipse doesn’t give you a LOT of choice!  The preferences alone should make any humble programmer feel empowered to tweak the IDE into exactly the shape and behaviour you want.

However, it turns out that in practice, while we believe we want choice, there is good research suggesting that more choice makes us less happy.  For an excellent book on the subject, I highly recommend The Paradox of Choice by Barry Schwartz.

I’ve been pondering this a lot lately with respect to user interface design in general, and Eclipse specifically. What we often forget (and Schwartz does a great job of explaining) is that there is a cost to choice.  One must understand the choices themselves, one must be informed, otherwise we risk choosing wrong.  Not only does that comparison itself imply a cost (learning, weighing), but bad choices cost us more than good ones benefit us.  That is, we feel the negative impact of say losing $50 to a greater extent than we feel the positive emotional impact of winning the same amount.  Therefore, paradoxially, although we seek choice, we actually prefer not to choose.  There’s much more in the Scwartz book and I encourage you to read it.

Thus a common misbelief in UI design is that giving the user more choice will increase the usability of the product.   It’s almost always not true.  What choice does is increase the utility of the product, because you can use it for more things, or in more ways.  But it reduces the usability, because the choice brings with it a cost that the user must bear.  (Note that I’m ignoring accessibility related preferences since these obviously increase usability for those who need them).

A favorite example is the following dialog that you get post P2 update.

Now to be clear, I’m not picking on P2, this happens to be a good example, and there are many more throughout Eclipse.  Plus, I must confess that I had a hand in this dialog.

The dialog is there to support the set of users who know under which conditions the workspace does not need to be restarted.  Personally, I refer to it as the “Feeling lucky, punk?” dialog.  Susan and I have had many discussions about this dialog and in keeping with the theme of “just enough rope to hang yourself with” decided to leave it in Eclipse for the power users.  For many though, it leaves you scratching your head, or even a little afraid.  These “some add-ons”, how do I know which they are?  Is there a list?  If yes, why doesn’t Eclipse have this list so it doesn’t have to ask me?  If such a list can’t exist, then what chance do I have? What happens if I say “No” and don’t restart, will bad things occur?  If so, why do you let me do it?  If not, then why aren’t two choices sufficient?  What are the warning signs that I should’ve said yes, and then what should I do to fix it?  It’s asking me if I want to restart, but it’s giving a binary choice (yes/no), plus another choice, so will “Apply Changes” restart or not?  And if not, does it mean that “No” didn’t apply the changes?  I’m afraid!  Mommy!!

Thus we’ve increased utility (advanced users can work more efficiently), but we’ve decreased usability (all users are forced to make a decision with no guidance, where the consequence of picking the non-default is unknowable at that moment).

Next time you go to add a preference or provide a choice dialog, it’s worth considering the cost of the choice and it’s impact on usability.  Ask yourself, “Have I really benefitted the majority of my users in providing this?  Or have I benefitted a few at what cost to the many?”.

by Kevin McGuire at June 29, 2009 08:24 PM

Brooke Kuhlmann

Taos Pueblos

On the second day, after traveling to Taos, we headed to the see the Taos Pueblos.

Although, before I continue with the Pueblos, I forgot to mention that we did visit the Hacienda de los Martinez after setting up camp at the Enchanted Moon campgrounds in the afternoon. It is worth experiencing, I suppose, but there isn’t a lot to see. The main take-away is the experience of how people in that day lived and survived in semi-unsettled territory. The adobe structure was quite a feet for that day too as it was made out of clay, hay, some wood, and ox blood. Wood was hard to come by in those days although you wouldn’t know that by seeing Taos today. In fact, downtown Taos reminds me a lot like cities on the East coast (i.e. Raleigh) where the vegetation is dense, the trees are tall and leafy, and there is little sense of direction to where you are.

Right, so back to the story. Today we visited the Pueblos in the early morning. The weather was a little overcast and I tended to be fascinated by the doors as you can tell from the pictures below:

ChurchChurch WindowDilapidated DoorWooden DoorBlue DoorRed DoorGreen DoorUsa DoorCemeteryCemetery CrossDual KilnsLone KilnUsed KilnsPueblosPueblosRain SpoutDrying RacksBackyardPueblos From A Distance
(click to view)

It costs $10 per person to visit with an additional $5 for use of a camera (with a caveat that you ask permission to snap photos of the natives since there are many families that still live in these structures). These are definitely worth seeing especially when you can talk to the people who still dwell there. A much different experience than visiting Mesa Verde for example.

We spent the afternoon visiting the various art shops in downtown Taos during the afternoon. BTW, check out Graham’s Grille, if you are in Taos. The Jamaican Jerk Pork Sandwich is outstanding!

As for camping, we moved closer to town and ended up in the Taos Valley RV and Campground. Great place to stay with excellent service. Definitely recommend.

Taos Valley Campsite

Article Series - Taos 2009

  1. Travel to Taos
  2. Taos Pueblos

by Brooke Kuhlmann at June 29, 2009 02:00 AM

June 28, 2009

Brooke Kuhlmann

Travel to Taos

Wildflowers

With the bike fully loaded for three-days of traveling and camping in the Taos, NM region, we left Colorado Springs around 8:30am in the morning and made it to our campsite just after lunch. The following is a rough map of route (shown within New Mexico only):

Taos Trip Map
(click to view)

The ride on Highway 64 from Raton to Taos, NM is a fun ride with a mix of high speeds and twisties. The only caveat is that the first fourth of the road has an abundance of road snakes which can be a treacherous on a hot summer day.

As for our campsite, we ended up making camp in Enchanted Moon RV and Camp Grounds but it was anything but enchanted:

CampsiteFacilitiesMens BathroomMens ShowerTent
(click to view)

As you might be able to tell from some of the facility photos, it was a little run down to say the least. Not to mention that we had tiny caterpillars hovering in the air all over the place on small silk strands. I don’t remember ever seeing that before on previous camping adventures. While cooking dinner that night, it was a challenge to fight off the caterpillar army as they climbed up through the wood and dropped from the sky. I’m just glad Kate was a good sport for allowing me to pick that spot to camp at for the night.

Hey, it’s all part of the adventure, right?

Article Series - Taos 2009

  1. Travel to Taos
  2. Taos Pueblos

by Brooke Kuhlmann at June 28, 2009 02:32 AM

June 27, 2009

Andrew Low

iTouch

The gadget lust was finally too much and I’ve purchased an iPod Touch.  Way back I was a fairly early adopter of the Palm Pilot 1000, however its been years since I’ve bothered to carry a PDA with me.  Cell phones have mostly closed that gap and the internet is more ubiquitous than it was back in 1996, these two technologies which have radically changed the information landscape around us.  While I do tease some of my friends with the iPhone (I charge my Nokia 5310 once a week), I’d have an iPhone if I could justify the cost of the monthly plans.

I’m a big fan of the Apple store online, specifically the refurbished section.  They offer “as new” products for a significant discount.  The refurbished iPod Touch has a new battery and outer shell, new earbuds, USB cable and it comes with the same 1-year warranty that a new unit would.  The only real difference is price (8Gb iTouch $199 vs. $239) and a plain white box.  If you can stand to wait until the latest model starts to be available refurbished, why pay full price?

I ordered monday, it arrived thursday.  Shipping was free.  Surprisingly it came from Shenzen, home of Foxconn (I found Bunnie’s description of Shenzen facinating, worth a read).  To give you a sense of the scale of the voyage that this lowly iPod Touch made over the past week - here is a map showing the voyage:
fedex_ipod

As I already have a video iPod, getting setup was very simple.  Using the latest version of iTunes, I just plugged in the new iTouch to let it charge and sync.  The initial sync was very slow, apparently this is somewhat expected.

As to exactly why I went out and bought an iTouch?  Well, it was a Fathers Day gift (Thanks Jenn!) - but I’ve been oogling at them for a while.  This LifeHacker article could serve as a good set of reasons to pick one up instead of holding out for an iPhone.  The 2nd generation iTouch is more compelling than the 1st - it has a faster processor (faster than the iPhone 3G, but not the 3G S), the headphone jack supports microphone input, there is also an external speaker.  In comparison to the iPhone - the 2nd generation  iTouch is missing: a camera, GPS, and of course cell phone functionality.  It does have almost every other ability.

So far its been very cool.  With only 8Gb of storage, I can’t get all my music on it - but iTunes seems to have done a fairly sane job of putting the right selection on without any interaction from me.  The App Store is really cool (but there are far too many apps out there).  If you need more convincing to jump on the Apple train, Jeff Atwood wrote an interesting commentary on the significance of the iPhone.

by Roo at June 27, 2009 02:02 AM

June 25, 2009

Ian Skerrett

ianskerrett


Riena is number 8 in my series of project that are new to the release train.  Christian Campo is the Riena project leader.

What does your project do?

Riena is a platform for developing multi-tier rich client applications based on the Eclipse Rich Client Platform (RCP) and Equinox.  Core to Riena is an OSGi-based Remote Services component that allows developers to easily create distributed client/server applications.  Furthermore Riena provides an enhanced navigation concept for business applications with a focus on end-user usability.

Riena is also part of the EclipseRT top level project which brings various runtime related efforts and technologies at Eclipse together.

Who are your typical users

Typical users of Riena are companies which are interested in realizing complex enterprise applications and by doing so, attach great importance to a high usability of their applications.

Why did you join the Galileo release train?

We’ve joined the Galileo release train to provide users and adopters of Riena a release which is coordinated with the 32 other Eclipse projects of Galileo. This will make it even simpler to use Riena with other major Eclipse projects as it is today.

Furthermore we’re participating in the Galileo release train in order to help to illustrate the ongoing improvement of the EclipseRT project providing an integrated, modular runtime platform for business applications.

After completing your first release train, what do you think now?

We’re proud to be part of the largest ever Eclipse release. This Riena release does not only include many new components, Eclipse users and adopters were looking forward to, but most important, has been coordinated with all other Eclipse projects of Galileo, and was ready for download at the scheduled.release date.

What future enhancements are you planning for your project?

The forthcoming releases of Riena are going to focus on a higher flexibility and on additional advancements of the proven UI-concept. These will include additional UI-features like full keyboard control over all UI elements, a number of improvements for detached view as well as a support of custom UI-components in the navigation like “calendar” and others. Furthermore the Remote Service capabilities of Riena will be expanded by adding data compression, server ticks, push notification and a major performance improvement for processing large result sets.

That ends my series of new projects in Galileo.  I didn’t have a chance to catch up with the leaders of Mobile Tools for Java (MTJ) and the Memory Analyzer project.  Both projects are growing great communities of users and adopters.  You should check them out.

Related

Project #7: Swordfish

Project #6: ACTF

Project #5: EclipseLink

Project #4: JWT

Project #3: TmL

Project #2: PDT

Project #1: Xtext

by Ian Skerrett at June 25, 2009 07:06 PM

June 24, 2009

Rick DeNatale

RSpec Meet MultiRuby

Yesterday, David released RSpec 1.2.7, which includes a patch I provided to allow the specification of where to find the 'ruby' program when creating a SpecTask, rather than relying Rakes RUBY variable.

Why did I submit this patch you ask, assuming you didn't read the title of this post?

So you can do this in a Rakefile :

multiruby_path = `which multiruby`.chomp
if multiruby_path.length > 0 && Spec::Rake::SpecTask.instance_methods.include?("ruby_cmd")
  namespace :spec do
      desc "Run all specs with multiruby and ActiveSupport"
      Spec::Rake::SpecTask.new(:multi) do |t|
        t.spec_opts = ['--options', "spec/spec.opts"]
        t.spec_files = FileList['spec/**/*_spec.rb']
        t.ruby_cmd = multiruby_path
       end
   end
end

This is derived from something I just added to RiCal but haven't yet released.

What it does is check that you have multiruby, which is part of the zentest gem, installed, and that your version of RSpec supports the new ruby_cmd option. If both conditions are met it makes a spec task which runs the specs using multiruby instead of ruby.

Now it's easy to run specs with the various ruby versions you want to support.

by Rick DeNatale at June 24, 2009 11:53 PM

Ian Skerrett

ianskerrett


Project #7 is my ongoing series of new projects on the release train is Swordfish.   Oliver Wolf is the project leader of Swordfish and he was kind enough to participate in the series.

What does your project do?

The goal of the Swordfish project is to provide an extensible SOA framework based on the proven Eclipse Equinox runtime technology. The framework is designed to be complemented by additional open source components such as a service registry, a messaging system, a process engine etc. to form a comprehensive open source SOA runtime environment based on both established and emerging open standards.


Who are your typical users?

We currently address two types of users. First of all, application developers seeking a more modular and reusable alternative to classical client/server architectures will probably find the SOA approach beneficial and can use the tools that come with Swordfish to easily create their own service implementations. Secondly, since Swordfish is an extensible framework, users who require a customized SOA runtime solution can extend the framework with plugins for different aspect such as configuration, policy-based message processing etc.

Why did you join the Galileo release train? After completing your first release train, what do you think now?

Swordfish joined the Galileo release train to improve its visibility in the Eclipse ecosystem and help grow the community. Being part of the simultaneous release reduces the entrance barrier for developers new to SOA and hopefully gives us the feedback we need to make the further development of Swordfish really community driven.

The last few months have been a great learning experience for us (although painful at times). The effort involved in participating in such a large coordinated release is not to be underestimated, but we believe that the progress we made in setting up our build and release procedures was worth every minute spent.

Now we feel even more involved in the Eclipse community as a whole and are looking forward to the next challenges ahead!

What future enhancements are you planning for your project?

We plan to complement the Swordfish nucleus with other things such as a registry/repository, more advanced monitoring capabilities, deployment etc. to eventually result in a full-fledged open source SOA suite.

Related

Project #6: ACTF

Project #5: EclipseLink

Project #4: JWT

Project #3: TmL

Project #2: PDT

Project #1: Xtext

by Ian Skerrett at June 24, 2009 08:14 PM

Mike Milinkovich

Releasing Galileo

Denis pushes the Big Red Button

Denis pushes the Big Red Button


It was smooth as silk this morning as our esteemed Webmaster Denis Roy pushed the “big red button” to unleash Galileo. He had his moment of trepidation, but so far everything has gone very smoothly.

Thirty-three projects, 380 committers, 24MLOC+…this is a major software release no matter how you measure it.

Congratulations and thanks to everyone in the Eclipse community who contributed.

I would like to also take a moment to thank the people at the Eclipse Foundation who helped make it happen:

  • Wayne Beaton, Bjorn Freeman-Benson, Anne Jacko and Gabe O’Brien for helping run the development processes over the past year. Supporting the Planning Council, getting the Reviews done and keeping the portal running are just a few of their contributions.
  • Janet Campbell, Barb Cochrane and Sharon Corbett for getting all of the IP reviews completed. Eclipse’s well deserved reputation for care of our community’s IP is a big part of our success.
  • Denis Roy, Matt Ward and Karl Matthias for keeping the IT infrastructure up and running flawlessly. Not just for the deluge of downloads, but keeping CVS, SVN, Bugzilla, etc. working throughout a year of development.
  • Nathan Gervais for doing some very cool web design for Galileo. The look of the landing page, download pages, etc. is the best yet by far.
  • Ian Skerrett and Lynn Gayowski for helping with the marketing launch for Galileo. Lining up the press interviews, etc. is a big job. Helping organize 30 democamps around the world is an even bigger job!
  • Donald Smith for organizing a very cool Member Distro Download program.

Helping the community ship the release train is an all-consuming task for the staff here at the Eclipse Foundation. Each year sees incremental improvement, and this year was by far the best job yet. Congratulations and thanks to the team!

by Mike Milinkovich at June 24, 2009 02:58 PM

June 22, 2009

Andrew Low

Beware the Browser

I tend to use my browser state (and plenty of tabs) as lightweight bookmarks.  This means leaving a couple of browser windows open perpetually.  Often my machine is configured to sleep after about 20mins, but in the case of my work laptop it doesn’t sleep if plugged into the wall (intentional on my part).  I don’t think my usage is atypical - I would not be surprised if several of my friends have similar usage patterns.

A picture tells a thousand words:

traffic1This graph is from DD-WRTv24.  You might think “Ah, Roo’s just been doing some torrents” - but the truth is that almost all of the traffic from June 10th-16th and then the June 21st spike are due to a couple of open browser windows on my laptop (overnight).  This was my conclusion last night at 2am when I closed 3 browser windows on my laptop and watch the bandwidth on my WAN port drop to zero bytes.

Let’s look back a bit to some more typical usage:

traffic2You might have noticed the scale is vastly different.  In fact, the usage for the entire month is basically the same as what I was pulling down in a single day.

Granted - I’m claiming it was the browser (some page auto-refreshing?) doing this.  Checking my web logs indicate that visitors to the websites hosted on lowtek hasn’t massively spiked this month.  It could have been something else as well, but the coincidence of my closing the browsers and seeing the traffic drop is good evidence. [Edit - I may have been wrong (yes, it happens) see comments]

Consider the possibilities here.  If you wanted to be evil, and you were say an ISP - you’d ensure that your customers default home page was a nice friendly AJAX enabled launchpad linked to webmail etc..  and you’d put something to cause a slow trickle download cost as long as the user has that page open.  This would likely cause a fair percentage of your customers to consume more of their bandwidth cap sooner.

by Roo at June 22, 2009 03:53 PM

Tim Ellison

WebSphere Application Server for Developers

IBM's WebSphere Application Server (WAS) is the company's flagship Java EE 5 product used in production environments worldwide.

As you would expect for a product representing over 10 years investment from Big Blue, it comes with a license fee to match. However, if you are willing to forgo formal support, and can live with the developer license offered, you can now download the full application server at no cost!

The "WebSphere Application Server for Developers" package for Windows or Linux is available as a download directly from IBM. Bear in mind that WAS weighs in at 788 MB, so downloading over a 1.5Mbps connection is likely to take about one and a half hours.

Go and grab it, and try your software out on a runtime that matches the production environment. In place of formal support there are WAS developers answering questions on the open newsgroup.

by tim (noreply@blogger.com) at June 22, 2009 11:14 AM

June 20, 2009

Mike Milinkovich (personal)

hockeycoach


I love Berlin.

This week was my second visit to the city, and the first time that I really had a chance to play tourist. You can find some of my favourite pictures over on Flickr.

The first time I visited the city I knew I liked it, but I really couldn’t articulate why. I had just recently been in Paris and the way I explained it was “Paris is chic, Berlin is cool”. Which is true.

But after looking over the pictures from this week, I realized a least part of the reason why I love Berlin is that it goes past the other major European cities in revealing its past. London, Paris, etc. make a point of showing off their history. Berlin puts the burden of its history front and centre. From the statue of a scowling Soviet soldier, to the unrepaired bullet holes, to the Holocaust Memorial, Berlin gives equal time to its unpleasant past whereas the other cities only reveal their glories. The whole history is there to find on public display, not just the victories.

That’s not to say that Berlin is sombre. The public art is incredible with a very cool mix of classical and modern. The street scene is hopping with some of the best buskers I’ve seen anywhere.

If you haven’t thought of Berlin as a travel destination, think again. It is a very walkable and lovely city with great hotels, restaurants and bars. I will definitely be going back. Next time I hope to be able to spend some significant time visiting the museums. From all reports they are incredible.

Some random thoughts on what to do or see:

  • If you go the Holocaust Memorial don’t just look at it. Walk through it. If you haven’t been disoriented in the middle of it, you’re missing the point.
  • I can highly recommend both the Westin Grand and the Intercontinental hotels. Especially the latter, as its location close to the Tiergarten, Zoo and Breitscheidplatz are hard to beat. They’re certainly not cheap, but they are both excellent.
  • If you have the legs for it, the view from the top of the Victory Column (Siegessäule) is pretty incredible. But your legs will be burning by the time you walk to the top.
  • The public transit is outstanding. I used the ICE to get there and the U-Bahn, S-Bahn and buses in the city. Clean, reliable and on-time.

by Mike Milinkovich at June 20, 2009 12:35 AM

June 15, 2009

Tim Ellison

JavaOne 2009


The attendance figures put around for JavaOne 2009 state that there were "around 15,000" people at the Moscone Center -- hmm, that seems generous and it certainly felt a bit quieter than previous years. Not altogether unexpected with the economy impacting on travel, maybe people avoiding large congregations over concern of flu, and so on.

The main hall was arranged slightly differently, with the stage set up at the 'side' of the hall, with large back drapes hung across each end. Ushers did a good job of corralling people to the front, and there was a noticeably large representation from Sun themselves.

Like last year there was much talk of Sun's proprietary technology called "JavaFX", with demos of JavaFX running on a disparate variety of hardware (set top box, TV, phone, desktop). There was discussion of Java performance, as realized by the contributions made from new machine advances from Intel. Of course, it wasn't called out that the Nahelem numbers were published on IBM's Java implementation! There was a demo of the new Java market place where Sun, like others, are aiming to reproduce the success of an iTunes style store front to end users.

There was not much talk about Java SE 7 (Jonathan Schwartz did mistakenly announce it's availability, but was corrected by his Chief Engineer on stage the next day), and not much talk about OpenJDK or the JCP which were prominent topics of calls for community participation in previous years. NetBeans was also notably absent from the opening session.

The opening session was concluded by a moving 'good-bye' speech from Scott McNealy and a symbolic hand-over to Larry Ellison. During the hand-over Larry gave a challenge to the OpenOffice team to rewrite in JavaFX. He also said that Sun could be expected to produce notebooks running a Java-based OS in competition with Android.

Later in the week I gave a demo of the Apache Harmony runtime during the IBM general session. I showed Harmony running Eclipse and developing the NIO module using the Eclipse PDE, then went on to show Harmony running Geronimo and the Roller blogging webapp. Craig Hayman had slides of Harmony running the WebSphere eXtreme scale server too. With the existing modular architecture of Apache Harmony, it is trivial to build right-sized runtimes for each of these.

Many people have speculated that this may be the last JavaOne conference, but I don't think so. It is a well organized shop window for Sun/Oracle, and while it remains important to associate Java the ecosystem with a particular vendor I believe that the marketing event will survive.

by tim (noreply@blogger.com) at June 15, 2009 12:02 PM

June 14, 2009

Patrick Mueller

offline web application cache abuse

I've been a user of hand-held computers since 1997, when IBM bought me a Palm Pilot to use in a customer demo I was putting together. Since then, I've been through a number of Palm devices, and up till last week had been using a Nokia N800 device. This week, I caved, and bought myself an iPod Touch.

One of the main uses I've had for these devices is reading. On the Palm, I used the wonderful iSilo program to convert HTML to some binary format that the Palm reader rendered as good as it could - good enough - even on a 160x160 pixel display. On the N800, HTML content could just be copied to an SD disk, and then you could view it via the built-in web browser using file: URLs.

It turns out that I've been able to find plenty of material over the years, in HTML, that renders well enough on my hand-held devices. Either ready made, or built via scraping, or whatever.

what to use on an iPhone or iPod Touch

So, what are the options for reading on the iPhone/iPod Touch? Stanza is the only generic reader I've looked at so far, and it's not bad. It's particularly nice to have access to FeedBooks and Project Gutenberg books, which can be downloaded and then read later if you aren't online. Compared to Google Books which appears to only support reading while online. There's also Kindle, but I don't have any need to buy books, there's plenty of free content to be had. More importantly with Kindle is the 1995 level of HTML support, and that's a big problem for me; I like to read technical content with code samples, etc.

Beyond generic readers, there are also content-specific readers from content producers like the New York Times, the BBC, and AP News. The BBC one is especially strange. When displaying a full article, they seem to be displaying the same content that's on their web page. Various navigation and other links eating up space in the left and right side of the page. You can double-tap the middle content to get that to zoom, but why wouldn't they do that in the first place? If you actually happen to click a link on the page, even to another story on the BBC, it exits their app, and launches a browser on that page. Amazing, and not in a good sense.

Stanza seems like the most useful reader at present, at least for literature. I'm not really happy about the page-turning metaphor; I prefer to scroll pages vertically. I can probably learn to live with it.

But how can I get my own content on there, or more generally, rando HTML content on there?

EPUB

If you look at the formats of "documents" that Stanza supports, one particular format is EPUB. I've not been able to make my way through the morass that is the specifications surrounding this format, but if you're interested, here's how to get started: an EPUB file is a .zip file, expand with your favorite zip utility; you'll find a number of XML files inside, you can kinda get a clue for how everything fits together by browsing those files.

The "meat" of an EPUB document consists of XHTML, CSS, and image files. Hmmm. Sounds like the web. Could you take some existing web site and easily "EPUB" it?

HTML5 Offline Application Cache

Turns out, there's something in HTML5, and more importantly, available on iPhone and iPod Touch devices, that can take an existing web site and make it available even if you aren't connected to a network. There is a W3C Working Group Note for this available as"Offline Web Applications". Apple has documentation on their support of this in the document "HTML 5 Offline Application Cache". See also the WHAT-WG version under development.

The basic idea is to do the least possible work. You need to create a new "manifest" file which lists all the files which should be cached for offline usage. And you need to identify that file in the <html> element of your document. That's all! The browser will arrange to cache all the content listed in the manifest.

I decided to try out how well this works with Mark Pilgrim's "Dive Into Python" book. I downloaded a copy of the book as separate HTML files, ran find on the result to create the manifest, whacked the <html> elements with a multi-file search-and-replace in my text editor, set up the files on my machine's local server, browsed to it from my iPod Touch, worked like a champ.

It seems to take 20-30 seconds to get all the files downloaded, and during that time there is no indication of what's going on in the browser. I was tail'ing my server's access log to tell when I was done. Presumably some of those events specified in the WHAT-WG version of the spec will help out with issues like that. After the files got downloaded, I could turn the wifi off on my device, and continue to browse the content.

"Dive Into Python" seemed like a good test case; non-trivial markup, especially code snippets; a significant amount of content (3MBs fully expanded), and presumably not really designed to be read on a hand-held device. I'm satisfied with the results, though I think most people will find the font sizes too small. The font sizes are too small for me when displaying in portrait mode, so make sure you try landscape as well. Tough decision point there, make the fonts bigger and then you'll either get text wrapping or have to do side-to-side scrolling.

I've got the files available on one of my servers, http://diveintopython-cached.muellerware.org/, which I'll leave up until my hosting provider kills me - each access to the page from an enabled browser will download the whole book (if it's not already been downloaded). Presumably this might work on other WebKit-based browsers, like the one on an Android device, or the Palm Pre.

On the iPhone or iPod Touch, after displaying the initial page, add a bookmark by clicking the + button, and then the "Add to Home Screen" button. Remember to wait 30 seconds or so after the initial page load before doing this, to make sure all the content gets downloaded. This will add the book as a new "app" on the main application screen. I've also done the appropriate horkiness to get the cover of Mark's book to show up as the application icon.

questions

This experience raises a number of questions regarding the HTML5 Offline Application Cache support:

  • How much space does the browser set aside for this cache? I assume there's a fixed upper limit for the cache, but does it compete with all other browser caching? Or is there a per-site or per-url cache limit?

  • How can I be informed when my cache content is thrown out of the cache? Is the entire set of files listed in the manifest thrown out atomically?

  • Is there enough functionality in the existing and proposed APIs to make reliable use of this capability?

I'm left wondering if it wouldn't just be better off to provide a full-function JavaScript API to the cache in general, although clearly this could be done as well as this declarative approach. My fear is the declarative approach might take you 80% of the way there, but leave out critical capability in that missing 20%.

More experimentation required. Have at it.

Or maybe this is just simple abuse of the capability. Instead of caching web sites, you could certainly get more control by having all the book content stored in a client-side SQL database, and then build an HTML application to navigate through it. It's just a lot more work.

by Patrick Mueller (noreply@blogger.com) at June 14, 2009 04:21 PM

Mike Wilson

PC, Vista, Music

I was trying to do some music, using Reason on my dual G5 Mac, and for reasons (sic) that aren’t clear to me, started with two tracks of arpeggiated Combinator patches. Believe it or not, just those two tracks was enough to give me the dreaded “Your computer is too slow” message. Ugh.

Normally, when this happens, I go through the rigamarole of rendering one of the tracks to audio (then slice and reload), or simplifying the sounds I’m using or some other hack to reduce the CPU load, but just for grins this time, I decided I try installing Reason on my PC instead. Time to figure out just exactly how much faster the C2Q is than the G5s!

So, I installed Reason, the driver and automapper for my Novation keyboard, and the absolutely required to do anything useful musically on a PC ASIO4ALL universal ASIO driver. [Ah yes, I remember the "joys" of doing music on a PC.] And finally, I was ready to go.

I recreated the original two tracks I built on the Mac, and then started layering more; not, you understand, to build something musically pleasing, but rather just to see exactly how many layers I could end up with. The result was this:
mess-thumb

What you are looking at is 13 Combinators, for a total of somewhere around 135 (!) individual modules. The result is, of course, an absolute mess, but if you want proof click here:

a Mess

Remember now, I started with the original two tracks that brought the G5 to it’s knees, and it has another 11 layers added on after that. Unfortunately, that really was the limit, I tried for one more layer, but hit the “your computer is too slow” boundary. But still…

Wow!

Hm… Now if that’s what you can do with a Core2Quad, I wonder what you can do with one of these. :-)

by McQ at June 14, 2009 03:15 PM

June 12, 2009

Kevin McGuire (Eclipse)

Eclipse UI Real Estate Wasters!

In my last post I showed a mockup of what Eclipse might look like if we made use of a little extra space for layout and graphical finesse.  For those who want to run Eclipse on a device with a small screen, I agree that a denser UI is better.  But for typical desktop development with large and mutiple screens, maybe we can spend a small budget (say 1% or 2%) of our screen real estate on improved graphical qualities, with the goal of not only looking less dated, but also increasing usability in how we manage information density.

But trim space isn’t the only issue.  In fact, my claim in this post is that a few pixels well spent on trim is inconsequential given the bigger space wasters in the Eclipse workbench.  We really need to consider these, especially if we want to understand what an optimal Eclipse UI would be for a small device.

Looking at a typical Eclipse IDE in usage, there’s lots of wasted space.  By “wasted”, I mean “provides low or no value” (versus, say some breathing space between stacks which I claim does have useful value, although you may disagree).  As an exercise, I took a screen shot of my IDE and marked off areas which seemed to be taking up a lot of real estate but weren’t comparitively providing much information in return.  I don’t mean to pick on any part of our UI, and some cases are likely unavoidable, but still I think it’s worth stepping way back and asking, “Is this really the best use of this space?”

In the screen shot below (WinXP), I’ve marked in orange boxes space that adds very little to usability, real function, or graphical value.

The biggest offender is our use of trees.  On most OS’ they eat up tons of space.  And they quickly become difficult to navigate anyway, this deserves it’s own post.  Second is our heavy use of icon decorators.  Given that frequently a level of a tree is homogeneous, we need to ask whether we’re really conveying much additional information to warrant their usage.   Some things are just plain silly: I’m not sure why we can’t do a better job with the problems view table and fill in some of the empty space on the right with actual content.   Lastly, I marked off the left hand side of the Java text editor.  Clearly we need some place to annotate the text with markers, and you can turn off things like folding to get the space usage down, and its a coding convention for methods to indented… but still I have to wonder if there’s an alternative visual presentation that’d be more space convserving.

This next shot in particular shows the problem:

Do people actually work in this mode? (i.e. expand compilation units in the navigator?).  It seems to create a really confusing array of vertical lines and you lose about a third of the view width.  Maybe then you get rid of the outline view, so you make this explorer wider?  One shame here is if, like me, you never expand the compilation unit, you still pay the price for the tree affordance (the ‘+’ and dotted line prior to the label).

In practice I think I find the Outline view the most wasteful, where I always have a sea of white space and lines on the left (because the tree roots are generally never interesting), preventing me from reading the item text, often resulting in being unable to differentiate the items.

In this example I can’t even differentiate many of the list items until I hover.  As a result, how I personally work is with Outline as a wider fast view, in conjunction with Ctnrl-o.  It’s great that Eclipse provides all these mechanisms so I can tailor it to my work pattern, but nonetheless I think the usability and utility could be better out of the box.

I’m not suggesting we should get rid of editor line markers, all icons, all trees… but it’s just to point out that a few extra pixels of space between stacks is inconsequential compared to these space wasters.  What I want to make sure is that our real estate budget is well spent.  This isn’t then just about the most compact arragement of widgets, but rather, requires us to rethink the very purpose of some of these UI choices.

I don’t know what the right solution is, but maybe we can start the discussion.

by Kevin McGuire at June 12, 2009 07:17 PM

Steve Northover

After the break up ...



"A lot of people knew I left. I was a fool not to do what Paul did, which was use it to sell a record." John Lennon (1970)

Steve

by Steve (noreply@blogger.com) at June 12, 2009 11:32 AM

June 11, 2009

Steve Northover

More from the archives

Good lord, my office was full of shit.

Thanks to Jim des Rivieres for pulling out his camera and documenting some of the artifacts that we found there. There's a lot of OTI and IBM history amongst the rubble as well as a few things I thought were funny over the years. I could explain it all but that would detract from the fun.

Steve

by Steve (noreply@blogger.com) at June 11, 2009 03:46 AM

June 10, 2009

Mike Milinkovich

Berlin Board Stammtisch

Next week is our first-ever Eclipse Board of Directors meeting outside of the USA. Berlin is our destination, primarily based on the fact that it is a darn cool city.

Although Ralph won’t be able to join us, we are going to carry on the tradition he has created and have an Eclipse Stammtisch while we’re there. So Tuesday, June 16th is an opportunity for you to have a beer with the leaders of the Eclipse community.

If you can make it, please add your name to our Doodle poll. We’re hosting it at the Bavarium. Thanks to Eike Stepper for finding us a place on short notice.

We hope you can join us!

by Mike Milinkovich at June 10, 2009 03:12 AM

June 09, 2009

Kevin McGuire

Gay animals in the news

Perhaps it’s old news now since I was reading this in a month old copy of Maclean’s magazine, but apparently Poznan, Poland, have recently acquired a gay elephant.  The controversy appears to be over the fact that after building an expensive enclosure and acquiring this elephant, their hopes of increasing their herd size are rather dashed.  That, and the fact that the elephant’s predilections “devaluates the institution of marriage and is an affront to the almighty”.  I say, live and let live. You can read it all at Elephant News (for elephants, about elephants, by elephants).

But that’s not all.  Those liberal minded European’s also proudly provide home to a pair of gay penguins (I mean though, who can tell them apart?  … “Bob?”  “No, I’m Ethel”).  What’s particularly cool is that they’re successfully raising an adopted chick together.  Which just goes to show that caring is more important than anything else in raising a child.

Addendum:
I figure we have gay rights, and animal rights, I’m waiting for the highly specialized “gay animal rights” group to form. I just checked, and “gayanimalrights.org” is open!

by Kevin at June 09, 2009 01:39 PM

Ralph Mueller

Berlin, Berlin

Two interesting days in Berlin come to an end. Yesterday and most of today I was a guest of Empolis GmbH in the fantastic Bertelsmann building Unter den Linden.

In summary, it was like taking an advanced course in computer linguistics and information retrieval with a special focus on the applicability in research, in the intelligence community and in production environments. Oh – and how can we actually make components and products active bearers and collectors of information about themselves and the environment that they are experiencing:
In the near future the frozen pizza will talk to your cell phone and tell you: 'The good news is that I have Spanish sausage and tons of cheese on me, the bad news is that I have been exposed to temperatures that might spoil me. So it's your choice, buddy.'

Another talk was about a system where a European intelligence agency uses SMILA and Eclipse RCP to analyze and condense all the information that they are gathering through various channels. The more I heard the more I was wondering if SMILA is one more hidden gem in the Eclipse technology portfolio.

I was even more happy about my day when empolis management told me that they'll become a sponsor for Eclipse Summit Europe.

Now with my computer broken I'm sitting in the Berlin Story Salon, using their internet and drinking their coffee.

Later I will go and join the Eclipse Demo Camp here in Berlin. I was planning to do a small presentation, but it looks like it will be just a brief talk – no slides. If you can make it, come and join us at the Fraunhofer Gesellschaft.

Ralph

Comments

by ralphmueller at June 09, 2009 12:25 PM

John Duimovich

James Gosling cannot be subclassed

Photo from JavaOne 2009


















(Yeah, techie humour can be a sad thing)

by John Duimovich (noreply@blogger.com) at June 09, 2009 11:17 AM

June 04, 2009

Patrick Mueller

debugger friendly

(this is a bit of a followup to my previous blog post - "debugging")

Hit a milestone yesterday, submitting my first patch to WebKit, in support of "Bug 25474: Show the filename and first line for '(program)' in the Profiler/Debugger". The patch provides the same support that Firefox provides to allow JavaScript eval() invocations and Function() constructor invocations to name the code they are injecting into the environment, by adding a comment to the source interpreted:

//@ sourceURL=some-url-goes-here

Presumably some-url-goes-here is replaced in your source by some kind of moniker that will be useful to you.

Why is this useful? Here's what your "list of scripts" looks like when developing a Dojo app, without this support: [link]; here's what it looks like with this support: [link]. A little more useful.

Last month, another interesting feature for debugging was added to WebKit - the ability to 'name' anonymous functions, after they've been created. A full description of this, and the value it provides, was written up a blog entry "Building a Better JavaScript Profiler with WebKit". In a nutshell, you can add a property displayName to a function which will be used as it's name in the debugger and profiler if the function doesn't otherwise have a name.

Quick notes:

  • the sourceURL feature is not yet committed to WebKit, and even if/when it is, would only be available in WebKit nightlies.
  • the displayName feature is only available in WebKit nightlies right now.
  • the sourceURL feature does not currently work with the WebKit profiler, just the debugger.
  • the displayName feature works in the WebKit profiler and debugger.
  • Firefox supports (and invented!) the sourceURL feature, but AFAIK does not support the displayName feature.
  • Dojo currently has support for sourceURL feature, but only if you're running in a Mozilla-based browser - chime in here for WebKit support.
  • Dojo has no support for the displayName feature - chime in here on that issue.

enhanced object display

Here's what I'm going to look into next:

In the WebKit bug, "Bug 25724: Incorrect collection output for Javascript console evaluation", the reporter claims that the output when displaying the result of a jQuery function invocation is incorrect. Incorrect isn't fair; it's better to say that it's not what the user expected, but then, as jjb mentions in comment #6, "we can't read [the user's] mind".

It's certainly true that the current output isn't useful, and it's certainly the case that the developer of a debugger can't read a user's mind, so the obvious answer is to let the user decide how to see their output. In Smalltalk, the debugger would call debugPrintOn: instead of the more typical printOn: method (printOn: being analogous to toString in Java or JavaScript). This allowed developers to provide a debug-friendly version of the human-readable representation of an object, without impacting runtime code. JavaScript debuggers should do the same thing.

The other bit that needs to be done is to somehow augment the "properties" that you see associated with an object in the debugger. Literally what you see in the debugger is the implementation goop of an object. Not terribly useful, especially if values associated with objects are computed lazily, via a function invocation. Seeing a function instead of perhaps the lazily computed value provides little value (though it is obviously much safer!).

What I'd like to do is provide an optional method on a function which can be called to obtain "debug properties". For instance, the debug properties for a jQuery object might return the array of matching DOM elements. DOM elements themselves might return, instead of the goop currently returned, their parent DOM object, their children, and their next/previous siblings. These DOM element's might have a "debug toString" that actually showed the HTML representation of the node (which the debuggers already support in some cases).

Of course feel free to post additional ideas on this to the existing but report.

soundpoints

Here's something I did back in the Smalltalk days; would be fun to do this for JavaScript as well:

We all know what breakpoints are, but I extended the concept in Smalltalk with soundpoints (stole the idea from somewhere). Instead of having the debugger pause the execution of the program when a breakpoint is reached, the debugger would play a sound when a soundpoint is reached. The nice thing about this capability is that you get some feedback without having to stop your program. You can set soundpoints to let you know when you venture into code you're not expecting to venture into (some kind of beep/boop), or set a very short blip sound for a soundpoint you expect to hit a lot - giving you a kind of geiger counter. Since WebKit already has programmatic support for playing audio, the "hard" part of this is already done. What's needed is to integrate into the debugger framework. OK, that is the hard part.

As sort of a side issue, when I did this in Smalltalk, I was able to do this with user-land code; I didn't need to be some kind of core developer to get the function added. That's not true today in WebKit. You need to modify existing WebKit code to add functionality like this; there's no simple way of me just adding it to my environment. That would be a nice thing then also, having a way of extending the debugging environment through plugins or equivalent. See "Bug 24273: Inspector Plugins or Extend Capability". Also note that I believe FireFox has or will have the ability to extend FireBug via plugins. I think it's too much to ask to have portable plugins, at this point, but something to think about.

what else

What else can we do beyond all that? What are your frustrations with JavaScript debugging?

by Patrick Mueller (noreply@blogger.com) at June 04, 2009 05:07 PM

June 02, 2009

Ralph Mueller

Mainstream

If there were any doubts left - they are gone now.

Eclipse is mainstream. The proof?

The IDE and its shortcomings get discussed in the very regional newspapers like in this article!

Ralph

Comments

by ralphmueller at June 02, 2009 09:37 PM

May 29, 2009

Bjorn Freeman-Benson

I Had More To Say But...

It's the end of May, so it's probably time to end my state of Eclipse series. I had more to say (the blog entries are written and waiting), but there doesn't seem to be any point. The Foundation is what it is. It's good at some things (e.g., blessing the IP cleanliness of code) and bad at other things (e.g., resourcing the common good; encouraging innovation). The jury is out on other things (e.g., providing member value), but I guess that because the members continue to pay their dues, they must be happy.

by Bjorn Freeman-Benson (noreply@blogger.com) at May 29, 2009 08:03 PM

May 26, 2009

Bjorn Freeman-Benson

CPAN Modules

Eclipse projects should strive to be like CPAN modules:
  • bits of functionality that you can include into any project
  • generally high quality
  • have a common build and distribution system
  • be tested
  • be tested on your system
When I last checked, Eclipse projects met two or three of those goals, but fell down on the "common build system" and "tests run on your system" - two essential characteristics of a truly universal module system.

by Bjorn Freeman-Benson (noreply@blogger.com) at May 26, 2009 08:00 AM

May 25, 2009

Mike Wilson

Dennis rocks!

Most people in Ottawa will know that last weekend was the Ottawa Race Weekend. This year, Dennis had an opportunity to get credit for participation as part of the school’s phys. ed. program, and he went for it:

Dennis ran the “MDS Nordion 10K” race, with a very creditable time of 1:07:01.

Of course, he did no training of any kind before the race, so Deb and I spent the whole hour, standing at the finish line, worrying about whether he was going to have a heart attack before he got there. In the end, we didn’t see him go past us — he was lost in the press — but we got a one word text message (”Done!”).

He complained of being a little tired, and had one blister, but nothing that stopped him from wanting to go “hang out” with his friends soon afterwards. What a guy! ;-)

You rock, Dennis!

For what it’s worth, here’s a picture I took of the press at the starting line. I don’t think Dennis is actually in this picture, but with the limitations of the iPhone’s camera, it’s hard to tell. Oh well, next time I’ll remember to bring the video camera. :-)

Starting line for the 10K

Btw, if you’re interested, here’s a link to Dennis’ official results:

Ottawa Race Weekend: Results

by McQ at May 25, 2009 02:09 PM

May 20, 2009

Kevin McGuire

ReDo List for the iPhone

Well I’m just tickled that I know someone who has published an iPhone app!  Tim Mackinnon, my good friend who I used to work with at OTI Ottawa and OTI London, has published an app called ReDo List.  If I had an iPhone, I’d buy this app, it looks really useful. The blurb says:

ReDo is an iPhone application that allows you to create checklists of items that you can keep and reuse over again.

  • Have you ever gone on holiday and found that you forgot to pack your sunglasses?
  • Have you started a presentation and discovered that you left your laser pointer at home?

ReDo is perfect for maintaining useful lists of actions so you don’t forget to complete them. Simply select an existing list or create a new list, and then tick off items as your prepare for your event. You can use ReDo as a normal to do list, but unlike todo applications, when you have completed your list you don’t throw it away, you keep it to use again the next time.

And, although he’s only released it May 1, he’s actually making a few pounds off it (well, enough for a few pints down at the pub, and really, isn’t that what it’s all about anyway?).

Will the iPhone re-invigorate the independent software author? Check out Tim’s app and help this cottage industry!

by Kevin at May 20, 2009 02:22 PM

May 18, 2009

Ken Walker (music)

Kassagbé

Haven’t published any of my African recordings in a while. Our instructor Leo Brooks knows very little about this rhythm Kassagbé. He learnt it from a video by Paulo Mattioli. It is probably related to Kassa - the common agricultural rhythm played during the harvest. It is from the Malinke people of West Africa.

May 18, 2009 01:44 PM

April 27, 2009

Bjorn Freeman-Benson

Backpointer

I’ve been writing a private personal blog for ten years and a public Eclipse-Foundation-work-related blog for four years, but now that I’ve left for the Foundation for something different, I thought I’d start this public, yet personal-opinion, blog. I will also be writing on work-related things on the New Relic blog.

by admin at April 27, 2009 04:17 PM

April 17, 2009

Mike Milinkovich (personal)

Rail Map


I travel a lot in Europe and love the high speed rail system. In fact, I am sure that I am one of the very few Canadians that hold a Deutsche Bahn 50 frequent rail traveler discount card.

So I thrilled to see that the Obama administration’s announcement today that they’re pushing for a quite complete high speed rail system for the United States. But I got really excited when I noticed the little northern leg on this map. I poked around a little bit, and yes it seems that a high-speed rail corridor is on the plan from Boston to Montreal.

I wonder what this means for a Canadian high-speed plan? If that linked to the often-rumored Toronto-Ottawa-Montreal rail link, that would be very cool.

Update:
There is also a link in the Pacific Northwest that goes up to Vancouver. Boy, I bet Bombardier is licking their chops on this opportunity.

by Mike Milinkovich at April 17, 2009 01:41 AM

April 13, 2009

Patrick Dubroy

How many tabs do people use? (Now with real data!)

For the past few months, I’ve been knee-deep in data from the tabbed browsing study that I conducted late last year. Now that I’m finishing up my thesis, I figured it’s about time that I share some of my findings. In this post, I’ll talk about one of the quantitative questions I was trying to answer in my study: how many tabs do people use?

Measures

The first thing we need to do is to be a bit more precise with the question. What does it mean to “use” multiple tabs or windows, and how should it be measured? There are few possible answers.

We could simply count the number of tabs that a person creates. One problem with that is that when Firefox starts up, at least one tab is created (and possibly more, if it is restoring a session), so someone who opens and closes their browser frequently would have a high number of tab creation events. To eliminate this effect, we only count tabs that are created after browser startup. We also ignore the first tab that is created in any window.

Another thing that’s interesting to measure is the number of concurrent tabs or windows that a person typically has open. For example, two people might create a similar number of tabs, but one of them might have an email client, an RSS reader, and another tab playing music open at all times. It seems reasonable to say that this person uses tabs more heavily than the other person. We decided to measure the number of windows and tabs that were open whenever a navigation event occurred. For consistency, we ignored all navigation events caused by Firefox’s session restore feature when calculating this measure, although it didn’t have a very significant effect overall.

A third measure of tab usage that might be interesting to look at is the number of tab switches that a person performs, but I’ll address that in a later post. For now, we’ll concentrate on how many tabs.

Study Details

First, I guess I should mention a little bit about how the study was conducted. Here was the recruitment email we sent out to family, friends, and colleagues:

We are seeking participants (at least 18 years old) for a research study exploring how people use web browsers.

If you use Mozilla Firefox for several hours a day, and often use multiple tabs or windows, then you are a candidate for the study. If you choose to participate, you’ll install a Firefox extension that will log various actions, e.g. clicking on a link, visiting a bookmark, opening a new tab, and clicking the back button. Don’t worry, the names and addresses of the web sites that you visit will NOT be revealed to researchers.

The study will last for two weeks. During this time, you’ll take part in five short interviews (approx. 30 minutes each) that will be arranged at your convenience. In addition, you’ll be asked to record some brief notes several times during the course of each day (again, at your convenience) and to email your log file to the researchers at the end of the day. Participating in the study will take about 4-5 hours in total over the two week period.

We also put posters up with similar wording across the University of Toronto campus. 21 people completed the study, and 1 person started it but dropped out early.

Unlike many other studies like this that have been done, our study participants had a variety of ages, professions, and technical skill levels. One participant was younger than 20, 14 were between the ages of 20 and 29, four were 30-39, and two were 50-59. Only 6 participants came from a computer science or engineering background, while others had studied education, environmental science, business, and psychology. Six of the participants were full-time students (either undergraduate or graduate), and 15 were working in some kind of office environment where they spent most of their time on the computer.

Results

Tab Creation

First lets take a look at the tab creation rate. Now, keep in mind that these are only tabs that are created after browser startup, and the first tab in any window is not counted. On the X axis is the “tab creation rate”: the ratio of tabs created to navigation actions. (A navigation action is anything that changes the URL of the page, even if it doesn’t result in a top-level page load.) The height of the bars represents the number of participants with a given tab creation ratio.

Histogram of tab creation rate

Interesting…we’ve got a very clear bi-modal distribution. More than half of our participants (13/21) are clustered around the 0.04 mark. In other words, these people create about 4 tabs for every 100 navigation actions. The rest of the participants are loosely centered around 0.14, meaning that they create about 3 times as many tabs as the other people. In fact, we have two participants who are even higher, creating (respectively) 17 and 22 tabs per 100 navigation actions.

Unsurprisingly, the four highest tab creation rates belong to the four participants with Computer Science and/or programming backgrounds. The other four participants in the high part of the distribution are not your typical “techie” types: one is trained as a civil engineer, and the others have backgrounds in communications, humanities, and marketing.

Concurrent Tabs

Another interesting thing to look at is the number of tabs that people tend to have open at any given time. Again, we used navigation actions as our increment of measurement. On the X axis is the number of tabs open when a navigation action occurs, and the height of the bars it the total number of navigation actions that occurred with the that number of tabs open.

Histogram of tabs open on navigation

Not too surprising — the most common number of tabs to have open is one, with a pretty steady descent down to 9. It flattens out and hits a valley at 13, but then rises slightly again for a second peak at 16. So, again we see a slight bi-modality to the distribution. But if we take the same set of “tab power users” from the first graph, we see that they have roughly the same profile as all the participants put together. In fact, the peak at 16 is almost entirely caused by only two of the power users: participants 14 and 20.

One possible explanation for the bi-modal distribution here is tab bar scrolling. At a typical screen size on a laptop or desktop, the tab bar can fit about 9-13 tabs without scrolling. Many people probably try to avoid having the tab bar scroll, but once you get to the point where it starts scrolling, there’s little additional cost to having more tabs open. So it may be the P14 and P20 are the only ones comfortable with keeping so many tabs open that the tab bar is scrolling.

Take a look at the median and max number of tabs that each participant had open:

Graph of median and max tabs

(Note that there’s no participant 8…he’s the one that dropped out.)

Participants 14 and 20 definitely stick out — it’s easy to see why they contributed so much to the yellow portions of the previous chart. Participant 14 by far the highest median number of tabs open with 17, while no other participant had a median higher than 6. Participant 20 actually edges out P14 for max tabs though, with 42. (For once it really is the answer.) Forty-two — that’s a lot of tabs! The tab bar would be scrolling two are three times over at this point. He actually commented on this, saying “Now I am opening tabs up from Digg and they are appearing at the end of my massive list. This is truly a bad way to browse.”

P19 is an interesting one…a median of only one tab open, but a max of 27! Participant 2 is similar, but not nearly as extreme: a median of 4 and a max of 20. Even if these two preferred not to have too many tabs open most of the time, they weren’t afraid of opening up lots of tabs when they needed to.

In general though, it looks like most people don’t go far beyond where the tab bar starts to scroll. I’ve marked a gray line on the graph at 13 tabs. At a resolution of 1280×1024, this is the point at which the tab bar starts scrolling (on my computer, at least). We see one person who maxes out at 13, and a few more who max out at 14. In all, there are 9 people whose maximum is between 10 and 14.

Conclusions

There are a few things we can take away from this. First, we saw that people who use tabs heavily can create 2 to 3 times as many tabs as other users. It’s not obvious what the cause for the bi-modality in the distribution is though. From the second and third graphs, we see that having 10 or 11 tabs open is not that uncommon, even for people who aren’t “power users”. And the third chart also show us that even people who don’t have many tabs open on average can sometimes have spikes of a large number of tabs.


Let me know if you have any questions or feedback. Have I explained things clearly? Are there any other numbers you think I should take a look at? Leave me a comment or send me an email. I’ll be posting some other interesting results from my study over the next couple of weeks.

by Patrick at April 13, 2009 04:15 PM

April 05, 2009

Ken Walker

A Photo Portfolio of Sorts

While re-setting up my AppleTV I wanted to have a good selection of photos to use for the slideshow/screensaver. The AppleTV can easily get content from MobileME galleries of course and I have several but I didn’t have a generic gallery that could be used for slideshows and/or screen savers. So I started trolling through my collection of photos and have placed what I consider to be reasonably generic shots anyone might enjoy. The images can be downloaded in a large format so feel free to change your desktop every once in a while. I hope to add to the collection as I continue to peruse my own collection of over 18 thousand pictures.

Here is the link to my Backdrops and Slideshows















April 05, 2009 04:03 PM

April 04, 2009

Ken Walker

Help me pick a Wii game(s)

Heading for a weekend cottage trip (mooching a cottage really) and since the weather has been a bit crappy I’d like to be backed up by some video games (vs. good old fashioned fun). I need some good 2 player Wii game suggestions. Leave a comment or send me an email at kwalker {at} gunshy.ca . Hey if you want to lend me one, bring it to work... well MY work...

My currently lame collection can be found here.

April 04, 2009 05:41 PM

March 25, 2009

Paul VanderLei

Thoughts from EclipseCon: LogService is an Anti-Example

I'm in Santa Clara, CA, this week attending EclipseCon. It's always great to reconnect with old friends and to catch up on what's new in the world of Eclipse.

OSGi has been gaining lots of traction in recent years, which is a great trend to see. (Finally!) Many people who have been steeped in Eclipse for years are just now getting around to investigating OSGi.

Given that there are still many minds yet to be converted to thinking more in terms of OSGi services and less in terms of Eclipse extension points, I have a modest pedagogical proposal:

Never use OSGi's LogService as an example ever again!

Over and over I hear the OSGi cognoscenti rattle off an example to OSGi beginners with LogServices as the example service. I can't tell you how many times I have heard examples that begin with "Suppose you want to use the LogService."

This is bad for at least three reasons:
  1. Logging is arguably something you might not actually want to do as a service. For example, your application might need to log about the fact that it is unable to acquire a service in the first place. Or it may need to log in a static initializer. At this point, it's too early to have acquired the LogService. We don't want our examples to lead OSGi beginners into thinking that logging is something best achieved via services.
  2. The behavior of OSGi's LogService is almost guaranteed not to match an OSGi beginner's expectations of how a logging service should work. I'm not saying OSGi's log service is wrong necessarily - I'll leave that argument for others to make. I'm saying that we should prefer examples whose semantics are shared between expert and novice. Without that, it's likely the concept we're tying to convey by way of the example is corrupted by the semantic impedance mismatch. An audience member in a session this morning asked a question using the LogService as the example (that was the dominant example in the talk so far, so why not?) and the answer he received from the OSGi expert was specific to the quirks of OSGi's LogService and missed the point of the question entirely. Sigh. Sadly, the questioner left the room even more confused than when he'd entered. Score one for the evil forces conspiring against OSGi adoption in the Eclipse community.
  3. Using only examples that are part of the OSGi framework mistakenly implies that services are something to be used only within the framework, not in your application. Certainly, no OSGi expert would ever argue this to be the case, but they seem unaware that this is unintentionally implied in their example. This misses what I think is the best part of OSGi - architecting your application as services.
I know that no OSGi expert intends to tell beginners that logging is best achieved by services, that the LogService is easy to understand, or that services are something only the framework should provide. So I'm suggesting that we use some concocted application service rather than any service provided by the OSGi framework. Almost anything would be better - StockQuoteService, TemperatureService, etc.

The only thing that could possibly be a worse example than the LogService would be the FooService. (Evil Forces of Foo, you know who you are.)

:-P

by Paul VanderLei (noreply@blogger.com) at March 25, 2009 09:06 PM

March 20, 2009

Patrick Dubroy

301 Redirect for the search usability win!

This morning I read an article about CloudKick, a new Y Combinator startup that provides a nice interface for managing cloud computing resources on Amazon EC2 and Slicehost. It turned out to be a good lesson in how paying attention to basic search engine optimization (SEO) techniques can also give you usability benefits.

After reading the article, I was looking for a bit more information on CloudKick. When I Googled searched Google™ for ‘cloudkick’, here’s what I saw:

Search results without 301 redirect

The CloudKick home page doesn’t appear until #5, and #4 is actually a separate page from their site! Not the best experience for someone searching for more information about the company. It seems odd that their official web site doesn’t appear until #4, almost as if it’s not really the official web site. And why does the contact page appear before the home page?

Notice anything else? The URL on the #4 result has www in front, but the one in #5 doesn’t. I’m by no means an SEO expert, but I know a thing or two — and I could tell that because links to their site weren’t using a canonical URL, Google was treating it as two different sites. This causes two problems: first, Google doesn’t know that the contact page is actually a subpage of the main web site, and second, it dilutes the PageRank, because Google thinks that these two results represent two different sites.

So I sent a quick tweet to CloudKick co-founder Alex Polvi to let him know about the problem and to suggest that they change cloudkick.com to be a 301 redirect to www.cloudkick.com (or vice versa). That lets Google know that both URLs refer to the same site.

And what do you know — they made the change, and just a few hours later, here are the results I get:

Search results with 301 redirect

Looks a lot better, doesn’t it?

The moral of the story: you may not think you need to bother with search engine optimization, but paying attention to even the basics can give you a big usability win. Make it easier for Google to understand your site, and you make it easier for your potential users as well.

by Patrick at March 20, 2009 10:31 PM

Boris Bokowski

Thank you!

I am looking forward to attending my first Eclipse Board meeting on Monday. This first time, I will be a guest since my term of office starts in April. Unfortunately, I can only attend the second half because I am co-presenting a tutorial in the morning. Sorry about that, it won't happen again. ;-)

Thanks to all who voted!

by Boris Bokowski (noreply@blogger.com) at March 20, 2009 09:26 PM

RCP Mail 2.0

Come to our EclipseCon 2009 tutorial (Monday March 23, 8:00 - 12:00) if you would like to learn about best practices for data binding, commands/handlers/contributions, and the common navigator. Bring your laptop with a copy of Eclipse SDK 3.5 M6 for the hands-on excercises!

Three RCP practitioners, and three Platform UI committers for a total of six people will help you understand and build RCP Mail 2.0. Should be fun!

by Boris Bokowski (noreply@blogger.com) at March 20, 2009 01:10 AM

February 12, 2009

DJ Houghton

Photos - Chateaus in France

Note: I didn't just get back from vacation... I am just getting around to publishing photos from my trip last summer.

While in France I visited a ton of castles. None were bigger than Chambord. And while there I even got to listen to an orchestra rehearsing for a concert later on that night.




Here is the Chateau Cheverny. It is used as the basis for the Tin Tin comics.



This is the Chateau Beauregard. Also known as the place where I realized I should have brought an extra camera battery and that taking a million photos of each castle was probably not a good idea.



This is the Chateau de Chaumont. It was pretty cool because I thought it looked a bit more medieval than some of the other castles.


I also went to the Chateau Azay-le-Rideau. Twice actually. Once by myself during the day and then again at night with the girls from the cycling trip to catch the sound and light show.



The Chateau Rigny-Usse is famed to be the basis of the Sleeping Beauty story.


The Chateau Villandry has some amazing gardens. I couldn't even imagine how much more spectacular they would be earlier in the season when everything was blooming.




The Chateau de Chenonceau is really neat because it has a cool looking bridge going across a river. It was a little overcast the day that I was there, but I think that turned out ok because the photos have a grey (almost black and white) feel to them.


by DJ Houghton (noreply@blogger.com) at February 12, 2009 01:50 PM

Photos - Paris

Note: I didn't just get back from vacation... I am just getting around to publishing photos from my trip last summer.

A few random photos from my time in Paris including...

... the view from my hotel room. Yes, that's the Arc de Triomphe in the background. Pretty sweet hotel room actually. A 2 minute walk from the Arc, the Avenue des Champs-Élysées, and a subway stop.



...the Effiel Tower. Gotta have photos of the tower. It would be like going to Sydney and not taking 100 photos of the Opera House. Just not gonna happen.



... the Cathedral of Notre Dame. Pretty famous and near (in?) the Latin Quarter of Paris. A great spot for food and nightlife. Also a photo of the Seine River.




... and the Catacombs of Paris. Really creepy. And on the way out they search your bags. People seriously steal bones from graves???


by DJ Houghton (noreply@blogger.com) at February 12, 2009 01:50 PM

December 24, 2008

Paul VanderLei

From the Slate?

It's a literal translation from Dutch "van der lei". Oddly enough, the name "Vanderlei" is a very common first name in Brazil. Just have a look at all the people with that name who are famous enough to be on Wikipedia. And that does not include yours truly. So some random Brazilan dude snatched up vanderlei.blogspot.com way back in 2005. Apparently, my Dutch ancestors made quite a name for themselves while plundering Brazil way back in the 1600s. That might explain why my great grandfather was nicknamed "Xingu."

by Paul VanderLei (noreply@blogger.com) at December 24, 2008 12:25 AM

December 16, 2008

Nick Edgar

EclipseCon talk accepted

Looks like our talk on the Eclipse e4 programming model, which includes a demo of our work on embedding web UIs into Eclipse, has been accepted for EclipseCon (March 23-26 in Santa Clara). Woot!

by Nick Edgar (noreply@blogger.com) at December 16, 2008 06:59 PM

December 14, 2008

Michael Van Meekeren

Johanne Marie's Candle

Hey,

Thanks for the candle.   It's a special Christmas candle that you burn every day leading up to Christmas.   We have been faithfully burning it every day.  I don't know about you in Denmark but it takes a long time to burn one day down!

thanks again,
Michael 

by Michael Van Meekeren (noreply@blogger.com) at December 14, 2008 01:49 PM

Games shop

5262 Grafton st. I think, is a great little games shop.  Hard to find but suprising what is inside.  I think I had to duck to get in the tiny door.


by Michael Van Meekeren (noreply@blogger.com) at December 14, 2008 01:45 PM

November 03, 2008

Smalltalk Development Tools

J9 VM patch streams wrathified!

Its been a crazy week and a half. Wrath, along with several other infrastructure-related items, has now been backported into all J9 VM patch streams. I'm surprised at how cleanly the backport went - in most cases the streams were Wrath-compliant in under 45 minutes. Our mirror story has paid off big time as each stream only need minor updates. Its nice when you get to see your technology just work.

November 03, 2008 04:41 PM

"Are you suggestin' coconuts migrate?!"

King Arthur: The swallow may fly south with the sun or the house martin or the plover may seek warmer climes in winter, yet these are not strangers to our land?
1st soldier with a keen interest in birds: Are you suggesting coconuts migrate?
      -Monty Python and the Quest for the Holy Grail

Unfortunately, source code, like coconuts, needs help to migrate from on repository to another. When we started, we only wanted to change where our Smalltalk source was stored. We had lived with multiple repositories and were tired of ensuring that dependent changes in each of the repositories got into the right build, or was correctly backed out when there were problems. Our original goal was only to replace the ENVY repository with CVS, or any other version control system, and continue to use all the existing browsers.

To get to that goal, we needed a way to export our Smalltalk code to flat files and a way to load from the files back into the image. The obvious answer is Smalltalk's existing file-format, the "chunk" format. Chunk format, while fine for computers, leaves something to be desired when it comes to human consumption. Various other file-formats for Smalltalk have been development but none of them felt quite right for us.

Our solution is something we call FileBasedSmalltalk (FBS), which has become on of the core components of STDT. FBS provides a meta-model to map classes and methods back to their files so that the source can be kept on disk, not in memory. The model maps FbApplications, FbSubApplications, FbClassDefinitions, FbExtensions and FbMethods onto their "normal" ENVY model objects. The FbLoader is responsible for reading the files in and creating these model objects. To provide name resolution, the FbResolver was created and it can be thought of as the Smalltalk dictionary for FBS.

I can hear you thinking, "You have a meta-model... you still haven't actually installed any classes in the image" and you're right. The EmImageBuilder is a fantastically complex piece of code that does a great job of atomically loading classes, applications, etc. We definitely didn't want to rewrite it, so we did the next best thing - we subclassed it. FbImageBuilder is the new image builder that can force the FBS model objects into the right shape, allowing them to be loaded and installed as classes. Getting this correct was a lot of fun as mistakes often meant starting with a new image.

Now, I've explained how the Smalltalk source gets loaded into the image, but what does this have to do with repository migration? At the same time we were getting the FBS figured out and working, we had started to mirror all of our code from ENVY into CVS each as part of every build. Source code without history - no change comments and no ability to see why things changed - makes it very difficult to determine if that nonsensical code snippet is there for some vastly important reason or can be safely removed. Today there is over a full year's worth of history in CVS for all of our Smalltalk source.

As part of each build, our Smalltalk tools were run twice, once from ENVY and once using FBS. The output from the two were compared to ensure they were identical. It was now safe to only run the tools using FBS, although ENVY was still the "master" for the source and the mirroring to CVS continued. And that was the migration, a gradual switch once confidence had been built up in the new tools.

Turned out that trying to keep the ENVY browsers and make them work on files was more work than was practical. Instead, the STDT tools were born.

November 03, 2008 04:33 PM

July 14, 2008

Jeff McAffer

Eclipse Summit Europe

Now that Ganymede is out the door and the teams have had a chance to breathe a bit, its worth taking a few minutes to think about how you can promote all the hard work you’ve put into the release. One of the best forums you could ask for is Eclipse Summit Europe. I’ve been to all of the ESE events and have found them to be fantastic. The conference is chock full of interesting people and talks. The venue is very inviting and if we are lucky, there will be another caipirinha night. Why not make one of those talks (and drinks) be yours this year? The first step is to propose a talk. The conference is in November but the talk submission deadline is coming up in September. Don’t put it off, submit early and often…

by Jeff McAffer at July 14, 2008 03:15 PM

June 24, 2008

Jeff McAffer

Cola is just too cool!

This is just too cool. The ECF guys (in particular Mustafa Isik) have some up with a system for real-time shared editing mechanism called Cola. I’ve not tried it myself but the screencast they put together is so compelling that I had to stop watching it and post this! Check it out. Very cool. And the HD mode on the video is awesome. Well done guys.

p.s., yes I realize that I used “cool” three times in this short post. What can I say…

by Jeff McAffer at June 24, 2008 01:41 PM

May 15, 2008

Ken Walker (music)

India Minor - Butterflies & Zebras

I haven’t posted some B&Z in a while. Butterflies & Zebras is made up of Norm Howard (insane sound craftsmanship), Steve Northover (The Father of SWT) and myself, Ken Walker. We gather Sunday nights, when we can all make it, at the old OTI building and hope we don’t blow someone’s mind out. Anyway, Steve records on his ThinkGad and I record on my Mac and we see who’s recording sounds better. These are often one-offs. Occasionally we find something we like and try to replicate it, often it works, sometimes it doesn’t. So our recordings are all live, made in the lunchroom at OTI. Here’s one recent recording named on the spot to be India Minor. How do you explain how Norm does the surf crash to guitar sound around 0:51, crazy solos at 2:19, or an excited Tinkerbell jumping at 2:46? I kinda sound like I’m playing Congas however I usually play my African Duns strapped together on a rack and with my hands or sticks go at it. Enjoy. I love making this music.... it’s so free form. We’ll never secure a record deal.

May 15, 2008 02:29 AM

March 29, 2008

Chris Laffra

EGL Rich Web publicly available

I am very happy to announce that EGL Rich Web is now publicly available. It is a set of plugins for Eclipse that allow you to quickly develop mashup applications that use Ajax to consume web services (SOAP and REST, both JSON and XML), RSS feeds, and regular HTML web sites. We support integration with Dojo, Silverlight, Google maps and charts, and basically any technology that has a JavaScript API.



I invite you to install the feature from the download site and try some of the examples and give us your feedback.

March 29, 2008 07:55 PM

March 08, 2008

Chris Laffra

IBM wins the SD West 2008 Developer Bowl

This year I attended SD West 2008 and provided demos of EGL Rich UI at the commercial exhibit floor.

Thursday night I was also captain of the team that entered in the Developer Bowl. We defeated CodeGear, and Intel defeated the notorious Google team. In the finals, IBM beat Intel by a very slim margin.

More pictures and a victory video are available here.

March 08, 2008 02:40 PM

February 21, 2008

Brant Herbert

The "black swan"

Another thought-provoking podcast from SALT (Seminars About Long Term Thinking).

A “black swan,” (Nassim Nicholas) Taleb explained, is an event which is 1) Hard to predict; 2) Highly consequential; 3) Wrongly retro-predicted. We pretend we know why the big event happened, and so entrench our inability to deal with the next world-changing improbable event.

Examples: Viagra, 9/11, Harry Potter, First World War, Beatles, the PC, Google, and the rise of any successful religion. History is dominated by sudden, lasting changes wrought by deeply unexpected events.

“Never take advice from someone wearing a tie.”

Listen or Read More

February 21, 2008 02:38 AM

The "black swan"

Another thought-provoking podcast from SALT (Seminars About Long Term Thinking).

A “black swan,” (Nassim Nicholas) Taleb explained, is an event which is 1) Hard to predict; 2) Highly consequential; 3) Wrongly retro-predicted. We pretend we know why the big event happened, and so entrench our inability to deal with the next world-changing improbable event.

Examples: Viagra, 9/11, Harry Potter, First World War, Beatles, the PC, Google, and the rise of any successful religion. History is dominated by sudden, lasting changes wrought by deeply unexpected events.

“Never take advice from someone wearing a tie.”

Listen or Read More

February 21, 2008 02:38 AM

November 14, 2007

Nick Edgar

Our stay at Le Guilleret in Old Montreal

Eileen and I just got back from a lovely stay at "Le Guilleret", a relatively new inn located in a 250-year-old building in the heart of Old Montreal.

We had originally planned to make it a romantic, one-night getaway for the two of us, before picking up E's parents at Dorval airport on their way back from their vacation in France. But the best-laid plans of mice and men often go awry, especially when said mice and men have kids...

E had spent a lot of time searching for places before we decided on Le Guilleret. There were other inns in Old Montreal that appealed to us. There was a nice one we had stayed at recently in August, and would have been happy to return to, but their off-season rates were not very off-season. Another one looked lovely, but they required prepayment which would be forfeit if we had to cancel within 3 days of our stay. We decided that this policy was pretty usurious, particularly for those with young children, where one does not often have the luxury of 3 days notice that one of them is going to be sick. Maybe that was an omen.

We were all ready to go, bags mostly packed the night before, arrangements made with friends to meet the kids after school, and with family to have them sleep over, when who comes into our room at 6am but our 5-year-old son Brian saying "My ear hurts. It really, really hurts!"

A quick trip to the pediatrician in the morning confirmed that, yes indeed, Brian had a good ear infection going. About 100 permutations of "How can we get Brian the care that he needs yet still have our getaway" went through our minds, but, in the end, we decided it was best just to take him with us.

Unfortunately, the idea of a nice stay in Old Montreal did not appeal to Brian as much as it did us. He was quite upset when he learned that he wasn't going to get to sleep over with his cousins Shane and Lauren after all. But, after a nap and much cajoling, he came around, and was actually quite charming as we finally headed out in the early afternoon.

Two hours later, we arrive at our destination. A very nice fellow, Fréderic, welcomed us warmly at the door, explained the routine of the inn, and showed us to our room, the Nocturne suite.

DSCF1168

The room was so gorgeous, it actually took Eileen's breath away. Warmly lit and inviting, the room has a very comfortable, king-sized bed, with an attractive backdrop. Although the ceiling in the room is low, it adds to the feeling of coziness rather than feeling oppressive.

A modern bathtub, with strong jets, funky lights, a fountain tap, and space enough for two, sits beside the bed rather than in the washroom. Though the placement is somewhat unusual, this again added to the intimacy of the room for us, rather than detracting in any way. It also affords a nice view of the big screen TV (a Sony LCD projection TV, I'm guessing 46"), which sits against the opposite wall. This might appeal when the bath is not shared ;-).

Brian had fun checking out the bath and playing with the lights.

Brian checking out the bath

Next to the bath was a doorway to the adjacent washroom, nicely appointed with a copper bowl sink and a gorgeous stone-tiled shower. I would be remiss in not mentioning that the toilet was a comfortable, elongated one, not some chincy model.

Nocturne suite washroom @ Le Guilleret

After getting settled in the room, I went off and parked the car at a nearby underground garage, stopping by a dépanneur on the way back to pick up popcorn and some St. Ambroise (an excellent ale from the McAuslin brewery in Montreal).

St. Ambroise == Yum!

After unwinding for a couple of hours, we headed off to dinner at an Italian restaurant just down the street called Galiano's. I had a fantastic Penne Arrabiatta (the sauce was one of the best I've ever had). Eileen enjoyed her pasta trio as well. Our waiter was very good. He recommended glasses of wine for each of us, which matched the meals beautifully. Brian sampled from our dishes and liked the pasta too.

On our return from dinner, we asked Fréderic to light the fire for us:

DSCF1193

And poured a bath:

Nocturne suite bathtub

After we both had a good soak, and Brian watched his movie (perversely preferring the little portable DVD player to the big screen TV), we all crashed out in pretty short order.

In the morning, we enjoyed the fantastic shower. It was difficult to bring myself to get out. Not only because it felt great, but because I felt like I needed to re-hydrate, as the room was very dry overnight.

Nocturne suite shower

We then had a nice breakfast in the kitchen just outside our room. Other than the croissants, chocolatines, and coffee which Fréderic had prepared, it was a DIY affair, so we made our own eggs and toast. I really like this informal (and inexpensive) approach. The place was quiet on a Monday/Tuesday, so there was only one other couple at the table with us.

It should be noted that although the room is directly adjacent to the lobby and the kitchen, it is still very private. The double doors leading to each provide good sound insulation.

There were only a few minor downsides for us. As mentioned, the room was very dry. Though there was an air conditioning unit in the room, it did not include a humidifier. One should really be provided, especially in the winter (and particularly if the fireplace is used). E was also surprised to find no shampoo provided, and found the tiny hair dryer they provided to be frustratingly underpowered. It would be good if their website mentioned not only what is included in the suites, but what is not. But these points did not really detract from the overall very positive experience we had here.

Though it wasn't quite the romantic getaway we had originally envisioned, we nonetheless enjoyed our stay at Le Guilleret very much. We will have to visit again some time soon.

by Nick Edgar (noreply@blogger.com) at November 14, 2007 05:13 AM

August 27, 2007

Ted O'Grady

March 28, 2007

Tod Creasey

TextProcessor and BIDI

As a follow on from my post a couple of days ago I thought I would dive a bit deeper in when to use the Text Processor.

Lets start from the javadoc:

"This class is used to process strings that have special semantic meaning (such as file paths) in RTL-oriented locales so that they render in a way that does not corrupt the semantic meaning of the string but also maintains compliance with the Unicode BiDi algorithm of rendering Bidirectional text.

Processing of the string is done by breaking it down into segments that are specified by a set of user provided delimiters. Directional punctuation characters are injected into the string in order to ensure the string retains its semantic meaning and conforms with the Unicode BiDi algorithm within each segment."

So where do I use it?
Anywhere where the string you are displaying has a series of segments where the ordering of the segments is the same no matter what language you are displaying. The most common examples are file associations, file paths, URLS and URIs.

When is it processing Strings?
The TextProcessor will do bidirectional String processing anytime you are running with your Locale set to one of the four bidirectional languages (Arabic, Farsi, Hebrew or Urdu).

Will it process if my layout is right to left?
Only if your Locale is one of the languages mentioned above.

Do these extra characters get picked up if I copy the String?
Yes. In some applications that do not try and interpret these characters (such as Notepad) they will show up as control characters.

How do I strip the extra directional characters out?
TextProcessor#deprocess(String)will allow you to remove them.

What should I do about input fields for these Strings?
The Eclipse Platform tries to avoid creating behaviour that is inconsistent with the operating system as much as possible. As a result we do not process the input String - the user gets whatever the operating system wants to show them.

Once again we would love to hear from anyone who is using our bidirectional support day to day to give us more feedback.

by Tod Creasey (noreply@blogger.com) at March 28, 2007 07:48 PM

March 27, 2007

Tod Creasey

Bidirectional Support FAQ

Here on the Platform team we have had a series of questions about how the bidirectional support in Eclipse works and I thought it was time I blogged about it. Here are some commonly asked questions:

1) What is the difference between using -dir rtl and -nl iw?

-dir rtl was a command line parameter that Help was using before the workbench added it's general BIDI support in 3.1. When we added the BIDI support ourselves we continued to support the old flag but we also felt that the -nl command line parameter made more sense. If you are using a Arabic, Farsi, Hebrew or Urdu locale as the argument to the -nl parameter you will get right to left support.

The TextProcessor does not support the -dir rtl parameter so it is recommended that you use the -nl parameter to get all of the bidi support. Note that TextProcessor will process BIDI strings whenever the Locale is bidirectional whether or not the Locale was set by -nl or taken from the OS.

So if you use -dir rtl your orientation will be set to right to left but your paths etc. will not use the text processing.

2) What is the difference between TextProcessor and Window#getDefaultOrientation ?

TextProcessor is a class supplied by OSGi to used to process strings that have special semantic meaning (such as file paths) in RTL-oriented locales so that they render in a way that does not corrupt the semantic meaning of the string but also maintains compliance with the Unicode BiDi algorithm of rendering Bidirectional text. (from the javadoc).

So for instance http://www.eclipse.org/ will render the entire String in left to right order but will process each segment right to left.

org.eclipse.jface.Window#getDefaultOrientation is a method used to determine the default orientation for windows. If it is not set the default value will be unspecified (SWT#NONE) (also from the javadoc).

Dialogs, Windows, IWorkbenchParts
and FormToolkits use this value to determine their default orientation. All of these classes allow the orientation to be overridden.

3) Why do I not get bidirectional text processing in left to right orientations?

Using the TextProcessor to evaluate paths is slower than not processing them at all (of course). For performance reasons we do not use TextProcessor unless you are in a bidirectional Locale.

4) How do I set my inputs to use bidirectional support?

All input processing is done using the platform widgets. Eclipse generally does not try and work differently than the OS so we use the OS input methods.

5) What happens if I use multiple direction parameters?

There is a precedence of these parameters. As document in the help at org.eclipse.platform.doc.isv/reference/misc/bidi.html:

The orientation of the workbench is determined in one of the following ways (in order of priority):

  • -dir command line parameter. If the -dir command line option is used this will be the default orientation. Valid values are -dir rtl or -dir ltr.
  • system properties. If the system property eclipse.orientation is set this will be used. The recognized values of this property are the same as the -dir command line argument.
  • -nl command line parameter. If the -nl option is used and the language is Arabic, Farsi, Hebrew or Urdu the orientation will be right to left.
  • Failing all of the above, the platform defaults to a left to right orientation.
The TextProcessor is only checking Locale and does not use this precedence.

So...
  • -dir rtl will give you right to left windows but no text processing
  • -nl fa will give you right to left windows and text processing
  • -nl ur -dir ltr will give you left to right windows and text processing
  • Starting Eclipse in a bidirectional Locale with no arguments will give you left to right windows and text processing

6) Is right to left ever the default?
No. When we initially did this work we made right to left the default for users in the right to left locales but the overwhelming response was that they developed in left to right and then we should only switch orientation if explicitly asked to.

So if you start Eclipse on an Urdu machine with no command line arguments you will get left to right orientation. If you start Eclipse using the command line argument -nl ur on the same machine you will get right to left orientation.

7) Who uses this support?
This is actually a question for you. We know there are lots of users who use Eclipse left to right in a right to left locale but we are interesting in hearing from
  • Users who use right to left for their Eclipse development - especially if they want some right to left support changes in JDT or EMF.
  • Users who use left to right but frequently have to deal with right to left strings and find the lack of bidirectional text support problematic
If you are one of these people please log a bug to Bugzilla or add a comment to this blog.

by Tod Creasey (noreply@blogger.com) at March 27, 2007 05:39 PM