Intelligent Design instead of Evolution

The Trouble with Evolution

A few years ago I decided to try Ubuntu’s default email client Evolution, as that seemed convenient. It was just there and I had no clear preference, after leaving mutt behind because my approach with it didn’t scale to the amount of email I burdened myself with.

Evolution worked reasonably well, but at some point started to fail at emptying the trash. A few mails would remain in there until a restart. Seeing emails that I moved between folders in the trash kept making feel uneasy, even after I understood that it are just copies. Deleting or renaming folders sometimes works and sometimes results in utter chaos that can only be fixed by restoring a backup.

Since the last update with Ubuntu 10.10, Evolution does not quote the content of HTML emails any more, unless I select the text beforehand (known issue). The way editing emails works with blocks of content often leads to situations where I fight with the program in a way that I only recall from MS Word (well, OO Writer, too). And now Evolution sometimes dies when I click Send.

Why I didn’t make sure there are bug reports for these issues? With one exception where I did do so, they are all random, so I can’t list steps to reproduce them. Not to forget that switching to another application takes less time …

After looking around for other options, I chose Thunderbird.

To be fair, I can’t yet know how it fares regarding reliability, but I already know it does account setup much nicer and feels less clunky. Also: hooray for incremental search!

How to migrate from Evolution to Thunderbird

I followed this guide for emails. The only issue was ending up with the content of the Junk folder in my new local Inbox folder, so either emptying Junk or the old Inbox beforehand would have been a good idea. Otherwise I just had to mark everything as read again (and switch to threaded view).

Evolution exports the addressbook in vCard .vcf format. This online tool allows to convert that to LDIF, a format that Thunderbird can import (found via their wiki).

Migration

Northern hemisphere summer 2017:

Ada walks into an electronics store to buy a new, larger pad, as she earned more than enough credits with her free-software contributions, recently. Instead of giving the old pad into a reuse-or-recycle program, she just handed it down to her little brother. Of course only after cleaning it of all her data and customizations with a single command (and a confirmation). The system automatically made sure there was a complete backup on her personal virtual server, first.

All the available devices, be it pads, laptops or wearables, have one thing in common: they come with a pre-installed system, but one that supports a common standard for installing an operating system environment of your choice. Or several in parallel. Ada chooses a pad to her liking and pays electronically, using a scheme that involves a one-time proxy account. This minimizes the information that the shop and her bank gain.

The new pad is ready for action on the push of a button. Plugging in here little key card—she tends to wear like jewelry—allows Ada to establish a secure connection to her server, despite using wireless.

2 touches later, her preferred system gets installed by pulling the base from the next public server and applying a patch-set that represents the changes she made while using the old pad. Differences in hardware are accounted for automatically, by use of a number of profiles and device-categories. She tests the configuration with an obscene gesture bound to a custom command … alright!

Both the software modules and her documents she accesses on the go are kept on the server and cached on the pad, though she can manage what is kept where and synced when in as much detail as she wants to. Downloading and installing has become just using it (almost) immediately. Ada recalls vague memories of how laborious migrating data and settings and keeping things in sync used to be and smiles šŸ™‚

Inkscape Tiled Clones

Inkscape has this dialog hidden in Edit -> Clone -> Create Tiled Clones…:

It has been brought up on the Inkscape-devel list and I decided to have a closer look.

Inkscape defaults to shifting the clones by 100% width of the selected object for columns and 100% height for rows. So the parameters on the Shift page are actually about the deviation from that, but the interface doesn’t make that clear at all.

Shift and Scale only take %, but should allow absolute values with a unit of the user’s choice.

Rows, columns wouldn’t make sense for radial arrangements that should also be possible.

Width, height: it could be made clearer that this option will fill the specified area and in what directions (original defines top left).

Use saved size and position of the tile checkbox: what is the use case for this option?
The tool-tip shows that this needs a lot of explanation: “Pretend that the size and position of the tile are the same as the last time you tiled it (if any), instead of using the current size”.

The Exponent parameter on the Shift and Scale pages depends on the tool-tip to explain that it defines whether rows will be spaced evenly (1), converge (1).

Trace page: Well, non of my tests produced anything sensible or useful.

The Symmetry page only contains a pop-up list (what GTK+ erroneously calls a combo box) full of mysterious items:

These are the 17 wallpaper groups, all possible tilings with translational symmetry. I don’t think knowledge of these should be expected. At the very least, the term wallpaper groups should be mentioned. Even once you know what this is about, the descriptions might not help you much with recalling the patterns or with predicting the outcome based on the selected object.

The Wikipedia article includes diagrams, but I didn’t find them to help much. A page of Inkscape: Guide to a Vector Drawing Program is much better. There are 11 groups based on rectangles (2 of them can be parallelograms), 1 on right-angled rectangles (rectangles cut apart diagonally) and 5 on hexagon subdivisions.

Here’s an attempt at creating the most simple schematics, leaving out points of rotation and mirror axes to just depict orientation. The place taken by the selected object is darkened:

These could be added to the descriptions given now.

Ayatana Sound MenuĀ 2

After creating the previous mockups, I have been reminded of the need and value of taking a step back and asking the big questions of design, like: What are we trying to achieve exactly? What is the problem we are trying to solve? Who’s gonna use it in what for a context?

I would think everyone in the design team at Canonical knows about all that, but the specification for the sound menu does not reflect it.

The original reason for the existence of the sound indicator should be quick access to the master volume control. Sound preferences can be accessed by the same means as other system preferences, but it is so closely related to the master volume, that having it right next to it is reasonable. Especially as the speaker icon makes it likely that a user looking for sound related preferences will look there before they would open the System menu.

Having 2 user interfaces for the same things is something to be avoided due to the costs of design, implementation, testing, maintenance, documentation, learning and the decision a user has to make every time. It can be worth it, if there are differing needs that can’t be met as well, otherwise.

I really don’t see how I could define an audience in a useful way here. Everyone who listens to music played back from the same computer they are doing something else with it at the same time doesn’t help much. But the context I just described could.

To me it looks like the motivation for adding playback control and family to the menu is just getting rid of the per-player panel items. It is not a given that playback control in a panel menu is a good idea.

Why would you go through the menu, instead of using the player window? I think if you have your mind primarily on the music, it is a foreground task and the player window should be a much better interface than a menu could ever be. Playback control in the menu should then be about cases where you want to minimize the interruption from another task, where music is a background thing. You might have to listen to something else and want to mute the music, the entire computer, quickly. Or you go for a break and want the playback to stop. Now some will likely mention keyboard buttons for sound control on laptops or on special keyboards. Not everyone has one of those and some might find it more convenient to use the mouse.

Mute and pause all is based on the need to make the computer shut-up quickly. No reason to play on if muted. The user will likely prefer to continue to listen from the position where he muted the system (at least if it is for longer than a few seconds). I’m not quite sure what the label should change to. Unmute all if nothing was playing, Unmute and restart playback or even Unmute and restart playback for Rhythmbox?

The Show items are far from being necessary within my reasoning, as one would hope other means of window management are good enough. But they do show what will be affected by Mute and pause all.

Ayatana SoundĀ Menu

2 Mockups in reaction to Mark’s post, this other mockup and also Troy’s interesting but wordy article.

I think the prioritization based on assumed frequency of use should be as follows:

  • Mute All
  • Volume
  • Play/Pause
  • Skip Forward
  • Preferences
  • Set Position (via slider)
  • Skip Backward

I left out Choose Playlist, because bringing up the player window could well beĀ  more convenient than using a sub-menu and the menu is rather crowded. I’m least sure about Set Position, it’s another candidate to be dropped.

There are 3 scopes in the menu:

  • global,
  • per player and
  • per track.

While Preferences is of low priority (one could argue for leaving it out entirely), placing it at the bottom while all other global elements are at the top is problematic. So I chose top right to have one nice block with global controls.

The transport controls belong to the player, not the track, since playing on or Skip Forward will lead to the next track. This is a reason against putting them to the side of the track/album art. Note that my Skip buttons are in reverse of the usual order. That’s good regarding prioritization, but bad regarding breaking common patterns.

Placing track attributes to the right of the track/album art could look better, but the the menu should be much wider to avoid ellipsis or wrapping, then. Given how attention grabbing pictures can be, it should be considered to leave the art out, or to show it in something to a sub-menu.

There should be a clear differentiation between controls to interact with and static elements. One option would be a different background like above, another a different color like below.

This volume slider design allows to use the full width as active area for best control. There would be countless styling options, of course, this is just a rough one. I much prefer sliders that allow dragging on the entire area, instead of making you aim at some tiny button. Middle-click could be use to make the value jump to the pointer position.

Inkscape Fill and Stroke Panel

Inkscape’s Fill and Stroke panel is rather large and wider than the Layer and Align and Distribute panels I use often, causing the whole sidebar to take even more space away from the canvas area.

Screenshots of Inkscape 0.48pre1 (edited to remove rendering glitches on the color sliders):

So I wondered how this panel could be made more compact. Rough mockup:

The fill-rule toggle buttons in the top right of the original are mutually exclusive, so I reduced them to one icon for toggling here. Never once had a use for them. The legend for the color sliders doubles as combobox. For the Wheel mode, there would have to be either vertical text or an icon. Sliders with labels right on them save space, but the contrast has to handled with care, of course. For whatever reason, Inkscape uses two visual styles of comboxes, I used only one in the mockups.

Integrated gradient editing: