November 21, 2009

Awesome community of volunteers ... all types of volunteers

The GNOME Asia Summit has an awesome group of Vietnamese volunteers this year - over 50 of them! What distinguishes them from most free software events is that they are mostly women and mostly business students! They are also extremely enthusiastic, full of laughter and always eager to help or ask questions to learn more.

These students have been working hard to get the event ready, they show up at 7:30 every morning, they spend all day interpreting for the speakers and the foreign attendees and they are planning a party for speakers and volunteers this evening. They've been doing a great job of interpreting - especially given that they aren't familiar with free software and technical terms and given that most of us speakers are not used to working with interpreters and speak way too quickly and long. And they still have time to ask lots of questions, make the speakers feel welcome and to laugh a lot.

The GNOME community is a richer one, and GNOME Asia is a great event, because of them.

(As soon as Emily Chen or Andy Fitzsimmon's load their pictures of the volunteer meeting to Flickr, I'll add a picture of them.)

Deploying open source software is like hitting your head on a rock

On my first day of GNOME Asia, I was most impressed by the Vietnamese culture and people - I think it is one that meshes well with the open source community culture. One of those cultural traits is honesty and openness.

During the opening talks, the deputy director of the ICT Ho Chi Minh City government was very honest about the difficulties of switching to free and open source software. He talked about how he's spent the last five years trying to encourage more free software usage and has had a budget of $20 million. My favorite quote was "Trying to deploy open source software is like hitting your head on a rock. We hope the rock breaks soon." I sat next to him at lunch to learn more and hope to follow up further via email. During lunch I learned about the incubator program they have for startups and how those companies think it's safer to use .NET applications. However, after they are out of the incubator stage they have a hard time supporting their company off of support revenue.

Hopefully we can help them break the rock by showing them successful business models around free software and helping develop their pool of expertise by encouraging more students to learn and participate in free and open source software.

Raindrop & Jetpack

The other day I did a quick hack using Raindrop & Jetpack to get new mail notifications from Raindrop.  In total it took me less than an hour.  It’s no Joe Shaw hack, so I don’t expect to get in the paper for this but I figured I’d share anyway. :)

This Jetpack checks Raindrop to see if there are new messages and bubbles them up as notifications if there are.  Here’s the source code:

var messages = {}; 

function checkMail() {
 var api="http://localhost:5984/raindrop/_api/inflow/conversations/home?limit=10";
 jQuery.getJSON(api,
               function(data, textStatus){
                 jQuery.each(data, function(i,item){
                   if (item.unread) {
                     if (!messages[item.id] || messages[item.id] != item.messages.length) {
                       var n={title: item.subject,
                              body : item.messages[0].schemas["rd.msg.body"]["body_preview"],
                              icon : 'http://localhost:5984/raindrop/inflow/i/logo.png'};
                       jetpack.notifications.show(n);
                     }
                     messages[item.id] = item.messages.length;
                   }
               });
 });
}
setInterval(checkMail, 10000);

To try this out you’ll need Raindrop installed and running and Jetpack installed in Firefox.

Go to about:jetpack and copy the above code into the Develop tab, then click the try out this code link just below the Bespin editor.

If you don’t want to do all that you can just watch the video below (no sound, so you might want to play some music)

<object height="304px" width="650px"><param name="allowfullscreen" value="true"><param name="allowscriptaccess" value="always"><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=7733464&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1"><embed allowfullscreen="true" allowscriptaccess="always" height="304px" src="http://vimeo.com/moogaloop.swf?clip_id=7733464&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" width="650px"></embed></object>
View on Vimeo.

Video Hackfest day 2

Carl stayed true to his awesomeness from yesterday: He updated the hackfest notes with the things we did today. In particular, it includes “hacking ideas” that we’d like to work on.

I’ve spent a lot of time discussing the ideas of my gst-plugins-cairo design with all people. And I have to say I’m happy to say that the general approach has seen excitement from all sides and there doesn’t seem to be any big issues with it. THe best way to summarize it is probably an event from today: Edward ran a gst-launch pipeline as a benchmark for gst-plugins-cairo and it completed in 0.2 seconds.

November 20, 2009

Marketing Hackfest

Last week, eight of us converged on Chicago for a Gnome marketing hackfest. Thanks to Google and Novell for thier generous sponsorship. There are other blogs posts about the event, including posts from Brian Cameron, Paul Cutler, and two posts from Jason “The Chronicler” Clinton.

Unfortunately, I had to leave early on the second day, which seems to be when the dust settled and some real work got done. But we had some great discussions on day one. Others have recapped most of our discussions well, but one thing they haven’t talked about is our discussions about mentoring.

I’ve spent the last eight years trying to build and foster a community of documentation writers, most of whom are not professionals. So I’m particularly interested in how the marketing team can mentor new team members who, like me, don’t really know anything about marketing.

My one contribution was a lesson I’ve learned over the years: Give new contributors achievable and concrete tasks. If you tell them to pick something and do it, they usually won’t.

Stormy, Denise, and I continued this conversation at the bar on Tuesday night. One of my big questions was “What do people need to learn?” If you have no background on something, it might not just be the answers you’re lacking; you might not even know what questions to ask. Not only do I not know things about marketing. I don’t know what I don’t know about marketing.

Stormy and Denise rattled a dozen things off, most of which I’ve already forgotten. (There’s a reason I carry a notebook everywhere. I don’t know why I didn’t take it to the bar.)

So how do we pass knowledge like this along? Sure, we could braindump into a wiki. And somebody who’s skilled at content organization could turn it from a braindump into something useful. But it’s actually really hard to write down everything you know about a subject. The good nuggets of wisdom are things you don’t think to mention until the right situation arises. Real life experience matters.

I’m curious what others have found helpful in bringing new contributors up to speed. This isn’t marketing-specific. It happens in any community where many members aren’t professionally trained in what they’re doing. (And I realize I’m asking about those very good nuggets of wisdom about community mentoring that you don’t think to mention.)

Sponsored by the Gnome Foundation

Want to learn design skills? Want to help Fedora? Fedora Interaction Design Hackfest, Tuesday 24 Nov


Hopefully my post title has captured your attention. :) I would like to let you know about a project starting up right now that is a great opportunity for you to:

  1. Learn about how interaction design is done.
  2. Pick up some interaction design and user research skills.
  3. Get involved in an open design project.
  4. Help make Fedora better!

So the Fedora Board has started an initiative to create Fedora user profiles and personas to help inform decisions about Fedora policy and design in the future.

Okay Mo, so first of all, what is a persona?

From Wikipedia:

Personas are fictional characters created to represent the different user types within a targeted demographic that might use a site or product. Personas are useful in considering the goals, desires, and limitations of the users in order to help to guide decisions about a product, such as features, interactions, and visual design. Personas are most often used as part of a user-centered design process for designing software and are also considered a part of interaction design (IxD), have been used in industrial design and more recently for online marketing purposes.

A lot of discussion about personas is available on Cooper’s blog and is a good read for getting up to speed on what they are and how they work.

Okay, uh, so how are personas going to help us make Fedora policy and design decisions?

Well, for example, you may recall the great panda panda-monium from early www.fedoraproject.org redesign mockups, in which about half of folks giving feedback loved the panda (“Please kill to keep that damn Panda, mairin. The thing is too cute and seems to look like a great little mascot.”), and the other half felt the panda was an insult to Fedora users (“In general i like the layouts…. for 6 year old kids. If this is the best you can come up with you might as well base it on this: http://ostiaunlobby.files.wordpress.com/2008/07/teletubbies-group2.jpg”)

WHY DONT YOU LOVE ME???

Of course, everyone is entitled to their own opinion of the pandas. Those opinons may or may not have any bearing on how our target users might receive them, though. If we have a set of Fedora personas defined, we can talk about how each of the personas, designed to be representative of our target audience would feel about pandas. Discussing whether or not the Fedora panda is a good choice for our *target audience* or not will help us make decisions based on the target audience we’ve agreed upon for Fedora rather than base it on knee-jerk / personal / anecdotal reactions that merely represent the personal opinons of the folks who happened to be around at the time to give their feedback.

There’s more discussion of potential benefits of personas to Fedora in a post I made yesterday to the ‘User Profiles’ thread on fedora-advisory-board list, so please check it out for more info and please feel free to dive into the discussion with any questions / commentary / feedback you have.

Well Mo, this sounds good. But where do we get personas from?

We’ll build them. Well, I think there’s a lot of different methods to going about constructing personas, but to be good they need to be backed by user research data. User research data can take many forms.

The approach I’d like to propose for Fedora persona development is based on the user research process advocated for in Observing the User Experience: A Practitioner’s Guide to User Research by Mike Kuniavsky. A high-level / action-oriented summary of the approach is as follows:

  1. Define the product and product goals. Done.
  2. Decide on an audience to target with the product that will help meet the product goals. Done.
  3. Conduct interviews of product stakeholders in order to determine high-level research questions to consider exploring with members of the target audience. Proposal for doing this.
  4. Draw up a list of specific research questions to answer to start conducting user research on the intended target audience. These are specific rather than high-level questions. For example:
    • “Does the target audience care about software freedom or not?” could be a Fedora Board stakeholder high-level research question.
    • Specific questions that could be explored during research, “Does that target audience know what free software is?” “Does the target audience already use free software? If so, which software?”
  5. Prioritize the specific research questions, pick a cut-off point for how many to explore, and determine research methods for each.
  6. Draw up a research schedule and assign specific research tasks to volunteers.
  7. Do the research! And check in with volunteers to make sure they’ve not run into any issues and help them resolve them.
  8. Hold a data analysis session. Cluster the data from the research into 3-8 groupings from which to build the personas on.
  9. Brainstorm and document the personas!

So…. How can I help?

SO GLAD YOU ASKED!!!! :) I am blocking out Tuesday, November 24th to be an interaction design hackfest. I want to run it from 3 pm – 6 pm EDT (8 PM – 11 PM UTC) on #fedora-design on irc.freenode.net. I’d like us to start working on work item #3, conducting interviews of product stakeholders, in order to get moving on the persona-building process. Depending on how far we get we may be able to dip into #4 and #5.

What concrete actions will helping involve?

  • Interviewing Fedora stakeholders via email or IRC in order to answer the stakeholder interview questions.
  • Documenting the Fedora stakeholder interviews by organizing the interview results on a Fedora wiki page.
  • Reviewing the interview answers and brainstorming potential research questions.
  • Per research question, brainstorming ways we can gather data to help answer the question. (Could we answer that question by running a questionnaire on Planet Fedora? Could we answer it by running some usability tests at FUDcon Toronto next month? Could we answer it by looking at fedoraproject.org website logs?)

You do not have to be an artist to help with design! So show up next Tuesday and find out how you can help. :)

  • Date: Tuesday 24 November 2009
  • Time: 3-6 PM EDT; 8-11 PM UTC
  • Place: #fedora-design on irc.freenode.net
  • Host: mizmo (me!)
  • Agenda: Fedora User Research Plan

p.s. for the panda-haters, how about this mascot:
MEET YOUR NEW GOD

Posted in Uncategorized

How do I deal with information? — A non-tech Zeitgeist background

Ketil W Aanson wrote an AWESOME post about use cases of Zeitgeist from a non techie point of view

PLEASE READ

I would just like to say PiTiVi rocks

Having followed its development for a long time now and used other video editing software I can say that PiTiVi is an awesome app that is only going to get better. Sure it isn’t perfect yet but that is software development for you. It takes time to get all the features in and make them solid.

One of the great parts of Open Source Software is you get to see it develop and grow. It is also one of the biggest misunderstood aspects of such software. In a world where people are gripped by the next best thing – a collective psychosis of product ADD – where patience is no longer a virtue but an outdated notion of an age long gone, evolution is about as exciting as watching paint dry. Just a reminder that even products that seem to just appear overnight, in reality had long periods of closed development to receive polish (and even then they aren’t always great but for some reason people tend to forgive shortcomings in something they bought as opposed to something they got for free).

Knowing the drive behind the developers working on PiTiVi I am confident that in time PiTiVi will become one of the prime examples of FOSS development. For now it is useful enough for some my basic editing needs and every time I try a new version it just gets that much more useful. Keep up the hard work!!!

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

Why SHMConfig is off by default

Bastien mentioned the Chromium OS xorg.conf file, which includes an irritating wart - namely, Option "SHMConfig" "on". This tells the Synaptics touchpad driver to export its configuration data to a shared memory region which is accessible to any user on the system. The reason for this is that in the past, there was no good way for configuration information to be passed to input drivers through the X server at runtime. This got fixed with the advent of X input properties, and synaptics can now be configured sensibly over the X protocol.

But why was it off by default? Because, as I said, the configuration data is exported to a shared memory region which is accessible to any user on the system. And while it contains a bunch of information that's not terribly interesting (an attacker being able to disable my touchpad or turn on two finger emulation may be a DoS of sorts, but...), it also contains some values that are used to scale the input coordinates. Which means that anyone with access to the SHM region can effectively take control of your mouse. The current position is exported too, so they can also track all of your mouse input.

Now, this isn't stunningly bad. The attacker can only do this while you're touching the pad. You'll see everything that happens as a result. There's no way to fake keyboard input. They need to be running code as another user on the system - if they're running as the logged in user then they can already do all of this. And for a device as single-user as Google seem to be looking at, it's obviously not a concern at all.

But there's still plenty of places on the web suggesting that you enable SHMConfig, and various distributions that ship with it turned on (Ubuntu on the Dell mini used to, but got turned off after I contacted them about it). It's absolutely fine to do this as long as you're aware of the security implications of it, but otherwise please use X input properties instead.

Answering questions…

(This was initially posted as a reply to a blogpost regarding PiTiVi being proposed as a default application in the upcoming Ubuntu Lucid. That comment was removed for an unknown reason, so I thought it best to put it here, and it would also be interesting for other people)

What a depressing post (in some aspects). I’ll answer the various questions/comments/rants all the same.

PiTiVi doesn’t support DV/mpeg4/whatever-format

Where did you get that idea from ? PiTiVi doesn’t come shipped with codecs, it relies on GStreamer to provide the needed plugins/decoders/etc… If you load a DV file in pitivi and you don’t have the plugins, the application missing-plugin system should appear proposing you to download the needed plugin.

Collabora pushed PiTiVi aggresively into ubuntu

That’s 100% totally wrong. I personally had chats with Jono and Rick Spencer about having PiTiVi shipped as a default application, and canonical were interested by the idea of having a video editor shipped by default. All of this was far from being enforced, or us (Collabora) going out of our way to have PiTiVi shipped by default. And nothing’s engraved in stone at this point. If we (pitivi development team) get feedback/help on improving what’s bothering people by the Lucid release date and people deem it good enough to be shipped by default, great ! If we get no help… well.. PiTiVi won’t die and people will still be able to use it via PPAs.

Why ship PiTiVi as default app and not another video editor ?

I’d say the main reason is that all the dependencies (except for goocanvas, which is pretty slim) are already shipped by default : GStreamer, GTK, python. All the other editors would require bringing in more dependencies. I’ll let Canonical/Ubuntu confirm that or not.

lack of features …

On this part we have always taken the stand of making sure features are as solid as possible before adding new features. In terms of video editing, that means you do need to have input/output format support rock solid, trimming/cutting rock solid. Check out how many clips/movies/documentaries/… out there and see how much of them make use of video effects, for how long, and how many don’t.
The two features we find critically missing are : video transitions and overlaying. I just merged yesterday the videomixing branch yesterday to master which enables setting transparency on every video streams (like Sony Vegas does). It still has some issues, but having it in master will force/speedup the bugfixing process.
Video effects are not a top-priority. Getting those… without being able to do the features above are pointless. We won’t diverge from that point of view. Helping us get the above rock solid as fast as possible … will mean you will see video effects faster.

To people throwing generic rants about <video-editor-name> sucking

Write a video editor (or any non-trivial multimedia applicatoin), then come back and rant about other people’s application sucking. Then we might have a proper discussion. In the meantime… you’re not improving the situation.

PiTiVi is dead or no longer maintained

The 3 main developers (who also happen to be hired by Collabora and that includes myself) have been working on some other company work in the meantime. Keeping Collabora hiring those 3 developers, means ensuring they have time to be paid to work on it also. (I’d personnaly love to have people working 100% of the time on PiTiVi … but you need to take into account the reality of running a business).
We’re progressively getting more company time for PiTiVi (Brandon has been back on it full time for the past frew weeks for example). It’s far from being abandoned/dead, just that we do it at our own pace. It’s freely available (LGPL, no copryight attributions required) and will always stay that way. We always welcome contributions and are pretty fast to review/commit patches.

Drop in on #pitivi on irc.freenode.net or send us a mail on pitivi-pitivi@lists.sourceforget.net and come and give your feedback, what can be improved, what’s good and should be kept and … who knows … be part of the pitivi team :)

Edward Hervey: PiTiVi creator/maintainer, GStreamer hacker, Collabora Multimedia co-director

Trying to use gnuplot in massif_grapher

I’ve been trying to use gnuplot instead of Gd::Chart in my massif_grapher script, mostly just so it can generate zoomable postscript or SVG output.

I first tried using the Chart::Gnuplot perl API, but after a very helpful email conversation with its maintainer Ka-Wai Mak, we found that it cannot yet be used to create gnuplot’s “rowstacked” histograms. So now my gnuplot branch of massif_brancher uses gnuplot directly. However, there are still some problems that I can’t solve easily:

  • The x axis has a label for each item, which makes it cluttered, with overlapping text. I think this cannot be changed while using xtics(1) in the “using” statement, but that’s voodoo to me and I can’t find some version of the using statement that doesn’t use xtics.
  • When using massif_grapher’s –detailed option, for instance with the example .out file, there are 60 stacked columns of data. The legend (key) is then so big that it pushes the graph off the page. I’ve asked about this on the gnuplot mailing list, but I am inpatient.

Actually, I wish I could do these stacked (or “cumulative” in Gd::Chart terms) graphs for regular line graphs, instead of just as items on a histogram, in case the snapshot times are not at regular intervals.

Sticky tape

Google might know how to write a web browser, but writing an OS certainly isn't their forte.

You might have seen Matthew's mention of the acpid hacks, some of the other sources are just as funny to read.

The Fedora 12 Installing Saga

And so, long story short, we decided to revert the change for F12.

Part of being an open source maintainer (and also my job at Red Hat) is to ignore trolls, but some of the messages I was getting yesterday were just personal attacks and abuse. That’s not cricket at all.

One-click install for Banshee Telepathy Sharing Extension 0.1.1

Over the course of the summer, you may have read Neil Loknath's various blog posts about his Summer of Code project that lets you share your Banshee music library with your Telepathy contacts.



Well, it's pretty cool stuff, and now that he's started making releases, it's a great opportunity for people to try it out and give him feedback.

If you're using openSUSE 11.2, you can get version 0.1.1 of his extension through this handy one-click install link.

Note that my little repository includes upgrades to telepathy-gabble, telepathy-mission-control, and gnutls. You'll need to log out/in or kill all telepathy/empathy/mission-control processes before the changes take affect.

If you're like me and prefer to build Banshee from source and Neil's extension from source but don't want to reinstall your entire Telepathy stack from source, just install telepathy-gabble and telepathy-mission-control from my repository (this will cause a few gnutls packages to upgrade as well), and you'll be good to go.



Let me know if you have any issues, but let's consider these packages officially unsupported, could break your Empathy, impregnate your cat, etc.

the next firefox business model

If you want to use our plugin APIs you have to sign an agreement that says anytime a user crashes because of your software, you pay us a nickel.  We wouldn’t have funding problems for a while, but boy would Adobe’s shareholders be pissed.

eMusic In Banshee

I have been an eMusic subscriber for quite a while, before DRM-free music was cool. It’s always been a bit clunky when purchasing music, you download some weird XML file that is supposed to be handled by their download manager which is a full-blown app. I always ended up downloading the file to my desktop, running a Python script called dromanova.py which would download the MP3s to ~/media, and then import them manually into Banshee.

No more!

in case you missed it

It turns out that PlanetPlanet starts to ignore you if you make four blog posts in quick succession, so in case you missed it yesterday:

Video Hackfest day 1

The Video hackfest is on!
I originally wanted to summarize the happenings of the day, but Carl took notes: Go read them. I just want to add that I’m very happy with how it’s turning out: Lots of discussions happening all around, the weather is great and the hostel is awesome. Off to bed so I don’t miss any discussions tomorrow…

November 19, 2009

Few Surprised at New Evidence of Staging Driver Suckage

wdyt_photo3.articleThomas Johnson (High School Janitor)

Oh yeah, I’ve seen that code.  It’s worse than what I clean up in the bathrooms after Prom or Homecoming.  The kids get high and drunk and party too hard and puke all over the place.  I deal with enough vomit from 7:30 to 6; I wouldn’t touch the staging drivers with a mop twice as long as the one I have at work.

Just Say No

Thomas just found out that none of the “staging” wifi drivers will work with hidden access points because they don’t set the IW_SCAN_CAPA_ESSID capability bit.  Furthermore, the most popular “staging” drivers (for the Ralink hardware used in many netbooks) don’t even have specific SSID scanning capability at all.

Why do you care?  Hidden APs don’t broadcast their network ID, which misinformed people think is more secure (hint: it’s not).  Before a driver can associate to the network, it needs to discover available APs and capabilities, which requires a probe-request, which exposes the network ID to everyone anyway.  But that requires driver support which none of the staging drivers have.

I fixed this issue upstream two years ago by adding IW_SCAN_CAPA_ESSID to Wireless Extensions.  Of course the staging WiFi drivers that many distros enable never got fixed because the vendor it came from didn’t bother to work with the community in the first place.  And people wonder why they don’t work.

Broadly speaking, staging WiFi drivers come in two flavors: (a) old dried gum from under the cafeteria table (drivers with a future), and (b) fresh vomit from the hung-over kid in your math class (those without a future).

The drivers with a future (winbond, rtl81xx) are or will based on the kernel-standard mac80211 wireless stack, which implements the 802.11 WiFi specification in the kernel.  Since they use the standard mac80211 stack, they get all these nice features like probe-scanning and the correct capability bits for free.  All you have to do is work on supporting the hardware itself.

The drivers without a future (rt2860, rt2870, rt3070, rt3090, wlan-ng, vt665x) are based on forks of the ancient ieee80211 stack that Intel’s ipw2×00 drivers forked from the hostap driver.  Each of these drivers includes their own copy of the core ieee80211 stack forked at different times and with different hacks.  When a bug shows up, that means 4x the work, and 4x the chance for the fix to slip through the cracks.  Which is why these drivers have no future.  They are a maintenance nightmare.  Besides, they have crap like this:

pAdapter->StaCfg.bScanReqIsFromWebUI = TRUE;

It just blows my mind why people think staging wifi drivers are a great idea.  There’s a reason staging drivers set the TAINT_CRAP flag in your kernel; because that’s what they literally are.

So what’s the right thing to do?

There’s one huge reason why dead-end staging drivers are a bad idea: there aren’t enough developers.  So do you spend that effort  on maintaining unmaintainable shit code?  Or do you spend it on fixing the code that has a future?  Most of the time you can’t do both.

If you choose to maintain the staging drivers, then things become worse over time since the staging code is simply less tested and less maintainable.   So you continue to drop hacks and fixes onto an ever-growing steaming pile of manure.  Nobody cares much about the driver (because it doesn’t use the standard kernel interfaces and thus doesn’t have a future), so your staging driver never benefits from all the great feature work and bug fixing that the mac80211 and wireless developers are doing.

But if you choose to help fix the upstream drivers that do use mac80211 (like rt2×00), and thus have a future, maybe for a few months some users won’t have great wireless.  But they didn’t before either.  But then 6 months later, all the users get great wireless with features like power saving, background scanning, WiFi Direct, Bluetooth 3, access-point mode, etc.  Those things will never be done to the staging drivers, because those drivers are a dead-end maintenance nightmare, because their code is awful, and because they don’t use the standard kernel wireless stack.

I know I’d invest the effort where it helps users the most, even if it means a few more months of subpar driver support while the official upstream drivers get fixed and the staging drivers go untouched.  That’s how things actually get better when you can’t fix everything at once.

Civilised Discussion

Shocking: http://i.imgur.com/aWbgi.jpg

2009-11-19: Thursday.

  • An ineffectual day flailing at too many varied tasks. Managed to do a little real hacking - which was fun - a one line change; hmm.
  • Got stuck into reading the Chromium code, sad to see an Ubuntu base, but good to see lots of interesting technologies in there: atk, pango, gtk+, clutter, gnome bits - even orbit2. It actually looks like something real, and I'm eager to see what efficiency wins and new tricks those Googlers manage to generate for the common good.

Sigh.

If only eeepc-laptop sent standard keycodes, or something.

Oh, wait.

Writing a Linux distribution is hard. There's a huge range of interconnected dependencies. It takes a long time to learn how everything fits together, and fixing things properly rather than adding device-specific hacks often requires rewriting a lot of code. I'm sure Google will figure it out in time[1], and I'm also sure that the majority of their work is going into their UI rather than the underlying infrastructure. But even so, don't expect that you'll be able install Chromium OS on a random piece of hardware and have it work as well as, say, Fedora in the near future.

[1] Based on that script, I'd say they're about equal to Xandros at the moment

Web Developers Wanted

We’re looking for web developers to help out with Zeitgeist’s website. If you have some experience with web development (of any kind) and don’t mind volunteering some time then let me know.

Thanks.

Who the fuck is this guy?!

While you guys are all wondering who he is, we in Belgium are wondering who’s going to replace Herman Van Rompuy as our prime minister.

He’s the only prime minister who managed to give Belgium non-chaotic federal politics, for a few months.

I fear that Belgium will now plunge into a new political crisis. Not because the former prime-minister, Yves Leterme, is a bad one, but because the Walloons simply don’t want him. We know they’ll do everything in their power to discredit Yves. Especially their media will. Le Soir already publicly said that they’ll “veto” Yves Leterme as prime minister. As if a newspaper elects ministers. Arrogance.

Anyway.

If the price for delivering the first president of Europe is that we must pay with a new political crisis, I guess that we are so used to politic crisis that it’s okay. We’ll survive. You guys can have him.

He’s quite intelligent. He’s not a media guy. We don’t know more about him ourselves. Use wikipedia.

The real bad thing about Herman is that in the past he let religion influence his politics. He was for example against abortion laws. And he is against Turkey joining the union because of religious differences.

However. For the people from the United Kingdom: fuck your conservative tabloid magazines. To the idiot editors of those tabloids: discrediting Van Rompuy was easy, still you guys screwed up with retarded articles about Belgium.

ps. I don’t care that you don’t want politics on planet.gnome. It pulls from my blog, so ask the administrators of planet.gnome to pick the right categories. I say this because I know that people will otherwise comment about it. I want them to know that I don’t care.

Btrfs snapshots proposal

I've written up a feature proposal on how we can use Btrfs snapshots to enable system rollbacks in Fedora 13, by gluing together the existing kernel code to do Btrfs snapshots, a UI for performing rollbacks, and a yum plugin to make snapshots automatically before each yum transaction. Lots of good comments so far, and LWN has written an article about it (subscribers only, for the moment).

banshee-telepathy-extension 0.1.1

A day and a few hours later and I'm already releasing 0.1.1. Highlights are the following:
  • Fix a major bug where the CPU gets maxed out during download of a contact's library
  • Prevent 'Too many open files' exception during streaming
  • Logging more messages related to streaming
  • Fix 'make distcheck' (Fix courtesy of Bertrand Lorentz)
  • README updated to reflect a necessary requirement of telepathy-mission-control5 >= 5.3.1
  • A few other minor fixes
So, if you're looking to try this out, I suggest you download this version.

Testing performed yesterday afternoon and evening confirm that transfer speeds over tubes are highly volatile. Sometimes, it can take up to a few minutes just to offer and accept a tube. And, other times it seems instant. But, more often than not, it's sluggish. If you're using computers on the same network, however, the speeds should be really quick.

Also worth mentioning, Sandy Armstrong put together some packages to help users of openSUSE 11.2 get the dependencies installed.

OpenSUSE 11.2

I decided to give a new OpenSUSE 11.2 a spin. In hindsight, that was probably a mistake.

The new version installs a desktop-optimized kernel. The idea sounds good, but for me it does not work: named consistently causes an Oops or a kernel panic. (I haven’t otherwise had a kernel panic for many, many years!) I reverted to the so-called “default” kernel and the system seems to suffer only a loss of my confidence.

Somewhat more worrisome is that the system seems to have no bladder^Wfan control. The fan remains off until the temperature reaches crazy levels. Then the fan turns on full-blast and remains on until shutdown. In the same department, the backlight controls do not work. The tricks that worked in 11.1 no longer do. I am going to try a bios upgrade and see if things improve.

Ideas, anyone? This is a Toshiba Satellite L305-S5944. Drop me a line at mwelinder at gmail.

Kinda like Fedora

I admit it, I'm a little jealous of the Fedora feature of being able to install signed packages without a password prompt. I set out to get close on Ubuntu. The way that you edit the PolicyKit practices towards package install is to edit the file /usr/share/polkit-1/actions/. If you look at the action for "Install packages" you can change <allow_active>auth_admin_keep</allow_active> to <allow_active>yes</allow_active>. Then software center works as expected.

If you are in Bavaria, sign up for the smoking ban vote!

Starting 01/01/2008, Bavaria had introduced a quite hard smoking ban, which also included bars and restaurants. It however contained a backdoor by excluding non-public locations, which led to the creation of 'smoker clubs' where you had to become a member to be admitted. At some point, most clubs were of this kind.

In August 2009, however, the law was changed to exclude beer tents (Oktoberfest ...) and small bars. Many people belive that this was to get votes on the elections in september 2009 (which ended up in a minus of 6-7% compared to the previous election and a historical low for the biggest party).

This caused several organizations to call for a public vote on restoring the smoking ban to the 2008 state (without the 'smokers club' backdoor). In order to force a public vote on a law (without the governments support!), we need 10% of the voters to register as supporters for the vote. You have to register at your registered home town. For Bavaria, this means about 940.000 supporters.

If you are registered voter in Bavaria, please drop by your municipality and sign up. You need an ID and 5 Minutes, that's all. 940.000 supporters is an incredible lot of people to get to the offices, take along your friends!

When we get enough supporters, the Bavarian government has two options: accepting the changes as proposed (and thus making the initative obsolete), or conducting a public vote on it, offering an alternative (e.g. the current law, no change) and have the voters decide (which is quite expensive, so if many many people sign up, they might save that money and just pass the proposed change themselves).

For more information (german only), check the Nichtraucherschutz Bayern Website, including the sign up office locations.

P.S. In other European countries, the introduction of a strong smoking ban has led to a 10-15% decrease in heart attacks (20% for non-smokers). The german constitutional court has also already ruled that the protection of non-smokers and employees from passive smoke weights stronger than the individual's freedom to smoke in enclosed spaces.

LDTP in jhbuild: A Cry For Help

Glom has lots of code, lots of functionality and lots of UI. It’s easy to break things when making changes to the code. So Armin set up some initial Glom LDTP python scripts to check for regressions. These scripts try to actually use the UI and then check that the application worked as expected.

I’m sure I had that working once, but it doesn’t work for me now. I wish it did because it would be incredibly useful to me. Note that I build Glom in jhbuild, so I need LDTP to work there. To simplify things, I build LDTP in jhbuild too. I’m trying this on Ubuntu Jaunty and Ubuntu Karmic. Armin has a similar environment and it does work for him.

The problem is that the waittillguiexist() [1] function calls just timeout instead of recognizing that the first window has appeared. I definitely have accessibility support enabled, and Accerciser does show the window properly. I’ve asked the LDTP developers but they haven’t been able to help me.

[1] Yes, I hate that function name. I wish that the API and documentation had received proper feedback from native English speakers. It’s rather embarrassing to look at so far.

GNOME DVB Daemon 0.1.13 is out

One month after the last release, I released version 0.1.13 of GNOME DVB Daemon today. It's mainly a bug fix release which fixes a couple of problems with recordings, especially if watching and recording took place at the same time. There are only two new features: You can now sort channels either by name or by group in Totem. Channels can be grouped in gnome-control-center under Edit -> Channel lists. In addition, a detailed description of a show will be display if you double click on an entry in the "What's on now" view. This release depends on gst-rtsp-server 0.10.5 and GStreamer 0.10.25.

Plans for the next release include:

  • Support re-occuring recordings so you only have to schedule one timer to record your favorite weekly show
  • Allow to edit timers after they have been created
  • Basic support of UPnP/DLNA ScheduledRecording spec via Rygel
  • Only display option to select device groups if more than one device group is configured
  • Re-write of the user guide (possibly using Mallard)

Fedora 12, and beyond

Fedora 12

Fedora 12 got released yesterday, with plenty of nice new features.

My hand in that was the running bluetoothd on-demand, work on gnome-volume-control and its profile switching (meaning dead-easy 5.1 support), enhancements in the GNOME Bluetooth UI (which you probably already saw if you use Fedora 11), the PAN support in NetworkManager.

The stuff I really like is:
- the Bluetooth PAN support, so I can install the non-free wireless drivers on my laptop (which lacks Ethernet)
- the new notification theme
- the awesome work on KMS, and performance enhancements, which means I now use a GL compositing manager on all my machines
- the out-of-the-box mounting of my iPod Touch, though music syncing is still some way away.

You might want to read Matthias' interview for the Fedora 12 release.

Fedora 13

More recently work has started on Fedora 13.

nautilus-sendto got its own plugin API now, so you can extend it whilst keeping the code closer to your application or library. Empathy in GNOME 2.30 will take advantage of that. Pascal Terjan worked on the Pidgin plugin to make it use the Pidgin D-Bus interface, which means we don't need a Pidgin plugin to talk to nautilus-sendto anymore. Both changes are in Fedora 12 and Fedora 13.

Totem finally got some of my time, and a number of bug fixes have gone into the GNOME 2.28 and unstable branches. In master, we now have a nice OSD, disk-buffering of streams, reverse frame-stepping, and RTSP/HTTP authentication. Much thanks to the GStreamer guys, and Wim in particular, for making those last 3 items possible in Totem.

There's a few more items I'm still working on that'll sure please the crowds :)

Cherokee Web Server Introductory Screencast

We have recently uploaded our very first Cherokee Web Server introductory screencast. It's a 5 minutes video to introduce the Cherokee configuration interface:

<object height="340" width="400"><param name="allowfullscreen" value="true"><param name="allowscriptaccess" value="always"><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=7683565&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1"><embed allowfullscreen="true" allowscriptaccess="always" height="340" src="http://vimeo.com/moogaloop.swf?clip_id=7683565&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" width="400"></embed></object>

We will record more videos in the upcoming weeks. Hopefully they will help us to show the World the cool features that Cherokee offers. Enjoy it!

A brief preview of Zeitgeist Framework 0.3

Zeitgeist framework 0.3 not the GNOME Activity Journal

Something that might be as a shock to some other devs is that we decided not to store annotations and bookmarks within Zeitgeist. This should be done in Tracker. Zeitgeist answers only WHEN AND HOW DATA WAS ACESSED! We store a journal of how some metadata looked like at the event  but nothing compared to Tracker since we don’t store our metadata . We will be working very closely with Tracker from now on since 0.7 has been  for a GNOME 2.30. Congrats to the Tracker Devs.

Zeitgeist 0.3 will be a development preview for the 0.9 and 1.0 version that we intend to propose for GNOME inclusion. We won’t be breaking APIs from now on unless its curcial.

Features:

  • Journal of all the user activities that allows you to ask for a subjournal of any timeperiod for mimetypes, applications, subjects(docs/websites/…), events(opened, closed, focused modied and saved)
  • Most Used mimetypes, applications, subjects(docs/websites/…), event types(opened, closed, focused modied and saved) in any timeperiod.
  • Payloads can be stored to to each event. Just like in git and bzr where users add a note to each commit. It should be aloud to add payloads to each event, e.g: the reason the document was changed that way.
  • Provide Overall Focus Lifetime of applications and documents within any timeperiod.
  • (IMPLEMENTED BUT MISSING DBUS BINDINGS) Get most focused to docs/apps from docs/apps and vice verse within any timeperiods.
  • (IMPLEMENTED BUT MISSING DBUS BINDINGS) Subcribe to events from the Journal.

With have a good API to support these features and I would like to suggest applications dumping their history into Zeitgeist if possible instead of maintaining their own history.
For a technical overview of the improvements over 0.2:

  • stable codebase
  • very clean modular architecture that allows easy improvements and maintanance
  • open  for new relevancy algortihms
  • better performance and more memory effcient
  • clean and structured DBus API. no more weird hashes and structs
  • less logging from our side since now extension for apps exists like Markus’s amazing firefox plugin that send events to zeitgeist.

We are undergoing some last bug fixes and cleanups. A release will be out soon.

What is a content repository

Joint post of Henri Bergius and Michael Marth cross-posted here and here.

Web Content Repositories are more than just plain old relational databases. In fact, the requirements that arise when managing web content have led to a class of content repository implementations that are comparable on a conceptual level. During the IKS community workshop in Rome we got together to compare JCR (the Jackrabbit implementation) and Midgard's content repository. While in some cases the terminology might be different, many of the underlying ideas are identical. So we came up with a list of common traits and features of our content repositories. For comparison, there is also Apache CouchDB.

So, why use a Content Repository for your application instead of the old familiar RDBMS? Repositories provide several advantages:

  • Common rules for data access mean that multiple applications can work with same content without breaking consistency of the data

  • Signals about changes let applications know when another application using the repository modifies something, enabling collaborative data management between apps

  • Objects instead of SQL mean that developers can deal with data using APIs more compatible with the rest of their desktop programming environment, and without having to fear issues like SQL injection

  • Data model is scriptable when you use a content repository, meaning that users can easily write Python or PHP scripts to perform batch operations on their data without having to learn your storage format

  • Synchronization and sharing features can be implemented on the content repository level meaning that you gain these features without having to worry about them

feature JCR / Jackrabbit Midgard CouchDB
content type system In JCR structured or unstructured nodes are supported and can be mixed at will in a content tree. Content types are defined in MgdSchema types. All content must be stored to an MgdSchema type, but types can be extended on content instance level using the "parameter" triplets Type-free
type hierarchy Structured node types support inheritence of types, additional cross-cutting aspects can be added with "mixins". Node types can define allowed node types for child nodes in the content hierarchy. MgdSchemas allow inheritance, and an extended type can be instantiated either using the extended type or the base type Type-free
IDs Nodes with mixin "referenceable" have GUID. In practice the node path is often used to reference nodes. Every object has a GUID used for referencing. Objects located in trees that have a "name" property can also be referred to using the path All objects can be accessed via a UUID
References Nodes can reference each other with hard link (special property type) or soft link (by referring to the node path) MgdSchema types can have properties linking to other objects of same or different type. A link of "parentfield" type places an MgdSchema type in a tree. No reference support built-in
content hierarchy All content is hierarchical / in a tree Content can exist in tree, or independently of it depending on the MgdSchema type definition flat structure
interesting property types Multi-valued (like an array), binary properties (e.g. for files), nodes have an implicit sort-order Binary properties stored using the Midgard Attachment system Support for binary properties
transactions Multiple content modifications are written in transactions. Transactions can be used optionally.
events JCR Observers can register for content changes on different paths and/or for different node types and/or CRUD, receive notification of changes as serialized node All transactions cause both process-internal GObject signals, and interprocess DBus signals Support for one external event notification shell script
workspaces Workspaces provide separate root trees. No workspaces support in Midgard 9.03, coming in next version Multiple databases within one CouchDB instance
import and export nodes or parts of the repository (or the whole repo) can be imported or exported in XML. 2 formats: docview for human-frindly representation, sysview including all technical aspects Objects can be exported and imported in XML format. There are tools supporting replication via HTTP, tarballs, XMPP, and the CouchDB replication protocol JSON serialization is the standard way of accessing the repository. CouchDB replication protocol supports full synchronization between instances
versioning Checkin/checkout model to create new versions of nodes, optionally versions complete sub-trees, supports branching of versions. No versioning All versions of content are stored and accessible separately, no branching
locking Nodes can be locked and unlocked Objects can be locked and unlocked
object mapping Not in standard, but implemented in Jackrabbit. Rarely used in practice. Object mapping is the standard way of accessing the repository All content is accessed via JSON objects
queries In JCR1 Sql or XPath, in JCR2 also QueryBuilder. Query Builder Javascript map/reduce
access control Done on repository level, i.e. all access control is independent of application. In Jackrabbit: pluggable authentication/authorization handlers. No access control in Midgard repository, usually implemented on application level. Midgard proves a user authentication API No access control
persistence In Jackrabbit different Persistence Managers can be plugged in (RDBMS, tar file, ...) libgda allows storage to different RDBMS like MySQL, SQLite and Postgres CouchDB has its own storage
architecture Jackrabbit: library (jar), JEE resource, OSGi bundle or standalone server Library Erlang-based daemon
APIs Standard: Java-based, PHP coming up. In Jackrabbit: also WebDAV and HTTP-based API C, Objective-C, PHP, Python HTTP+JSON
full-text search Included in repository. In Jackrabbit: Lucene bundled No (SOLR used on application level) Plugin for using Lucene, not installed by default
standard metadata All nodes have access rights, jcr:primaryType and jcr:mixinTypes properties. JCR 2.0 standardizes a set of optional metadata properties. All objects have a set of standard metadata including creator, revisor, timestamps etc No standard properties

sky taco

[Apparently today is one of those days where a lot of blogging happens.]

Recently, Sydney Rd (the road that runs through the middle of Brunswick, once upon a time the road to Sydney, and to the goldfields) business were exhibiting local art in their windows. A couple of the pieces, by an artist called Lynette Joy Weber, really caught my eye. Specifically, I was fond of a piece called Little Raven. So we got in touch with her to buy one. Unfortunately, when I went to meet her, she wasn't able to liberate that piece of artwork from the shop it was in, so she was showing me some of the other pieces in her collection. I also fell in love with a piece called Friends. Because I'm like that, I ended up buying both of them.

'Little Raven' by Lynette Joy Weber'Friends' by Lynette Joy Weber

They're now hanging in our entry hallway, outside my office. They make me smile when I see them. Most people are unimpressed; too poppy and too commercial, they say. I don't care, because I really, really like them.

Going to a concert band rehearsal tonight.

Pango vs HarfBuzz

Since the rewritten HarfBuzz is shaping up fast and getting lots of Buzz these days, I get asked the same question again and again: "Will HarfBuzz replace Pango?" This post tries to answer that.


Short answer: No, not at all! Pango is here to stay. It will change, but only get better.


Long answer:

Pango provides two levels of API: A low-level and a high-level.

Low level API: What I can the "three pillars of pango":
  • pango_itemize(): Breaks text into runs that each have the same font, Unicode script, language, direction, and other characteristics.
  • pango_shape(): Shapes a single run of text, given the font, script, language, direction, and other properties. Shaping means converting Unicode text to positioned glyphs.
  • pango_break(): Does line breaking and other text segmentation (cursor positions, cluster boundaries, word boundaries, and sentence boundaries).

High-level API: Pango's high-level API consists of the PangoLayout object, aka "here's a piece of text render it in this box I don't care what you do."

Of these, HarfBuzz only does shaping. That is, hb_shape() is functionally equivalent to pango_shape().


API implications: Here is how moving to HarfBuzz affects the Pango API:
  • Everything in pango-ot.h will be deprecated and be a thin wrapper around hb-ot.h. This is already done in the harfbuzz-ng-external branch of Pango.
  • There will be new API in Pango, perhaps in pango-hb.h to help extracting various HarfBuzz structures from their Pango equivalents.
  • pango_shape() will be a thin wrapper around hb_shape() (read below).

Pango Modules: pango_shape() calls into Pango shaper modules to get the actual shaping done. There are two kinds Pango shaper modules depending on what they do (the API is the same, so Pango doesn't differentiate between the two classes):
  • Bridge modules: The basic-win32.c, basic-atsui.c modules call into another, platform native, shaping system to get the work done. The external (not integrated in Pango yet) modules basic-graphite.c and basic-m17n.c also do the same for the SIL Graphite and m17n shaping libraries.
  • On Linux, since there currently is no native shaping engine, Pango has multiple shaping modules, one per script, to do the actual shaping (arabic-fc, syriac-fc, indic-fc, thai-fc, ..., and basic-fc for all the non-complex scripts).
Now, as HarfBuzz becomes the shaping engine on Linux, all those script-specific modules will be removed and basic-fc will simply call into hb_shape(). That's indeed what the basic-fc.c in the harfbuzz-ng-external does.

Later on, when we add support for native win32, CoreText, Graphite, and m17n to HarfBuzz, all those other modules will also be replaced by HarfBuzz-calling equivalents.

Which one to use: Pango or HarfBuzz? Depends.

PangoLayout is designed to be the 'render this text in this box I don't care how' kind of API. That's a perfect fit for GUI toolkits like GTK+, but not suitable for lots of other uses, for example:
  • Web browsers
  • Word processors
  • Designer tools
  • Font design tools
  • Terminal emulators
  • Batch document processors
  • TeX engines
while in many of those cases PangoLayout can be made to work (with much pain, mind you), Pango still provides the lower level API and lots of other bits and pieces to get something going. What it doesn't give full control on however is font selection, which happens to be a deal-breaker for many of those usecases (browsers following CSS rules, etc).

So, each of those kinds of applications need to assess the pros and cons of using Pango vs using HarBuzz and providing all the other bits themselves. For example, HarfBuzz doesn't provide:
  • An itemizer
  • A Unicode Bidirection Algorithm implementation
  • A Unicode Line Breaking implementation
  • Glyph rasterization
  • Glyph metrics information
  • etc
There's also a hybrid use possible: to borrow those pieces from Pango on platforms that it's feasable, but drive HarfBuzz directly. It all depends. When in doubt, ask! We have a mailing list.

That said, Firefox will use HarfBuzz as soon as it's ready (there are patches circulating around). Google is using old HarfBuzz for their Webkit and will port to the new one. I'm also attending the Webkit-GTK hackfest in December to port that to the new HarfBuzz. We'll work towards sharing the HarfBuzz-dealing code among Webkit backends.

This is already a long post. Let me finish now. Hope I made it a tiny bit more clear.

November 18, 2009

New Fedora Spins site with Fedora 12


With the release of Fedora 12 we’ve given the spins.fedoraproject.org a bit of a facelift. :) (What did it look like before? Pre-facelift spins.fedoraproject.org.)

I wanted to tell the tale of this redesign to show how we did it, together as a community, and also to give kudos to the many folks who pitched in and made it happen.

I’m sure I’m forgetting some items and deserved kudos (let me know and I’ll update this post) but I have to leave for my bus now so that’s all for now. I hope this gives you some insight into a community design & implementation process. :)

And check out spins.fedoraproject.org and let us know what you think! We’re of course always open to improvements – this is an open design process. :) Also note there is more work to be done – let me know if you’ve any interest in helping out :)

Posted in Uncategorized

DLNA Media Server for Android

Recently we had a project at Onirica about creating/porting a DLNA Media Server for/to the Android platform. It was a good choice to start playing with the Android platform as it allowed us to evaluate several things:

  • Android APIs usage (UI, Activities, Services, Content Providers, ...)
  • Effort to port existing java code to Android
  • Android tools
As our intention was not re-invent the wheel, we looked for some available Media Servers coded in Java to re-use and we found two: The main problem with ps3mediaserver (that is the one I use at home) was that it was too oriented to transcoding and the code was not abtracted enough to get only the DLNA/upnp bits. The main problem with Cidero Server was that it was not serving local files at all, only links to internet radio stations, so one of the main functionalities was missing. Finally we choose to take the Cidero code, adapt it to the android platform, implement the missing parts and code the android specific parts.
The adapt/port process included:
  • Adding a hook for opening local files (originally included in the .jar file) to use through android R.raw
  • Replace the Xerces based parsing code with the XML stack available in Android
And the new bits we had to implement:
  • http transfer for local files, including 206 Partial-Content support
  • Scanning android MediaStore providers to get info (size, duration, title, mime types, etc...) from the content and add it to the server
  • Minimal UI
  • Activity and Service
As in every software development process we found some unexpected problems:
  • Android emulator does not support multicast. UPnP servers use SSDP packets to announce the server in the local network using a multicast address. It was not trivial to solve: we had to create a dummy server doing only the SSDP announce outside the emulator and port redirection (android redir inside the amulator and rinetd on the host) so the clients in our local network could access the server
  • Unexpected bugs on the android SDK
But finally the application is working nicely:

click on the image to view a demo video

2009-11-18: Wednesday.

  • Slept in late, off to the Doctor's, got some antibiotics. Started to feel better, desparately tried to get my still growing E-mail / task backlog under control.

maemo.org Bugzilla: Minor tweaks

Statistics

Incoming reports in the last weeks

As I’m quite busy with the normal “Triaging and Syncing” business already (as seen above, a first increase of bug reports happened right after Maemo Summit in week 41, but I expect way busier times ahead) Karsten concentrates on technical stuff. It’s good to have him back as now stuff gets done that unfortunately was on the backburner.
First pay-offs (small, but definitely worth to mention, not only for the sake of transparency) that were done because I could “outsource” this to Karsten:

Screenshot

Entering a new report

Having users/customers reporting a bug in order to improve a product is great (always keep in mind that they do not need to spend the time on that). However the freetext input makes this sometimes complicated: A “Steps to reproduce: Connect to foo.” is vague when there are several ways offered by the <abbrev title="User Interface">UI</abbrev> to connect to foo and only one of these ways triggers the bug. Also, some testers (me, for example) love to simply follow braindead exact instructions without the need to think a lot. ;-)
Hence Bugzilla now asks reporters to use an ordered list to provide exact steps. Yes, it is helpful.
Also, when it comes to reproducibility of issues an answer like “Sometimes, but not too often” is always a bit vague and does not tell how often the reporter had tried (once? five times?). Now we ask for numbers like “maybe 3 out of 10 times”.

Screenshot

New “Moved to Brainstorm” answer

Closing valid enhancement requests as INVALID just because they are better suited for maemo.org Brainstorm always sounded a bit rude. We now have a MOVED resolution plus a nice one-click-button-and-done implemented.

And third, we have a link to the Bugsquad on the maemo.org Bugzilla frontpage now.

More news to come.

DVD/CD Readers And Thin Clients

When we went live with our HP thin clients 2 years ago, one new feature we added was the ability to use USB sticks and transfer files. I know there are some tools for doing this already, but opted instead to use FTP. I felt that using a stateless connection would be more stable, and also allow us to use this feature when people are logging in with NX over low bandwidth networks. As long as the server can resolve the remote IP, it will find the FTP daemon running on the remote thin client. FTP already works fine over differing network speeds, and once the transaction is complete nothing is mounted back to the server. Very clean to me and has worked well.

After some conversations in our architecture meetings, we have agreed that CD/DVD readers are really no different than USB sticks; and in fact they probably can hold fewer files these days. So I made a last minute addition to our new thin client update to support these types of drives.

When you plug in a USB stick, it's appropriate to just mount it immediately. I then tuned the thin clients to always flush data every 10 seconds. So we tell people that if they place files on USB sticks, just wait 10 seconds and then they can remove the stick. udev sees the stick being removed and the mount is removed. This is working well, and avoids having to have some kind of "Safe To Remove" panel app that we know people don't use anyway. :)

Being that CD/DVD drives have to eject, I couldn't just mount the disk when it's inserted..or they wouldn't be able to eject the disk. The GNOME desktop is running on the server, so it too is not aware at all of these drives. So I wrote a very simple UI that pops up (no GUI Nazis please :) ), when a drive is powered on. This is running on the thin client itself. I tried to keep it to the bare minimum and so far it's working well.

When the USB CD/DVD is turned on, udev starts up the small UI. When they click on the Mount button, it generates a directory name based on the physical hardware and creates the mount. The whole idea of mounting things to usb0, usb1 and so on has not worked well because users never were able to figure out which directories were in use. So now they only see the drives that are mounted, and each has a descriptive name. In the shot below, you can see the directory mounted from the drive after it's mounted.




The users then double-click on the USB icon and up comes Nautilus which is FTP jailed to just USB devices on the thin client. Proftpd only displays files types which we have approved. To the user, this looks just like a regular file manager that they always use. In the shot below, pictures and videos are displayed from CD media.



The user then drops and drags the files to the desktop, and the FTP feature of Nautilus is activated. Thumbnail generates and the file is now stored on the server.



I'm sure there are other ways to do this, and this definitely falls under a WFM; but if you are deploying thin clients and wondering how to handle these devices...maybe this will be a good solution.

A new Clutter Widget Toolkit

If you’ve been following Moblin development closely, you’ll know that we have been using a library called “Nbtk” (netbook toolkit) to implement the common user interface elements. People have been quite interested in this, since it is based on Clutter. However, Nbtk was developed with very short term goals, so that we could accomplish the Moblin 2.0 UI as quickly as possible. Now that Moblin 2.0 (and indeed, 2.1) is out, we have some time before 2.2 to start thinking about a more serious toolkit.

The Moblin Toolkit

The first goal was to rename the library to something less specific to the “netbook” platform. We chose ‘mx’ as the name space, because the goal of toolkit is to support the Moblin User Experience. Mx provides a set of standard user interface elements, including buttons, progress bars, tooltips, scroll bars and others. It also implements some standard layout managers, although some of these will be available in Clutter itself when Clutter 1.2 is available. One other interesting feature is the possibility of setting style properties from a css-like file.

What’s New

Followers of Nbtk will be interested to know what’s new compared to Nbtk. The latest additions include:

  • notebook – a multi-child container that shows only one child at a time (similar to a slide show). The notebook widget itself does not implement tabs, but these can easily be added by hooking it up to the new button-group widget.
  • button group – allows buttons to be grouped so that the toggle state can be mutually exclusive across the buttons in the group (e.g. such as a group of radio buttons might behave.). Also features a property to allow no buttons to be toggled if desired.
  • toggle widget – a widget that implements a boolean state and looks similar to a light switch or slider switch. This is a Clutter version of the MxGtkLightSwitch already available. The advantages of the Clutter version are that it provides better animated feedback on user interaction.

There have also been some behind the scenes clean ups, including:

  • re-written table layout algorithm – this had much better support for correct minimum and preferred sizes, especially related to columns spanning.
  • the stylable interface is now much simpler and has less dependencies
  • the Widget base class implements hover and active states (if the actor is reactive)
  • all constructors return ClutterActor, since this is the most useful base type.

Try It

Although the new project started as a branch in the Nbtk source code repository, it now has it’s own git repository at git.moblin.org. I am also making tarball releases on the brand new download.moblin.org. I have released a first version for testing purposes and it is important to note that the project is not API stable yet.

Raise the hammer! Midgard2 Mjolnir goes live

Mjolnir, the new major release of Midgard2 Content Repository is now out. Named after the hammer of Thor, this release finally provides a real content repository that can be used by both desktop and web application developers.

mjolnir-narrow.png

In addition to being a GObject-powered content repository for PHP, Python and Objective-C, the Mjolnir release provides several significant goodies on top of the older Midgard2 series:

We've been testing running the Qaiku microblogging service with Mjolnir. The exactly same PHP code that we used with Midgard 8.09 LTS performs 20-60% better when running on Mjolnir.

Get Midgard2 9.09 Mjolnir while it is hot! Builds for various Linux distributions are already starting to hit OBS repositories...

Mjolnir - new stable Midgard2 release

Yes, we did it :)

Here is it latest and greatest Midgard2 stable release.

banshee-telepathy-extension 0.1.0

In an effort to make my Google Summer of Code work more accessible, I've packaged it all up into a tarball with all the autotools fixins to compile and install for use with your existing Banshee installation.

I felt like some were hesitant to install this because it requires the installation of NDesk.DBus git master. So, I decided to bundle the source into this tarball. It will all get compiled into one Dll, Banshee.Telepathy.dll. This way, everyone can keep their stable versions of NDesk.DBus and still use the extension. When the NDesk guys publish a new release, I will remove the bundled version.

This is largely considered a beta release because it's really only been tested by myself and my mentor. So, please, test away!

Please, read the README before you do anything. There are requirements for this to work properly but are not required to build. Therefore, they aren't checked by the configure script. For easy reference, here are all the requirements:

  • Mono >= 2.4.2
  • Banshee >= 1.5.1
  • Empathy >= 2.27.91
  • telepathy-gabble >= 0.9.0
If you're running Ubuntu Karmic, you'll mostly likely have all the requirements except gabble 0.9.0. You can get that here. Any of the 0.9.x series will do.

In addition to the requirements in the README, I've made some notes on the issues that I know of. The major one is sluggishness when traffic ends up getting routed through Jabber servers. So, if you end up playing the waiting game, it could be due to this. I hope to see some speedier tubes in the future.

If you missed the link for the download above, here it is again. If you find bugs, it would be awesome if you could file them on the github issue tracker. Enjoy!

November 17, 2009

GNOME Marketing Hackfest

This past week I attended the 2-day GNOME Marketing hackfest in Chicago from Tuesday, November 10th through Wednesday, November 11th, and I wanted to share a report about what happened at the event.&nbsp; It was really good to be able to further engage with the GNOME marketing team at the hackest and to be able to represent both Sun Microsystems (I was the only person from Sun at the event) and to also represent the GNOME Foundation.&nbsp; Since I obviously live in Chicago, it was pretty easy for me to attend. <br /> <br />To give some background, I started being involved with the GNOME marketing community shortly after being elected onto the GNOME Foundation board of directors (about 2 years ago).&nbsp; A lot of important decisions and discussion within the GNOME community happens on the marketing list.&nbsp; Therefore, I recommend that people with an interest to increase their participation with the GNOME community consider getting more involved with the GNOME marketing community.&nbsp; It is a great way to get one's finger more on the pulse of what the community is doing. <br /> <br />The Marketing Hackfest actually got started around 5pm on Monday the 9th.&nbsp; Several people (including Stormy Peters and Paul Cutler) arrived in Chicago by this time.&nbsp; So, I joined them for dinner at a downtown Chicago Thai restaurant.&nbsp; Afterwords we went to the Hard Rock Cafe to talk about GNOME marketing over drinks. <br /> <br />Tuesday the 10th was the first day of the hackfest at the Google offices at 20 W. Kinzie in Chicago.&nbsp; Not surprisingly, the Google offices are a really great environment to meet, work, and collaborate.&nbsp; With GNOME 3.0 approaching, everyone agreed that the hackfest should focus on marketing the new GNOME 3.0 release.&nbsp; The main focus was marketing towards end users (as opposed to developers, distributions, or organizations that help fund the GNOME Foundation). <br /> <br />Paul Cutler showed everyone the marketing presentation that he has been giving at recent conferences.&nbsp; Although his presentation did a good job of showing off the &quot;revamped user experience&quot; provided by GNOME 3.0, it was clear that there is still more work needed to clarify what GNOME 3.0 means to users.&nbsp; For example, while there are a lot of clear <br />improvements with how the desktop itself works (e.g. GNOME Shell &amp; zeitgeist), there is not as much clarity on what GNOME 3.0 means in relation to desktop applications.&nbsp; We spent some time brainstorming to identify additional ways to highlight what is exciting about GNOME 3.0. <br /> <br />One of the major tasks that had been planned in the hackfest agenda was to create more effective marketing materials to assist volunteers that run the GNOME booth at various conferences (who typically make use of the GNOME Event Box).&nbsp; In the past, the GNOME Foundation has gotten reports that people running such GNOME booths did not have a clear idea what to demonstrate, talk about, or how to answer common questions. <br /> <br />We spent much of the first day working collaboratively in gobby to compose first drafts of a talking points document, a FAQ, and a brochure that we intend to include with the GNOME Event Box to help such people more effectively demonstrate and present GNOME at such events.&nbsp; These materials will also be made available on the web to help people giving <br />presentations who are not using the GNOME Event Box. <br /> <br />After the 1st day of the hackfest, we spent the evening at the Rock Bottom Brewery for dinner, discussion, and drinks.&nbsp; Kevin Harris, who runs the Chicago Linux Users Group joined and there was good discussion on how to revitalize the Chicago GNOME community within the context of the Chicago LUG. <br /> <br />The second day of the hackfest was focused on developing a slogan for GNOME 3.0, and working to improve the marketing assets that the GNOME Marketing team manages.&nbsp; Refer here: <br /> <br /> <a href="http://live.gnome.org/GnomeMarketing/MarketingMaterial" class="moz-txt-link-freetext">http://live.gnome.org/GnomeMarketing/MarketingMaterial</a> <br /> <br />Mainly we focused on two areas where things are currently lacking.&nbsp; One, the GNOME community needs more stock presentations to showcase GNOME in general and the upcoming GNOME 3.0 release.&nbsp; It was highlighted that much of this sort of information could be useful to downstream distros so it is also important to provide this sort of information in a way that would be useful to them. <br /> <br />Two, the GNOME community needs template GNOME-branded slides.&nbsp; For example, people who receive travel funding from the GNOME Foundation should be expected to use GNOME-branded slides that highlight that the person was sponsored by the GNOME Foundation.&nbsp; Such presentations should also include a standard slide that encourages people in the audience to consider donating to the GNOME Foundation (e.g. via the Friends of GNOME program). <br /> <br />So, we spent several hours identifying what specific work need to be done in these two areas, and we started doing the work to fill in the missing pieces. <br /> <br />Also on the second day of the hackfest, Jason Clinton gave a 1-hour presentation about his ideas to improve GNOME application About dialogs to better market the GNOME project.&nbsp; He suggests that the About dialog should provide two new buttons.&nbsp; One that will launch a website to help users learn more about GNOME, and the second to encourage users to <br />donate to the GNOME Foundation.&nbsp; He proposed that GNOME should automatically track who donates money via this new About dialog (unless they opt-out).&nbsp; This way, when any user launches the About dialog, it would highlight and recognize those users who were inspired to donate from that program's About dialog.&nbsp; This, for example, would provide a way for GNOME users to recognize their favorite applications. <br /> <br />After the 2nd of the hackfest, we went to dinner at a local cajun restaurant named Heaven on Seven.&nbsp; The hackfest wrapped up right after dinner since pretty much everyone (aside from myself) needed to rush to the airport to catch flights home. <br /> <br />There were a lot of side-discussions both during the hackfest and after in the evenings.&nbsp; All of the dinners were working dinners and everyone did a great job of keeping on-topic.&nbsp; Such topics included: <br /> <ul> <li>How the GNOME community needs to be more effective at attracting attention from the press, and the importance of doing more effective and regular press releases. </li> <li>Accessibility, and the importance of keeping GNOME 3.0 accessible was a topic that frequently came up.&nbsp; The GNOME Marketing team seems to clearly understand that it will be a big blow to the GNOME message if GNOME 3.0 is not usably accessible.&nbsp;</li> <li>The marketing team is very interested in creating video advertising and instructional videos for GNOME 3.0.&nbsp; Several hours were spent talking about suitable topics and how to go about producing such videos in a volunteer community.&nbsp;</li> <li>Several times, it was highlighted that 97% of all &quot;Friends of GNOME&quot; donations come from people who are end-users and not GNOME Foundation members.&nbsp; However, the GNOME community does not do a very good job of advertising Friend of GNOME outside of the GNOME developer community.&nbsp; Much time was spent discussing how to better reach out and advertise the Friends of GNOME program directly to end-users.</li> <li>Getting more people from the GNOME community involved with the marketing project.&nbsp; The theme that &quot;all GNOME community members are really a part of the marketing effort&quot; came up frequently.</li> <li>People seemed to agree that the Marketing team should run a regular IRC meeting, much like the GNOME a11y team does.&nbsp; The idea being that this would help encourage more people to get involved with GNOME marketing projects.</li> <li>The importance of fostering more mentorship within the GNOME community to attract new volunteers in marketing and other areas.</li> <li>Ways to better recognize GNOME volunteers.&nbsp; For example, there was the suggestion that influential people in the GNOME Foundation and on the marketing team should invest more time to write positive recommendations for outstanding GNOME contributors on social networking websites like LinkedIn, and to develop other ways to highlight such outstanding contributors.</li> <li>Ideas on how to improve fundraising, including ideas on how the GNOME community could be more effective at pursuing grants. <br /></li> </ul> Overall, the event was a big success.&nbsp; This was the first time the GNOME Marketing community has ever gotten together for a face-to-face meeting.&nbsp; With GNOME 3.0 approaching, it is an important time for the marketing team to become more consolidated and focused on making GNOME 3.0 a success. <br /> <br />Everyone had a lot to contribute and there was a real feeling that the hackfest was a real energy boost that should result in a lot of productive work from the marketing team over the next months.&nbsp; People seemed to feel that another one or two Marketing Hackfests are in order before GNOME 3.0 is actually released.&nbsp; People also seemed to feel that future marketing hackfests should be longer (perhaps 3 or 4 days). <br /> <br />Of course, special thanks to Novell and Google for sponsoring the event.

codification

Quoth Johnny Rotten: "You're only twenty nine, got a lot to learn". In my case, both conditions hold, and, regarding the latter:

Who knew?

Fedora 12

So Fedora 12 is finally out. Give it a try.

It shaped up to be a pretty good release I think.

Marketing Hackfest (Part 1)

I’m overdue in recapping some of my thoughts of the Marketing Hackfest. Overall, the hackfest was a success and now we begin the hard work in recapping everything we talked about, making it actionable and doing the work!

One of the best things about the hackfest, in my opinion, was the cross-section of people who attended. Each individual had different strengths and views of GNOME and it served to remind me of the different groups who use GNOME and how they use it.

I spent a lot of time at the whiteboard helping facilitate and I’m still sorting through all the notes we discussed. Somewhere Shaun has some video as well.

A lot of our discussion was centered on GNOME 3.0 and how we can communicate to our users and our downstream partners of the features and benefits of GNOME 3.0. If you think back to the email Vincent Untz sent this past April on behalf of the Release Team, GNOME 3.0 has three goals:

  • Revamp our User Experience
  • Streamlining of the Platform
  • Promotion of GNOME

That third goal is why we got together and the bulk of what we discussed. We touched on what GNOME 3.0 is; GNOME’s overall branding; marketing GNOME to users and how to improve our partnerships with downstream distributions such as Fedora, OpenSolaris, openSUSE and Ubuntu.

But it wasn’t all just discussion ’round the campfire! We did a lot of work on creating materials for volunteers who host a GNOME booth at a conference. We wrote the copy for a new brochure explaining what GNOME is; created a Frequently Asked Questions for those hosting a booth with answers to questions they should expect from conference attendees; and wrote core messages and speaking points when talking to attendees.

We also discussed in detail the Friends of GNOME program and did some work on an upcoming fundraising drive.

And lastly we’ve started to work on presentation materials for volunteers who may want to give a presentation on GNOME. We still have a ways to go to finish this work, but using the awesome template Vinicius created, we envision having a number of presentations available that can be used as building blocks for someone who wants to give a presentation on GNOME. Some of these include:

  • GNOME History (5 minutes)
  • GNOME 3.0 (5 minutes)
  • Getting started using GNOME (5 minutes)
  • Getting started developing GNOME (5 minutes)
  • GNOME 3.0 (45 minutes)

And lots of others – the above are just examples of templates with content someone could take and mix and match together to put together the bulk of a presentation they might want to give.

Lastly, we also spent some time talking about the GNOME Marketing community and how we can work together, communicate effectively, mentor new members and tackle some of our action items. We’ll start by having IRC Meetings where we can recap some of the discussion topics from the hackfest, discuss ideas from the community on improving how we market GNOME and hopefully have some of the community members volunteer to tackle some of the action items and next steps in creating marketing materials for GNOME. Look for the announcement in the next couple of days to help pick a time for that meeting, and similar to the Bug Squad, we’ll use Doodle.com to try and find a time that works for as many people as possible.

More to come!

FAmSCo elections and so forth

This is the season of elections and, the one that I’d like to talk about is the FAmSCo one. This time around all the 7 seats are up for elections and, an ensemble cast of Fedora folks have put their hats into the ring.

The FAmSCo, along with the other *SCo in Fedora land offer the finest opportunity to demonstrate leadership, show commitment and, work in one of the front-line roles of the project. I took sometime in reading up the statements of the candidates and, one of things that struck me (besides those mentioned here) was the recurring theme of making the FAmSCo process more “open” and “transparent”. Among the important duties which are owned by FAmSCo, encouraging communication is a noteworthy one. I hope that the candidates, once part of FAmSCo, will take time to bring about a change in the way communication is handled. I am sure that there are ways it could be made better and relevant.

The other aspect is the need to have goals or plans that are measurable. I hope that this comes up in the town-hall, and, the candidates think over how they would like to measure their impact on FAmSCo in specific and The Fedora Project in general terms based on their plans. From a personal perspective, I have been incredibly pleased to see FAmSCo initiate plans and processes that would lead to the most awesome bunch of Fedora Ambassadors – be it a structured mentoring program or, through a follow-up on learning from events. I’d like to see that continue with more vigor. Working with folks to facilitate bringing out the best in them has its own reward.

This time around there are a lot of friends in the fray and, that makes me very happy. It is always good to see folks stepping up and desiring to do what they are really good at. So, mark the calendar and, remember to vote.

GNOME Marketing Hackfest: Day 2

The GNOME 3.0 launch theme

The morning began with a hammering out of the GNOME 3.0 launch theme and marketing approach; we brainstormed for two hours. This discussion largely built on the discussion that we had the day before but, this time, we came to some final conclusions.

First, we agreed upon the themes--the Shell, the search work, the new levels of cross-application integration--all substantially advance the release team's primary point of the 3.0 release: a better user experience. We enumerated several points that are critically important to cover in any marketing effort. I will return to those in a moment.

Second, working backwards from the list of final results that we wanted to achieve, we turned our attention to language that we might use to explain these concepts to end users (the target of this hackfest). We came up with a large, nebulous list of concepts that we felt would appeal to a potential slightly interested, slightly technical conference attendee (our litmus test).

Third, we stepped even further back from these concepts and tried to hammer them in to a single, coherent over-arching theme for the GNOME 3.0 release marketing effort.

We laughed; we cried. We bounced on giant bouncy balls in the Google color scheme (thanks for hosting Google!) and spun around staring at Chicago skyscrapers in three cardinal directions grasping for inspiration. We buried our heads in similarly multi-colored beanbag chairs in frustration. We stared at the white-board in quiet contemplation for long minutes in silence trying to coax out the essential answer to the giant, nebulous problem ahead of us. End the end, it just came to us--everyone immediately liked it and agreed. Suddenly, we had our theme.

In the coming weeks, the marketing team will write up a formal announcement and prepare some preliminary art. Vinicius already had some great looking artwork done before the end of the day. So, I'm excited about this marketing effort. Paul, in his excitement, already began scheming all kinds of way to use our theme. I think that GNOME 3.0 is be going to be fantastic and so is its marketing effort.

The 3.0 marketing end game

From here on in, GNOME 3.0 is all that we will talk about with regard to marketing. 2.30 will merely be passively marketed. We agreed on some major assets that we want to develop for the release of 3.0.

For distributions, production of high-quality, templated marketing assets begins in February, seven months before 3.0 is released. GNOME will provide video, artwork, flier, brochure and sticker templates that are optimized for a prominent distribution logo with a small with GNOME 3 aside from the distributor's own trademark. In the case of the videos, the lead-in and lead-out will have a large area in the center for the distributor's logo.

In this way, we make it easy for distributors to help get the message out about why the user experience is better than it has ever been before.

For users and those whom interact with GNOME directly or via viral sources (YouTube, Facebook, review sites), the GNOME marketing assets will be the same as those provided to the distributors but with a distribution neutral lead-in and lead-out. We--after some serious thinking about how to deploy this correctly without nagging--will encourage that videos that describe useful new features be included in the default desktop installs (perhaps as documentation assets).

For conference speakers and attendees, we, in the later half of the day, worked on finishing up our conference assets by refreshing our presentation slides (we did the brochure, FAQ and talking points on Day 1). They are now small sets of 5-minute topics that can be plugged together to form an hour long talk. (We are finishing these up on the marketing list.)

The 3.0 videos for the attention deficit

The videos that begin being filmed in March are inspired by the Google Navigation feature videos: http://www.google.com/mobile/navigation/. The rationale is that the videos on that page inspire trust--it's not an actor talking--and were deep-linked to widely on technical blogs.

The work to do

We have at least two more marketing hackfests planned because there is just so much more work left to get done. Especially in the video production and artwork side of things. Please volunteer.

If you code, you're marketing; take it one more step

When we listen to our users and we give people what they want, we are marketing. When we blog about our accomplishments, we are marketing. We ask that every module maintainer go one step further and help the 3.0 marketing effort. Tell us early what your visible new features are. Make a screen cast early; it might become a professionally produced video asset. Answer questions about 3.0 in a non-confrontational, informative manner on technical blogs.

Whether this release will experience the "KDE 4.0 effect" depends on you understanding the awesomeness that is the new user experience and articulating that wherever you can.

Friends of GNOME, the other awesome

Stormy lead the discussion about what to do about promoting Friends of GNOME. It has been a massively successful program and she thought that it could do so much more. In the short-term, we want approximately 50 new subscribers by the end of the year. A thermometer goal graphic has been developed and this will be deployed on Planet GNOME.

If you like hackfests, please give to and promote Friends of GNOME.

In the long term, after a hour of discussion, we devised a method by which we can help the release team achieve its goal of avoiding blessing modules as The One Official GNOME Version of X, form high-value cross-promotional relationships with distributors, and promote Friends of GNOME--all in the same GNOME Goal which we, the marketing team, shall be proposing first to the release team and then to the entire project. I need to write some proof of concept code first, though. Much, much more on this later.

Thank you to Google and Novell

Google, thank you for hosting us; the food was great and the facility was just what we needed. Novell, thank you for helping with travel costs. Meeting face-to-face rocks.

Friends of GNOME

November 16, 2009

Tue 2009/Nov/17

  • Maemo Summit '09 gave me the chance to visit Amsterdam for the second time. A city I love and can't get enough of it.

    near amsterdam centraal station

    All photos of Amsterdam, in its flickr set.

  • Also, Berto and I took a couple of days of holidays after the summit. We visited Den Haag (flickr set):

    Den Haag HS

    Delft (flickr set):

    delft

    and last but no least, Rotterdam (flickr set):

    Rotterdam Centraal

  • Of course, I also made some pictures during the summit. Not all of these are so great as this one, though:

    Maemo Summit Postcard

What We Talk About When We Talk About Zeitgeist

There is a tangible confusion around as to what Zeitgeist is and what it isn’t; what it can do and what it can’t do. This is partly our own fault because we could have communicated this whole thing better, for instance we have some very outdated wiki pages lying around that you should probably stay away from until we updated them. In this post I aim to give a semi technical run down of the core Zeitgeist functionality and how we expose it for you to work with. This should hopefully clear out some confusion.

Events

The Zeitgeist daemon (also known as the engine) is a process that exposes an event logging framework as a DBus API. The structure of these events is that they have a block of metadata that describe the event itself (this is known simply as the event metadata) and another block of metadata that describes the subject, or subjects, that this event happened to (this part is known as the subject metadata). The metadata for the event looks like:

  • Timestamp – When did this happen. Milliseconds since the Unix Epoch. Note that we see events as single points in time, meaning that events don’t have a duration
  • Interpretation – Abstract interpretation of this event; what happened. Fx. “opened”, “saved”, “closed”, “send”, etc.
  • Manifestation – How the event happened. Fx. “user activity”, “notification”, or “scheduled activity”.
  • Actor – Who triggered it. This will typically point to the .desktop file of the acting application. It will most likely be an application, but it is not required to be so.
  • Payload – A free-form binary blob that you may attach to the event. This is specifically application specific and mainly intended to be a “back door” for people to do all sorts of funky hacks.

Each event has one or more subjects associated. For each subject we store:

  • URI – You guessed it! The URI of the subject
  • Interpretation – Abstract interpretation of the subject. This could be “Document”, “Image”, “Video”, “Email”, “Instant message”, “Contact”, anything.
  • Manifestation – How the subject is stored. This could be something like “File”, “Mailbox”, “Web page”.
  • Origin – A URI pointing to the origin or “patron” of the subject. For files this would be the parent folder. For YouTube videos it would be http://youtube.com
  • Mimetype – The format of the datastream representing the subject. Fx. text/plain, application/xml.
  • Text – Textual information added to the subject. This is not applicable for for types of subjects.
  • Storage – Identifier for the storage medium this subject resides on. We use this to make it possible for queries that return only events for subjects that are “available now”. Fx. some clients don’t want to show events for files that are stored on you USB pen drive when it is not connected.

Ontology – Or Data Description

In reality the metadata fields we store don’t contain simple strings like “Document” for the subject interpretation. It’s a bit more complex than that – sorry! We store a URI pointing to a formal definition of something categorized as a Document. This formal categorization is called an ontology if you want a word to confuse your friends with. We are fortunate enough that someone already wrote such a spec, namely the Nepomuk Ontology. So instead of just “Document” we store the string”http://www.semanticdesktop.org/ontologies/2007/03/22/nfo/#Document“.

Since Tracker also uses the Nepomuk ontologies you may take these formal classification strings and plug them directly into Tracker to find everything that Tracker considers a document.

We will also have an ontology for the event metadata as this is not covered by Nepomuk. We are actively working on this.

Getting Data Out – Querying the Event Log

We employ a template based query API for searching our log data. You send us a list of event templates you want to look for and how you want it sorted and we give you the results. So if you want to find all “open” events on subjects of type “Document” simply create an Event object, set the interpretaion to “open”-event and add a subject to the event template with the interpretation set to “document”. All other fields should be left blank. Send this template to us and we will give you the matches.

The list of event templates is collected into a big OR-query to imbue the consumers with more power.

Getting Data Into Zeitgeist

There are really no limits to what kind of events we could store. If you have a spare mobile with a in-built accelerometer and glue it to your front door then you could send an event over bluetooth to your desktop each time your front door opens. Probably there are better use cases?

The point is that the usefulness of Zeitgeist stands and falls with the events that you push into us. We can store anything that you can model using the structures I outlined above. I am pretty certain that people will not agree on the kinds of data they want logged, but we are ready for anything :-)

Normal users would of course not need to think about getting their data into Zeitgeist. What developers need to know is that we have a simple DBus API to insert events (surprisingly called InsertEvents). It is called InsertEvents and not AppendEvents or something like that for a reason. Namely that you are allowed to insert events that are in the past. This is useful if you want to import your Firefox history or what ever. If you try to log an event twice the engine will throw an error at you, so no need to worry about dupes.

Ok. I think that about wraps up what I intended to say for now. Hope it’s useful to at least one person out there! :-)

litl and computer frustration

Nat Friedman has interesting results up for his informal survey on computer frustration, noting that "About a third of these issues could be addressed by webbook efforts like ChromeOS and litl, although the webbook model will probably raise new issues as well."

Seems like a good time to discuss how we designed the litl webbook to reduce computer frustration.

Design with a computer-frustrated audience in mind

We designed litl OS with Cooper, Pentagram, and our own design team. Cooper contributed a set of personas, adding to our own thinking about who would love the litl. We focus on busy families at home. While we have big dreams for how litl OS can evolve, for now we didn't think about work computing, ignoring the needs of business travelers and IT guys.

Windows will ask hundreds of questions busy families don't care about understanding. It's not that they can't understand, but they do not care. (The most famous example might be Vista's overzealous need to "Allow or Deny?"). We can say definitively that our audience doesn't care about this stuff, and so we don't ask it. Period.

As geeks, who have been spent our entire adult lives using and administering PCs, we tend to think the entire world is like us... the more the better... we want total control.  Our research (and our own families) have shown that there's a huge portion of the world, such as busy moms, who only care about results. They don't care about tech specs, and they don't care about tweaking what Tufte calls "computer administrative debris."

As software developers, we don't realize how much worthless debris we put in front of people.  Stuff they don't care about or don't need to know. At litl, we're trying to take a different approach.

Make the OS automatic

If your favorite web app or web site fixes a bug, it isn't nagging you about whether you want the fix. You simply get the fix. We approached litl OS in the same way. litl OS is smart about avoiding updates while you're using the webbook, and quietly updates itself while you sleep.

Hide implementation detail - manage it for you

File management is one of the more complex features of traditional operating systems, and litl OS avoids it entirely. Web apps just store their stuff, they don't ask you where to store it. We continue the entire OS in that spirit.

Sandboxed Sites and Channels

Applications on the litl don't have free run of the operating system. We have two kinds of "app"; web apps running in our browser, and channels. (Channels are a special kind of app with three states, one for lean-forward/laptop, one for lean-back/easel, and one widget-like state in card view.) Channels are run by a custom flash player in their own process.

This gives us a number of tools to control malware (since we don't have to distinguish it from "normal" unsandboxed apps), and it throws out all kinds of complexity associated with installing and updating traditional application software.

Sandboxing eliminates a whole class of "system integration" issues where applications interfere with one another or with the OS. On the litl, web pages and channels can't (and need not) install their own annoying updater software. They can't add tray icons to your screen. They can't break other apps in unforeseen ways.

Hardware/Software Integration

Building for a single hardware platform throws out whole domains of complexity. There's no mess of interface on the litl related to hardware drivers; we know about our hardware already. We know which buttons are on the keyboard (and incidentally, a bunch of useless ones are not). We know the screen resolution.

This means no setup or configuration to start using the litl. It means our help and instructions can be precise - instead of "look for the key that says..." we can say "press the big blue key in the lower left." It means we can ship the litl preconfigured with information entered during the ordering process. It means any number of OS features "just work" instead of requiring tuning to the particular hardware the customer has.

Eliminate the hard drive

The hard drive is the number one point of failure in PCs, and when it breaks, it's a disaster - you lose all your stuff. Best practice is to use the hard drive only as a cache, keeping a backup copy of everything on some web service. litl does this by default, going further to automatically manage the cache so it only has what you're actively using. No hard drive failures; no data loss; no setting up or managing backups.

A new issue: web service integration

The webbook model isn't all positive complexity-wise (yet) - as Nat says, it may raise new issues. Here's one: a litl OS design principle is to use any and all existing web services and apps, rather than reinventing the wheel. We decided to use web mail rather than create our own litl mail app, we decided to use Flickr and Shutterfly rather than invent our own photo storage and sharing site, and so forth. We see our goal as improving the web, and helping people use the web, rather than replacing the web with a "walled garden" of litl-branded services.

There's no question that a "walled garden" of services we controlled completely would be simpler and easier to use. But we don't think our customers would be happy as hothouse flowers. We want to be the best OS for using the whole Internet, rather than a limited appliance.

A Challenge: Internet and WiFi setup

Internet and WiFi setup are tough to address, because problems on the access point side are outside litl's control. Still, on the litl itself, wifi configuration couldn't be simpler - we start with a big list of access points, instead of a tiny little tray icon. People need to recognize their network name and know their password. If they have those two things, we automate everything else.

Personal anecdote: I recently helped my sister fix her wifi; there were two problems, and both were caused by Windows complexity.

First, Dell had installed some garbage "wifi manager" software that interfered with Apple's AirPort software. On the litl, we don't ship OEM crapware.

Second, when you add a network, Windows opens this absurd, verbose dialog that makes no sense; she'd clicked the wrong answer. litl OS does not ask this sort of question, by design. If we don't think our customers care about a question, we don't ask it. (This has nothing to do with the webbook model per se; but it does have to do with our well-defined target audience. We know our customers don't care about this question.)

Only the beginning

We've come a long way with litl OS, but there's a lot more we could do. Nat's survey mentions printing; we could automatically discover printers with no driver installation. He mentions performance; we could manage CPU usage of sandboxed sites and channels to keep the "too much stuff" problem (too many open sites) from degrading performance. We could much more extensively lock down the OS using SELinux-style technology, to further restrain malware. There are so many possibilities because the OS is truly managed on behalf of our customers, not managed by our customers when they have better things to do.

To be sure we get this right, we're planning to rotate the litl development team through customer support, giving every software developer firsthand knowledge of our customers.

We would love to hear your ideas on how to further reduce computer frustration - let us know!

DebConf 2011 in Munich

We'd like to host DebConf 2011 in Munich, Germany.

However, this is a far from trivial challenge:

Rent in Munich, in particular for conference rooms, is far from cheap. In my opinion, unless we get some really big sponsor (and I'd still prefer spending sponsor money to fund developer trips to the DebConf instead!), the only chance we have is to get some rooms at the university.

However given the development of the recent years (budget etc.), it has become a lot more difficult to actually get rooms at the university for such events. Unless the event is considered to be fully a part of the universitys "work", we might have to pay rent to the university. Which again isn't that affordable.

Anyway, if you are in Munich, working at one of the universities, or in any way interested in supporting DebConf 2011 in Munich, please join the DebConf11 Germany mailing list. Also check our meetings scheduled on the DebianMuc Wiki page, currently every Monday, 18:00, at the new LiMux offices in Sonnenstr.

P.S. There will also be a Bug Squashing Party in Munich end of November: Munich BSP November 2009

Maemo 5 final release: firmware and updated SDK


The Nokia N900 is landing in the hands of real users with the Maemo 5 final release that we have been polishing in the last weeks.

The fortunate users of a pre-production Nokia N900 are encouraged to flash completely their devices in order to have them as they come out of a sales box. The instructions to flash the internal memory and the eMMC can be found at http://wiki.maemo.org/Updating_the_firmware. Even if technically your backups and the current eMMC firmware should work, we recommend you to start completely from scratch. As if you would have got a new device today.

The Maemo 5 SDK is being updated accordingly (as we speak, so wait if you still don’t see it). It can be downloaded at http://forum.nokia.com/maemo. Now it comes with a GUI installer to ease the path to get you started. Current Maemo 5 final SDK users can simply update their sources in order to get the content matching the sales release.

Welcome the Maemo 5 final release! Welcome the Nokia N900!

MS windows users willing to update the [[N900]] can use the [http://europe.nokia.com/get-support-and-software/download-software/device-software-update Nokia Software Updater].

links for 2009-11-16

real-time mbta bus location + google maps mashup

This weekend I read that the MBTA and Massachusetts Department of Transportation had released a trial real-time data feed for the positioning of vehicles on five of its bus routes. This is very important data to have, and while obviously everyone would like to see more routes added, it’s a start.

I decided to hack together a mashup of this data with Google Maps, to see how easy it would be. In the end it took me a few hours on Saturday to get the site up and running, and a couple more on Sunday adding features like the drawing of routes on the map, colorizing markers for inbound vs. outbound buses, and adding reverse geocoding of the buses themselves.

MBTA Real-time bus info

To do this I used three technologies (Google App Engine, JQuery, Google Maps) and two data sources (the real-time XML feed and the MBTA Google Transit Feed Specification files).

Google App Engine

App Engine is so perfectly suited for smaller, playtime hacks like this that it’s hard to imagine how anyone got anything done before it existed. The tedious, up-front bootstrapping that is required in so many programming projects has been enough to completely turn me off to small, spare-time hacking projects on occasion in the past. The brilliance behind a hosted software environment is obvious, but the amount of work to build a safe, hosted system with a fairly comprehensive set of APIs seems to be such a mountain of work that in many ways I find it surprising that anyone — even, perhaps especially, Google — built it at all.

I chose the Python SDK and the programming was straightforward and easy. It takes some elements from Django, with which I am familiar from work.

JQuery

A no-brainer. Hands down the best JavaScript toolkit available. Making the AJAX calls to get route and vehicle location information was a breeze, and the transparent handling of the XML data of the real-time feed prevents me from losing the will to live — a common feeling when dealing with XML.

My only complaint is with the documentation. While the API reference is good for any given piece of the API, the examples are a little light and there is absolutely zero cross-referencing to other parts, especially ones not a part of JQuery itself. It was not obvious, for example, how to deal with the XML document returned by the AJAX call. It sounds like the docs are getting some work, though, so this will hopefully improve.

Google Maps

This was my first endeavor with the Maps API, and it’s good. It’s not the best API in the world, but it’s hardly the worst either. Adding markers of different colors is annoying, but not so onerous as to make it tedious. The breadth of functionality provided is impressive, but then again it has been around for a few years at this point. Markers are easy to add, drawing the route map is absolutely trivial with a KML file, and even the reverse geocoding — which gives you a street address given a latitude/longitude pair — is straightforward.

The docs suck, though. There’s no indication that a size or anchor position is required when creating an icon for a custom marker — required for colors other than red — and due to the minified JS files tracking down that error took longer than any other task in the project. Reverse geocoding mentions that a Placemark object will be returned, but that class doesn’t appear anywhere in the reference documentation.

Real-time feed data

Lots to like. Straightforward, easy to parse. It’d be nice if I didn’t have to do the reverse geocoding to figure out what the street address is, but it’s not a dealbreaker. Main downside is that it’s XML as opposed to JSON. And of course, it’s only 5 bus routes and zero subway and commuter rail routes.

MBTA Google Transit Feed Specification files

A comprehensive set of data describing every transit route, every stop, and every route in the MBTA system. An impressive set of data encoded in a format designed for Google Transit. There is a set of example tools to view and manipulate this data, and one of those translates this data into a KML file for use with Google Maps. I should have tweaked the tools to output only the KML for the routes I cared about, but I did this by hand instead… not a big deal for only 5 bus lines. These KML files are fed into the Google Maps API to display the route as a blue line on the map when selected.

POKE 47196, 201

This is what a lot of programming is like now, for better and for worse.

On the one hand it is the perfect example of high-level component-oriented programming. Data is formatted in easily parseable interchange formats and plugged into well-defined interfaces. These interfaces plug into other interfaces. The result is a zoomable, pannable map with real-time bus location information that updates every 15 seconds. The lines-of-code count is around 100 including both Python and JavaScript. With a few hours work, I built something modestly useful out of nothing. I stand on the shoulders of giants.

On the other hand I didn’t really build anything. This is just assembly line programming. It was not a particularly creative endeavor, and it wasn’t challenging intellectually. Anybody could have done it. It’s cool, but there is little sense of accomplishment in the end product. It feels a little hollow.

Which is not to say that I didn’t enjoy it, or that it wasn’t worth the effort. I learned new technology, I played with software and data that I hadn’t had the opportunity to before. I broadened my horizons, however slightly. And it got me to write this blog post.

I’m not done yet!

A year ago, I was honored to be voted in as a new member of openSUSE’s Community Board.  That election had a stunning 75% voter turnout, and to have been a part of that historic occasion which also marked the beginning of the very first-ever community elected Board.

A lot of things have happened in the past year and openSUSE continues its momentum in becoming a more community-driven project.  Our stake in openSUSE has become more and more significant and our need to be continually involved in this great Project of ours is ever-more important.

I have not been able to complete all of my goals for the Board and the Project because it was, quite obviously, a building year for all of us.   But know this, my commitment and dedication to the Project remains as strong as ever.  And I intend to continue to push my initiatives, which in fact, are your initiatives so that we can continue to be proud of the product of our work.  Yes all of us work together on this.

My first term, a one-year term, is now coming to an end.  But, I’m not done yet.  I am now officially and formally announcing my candidacy for re-election to the openSUSE Board for a 2-year and final term.

I promise you, in the coming weeks, I will continue to blog and discuss my positions, and my accomplishments/tasks leading up to the election.  I have had the wonderful opportunity to meet many of you at the recent openSUSE Conference in Germany who have gotten to know me and my positions.  And I’m looking forward to meeting and talking to more of you all in the future, including many of our newest members of openSUSE.

Thank you, and may we once again have a very exciting and productive election cycle.

Bryen M Yunashko
openSUSE Board Member – 2008 – 2009
Candidate for openSUSE Board Member – 2009-2011

Feeds