foss-north – the count down

We are approaching the count down to foss-north 2018 – at least from an organizer perspective. This year we will be at Chalmers Conference Centre, in the centre of Gothenburg – the world’s most sociable, friendliest city. So, save the date – April 23 – and make sure to drop by.

The reason why it feels like the count down has started is that it is just 10 more days left of the Call for Papers. With the help of our great sponsors we have the opportunity to transport you to our conference if you are selected to speak. Make sure to make your submission before March 11 and you are in the race.

When moving to Chalmers we ended up with a larger venue than last year so make sure to get your ticket – and bring your friends. The saying “the more the merrier” definitely applies to FOSS conferences!

The Humane Tech Interview

I am in a position where I interview job candidates. What I do is called the tech interview, which is an early vetting before we start discussing money and other contractual details. This is usually between one and two hours over Skype or telephone where I have to judge is a candidate is technically skilled and fits into the team. So, how to go about this?

I’ve seen many approaches. You can interrogate the candidate, you can ask about details about every line item on the résumé, you can ask the person about strengths and weaknesses. To me, all of these approaches are defunct – I want to have a conversation, not an interrogation. There does not have to be a right or wrong answer, just an opinion. This usually takes the tension out of the situation and makes the candidate open up. It also allows me to expose my weaknesses to make it more comfortable for the candidate to admit his or hers.

Going in to an interview, I usually make a list of topics that are relevant to the position in question. This can be knowledge about Linux, git, Qt, JIRA, agile, and so on. For each of these questions, I know what we do at Pelagicore, but instead of asking about the candidate’s experience with what we do, the questions from me goes like this:

– So, what kind of source code versioning system have you been using?
– Comparing git to svn, what did change, from your perspective?
– Could you see any situation where svn would be better than git?
– We use git like this, is there anything that you’d like to change with that?

As you can see, the questions are more about opinion that right or wrong. The point is that if you know the technology, you can pick up competence and experience through this discussion instead of asking about very specific details which easily can create a stressful situation for the candidate.

I generally do the same for technologies, e.g. what is your favorite feature of C++11? in what situations does that help you? Kickstarting a discussion instead of an interrogation.

Then we come to what I call the comfort zone questions. What do you as a person like, irregardless of the position being in question?

– Do you like to code drivers, middleware or end-user applications?
– Do you prefer to get a problem and really dig into it – like a complex bug – or do you want to be the generalist that holds the team together and spreads knowledge?
– Do you like to have a predictable day where you pick a task and carry it out, or do you like to work in a more reactive way, close to the customer and the chaos of reality?

There is no right or wrong here, only dimensions that can be discussed. There are lots of why and how and did you experience this in a previous job type of questions to keep the discussion going here.

During the entire interview I try to keep the conversation natural while moving through my checklist. I also try to check for a few basic signs, e.g. I like when the candidate has an opinion that differs to mine about something, I like the candidate to not be a 100% match to the position, I also like for the candidate to admit not knowing or being familiar with something. Nothing of this is dramatic in the context of a conversation, but in my experience it helps sorting out the honest and open candidates from those who try to provide the right answers the whole time.

This is what I try to do to make the interview more humane and less stressful. How do you like to do interviews? How do you like to be interviewed? I’d love to hear back from you.

Building communities

As some of you might know I’ve been involved in the foss-gbg group for a long while (more than 3 years now). Last year I helped starting the foss-north conference, which is really about taking what foss-gbg is and turning it into something bigger. We had a great turn-up – over 100 guests and ten great speakers.

This week, I finally got time to start pushing forward with this year’s edition of foss-north. It will be held on April 26 in Gothenburg and it is a great opportunity to visit Sweden and Gothenburg and mingle with the FOSS community. We’ve already confirmed Lydia Pintscher and Lennart Poettering as speakers. If you want to speak the call for paper has just opened and will run until March 12. Tickets sales will open shortly too, as well as the call for sponsors.

By a random chance I got involved in the organization of yet another group this week. The C++ meetup community in Gothenburg has been inactive for almost a year, so a group of people decided to pick up the ball and try to get something running. We’ve renamed the group to gbgcpp and the next (our first) meeting will be held January 26, and then we will take it from there. Hopefully this can turn into something fun!

Python and me

I like Python, but I’d love it if it had support for types – even if one of them was a generic duck-typed object or variant.

x = {}
k = "potential key"
v = MyValue() # Clearly not a key
if v in x:
  pass # Always fails silently

I apparently live and learn.

Update! Apparently I’m stupid while summarizing the error (always copy, never recall). I did not use k in the if statement, rather, I used v which is not a key. This is a programmer error. However, Python does not tell me so, it just does what it asks it to do, i.e. tell me if the not-a-key is a key.

Thanks to Ralk for pointing this out.

Plex and Chromecast

It seems that everyone has their little magic transcoding line for having Plex and Chromecast to play nice, as everyone runs an underpowered server that cannot do live transcoding. My line follows here:

ffmpeg -i big_buck_bunny_720p_surround.avi -c:v libx264 -profile:v high -level 4.2 -crf 18 -maxrate 10M -bufsize 16M -pix_fmt yuv420p -vf "scale=iw*sar:ih, scale='if(gt(iw,ih),min(1920,iw),-1)':'if(gt(iw,ih),-1,min(1080,ih))'" -x264opts bframes=3:cabac=1 -movflags faststart -c:a libfdk_aac -b:a 320k -ac 2 -y big_buck_bunny_720p_stereo.mp4

The key points here are:

  • h.264 for video.
  • AAC for audio, I use stereo as I don’t use the Chromecast for my 5.1 setup.
  • Name the output *.mp4 to get an mp4 container.
  • -movflags faststart to “optimize for streaming”.

There are a number of similar magic lines floating around on the web, including on the plex forum. There is no way to tell which is the original, so I’ll let everyone Google around instead of explicitly giving credit to the thread I found first.

Some comments from my side:

  • Despite the Chromecast docs claiming to support h.264 level 5, the Chromecast.xml shipped with Plex limits the level to 4.2. Beware. This cost me an evening of transcoding.
  • ffmpeg has its own expression language with
    if, gt and min. Bloody amazing. I wonder if it does email.

Also, I learned that Big Buck Bunny consists of 14315 frames…

June 21st 2012

When your wife has been in pain every 15 to 20 minutes for six days and six nights, you appreciate the sincerity when she asks you to take her to the hospital at four in the morning.

Bloodstains in the ceiling of the delivery room. Women are tough!

After a short routine check, we where admitted. Five hours later, Erik, was born.

The day after, we could leave the hospital and go home. His big sister is delighted to have a little brother.

Everything is going well. We are tired, as expected, but my wife is my hero. Give us a couple of weeks and we’ll be back in the game again!

3D Printers in Sweden

Having experienced the MakerBot at work, I bought a EMaker Huxley last year. Once you get into the habit of being able to print any mechanical piece that you need (almost), you are forever hooked. Now, I’m looking to build a larger machine and am sourcing material for a building larger RepRap Mendel Prusa V2.

As the price for material is affected by both volume and the transport, I figured that a bit of joint purchasing would be nice. If you are based in western Sweden (i.e. can get to Gothenburg or Alingsås), or is willing to pay for the postage within Sweden, and you wants to join in, add a comment here or drop me a mail (e8johan, gmail). Being able to build bearings, nuts and bolts by the hundreds makes it feasible to source them from far away, e.g. China, or just to get a better price at the local stores.

QtQuick and Drag-and-Drop – One More Time

As a result of my last blog on QtQuick and DnD I was contacted by both Sebas and Marco. Both are active in the KDE project and face the same issues as I do. Apparently, the Plasma team are also working on DnD in QtQuick. Their approach is based around DragArea and DropArea, written in C++ and handles full X11 DnD, i.e. between processes. Marco summed it up nicely in his mail to me.

…in kde-runtime/plasma/declarativeimports/draganddrop/ …is imported as a c++ plugin and depends only from qt (started its life as a 3rd party plugin written by Gregory Schlomoff)…

My solution (will polish the code for release Anytime Soon) is written in QML/JavaScript and only works within a single process, e.g. for moving items between lists, etc.

KDE has been about extending and completing the Qt software stack to make it easier to build Qt-based software. In this process, they are working on QtQuick as well as Qt. A tips for anyone (including me) looking for missing pieces is to look in the KDE TechBase.