blog/ notes/ projects/ colophon

I haven't been updating this site or the software running it very much for the last year and a half. Time sure flies. In the mean time, ideas evolve and mature. So after reading about Toto, a tiny Ruby + git blog software, I resolved to update nnmc and finally implement a few idea I had at the beginning. Here is what I did today:

  • I now use git (via github) for the version control of the software. You can now peek at the ugly php code behind this site.

  • I also use git for the content. Unlike Toto, I use a separate repository for the content of the website. I don't have templates but I have a few different categories of content, not just a blog. As the content is easily scrapable from the web, I just made the raw source available on GitHub (also, it will not count toward my private repo quotas).

  • I finally created a setup script to handle the different configuration between the local (dev) version and the production (remote) sites. You can peek at it.

One nice idea of Toto that I like very much is to not have a component to edit the content from the web. I didn't create that much content via the web interface anyway. That sure simplifies the security aspect, especially when you can't have ssl on your host. I'll see when I have time to remove it.

To migrate this website from being a set of files to being a checkout off github, I had to do a bit of research to find a way around using git clone. The problem was that I wanted to checkout the content of the repository in the public directory from where files are served, not create a 'nnmc' dir and symlinking that. So here is what I did, after ssh-ing into my account. I ran the following commands from /home/public directory that serves the files.

To get the software :

git init
git remote add origin git://github.com/nicolasH/nnmc.git
git fetch origin

The following command will actually make the files appear in the directory. I use the -f to overwrite the files that are both in the repository and on the website.

git checkout -f -t origin/master -b master

Then just symlinks the .htaccess and config.php to the prod_ files:

bash setup.sh prod

To get the content is much simpler, as it was already in a separate directory:

git clone git://github.com/nicolasH/content_nnmc.git

And "that's it". I can update either the content or the software with a git pull. Which I will have done to update this post.

As I am looking into iPhone application development, I did an informal survey to figure out what are the common ways to handle zooming and fullscreen interactions.

Notes:
- The "survey" was conducted on my iPhone 3G 3.1.2.
- By 'controls' I mean any button, toolbar or popup that the user can tap on.
- All the apps were at their latest version as of the 28th of March 2010.

Apps with variable size canvas :

  • Maps: Double tap to zoom in, two fingers tap to zoom out, pinch to zoom in/out.
  • TomTom: Double tap to zoom in, two fingers tap to zoom out, pinch to zoom in/out (in the "explore map" screen).

Apps with a fullscreen view and variable size canvas :

  • Google Earth: Double tap to zoom in, pinch to zoom in/out. Each corner has some buttons to trigger actions or show more controls.
  • OffMaps: Double tap to zoom in, pinch to zoom in/out. Single tap to show/hide controls (but a double tap also triggers this).
  • iOSMaps : Double tap to zoom in, pinch to zoom in/out. Always some controls on the top of the screen.
  • Seadragon : Double tap to zoom in, pinch to zoom in/out. Single tap to show controls, with a delay before tappable elements fade in/out.
  • Moon globe: Pinch to zoom in/out. Single tap to show and hide the controls.
  • Photos app: Double tap to zoom/cancel zoom, pinch to zoom in/out. Single tap to show/hide the controls.

Apps with a fullscreen view and fixed size canvas :

  • Stanza : Pinch to zoom in/out, single tap in the middle to show the controls.
  • MyPaint free : Pinch to zoom in/out, a button in the corner to show the controls, tap in canvas area to dismiss.
  • Koi pond : Buttons in the bottom corners. Fade in after a few seconds in the app, but still tappable.

Zoom :

Pinching is the only standard gesture for zooming.
- Double tap seems to be relatively common for zooming in.
- Pinch is the only common way to zoom out.

I was surprised to find that the two-finger tap gesture was quite rare, as it is featured in the iPhone dev kit samples and in the Maps app. Maybe it is judged as not easily discoverable?

Another interesting point to me is that no one seems to allow zooming out in single-handed operation.

Leaving fullscreen mode :

There seems to be two different ways to trigger showing more controls on the screen.
- For some apps you have to tap on a control, either partially transparent (Koi Pond, My Paint Free) or fully visible (Google Earth).
- For others, the single tap gesture is recognize, and triggers showing / hiding more controls to the user.

As a user, I find that 'single-tap to show UI' works well only in Stanza, maybe because it is a non-scrollable canvas. On scrollable canvas, the only OK implementation I found (in my very limited sample) was in the Photos app. I personally found it sluggish in Seadragon, too sensitive in Moon Globe and too annoying in OffMaps. For example in OffMaps: you can tap-and-hold to add a waypoint; to dismiss the control that appears, you have to tap somewhere else, but that triggers the global "show/hide UI", as does a double-tap to zoom. By contrast, in the Photos app you have to tap to show the controls, but any tap or scroll in the photos area will dismiss the toolbars.

My main problem with single tap to show the UI is that it is too easy to trigger involuntarily in apps in which you interact with the screen for scrolling. Maybe it is much harder to get right? I believe it is easier to have the control out of the way in a corner, where it is still easily found yet harder to trigger unintentionally.


blog/ notes/ projects/ colophon