Linux Presentation Day + Leap 42.1 release party in Munich
On Saturday we had the openSUSE Leap 42.1 release party in Munich, which I announced a couple of days ago. We had around 20 participants there: about 10 openSUSE users and also about 10 GNU/Linux users from the Linux Presentation Day – people that just started using Free Software and wanted to know more about openSUSE, GNU project, Open Source in general and of course celebrate with us the new release

But at the beginning I had no idea where we can meet in Munich. On Wednesday I asked in our German ML about location and Marcus advised Linux Presentation Day. Two minutes later I sent email to Linux Presentation Day event’s organizers and asked about separate room with beamer and power sockets. We got everything what we asked about. Thanks a lot for collaboration!
After that, on Friday (when I was sure about location and room was reserved for us) I come to Nuremberg to take openSUSE promotion material like USB flash sticks, DVDs, stickers, green “Leap” T-shirts and openSUSE beer. It’s not so far away from Munich. I think, about half of eighth I was at SUSE Office and Richard gave all “release party stuff” (last time, when I organized openSUSE 12.1 release party in Göttingen, I got all these stuff via post, with the exception of beer of course).
I had a talk about openSUSE project in general: the talk was targeted primarily for those who never heard about OBS, Leap or openQA. I tried emphasized the role of the community in openSUSE project.
I got many questions about systemd, SUSE impact on the openSUSE and quality of the “Enterprise Core” part which will be used in the Leap. I enjoyed talking with many that showed up and received as main feedback from many of those that I talked with.
If you’re going to invite “everybody” to your release party, you don’t need to talk so much about infrastructure or development model of openSUSE, I guess. That’s important and interesting for developers and Free Software evangelists maybe, but not for users, who are still not sure about contributing. For such users it’s more important how good this version as a desktop system than how easy to use submit request in OBS or which programming language should they use for implementation of tests for openQA or something like this.
By the way, at Linux Presentation Day we met one journalist from linux-user.de. So, I think my post will not be the only one about this event 
I want to thank Richard and Doug for openSUSE stuff, Linux Presentation Day organizers for hosting us in the VHS building and… thanks to all who joined us! See you next time and have a lot of fun 
ownCloud Chunking NG Part 3: Incremental Syncing
This is the third and final part of a little blog series about a new chunking algorithm that we discussed in ownCloud. You might be interested to read the first two parts ownCloud Chunking NG and Announcing an Upload as well.
This part makes a couple of ideas how the new chunking could be useful with a future feature of incremental sync (also called delta sync) in ownCloud.
In preparartion of delta sync the server could provide another new WebDAV route: remote.php/dav/blocks.
For each file, remote.php/dav/blocks/file-id exists as long as the server has valid checksums for blocks of the file which is identified by its unique file id.
A successful reply to remote.php/dav/blocks/file-id returns an JSON formatted data block with byte ranges and the respective checksums (and the checksum type) over the data blocks for the file. The client can use that information to calculate the blocks of data that has changed and thus needs to be uploaded.
If a file was changed on the server and as a result the checksums are not longer valid, access to remote.php/blocks/file-id is returning the 404 “not found” return code. The client needs to be able to handle missing checksum information at any time.
The server gets the checksums of file blocks along the upload of the chunks from the client. There is no obligation of the server to calculate the checksums of data blocks that came in other than through the clients, yet it can if there is capacity.
To implement incremental sync, the following high level processing could be implemented:
- The client downloads the blocklist of the file: GET remote.php/dav/blocks/file-id
- If GET succeeded: Client computes the local blocklist and computes changes
- If GET failed: All blocks of the file have to be uploaded.
- Client sends request MKCOL /uploads/transfer-id as described in an earlier part of the blog.
- For blocks that have changed: PUT data to /uploads/transfer-id/part-no
- For blocks that have NOT changed: COPY /blocks/file-id/block-no /uploads/transfer-id/part-no
- If all blocks are handled by either being uploaded or copied: Client sends MOVE /uploads/transfer-id /path/to/target-file to finalize the upload.
This would be an extension to the previously described upload of complete files. The PROPFIND semantic on /uploads/transfer-id remains valid.
Depending on the amount of not changed blocks, this could be a dramatic cut for the data that have to be uploaded. More information has to be collected to find out how much that is.
Note that this is still in the idea- and to-be-discussed state, and not yet an agreed specification for a new chunking algorithm.
Please, as usual, share your feedback with us!
openSUSE 42.1 Leap :: Release Party in Munich
openSUSE 42.1 Leap was released about week ago and it is looking good. Now we have community enterprise system. I would like to thank everyone who contribute to openSUSE project and help to make it better.
Of course, we should have openSUSE release party! openSUSE community haven’t had release parties in Munich for a while (since I live in Munich I think we never had it here).
So, what is release party about? Well… like usual: Linux geeks meet together, speak about features in new openSUSE version, news in Free Software world, drink beer and… of course have a lot of fun 
A few days ago I started discussion about release party with Linux Presentation Day organizers and it seems that problem with location is solved now. We will get small meeting room with power sockets and beamer there. That is exactly what we need. I also asked Doug and Robert about some “promotional material”, openSUSE beer and TShirts. Tomorrow (Friday) I’m going to go to SUSE office in Nuremberg to take it (beer can not be trusted to anybody).
Do you want be a part of it?
* November 14, Saturday
* I start my presentation at 12:00 AM. I’m going to talk (presentation) about OBS, Leap and openSUSE project in general.
* vhs-Zentrum, Münchner Str. 72, Eingang rechts, 85774 Unterföhring
* Don’t forget to bring your good mood and friends 
Everybody are very welcome! If you have any questions about openSUSE, GNU project or Free Software, feel free to come and ask.
Git: Single Line History
/usr/lib/foo/bar.rb:432:in `doit': undefined method `[]' for nil:NilClass (NoMethodError)but in bar.rb at the line 432 there are no square brackets. The user must be using an older version of the script. Can we find out which one without asking them?
Git can help. This code will go back in history and show the line how it appeared during the past. It's a history of a single line, kind of like "
git blame" but in a different dimension.FILE=lib/foo/bar.rb
LINE=432
git log --format=format:%H $FILE \
| while read COMMIT_ID; do
echo -n $COMMIT_ID:$FILE:$LINE:
git show $COMMIT_ID:$FILE | sed -n "$LINE{p;q}"
done \
| less
Have I reinvented the wheel? What is its name?
Video of my German talk “Flexibles Storage Management unter Linux mit OpenATTIC” now on YouTube
Back in September, I attended the Kieler Linux Tage, to talk (in German) about how to manage storage on Linux using openATTIC.
The presentation was recorded and the final result (in 4K) can now be viewed on YouTube. I hope you enjoy it!
Arabic Text Bugfix
Before:
After:
If this rings a bell but you can't quite remember why, here's an English version of the screen, and the spoiler for the puzzle is below it:
Spoiler: The line containing "passwd" is clipped at the (left) end, showing only "المحا" instead of "المحلي۔". This bug got popular in the YaST team because the localization testers dutifully reported every instance of a truncated label so the bug accumulated 22 duplicates. It only happened for the Arabic script which made it a bit more challenging to work with, but luckily I know the script and a few words.
Thanks to Max Lin who pointed me to a problem between the Qt UI library and the HarfBuzz text shaping engine, the problem is now fixed.
Proprietary AMD/ATI Catalyst fglrx rpms released for LEAP 42.1
Since the last few months, we all know that the new openSUSE Leap 42.1 is on its road.
But fglrx drivers were missing. Even with the 15.9 release in September.
Warnings
There’s really no warranties the drivers will work, for you!
If you are satisfied with the open-source radeon drivers, don’t risk to break your computer
All the trouble present in 15.9 will be there, like the failing gnome3 gdm start, see previous article from Sebastian, his scripts also available on the raw-src directory on the mirror, allow you to apply a quirk patch.
I’m considering the release of thoses rpms as experimental, they work for some, and sometimes are convenient. But they can also create kernel segfault on some configurations.
If you are in trouble start your openSUSE in rescue mode with nomodeset on boot line, and then zypper rm fglrx related packages, reboot and you should safely return to free radeon.
Story
Today, while packing my stuff for the SUSECON15 in Amsterdam, I was pleased on irc to have feedback of users
who were able to run fglrx Tumbleweed packages on their Leap 42.1
I’ve then start a Leap vm and hack a bit Sebastian Siebert’s script for 15.9 to add support for Leap.
The drivers build, and install correctly. I’ve also updated the one-click installer for people using this
technology.
Leap being available only for x86_64 bit plateform, the driver follow the same available arch.
Links to the new repository openSUSE_Leap_42
Have fun!
Cleanup on OBS – Bacula packages to adopt
I was one of the creator and maintainers of bacula packages on obs (Story started 4 years ago).
Since then (+3 years) I’m using another tool called Bareos, and have no more interest
nor time to maintain those packages.
Since sometimes, bacula project has released two main major version. (7.0 and 7.2).
Nobody has taken care of the packages available on obs Archiving:Backup, nor have
proposed an update. [1]
Those packages have never been submitted to Factory, and proposed to any released openSUSE version.
From one of the last upstream announcement Bacula project will deliver directly prebuild packages for major distributions.
So if you’re interested to take ownership of those, raise your hands now (ask maintainer status with obs interface).
I will let a grace period of one month before sending a delete request.
Have fun!
Wallpapers
Part of GNOME's visual identity are the default wallpapers. Ever since GNOME3 was released, regardless of the release version, you can tell a stock GNOME desktop from afar. Unlike what most Linux distributions do, we don't change the wallpaper thematically from release to release and there is a strong focus on continuity.
While both Android and Windows are going analog, we're not that hipster. If you follow my journal, you probably wouldn't be shocked to hear I mainly use Blender to create the wallpapers. In the past Inkscape took a major part in the execution, but its lacking implementation of gradients leads to dramatic color banding in the subtle gradients we need for the wallpapers. I used to tediously compensate for this in GIMP, using noisify filters while working in high bit depth and then reducing color using GEGL's magical color reduction operation that Hans Peter Jensen wrote a while a back. It allows to chose various dithering algorithms when lowering the bit depth.
However thanks to Cycles, we get the noise for free :) Actually it's one of the things I spend hours and hours waiting for getting cleaned up with iterations. But it does help with color banding.
In my work I have always focused on execution. Many artists spend a great deal of time constructing a solid concept and have everything thought out. But unless the result is well executed, the whole thing falls apart. GNOME Wallpapers are really just stripes and triangles. But it's the detail, the light play, the sharpness, not too much high density information that make it all work.
First iterations of the GNOME 3.20 variants are beginning to land in the gnome-backgrounds module. Check it out.
SVG animation
I haven't written a post in quite a while, so I decided to document my failure to come up with a viable alternative to the translatable animations we use in Getting Started documentation. So let's start with what's wrong with it. Despite being far more maintainable than a screencast, it's still a major hassle to keep the videos in sync with the developing designs. Every translation requires a re-render of all the frames and it quickly grows into gigabytes per language.
Video
If you're interested in seeing how these were produced, see the Behind the Scenes of getting Started video.
The animations themselves aren't super complex. Basic transforms (translation, scale and rotation) and opacity is all that's needed. And because we are using translatable SVGs in Mallard, it was time to look into SVG animation. There are numerous options available to animate in SVG, which already gave me a hint that none of them will work properly for my use case. I hate being right.
SMIL
I'll starts with the one I like least. The inline garbage approach. SMIL. Each attribute of an SVG element is animateable. Creating a global sequence using this by hand is close to impossible. Its capabilities do include a few extras like animating an object along a path, but in general I cannot imagine editing this by hand. Incorporating Inkscape into the workflow seemed feasible first. Inkscape will not touch the XML it doesn't know about. It will not clean out any of the animation stuff when you save. The xlink namespace definition to animate along path seems to have worked, but I can't figure out some weird offsets. Groups usually get some matrix transforms as soon as you reposition them. It all may boil down to Inkscape using its own coordinate system, I don't know. I haven't succeeded to bolt some animation on the Inkscape generated SVG.
CSS
A much more appealing was the concept of using CSS animation. We do a lot of transitions and some animation in gtk+, so it would have been great to reuse the same technology here. While CSS transitions are spot on, animation with a sense of a global timeline is not really the use case for the web. Usually animation in the intended context is an individual transform happening after an event triggered. Creating a sequence of various objects animating in a global timeline is pretty awkward. Especially if you want to loop the whole animation infinitely. The only tools for your disposal is either a time offset or relative time keyframes, keeping all objects' animation the same length.
I also ran into Firefox and Webkit interpreting transform-origin differently.
.run-animation {
transform-origin: top left;
animation: cursor-move 2s ease 1s forwards,
fade-in 1s linear 0s,
cursor-click .25s ease 3s alternate 2;
}
@keyframes fade-in {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes cursor-move {
from { opacity: 1; }
to { opacity: 1; transform: translate(100px,-100px);}
}
@keyframes cursor-click {
from { transform: translate(100px,-100px) scale(1); }
to { transform: translate(100px,-100px) scale(.5); }
}
The above CSS uses animation-delay. It might be possible to have all keyframes last the same time and use the keyframes relative keyframing for timing (duplicate same keyframe to "hold"). I can't imagine retiming or generally modify an existing animation hand constructed using CSS' keyframes though. A visual tool with a timeline would be necessary.
Javascript
There are many js based frameworks to aid creating and animating SVG documents in realtime, but none of them seem to aid me in creating a global complex animation using assets created in Inkscape. I looked at Google Webdesigner next.
Google Webdesigner
Google Webdesigner has all the necessary visual tools like property keyframing and a global timeline. Sadly it produces a rather less self contained set of html, js and css files. I didn't figure out a way how that could be brought into Mallard.
In the end, even though the animations don't seem to be that complex, maintaining them by hand doesn't seem very doable. A visual editor is required. If Google Webdesigner can be taught to produce a standalone SVG or Mallard taught to use iframes, I'm all ear. Any pointers to a similar tool is also welcome.


