Bugs are Not Issues

This is the lighting talk I would have tried to fit into 5 minutes at UDS; but because I’ll be going to the Libre Graphics Meeting in Montreal instead; I thought it better to post the talk on my blog and get you all interested in the subject.

We’re after the release of Ubuntu 11.04. What to think about the many, many bugs we’ve fixed…

Bugs are breaks in the intended function of the software.

Bug reports are little packets of information for developers, they help point out where their software is broken.

Bug discussions are comments after the report which contain a dialogue between the developers trying to fix the issue and the people who can test it and provide more information.

So what do you do if you have a problem, but you’re not sure if it’s a bug? Perhaps the system was always intended to work like that?

What we need in these instance are Issue Reports, these are little packets of information which describe in user context what the issues the user is having. They can result into either support requests, blueprints or bug reports. they’re a proto-step to many divergent paths for getting stuff done.

How do we deal with issue reports in launchpad? At the moment we mash issue reports into bug reports with special tags. We also spray them into answers, askubuntu, irc, mailing-lists and brainstorm randomly based on what the reporter knows and what the reporter weighs up on the issue.

So how would I see a user centric addition fitting into our existing Launchpad ecosystem? Basically like this:

What are your thoughts? Do you like the ideas and do you think they would improve flow of relevant information?

General User Advice: Don’t Upgrade Without Help

A few of us in the business of supporting Ubuntu near here have reached the consensus for the new Ubuntu release for users to not attempt an upgrade of Ubuntu to 11.04 without someone very technically competent there to fix things should they go wrong.

This is what I will be advising to all the Ubuntu users I look after and for those I directly look after I will be skipping the release altogether until hardware stability can be more readily assessed.

The reason for the cautionary stance is because so far, testing on non-intel hardware looks grim. There are a lot of regressions which I hope will clear up after release, but you can never tell. There is an increase in lock-ups reported from people who’ve been testing the daily-builds, inoperable wifi and graphics card issues. All core issues which would break any user who isn’t very technically competent.

I’ll probably by using 11.04 myself (when I can get it working) as it is a very cool release with lots of interesting new changes to try out and awesome functionality. The developers have had a heroic battle to get all the changes in and keep everything mostly together; but I can’t recommend it for everybody just yet.

Your thoughts?

Registration Form, Gtk Forms

The GtkMe python lib provides a form window which allows me to construct a multi-page form with data validation. I’m pleased with the results I’ve committed today that allow a new user to register themselves within the login screen.

class RegisterWindow(TranslatableFormWindow):
"""Display a create user window"""
name = 'register'
primary = False
fields = [ 'postcode', 'age', 'gender', 'passphrase', 'computeruse' ]
def __init__(self, *args, **kwargs):
self.realname = kwargs.pop('real_name')
TranslatableFormWindow.__init__(self, *args, **kwargs)
intro = self.widget('label').get_label()
self.widget('label').set_label(intro % self.realname)
def cancel(self, widget, event=None):
if isinstance(widget, Gtk.Button) or (event and \
event.key.keyval == Gdk.KEY_Escape):
self.destroy()
def get_data(self):
"""Return all the user entered data"""
result = self.field_data()
result['name'] = self.realname
return result
def pre_exit(self):
register_service.create_user(self.get_data())

While I’m not finished debugging it all, the idea is to be able to make Gtk apps which have a wizard style layout with minimum effort. Each page has validation checks (if you want) and standard signals which you can stick into glade and have next, back, cancel and destroy handled for you.

This code controls a 5 page registration window as so:

Thoughts?

Narwhals, Art and April 2011

For some reason I just love calling this release Narwhal instead of ‘natty’, something about the pleasing sound of the word narwhal just makes you want to feed it yummy fish.

This month we have some great additions to the Ubuntu Artists gallery, all done using a Free Desktop (usually Ubuntu) and Free Software tools like Inkscape, Gimp and MyPaint:

Canonical fails to step on Community: Shock, Gasp

The blogger Anthony Papillion has penned an article about how Canonical has taken another step against the community. It’s all about how Canonical have shut down the sounder mailing list and irc channels because they’re off topic and wildly out of control.

I have many concerns relating to Canonical and it’s conduct, but this isn’t one of them.

The first point Anthony raises is easy to debunk. The Community Council was the body to shutter the group, not Canonical. This was a community decision to help make sure the community is healthy. You can check what people were involved and if they work for Canonical or not.

Secondly, It would be hard to argue that the people in Canonical and even Mark himself have complete disregard for the community. They spend a lot of money maintaining various parts of the community, with staff and resources and while sometimes the community team does come out with some amusingly one sided posts and ideas, over all they’re here to both help the community grow and improve education within.

Finally, there is this mistaken belief from far too many people that Ubuntu advocates (or even Canonical staff) would be sad if users started to leave Canonical’s distro for other Free Desktops like Debian or Fedora. This is nonsense. We do our best here to provide a pretty cool desktop and the code is on offer for any other desktop too. I’m pretty happy about users finding their way onto other Free Desktops and I’m bemused when upset users try and use their move to Fedora as some kind of stick to lay into Ubuntu.

Please, go to Fedora, go to Debian, have a crack at Gentoo. Just enjoy yourself and be free.

Thoughts?

Hot-Swapping Languages Batman!

One of the requirements for this community greeter (login screen for community center machines) is the ability to switch languages. Normally to switch a language you would unload the greeter and relaunch it with a LANG environment variable and your new language would fall into place from gettext.

But I wanted more. First, what languages are installed on the computer? For this I used python-pybabel and gettext, these two tools working together allow me to both get all the installed languages, limit them to just those I have translations for and show the translated name for the language (see screenshot below).

I decided that what I wanted to do was to hot-swap the text in the widgets. Since I’m using gtkme extensions, I could achieve this by creating a TranslatableWindow class. It’s job is simply to go through the window container at load time and note down all the translatable strings from labels and tooltips:

class TranslatableWindow(gtkme.Window):
“””Provides functions for translating the window on the fly”””
def __init__(self, *args, **kwargs):
Window.__init__(self, *args, **kwargs)
self.labels = []
self.tips = []
self.store_translations(self.window)

def store_translations(self, widget):
“””Go through all widgets and store the translatable elements”””
for child in widget.get_children():
if isinstance(child, Gtk.Container):
self.store_translations(child)
if isinstance(child, Gtk.Label):
self.labels.append( (child, child.get_label()) )
if child.get_has_tooltip():
self.tips.append( (child, child.get_tooltip_text()) )

def translate_to(self, lang):
“””Loop through everything and translate on the fly”””
lang = TEXTS[lang]
for (child, text) in self.labels:
child.set_label(lang.gettext(text))
for (child, text) in self.tips:
child.set_tooltip_markup(lang.gettext(text))
logging.debug(“Performed translation to %s” % lang)

Once I had translatable windows, I could tell my application class to go through each window and translate it if it was translatable:

def translate_to(self, lang):
“””Translate all windows to target language”””
for window in self._loaded.values():
if isinstance(window, TranslatableWindow):
logging.debug(“I18n window %s to %s” % (window.name, lang))
window.translate_to(lang)

Obviously because I’m not modifying the environment, when I log you on I need to update your language settings. I actually only show major language varieties and only ask about minor languages at registration time or when you change your setting:

If you’re even more curious, you can check out the code here: Launchpad Code or look at the translations here.

What to do about Moral Uncertainty

We human beings can be wrong; in fact we’re more likely to be wrong than right because we do not have the ability to know everything. The problems we have with this limited knowledge is that it leads us to think we’re mostly right almost all of the time. (go watch the video linked, it’s really good)

And as Kathryn explains in the video above, even when we’re wrong, it feels just like we are right until we have the realisation of being wrong and then the shame and emotional trauma begins… So what to do with morality? That most important of personal philosophies that helps us decide how to treat our fellow human beings. The very ether that bases interaction and decider of trust and reciprocation?

I attempt to accept the fallibility of the data I have available. I do my best with what I know so far and attempt in every way to be defensive about causing harm. This defensive stance requires that I trust a set of moral beliefs which I may not be able to thoroughly prove before I act on them.

For example I support Free Software. For me it’s a moral choice, to deny users ownership is morally bankrupt in my current world view. Of course I could be wrong; it may be that denying users ownership doesn’t actually harm them in any significant way. At which point my assumptions about the moral vanguard of Free Software would in and of itself be wrong and wasteful.

I have some data to guide me in making my decision though, it’s not all guesswork. Personally experiences have shaped how I see code, my socialist roots teach me that the working-class should politically resist further rents and propriety, whether from housing, tools or software. My views on liberty push me towards any system that breaks down large centralised organisation and authoritisation and towards distributism.

With those feelings I can make my conclusions, but of course these are not the kind of experiences that most people have to guide them. So what do I conclude? If you’ve watched the video you should see that assuming other people who come to different conclusions are ignorant, stupid or malevolent isn’t quite the best way to approach interaction with other human beings.

So talking more about Free and Open Source with most people really allows me to challenge my own conclusions as much s I try and educate and help other people further their understanding.

Your thoughts?

Indicator Icons, keep an eye out in natty.

On the Ubuntu development mailing list there has been a long thread about the desktop experience in natty concerning those little icons that used to appear in the top right corner called ‘indicator icons’.

As you probably know there has been a whole bunch of work going on for the past few cycles to convert all the gnome panel applets into indicators and Natty will be the first release that removes the functionality for both the applets and those icons. Some apps though need those icons to still work, and some of those are propritary apps. So there will be a white-list that allows those selected programs to continue to work. You will need to keep an eye out though for obscure apps which haven’t been either converted or white-listed as they may silently fail to work. In Martin Pool’s own words:

One consideration about the applet whitelist: at the moment the Unity Launcher invites you to install applcations like radiotray, whose only UI is an applet icon. (I think this is not the only example.) This is leading the user up a blind alley.

In this case there is upstream work to support appindicators, which is great, but it requires manual xml editing and it’s not in Natty yet.

It seems like these each need to be either
* fixed before release
* whitelisted
* not recommended if you’re running Unity

radiotray is not all that important of an application, but just having nothing happen is icky.

Do you use any applications which haven’t been converted to the new indicator system?

FOSS Trademarks are Probably OK

The protection that projects have from trademarks can often seem to be a weapon used to remove the freedom of hackers to change the source code and redistribute.

Examples include the Firefox trademark agreement, where Mozilla will not allow a re-distributor to call their package ‘Firefox’ unless all code has first gone upstream. This policy is used to make sure everybody get’s Mozilla’s Firefox and not someone else’s Firefox that they couldn’t control the quality for.

Then there is the example of Oracle’s “OpenOffice.org” trademark which, isn’t allowed to be used by anything other than the code from Oracle. And since the split of the Open Document Foundation has forced the creation of a new brand ‘LibreOffice’ so that the open source code can continue to be developed in the open.

The third example is the corporate control of brands. Canonical the company owns and controls the Ubuntu brand, whilst building a large community of volunteers to build that brand on their behalf. There are agreements in place which allow the Community Council some control over uses of the trademark in the community and the general balance between community interest and corporate control is struck. Some may agree and other vehemently oppose this arrangement, but in all it’s about strong control over the brand name.

Trademarks exist to ensure that the trust we have in the quality and source of our real world products is assured within a given area and within a given industry. These limitations allow for names to be reused in other industries and other areas where the products wouldn’t be confused anyway.

So in essence, if free software projects want to maintain the trust of their users and maintain the trust of their distribution, then we need to utilise trademarks or something like trademarks to do it. Whether we use product trademarks or organisational trademarks such as ‘Firefox by Debian’ vs ‘Firefox by Mozilla’ is up for some debate.

Overall, my feelings on the matter of trademark use in Free and Open Source projects is that they are probably, currently, a slight positive in effect. You may disagree, please comment if you do or even if you don’t.