March 20, 2010

Zeitbutton (More realistic than the Nautilus stuff)

So David C dented about Zeitbutton

#

Funny thing is … We support this functionality already as in “Get files commonly used with the other files”

In this case it would be “Get files most used with Recently Open Files”… It is just a WM hack as far as I know…

You can test the functionality with Zeitgeist(trunk) and GAJ(trunk) by right clicking an item in the journal and asking for “More Information”….

Lets make it happen… Thanks Dave for the inspiration…

March 19, 2010

new...

yay, gnome was accepted as an organization for google's summer of code 2010! if you want to help us judging applications and/or to be a mentor go to http://socghop.appspot.com/ and sign up.

remember to continue to add awesome ideas to our ideas page!

students, feel free to hang around in the #soc irc channel, on the soc mailing list and to contact the people you want to work with during the summer!

Two Ubuntu Community Team Intern Opportunities Available

Today I am pleased to announce two fantastic opportunities for two enthusiastic, motivated and energetic folks to come and join my team for a six month internship. You will join Daniel Holbach, Jorge Castro, and David Planella as team-mates and report to myself as honorary horse-folk, working on awesome solutions to help make Ubuntu an ever more compelling community to be a part of.

This is a fantastic opportunity to work inside a fast-paced, collaborative environment, solving important problems, working with awesome colleagues and adding Canonical as a rocking reference to your resume.

Before we get to the details about the roles, I want to be clear on a few general elements:

  • These are internships: they are are not normal full roles.
  • Like most internships, these roles are unpaid.
  • Each role lasts for six months.
  • Working hours are Mon – Fri from 9am – 5pm.

I want to be clear that my team is a fast-paced, hard-working, hectic environment. I am going to work you hard, and you should expect that, but my goal here is to help you squeeze every ounce of opportunity out of your internship. We will have 1-on-1 weekly calls, I will help guide you on what to work on, help you manage your work, solve problems, and be effective in your projects. In other words: when you sign up for your internship, expect a solid six month adventure, but an adventure that will sow the seeds for many great opportunities in the future.

So, I am looking for two roles:

  • Ubuntu Community Documentation Author (Internship)
  • Ubuntu Community Web Developer (Internship)

Let’s take a look at the job descriptions:


Ubuntu Community Documentation Author (Internship)

Job Title: Ubuntu Community Documentation Author (Internship)

Reports to: Ubuntu Community Manager

Job Location: Home with some travel engagements.

Job Summary: To produce documentation and online materials for the Ubuntu community and new contributors.

Key responsibilities and accountabilities:

  1. Produce a series of well-written and clear materials about a range of different topics in the Ubuntu community surrounding how to participate.
  2. Make these materials available on line and ensuring they follow style and quality guidelines.
  3. Work with the Ubuntu Documentation Team, Learning Team and Ubuntu Manual project to liaise around collaboration and best practise for materials production.
  4. Promote and raise awareness of this documentation inside and outside the Ubuntu community.
  5. Identify common needs and requirements for materials, prioritize them and build them into your workflow.

REQUIREMENTS

Specific Job Skills: Excellent writing skills, strong networking and social networking skills, good relationship building abilities, process driven, able to manage multiple work streams, good prioritisation, independent, willing to travel potentially 25% of their work time, and able to resolve conflict.

Experience: Experience of working with community in Ubuntu and Open Source projects, experience of the upstream/distributor relationship, technical experience.

Key Qualities: Have strong social skills, a good networker and a good technical knowledge of Ubuntu and the Open Source and upstream/downstream development process. Candidates should be process driven, strategically minded and committed. Competent visual design and artistic talent is highly desirable. Other: Candidates should provide evidence of existing experience and work in the Open Source community and suitable references.


Ubuntu Community Web Developer (Internship)

Job Title: Ubuntu Community Web Developer (Internship)

Reports to: Ubuntu Community Manager

Job Location: Home with some travel engagements.

Job Summary: To design and develop web functionality across a range of Ubuntu community infrastructure web properties.

Key responsibilities and accountabilities:

  1. In conjunction with the team and the community, design new features and solutions for specific needs in our key web properties.
  2. Develop and implement such features and solutions using a range of appropriate tools.
  3. Provide solid testing and quality assurance over your work during the development phase and before deployment.
  4. Triage, fix and deploy bug fixes.
  5. Work with the community to collaborate together on projects and solutions.
  6. Report your progress to the team and the wider community.
  7. Be responsive to changing needs, emergency fixes and feature requests and be reactive to a range of different customers.

Requirements

Specific Job Skills: Excellent web development skills (Python, Django, PHP, HTML, CSS and Database experience are a must), good experience of Launchpad, Bazaar and Ubuntu community infrastructure, strong networking and social networking skills, process driven, able to manage multiple work streams, good prioritisation, independent, willing to travel potentially 25% of their work time, and able to resolve conflict.

Experience: Experience of working on collaborative web development projects in Python, Django and PHP, strong development experience over a range of projects, experience of working with community in Ubuntu and Open Source projects.

Key Qualities: Excellent developer, strong social skills, a good networker and a good technical knowledge of Ubuntu and the Open Source and upstream/downstream development process. Candidates should be process driven, strategically minded and committed. Competent visual design and artistic talent is highly desirable.

Other: Candidates should provide evidence of existing experience and work in the Open Source community and suitable references.


How To Apply

If you are interested in applying for these roles do not contact me directly, you should follow these steps:

  1. Ensure you have a recent, up to date resume (in PDF or OpenOffice.org format) that outlines your experience, education, your community achievements, technical background and information about your interests and ambitions.
  2. Send an email to alice.paul AT canonical DOT com with the subject Community Team Internship Application and the following details:
    • Specify which role you are interested in.
    • Your resume attached.
    • A few paragraphs about why you would like to have the role.

Good luck and I will speak to some of you soon in an interview!

Sugar with better Telepathy

After three weeks of little coding but much reading, a reward:



This shows the Chat activity talking to Empathy through link-local xmpp. This was already possible, but the difference now is that Chat is a normal telepathy client, and it has been activated by dbus as would be any other telepathy-enable application in GNOME, Meego or whatever.

The current code is very sketchy, but we are starting to get a good sense of the next challenges. If you are interested in knowing why this is important, see my previous post.

Progress can be followed in this page.

The state of Planet-A11y

As many of you know, the state of Planet-A11y.net has been in disrepair for quite some time.  But fear not, we’re finally on the path to greatness.  My new server to host Planet-A11y is now ready and we’ll be installing the software to aggregate feeds from the contributors of Accessibility (A11y) soon.  On Monday, my co-maintainer, Flavio Percoco and I will stage our own mini-hackfest

This will get us up and running on a stable server and have the feeds aggregated on a regular intervals.  I’ll update you all here when that is done.  But that’s only the beginning of what we need to do.  The next steps we need to do is to ensure the site is accessible and looks good.

One of the problems we’ve had in the past with the existing Planet-A11y.net is that while our site met W3C validations, many of the feeds we imported did not.  And as soon as someone’s site got imported into our pages, it turned our site into !FAIL, which was a definite black eye on a site that promotes accessibility!  We’re going to put in more stringent controls to keep that from happening again, which means more work on our end.  But, an inaccessible accessibility site can no longer be considered acceptable.

The other thing we’ll be looking to do is work on the theme and create a logo that is special to Planet-A11y.  Artists and designers are welcome to come on board to hone their craft on our site.  Again, I’ll let you know when we’re ready for that step.

So hang on folks!  Planet-A11y is NOT DEAD, just merely hibernating.

Humans Only

Alex and I just released the fourth episode of Hacker Medley, called Humans Only.

It’s about CAPTCHA and it’s our first try at integrating interviews into the podcast. It’s also our first long podcast – weighing in at a hefty 50 minutes of documentary-style goodness.

Our format is inspired most heavily by shows like Planet Money and This American Life. From Planet Money we took the style of weaving the interview clips into the narrative, and opening the show with a clip. From This American Life we took the musical transitions that break up the show into little set-pieces.

Let us know what you think!

GStreamer and Google Summer of Code 2010

So a big thank you to Leslie and her team at Google for also this year accepting GStreamer as a mentoring organisation. Last few years we had some great projects coming out of the Google Summer of Code, including MPEG PS muxing, Quicktime Muxing, ASF muxing, LADSPA version 2, Avisynth, MHEG support and more.

If you are a student and want to get some useful experience while getting paid this summer, developing multimedia software, I think there is no better way to do so than a GStreamer GSoC project, for instance you could help us develop our first native VAAPI elements or any of the other tasks on our SoC project suggestion list.

Of course don’t limit yourself to that list, personally for instance I would love to see some proposals from students interested in extending PiTiVi.
With it being shipped with Ubuntu now and transition support getting merged very soon it is a great time to help userfriendly video editing on linux become a reality. Just be sure to keep it stable as you add your features though as we don’t want join the other efforts out there in the click and crash category ;)

Interested students should check out the Google Summer of code website for details on how the project works and how to sign up.

Please feel free to ask questions on the GStreamer-devel mailing list or on the #gstreamer channel on irc.freenode.net.

Update: Thought I should also link to the Google Summer of Code timeline. As you see the student application period starts on the 28th of March and ends on the 9th of April. Every year I strongly recommend people to get their applications in early as it lets you get more feedback on them and update them to a state where your chances of getting approved is significantly higher. The earlier in the process this happens the more discussion you can have with a potential mentor and thus better are your chances of making your proposal something the mentoring organisation wants to let got forward.
And as a sidenote, on the other end of the scale I should also mention that I seen good proposals which has been dropped as the student doesn’t seem to bother responding to feedback and questions.

2010-03-19: Friday.

  • Avoided mail by re-building evolution master. Poked at a mono uri parsing crasher, odd. Prodded other bugs; system recovery's impact on boot performance etc.
  • Horrified by another d-bus threading issue until I noticed it was one more instance of not initializing the library with threading enabled; why do we even need to do that ? with a demand-launched I/O thread we can have it on all the time with ~no performance impact (like ORBit2).

Twisted training

Today is an exciting day at the office!

Jean-Paul Calderone (exarkun from Twisted arrived in our office this morning to give our development team an in-depth training on Twisted.

For now, the schedule is two days of Twisted training, one day of code sprinting on Twisted, and two days of consulting on our platform and various issues and projects we have.

For us it’s exciting to get a training from one of the top hackers in Twisted, and I hope it is exciting for him to see a commercially successful use of the project he worked on.

But mainly I’m looking forward to a bunch of days of high-level technology talk.

Time to get started!

Only one day left!

Time is ticking away, the deadline for talk submissions for GUADEC 2010 is tomorrow evening (Saturday 20th 23:59 UTC). If you are planning go give a talk there and haven't applied yet, there's no more time for waiting, better to apply now before it's too late! :)

I Love It When A Plan Comes Together

If you haven’t done it yet, you should probably start lobbying your local iMax theater to screen the new A-Team film when it comes out later this year.

After what feels like an eternity of anticipation, the first GNOME Accessibility Hackfest begins next week. To put this into perspective, this won’t be a casual event. It’s a large conference riddled with many sessions of interest, a huge showroom packed with a milling crowd, 14 GNOME a11y contributors trying to get the most done together in the space of a few days,  and countless hordes of cute (yet unpettable) guide dogs.

If you plan to attend, make sure to visit the ever-changing wiki page.

I would like to thank sponsors such as the Mozilla Foundation, for being a steadfast supporter of FOSS a11y in all it’s forms, the Mike and the Paciello Group for help with the venue, and of course the GNOME Foundation. The CSUN organizers have also cut us some slack in a largely expensive event, so thank you organizers.

And thank you Hylke for the awesome logo.

More soon.

March 18, 2010

summer of code is on

yay, gnome was accepted as an organization for google's summer of code 2010! if you want to help us judging applications and/or to be a mentor go to http://socghop.appspot.com/ and sign up.

remember to continue to add awesome ideas to our ideas page!

students, feel free to hang around in the #soc irc channel, on the soc mailing list and to contact the people you want to work with during the summer!

2010-03-18: Thursday.

  • Fasinating progress of the pox across the two babies, we're hoping the other two get it too, to avoid later-in-life problems; but no signs.
  • Amused / saddened by some encouragement from H. (age 7) - "I'm so pleased that you havn't left Mummy yet". Having spotted no signs of impending disaster myself, I imagine this is the over-flow from her peers' repeat horrific experiences of Fatherhood. Tried to re-assure her that no leaving is planned, (beyond sadly hard-to-avoid business travel).
  • Sync with Arjan; J. back late from counselling, off to cell group, later.

Thu 2010/Mar/18

MCUS 0.3.0 released

The main window of MCUS 0.3.0.Just a little note to say that:

  1. I’m still alive, and
  2. I’ve released version 0.3.0 of my microcontroller simulator, MCUS.

It’s had a UI overhaul, and I’ve added accessibility support to the custom widgets (and improved it for the rest of the interface too). It’s primarily intended for use in schools in the UK who teach A-level electronics, but I suppose it could be adapted to work for other purposes. It can be downloaded as a tarball (source), NSIS installer or ZIP package (for Windows).

“Bus” for Bus

I am a bit grumpy right now, so please bear with my ranting…

Do you know what the “Bus” in DBus stands for? It stands for “Bus”. And did you know that the DBus specification defines a “Message Bus”? So it’s a bus on which you can do message passing. But why is it that we try to hide this away trying to fool developers into believing that it’s really an RPC system? – It’s not! Let me put in in italics for you: DBus is a message passing system.

DBus is a wicked cool, relatively easy to use, message bus with all kinds of fancy name-, life cycle-, message matching-, and what-not management. Not an RPC system from the eighties! You can use it as such – with great success I might add, but it’s much more than that.

We as the Gnome community are leaving the olde Corba/Bonobo days behind us. Let’s not blindly choose the next hot RPC system and pretend it’s any better. Let’s embrace the new world order. The massive success of the HTTP protocol, increasing momentum of functional (and/or functional+object oriented) platforms such as Erlang, Scala, Haskell and  F#, and the ever growing adoption of Actor-model like APIs is a sure testament to the fact that we are moving into the era of message passing (I would claim that we are, in fact, already there). We have a powerful message passing framework at our hands – let’s make the most of it.

Phew. I feel better already. Thanks for listening :-)

teddy thompson – tonight will be fine – live

Pretty sure this is a cover of a Leonard Cohen song. Love Teddy Thompson’s version more than the original.

<video controls="true"><source src="http://www.0xdeadbeef.com/~blizzard/weblog-videos/2010-03-18-teddy-thompson/teddy_thompson_tonight_will_be_fine_live.theora.ogv" type="video/ogg"><source src="http://www.0xdeadbeef.com/~blizzard/weblog-videos/2010-03-18-teddy-thompson/teddy_thompson_tonight_will_be_fine_live.mp4" type="video/mp4"><object height="385" width="480"><param name="movie" value="http://www.youtube.com/v/K6BWzYchKeU&amp;hl=en_US&amp;fs=1&amp;"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed allowfullscreen="true" allowscriptaccess="always" height="385" src="http://www.youtube.com/v/K6BWzYchKeU&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" width="480"></embed></object></video>

getting faster at getting faster

Two things of note:

1. The update offer of Firefox 3.6 to users of Firefox 3 and Firefox 3.5 is the first time we’ve ever done an offer to a .0 release to our user base. We’ve always waited until the .1 release or later. We did this because we were able to measure improvements over 3.5 in terms of performance, reliability and add-ons compatiblity.

2. This is the fastest uptake we’ve ever seen. From the metrics blog. Check out the fancy hockey stick:

Basically we’re learning how to get people to adopt and how to drive the release process even faster. We’re also doing this in our beta and alpha channels. We’re doing preview releases of Firefox.next every couple of weeks now, testing out new features and themes and driving the feedback process faster and faster.

It’s a crazy ride.

Upcoming GNOME Marketing Hackfest

Stormy was kind enough to announce our next Marketing hackfest this week while I was out sick. (I’m such a slacker, always have an excuse!)

This hackfest is all about GNOME 3.0 marketing planning, preparation and execution. GNOME 3.0 coming this fall is a huge milestone for GNOME and our role as a marketing team is to have marketing and promotion materials ready to introduce our users to what GNOME 3.0 is and what it means.

The regional governments of Zaragoza and Aragon had previously reached out to GNOME as they are deploying free software within their governments and have kindly offered to help with hosting. Part of our role will also be to discuss GNOME and free software with them.

The hackfest is scheduled May 5th through the 7th and the details are on the hackfest wiki page. You will also find the agenda, hackfest goals and travel information.

If you are interested in coming, please add your name to the wiki page and please review the GNOME Travel policies if you would like to request a travel sponsorship / subsidy.

The first Marketing hackfest late last year was a success and we learned a lot doing it. I’ll be working over the next week or two to make sure all of the previous hackfest work and information is updated and shared. (One thing I learned I could do better!)

Dear the powers that be,

Please could you fix it for me, to have sound working on my MacBook 5,2 when lucid is released. I don’t know if it works yet but I sure hope it does, manual installs get me down :(

kthanksbye :D

Bjarne Stroupstrup on C++0x

I’m just back from Aalto University School of Science and Technology in Espoo, Finland, where I attended Bjarne Stroustrup’s roadshow talk on C++0x. In the talk, Stroustrup provided a very nice overview of the features in the C++ standard and how they fit into the evolution of the C++ programming language.

Bjarne Stroustrup made the impression of a down-to-earth guy with a very healthy attitude about C++ features and their development. I was excited to learn that the C++0x draft standard had just been declared final the week before. That means the content of the standard is de-facto finished now, and it will be formalized as an ISO standard in about one year. There sure are quite a number of nice goodies in C++0x, I can’t wait to get my hands dirty on code using it.

For the C++ groupies among us, I took photographs of all presentation slides and of course also of Bjarne Stroustrup himself.

Another day, another release

It's already three releases after my last post about GNOME DVB Daemon. Since then I tuned the UI to make it more HIG compliant and hide device group combo boxes if there's only a single group. In addition, you can now edit the start time duration of an existing timer. Needless to say, I fixed some crashers, too.

Version 0.1.14 and above replace Totem's own DVB capabilities and hopefully provide a much improved user experience when watching TV. That's why a Fedora package finally exists, thanks to Bastien Nocera.

Unfortunately, I still didn't find the time to update the user guide. Any help in this area is highly appreciated. In addition, GNOME DVB Daemon is still looking for a logo.

You can install the latest version 0.1.16 from the release tarball or install the packages for your distribution, if available.

QML Hype

So yesterday I've skipped the chance to watch some "exciting" QML demos in Helsinki. This was quite surprising to some of my KDE rooted team mates. They didn't understand how I could not show the slightest sign of excitement.

Well, but actually I wonder for months: What's actually the fancy and awesome, the brilliant new, the exciting part of QML? It doesn't seem to be rocket science. It's nothing new. Declarative UIs are done for ages. To name some very few implementations there are Windows and PM/Shell RC files, Glade, GtkBuilder. You want to mix declarations with managed code? XUL and XAML have visited that land. You want to use JavaScript for your UIs? Flash, XUL, Dynamic HTML and Web Widgets, GObject Introspection.

So what am I missing except that Qt finally catches up to its competition? It's a welcome addition, but why should I be overly excited and die of excitement?

Inkscape & GIMP talk at LibrePlanet This Friday!

This Friday, from 2:00-3:30 PM at the Harvard Science Center in Cambridge Massachusetts, I’ll be giving a talk on how to use Inkscape and GIMP at LibrePlanet, the Free Software Foundation’s annual free software community conference.

As you can see, it will be an epic battle. Wilbur will bravely take on the evilly-grinning mountain that is Inkscape. Pixels will fly! Node handles will spin! Who will win? Come to find out! (Or read the slides afterwards. I’ll post them here after the talk.)

Here’s some more information about LibrePlanet:


Filed under: Uncategorized

Yelp and PackageKit

Mallard was designed from the beginning to make it easy for plugins to add pages into application help documents. This works really well in a lot of cases, but sometimes you want to mention extra functionality even when the plugin isn’t installed. And sometimes, extra functionality is provided by plugins to backend frameworks. A GStreamer plugin isn’t going to install Banshee help files, and a Telepathy plugin isn’t going to install Empathy help files.

So we have pages in the Empathy help that talk about using IRC. To use IRC in Empathy, you have to have telepathy-idle installed, and it turns out that some distros don’t install it by default. If the help just blindly assumes it’s installed, it just leaves the user confused. So we addressed this by adding a note like this:

This is somewhat helpful. The user at least knows why all those IRC options aren’t showing up. If he’s savvy, he’ll open his package manager and be chatting in no time. If not, he at least has something to Google for. But why not make it easier?

Click the link and you get this:

This is not a mockup. This is yelp-3-0. And it rocks.

Guessing DVD titles

I just pushed discident-glib to GNOME git, a small library that uses discident.com's service to guess the title of DVDs. They have a database of some 250k DVDs, though the database itself isn't open, and the API doesn't seem to allow submission.

Still a few FIXMEs to go through and API docs to write, and it should be ready to be integrated in your favourite DVD ripper.

Drop me a line if you're interested in using it in your app.

March 17, 2010

This blog has moved

Livejournal seems a bit like a sinking ship...so I jumped off. My new blog is http://blog.verbum.org. (And yes, it sucks that wordpress.com doesn't support <video> yet, I was a bit deceived before I signed up by the fact that wordpress.org does...but I'm hopeful).

WebKitGTK+ 1.1.90 is out!

We’re coming close to GNOME 2.30 release date, and we are getting ready to branch a stable release off of WebKit’s svn trunk in preparation for that. The idea of the stable branch is to try to maintain, and improve stability, with no additional features going in. Speaking of features, though, if you’ve been paying attention you will have noticed WebKitGTK+ has come a long way, now.

We came from not having basic features such as download support or openning links in new tabs, a more-or-less working HTML5 media implementation, and very few or missing in action developers to a thriving project, that gets more, and more attention, and contributors every day, with advanced features available, and rocking HTML5 media support that leaves little to be desired. It’s been just over one year since we started rolling mostly bi-weekly releases, each adding more awesome features.

There are still many issues, and we are not always equipped as a team to handle all the specifics of the engine ourselves, but I am really happy with the progress we’ve made, and really thankful for the support my employer Collabora has given all the way for this to happen, including the early work on plugins, and many other things before my time as a contributor. When I switched to using Epiphany with the WebKit backend as my default browser back in January 2009, that meant having to deal with a whole lot of misbehaviour, and work-around a lot of painful brokeness. These days I enjoy a snappy, functional browser that makes me happy.

If you haven’t done so yet, go download, and test the newest Epiphany, with the latest WebKitGTK+, and help us make the GNOME 2.30’s web browser rock even more!

True or false?

Let’s discuss this abstract quote about mailing lists:

<quote>
At the end of the day, there are some people who deserve to be unpopular and we have no way to do that.
</quote>

– Luis Villa March 17 2010, on his blog

Hot on the heels of the previous tarball

A quick note, dbus 1.2.22 is out, see the release announcement. OS vendors should use this for GNOME 2.30.


I also wanted to give a shout out to the cool patch from GNOME Shell contributor Maxim Ermilov, which lets you drag and drop windows from the "linear" workspace view, by temporarily zooming out. We had this in the "grid" view for a while, but hopefully this functionality will let us focus on making linear the central view.


Maxim did this in a few hundred lines of JavaScript. I've noticed a distinct lack of contributions from some of the old-school GNOME hackers, and I'm just saying...if he can do it so easily, well, you guys are getting schooled by the new kids on the block.


Video: <video controls="controls" src="http://people.gnome.org/~walters/shell-20100317b-1.ogg">Non-HTML5 browser link</video>

Working hard at the Tracker project

Today we improved journal replaying from 1050s for my test of 25249 resources to 58s.

Journal replaying happens when your cache database gets corrupted. Also when you restore a backup: restore uses the same code the journal replaying uses, backup just makes a copy of your journal.

During the performance improvements we of course found other areas related to data entry. It looks like we’re entering a period of focus on performance, as we have a few interesting ideas for next week already. The ideas for next week will focus on performance of some SPARQL functions like regex.

Meanwhile are Michele Tameni and Roberto Guido working on a RSS miner for Tracker and has Adrien Bustany been working on other web miners like for Flickr, GData, Twitter and Facebook.

I think the first pieces of the RSS- and the other web miners will start becoming available in this week’s unstable 0.7 release. Martyn is still reviewing the branches of the guys, but we’re very lucky with such good software developers as contributors. Very nice work Michele, Roberto and Adrien!

Why We Develop With Panther

People are pretty passionate about their development tools, we found something that works for us based on our needs. Maybe if you are in the Government or Business segments, this information will be useful.

The development tools on Linux most commonly in use are great for writing 'desktop applications'. Want an email client? Use C. Want a note taking package? Use Mono. But those tools are not a good fit for our needs. We want to quickly connect to a database, drop and drag fields out, give the users a simple grid and entry system; and then give them quick reports. We always say that the type of software that we write boils down to "enter, list, sort and print". When we get a request, they usually want it finished quickly, and we don't want our staff debugging garbage collection, threads, compilation and fighting every widget interaction. Our custom software isn't as complicated as Firefox or Evolution, and does not need low level languages. We also want it to run on Linux, and carry no runtime licenses.

The other big issue for us is portability and server upgrades. When an operating system or hardware becomes obsolete, you don't want to spend a time messing with stable software trying to get it to work correctly on a new box. It's much easier to just tar it all up and move it over and it just *works*. Sometimes too you move to new operating systems. All of our software started on SCO Unix and then moved to Linux, and we didn't want to have to recompile and debug working applications during that transition. Lastly, when database upgrades and changes come we didn't want to have to touch the software yet again and fight library interactions.

So how did we obtain these goals? We are using a software package called Panther from Prolifics. The way that it works in a nutshell is that when you develop, you are writing GUI layout instructions and logic code into the 'client.lib'. This file itself does not execute and is highly portable. You then get a 'prorun' binary from Prolifics for whatever platform you wish to deploy on, and it converts your UI instructions into native widgets of the current operating system. It's super fast, with a small memory footprint and serves us well.

This image shows how software is deployed with Panther. You develop your screens on any platform, and a runtime engine on other operating systems instantly convert your screens to that platform.


I built a very simple (blingless!) screen to demonstrate. Here is a shot of the development environment running on Linux/X.




Once your screen is finished all of your instructions are stored in client.lib. You can then pass it to the prorun binary for various platforms unmodified. I do want to be clear that you do of course have to make considerations for the real estate of the various platforms. But Panther does a good job of adding scroll bars to screens when they don't fit. Making this work becomes kind of a art form, and is elegant.

Here is the screen running in Linux/X




If you unset DISPLAY, it instantly runs in character mode. It replicates the widgets as closely as possible, and on a workstation with a mouse, you are able to click into fields and activate the pulldown menus.



They have a prorun (jserver) process that can go into the cgi-bin directory of your web server and once called converts the client.lib into HTML. Your screens are instantly on the web, unmodified. In theory you could NFS mount the client.lib file and run the same code on MS WIndows, Linux/X, Linux/Character and on the web. Any changes you made instantly were deployed to all users.

Here is the screen running in the webserver.



(( I don't have prorun for MS Windows, but emailed my client.lib to Prolifics, and requested a screenshot. I'll post it here ))

So for the last few months I have been working with our Integration staff in making Panther fit better into the GNOME desktop. Artwork is being upgraded and all hard coded colors are being removed. GNOME themes automatically set old school X resources as closely as possible to the right colors, which Panther picks up nicely. These steps along with anti-aliased fonts in newer versions of Motif have allowed us to deliver better looking software. The shots below demonstrate a deployed screen, with colors picked up from GNOME theme.








Linux is a wonderful runtime environment for running custom in-house software, and maybe this post has given you some ideas for your own organization.

The GNOME Census project

I’ve been working on a project for the past few weeks, and it’s time to take the wraps off.

For as long as I’ve been involved in GNOME, we have been asked the same questions over and over again: How many GNOME developers are there? Which companies invest in GNOME, and how much? Where can I go for professional GNOME development services? And for as long as I’ve been involved in GNOME, the best answer that we can give is pretty hand-wavey – we talk about hundreds of developers, thousands of contributors, the advisory board, an ecosystem of expert independent companies, but we never do get around to putting meat on the bones.

I decided that we should do something about that, and so for the past few weeks, an intern called Vanessa has been working to help me dissect the underbelly of the GNOME project.

What is the GNOME Census?

We’re aiming to answer three questions as completely as we can:

  • Who develops GNOME, and what do they work on? What does the GNOME developer community look like? How many GNOME developers are there?And how many contributors doing things other than development?
  • What companies are investing in GNOME, and how? Are there modules where companies are co-operating, or have contributing companies been concentrating on disjoint parts of the project?
  • Finally, if you’re a company looking for expert developers for custom GNOME development, where should you go? What does the commercial ecosystem around the GNOME project look like?

We’ve been using tools like gitdm, cvsanaly and artichow to get some nice quantitative data on modules in GNOME git and freedesktop.org repositories. We will be running a survey of GNOME developers, and doing one-on-one interviews with key people in the GNOME commercial ecosystem to go beyond the figures and get some qualitative information about future plans and priorities as well.

So why take on the project?

Well, it seemed like fun. Answering interesting questions is always challenging and interesting. And it also seemed useful – if people are always asking for this information, there must be a reason they want to know, right?

Financially, this is an investment. I am paying Vanessa to help with the study, and it is taking a lot of my time. I initially looked for a sponsor for the project, but reaction was tepid, no-one wanted to bear the full cost of the report, but everyone I spoke to agreed that it would be useful and they would definitely like to have a copy when it got done. So I hit on the following idea for funding the project:

When the report is eventually available, I will be selling some copies to recoup costs. When I have sold a sufficient number to cover the cost of the project, I plan to release the report under a Creative Commons license. Those who are eager to get the results and information sooner rather than later will subsidise the availability of the report for everyone. I have submitted a proposal for GUADEC to present the conclusions of the report, and I anticipate that it will be available under a free licence by then.

Who’s the target audience?

ISVs are interested in knowing how active projects are before committing resources. The GNOME Census will help reduce the uncertainty when choosing GNOME as a platform. GNOME distributors will be able to leverage this report to show the vibrancy, size, activity and commercial ecosystem around the GNOME platform. For companies who have been long-time investors in GNOME’s success, the census will give them well-deserved recognition, especially in areas where that investment has not been very end-user visible, but has had a huge effect on the quality of the user experience. Finally, for companies building software platforms on top of GNOME, and for companies in the GNOME commercial ecosystem, this report will allow swift identification of service providers with a high credibility level through their involvement in GNOME and the core developers who are working for them.

So what now?

We will be launching a survey this week asking GNOME developers who they work for, and whether they have worked for other companies previously – because of the widespread use of gnome.org email addresses in GNOME, unfortunately it has not always been easy to identify companies behind the people. We also want qualitative information on projects you work on, whether you work on GNOME in your free time, and more. We are be breaking down GNOME development by core platform, external dependencies, GNOME desktop, GNOME hosted applications and other GNOME applications. Vanessa will be sending out a very short survey to everyone who has committed to GNOME, and we need your help to make the census as useful as possible to the GNOME project.

Thanks for your help!

It’s Paddy.

Not Patty.

GNUnify’10 etc

I wasn’t able to spend too much time at GNUnify10 – a weekday came in and, then there wasn’t enough time to do anything. A couple of things did strike me though.

  • The profile of the attendees was different from last time. If the organizers talk about the demographics, this observation might be validated but I got the feeling that the crowd was more of professionals than students
  • The event has introduced diversity and, that is a good thing to have
  • There have been new speakers as opposed to the “same old faces” talking
  • There were elements of avid interest in things Fedora where the speakers were enthusiastic and participated in rapid Q/A

I liked what I saw. Including Shreyank’s enthusiasm to not get off-stage till the “download link came up” :)

One of the things that I’d hoped would happen at the event is that the group of Fedora folks who met would sit down and discuss their goals for this year. By goals I meant the stuff they would be focussing on and, more importantly, how they would be measuring their achievements. I don’t know how much was discussed along these lines but it is a good time to start doing it. Keeping the focus on a few important things and then creating easy-to-visualize ways of looking at the achievements allow the contributors to assess themselves. Self-assessment goes a long way in removing any perceptions of anonymity that might be lingering on. And, it also creates a sense of involvement – of belonging.

The other important bit this would achieve is that it would make the developers more visible and approach-able. For too long I have seen developers have an aloof or, stand-offish approach to their projects. And, it isn’t because they are arrogant but perhaps it is their trait. Unfortunately, “they will contribute if they figure out that the project is good” isn’t a nice approach. Going upfront and talking about goals, plans and in general doing advocacy allows potential contributors the confidence to tinker with the code and, start contributing. Building up the confidence to tinker not because it is “good for the nation” but because it is “good for oneself” and, is profitable is a concept that needs to be repeated over and over again. The students aren’t rolling up their sleeves enough and, it is an urgent need to exhort them to do it. The world is moving forward at a fairly fast clip and they cannot take comfort in the “learn-by-rote-to-join-TWITCH” way of life in the various colleges across the country. In money terms as well as in time and effort an enormous quantity is invested in students, that shouldn’t go to waste.

The others have already blogged about the event, I’m waiting for Hiemanshu’s writeup.

Posted from GScribble.

Mailing lists are parties. Or they should be.

I can’t go to bed because Mairin is right on the internet and so I want to (1) say she’s awesome and (2) add two cents on mailing lists and using the power of a web interface to make them better. Bear with me; maybe this is completely off-base (probably I should just stick to law), but it has been bouncing around in my head for years and maybe me writing it down will help the lightbulb go off for someone who can actually implement it :)

Here is the thing: I think mailing lists are almost like parties in a lot of ways, and so we can steal ideas from parties to help write better mailing list software. I know this sounds silly, but bear with me.

First, the similarities. At most parties, like most mailing lists, most people want to have interesting conversations, and they understand the shared social standards and interests of the other people at the party. And at most parties and most mailing lists there are a handful of people are boors who probably don’t want to spoil the party, but who violate those shared norms- some in very mild ways (boring, talking too loud, posting too much), or maybe some less mild (the guy who doesn’t think he’s a racist, but really is.)1 If you’ve got similar mixes of people, why then do parties usually handle boors well, while mailing lists often fail and flame out?

At a party, one thing that helps keep conversations functional is that people who lack social graces or are uninteresting get social cues which encourage behavioral change. Sometimes these cues are very explicit- someone saying out loud ‘you’re not interesting, I’m leaving.’ But those direct cues are a pain to send- they are usually considered ‘rude,’ they require a lot of emotional energy, and they often mean more interaction with the boor- which is the last thing anyone wants. And blatant signals are often counter-productive too, since they make well-intentioned people defensive instead of giving them a face-saving way to learn they have a problem. Since direct signals are a pain, at parties we’ve evolved a range of more subtle cues to use- people cough and shuffle their feet, or quietly move to another part of the room, or say ‘how about the weather?’ And this actually works pretty well- worst case, people walk away from the boor and have good conversations elsewhere; best case the boor gets the message, changes their behavior, and becomes more fun to be around.

Mailing lists have no low-cost equivalents to coughing and walking away. There is only silence, or confrontation. Mairin’s mockup excites me since, if implemented, it could provide those more subtle, less confrontational cues by allowing ‘-1′ digg-style votes on posts. You could imagine making the cues even more subtle and non-confrontational than she suggests, perhaps by sending positive cues to everyone but negative cues anonymously and only directly/privately to the boor.

Another way that parties and mailing lists aren’t enough alike: in a party, if you are part of a boring conversation, you just walk away. Besides giving the social cues already discussed, this also has the awesome effect of allowing you not to hear that conversation anymore. In contrast, a mailing list is like a party where you can’t walk away from a conversation. You hear every single conversation whether you like it or not. Some of the best email software allows killing entire threads, but that doesn’t give the social cue to the boor. They think everyone is paying attention and so they keep talking. And for people with less good email clients (most of us), the options are to just tolerate the boors or leave the list altogether. Imagine if you had to leave every party that had even a single boring conversation. You wouldn’t go to many parties. That is what most mailing lists are like, though.

We can fix that. You can easily imagine mailing list software that allows you to tell the server ‘don’t send me this thread anymore.’ As a side-effect, if enough people ignored a thread, you could tell people posting in the thread that ‘X people have walked away from this conversation- maybe you should take this off-list?’ These would probably both require a fair bit of hacking, but it seems like the upside is a more party-like list.

On the more positive side (Mairin said she liked to focus on the positive!), at a party it is easy to find the good conversations. Just wander around the room at any decent-sized party; you’ll see a tight knot of people and hear they are talking excitedly. Can’t do that with a mailing list; you’ve got to at least start reading every thread. Once you know which threads people like (maybe via a ‘like’ link in the footer?) you can offer a party-like ’subscribe only to threads that already have a crowd.’ Twitter/identica sort of do this through the idea of retweets/repeats; you don’t have to follow everyone on earth- some people will just pass the cool stuff along- and that seems like it could be pretty useful for mailing lists.

Note that virtually none of these behaviors require browsing the email through a web interface or a specialized mail interface. All of them could be implemented by ‘click here to mod up/click here to mod down’ links in the footer of each email, so people who live in their mail clients could still participate and benefit, which I think is a must.

Bottom line: Software can’t save a mailing list full of people who actively dislike each other. Maybe I’m crazy, though, but it seems like software that helped mailing lists function more like parties could really help mailing lists cope better with anti-social people.

  1. There are only a small number who are actively malign and I’ll ignore them for the purposes of this post- if you have too many of them on a list, you have problems software can’t solve. That said, the analogy may have some use in dealing with trolls too.

The Cove

We just got back to San Francisco. We rented an apartment for a month, and I’m stealing wireless from a neighbor. And I just ordered Mexican food.

On the flight here I watched The Cove. This is a really well-made documentary about a town in Japan called Taiji where local fishermen secretly slaughter tens of thousands of dolphins every year.

The filmmakers smuggled in hidden cameras and hydrophones and managed to capture the killings on camera, despite being dogged by the local police.

Last summer when Stephanie and I were scuba diving in Rangiroa, a pod of wild dolphins swam into our group. They hung out with us for a couple of minutes, swimming around and under and above us in tight, playful loops. It was obvious they wanted to hang out and they came back several times during the dive. I could hear their clicking noises and knew they were imaging me with their sonar.

We saw a lot of life under the sea but when a wild dolphin swims up to you, you get this instant sense that you’re looking at something person-like. It’s like the feeling when someone smart and charismatic walks in the room. It’s nothing like looking at a fish.

So The Cove moved me. Check it out.

Django Developer Kit Appliance: First Steps

I’ll make it quick so I can go back to watching TV:

Announcing my first attempt at a generic Django Developer Kit, a CentOS (powered by rPath’s conary) based software appliance with all you’d need to run a Django project.

Django Developer Kit

Django Developer Kit Appliance

The current images are built on the development stage, which means it includes the very latest Django 1.2 code line straight from the subversion repository. Currently, the following packages make up the base appliance:

  • django
  • django-ajax-selects
  • django-authority
  • django-cache-memcached
  • django-contact-form
  • django-db-postgres
  • django-filter
  • django-notification
  • django-pagination
  • django-piston
  • django-profile
  • django-sorting
  • django-tagging
  • django-threadedcomments
  • file
  • gettext
  • httpd
  • less
  • mod_python
  • mod_ssl
  • mod_wsgi
  • mx
  • openssh-clients
  • openssh-server
  • openssl
  • PIL
  • postgresql-server
  • psycopg2
  • python-ctypes
  • python-markdown
  • python-memcached
  • python-urlgrabber
  • PyYAML
  • scgi
  • sendmail
  • south
  • sqlite
  • sudo
  • tar
  • vim-enhanced

I’m still working out the kinks and have decided to not include openssl by default until I have a generic way of generating a certificate for the appliance. I will also be adding tools such as git, mercurial, etc so that people can use the appliance as a testing lab/environment for their own projects.

Once you’ve either installed the appliance or launched on EC2 or ESX, make sure to visit your appliance’s htts://IP:8003 address to configure the administrative interface (log in as admin with password as your password). Then click the Updates plugin to get updates as I will be making changes between now and the time I publish this post.

Download it today!

A rich web interface for mailing lists

Luke Macken and I had a little mini hackfest today on improving collaboration in Fedora. This is an idea we came up with this afternoon and I mocked up most of it on the bus ride home tonight. (A 2-hour bus ride home as the post-Boston-flood road conditions and traffic during rush hour were really bad tonight.) Luke already has a working prototype :)

What do you think? The Inkscape source is of course available so please feel free to try out your own ideas and play away and bounce them back! These are some random, off-the-cuff points about some of the ideas behind the mockups to help give some context. I’m likely missing a lot of good points here so I apologize in advance for my sloppiness:

  • threads are flattened to one level to make it simpler to follow
  • both the number of participants and number of comments are noted
  • posts have ratings to discourage one-liner “me toos” replies and also to make quality discussions more visible. not sure though which scheme is best, what do you think?
    • showing a single number which is the positives and negatives added together (digg style)
    • showing two numbers, one for the number of positive comments, one for the number of negative comments
    • having a up-to-5-star rating system, and displaying the average number of stars (like rhythmbox does for songs
  • aggregate statisics provide more insight on the topics and people involved in a list
  • threads are categorized and taggable
  • you can favorite threads to keep them in a favorites list (maybe across different mailing lists)
  • it’s hard to know a person’s signal-to-noise ratio on a mailing list. maybe the number of positive comments a user’s posts have received could contribute to a karma level which could elevate that person to some list of people affiliated with the list who are respected. (maybe have a troll bucket too? but i don’t like accentuating the negative)
  • would be nice to have a historical archive of the most interesting/popular/etc threads of all time. right now if it’s old enough it’s basically lost forever, because it’s too much effort to dig through the archives.
  • there’s a lot of interesting data/stas about mailing lists we don’t make use of… how many people are listening when i write a post to say Fedora’s devel list?


Filed under: Uncategorized

March 16, 2010

Ubuntu Global Jam: Time To Rock The House

As many of you wonderful people of the Internet should be intimately aware of, the Ubuntu Global Jam takes place from the 26th – 28th March 2010. That is only a few weeks away, and while we have some great events already set up, we need more!

I just wanted to highlight how simple it is to put together an event. I explained much of this in my recent live videocast today:

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" height="386" id="utv80034" name="utv_n_992283" width="480"><param name="flashvars" value="loc=%2F&amp;autoplay=false&amp;vid=5495004"><param name="allowfullscreen" value="true"><param name="allowscriptaccess" value="always"><param name="src" value="http://www.ustream.tv/flash/video/5495004"><embed allowfullscreen="true" allowscriptaccess="always" flashvars="loc=%2F&amp;autoplay=false&amp;vid=5495004" height="386" id="utv80034" name="utv_n_992283" src="http://www.ustream.tv/flash/video/5495004" type="application/x-shockwave-flash" width="480"></object>

Can’t see it? Watch it here!

I was keen to summarize much of the key points here though so this post can be linked to so we can spread some best practice around how easy it is to put together an event.

Ubuntu Global Jam events are simple events designed to get Ubuntu users and contributors in the same room to work together and contribute to Ubuntu. This can happen through any means: testing, documentation writing, working on a LoCo team, development or whatever else. The key focus here is on getting people together and having fun with Ubuntu.

Let’s look at how to put together an event. :-)

Step 1: Pick a date

The Ubuntu Global Jam takes place on three days:

  • Fri 26th March 2010
  • Sat 27th March 2010
  • Sun 28th March 2010

The first step is to pick a date for the event to happen. There is no fixed time of how long a jam should be it: it could be a few hours or a few days: it does not need to take place on all days. Just pick the times that work well for you. :-)

Step 2: Pick a venue

The next step is to pick a place to hold your event. One of the misconceptions about global jam events is that they need to be big, professional, full-on events. Not at all! Many are simple, low-key events that are pretty much like most LUG meetings: a group of Open Source fans getting together to have fun and work on Ubuntu together.

When choosing a place I recommend you ensure the following are available as a bare minimum:

  • Enough seating for ten or so people.
  • An freely available Internet connection.
  • Optional but preferable is access to refreshments (e.g. in a coffee shop).

A few great options for venues are:

  • Coffee shops
  • Bars
  • University/school buildings
  • Restaurants
  • Homes
  • If it is a nice day, what about a picnic at a park? :-)

Importantly, you often don’t need to inform the venue that you are going. Just choose a venue (e.g. a coffee shop) and just show up like any other day.

Step 3: Add your event

The next step is to add your event to the list of events that are going as part of the Ubuntu Global Jam.

We are in the process of moving over to our dedicated LoCo teams LoCo directory but as we are in a transitional period, we are also asking LoCo teams to list their events on the old wiki page too. As such, to add your events just follow these instructions:

The LoCo Directory

To add an event to the LoCo directory you will need to be a member of your LoCo team in Launchpad.

  1. Go to http://loco.ubuntu.com and in the top right on the page, log in.
  2. Click the Venues link.
  3. Check to see if the venue you are holding your event at is in the list. If not, click the Add new venue link and add the venue to the system.
  4. Click here to straight to the page to add a new event. On that page, click on the team that the event will be happening as part of and then fill in the form. Be sure to select Global Jam in the Related Global Event drop-down box.

The Wiki Page

Simply go to this page and add your event to it.

Step 4: Build some buzz!

Now is the time to spread the word about your event and encourage people to come along! Here are some ideas:

  • Be sure to tweet/dent, and post on Facebook about the event. When you add the event to the LoCo directory you will have a link to point people at (e.g. my event’s link is this) – send multiple messages to remind people of the event and keep it upfront in their minds.
  • Blog it – particularly if your blog appears on one of the planets.
  • Post to your LoCo’s mailing list – let them know about the event, when it is and where it is.
  • Post to local LUG mailing lists – let your local LUGs know: many people may want to come along and join the event!
  • Put up fliers – fliers in libraries, computer shops, universities and at the venue itself are great ways to get people to join you.
  • Website buttons – why not create some website buttons so attendees can put them on their website and link to your event page in the LoCo directory.

And that’s it! If you have any questions, here are a few useful resources:

  • Mailing List – this is where the LoCo community discuss general LoCo related topics. In most cases cases teams have mailing lists too.
  • #ubuntu-locoteams on Freenode – this is an online discussion channel where you can ask questions and socialize with other LoCo community members.

I look forward to seeing you good folks organizing your events and having a great time! :-)

Webkit fun, maths and an ebook reader

I have been toying with webkit lately, and even managed to do some pretty things with it. As a consequence, I haven’t worked that much on ekiga, but perhaps some of my experiments will turn into something interesting there. I have an experimental branch with a less than fifty lines patch… I’m still trying to find a way to do more with less code : I want to do as little GObject-inheritance as possible!

That little programming was done while studying class field theory, which is pretty nice on the high-level principles and somewhat awful on the more technical aspects. I also read again some old articles on modular forms, but I can’t say that was “studying” : since it was one of the main objects of my Ph.D, that came back pretty smoothly…

I found a few minutes to enter a brick-and-mortar shop and have a look at the ebook readers on display. There was only *one* of them : the sony PRS-600. I was pretty unimpressed : the display was too dark (because it was a touch screen?), but that wasn’t the worse deal breaker. I inserted an SD card where I had put a sample of the type of documents I read : they showed up as a flat list (pain #1), and not all of them (no djvu) (pain #2) and finally, one of them showed up too small… and ended up fully unreadable when I tried to zoom (pain #3). I guess that settles the question I had on whether my next techno-tool would be a netbook or an ebook reader… That probably means I’ll look more seriously into fixing the last bug I reported on evince (internal bookmarks in documents).

The European Space Agency runs Cherokee

Just learned through David Galan's LinkedIn profile that the European Space Agency (ESA) has been running Cherokee on some of their projects for a while now.

I must admit I'm delighted to see how the adoption of Cherokee is growing steadily. It's always encouraging to see how people and organizations migrate their Web Servers, Reverse Proxies and Video Streamers to Cherokee.

I'm aware of other well known organizations and companies deploying Cherokee at this moment. This, by no mean, is meant to suggest that ESA using Cherokee is more important.. but, you have to admit that such flashy subject is well worth a post. :-)

Some news about what’s going on at Fluendo

This week we released the Fluendo DVD player version 1.0.9, expanding our cross platform support with Microsoft Windows. We now have full support for Linux, OpenSolaris and all flavors of Windows from XP and up.

We also released the Fluendo Media Center which is an all in one product containing our media center UI from the Moovida project combined with Fluendo codecs (including Dolby Digital) and the Fluendo DVD player engine. We currently only support Linux but we will add Windows support next week.

Next week you will also see a new release of the Fluendo codecs bundle (version 11) that will feature VDPAU hardware decoding support (tested on NVidia cards, including ION and some VIA chipsets) plus the long awaited return of the excellent Dolby Digital decoder for Totem.

Development on Moovida 2.0 is going pretty well and expect some nice release from us in the course of April 2010.

Thanks for reading ! :)

ides of march

As I begin to write this, it's still the Ides of March -- the fifteenth day of the third month of the year.

Non-native English speakers likely haven't heard the word "ides" before, even in their native language -- at least it doesn't seem to be common in Spanish or French. But anyone who went through an American high school can see the crooning finger of the seer, as he tugged at Julius' Caesar's sleeve, and hear his crow, Beware the Ides of March.

Then it's all stab stab stab, and the tyrant is dead! Well not quite that soon, but thence goeth the play. We are told that Caesar was a man of hubris, with imperial ambitions, and it was a noble group of righteous republicans that took the dirty deed into their hands, ridding Rome of an oppressor.

Told, that is, by Cicero, a brown-noser with a gilded tongue; and from whose writings most of the history of the period derives. So says Michael Parenti in his The Assassination of Julius Caesar: A People's History of Ancient Rome.

class war

Parenti places the murder of Gaius Julius Caesar within a context of a popular struggle, playing itself out as a split between different segments of the ruling class. On the one side there were the slumlords, latifundistas, and slaveowners, and on the other side there was popular struggle, in the form of slave revolts, insubmission, graffiti (!), in addition to the formal political channels (the people's tribune and consul, etc.).

Within the ruling class (slaveholders all), there was a split. On one side were the optimates, the self-described best and brightest, those that would hold on to their privileges at all cost. The optimates spoke in terms of "rule of law", but they were happily oblivious to such things when it suited them.

On the other side were the populares, a reformist tradition stretching back a couple hundred years. It was dangerous to be a populare. A number of populare leaders had been killed, by gangs of men, or poisoned, often on direct senatorial order. All of this, to protect the privileges of the elite from any retrocession, however small, even coming as it was from other members of the elite.

Caesar was a populare, and a charismatic one at that. But he wasn't killed for being charismatic; on the contrary, if he had been an optimate, he would be described to history as a man of the highest republican principle.

Caesar was more a kind of former-day Roosevelt -- though not a revolutionary, certainly a reformer, who would change government to serve the people better. Also like Roosevelt, he was viewed as a traitor to his class. Caesar was one of the last of the populare leaders to have power. He was killed, argues Parenti, mainly because of his place in this tradition of social struggle.

Then, as now, the optimates would not allow the republic to fall into the hands of the so-called "mob". (What a word for the citizenry, eh?)


Flowers for Julius Caesar, by Gauis Caecilius. CC-NC-ND.

Every year, I am told, at the Ides of March, one may find bunches of fresh flowers, laid on the spot where Caesar was killed. If I had learned this before reading the book, I wouldn't have understood, but now I choose a meaning that makes sense to me: these flowers are for the people's struggle, that the slave rebellions of the past might not be in vain.

Bossa Conference

So, once more I'm in the Amazon, but this time not for any fancy jungle trip, but instead for the great Bossa Conference! The conference has been really great, with a focus a bit different that other conferences as the focus is on socializing, getting to know people, and actually getting stuff done.

It was really nice to meet my friends from Qt again, as well as meet my fellow WebKit hacker, Ariya Hidayat, who has since moved on to Qualcomm. The conference spotted a lot of technical talks about everything from audio details, bluetooth to now we should develop UI widgets in the near future.

This year is the first year that I did any presentation, so I started out by doing two :-) Here you have the first one, enjoy.

Connecting Technology for Great Experiences - How does QML and Web fit together?<object height="355" width="425"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=bossa-conf-1-final-100309072737-phpapp01&amp;stripped_title=connecting-technology-for-great-experiences-how-does-qml-and-web-fit-together"><param name="allowFullScreen" value="true"><param name="allowScriptAccess" value="always"><embed allowfullscreen="true" allowscriptaccess="always" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=bossa-conf-1-final-100309072737-phpapp01&amp;stripped_title=connecting-technology-for-great-experiences-how-does-qml-and-web-fit-together" type="application/x-shockwave-flash" width="425"></embed></object>
View more presentations from kchristi.

libmodel and GTK+ from Codethink Labs!

A few months ago we announced libmodel to the masses, the shiny data model API for GObject, one of our pet projects from Codethink Labs.

Last week we decided to spend some time doing R&D at the company and I asked Ryan how hard would it be to come up with a generic GtkTreeModel implementation, in two days he put together libmodel-gtk!

This solves a quite important problem, GtkTreeModel, and abstract Model APIs are meant to be implemented pretty much for every use case unless you are doing extremely simple stuff, so that you can add smart filtering and sorting from the data source. However, the GtkTreeModel has an API quite hard to implement so everyone end up using List and TreeStore.

Now that we have a libmodel implementation, doing TheRightThing(TM) and wrap the API around the real data store becomes trivial. I quickly put together this twitter client using libsoup-2.4 and json-glib, and it is the first time that I have fun writting an data driven (let alone online) app for GTK+ in quite some time :-)

Screenshot-model-twittfeed
Grab the source here, it's only 230 lines of Vala, most of it picture retreival/treemodel code actually, to compile it you'll need a fairly recent vala release. Copile using this command line:

~$ valac -g --thread --pkg gtk+-2.0 --pkg json-glib-1.0 --pkg libsoup-2.4 --pkg model-gtk model-twittfeed.vala

We are already planning having some standard set of providers, there's already a filesystem implementation in the model-examples repository, we are cooking a Tracker one and I should be adding a JSON one soon, other implementations are welcome! I would be quite excited to see SQLite, XML, CouchDB ones as well.

This is the kind of things that makes me really proud of working at Codethink, there's an exceptional bunch of smart guys willing to kick the complexity out of the way with elegance and simplicity!

Kudos to Ryan for this one, we should be putting together another release soon.

March 15, 2010

ides of march

As I begin to write this, it's still the Ides of March -- the fifteenth day of the third month of the year.

Non-native English speakers likely haven't heard the word "ides" before, even in their native language -- at least it doesn't seem to be common in Spanish or French. But anyone who went through an American high school can see the crooning finger of the seer, as he tugged at Julius' Caesar's sleeve, and hear his crow, Beware the Ides of March.

Then it's all stab stab stab, and the tyrant is dead! Well not quite that soon, but thence goeth the play. We are told that Caesar was a man of hubris, with imperial ambitions, and it was a noble group of righteous republicans that took the dirty deed into their hands, ridding Rome of an oppressor.

Told, that is, by Cicero, a brown-noser with a gilded tongue; and from whose writings most of the history of the period derives. So says Michael Parenti in his The Assassination of Julius Caesar: A People's History of Ancient Rome.

class war

Parenti places the murder of Gaius Julius Caesar within a context of a popular struggle, playing itself out as a split between different segments of the ruling class. On the one side there were the slumlords, latifundistas, and slaveowners, and on the other side there was popular struggle, in the form of slave revolts, insubmission, graffiti (!), in addition to the formal political channels (the people's tribune and consul, etc.).

Within the ruling class (slaveholders all), there was a split. On one side were the optimates, the self-described best and brightest, those that would hold on to their privileges at all cost. The optimates spoke in terms of "rule of law", but they were happily oblivious to such things when it suited them.

On the other side were the populares, a reformist tradition stretching back a couple hundred years. It was dangerous to be a populare. A number of populare leaders had been killed, by gangs of men, or poisoned, often on direct senatorial order. All of this, to protect the privileges of the elite from any retrocession, however small, even coming as it was from other members of the elite.

Caesar was a populare, and a charismatic one at that. But he wasn't killed for being charismatic; on the contrary, if he had been an optimate, he would be described to history as a man of the highest republican principle.

Caesar was more a kind of former-day Roosevelt -- though not a revolutionary, certainly a reformer, who would change government to serve the people better. Also like Roosevelt, he was viewed as a traitor to his class. Caesar was one of the last of the populare leaders to have power. He was killed, argues Parenti, mainly because of his place in this tradition of social struggle.

Then, as now, the optimates would not allow the republic to fall into the hands of the so-called "mob". (What a word for the citizenry, eh?)


Flowers for Julius Caesar, by Gauis Caecilius. CC-NC-ND.

Every year, I am told, at the Ides of March, one may find bunches of fresh flowers, laid on the spot where Caesar was killed. If I had learned this before reading the book, I wouldn't have understood, but now I choose a meaning that makes sense to me: these flowers are for the people's struggle, that the slave rebellions of the past might not be in vain.

Contemporary Visual UI Design

One thing that I often missed in GNOME development is an easy way to apply glow and shadow effects to any kind of element. The most obvious kind of this is the lack of a built-in method to render text shadows. Selectively used in almost every single designer’s mockup, the lack of it in actual implementations has been one reason why the result is rarely as satisfying as it could be.

While some people have stated the opinion that they do not like text shadows, and they can easily be overused, this is not an excuse to make it harder than a single line of code (or CSS!) to implement them. Creating text twice is not a good solution. Despite the awkwardness of the implementation, it is also inefficient, and the reason why this approach was discarded for Maemo 5.

To give a few examples of the importance of text shadows (and glow) in modern UI design:

(Click to enlarge)

WebKit got this covered, why haven’t we? This should be well supported throughout the platform. Where and when to actually use it should not at all be a question that depends on technical issues.

Text shadows are only the tip of the iceberg though. In particular shadows and glow effects are extremely powerful and flexible assets in any GUI designer’s toolkit. We should have utility functions easily available for these effects, as well as the obvious rounded borders and multi-step gradients.

GNOME Shell is certainly on the right track, with their fairly flexible CSS styling, but many of these elements are still missing. This leads to issues like Bug 581067. If the designer wants a glow, she should be getting a glow. Something as elemental as this just shouldn’t require any significant programming effort. I am confident that GNOME Shell will get there, it’s just something to keep in mind (i.e. once the effect is implemented once, make it easily available via CSS).

Classy Gradients

Another common eye-sore is the way we utilise gradients. A rule of thumb should be: Unless the gradient is used to indicate an obviously rounded surface, the gradient should not actually be visible to the naked eye. Gradients are excellent to add sophistication to an otherwise flat surface by simulating the natural distribution of light, but gradients in itself are by and large just not an attractive design element.

Consider the new Ubuntu theme. The gradient in the panel is pretty good. Oddly enough the gradient in the titlebars is much different. While in itself it is still acceptable (due to the slight illusion of glossiness), the added menubar completely ruins it. Of course that is ultimately a symptom of the larger issue that is the separation between window frame and application (hopefully soon solved by client side decorations), but there is certainly an argument for rather not doing something than to do it badly. Also unnecessarily exaggerated is the gradient of the title button tray.

The straight-forward application of the concepts above would result in something like this:

(Yes, it’s far from perfect, but I hope it illustrates some points. I also forgot to colour the title and menu text)

What I mainly hoped to accomplish with this is to create some discussion about how we can make these things easier to do for designers and developers, and where to add these capabilities in the stack (Cairo? Pango? A graphic styles library? Gtk?). I would want to work on this.

Also, what is our answer for rich application UIs? When Webkit beats us in capabilities for desktop application UIs, something is clearly amiss.


Today is a good day

Two good things happened today:

I handed in my bachelor's thesis and the shipment with the XO's arrived.



Time for some holidays!

desktop-file-utils news, and an easy way to contribute

A few weeks ago, I migrated desktop-file-utils from CVS to git, but after pushing it, I realized I could have done the migration in a slightly better way. Ouch. Enters one hero, Tollef: he was kind enough to allow me to kill the old git repository and start from scratch. This means desktop-file-utils finally lives in git. Woohoo!

It enabled me to commit various patches I had done locally in the meantime (I really didn't want to use CVS again, so I was waiting for git ;-)), and then to release desktop-file-utils 0.16. It's the first release since February 2008! Two years without a tarball is quite bad, especially since there were fixes waiting in CVS. But everything is good again, and we should now be back on track, with more frequent releases.

There are a bunch of changes in this release, including improved checks when validating a .desktop file. Of course, there's always the risk that this will result in files that are now invalid while they used to be marked as valid, but the new future error type of warnings should mitigate this. The other good news is that there's only one enhancement request opened in bugzilla, and I'm not even sure there's something we can do about it. But I'm confident you've already find a bug, so don't forget to file it ;-)

It all looks perfect, doesn't it? Well, there's one big thing missing, though: a regression suite. I still can't believe that we're releasing a validator for .desktop files without a regression suite, and I'm convinced there have been regressions in the past (or even in this release) that went unnoticed. I'd really love to have a few people help create tons of .desktop files that would stress the validator and make sure it validates what the specification says. It's an easy way to contribute: it just requires free time and understanding of the specification. Please contact me if you want to give it a try!

Latest Dirac (schrodinger) release is really fast

I thought I should let people know that they really should grab latest version of the Schrodinger encoder/decoder from diracvideo.org. If you saw David Schleefs blogpost about Dirac you would have seen him mentioning it is much faster.

Having tested with GStreamer I can confirm that it is the case, it is really fast now, and CPU usage which used to be the achilles heal of Dirac doesn’t seem to be an issue now. Be sure to also grab gst-plugins-base 0.10.28 too though, as it contains a critical fix for playing back Dirac in Ogg containers.

GUADEC Call for participation deadline – arriving fast!

I just realised this morning that after a very long call for participation period, we’re now in the last week before the call for participation deadline for GUADEC – you should have proposals in by 23:59 UTC on March 20th to be eligible for selection (although a little birdie tells me that might get extended to the end of the weekend). Of course, I knew that the deadline was sometime in the end of March, but I didn’t realise that we’d gotten so far through the calendar!

So get your proposals in about all things GNOME, GNOME 3, GNOME Mobile, usability, accessibility, webability, open data, free services, scaling the community, developer tools, whatever – but get them in quick. It’s better to get a poor proposal in now & improve it next week than wait until next week to polish what you have now.

For guidelines on a good talk proposal, I really like the OSCON guidelines as a list of good dos & don’ts for conference proposals – in general, make the proposal (and your presentation, if accepted) not about you or your project, but about your audience and what they can do with your project – so clearly identify the target audience & why they would attend, and make the title short & action-based, rather than vague, weird or overly clever.

Good luck to teuf and his merry band evaluating all the proposals!

Let’s write more Murrine documentation!

It’s time to write documentation for the Murrine’s options: the development version in git is really advanced and could emulate an enormous number of styles thanks to the new options and features over the previous 0.90.3 stable release.

But, my time is precious and, as I am not payed to do it and the donations stopped :( , I can’t invest the same efforts I did in the past.

So, waiting better days, I decided with Kenneth from Ubuntu to open a page in the Ubuntu Wiki (later to be moved on live.gnome.org and on the official Murrine website), where themers could help writing a great documentation of this amazing (not because I am the author :P ) GTK+ engine.

Other major tasks before a new release is to improve RGBA support on few sides… I will definitely look into it in the future, when it will be possible!

If you want to support me in the development of the engine and new themes you could always sponsor me :) I am thinking about writing down a list of the donors, what do you think?


GUADEC Call for Papers deadline

It's nearly over us, it's coming fast!

If you want to submit a talk proposal for GUADEC 2010 (July 24, 2010 – July 30, 2010 in The Hague, The Netherlands), make sure to make your submission real soon since the deadline is Saturday, March 20th (aka "End of this week").

That's all folks!

The little exciting triangle

It seems that latest murrine engine switched from the lovely disclosure triangles for treeview and GtkExpander to old-school (and IMHO misleading) +/- button.

If you really want back triangles you could:

  • ask to creator/maintainer of your favorite murrine based GTK+ theme to apply the following snippet (you could start from here);
  • do it by your own, adding the same snippet to $HOME/.gtkrc-2.0 (and restart your session, as usual);
  • persuade Cimi that +/- is good for add/remove items and ▶ is good to display (or reveal) “information or functionality associated with the primary information in a window” (cit.) and mixing them is not so good :)

And now… the snippet!

style "expander-fix" = "default" {
engine "" {}
}

class "GtkExpander" style "expander-fix"
class "GtkTreeView" style "expander-fix"
class "GtkCTree" style "expander-fix"

PS Yes, disclosure triangles are really apple-ish, but when rationally used they seem really effective.

gudev-sharp is born!

In some of my spare time I’m working on modernizing Banshee’s hardware support (all the while lamenting the death of HAL). With HAL we had a nice (although monolithic) toolkit-agnostic hardware layer that was used through dbus. HAL was deprecated in favor of using udev, which is the the Kernel’s hardware event system. I’m sure udev is much nicer from an engineering point of view, but it’s certainly not as nice for application developers as a big old dbus-interface where any information about hardware could be retrieved was. Regardless of how I feel about HAL, HAL is still gone, so Banshee still needs updated to udev. Since udev is so new, no one had made C# bindings for libgudev yet, so I decided to take a stab at using GAPI to generate C# bindings. After hours of talking to myself in irc, trying to trick RAOF into doing my work for me, gudev-sharp is born! It just successfully ran the (incredibly simple) test code I wrote just to make sure it wouldn’t segfault. If you’re interested in modern hardware support via C#, help write unit tests!

I know some people are going to say “bzr? launchpad? And you want this adopted?”. It can move whenever it needs to, LP and bzr are my tools of choice, but if upstream Mono wants to move this into svn, I’d be happy to see it go.

March record scores!

It’s the 14th already, and I actually blew through my record budget within the first week. I would have made this post earlier but

  1. I was a little embarrassed I blew through my record budget within the first week
  2. I was waiting for a record to come in from the Czech Republic

So here they are, in all of their beautiful waxy glory.

  1. Eternal – Lucifer’s Children: Electric Wizard side project band!! X/500!
  2. Anima Morte/Hooden Menace split picture disc! X/500
  3. Leather – Ancorite. I don’t know how many of these there are, but I got a test press!
  4. Killing Joke s/t
  5. Sisters of Mercy – Floodland
  6. Bauhaus – Press Eject and Give Me the Tape

Not bad for $50 right? The Eternal record is killer, I saw the artwork in the record store and it struck me as Electric Wizard like, so I picked it up, brought it home, and found out a) it’s rare b) it’s pre-electric wizard c) IT’S HEAVY

March 14, 2010

Book review: Python Testing – Beginner’s Guide

As mentioned before, some days ago I received a copy of a recent book from Packt Publishing titled “Python Testing – Beginner’s Guide” by Daniel Arbuckle. I read the whole book (it’s not huge, around 220 pages), and wrote a review, as requested by Packt.

The book targets people who know Python (it doesn’t contain a language introduction chapter or something alike, which would be rather pointless anyway), and want to start testing the code they write. Even though the author starts by explaining basic tools like doctests and the unittest framework contained in the Python standard library, it could be a useful read even if you used these tools before, e.g. when the Mock library is explained, or in the chapter on web application testing using Twill.

The text is easy to read, and contains both hands-on code examples, explanations as well as tasks for the reader and quiz questions. I did not audit all code for correctness (although in my opinion some more time should have been invested here before the book was publishing: some code samples contain errors, even invalid syntax (p45: “self.integrated_error +q= err * delta“), which is not what I expect in a book about code testing), nor all quizes. These could’ve used some more care as well, e.g. on p94 one can read

What is the unittest equivalent of this doctest?

>>> try:
...     int('123')
... except ValueError:
...     pass
... else:
...     print 'Expected exception was not raised'

I was puzzled by this, since as far as I could remember, int(‘123′) works just fine, and I didn’t have a computer at hand to check. Checked now, and it works as I expected, so maybe I’m missing something here? The solution found in the back of the book is a literal unittest-port of the above doctest, and should fail, if I’m not mistaken:

>>> def test_exceptions(TestCase):
...     def test_ValueError(self):
...         self.assertRaises(ValueError, int, '123')

This example also shows one more negative point of the book, IMHO: the code samples don’t follow PEP-8 (or similar) capitalization, which makes code rather hard to read sometimes.

The solutions for the last quiz questions are missing as well, and accidently I did want to read those.

Don’t be mistaken though: these issues don’t reduce the overall value of the book, it’s certainly worth your time, as long as you keep in mind not to be too confused by the mistakes as shown above.

Topic overview

The book starts with a short overview of types of testing, including unit, integration and system testing, and why testing is worth the effort. This is a very short overview of 3 pages.

Starting from chapter 2, the doctest system is introduced. I think it’s an interesting approach to start with doctest instead of using unittest, which is modeled after the more ’standard’ xUnit packages. Doctests are useful during specification writing as well, which is in most project the first stage, before any unittestable code is written. The chapter also introduces an overview of the doctest directives, which was useful to read.

In chapter 3 gives an example of the development of a small project, and all stages involved, including how doctests fit in every stage.

Maybe a sample of Sphinx and its doctest integration would have been a nice addition to one of the previous chapters, since the book introduced doctest as part of stand-alone text files, not as part of code docstrings (although it does talk about those as well). When writing documentation in plain text files, Sphinx is certainly the way to go, and its doctest plugin is a useful extra.

Starting in chapter 4, the Python ‘mocking‘ library is introduced. The chapter itself is a rather good introduction to mock-based testing, but I don’t think mocks should be used in doctests, which should be rather small, examplish snippets. Mock definitions don’t belong there, IMO. This chapter also shows some lack of pre-publishing reviews in a copy-paste error, in the block explaining how to install mocker on page 62, telling from now on Nose is ready to be used.

Chapter 5, which you can read here introduces the unittest framework, its assertion methods, fixtures and mocking integration.

In chapter 6 ‘nose‘ is introduced, a tool to find and run tests in a project. I use nose myself in almost every project, and it’s certainly a good choice. The chapter gives a pretty good overview of the useful features nose provides. It does contain a strange example of module-level setup and teardown methods, whilst IMHO subclassing TestCase would be more suited (and more portable).

Chapter 7 implements a complete project from specification to implementation and maintenance. Useful to read, but I think the chapter contains too much code, and it’s repeated too often.

Chapter 8 introduces web application testing using Twill, which I never used before (nor did I ever test a web application before). Useful to read, but Twill might be a strange choice, since there have been no releases since end 2007… Selenium might have been a better choice?

A large part of the chapter is dedicated to list all possible Twill commands as well, which I think is a waste of space, this can be easily found in the Twill language reference.

Chapter 9 introduces integration and system testing. Interesting to read, the diagram-drawing method used is certainly useful, but it also contains too much code listings.

Finally, chapter 10 gives a short overview of some other testing tools. First coverage.py is explained, which is certainly useful. Then integration of test execution with version control systems is explained. I think this is certainly useful, but not at this level of detail. Setting up a Subversion repository is not exactly what I expect here, especially not when non-anonymous, password-based authentication over svn:// is used (which is a method which should be avoided, AFAIK).
Finally, continuous integration using Buildbot is tackled. No comments here, although I tend to use Hudson myself ;-)

Final words

Is this book worth your time and money? If you’re into Python and you don’t have lots of experience with testing Python code, it certainly is. Even if you wrote tests using unittest or doctests before, you’ll most likely learn some new things, like using mocks.

I’m glad Packt gave me the opportunity to read and review the book. I’d advise them to put some more effort in pre-publishing reviews for future titles, but the overall quality of the non-code content was certainly OK, and I hope lots of readers will enjoy and learn from this book.

We Aren’t Returning You to Your Regular Programming

My colleague, Russ Cox, has a series of articles discussing the regular expression work he did for Google Code Search (part 1, part 2, part 3). The commonly used PCRE library wasn’t suitable because it can take exponential time in some cases, which could allow a denial-of-service attack. Part 1 gives this example:

Note that the Y-axis on the left is measured in seconds, the one on the right is measured in microseconds.

RE2 is now open source.

Disclosure: I work for Google, but had no involvement in RE2 or Google Code Search. As always, this is my personal blog, and the views expressed on these pages are mine alone and not those of my employer.

Composite saga continues

So I took another Saturday afternoon to look after the whole composite thing I started hacking on last week. It’s surprisingly not a lot of work to do in terms of lines of code written.

First, I went and enhanced GtkBuilder so that you can add a parent widget context to the parse; this way while parsing GtkBuilder fragments you can start them with the <child> tag instead of <object> and have the builder parent the serialized children onto a dynamic runtime instance (in our case, a composite container widget).

Second, I trashed gtkcomposite.[ch] and integrated the code into GtkContainer (following Rafael Villar Burke’s advice); this way any already existing container widget can be extended as a composite widget.

Third thing was, as Torsten Schoenfeld pointed out was missing, I added api for bindings to assign a GtkBuilderConnectFunc to be used on a per class basis, this means that for instance, composite widget code in GTK+ gets connected with regular C callbacks, but derived code of that same widget in another language gets to use a connection algorithm specific for that class vtable for that language… which brings me to..

Finally composite classes can also be extended and each class can optionally pull in a .ui template to define its children, which means with some added magic of gtk_container_get_composite_child() to pull out implicitly defined composite children, GtkBuilder has no problem to “blend in” widgets added from subclasses into internal composite containers exposed from a composite parent (I added a new test case to the bug describing this).

For those who are wondering what the hell kinda crack this guy is cookn’ up, basically… its an api of GtkContainer that lets you associate a GtkBuilder .ui file with any container class you define, automatically assigning any property endpoints you define to the corresponding instances built from the GtkBuilder fragment – at construct time, for free – an effort to completely abstract the packing of widgets from user code, and hide GtkBuilder semantics under the hood.

Thats it for me today… I hope you’re excited !

Feeds