2016 … what’s next?

Lots of things happened in 2016. Probably way too much as I cannot really recall what I did in which month.

It hasn’t been easy all the time, and being under pressure I also made certain mistakes or acted differently than I demand it from myself.

I’m not really a fan of “1.1.2017 – leave all things behind and start over”. Reality is different and so I am taking a moment to breathe and reflect what really happened in 2016. Things I want to improve, things I loved but also things which went not so good.


Things which I would do different

At some point in late 2016 I realised that I am doing a) core development fixing bugs b) first level support c) community support. This isn’t essentially bad, but b) should be done by co-workers and c) requires a lot of effort to train community members and share knowledge.

Together with a), the actual majority of my daily work, this literally exploded at some point. I’m not proud of the way how it went (story for real life conversation) but I couldn’t help myself in this situation. In the end changes and workflows have been adopted and I am looking forward to see progress here.

Dealing with important bugs, not knowing which one comes first isn’t easy. If the support channels rely on your answer to problems, this has a huge impact on your work load. You can’t focus on the important problems anymore but need to take the chance to analyse the problems by yourself. You loose track of the important bug you’ve been looking into before getting disturbed. Finally you’ll end up with lots of ping-pong and accusations who did it wrong. Many things not even so-called project managers could solve, we’re not big enough for that even.

When your issue dashboard says 400, like 30 urgent and a lot of possible duplicates .. well. I helped myself with getting pen and paper, writing the problems down and pinning them on the wall.

There are still some issues, even many, but one also needs a better voting mechanism than Redmine provides. I am eagerly waiting for the tags and +1 capabilities we’ll be using on GitHub.

After all I consider some situations where my mind said “fix it now” being plain wrong. I should’ve waited and not rushed for solutions. There’s no guarantee for a fix anyhow. Still a problem with freeing your mind in the evening. That’ll be a deal breaker when you’re part of an open source project for many years. You sometimes just cannot stop, or the burnout stops you.

One thing I also learned the hard way – if you help others by accidentally doing their job, they’ll always rely on you. Help them in a way that they learn from you, but are able to take notes and probably never ask again.


The good stuff

Dashing turned from a fun project into an official Icinga 2 integration. I learned a lot about Ruby and Coffeescript and received overwhelming community feedback. I even wrote some development guides to help others.

The Icinga Vagrant Boxes are still on the run, and make my life even more easy. Lately I kept working on an Icinga 1x release but didn’t want to locally install the dev environment. Or by having a FreeBSD test box.

A while back I have forked the Manubulon SNMP plugins because I needed them for my own projects. It gained more attraction and I also added community contributed patches. OpenBSD is already using it, and Debian is probably going to replace the old project as well.Debian is using them already . In order to help everyone, I decided to tag and release v2.0.0.

One of my interests after learning about Graphite, InfluxDB, Grafana as well as Puppet was to gain knowledge about the Elastic Stack. I know Graylog already but getting things done with Elastic being the primary tool at work fascinated me. And of course the Elastic Beats concept. So I went for an Elastic Vagrant box and also looked into the new 5.x release.

I’ve also finally attended the Puppet training courses. I don’t use it on a daily basis, but now can better imagine how monitoring fits into config management. That made PuppetConf 2016 even more joy for me. Since the Icinga 2 Puppet module is currently rewritten I’m waiting for its final release to integrate it inside the Vagrant boxes. I’ve also contributed a small patch for the InfluxDB Puppet module this year and am hoping to contribute even more.

I did write the Git training courses from scratch this year, and have provided 3 trainings already. In mid 2017 we’ll be adding GitLab to it and focus on even more integration possibilities. It is a “new” playground for me and before writing the training material I thought I would know everything about Git. I was wrong – I only know some of the magic practical examples, but there are so many others. And the feedback and questions during the training were also helpful to just try things out and update the training material.

I have a lot of fun doing social media during events. That’s mainly twitter with introductions and topics which interest me, be it with Icinga or NETWAYS. One thing I really love – sharing that knowledge and motivation to colleagues. I am also retweeting interesting tweets, like Icinga regularly got some Grafana stuff, or NETWAYS posts about Elastic, Puppet and so on. Twitter is what >50% of my co-workers are using for also interacting with work stuff, and it has become even more important being part of the “twitter family” – just to know what’s funny or cool these days 😉

NETWAYS also now has its own event location namely “Kesselhaus“. Primarily used for training sessions this has been opened up for employees to host their own parties. And so I did with the generous help of Georg, giving a party for my 33th birthday. Including some firemen, a blonde transformation and lots of G&T (the Saffron Gin is really tasty).

Birthday presents were lots of Lego too 😉 I did not build so many Lego this year, but then decided to go for Big Ben instead of the rather expensive Lego Technic Porsche model. Building a model piece by piece really is more enjoyable than using pre-defined bricks for that. Turns out that 2017 might bring a new addition to that – the Lego Creator Expert series is celebrating their 10th birthday with a new exclusive model, 1,5 of the size of the normal buildings. Hmmmm 😉

Speaking of Lego – we do have a yearly meeting in March where Bernd and Julian are recapping the last year. It is our own pleasure to find enjoyable presents for all their hard work. This year I came up with the idea of creating a NETWAYS logo with Lego. Everyone was excited 🙂

monitoring-portal.org has a new home, generously hosted by NETWAYS. Even HTTPS was possible. The migration from the old WBB3 platform was pretty rough in early 2016, but we made it happen with an upgrade to WBB4. There still is work to do (more categories, better theme) but it is not yet clear if we stick with Woltlab or turn into Discourse. What I really want to improve is that users who help others will get a reward. Similar to Stackoverflow.

I have improved my spoken English and the way I keep presenting Icinga in my talks. Berlin, Amsterdam, Belgrade, San Diego – in the end I already knew what to talk about next. Well, the workshop at Devopsdays wasn’t good but I learned what else to prepare (just use the Vagrant-Boxes and skip the install for example). I also brought a lot of Dragee Keksi with me. They even landed in Australia 😉

I had a lot of fun finding and creating demos for the Icinga 2 API. Depending on the audience I then decided which demos to show. For instance the AWS EC2 demo isn’t that spectacular when you are in Europe. But the Clippy demo did not need any words to make people laugh and smile.


2016 also told that I should focus on more community activities. I do have some ideas like hangouts or webinars. One I already realised was to create the “monthly snap” blog post series. This one collects positive karma and gives insights into current developments. I do see that in a 2 way benefit – users see what’s fresh and new, and developers get positive feedback and motivation.

OSMC was lovely and top notch. Really enjoyed meeting with “Gin tasting crew” on Tuesday after my Git workshop. I was really tired after the 2 days conference … but that’s also the reason when you meet a former colleague from Austria and just keep talking. I also finally met Stéphane Bortzmeyer, one of those people knowing literally everything about DNS (my former workplace). The hackathon was really good, we made a lot of improvements and I finally met Steffen from Elastic, being the Go and Beats guru.

Last but not least I have to admit that road trip #2 in California was really a pleasure and freed my mind from such a hard year. Dirk and I went for Grand Canyon, driving 2000 miles in 7 days. There was a plan to have at least Las Vegas and Death Valley on the track but we changed that a bit. Going from South Rim to North Rim wasn’t planned but hey – a thunderstorm over Grand Canyon and just you in that little car. In the end we’ve also visited spots in Death Valley I haven’t been before, and also decided to visit Sequoia National Park. Just because there was time and we were free. Last but not least – Venice Beach jumping into Tom and a revival at Venice Whaler with Julian 🙂

I took those memories with me and ended up in getting myself a CX-5 with the help of Markus and Nicole. Now I have a similar feeling when driving – free and independent. A mind changer after all.


Wishes for 2017

Don’t rush things. Let others do their job and wait for them to finish.

Turn email conversations into meetings or hangouts. If something pisses you off, do it face to face. Take notes what’s good and bad, and leave things for a day. Re-iterate problems then with a different mindset.

Deal with problems in a relaxed fashion, propose a workaround or hotfix and then focus on realising a bugfix and a software release.

Try to understand what the other one is really thinking. Imagine a real life discussion if it’s online. Don’t push your own opinion as the most important one. Try to rephrase things from “Your attempt isn’t good” to “Think of this in a different way – how would this look like …”.

Share knowledge. At some point you’re the only one knowing about cool things. Write them down and encourage others to improve and add their experience. This also includes enhancing the docs and howtos.

Look for events and talks you’d like to give. Combine it with some days off and explore the cities and surroundings.

Look into a good mix of things you like to work on. It is not only C++ with Icinga 2 or documentation. That could be …

  • RT and extensions (Perl)
  • Icinga Web 2 Modules (PHP)
  • Things with Go (icingabeat, etc.)
  • Development trainings (Git, etc.)
  • Community demos (recordings, hangouts)
  • Enhance monitoring-portal.org and move to a new platform (evaluate Discourse)
  • Contribute documentation and howtos (I still owe Michael Medin one for NSCP)
  • Discover the possibilities of GitHub and GitLab
  • Embedded hardware programming (things I used to learn during my studies)

40 hours a week are enough. Social media such as Icinga twitter might work in the evening, but prefer spare time over it. If there’s no time at work to answer questions in the community channels, do it the next day but not in the evening.

Enjoy life.

Read Perry Rhodan. Build Lego models. Play board games. Do workout and free your mind. Be offline.

Go for a ride with the new CX-5, explore the world.

lldb NameError: name ‘run_one_line’ is not defined

I’m a heavy lldb user during Icinga 2 development. Most recently I got many of those error messages when starting lldb for debugging Icinga 2.

mbmif /usr/local/icinga2/etc/icinga2/tests (master) # lldb -- /usr/local/icinga2/lib/icinga2/sbin/icinga2 console
(lldb) target create "/usr/local/icinga2/lib/icinga2/sbin/icinga2"
Traceback (most recent call last):
  File "", line 1, in 
  File "/Applications/Xcode.app/Contents/SharedFrameworks/LLDB.framework/Resources/Python/lldb/__init__.py", line 98, in 
    import six
ImportError: No module named six
Traceback (most recent call last):
  File "", line 1, in 
NameError: name 'run_one_line' is not defined

Turns out that I have Python2 installed from a dependency in Homebrew. The lldb scripts just use the system path for determining the preferred Python binary.

A sensible workaround is discussed here:

$ /usr/local/bin/pip install six

Works again.

mbmif /usr/local/icinga2/etc/icinga2/tests (master) # lldb -- /usr/local/icinga2/lib/icinga2/sbin/icinga2 console
(lldb) target create "/usr/local/icinga2/lib/icinga2/sbin/icinga2"
Current executable set to '/usr/local/icinga2/lib/icinga2/sbin/icinga2' (x86_64).
(lldb) settings set -- target.run-args  "console"
(lldb) q

Since I wanted to check which package requires python in /usr/local/bin/python I found this command

$ brew list | while read cask; do echo -n "$cask ->"; brew deps $cask | awk '{printf(" %s ", $0)}'; echo ""; done

I can’t get rid of pygtk and macvim, so each new install/update will pull Python again. The reason why they build their own Python is somewhat unsafe C++ functions. Guess I don’t want to dig any deeper here.

Homebrew Caskroom migration

I’m using Homebrew on my Macbook. It is a great addition to installing software when you are used to package managers from the Linux world.

There’s also an extension called Homebrew Cask which allows you to manage MacOS applications, such as Adium or Gimp. This saves you the hassle of manually downloading the package/dmg files and automates the installation/updates.

Lately when doing an update again, there was a notice about a changed Caskroom location.

michi@mbmif ~ $ brew cask list
Warning: The default Caskroom location has moved to /usr/local/Caskroom.
Please migrate your Casks to the new location and delete /opt/homebrew-cask/Caskroom,
or if you would like to keep your Caskroom at /opt/homebrew-cask/Caskroom, add the
following to your HOMEBREW_CASK_OPTS:
For more details on each of those options, see https://github.com/caskroom/homebrew-cask/issues/21913.
apache-directory-studio  filezilla                gimp                     macvim                   vlc                      xquartz
bitbar                   firefox                  java7                    mysqlworkbench           wireshark

Ok, what would I do now? “Migration” could just mean moving the directories. But wait, the installed applications could be symlinked into ~/Applications instead of being moved (#13966).

Looking into the mentioned github issue #21913 shed some light on how to fix it. Moving the directories will make “brew cask list” shut up about the changed location, but later uninstalls will fail due to dangling symlinks. The solution is simple – force an installation again after moving the installed casks.

michi@mbmif ~ $ mv /opt/homebrew-cask/Caskroom /usr/local
michi@mbmif ~ $ brew cask list
apache-directory-studio  filezilla                gimp                     macvim                   vlc                      xquartz
bitbar                   firefox                  java7                    mysqlworkbench           wireshark

michi@mbmif ~ $ for cask in $(brew cask list); do brew cask install $cask --force; done

Done 🙂

LEGO Creator Expert: Brick Bank 10251 Review

IMG_2698A new year and a new LEGO creator modular building – this time a corner model providing a brick bank and a small laundry. I got this model 10251 two weeks ago while visiting the LEGO store in Nuremberg but now found the time and mood to go into building.

The set contains 2380 pieces, four build steps with 267 steps inside the instruction manual. Compared to older modular buildings it isn’t that hard to build and some building techniques have been changed. This one goes more into building bigger spots and putting it together.

When it starts off on the ground plate, the first cool thing you’ll recognise is the lockable vault including the removable ceiling. Building further the vault is still open but once the atrium foyer is finished you’ll find out about another cool surprise – the washing machines provide a hidden chest for actually washing the money and putting them directly into the vault. That’s something you cannot really tell from the package images.

The other part of this building step adds the pull-able cashbox for the transaction counter adding yet another lovely detail to the scene. When it comes to the ceiling there’s a hidden entry for thieves coming from the roof. You may actually change one of the mini figures into a thief outfit and start your own play story.

The first floor seems empty as there is only one room for the bosses office and a spot for the secretary. Though the build is fun and provides lots of details like the coffee vendor or building the fireplace attached to the chimney for the thief entering the bank. The typewriter totally fits my kind of humour.

The rooftop is not much in height but offers many details for making this model good. It also adds a chandelier and a small winch for pulling heavy stuff from the ground. The rounded roof windows use a common building technique already known from the pets store.

There are no stickers – everything is printed, even the window glasses. There could probably be more than 5 minifigures – the laundry seems pretty empty without employees. There are also not that much repetitive build steps except for one, but the look really compensates for that afterwards. What I really missed was building letters/numbers from other bricks (like “AL’S” and “POOL” from the detective’s office).

Sorting the bricks takes quite a while, so I guess this model was like 5-6 hours for building and sorting. Being a corner building it perfectly fits with the detective’s office from last year 🙂


Windows 10 update changes partition table and breaks GRUB

It’s holiday season and so I got a hold of playing some games longly missed on Windows. Booting Windows 10 certainly unveiled several pending updates (Antivirus, Geforce, Windows updates). Since Windows 10 does not explicitly tell about big updates anymore I just did let it reboot several times, waiting for manual grub selection then.

Though this time the update essentially broke GRUB. “error: unknown filesystem. Entering rescue mode…” is certainly not what I expect from a Windows 10 update. After googling a bit I found this thread including an explanation as well as a solution for the problem: The Windows 10 update adds yet another hidden partition, but essentially rewrites the partition table which then breaks GRUB finding the correct /boot partition containing grub2/. Congrats Microsoft!

So, Windows 10 “Upgrade to Windows 10 Home, version 1511, 10586” breaks grub2 because boot block grub2 still thinks it should boot grub2 from (hd0,msdos2) when it now needs to boot from (hd0,msdos3).

The solution is simple but nasty without bash-completion and English keyboard layout on a German keyboard.

First find the boot partition containing the grub2/ directory.windows10_upgrade_dec2015_breaks_grub

grub rescue> ls (hd0,msdos1)/grub2
error: unknown filesystem.
grub rescue> ls (hd0,msdos2)/grub2
error: unknown filesystem.
grub rescue> ls (hd0,msdos3)/grub2
./ ../ themes/ device.map i386-pc/ locale/ fonts/ grubenv grub.cfg

Next set the changed boot prefix and root attributes:

grub rescue> set prefix=(hd0,msdos3)/grub2
grub rescue> set root=(hd0,msdos3)
grub rescue> set
grub rescue> insmod normal
grub rescue> normal

Change from “rescue” to “normal” GRUB mode, and quickly select Fedora from the boot menu. In order to fix GRUB log into Fedora, open a terminal and become root. Now generate a new grub configuration.

sudo -i
grub2-mkconfig -o /boot/grub2/grub.cfg
grub2-install /dev/sda

Reboot and the GRUB menu should be fixed. Now safely choose to continue the Windows 10 upgrade.