Welcome to Planet openSUSE

This is a feed aggregator that collects what openSUSE contributors are writing in their respective blogs.

To have your blog added to this aggregator, please read the instructions.

04 May, 2015


I've had a 42mm Apple Watch Sport for about a week now and I've seen a lot of talk about battery life.  I'll admit the first couple of days I had it I was really worried the battery was not going to be enough and I was going to grow tired of worrying it.  After a week I don't have that same concern.  I now think the battery drain of the first few days was a combination of me playing with the watch constantly and giving demos to everyone I met.  That died off after a few days and my usage moved to what is probably more "normal".  I wear the watch all day and get notifications on it, but I'm not constantly playing with it now trying out everything.  I also typically log a one hour workout either trail running or road biking.  All of the workouts involve using the GPS and constant heart rate monitoring.

On Thursday of last week I was up early wearing my watch because I had to run my oldest son to school for an early morning project.  I got in to work early and wore the watch all day in the office receiving notifications.

Side Note: I find that I hardly take my phone out now during the day unless I'm away from my desk and need to write something longer than a simple dictation through the phone.

I left work early because I wanted to ride up the canyon  before it got dark.  I had plenty of battery left on my iPhone 6+ and the watch for the ride.

My boys and I were also going to the midnight showing of the new Avenger's movie (it is terrible btw) so I knew it was going to be a longer day than normal.  I thought about charging it up between my ride and going to the movie but decided I'd really put the watch to the test and not give it any additional juice.  Right before I went to bed at 3:30am I took a screen shot of the battery life and it was at 14%.

After 21 hours of continual use with a 1 hour bike ride using GPS and the heart rate monitor, the watch was still at 14%.  Not bad.  Keep in mind, I don't get a lot of notifications or interaction after 10pm so the last 5 1/2 hours didn't need a lot of power.  So far I'm satisfied the battery is sufficient.

Bonus:  I discovered tonight while out on a walk that if you double tap the crown, it will switch between the last two apps you have run.   I often want to jump between the music and the workout app, now I have a way to do that!

03 May, 2015

Michael Meeks: 2015-05-03 Sunday

20:49 UTCmember

  • Up early; off to the conference with Cor; chatted with and caught up with people variously much of the day; checked GUADEC dates: mid-family-holiday sadly. Bus, tram, train, to Eindhoven.
  • Airport; charged batteries, filed a few of my queued up Easy Hacks.
  • Fixed a VclPtr silly or two on the plane; worked in the coach station.


Spectacular sunset at Maria la Gorda

Spectacular sunset at Maria la Gorda

I recently went on a vacation to Cuba. As I wanted to go scuba diving there, I researched a bit beforehand. The information I could dig up was spotty at times, so I decided to share my notes in order to add it as anecdotal information when planning their diving trips.

During the 3 week trip to Cuba, I visited three locations in the south-western part of the island. In total, I did 19 dives along the Cuba coast, all of them very enjoyable. On the list were shallow (10-18m) coral reef dives, wall dives, some of them deep. I clocked my max depth at 34.1m. One of the things I wanted to do was a cave dive in a Cenote. Cenotes are underwater cave systems found around the geological area.

General Considerations

Dive boat at Maria la Gorda

Dive boat at Maria la Gorda

Cuba, being a Carribean island has a tropical climate with warm waters around it, and climatically a wet and a dry season. As the wet season may make the sea choppy, reduce visibility and carries the risk of hurricanes, it’s advisable to pick the dry seasons, months from November to May for diving activities. The South coast, which is where I have been diving had warm waters 27°C at the surface, and 26°C as depths down to about 35m. Visibility was generally excellent, commonly around 30m, with sometimes up to 50-60m in calm water. In several spots, there are large and well-preserved coral reefs. The South coast usually has calmer waters than the North coast, so I picked locations in the South-West: Maria La Gorda at the far southwestern point of the island, Playa Girón at the Bay of Pigs, and Playa Ancón near Trinidad. All turned out to be worth visiting and made for some amazing dives. (We also visited Cayo Levisa on Cuba’s Northern shore, which has a nice beach, but was mediocre at best for snorkeling from the shore. Go to Cayo Jutia instead, if you want good snorkeling, or book the boat to go diving at Cayo Levisa.)
Cuba is a communist country, instead of Coca Cola advertisements you’ll find some billboard reminding you that “the revolution is invincible”. Economic trade embargoes make acquiring scuba diving gear a problem (although I haven’t seen any shortcomings in this area myself). There’s usually just one dive center running the diving operations, so not much choice, but on the other hand, you’ll rarely encounter crowded dive sites, or reduced visibility due to other divers silting up the waters.

Touristic activities such as diving are usually possible through government-owned dive centers. There’s a network of official travel agents across the country, which can help you with booking trips and getting in contact with dive centers. Many of them are not easily reachable by phone, but you can sometimes book in advance of your trip online. In my experience, it would have been fine

Josef Reidinger: Article

07:00 UTC


My motivation for writing this blog post is to have one simple place where I can point everybody using += in a loop. I will describe here why it can kill the performance of any application or library and will also show some measurement to demonstrate it.

Let’s start with practical measurement. I created a simple measurement script which looks like this:

require "benchmark"

N = 100000
Benchmark.bm(15) do |x|
  x.report("Array#+=") do
    arr = []
    N.times { arr += [1] }

  x.report("Array#concat") do
    arr = []
    N.times { arr.concat [1] }

  x.report("String#+=") do
    s = ""
    N.times { s += "1" }

  x.report("String#<<") do
    s = ""
    N.times { s << "1"  }

And result for N = 10 000 looks like this:

                      user     system      total        real
Array#+=          0.280000   0.020000   0.300000 (  0.302993)
Array#concat      0.000000   0.000000   0.000000 (  0.002291)
String#+=         0.040000   0.000000   0.040000 (  0.041442)
String#<<         0.000000   0.000000   0.000000 (  0.002437)

and for N = 100 000 looks like this:

                      user     system      total        real
Array#+=         31.410000   6.940000  38.350000 ( 38.635201)
Array#concat      0.030000   0.000000   0.030000 (  0.028933)
String#+=         3.590000   0.020000   3.610000 (  3.635690)
String#<<         0.030000   0.000000   0.030000 (  0.029524)

As can be seen, it does not raise in a linear way and now it is time for some theory to explain why.

When you push elements to the same object, the complexity class of the loop is O(n), since it grows in a linear way. For += it needs to create a copy of the array or string first and then append the new part. The copy complexity class is also O(n) as it depends on array size (the approximation would be O(n/2), which means an O(n) complexity class because half is constant). Copy optimization mechanisms can help, but the complexity class will remain the same. The result is that you need to perform n times the copy operation, which is O(n). So += complexity class is O(n^2). That explains why the times do not raise linearly but quadratically.

Therefore, += should never, ever, be used in loops. If you need to have a new object, then create an empty Array or String before the loop and push new elements into it. It is more efficient. Sure Ruby is not your tool if you are looking for a way to reduce every millisecond, but there is no excuse to use the worse algorithm as it can make application unusable performance-wise.

02 May, 2015

Michael Meeks: 2015-05-02 Saturday

21:00 UTCmember

  • Up early; slide hackery; tram to the conference - why can The Netherlands get this Ubicard thing right across bus, train, tram etc. When the UK is still all paper-based ?
  • Gave a talk at the openSUSE conference on what's new in LibreOffice:
    What's new in LibreOffice recently.
  • Followed by a rather similar talk in the Kolab conference track - to some interesting guys; overall rather a fascinating set of conference attendees. BBQ dinner together, and talked late into the night; back to a cheap hotel with Cor.


20150501_133621The community kicked off the first day of the openSUSE Conference in The Hague, Netherlands, with tons of exciting news about project.

Keynote speaker Markus Feilner gave a brief overview of trending topics for this year’s conference.

One of topics was Richard Brown’s “The Future is Unwritten” presentation about building the perfect regular release using new source code from SUSE Linux Enterprise submitted into the Open Build Service. Using this source code, Richard was advocating for a new, more stable and well maintained release with a life cycle of three years or more, which would provide engineering efforts to focus on common elements between SLE and openSUSE.

His presentation also focused on the fast-moving, rolling release Tumbleweed and its acceptance by the Linux community. Besides highlighting the 14,000 installations of Tumbleweed and the 130,000 plus users of 13.2, which was basically a snapshot of Tumbleweed more than six-months ago, Richard gave examples how a slow week for Tumbleweed could include 146 package updates, one new Kernel and three snapshots. In addition to 15 new packages on the DVD, Tumbleweed had removed 38 packages from the DVD during a slow week for Tumbleweed, so Tumbleweed is preserving the integrity of the release.

The other keynote speaker, Aaron Seigo, did not disappoint; he’s a natural public speaker, well spoken and captured the crowd’s attention interest. To put it simply, Aaron is a speaker you not want to miss if you ever have the chance to hear him speak. Aaron spoke passionately about the reasons for using and developing Free Open Source Software. His whole point is that FOSS equates to freedom; freedom from closed-source software that is not transparent.

Developing FOSS empowers users, he said.

View the live-stream of the conferences.

01 May, 2015


The recording of my presentation from openSUSE conference 2015 is live.

During the session I talk about the success of Tumbleweed and how its the best choice for anyone who wants their Linux with the latest and greatest software

I then go on to talk about our openSUSE Regular Release, where I propose using the recently released SUSE Linux Enterprise sources as an opportunity to build a Stable Linux release that covers the needs of more conservative users as successfully as Tumbleweed covers the needs of those who want new versions of everything, regularly

Please enjoy the video and join the discussion on the opensuse-project@opensuse.org mailinglist

Michael Meeks: 2015-05-01 Friday

21:00 UTCmember

  • Up at 3:30am, flight to Eindhoven, meeting; on to Den Haag, caught up with old friends at the conference - wow, a fun conference with both free food, and free beer. Out for the sponsors dinner in the evening; to a hotel to write slides; up rather late.

30 April, 2015

Michael Meeks: 2015-04-30 Thursday

21:00 UTCmember

  • Mail chew, team calls, misc. code fixing, ESC call; late call; later to bed.

29 April, 2015

Michael Meeks: 2015-04-29 Wednesday

21:00 UTCmember

  • Mail chew; revenue recognition work; poked at conference travel for the forthcoming openSUSE / Kolab conference.


There are plenty of Dj software available on Internet. Most popular I think are Traktor and VirtualDJ. Those are no brainier to choose and don’t support Linux. Because I’m old fart and I started doing my dang long time a go with Technics vinyl-players (and still play my gigs with them). They work as they have always worked great but I though that I need new geeky Dj system with digital vinyls because many interesting release doesn’t do vinyls anymore and I don’t like CD-format. Summarizing all of that I wanted something that what is open source and I can still attach my digital vinyls to it (so it should work with Serato or Traktor vinyls).

After doing little bit homework I popped up with XWax which is an open-source Digital Vinyl System (DVS) for Linux. It works great and believe me it’s geeky. Still it left me little bit blank because I liked to use some Dj controller to load music.  XWax doesn’t support Dj controller at least I didn’t get mine working. So back to square one.

Then I crossed Mixxx and it looked very promising but Mixxx version 1.10 left much to hope for. After a short while they released version 1.11 which was better but I noted that plenty of MP4 format audio files didn’t work (most of the my music is encoded with Vorbis and wrapped with Ogg that works great but if you buy something they tend to favour MP4).

Make long story short. I get involved with Mixxx and it have very nice community, fixed non-working FFmpeg plug in and fixed handfull of Linux specific stuff. After making FFmpeg plug in working I noticed I have solved most of my digital Dj problems. Mixxx works with Linux… check, openSUSE.. thank you for asking yes, is open source… GPLv2, Dj controllers.. long list,  Digital vinyls.. serato and traktor and have nice working skinnable interface.. check.

Only thing is that Mixxx is using Portaudio with Linux and Portaudio doesn’t play nice with Pulseaudio but I wrote patch for Portaudio and it’s currently in ‘works for me’-stage which means late Beta. If I ever got time I’ll give it a facelift, commit it to Github and generate little bit documentation and try to again get it to official Portaudio

But if you are open source Dj and like to test state-of-art version (which is light years ahead last one) of Mixxx I’ll recommend to test Mixxx version 1.12 beta. You should understand it’s Beta software and if you find bug please report it. But if you want to stick with stable Mixxx version 1.11 there is nothing wrong with that it’s also very capable application.

In openSUSE you can download it with zypper from Packman repos.

28 April, 2015

Michael Meeks: 2015-04-28 Tuesday

21:00 UTCmember

  • Report review & tweakage, built ESC bug stats, merged VclPtr but enough conflicts that it will need a re-merge to try to keep up with a rapidly moving master branch. Finally merged it.
  • Board call while ferrying H. and M. to their lessons variously, stopped at playground on the way back; checked tinderboxen.
  • Dinner, read stories to babes; wrote LXF column; mail; bed.

27 April, 2015

Apple Watch on my right arm
My good friend Randy Cook was checking out my watch today and asked how left handed people use it.  I told him there was a setting to make it work on the right wrist.  He said too bad you can't move the crown.  For fun I just tried out the setting and was surprised to find there is also a setting to choose which side of the watch you want the crown on.

Apple Watch on my left arm with crown swapped
I immediately moved it back to my left arm and found I like it a lot better.  In fact one of the problems I had with the crown is it was difficult to rotate using my index finger.  It was also always against my wrist.  With the crown on the left side I can use my thumb and it's a lot easier (maybe I'm all thumbs?).

Using my the crown with my thumb!


Yesterday was my first whole day wearing an Apple Watch.  Besides being a gadget freak and a mobile developer, my main interest in getting an Apple Watch was to replace my current workout watch.  I haven't worn a watch for a number of years except when I'm out running or riding.


Toma and me above the altar
Workout Results
The first thing I did with the watch was take it up on a trail run to see how much I like it to track workouts.  I can't tell you how many times I've been running or biking and I get a text message or phone call and I can't tell who it is because my phone is tucked away. With the Apple Watch that won't be a problem and I can tell you it wasn't a problem on my first workout.  I could easily see who was texting me and respond or ignore until later.

Toma (my black lab) and I went trail running up to the Altar.  The watch notified me at each mile with a pleasant pop/click noise that seemed like it was mechanical because it vibrated slightly at the same time.  The display seemed a bit dim at times in the sun (with my sunglasses on especially).  I'll have to see how that plays out in different conditions.  It did rain a little on my run too and I was wishing for some kind of protection on the watch.  Someone should produce a rubber sleeve (something like what the Go Pro cameras use) to make the watch more weather resistant while working out.  I have no idea how weather resistant it is but there are slots on the side where it has a speaker and mic.

Apple Pay

To use Apple Pay on the watch you have to set it up even if you already have it set up on your phone. None of the cards will transfer to your watch, you have to re-add them.  I'm guessing it's because Apple never actually sends the card information anywhere and it is only store on your phone.

Unlike the iPhone, you have to activate Apple Pay on your watch.  I'm guessing that is to conserve power but you simply double click the side button and then hold it up to the NFC payment device.  No finger print needed with the Apple Watch.  I'm not sure if that is a good thing or not.  It's nice because it's faster than the iPhone but seems less secure.  You do have to unlock the watch any time it is take off your wrist so someone can't just take your watch and start paying with it.  Still, a fingerprint is more secure than a 4 digit code.

Stand Up!

While writing this post my watch notified me that I've been sitting too long.  I sort of like that.  I'm an engineer and sometimes


I was working on Question Answering last year. Guess what, I’m still on it!

I threw away my first prototype BlanQA and started building a second system, YodaQA. It currently has reasonable performance of answering about a third of trivia questions properly and listing the correct answer in top five candidates for half of the questions – without doing any googling or binging.

A few weeks ago, I published the first paper on YodaQA. With a few fellow scientists, we also re-started the qa-oss Google Group on open source question answering systems.

Today, I finally made a proper homepage for YodaQA and launched a live demo of the system. It’s pretty primitive, but hopefully will serve as a proof of concept.

Michael Meeks: 2015-04-27 Monday

21:00 UTCmember

  • Admin, 1:1 calls , out to Agnes Forsyth's funeral - a lovely Christian lady; a piper at the funeral too. Back for team call, more 1:1's, team call, another 1:1 & dinner. A whole day of meetings; urk. Chatted with J. happily in the evening.


Replacing Travis by Jenkins for YaST

I decided to look at the possible Travis replacement as my Hackweek 12 project.

Currently we use both Travis and Jenkins for continuous integration in YaST projects. Unfortunately there are many disadvantages with Travis which require additional work or limit us what we can run in a Travis job. See the hackweek project for the pros and cons summary.

The biggest Travis disadvantage is that the builds are run in a Ubuntu 12.04 system which is 3 years old and it's very difficult to find a recent compiler, Ruby interpreter, libraries,... for it. 

The Jenkins advantage is that it runs on our server and we can run the latest openSUSE very easily and avoid the problem with porting YaST packages to Ubuntu and backporting the development tools.

Jenkins Plugins

I found out that there are several Jenkins plugins which could be used to replace Travis with Jenkins:

You can install the plugins in your Jenkins instance like this:
  • Login into Jenkins
  • Go to Manage Jenkins -> Manage Plugins
  • In the tab Available select plugins GitHub Plugin, GitHub pull request builder plugin and Embeddable Build Status Plugin and install them

Configuring the GitHub Plugin

  • Generate a new access token at GitHub, select public_repo and repo:status. If you want to allow automatic webhook setup select write:repo_hook (you can add/remove the permissions later).
  • Add the token to Jenkins -> Manage Jenkins -> Configure System -> GitHub Web Hook section -> OAuth token field
  • Put the same token to the "GitHub Pull Request Builder" section, "Access Token" filed.

Create a new Jenkins job for building commits (pull requests are handled separately):

  • Select Freestyle project
  • Put the Github URL (https://github.com//) to the GitHub project filed
  • In the Source Code Management section select Git and put the same URL here
  • Make Branch Specifier field empty to build all branches
  • In the Build Triggers section - check Build when a change is pushed to GitHub
  • Add Build Step -> select Set build status to "pending" on GitHub commit
  • Add post-build action - Set build status on GitHub commit
  • Configure the other parameters of the build as needed
See more details here.

Configuring the GitHub Pull Request Builder

  • Add the created GitHub token to Jenkins -> Manage Jenkins -> Configure System -> GitHub Pull Request Builder section

Create a new job for building pull requests:

  • Select Free style project
  • Put the Github URL (https://github.com//) to the GitHub project filed
  • In the Source Code Management section select Git and put the same URL here
  • In Advanced option set Name to origin and Refspec to +refs/pull/*:refs/remotes/origin/pr/*
  • Set Branch Specifier to ${sha1}
  • In the Build Triggers section - check GitHub Pull Request Builder option



In just a few days, Geekos will kick off the openSUSE Conference in The Hague, Netherlands.

There is much to be excited about for this year’s annual conference. Markus Feilner, a seasoned Linux expert, will open up the conference with a keynote speech in the morning on May 1.

Richard Brown will follow that with a presentation titled “Super Secret SUSE Project”; that’s presentation you’re not going to want to miss.

Later that afternoon, Aaron Seigo will have his keynote speech, which is bound to be equally intriguing.

‎There will be four rooms used during the event and system administrators will have a chance in one of those rooms try out a new systems management toolkit for Linux from Project Machinery.

The four-day event can be viewed at https://events.opensuse.org/conference/osc15/schedule, but that is not the only schedule for oSC15.

The Kolab Summit will coincide on Saturday and Sunday with oSC15 and Kolab’s Chief Executive Officer Georg Greve will be providing the summit’s keynote speech on May 2.

The schedule for the summit can be viewed at https://conference.kolab.org/kolab-summit/program/schedule.

Having oSC15 together with the Kolab Summit provides a great opportunity for attendees to collaborate and strengthen its existing developers relationship.

There will be a social event on Saturday and Sunday and a good sources tells me there will be some openSUSE Beer at the event.

For those who are unable to make it to the event, the presenations will be viewable at https://www.youtube.com/user/opensusetv. Follow us on Facebook, Google + and Twitter.


26 April, 2015

Michael Meeks: 2015-04-26 Sunday

21:00 UTCmember

  • Out to NCC at the Academy, Helen spoke. Back for lunch, slugging, babes playing in the sun in the street with Sophie. H. home from her fun 'Shine' + sleepover + barn-dance + film bash. Out for a run with J. played 'Bridges' with H. Tea, stories, bed.

25 April, 2015

Michael Meeks: 2015-04-25 Saturday

21:00 UTCmember

  • Breakfast, J. out for a seminar on teenage kids at church. Fed three babes - sawed up the last bits of the sofa to bin them; dis-assembled the malfunctioning toilet door - somehow broken its spring(s) - made some split-ring pliars from screws & a bolt with N. cannibalised pantry door for toilet door & ordered new parts.
  • Started assembling some flat-pack kitchen units; David arrived, finished the assembly - had a fine pizza dinner together, read stories & talked companionably until late.

24 April, 2015

Michael Meeks: 2015-04-24 Friday

21:00 UTCmember

  • Mail chew, admin, misc. calls; got the VclPtr bits passing make check, and building on Mac / Linux / Windows. Not good to merge just before the weekend I suspect. H. out for a sleepover.
  • Watched Jane Eyre on the BBC in the evening with Julia - horrific compared to the nuance depth of the book; hardly explicable without reference to it either.

23 April, 2015

Michael Meeks: 2015-04-23 Thursday

21:00 UTCmember

  • Reminded by Claire to update my blog; good idea.
  • Mail chew; amused to see the pictures from Keith of what building LibreOffice can do to your laptop paint job; though I'm rather a fan of Thinkpads.
  • Great to see Tobias and Jennifer's interview written up by Sam; nice work guys.
  • Partner call; lunch; ESC call; pushed minutes. Poked at CI builds of VclPtr bits.


One of the perks of working at SUSE is hackweek, an entire week you can dedicate working on whatever project you want. Last week the 12th edition of hackweek took place. So I decided to spend it working on solving one of the problems many users have when running an on-premise instance of a Docker registry.

The Docker registry works like a charm, but it’s hard to have full control over the images you push to it. Also there’s no web interface that can provide a quick overview of registry’s contents.

So Artem, Federica and I created the Portus project (BTW “portus” is the Latin name for harbour).

Portus as an authorization service

The first goal of Portus is to allow users to have a better control over the contents of their private registries. It makes possible to write policies like:

  • everybody can push and pull images to a certain namespace,
  • everybody can pull images from a certain namespace but only certain users can push images to it,
  • only certain users can pull and push to a certain namespace; making all the images inside of it invisible to unauthorzied users.

This is done implementing the token based authentication system supported by the latest version of the Docker registry.

Docker login and Portus authentication in action

Portus as a front-end for Docker registry

Portus listens to the notifications sent by the Docker registry and uses them to populate its own database.

Using this data Portus can be used to navigate through all the namespaces and the repositories that have been pushed to the registry.

repositories view

We also worked on a client library that can be used to fetch extra information from the registry (i.e. repositories’ manifests) to extend Portus’ knowledge.

The current status of development

Right now Portus has just the concept of users. When you sign up into Portus a private namespace with your username will be created. You are the only one with push and pull rights over it; nobody else will be able to mess with it. Also pushing and pulling to the “global” namespace is currently not allowed.

The user interface is still a work in progress. Right now you can browse all the namespaces and the repositories available on your registry. However user’s permissions are not taken into account while doing that.

If you want to play with Portus you can use the development environment managed by Vagrant. In the near future we are going to publish a Portus appliance and obviously a Docker image.

Please keep in mind that Portus is just the result of one week of work. A lot of things are missing but the foundations are solid.

Portus can be found on this repository on GitHub. Contributions (not only code, also proposals, bugs,…) are welcome!


You probably saw this phoronix article which references the log of the #dri-devel channel on freenode. This was an attempt to trash my work on lima and tamil, using my inability to get much in the way of code done, and my unwillingness to throw hackish tamil code over the hedge, against me. Let me take some time to explain some of that from my point of view.

Yes, I have lost traction.

Yes, i am not too motivated to work on cleaning up code at this time. I haven't been too motivated for anything much since FOSDEM 2014. I still have my sunxi kms code to fix up/clean up, and the same is true for the lima driver for mesa. It is also pretty telling that i started to write this blog entry more than two months ago and only now managed to post it.

Under the circumstances, though, everyone else would've given up about 2 to 3 years ago.

Due to my usual combination of stubbornness and actually sitting down and doing the work, I have personally kickstarted the whole open ARM GPU movement. This is the third enormous paradigm shift in Linux graphics that i have caused these past almost 12 years (after modesetting, and pushing ATI to a point of no return with an open source driver). All open ARM GPU projects were at least inspired by this, some actually use some lima code, others would simply not have happened if I hadn't done Lima and/or had kept my mouth shut at important junctions. This was not without sacrifices. Quite the opposite.

From March 2011 on, I have spent an insane amount of time on this. Codethink paid, all-in-all, 6 weeks of my time when i was between customer projects. Some of the very early work was done on Nokia time, as, thanks to our good friend Stephen Elop, operations were winding down severely in late 2011 to the point where mostly constant availability was needed. However, I could've used that extra free time in many other useful ways. When I got a job offer at SuSE in november 2011 (basically getting my old job back due to Matthias Hopf taking up a professorship), I turned it down so I could work on the highly important Lima work instead.

When Codethink ran into a cashflow issue in Oktober 2012 (which apparently was resolved quite successfully, as codethink has grown a lot more since then), I was shown the door. This wasn't too unreasonable a decision given my increasing disappointment with how lima was being treated, the customer projects i was being sent on, and the assumption that a high profile developer like me would have an easy time getting another employer. During the phonecall announcing my dismissal, I did however get told that ARM had already been informed about my dismissal, so that business relations between ARM and codethink could be resumed. I rather doubt that that is standard

osemnewsby Alex Vennos

What is OSEM?

OSEM is an event management web application, tailored to the needs of FOSS conferences. You can visit http://osem.io/ to find out more about it.

You can contribute too!

The guide is based & tested on openSUSE 13.2 and it will help you get started with your development right away!

How to install OSEM

Step 1. Install Ruby & Bundler (version >= ruby 2.1.2)

sudo zypper in ruby rubygem-bundler

Step 2. Install git to your system

sudo zypper in git

Step 3. Clone the repository locally to your machine

git clone https://github.com/openSUSE/osem/

Step 4. Install the basic packages, you will need them for the next steps in order for bundle install to work.

sudo zypper in make ruby-devel libxml2 libxml2-devel libxslt libxslt-devel libmysqlclient-devel libqt4-devel libQtWebKit-devel nodejs

Step 5. Move in the folder osem and install the necessary gems in your local project folder

cd osem

bundle install –standalone

Step 5.1. Optional: You may need to configure nokogiri, so that bundle install succeeds

bundle config build.nokogiri –use-system-libraries

Step 6. You can also generate your secret keys for devise and the rails app with

bundle exec rake secret

Step 7. Copy the sample configuration files

cp config/config.yml.example config/config.yml

cp config/database.yml.example config/database.yml

cp config/secrets.yml.example config/secrets.yml

Step 8. Setup the database

bundle exec rake db:setup

Step 9. Start your rails server and run OSEM

bundle exec rails server

Step 10. And you are all set! Visit OSEM at http://localhost:3000

…and let the coding begin! The fun starts here!

Finally I want to thank Stella Rouzi for her help!

Contact us!!

Have questions? Contact us!

By email: info@osem.io

By IRC: irc://freenode.net/osem

Found a bug? Please open a new issue directly in github.


GitHub issue tracking is the best, and fastest, way to ensure your bug

will be properly reported and fixed

Have ideas? Develop them and send us a Pull Request with your new feature!


Either way, JOIN US!

22 April, 2015

Michael Meeks: 2015-04-22 Wednesday

21:00 UTCmember

  • Customer call, interview, interesting lunch with Andrew Haley. Partner call, sync. with Tomaz, reviewed a nice blog.

21 April, 2015

Michael Meeks: 2015-04-21 Tuesday

21:00 UTCmember

  • Meetings with UKTI in the morning, good to catch up with the team. Collabora Quarterly meeting in the afternoon. Acutely irritated by parts2repair.com which appears unable to send me what I ordered; I guess the moral is to check scam adviser first or somesuch.


I might be the first one that started using ownCloud in Greece. Don't remember the version (I think it was version 4.x.x back in 2011-2012). My main contributions to the project are translation and promotion. For the past years I made many presentations around Greece. You can see my blog is full of tutorials. I also wrote documentation for openSUSE. Finally, I made a huge (in my opinion) contribution to Greek translation.

The past few presentations and all the help I got from the community, I managed to engage more people to contribute to our community. I went to continue translation and I saw that it was 100%.

Although I'm not the coordinator of translations, I would like to thank everyone who helped. Now it's the hard part to check for the quality of the translations and also keep the 100%. ownCloud community is pretty active and they change strings almost everyday.


Update April 2015: Reading it again years later, I regret the tone of this post. I was frustrated at the time and it comes across now as just smarmy. Still, I stand by the principal idea: that you should avoid Python’s daemon threads if you can.

The other day at work we encountered an unusual exception in our nightly pounder test run after landing some new code to expose some internal state via a monitoring API. The problem occurred on shutdown. The new monitoring code was trying to log some information, but was encountering an exception. Our logging code was built on top of Python’s logging module, and we thought perhaps that something was shutting down the logging system without us knowing. We ourselves never explicitly shut it down, since we wanted it to live until the process exited.

The monitoring was done inside a daemon thread. The Python docs say only:

A thread can be flagged as a “daemon thread”. The significance of this flag is that the entire Python program exits when only daemon threads are left.”

Which sounds pretty good, right? This thread is just occasionally grabbing some data, and we don’t need to do anything special when the program shuts down. Yeah, I remember when I used to believe in things too.

Despite a global interpreter lock that prevents Python from being truly concurrent anyway, there is a very real possibility that the daemon threads can still execute after the Python runtime has started its own tear-down process. One step of this process appears to be to set the values inside globals() to None, meaning that any module resolution results in an AttributeError attempting to dereference NoneType. Other variations on this cause TypeError to be thrown.

The code which triggered this looked something like this, although with more abstraction layers which made hunting it down a little harder:

    log.info("Some thread started!")
    except somemodule.SomeException:
    log.info("Some thread exiting!")

The exception we were seeing was an AttributeError on the last line, the log.info() call. But that wasn’t even the original exception. It was actually another AttributeError caused by the somemodule.SomeException dereference. Because all the modules had been reset, somemodule was None too.

Unfortunately the docs are completely devoid of this information, at least in the threading sections which you would actually reference. The best information I was able to find was this email to python-list a few years back, and a few other emails which don’t really put the issue front and center.

In the end the solution for us was simply to make them non-daemon threads, notice when the app is being shut down and join them to the main thread. Another possibility for us was to catch AttributeError in our thread wrapper class – which is what the author of the aforementioned email does – but that seems like papering over a real bug and a real error. Because of

20 April, 2015

Michael Meeks: 2015-04-20 Monday

21:00 UTCmember

  • Wrote status report, 1:1 meetings, 2x team meetings, admin.

Older blog entries ->