Skip to main content

a silhouette of a person's head and shoulders, used as a default avatar

WebYaST: Switch from XML into JSON (day one)

This week I'll continue on project that started on recent WebYaST Workshop:WebYaST_Performance

Result from previous tests was that bundled reXML parser is slowest from all ;-)
Now I'd like to continue with comparison XML and JSON performance. For this purpose I created webclient json branch in our git repository.


To install profiling extension you'll need to add repository http://download.opensuse.org/repositories/devel:/languages:/ruby:/extensions/openSUSE_11.2
and install package rubygem-ruby-prof. Also to see results from profiling you'll need kcachegrind package.

I started some tests with Firefox firebug extension (5 measurements from each and then calculate average). First one without any modification, then with profiling enabled.

xml (rexml), no benchmarking xml (rexml), ruby-prof enabled
5.53 6.3
6.53 5.71
6.15 5.79
6.55 5.78
6.15 5.99
6.182 5.914







On this picture you can see (selected line is xml parsing process) with luck we can speed up 1/5 times (about 1 sec in my case). There's almost no difference between creating json and xml output: Calling http://localhost:4984/groups.xml takes average time 655ms, http://localhost:4984/groups.json takes average time 621.4ms.
In rest-service there are some problems - json output is not valid, jreidinger is working on it.
I'll continue tomorrow.

a silhouette of a person's head and shoulders, used as a default avatar

Difficult, difficult...

KDE Project:

It is interesting to notice what is sometimes seen as difficult. "It's too hard for me, I can't do that." "I'll never be able to do that, that's nothing for me." Like if most things could be done instantly just by snapping one's fingers. They instead require all these tedious things like effort, trying, learning, practicing and so on. The funny thing is, figuring out things in the IT area is not really that demanding. Wanna write a Plasma applet? There's a step-by-step tutorial at Techbase, just follow it blindly and with a decent skill in reading and typing, tadda, there's a Plasma applet. Wanna a package in the build service? You can use another one as a template, find a tutorial on the wiki or just google for it, and if you'll be just a little lucky, a tool can even do the work for you.

For getting a good comparison of what can difficult actually mean, let me show you something I consider to be pretty hard to learn. To have a better contrast, let's go in some completely different area that has absolutely nothing to do with computers. So if you think something is difficult, instead of doing this whatever something, try doing for example the Salchow jump. And since I expect many people here have no idea what that is, it looks like this, performed by yours truly:

That's roughly it. I assume it looks quite unimpressive to anyone who's never tried it or anything close (and, possibly, in this specific case it probably looks quite unimpressive even to whose who have). Yet this thing was bloody hard to learn for me. I probably learnt coding with Qt quite decently with much less effort (although, that's one of Qt's selling points, isn't it). Writing .spec files and creating packages? Nah, eeeasy. Even getting into Xlib programming was probably less effort, and I read a good part of the Xlib manual as a part of that. I admit getting into compositing effects and adding them to KWin might have been harder than the Salchow though :). Still, for somebody whose reaction to the idea of writting an alternative KDE workspace shell was 'how hard can that be?', the Salchow proved to be an unexpectedly difficult matter.

I was first shown and explained the Salchow about 9 months ago. I think I needed about 2 or 3 months just to perform it in the most lame way that'd technically qualify, about as much as x = 1 qualifies for a math equation. The video is from April, i.e. more than 3 months on top. Today I can perform it somewhat higher and at slightly faster speed, but it still hardly qualifies for anything better than 'decent'. And while I hope it'll one day get to something I'd consider good, I'll probably never ever get to those crazy things like multiple rotations or anything even remotely close to what you can see on the TV, no matter how much and how hard I'd try. Do you still think that e.g. creating and maintaining a package is hard, compared to this? And don't even get me started on the next jumps ... the Salchow is actually easy. Try to think of this next time when you'd want to do something but would consider it too difficult (besides, take this from me, trying difficult things is actually much more interesting than the easy ones).

PS: Come to think of this, I've never thanked Danimo and Scott Wheeler, who happen to be ultimately reponsible for me starting with skating and having a lot of fun, as I'd probably never come across any such idea myself. So, well, thank you.

the avatar of Stephan Kulow

Buildservice development on 11.3

The build service (and any other of openSUSE infrastructure software using RoR) is using rails 2.3.5, because we once decided to harmonize on the version of SLE11 SP1. Of course the latest version has less bugs (usually), but mixing RoR versions between different developers and deployment is a nightmare, so we had to decide on one.

Now comes the catch: 11.3 has rails 2.3.8 and as such you can’t develop the build service on factory/11.3 as is. But the good news, openSUSE:Tools has all the right versions, so you can add the repo (zypper ar -r http://r.opensu.se/openSUSE:Tools/f/r) and then install zypper in -f rubygem-rack-1.0.1 rubygem-activesupport-2_3-2.3.5

To make sure, the next zypper dup is not going to take it away, use zypper al rubygem-rack rubygem-activesupport-2_3

a silhouette of a person's head and shoulders, used as a default avatar

a silhouette of a person's head and shoulders, used as a default avatar

Details that sometimes do matter

Some things are really really tiny details, yet they can be annoying in way. Something that's been occassionally bugging me is that fact that KDE uses the same wallpaper as KDM background, the splashscreen background and desktop background, yet depending on the screen resolution it may not be exactly the same background - during login the picture may stretch or shrink at certain points. The times when decent monitor screens had a 4:3 ratio are a thing of the past, starting with LCD makers making 5:4 "narrow-screens", then changing their minds and making 16:10 or 16:9 wide-screens. The choice of screen resolutions is not that limited either and that means that the wallpaper has to be scaled ... and that was the problem. Plasma has code to select how to do the scaling, KSplashX has code for that and KDM has code for that, and yes, you guessed it, it's always a different code. So unlucky resolutions get different wallpapers from different code. Since I actually spent some time in the past trying to make the login as seamless as possible, this indeed made me twitch whenever I saw it.

Seeing this again while testing openSUSE 11.3 made me finally spend the time to patch the openSUSE package to use the same selection code in all the three components. We really lack polish in so many places :(. But now it looks like the change is almost not there - there's just a progressbar and logo shown during startup and that changes to the desktop. With compositing enabled there would be also the fade-in animation.

Seeing that 4.4's KDM had no support for differently sized wallpapers, I was about to submit a copy of Plasma's code there when I noticed that trunk has some code for it. Of course, different from the rest again. Also, the login sequence is basically just lucky to be so smooth. The splashscreen is supposed to stay visible until Plasma is ready with its wallpapers and panel layout. And there is code in KSMServer to ensure this. And Plasma uses it. Yet it's apparently not used properly - during the first login, when there is more setup to be done during login, it's perfectly possible to see how the panels are set up. Well ... maybe in time for openSUSE 11.3 + 1.

the avatar of Michael Löffler

Let’s beat the drum for openSUSE conference 2010

Robert and myself visited most open source projects attending LinuxTag 2 weeks ago and invited them to come to the openSUSE Conference – be it as visitor, giving a presentation or doing a workshop. Feedback was all over the place positive. But feedback isn’t enough – we’ll do some follow up to make some of them participate and all of us should now promote the openSUSE Conference where possible.

Let’s spread the word about the openSUSE Conference and its motto “Collaboration across borders”, invite developers of other communities and other projects to join as a visitor or to give a presentation on a topic which affects all of us or lets do a workshop, hack session or just having fun. Call for papers is open till July 31 – so now is the time to shape the conference. Send in our proposal or idea to cfp@opensuse.org.

Robert and gnokii created some artwork for the openSUSE conference which is perfect to add it on web pages or to print out the posters to do some promotion in your area.

openSUSE Conference in short:

  • October 20-23 in Nürnberg, Germany
  • Free entrance
  • 4 days conference with 4 tracks plus hack sessions and workshops
  • Topics:
    • Technology and Upstream Development
    • Education and Science
    • Business
    • User and Home
  • Everything is possible – just send an email to cfp@opensuse.org

a silhouette of a person's head and shoulders, used as a default avatar

Hack Week project: Cydin

Last week was a Hack Week at Novell, so I spent some time working on a new idea I've been cooking in the past weeks: a Community Add-in Repository for MonoDevelop, which I'm calling Cydin.

The idea is to have a web site where add-in developers can publish their MonoDevelop add-ins and make them available to all users. The site works like a build bot: it pulls the source code of add-ins from version control repositories, builds and packages them, and then publishes them in an add-in repository, to which MonoDevelop will be subscribed.

In one week I've been able to implement the basic functionality, although it still needs some polish before I can make it publicly available. I implemented the site using ASP.NET MVC. I didn't know much about MVC in ASP.NET, so it has been also great to learn something new.

Beware: I put zero effort to the visual design.

So, how does it work? This is the home page:


The first thing you have to do is to log in. Authentication will be based on OpenID, but this is not yet fully functional (I'm using the DotNetOpenAuth library but I'm having trouble making it work on Linux).

The home page is very simple. It shows a list of the projects owned by the user and a list of recent releases. I planed to include add-in browse and search options, but I had no time for this.

The Create Project link allows creating a new add-in project:


This page allows entering the add-in name, the identifier and a description. When clicking on Create, the source definition page is shown:


This page allows specifying the location of the source code of the add-in. Right now it only supports Subversion, but I plan to add support for GIT soon.

When specifying the URL of the subversion repo, there is a twist: if the URL ends with "/*" the build service will pull all directories bellow that URL, and each directory will be considered a
different release. So for example, if you specify:
https://test.googlecode.com/svn/trunk/tags/test-project/*
then all tags of test-project will be pulled as independent releases.

If the auto-publish checkbox is set, the build service will automatically publish new versions of the add-in at every commit.

After saving the changes, the project home page is shown:


The page will be empty because pulling and building the source code may take some time.

Source code is pulled and built by a Build Service. The build service is independent from the web site and can run in a different host. Communication between the two is done through a web service.

So after a bit we'll see:


This shows that the build service found six directories below the specified svn url, and pulled all of them. Then it started building.

Notice that the build service extracts some information from the add-ins: the add-in version, the MonoDevelop version that the add-in is targeting, and the target platforms.

Sources with the 'Ready' status are already built and packaged, but not yet available in the add-in repository. To make them available, you have to click on the 'Publish' link. This is not necessary if the auto-publish option is set for this SVN source (in this case the release would be automatically published after building).

This is how the page looks like after publishing some releases:


The site administrator has some control over which releases are published. By default, new projects releases have to be validated by an administrator.

Published add-ins can be installed using the MonoDevelop add-in manager:


There is still some work to do, but I hope I can publish the site as a beta soon so you can start experimenting with it.

a silhouette of a person's head and shoulders, used as a default avatar

Hackweek V: mkdiststats

When Coolo mentioned that he is looking into improving the rebuild time of Factory
I couldn’t resist to try the script he was using myself. It turned
out that the script was extremly slow, it took about 15 minutes for
the calculation on my computer. The script was originally written a
long time ago for the old autobuild with a much lower number of
packages and dependencies to take care of. The ad-hoc method used
for the ‘rebuild simulation’ just didn’t scale well. Hackweek was a
good opportunity to improve the performance and to add some more
options.

The improved script now simply uses a boring, standard depth first
search to prepare the dense dependency graph for the simulation run.
After that step running simulations on the data is a piece of cake.
Overall the improved script now takes about 10 seconds.

Originally the script assumed an infinite number of build hosts ie
maximal parallelism. That’s a good method for visualizing the
bottlenecks. In reality the number of build hosts is limited though.
So I’ve added options to run the simulation with a fixed number of
build hosts and different algorithms to choose which package needs
to be built next. By using the script in a loop it’s even possible
to produce an animation:
rebuild animation
The image shows the amount of blocked, scheduled and currently
building packages at each point in time

Source code is available at gitorious if you want to try it out yourself.
You need an account in the openSUSE build service as mkdiststats
uses osc to download dependency information.

the avatar of Andrew Wafaa

openSUSE Community Question Time

It looks like I’ve been asking you, the community, a load of questions recently on this here blog. As such I thought it only fair to turn the tables and let you guys and girls do the asking :-) If we can make a bit of a game out of this I would appreciate it. So first up I’ll give you a deadline of 1200UTC 17June2010 to get you questions in by.

the avatar of Katarina Machalkova

I survived LinuxTag 2010

Migraine. Fatigue.
Sucky talk on the usual suspect. Better let some projects die.
Saw Matthias SuperStar Ettrich live. Yes, and QML rocks too. 
Disappointed to see no hackers in OpenOffice booth.
Got introduced to lovely Jacqueline (German community lead).
Seen Szabgab's talk on Perl testing, didn't manage to say shalom to him.
Currywurst (the best in the world) with Oliver and Thomas.
Absolutely fantastic talk by Ivanka on how to make usability happen in Linux.
More talks, on how Microsoft and SAP care about open source.
Didn't quite enjoy the party (anti-social event).
Enlightened by AJ on why Berlin cycling lanes are red (it's all blood of the tourists).
Attended OOo usability workshop ...
... turned out to be " what's wrong with OOo community, oh and btw also with OOo interoperability" discussion.
Met Elizabeth and Talented Mr.Noack. Long chat about Rennaisance. Wish I could participate
Interview for Radio Tux. Must've been lousy companion.
Saw what has remained of Berlin Wall (wish for tearing down the wall between Israel and Palestine one day).
More fatigue. Waiting for the circle to close.