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.

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

20:15 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.


I often see people asking how to contribute to an open source project on GitHub. Some are new programmers, some may be new to open source, others aren’t programmers but want to make improvements to documentation or other parts of a project they use everyday.

Using GitHub means you’ll need to use Git, and that means using the command-line. This post gives a gentle introduction using the git command-line tool and a companion tool for GitHub called hub.


The basic workflow for contributing to a project on GitHub is:

  1. Clone the project you want to work on
  2. Fork the project you want to work on
  3. Create a feature branch to do your own work in
  4. Commit your changes to your feature branch
  5. Push your feature branch to your fork on GitHub
  6. Send a pull request for your branch on your fork

Clone the project you want to work on

$ hub clone pydata/pandas

(Equivalent to git clone https://github.com/pydata/pandas.git)

This clones the project from the server onto your local machine. When working in git you make changes to your local copy of the repository. Git has a concept of remotes which are, well, remote copies of the repository. When you clone a new project, a remote called origin is automatically created that points to the repository you provide in the command line above. In this case, pydata/pandas on GitHub.

To upload your changes back to the main repository, you push to the remote. Between when you cloned and now changes may have been made to upstream remote repository. To get those changes, you pull from the remote.

At this point you will have a pandas directory on your machine. All of the remaining steps take place inside it, so change into it now:

$ cd pandas

Fork the project you want to work on

The easiest way to do this is with hub.

$ hub fork

This does a couple of things. It creates a fork of pandas in your GitHub account. It establishes a new remote in your local repository with the name of your github username. In my case I now have two remotes: origin, which points to the main upstream repository; and joeshaw, which points to my forked repository. We’ll be pushing to my fork.

Create a feature branch to do your own work in

This creates a place to do your work in that is separate from the main code.

$ git checkout -b doc-work

doc-work is what I’m choosing to name this branch. You can name it whatever you like. Hyphens are idiomatic.

Now make whatever changes you want for this project.

Commit your changes to your feature branch

If you are creating new files, you will need to explicitly add them to the to-be-commited list (also called the index, or staging area):

$ git add file1.md file2.md etc

If you are just editing existing files, you can add them all in one batch:

$ git add -u 

19 April, 2015

Michael Meeks: 2015-04-19 Sunday

21:00 UTCmember

  • NCC, Tony spoke, slugged much of the afternoon.

Richard Brown: Hackweek 12 & openQA

19:09 UTCmember


Last week was SUSE’s Hackweek 12.
Hackweeks are special weeks at SUSE where all of SUSE Engineering get to work on whatever they’d like, to try cool things and learn new stuff.

This Hackweek was my first at SUSE’s Nuremberg office, and it was quite an experience. The whole place had a ‘buzz’ about it all week. Every day the company sponsored Lunch or Breakfast, which got everyone together and triggered many interesting conversations. Some times we were serenaded by the ‘SUSE Band‘ who were working on their musical abilities and technology for hackweek.

I had lots of conversations about the upcoming openSUSE conference, some of SUSE’s planned projects around openSUSE, and of course openQA, which was a big part of lots of peoples Hackweek.

Bernhard Wiedemann worked on adding subtitles to openQA’s video recordings so users can see what openQA is doing when it produces the recorded screen output.

Max Lin worked on a chrome extension to provide live status monitoring of an openQA instance and its workers.

Bernhard, Stephan Kulow, and Klaus Kämpf looked at getting openQA to test bare metal hardware.
While openQA already has support for IPMI for bare metal testing of servers, pushing the already established limits is exactly the spirit of Hackweek :)
Bernhard started experimenting with the idea of using ARM development boards to emulate a keyboard and relay openQAs keyboard commands. Next Hackweek he hopes to have a HDMI grabber so it will be able to see the video output also.
Klaus and Coolo were successful in getting openQA to control hardware with Intel vPro/AMT (as found in Thinkpads and other common laptop/desktop hardware). This demonstration video shows it working on my very own X220 Thinkpad.

And Xudong Zhang from Beijing and myself worked on testing openQA by using openQA

Testing openQA on openQA, are you crazy?

Actually, only a little crazy.
We made life easy for ourselves by creating two disk images (one for SLES 12 and another for openSUSE 13.2) to represent the same production environments we have for http://openqa.opensuse.org and the internal SUSE openQA instance.

These images were created following the regular openQA Documentation and setup to test a ‘known good’ Distribution with a static set of tests (openSUSE 13.2 with the tests and needles from our GitHub project)

We then configured openQA to treat this disk image as a different ‘distribution’, and we wrote new tests for testing openQA (See the source code HERE)

A little bit of ‘needling’ later (Capturing the reference screenshots and defining the areas of interest to openQA, which can be found HERE) we had a working test run which was able to test openQA running on openSUSE 13.2

and also for testing openQA on SLES 12

These tests successfully test all the core functionality of openQA, including Upgrading from the official OBS repository, Confirming the Worker is running, Scheduling an openQA job from the shell, Confirming a Job is running

18 April, 2015

Michael Meeks: 2015-04-18 Saturday

21:00 UTCmember

  • A busy week chasing and missing the Alpha 1 deadline (today). Into Cambridge, fun customer meeting all day with Bob, lunch, museum, punting, etc.


Tuning PIDs is one of those things you really don’t want to do, but can’t avoid it in the acrobatic quad space. Flying camera operators don’t usually have to deal with this, but the power/weight ratio is so varied in the world of acro flying you’ll have hard time avoiding it there. Having a multirotor “locked in” for doing fast spins is a must. Milliseconds count.

FPV Weekend

So what is PID tuning? The flight controller’s job is to maintain a certain position of the craft. It has sensors to tell it how the craft is angled and how it’s accellerating, and there’s external forces acting on the quad. Gravity, wind. Then there’s a human giving it RC orders to change its state. All this happens in a PID loop. The FC either wants to maintain its position or is given an updated position. That’s the target. All the sensors give it the actual current state. Magic happens here, as the controller gives orders to individual ESCs to spin the motors so we get to there. Then we look at what the sensors say again. Rinse and repeat.

PID loop is actually a common process you can find in all sorts of computer controllers. Even something as simple as a thermostat does this. You have a temperature sensor and you drive a heater or an air conditioner to reach and maintain a target state.

The trick to a solid control is to apply just the right amount of action to get to our target state. If there is difference between where we are and where we want to be, we need to apply some force. If this difference is smaller, only a small force is required. If it’s big, a powerful force is needed. This is essentially what the P means, proprotional. In most cases, as a controller, you are truly unhappy if you are elsewhere to where you were told to be. You want to correct this difference fast, so you provide a high proportional value/force. However, in the case of a miniquad, the momentum will continue pulling you when you reached your target point and don’t apply any force anymore. At this point the difference occurs again and the controller will start correcting the craft pulling it back in the opposite direction. This results in an unstable state as the controller will be bouncing the quad back and forth, never reaching the target state of “not having to do anything”. The P is too big. So what you need is a value that’s high enough to correct the difference fast, but not as much so the momentum gets you oscillating around the target.

So if we found our P value, why do we need to bother with anything else? Well sadly pushing air around with props is a complicated way to remain stationary. The difference between where you are and where you want to

17 April, 2015


There was a recent discussion on the Extreme Programming mailing list kicked off by Ron Jeffries saying he wants his XP back.

The implication being that Extreme Programming is no longer practised, and that most “Agile” organisations are actually practising Flaccid Scrum – some agile process but little of the technical practices from Extreme Programming.

Update: Ron clarifies in the comments that we agree that extreme programming is still practised, but it would be good if it were practised by more teams :)

I disagree with this premise. Extreme Programming is alive and well, at least here in London. We have XProlo, eXtreme Tuesday Club, XPDay and many other communities dedicated to XP practices under other names like Continuous Delivery and Software Craftsmanship. There are enough organisations practising Extreme Programming for us to organise regular developer exchanges to cross-pollenate ideas. Extreme programming skills such as Test-driven development and continuous-integration are highly in demand skills in Job Descriptions, even if there is much confusion about what these things actually entail.

When I say that Extreme Programming is alive and well, I do not mean we are working in exactly the same way as described in Kent Beck’s Extreme Programming Explained book. Rather, we still have the same values, and have continued to evolve our technical and team practices. Kent Beck says

“my goal in laying out the project style was to take everything I know to be valuable about software engineering and turn the dials to 10.”

Well now we have turned the dials up to eleven. What does modern Extreme Programming look like?

Turning the dials up to 11

Here are some of the ways we are now more extreme than outlined in Extreme Programming explained.

Pair Programming becomes Mob Programming

Update: Apparently XP Teams are so aligned that Rachel has written a similar blog post, covering this in more detail.

XP Explained says “Write all production programs with two people sitting at one machine”. We’ve turned this to eleven by choosing how many people are appropriate for a task. We treat a pair as a minimum for production code, but often choose to work with the whole team around a single workstation.

Mobbing is great when the whole team needs to know how something will work, when you need to brainstorm and clarify ideas and refinements as you build. It also reduces the impact of interruptions as team-members can peel in and out of the mob as they like with minimal disruption, while a pair might be completely derailed by an interruption.

When pair programming it’s encouraged to rotate partners regularly to ensure knowledge gets shared around the team and keep things fresh. Mobbing obviates the need to rotate for knowledge sharing , and takes away the problem of fragmented knowledge that is sometimes a result of pair rotation.

Continuous Integration becomes Continuous Deployment

In Extreme Programming explained Kent Beck explains that “XP shortens the release cycle”, but still talks about planning “releases once a Quarter”. It suggests we

16 April, 2015


Local open source community is bigger now and next step for you is to organize (or join) global conferences. One part of the organization is the promotion of the conference. You want to have as many visitors as you can.

I will try to write down what I did during openSUSE global conferences and some local events.


0. Web page

There MUST be a web page and a system that accepts registration, paper submission, information etc. Write everything that visitor should know about the conference.
We use OSEM in openSUSE. Check out https://events.opensuse.org

1. Blog blog blog.

You'll have some announcements for the conference. Dates, the place, new website, call for papers announcement, hotels that visitors can stay, schedule, keynote speakers etc. Usually, every open source project has a central blog or news site. You can write the articles there. Try to make fuzz by publishing your articles often.
Global communities can translate the announcements to their language and promote the conference locally.

Local communities are formed by members with blogs who publish on different planet sites. You can make a schedule so everyone can publish the announcement every other day. More eyes will see the announcement and will apply either as speaker or visitor.

Two things you want to have is contributors+visitors and sponsors. If your project is famous, then it's easy. If not, then you better publish the initial announcement to magazines, newspapers, technical blogs-sites. If you don't have access, then you better send it by e-mail or fax and then call them and ask them if they got the text. If they publish it, you're lucky.

Translate those announcements and publish them, so local population will see that there's a conference coming.

2. Promote to other FOSS conferences

There are plenty of FOSS conferences around the world.
* Community (local or global) has to apply for a booth and/or, if it's possible, present why someone should attend.
* At the booth, you should have promo materials of your conference and give away to local LUGs or hackerspaces to hang posters at their places.
* Another cool thing is to have free coupons for beer at the conference. If beer isn't the solution, then find another thing that can be found only at your conference and give free coupons.
* Wear special T-Shirts with the logo or #oSC or "Ask me for the conference". You show people that you're organizing something and can ask you questions.
* Finally, go to other project's booth and invite them. You can ask them if they want to have a booth at your conference or apply for a presentation.

3. Messages to post

Create a list of messages you'll post to social media.
First of all, you should post the announcements.
Then create a list of general messages that you should post before the conference. Content will be related to the subject of the conference or the country etc

15 April, 2015

Michael Meeks: 2015-04-15 Wednesday

21:00 UTCmember

  • Mail chew, partner call; team call; did some modelling and a bit of calc / StarBasic function creation. Built ESC bug stats.


After Monday release of separate Gammu and python-gammu, the obvious task was to get the new package to distributions.

First I've started with Debian packages, what was quite easy as from quite complex CMake + Python package it is now purely CMake and it was mostly about removing stuff. Soon the updated Gammu package was uploaded to experimental. Once having that ready, I've also update the backports for Ubuntu and these are available in Gammu PPA. Creating new python-gammu package was a bit harder as this is the first Python 3 compatible package I've created, but it's now ready and sitting in the NEW queue.

While working on python-gammu package, I've realized that some of the data used in testsuite are missing in the tarball. While not being critical, this is definitely not nice, so I've decided to release python-gammu 2.1 today. It also includes fixes for some corner cases found by coverity.

For openSUSE the packaging was quite easy as well, stripping out unneeded parts of Gammu package went smoothly and it's now in hardware project, SR to Factory is pending. With python-gammu it turned out to be much harder as the testsuite had failed there with some strange error coming out of libdbi. After looking deeper into it, the problem is in new return type available in Git snapshot openSUSE is shipping. Fortunately producing fix was quite easy, so next Gammu upstream will handle that properly and package in hardware project is already patched. You can now use python-python-gammu from devel:languages:python and SR to Factory is pending as well.

Filed under: Debian English Gammu python-gammu SUSE Wammu | 0 comments

14 April, 2015

Jakub Steiner: Minis and FPV

23:30 UTCmember



I’ve got some time into the hobby to actually share some experiences that could perhaps help someone who is just starting.

Cheap parts

I like cheap parts just like the next guy, but in the case of electronics, avoid it. Frame is one thing. Get the ZMR250. Yes it won’t be near as tough as the original Blackout, but it will do the job just fine for a few crashes. Rebuilding aside, you can get about 4 for the price of the original. Then the plates give. But electronics is a whole new category. If you buy cheap ESCs they will work fine. Until they smoke mid flight. They will claim to deal with 4S voltage fine. Until you actually attach a 4S and blue smoke makes its appearance. Or you get a random motor/ESC sync issue. And for FPV, when a component dies mid flight, it’s the end of the story if it’s the drive (motor/esc) or the VTX or a board cam.

No need to go straight to T-motor, which usually means paying twice as much of a comparable competitor. But avoid the really cheap sub $10 motors like RCX, RCTimer (although they make some decent bigger motors), generic chinese ebay stuff. In case of motors, paying $20 for a motor means it’s going to be balanced and the pain of vibration aleviated. Vibrations for minis don’t just ruin the footage due to rolling shutter. They actually mess up the IMU in the FC considerably. I like Sunnysky x2204s 2300kv for a 3S setup and the Cobra 2204 1960kv for a 4S. Also rather cheap DYS 1806 seem really well balanced.

Embrace the rate

Rate mode is giving up the auto-leveling of the flight controller and doing it yourself. I can’t imagine flying line of sight (LOS) on rate, but for first person view (FPV) there is no other way. NAZE32 has a cool mode called HORI that allows you to do flips and rolls really easily as it will rebalance it for you, but flying HORI will never get you the floaty smoothness that makes you feel

Michael Meeks: 2015-04-14 Tuesday

21:00 UTCmember

  • Mail chew; plugged at various problems left/right with Noel in gaps. Admin bits, TDF observed acceptance tests. Took H. to hospital - seemingly she fractured her wrist yesterday, got a splint.


This week is Hackweek 12 at SUSE

My hackweek project is improving GNOME password management, by investigating password manager integration in GNOME.

Currently, I'm using LastPass which is a cloud-based password management system.

It has a lot of very nice features, such as:

  • 2 factor authentication
  • Firefox and Chrome integration
  • Linux support
  • JS web client with no install required, when logging from a unknown system (I never needed it myself)
  • Android integration (including automatic password selection for applications)
  • cli open-source client (lastpass-cli), allowing to extract account specific information
  • encrypted data (nothing is stored unencrypted server side)
  • strong-password generator
  • support encrypted notes (not only password)
  • server based (clients sync) with offline operations supported
However, it also has several drawbacks:
  • closed-source
  • subscription based (required for Android support)
  • can't be hosted on my own server
  • doesn't integrate at all with GNOME desktop
I don't want to reinvent the wheel (unless it is really needed), which is why I spend my first day at searching the various password managers available on Linux and compare their features (and test them a bit).

So far, I found the following programs:
  • KeePass (GPL):
    • version 1.x written in Java, still supported, not actively developed
    • version 2.x written in C# (Windows oriented), works with Mono under Linux
    • UI feels really Windows-like
    • DB format change between v1 and v2
    • supports encrypted notes
    • password generator
    • supports plugins ( a lot are available)
    • support OTP (keeotp plugin, provide 2factor auth through TOTP, HTOP built-in)
    • shared db editing
    • support yubikey (static or hotp)
    • 2 Firefox extension available(keefox, passifox)
    • 3 android applications available (one application KeePass2Android supports alternative keyboard, KeepShare supports alternative keyboard + a11y framework to fill android application forms, like LastPass)
    • Chrome extension available
    • JS application available
    • CLI available
    • big ecosystem of plugins and other applications able to process file format

  • KeePassX (GPL)
    • Qt4 "port" of KeePass (feels more a Linux application than KeePass)
    • alpha version for DB v2 support
    • missing support for OTP
    • missing support for keypasshttp (required by firefox extensions to discuss with main application), support is being done in a separate branch by a contributor, not merged
    • release are very scarse (latest release is April 2014, despite commits on git, very few people are contributing, according to git)
    • libsecret dbus support is being started by a contributor

  • Mitro:
    • company developped it was bought by Twitter last year, project released under GPL, no development since January.

  • Password Safe (Artistic license):
    • initially written by Bruce Schneier 
    • beta version available on Linux
    • written in wxWidgets 3.0 / C++
    • yubikey supported
    • android application available, no keyboard nor a11y framework usage, only use copy/paste (but allows sync of db with owncloud and other cloud platforms)
    • CLI available
    • 3 different DB formats (pre-2.0, 2.0, 3.0)
    • password history
    • no firefox extension and the "auto-type" built-in function is all but intuitive
    • support merge of various db

  • Encrypt:
    • same 0 knowledge framework as SpiderOak
    • node-js based

  • Pass:
    • simple script on top of text files / gnupg and optionnally git (used

Older blog entries ->