usability


The project I have been working on for a long time now has seen it’s first (beta) release. Meet Fedora Community, a consolidation of the various Fedora Infrastructure bits into one UI with a focus on usability. The unique thing about this site is that it doesn’t replace the other Fedora Infrastructure bits. It uses them as backends and mashes together the data into one view. For instance you no longer have to go to the bodhi update tool after checking on a build in koji. Instead you simply look at the build tool and if the package is able to be updated you will be presented with the option to do so. It will also point you to the correct log if an error happens in the build.

Right now it is geared towards Fedora packagers but in the future we hope to be adding a lot more functionality. Since the concept revolves around small applications running in a dashboard the possibilities are endless. Think live server status for sysadmins or up to date Fedora news for users. As always, because Fedora stands for Freedom and Community we will be emphasizing upstream collaboration which we owe a great debt for making all of Fedora possible, and Fedora Community’s code will always be licensed under AGPLv3 and compatible licenses.

To learn more you can grab the podcasts (in ogg vorbis format of course) or go to our project page.

Be a Super Packager

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

In my day to day usage of apps I often run into little annoyances. I know I should be filing bugs but I instead did the next best thing and created a rant usability page that lists the things I wish I could do in an application but couldn’t. The idea is to have a quick place to jot down notes and then review them later for possible bug filing. I think everyone should do something similar as it provides a stream of conscious map of how people use the desktop and the little things that they may not feel is worth filing but are most likely the key to making the Linux desktop experience more enjoyable. It also allows a user to get out their frustrations in their own forum and then come back and file a more useful bug without the static of emotions.

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

When people think about economics they usually just think in terms of money but economics is about understanding the flow of limited resources within systems in an effort to make those systems more efficient (or if you are cynical making those systems be more efficient for a specific group). Money is just a system we have used to quantify the worth of those resources to counteract the inefficiencies of bartering. Since money has the ability to be traded for almost any resource (including money itself) it holds a lot of power and has become the focus of most of economics.

However, in the Open Source community a majority of our transactions do not include money. At least not directly. In fact, a majority of our capital is payed in the measure of time and effort; both by the consumers and producers. Both are highly limited resources which in the Open Source world aren’t really given the thought they deserve.

First consumers often give the impression that they think producers have all the time and energy in the world but only a small portion of the community can be classified as producers, and even a smaller subset are full time producers. The only way to grow time and energy in an efficient way is to get more people to become producers. The power of Open Source is not that it is freely available but that anyone can become a producer. Providing that producers work together in some sense of a direction, Open Source growth should be exponential and eventually overtake proprietary development in terms of an efficient economic model and generation of capital. That is why the GPL and other reciprocal licenses are in the long term a better model as they prevent the “picking up and going home once the market expands” syndrome - though there are other forces that effectively prevent that for projects under other licenses. That is all another post though.

The other place where both time and effort are not given enough thought is in the use of the final product. In fact many projects fail to productize their efforts, choosing to leave that up to vendors. I cringe when I hear things like, Linux can do anything you want, you just have to configure XYZ. I don’t know anyone who truly wants something that can do everything. They want something that can do what they want without too much time and effort put into it. Every time we require our users to expend time and effort that is resources they are spending. If the cost is too high they will simply look elsewhere. Believe it or not, the worth of time and effort are readily quantifiable by looking how much people spend a year on unneeded conveniences. It is pretty high.

An example of time and energy wasted is logging into open services. Logins are inevitable but why in a world that prides itself on community are we beaten to the single signon party by the likes of MS Passport or Google checkout? Taking an example from Sound Juicer, the cd ripping app, I have a number of cds which I pick up at local venues because I heard something I liked when walking by. Sound Juicer gives you the option to upload track info to the MusicBrainz database. Unfortunately all this option does is bring me to a login/signup screen after I took the time to enter in all of the track data. Having to get yet another account for something I don’t really care about anymore because I already have the track info is just too much effort to spend so I end up just closing the browser window. Sound Juicer and MusicBrainz does get the consumer seal of approval for making it easy to grab track info when ripping my cds but they missed an opportunity to convert me into a producer which would bring even more value to their consumers. In fact the track grabbing functionality is so transparent - no configurations needed, no extra actions are required - that it is a quintessential example of how an app should be productized. Why adding to the DB isn’t more wiki like or federated with other open services, such as wikipedia, slashdot, lwn, distributions, etc. is somewhat of a mystery. It isn’t a mystery altogether though -

Time and effort on the producer side needs to grow and producers need to work closer together, building bridges instead of just looking to grow their own little island. The Open Source ecosystem, while priding itself on community has often neglected to build technology which works like a community. More cohesion between these islands allows them to grow and innovate on their own but still act as an integrated/efficient experience for the user, minimizing the time and effort it takes to use our software. By having an integrated experience all the way to the producer level we have more of a chance to convert consumers to producers thereby adding more time and effort capital to the entire ecosystem. Make it easier to both consume and produce in the Open Source ecosystem and traditional economics will take over to propel it to the mainstream as it has done in small subsets such as in the business server market.

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

After reading Jeremy’s blog on the book Don’t Make Me Think I started thinking. That’s part of my job - to think about a subset of problems that plague a subset of individuals so they don’t have to. I haven’t read the book yet but I plan to pick it up at some point. My conjecture is mostly in addressing the “boring makes people comfortable” part of Jeremy’s though I am in no way debating any of his conclusions. I’ve often argued that boring can be a good thing because “thing’s don’t become useful until they are no longer exciting”. Not being someone who views the world in black and white I have also argued the opposite (all be it pretty sarcastically). Both view points are valid as you really need to strike a balance between familiar and new in order to have a successful project. So as I was thinking about all of this I wanted to come up with some talking points for thinking about where that balance is.

What if everything was possible what would the world look like?

Here we define any possibility as being a world with no rules, no systems, no constraints. I know, it is pretty much a kōan because it “contains aspects that are inaccessible to rational understanding”. If rules, systems and constraints are not possible in a world where everything is possible how can everything be possible? But if rules, systems and constraints do exist in this hypothetical world, don’t they work to restrict possibilities to a predictable path thereby deliberately making some things impossible?

Thankfully we do live in a world governed by rules we call natural laws, which actually brought about the possibility of life as we know it. Technology is pretty much built on top of these rules and constraints. We harness these systems of rules to obtain predictable results within some threshold of error. That is exactly what projects are, putting together rules in new combinations to obtain a desired result. We can choose to use the same rules people have found in the past to obtain the desired results or we can test new combinations in an attempt to find a more efficient path. Both have their advantages and disadvantages so the choice must be made per project based on cost/benefit and risk analysis.

Scoping Constraints as a Creative Catalyst

I keep coming back to this PBS special on a New Hampshire photo artist who’s life’s work consisted of black and white photos of body parts sticking out of still water. The pictures of a hand and forearm, breaking the surface of a pond with the mirror reflection almost an exact duplicate were both simple and breathtaking. I can’t quite remember the guy’s name but the essence of something he said I can’t forget. What he basically said was by restricting his medium he was able to challenge himself to be creative. Not any black and white photo of water and a hand would be art worthy - he had to really figure out what path would work within the rules he had set for himself. He may have never found it if his rule set was too complex because in the expanded set of possibilities that comes with a more complex rule set comes more combinations that just won’t work. (BTW If anyone knows who I am referring to, let me know. I feel bad referring to him but I can’t remember his name)

Mutation as a Cure to Stagnation

That is not to say your rule set can’t be large, just that having constraints helps move a project along and helps focus on the final goal by having ready to find answers to those little roadblocks that projects run into. Also if the constraints are shared among projects it means those projects can easily share ideas and complement each other. However too ridged constraints can lead to stagnation. Sure users may feel comfortable with them now but will they find the constraints limiting a year from now. Will something that uses new constraints or slightly tweaks the current constraints be perceived as so much better that the cost of a brief period of unease is worth the switch? Will a new batch of users be available with no preconceived notions of how an outcome should be accomplished?

Progress can be defined as “gradual betterment”. In the natural world that often happens via mutations. The ones that don’t work out die out pretty quickly but the ones that can survive and flourish stick around. Mutations are a risky venture but without them there is no progress. For projects, gradual mutation, or in Jeremy’s words, iteration is a must. This doesn’t mean that innovation has to move at a snails pace. In fact projects can often jump start the iteration process by iterating over other projects, even bringing in the ideas of multiple projects under one umbrella. The threat comes when the goal itself is innovation and not solving an actual need; where the rules and constraints of a project are defined and redefined at every step.

Where’s the Balance?

The glib answer is, where it would make a project the most successful. Each project needs to figure out where that point is for them. Stick to the well worn path and risk obsolescence or blaze your own path and risk uselessness. Most projects stick to somewhere in between where the rewards are much more balanced with the risk.

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

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 ]

Next Page »