Jannis Pohlmann Personal website

Jannis

I am an open source enthusiast, student and musician from Lübeck, Germany. In my free time I enjoy hacking on Xfce and Lunar Linux. I've been a member of both teams since about 2005. Besides developing software, I love to listen to and play music (Guitar, Bass and Drums) and hang out with friends.

Contact me via jannis@xfce.org. My public PGP key is 0x354AFBA6. You can download it from here.

My CV is also available for download.

Navigation

Monday, February 7 2011

Xfce Foundation launched at FOSDEM!

This year’s FOSDEM was a special one. Read more about it in this mail:

Hi everyone,

as some of you might have read, several of us Xfce developers and
packagers have attended FOSDEM this weekend. There was a lot of talking
and a bit of brainstorming of course. Together we enjoyed food, beer,
talks and also did something that we have been struggling with for
several years now: we launched a non-profit organization for Xfce.

Yes, you read correctly: the

  Xfce Foundation

was founded by a group of us on Saturday afternoon! It still needs to
be registered, so technically it's not an "e.V." (a non-profit
organization registered in Germany) yet. But it will be, we are working
on that.

The eight founding members are:

  #1  Christoph Wickert
  #2  Landry Breuil
  #3  Jens Luedicke
  #4  Christian Dywan
  #5  Nick Schermer
  #6  Jérôme Guelfucci
  #7  Jannis Pohlmann
  #8  Lionel Le Folgoc

Please give everyone a hug or at least a thumbs up next time they pop
up on IRC. Without them being there this would not have been possible!

The main part next to signing the articles of association (which we
will soon upload somewhere, probably on foundation.xfce.org or
something like that) was to elect the initial Board of Directors of the
Xfce Foundation. Without objections the following people were elected
to the Board of Directors with a 2 years mandate:

  President:
    Jannis Pohlmann

  Vice President:
    Nick Schermer

  Vice President and Treasurer:
    Jérôme Guelfucci

The Board will now take care of the registration process and will meet
up for the first time on March 1st, 2011. There will be a general
assembly for all Xfce Foundation members on March 6th, 2011.

We will soon announce more details about the decisions that were made
and about how you can become an Xfce Foundation member (it's really not
difficult and it won't cost you any money -- but there are obligations
connected to it of course).

After the registration we will create a bank account and a new paypal
account as well in order to collect donations. These donations will be
tax deductible!

Stay tuned for updates on this. I hope you are as excited as we are
about this. I hope it will help a lot in pushing Xfce forward.

Cheers,
Jannis

Proud Founding Members

Wednesday, January 19 2011

Xfce 4.8 on BSD flavors

I should’ve made this more clear in the Xfce 4.8 release announcement but for a moment there I forgot that not everyone knows what we developers are dealing with under the hood.

Many users have been asking what the BSD problems are that I mentioned in the announcement. As some of you may recall is that HAL, the hardware abstraction layer that has for the past few years been used for volume and power management as well as a few other things, has been deprecated and replaced by a variety of frameworks. Today there is udev for device information, udisks for volume management, upower for power management as well as ConsoleKit and PolicyKit for session and permission control.

At least udev is strongly linked to Linux and as far as I know is not available on any of the BSD flavors. Unfortunately it is now the only good way to detect storage devices, cameras, printers, scanners and other devices using a single framework. That’s why we use it in Xfce now in situations where HAL provided us with device capabilities and information to distinguish between the different device types before. The consequence is that thunar-volman no longer works without udev and thus only compiles on Linux. In Thunar itself udev remains optional.

I don’t know what the porting status of the other frameworks is. But I am pretty sure not all of them have been ported to other platforms yet which is why I felt the need to express our disappointment in the announcement. For 2-3 years now all this has been a big mess. New frameworks were invented, dropped again, renamed from *Kit to u* and somewhere on the way it became impossible to keep Xfce as portable as it was before. I know that this is nothing new and that BSD folks faced the same situation as they do now back when HAL was invented but I don’t think it has to be this way.

For the question how we can improve the situation I have no answer yet.

Monday, January 17 2011

Xfce 4.8 released!

Today, after almost two years of work, we have the special pleasure of announcing the much awaited release of Xfce 4.8, the new stable version that supersedes Xfce 4.6.

We hope that everyone will enjoy this release as much as we do. Sadly, this will not be the case as the folks using any of the BSD systems will notice a sudden loss of features. We think that this announcement is a good opportunity to express our disagreement with the recent “Linux-only” developments in the open source ecosystem, especially with regards to the utilities we need in desktop environments.

Xfce 4.8 is our attempt to update the Xfce code base to all the new desktop frameworks that were introduced in the past few years. We hope that our efforts to drop pieces like ThunarVFS and HAL with GIO, udev, ConsoleKit and PolicyKit will help bringing the Xfce desktop to modern distributions.

With Xfce 4.8 our users will be able to browse remote shares using a variety of protocols (SFTP, SMB, FTP and many more). The window clutter has been reduced by merging all file progress dialogs into a single one.

Our panel application has been rewritten, thereby improvingpositioning, transparency, item and launcher management. It also introduces a new menu plugin to view directories. Its plugin framework remains compatible with 4.6 plugins.

We also improved our settings dialogs. The display configuration dialog now supports RandR 1.2, detects screens automatically and allows our users to pick their favorite resolution, refresh rate, rotation. Screens can be configured to either work in clone mode or be placed next to each other. Keyboard selection has become easier and more user-friendly. Also, the manual settings editor has been updated be more functional.

Aside from the features implemented in Xfce, the 4.8 development cycle brought us a bunch of other goodies. For the first time we had a serious release strategy formed after the “Xfce Release and Development Model” developed at the Ubuntu Desktop Summit in May 2009. A new web application made release management a lot easier. We worked hard on improving the situation of Xfce translators which led us to setting up our own Transifex server. Something else you will hopefully notice is that our server and mirroring infrastructure has been improved so that our servers hopefully will not suddenly surrender shortly after this release announcement.

There is a lot more to discover and we hope a lot of you will give Xfce 4.8 a try! There is a brief tour online on

http://xfce.org/ and http://xfce.org/about/tour

A summary of the changes since the 4.8pre3 preview release is available on the following URL (it also includes links to the changes introduced in all preview releases):

http://xfce.org/download/changelogs/4.8.0

The release can be downloaded either as individual releases or as a fat tarball including all these individual versions:

http://archive.xfce.org/xfce/4.8/

2011 has just begun and we are already planning for the future. The 4.10 schedule will be worked on soon and hopefully, we will be able to turn Xfce into a non-profit organization at this year’s FOSDEM, so stay tuned!

But until then we hope you will enjoy today’s release and join us in celebrating. Thanks go out to all our contributors, bug reporters as well as the awesome efforts of our translators and packagers.

Best regards,
The Xfce development team

Monday, January 10 2011

Attending FOSDEM 2011

I'm going to FOSDEM, the Free and Open
Source Software Developers' European Meeting

Today Nick and I booked hotel rooms for FOSDEM so now it’s official that the two of us will be there. I’m very much looking forward to it and I’m hoping to meet some of you at the FOSDEM Beer Event on Friday! Still need to think about a way to make ourselves recognizable as Xfce folks though.

If you are planning to attend and would like to meet any of the Xfce folks, please add your name in the wiki:

  http://wiki.xfce.org/events/2011/fosdem

We haven’t decided where and when to meet on Saturday and Sunday but I’m sure we will find something. Stay tuned for additional announcements on this weblog.

In addition to celebrating the 4.8 release of Xfce which is scheduled for next weekend, one of our goals for FOSDEM 2011 will be to sign the papers for registering the Xfce Foundation e.V. in Germany. The details of this still need to be worked out, however. I’ll keep you posted about this as well.

If you would like to talk to me about things other than Xfce, please drop me a mail and I’m sure we can arrange something.

Thursday, January 6 2011

C++ exceptions can be dangerous

Just when you think you know everything about a programming language like C++, it will surprise you with new oddities.

I haven’t written any serious C++ code in a while but I used to be able to write it blindfolded. Yesterday, however, I came across a somewhat weird issue with exceptions that I am not sure makes a lot of sense.

Let’s assume you have a method foo and in there you have some code and inbetween you throw an exception, like this:

#include <iostream>
using namespace std;

void foo (void) {
  cout << "code before exception" << endl;
  throw 1;
  cout << "code after exception" << endl;
}

int main (int argc, char **argv) {
  try {
    foo ();
  } catch (int error) {
    cout << "exception caught" << endl;
  }

  return 0;
}

If you run this, you will of course only see the “code before exception” and “exception caught” messages.

Let’s add a local object to the scenario now, like this:

#include <iostream>
using namespace std;

class Object {
public:
  Object () {
    cout << "object constructed" << endl;
  }

  virtual ~Object () {
    cout << "object destroyed" << endl;
  }
};

void foo (void) {
  Object object;
  cout << "code before exception" << endl;
  throw 1;
  cout << "code after exception" << endl;
}

int main (int argc, char **argv) {
  try {
    foo ();
  } catch (int error) {
    cout << "exception caught" << endl;
  }

  return 0;
}

If you run the program this time, this is the output you will see:

object constructed
code before exception
object destroyed
exception caught

Notice how the object destructor is called properly as the object is local variable. It’s lifecycle ends when the program leaves foo().

Now, let’s change this again. We’ll throw an exception in the constructor and we’ll declare the local variable inbetween the code in foo():

#include <iostream>
using namespace std;

class Object {
public:
  Object () {
    cout << "object created" << endl;
    throw 1;
  };
  
  virtual ~Object () {
    cout << "object destroyed" << endl;
  }
};

void foo (void) {
  cout << "code before exception" << endl;
  Object object;
  cout << "code after exception" << endl;
}

int main (int argc, char **argv) {
  try {
    foo ();
  } catch (int error) {
    cout << "exception caught" << endl;
  }

  return 0;
}

Any guesses what output you will see now? Oddly enough, the local object will no longer be destroyed properly:

code before exception
object created
exception caught

So what does this mean?

  • Exceptions can make your applications leak memory. If large chunks of memory were allocated in the object constructor prior to the exception, they would not be released.
  • Exceptions in constructors are bad. If the code that can lead to the exception is moved into a normal method of Object instead of the constructor and if this method is called separately, the object will be destroyed properly.
  • Never be too sure about your knowledge of a certain programming language. There will be surprises. Always.