usability


We see bad design around us all the time.  Often adequate design wins over great design .  In a ecosystem based on limited resources (time, money, component parts, etc.) at what point does a better design start giving diminishing returns?  Is this a good thing? – That problem has been solved we should move on to the next – or is it a bad thing?  – The solution to that problem causes adverse side effects but the cost of fixing it is too high.  In a world of limited resources it often takes a large catalyst or new markets to disrupt entrenched adequate design. I suspect there are good and bad sides to every decision here with some situations leaning further one way or the other.

That is a good leeway into my next thought about design in that decision making is a huge part of good design.  Decisions are hard.  Avoiding them has its cost.  My favourite is that collectively avoiding a decision makes it harder for other decisions to be made down the road.  You need to decide if it is worth the cost.

[read this post in: ar de es fr it ja ko pt ru zh-CN ]

Ok so it isn’t all JavaScripts fault and Mozilla’s ‘let’ keyword might have just solved some of this if everyone would just support it, but take a look at this bit of hack I had to write.

public_methods: ["insert_row", "append_row", "remove_row", "json_load"],
    public_signals: ["ready"],
    bind_api: function(api_list) {
        var self = this;
        for (var i in api_list) {
            var pm = api_list[i];
            var name = pm + ".mokshagrid";

            // proxy pattern (used for javascripts busted scoping rules)
            (function() {
                var proxied = self[pm];
                if (!proxied)
                    throw ('ERROR: binding api "' + pm + '" failed - method does not exist.'); 

                self.element.unbind(name).bind(name,
                    function() {
                        return proxied.apply(self, arguments);
                    });
            })();
        }
    },

It is a convenience method for binding public API in my jQuery.UI plugins which require the use of the 'trigger' method in order to call into a widget from external code. In other words jQuery.UI treats signals and public methods all as part of their event system. A bit confusing but not a huge deal. This would all be unnecessary if there was a better OO model on top of the prototype model. I'll admit the prototype model allows for some cool stuff but there is a reason everyone is jumping to write an OO model on top and why everyone is doing it differently.

[read this post in: ar de es fr it ja ko pt ru zh-CN ]

About dialogs with credits are important.  In the past when developers were developing for developers it was a way of getting acknowledgement for hard work put into an application.  Getting your name and e-mail in an about dialog was a badge of honor.  It also notified would be developers on who to talk to to get info on contribution or sending a patch.  This was when people were mostly in ‘the know’  about e-mail net etiquette.

As more and more people start using Linux on the desktop, many of who have different cultural norms shaping their net etiquette behaviour, we run into the issue of having to kindly tell people that it is immensely annoying to get spam from people seeking support.  Sometimes we are in a bad mood or our own style of writing can be interpreted as hostile when trying to point people to the proper support channels.  This could leave a first time user feeling like Linux isn’t worth the hassle of getting seemingly abusive replies when all they want is to get their computer working.  If we want Linux to be easy we need to be able to easily point users to resources where they can get help on using their system.  Asking them to innately understand cultural norms that we take for granted (I go to bugzilla for bugs, forums for distro help and mailinglists for development ideas) is asking for our userbase to consist of just Linux enthusiasts.

My simple suggestion.  Add a big old I need support button to the about dialog which pulls a URL or text blurb which is set by the distro vendor.  I like the idea of a URL where it can send users to some sort of wizard on the distros website (heck I would like a standard wizard module which sends upstream issues upstream and distro issues downstream but that is just wishful thinking).  Paid customers of a commercial distro would get their support site (heck an IT department could even set all their desktops to filter to an internal support request form) and the community distros can get casual users to their resources.

Note that Ximian back in the day used to do something similar where each app had a way to get to an irc support channel.  The idea was good but in reality I think the one time I tried it out there was only a bot in the channel. Taking that similar idea and instead pointing users to appropriate support sites would be the bee’s knees and save me from having an aneurysm when someone e-mails me asking for a network driver for such and such a device because they found my e-mail in the NetworkManager about box.

[read this post in: ar de es fr it ja ko pt ru zh-CN ]

I was driving up to work today and thinking about productivity and how I utterly fail when having to switch contexts between say, web programming to desktop programming to filling out status reports (which I avoid for this same reason) to working on finances for the board.  The problem isn’t that I can’t switch contexts fast and effectively.  When there are tools around, say a fairly nice IDE, I can easily jump from hacking on Python TurboGears controllers, to ToscaWidgets to plain old HTML, CSS and JavaScript.  If items are organized properly jumping from task to task, even in the middle of an ongoing task, is pretty much a non-issue.

 The Promise of the Desktop

Computers in general were created to simplify our lives but the Desktop was created to simplify the lives of office workers by taking the papers on a desk metaphor and adapting it to a digital world.  What we ended up with was the same (metaphoric) clutter that happens on any physical desktop, requiring us to manually reorganize our Desktop every once in awhile.  In this scenario we start out very productive but then that productivity starts to decline as the clutter builds up from every day use.

Good applications however have a way of focusing us on the task at hand.  To clean up in an application one can simply start from scratch.  After one task is done a fresh new slate awaits the next task.  Applications for the most part are fairly targeted at doing a specific task well, and if well designed presents the tools you will use for that task in a well organized fashion.  Mind you there are a lot of bad applications out there and the good ones could get much better but we can agree that they are in much better shape in terms of organization and focus then the Desktop.

Traditionally Desktops are places for launchers, various bits of information and a place to stick your most used data for easy access.  This is all well and good, and a tool for organizing oneself but the problem is the Desktop is global so that each task has to deal with the cruft from the last task.  There is no clean slate aside from clearing all of your tasks and with the more tasks a user has to deal with, productivity starts to decelerate at an exponential rate.

If the desktop wants to be smarter it will have to think and present itself as an application which organizes a user based on tasks.  Pagers take a first stab at this by allowing the user to organize open applications per workspace.  Whenever I have a different task – say communications (e-mail, irc, blogging) – I open the applications up on one workspace and then switch to another workspace for say development.  I still however get the same launcher and same files on the desktop, 99% of which I don’t use for this particular task.

I was pretty excited about the GNOME 3.0 mockup for workspaces in which the user had to specifically add a workspace by clicking a button.  By making workspace creation explicit instead of implicit it meant people who don’t need this feature don’t get confused when all of their windows disappeared, but also that the user has a chance at discovering why multiple workspaces are convenient.  The problem is the scope of the workspace changes were targeted at fixing the issue of confusion and not at making the user more organized.  It is a step in the right direction but in my opinion does not go far enough.

If the Desktop was an application to organize the tasks I needed to complete, a created workspace would allow me to first name it for easy reference, un-stick itself from modifying the global Desktop state and let me customize it for the task at hand.  I could then switch between tasks and have only the data I care about and the launcher for applications which would be used for the task at hand, present.  The Desktop would then allow me to delete a workspace when I will no longer be performing the task it was setup for and even save the workspace so it is no longer in my rotation of tasks but still available for recall in the future when I have a similar task come up (e.g. taxes require organization to do effectively but only consume at most a month of my thought each year).

But, but, but, you can do this with fast user switching today.  Well, yes and no.  Completely separate sessions would archive what I am looking for if it were fast and actually worked.  There is a laundry list of other features needed which fast user switching can’t provide:

  • Users would have to be able to be setup and removed on the fly with little fanfare (e.g. the add workspace button in the GNOME 3.0 mockups)
  • I still would want the ability to share a home directory and copy and paste data from one task to another
  • Switching to a “subuser” would need to be as easy and fast as ctrl-alt-arrowkeys are which means a spacial layout and no password dialog every time I switch

With the ability to setup a desktop focused on a task and tear it down or start from a clean slate without effecting other tasks, switching between the many hats one needs to wear in a typical day becomes much less cumbersome.  It also slows down the effects of productivity sapping cruft which will always build up over time.  True there is some overhead in setting up and managing each desktop but I tend to see this happen constantly.  As people switch their task priorities their desktop changes with it.

We use so many external and non-integrated tools to organize ourselves already, wouldn’t it be nice if task organization was built into the desktop and applications such as a todo list could key off the current task without any extra configuration?  Perhaps there is no good UI for this sessions in a session idea and it would in fact make life a lot harder for people.  Think about it anyway – if a Desktop is supposed to make the user more productive by giving them tools to organize their work, why not have that built in?  Why not make the Desktop and applications one big integrated application (not one big process mind you) for getting work done?

[read this post in: ar de es fr it ja ko pt ru zh-CN ]


Fedora Community Screencast – Background music edited from the song Conversion by Kourosh Dini off his Live At Bliss Gardens album (CC Some Rights Reserved)

Fedora Community, codename MyFedora, integrates the Fedora infrastructure into one interface focused on usability and streamlining user workflows.  This is a beta release with a production version to be released alongside Fedora 10.  While the first revisions are focused on Fedora Developers, the underlying Moksha framework, based on top of the Python WSGI TurboGears 2 platform, provides a base for writing self contained applications which can integrate to create one large application.  The applications seen on Fedora Community interact with the Fedora infrastructure to produce a single, unified view.  In the future applications can be written to interact with Transifex for translations, listen to upstream for project releases and even federate between infrastructures such as OLPC being able to have a view into their services along side the services they use in Fedora.

We are calling on Fedora members to test out the site and file bugs.  We plan to roll this out alongside Fedora 10 so pitch in and help us make a great release.

[read this post in: ar de es fr it ja ko pt ru zh-CN ]

Edward Hervey recently announced the 0.11.2 release of the PiTiVi video editor.  Even though it is rough around the edges it is feeling really nice and a couple of major features away from being baseline usable for every day simple video editing.  The features I would personally like to see are:

  • Splitting of audio and video channels
  • At least one more video channel which makes it easier to line up cuts
  • Being able to split a video into segments (with gnonlin this should be as easy as setting the time properties on the video timeline object, cloning the video timeline object to the end of the cloned object and adjusting the time properties on the clone)

The only other thing I would want is a compositor so adding titles and credits would be easy.  Things like having a text tool, transition effects, being able to undock controls for dual screen use and other nice but not needed features would simply be gravy after that, the majority of which could be implemented as plugins.

Thankfully Collabora Multimedia has started to put muscle behind the development of PiTiVi and hired Brandon Lewis who’s summer of code work significantly contributed to the latest release.  Edward, it seems, will also have a limited amount of time to work on PiTiVi.

We can’t forget  Sarath Lakshman who was my Fedora Summer of Code student.  Although he had done very little pygtk work (he had done some projects in pyQt previously) his eagerness to learn and willingness to take criticism had him make significant contributions in the form of the webcam and network capture code.  He also started on a D-Bus API for doing direct desktop recording in PiTiVi in conjunction with the Istanbul desktop recorder.  That did not get in this release because the API was deemed to be too PiTiVi specific.  This is basically blocking on me finding time to review the code and make comments on how the D-Bus API should look.

All in all I’m looking forward to what comes out of this renued interest in PiTiVi.

[read this post in: ar de es fr it ja ko pt ru zh-CN ]

Havoc,

I totally agree that embeddable languages is the way to go.  I’ve been using JavaScript heavily lately, along with the excellent Firebug for debugging (decent debuggers are something some very big languages are missing btw).  The biggest issue I have with JavaScript  is it’s lack of structure and horrendous scoping rules (this certainly doesn’t mean you are calling the containing object, especially when running a “method” from a callback).

What would really make JavaScript even more useful is the proposal for JavaScript 2. Unfortunately that presentation was made in 2006 but some, if not all of those features are part of the ECMA Script 4 proposal.  They even have a reference implementation up which is under a liberal license (I haven’t looked into it much but it links to a GPLv3 library).  As anything in committee, it is slow moving.  Hopefully we will see a finished spec sometime soon but I couldn’t find a timeline.

In the meantime there is an ECMAScript 4.0 to JavaScript converter call Mascara.  Unfortunately it is under the Creative Commons Attribution-Noncommercial-Share Alike 3.0 license which means the code can not be distributed on many distributions because of the Noncommercial clause.  It isn’t always clear what constitutes commercial and most distributions I know of want to allow the possibility of for pay distribution or use in a commercial product by 3rd parties.  It also isn’t clear if that license extends to the generated code.  Does anyone want to write a GPL version?

Truthfully, I have a dirty little secret – I like JavaScript with all of its warts and hackish workarounds.  I like it because I know non-programmers who can grok JavaScript but can’t wrap their heads around Python or C.  I attribute that more to the environment than the language itself because it allows for the instant gratification of hitting the reload button and seeing something happen.  But what I like even more is the idea of embeddable languages bringing that sort of development process to GNOME.  There are a few apps that already do this and though it isn’t as easy as it is with the web whenever I have jumped into one of those apps, such as experimenting with writing a quick Vi mode for gEdit, it is amazingly simple.

What would keep me working in those environments would be an embeddable debugger, object viewer and UI/extension point tree.  Whoever writes those components and makes it simple to add scripting to any GObject app will be a hero in the community.  Anyone willing to sign up?

[read this post in: ar de es fr it ja ko pt ru zh-CN ]

You know what I dislike about emotional arguments?  They are backed up by specious logic and anicdotal evidence which is often so out there it verges on being part of a fantasy land people build up to feel that they are right.  Lets examine the argument:

It seems that a “feature” that Microsoft implemented in the Windows 9.x days has appeared in Plymouth. Yes that’s right, that “feature” the I.T. world grew to hate, holding down the Ctrl or F8 keys to get into Windows Safe Mode (http://support.microsoft.com/kb/180902/en-us) has invaded Fedora. Ouch!


Now, if I take a step back, I can completely claim the following:

  • Plymouth takes away my freedom of choice (a freedom that has become a basic Human Right
  • Fedora has taken three steps back to gain one step in the name of ‘usability’

The funny thing is Mac has this feature also (hold c to boot from cdrom etc). Let’s repeat after me, “having to hold down one key after boot does not take away my freedom of choice”. And while we are at it, why do people fling around phrases like “freedom of choice” so cavalierly? It gets to the point where those once powerful words become watered down and an instantly marks ones argument as suspect. I know, let’s give more freedom of choice by bringing up the bios every time they boot. There is a lot of choices in there.

If there is an argument to be had here it is about continuity and discoverability. On the continuity side, if someone is used to seeing grub every time they boot it might be nice to keep that feature or something equivalent on upgrade but not on a fresh install. On discoverability of the feature, I would agree this is where the fustration comes from. However for the small number of (potential) users who actually like grub it would be wrong to add another option to the install. It would be much better as part of system-config-boot and if possible as an option in grub itself so that people who need to switch often can set it the first time and never have to hold down a key again. Hell, if I dual booted a lot I would like to have a key assigned to each OS I boot into but then again with virtualization being pretty good, there are better ways to run a separate OS.

Put it this way. Users may have kicked and screamed when Windows integrated DOS but Windows usage still grew. When MS decided not to show the text boot menu, again usage still grew. The way I see it is polish opened up the world of computing to more and more people.  By not polishing Linux and staying in a mindset that change is bad we will be stuck in the past while the rest of the world moves on. That is not to say every change is good but good reasoning went into this particular change and so far I haven’t seen any legitimate argument for not having it. Let’s repeat again, “having to hold down one key after boot does not take away my freedom of choice”.

[read this post in: ar de es fr it ja ko pt ru zh-CN ]

For my Fedora friends who don’t read Planet GNOME (you should):

[read this post in: ar de es fr it ja ko pt ru zh-CN ]

I’ve been using Eclipse for over a month now and in my last post about it I was none too kind.  After using it for a month I can say I am slightly more productive than my previous gvim setup.  This is mainly due to the excellent editor and layout manager.  As a development shell Eclipse works well though as a complete IDE it still has a long way to go to top other IDE’s I have used in the past (namely Borland’s professional and hobby suites).  Perhaps complete isn’t the right word because there is sure a lot of functionality here so I guess integrated might be a better word.  I also do miss my vi commands (it would be nice is esc-: would put me into extended command mode) but since 90% of my time is typing in code, having to move my mouse or retrain to use ctrl-s is not a big deal.

 Some other great things

  • Refactoring file names is awesome
  • Loading up a workspace where I left off is priceless for minimizing context switches
  • Visual references to what has changed, what is up to date in the git repo and what is untracked allows me to see where I am
  • Spell checking has caught a few mistakes in my variable names already though spell correction doesn’t seem to work or exist
  • Find in files is a great feature (think grep -r) but the UI almost ruins it
  • The python object browser is pretty sweet

Some not so great things

  • UI is still as cluttered as ever – I’ve only ever used the saved button in the toolbar and modules merge menus in peculiar places
  • Git repo tools are hard to find and do not always notice changes I make outside the tool, this feature could be useful beyond just informational views but right now it just scares me that it has the potential to really screw things up.  Point in case, moving files in the package explorer is way to easy via drag and drop.  There has been a number of times my hand slipped and moved a file by mistake.  I didn’t let the mistake hang around long enough to find out what would happen if I did a commit but I feel it may not get the move right in the repo making it really hard to undo later.  Whether this is a real or perceived issue is irrelevant.  The fact that the tool feels fragile is at issue.
  •  Tab control should be more like Firefox. Right now I get confused when I open too many tabs because it is not clear which ones get hidden.  I also have not figured out the hotkey for toggling between tabs (ctrl-tab would be nice working like alt-tab does with windows lists) and have to use my mouse for this.
  • The find dialog is just horrendous.  Most of the time I just want to do a quick find in the file I am looking at.  ctrl-f (and esc-/) should just pop up a panel on the bottom of the editor with a focused search box which does a live search of the document as you type in letters (try typing / in a firefox window when not focused on an input field to get the idea).  This makes sure there isn’t a dialog to obscure the items you are searching for.  A more advanced dialog could be another key combo or button click away.
  • When clicking on an HTML file most of the time I want to edit it.  Having it open in a viewer while perhaps a nice feature some of the times, gets annoying most of the time.  There isn’t even a way to click on the open document and tell it to switch to an edit view.  What is worse is if the file isn’t in my project, such as a file I am using as reference, there is no way from the menus to tell it not to open up in the viewer.  This make me have to open it in another external editor to view the source.

All in all it is not that bad and I will be sticking with it for the most part.  Vim and gVim are still my editors of choice for smaller projects and quick edits due to the amount of setup I had to go through but Eclipse is nice and hopefully will only get better.

[read this post in: ar de es fr it ja ko pt ru zh-CN ]

« Previous PageNext Page »