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.

Sunday, November 4 2012

How to start contributing to Xfce or any other open source project

It’s been a while since I’ve updated this website and even longer since I’ve written anything useful. But since I’ve received a couple of mails from people looking to contribute to Xfce recently, I thought I’d share some “wisdom” acquired over the past few years while working on Xfce and doing a lot of community work. My thoughts are not limited to Xfce and will apply to a lot of other projects out there as well.

Here’s the bitter truth for those looking for some quick pointers to start contributing to Xfce: you’ll have to find out yourself.

The reason is not that we are lazy or wouldn’t welcome your contributions. In fact, the reason, I believe, is very simple: you will be more excited, motivated and, ultimate, be more successful if you work on something that interests you. We can help you in making the decision what to invest your time in easier, e.g. by listing projects, features or issues that we or our users consider worth working on. Some projects do this very visibly (e.g. through bounties). In Xfce, this information is hidden in the depths of the wiki. Here are a few links that you may find interesting:

Clearly, the above information could be more visible. There could be a prominent link on the Xfce website to a well-maintained and up-to-date list. Would that help people? Maybe.

Perhaps it is a good thing that the information isn’t just one click away. Open source projects have always been about scratching your own itch. This is how I got involved in everything I’ve done over the years. this approach is reflected by what people do and sometimes even by how companies make money. Thinking about it now, it is a concept deeply rooted in the evolution of mankind (think: the invention and improvement of tools, industrialisation and all that shit).

So: scratch your own itch.

If you want to start contributing to a project, try this exercise:

  • Look at the project, think about what you don’t like or what you feel could be improved
  • Try to collect information on what pieces are involved in e.g. the feature you’re missing or the bug you’ve spotted
  • Try to find the place where you could try adding your feature or fixing your bug
  • Ask whether developers are interested in the feature or look at whether there already is an item for your issue in the bug tracker
  • The rest is communication and coding

It’s not a fast path because you might not be able to contribute something of great value in the beginning. But if you’re dedicated, have enough spare time to make a difference and are keen on improving things step by step, you might eventually reach a point where you take over responsibility for more and more exciting or important tasks.

Good luck!

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.

Sunday, January 2 2011

Xfce 4.8pre3 released!

Xfce 4.8pre3 is now available for download.

It includes the following releases of Xfce core components:

 exo 0.5.6
 gtk-xfce-engine 2.7.0
 libxfce4ui 4.7.6
 libxfce4util 4.7.5
 libxfcegui4 4.7.0
 thunar 1.1.6
 thunar-vfs 1.1.1
 xfce-utils 4.7.4
 xfce4-appfinder 4.7.2
 xfce4-dev-tools 4.7.4
 xfce4-panel 4.7.7
 xfce4-session 4.7.3
 xfce4-settings 4.7.7
 xfconf 4.7.5
 xfdesktop 4.7.5
 xfwm4 4.7.4

Release tarballs can be retrieved from the following mirrors (please note that it may take a few hours for the mirrors to catch up):

 http://archive.xfce.org/xfce/4.8pre3/src
 http://www.tx-us.xfce.org/archive/xfce/4.8pre3/src
 http://www.p0llux.be/xfce/xfce/4.8pre3/src
 http://www.ca-us.xfce.org/archive/xfce/4.8pre3/src

A tarball including all individual releases can be downloaded here:

 http://archive.xfce.org/xfce/4.8pre3/fat_tarballs
 http://www.tx-us.xfce.org/archive/xfce/4.8pre3/fat_tarballs
 http://www.p0llux.be/xfce/xfce/4.8pre3/fat_tarballs
 http://www.ca-us.xfce.org/archive/xfce/4.8pre3/fat_tarballs

Today we are pleased to announce the third and hopefully final preview release of Xfce 4.8 which is set to be pushed out to the public on January 16th, 2011. Compared to Xfce 4.8pre2 this release mostly features translation updates and bug fixes.

With christmas and new year’s eve between 4.8pre2 and 4.8pre3 it comes as no surprise that for most components only a few issues were tackled.

Among other things we updated the default keyboard shortcuts to include monitor keys. The status icon of the file manager’s progress dialog is now properly hidden when the dialog is destroyed. It’s wallpaper plugin is now capable of handling filenames with spaces. The environment variables of commands launched from the Xfce run dialog were not set properly, so we fixed that so that commands launched from the dialog always inherit the environment of the Xfce session.

We also made the --reboot and --halt parameters of xfce4-session-logout work again which previously simply logged out the active user. In order to avoid a race condition at session startup and in order to speed things up a little more we no longer use xrdb to update xft and cursor settings and instead, update the related XSETTINGS properties ourselves.

In the window manager xfwm4, we aligned the time period required for a double click with that of normal applications. Via the hidden option “/general/mousewheel_rollup” one can now disable windows being rolled up via the mouse wheel. The window manager now also properly handles resolution changes in fullscreen windows like those appearing in games. Xfwm4’s application switcher now only appears once in cloned mode.

This may sound like a few useful fixes but it’s nothing compared to the amount of work that went into the new Xfce panel once again. Around 20+ known bugs and regressions were fixed. Here is a short excerpt of the complete changelog: Translation domains were fixed for external plugins, plugins can be reordered with DND again, double-clicking items in the item editor shows their preferences, dragging items to the item editor dialog removes them from the panel again, tasklist windows can now be filtered by monitor. Another issue that appeared recently and has now been fixed is the icon sizing in the notification area, also known as the systray.

Xfce 4.8pre3 also features a lot of translation updates, as can be seen in the complete changelog on

 http://xfce.org/documentation/changelogs/4.8pre3

Since we’re following the Xfce release model for 4.8, we’d normally announce code freeze and the creation of early lifecycle support branches today. We decided against this because there are not enough people active to take care of all this at the moment. So we will continue fixing bugs in master branches as we did between 4.8pre2 and 4.8pre3.

We’re hoping that you will enjoy today’s release. Thanks a lot to everyone contributing this time around! We’re pretty sure 4.8 is gonna rock.

Kind regards,

The Xfce development team

P.S.: Happy new year everyone!

Monday, December 6 2010

Xfce 4.8pre2 released!

Xfce 4.8pre2 is now available for download.

It includes the following releases of Xfce core components:

 exo 0.5.5
 gtk-xfce-engine 2.6.0
 libxfce4ui 4.7.5
 libxfce4util 4.7.4
 libxfcegui4 4.7.0
 thunar 1.1.5
 thunar-vfs 1.1.1
 xfce-utils 4.7.3
 xfce4-appfinder 4.7.1
 xfce4-dev-tools 4.7.3
 xfce4-panel 4.7.6
 xfce4-session 4.7.2
 xfce4-settings 4.7.6
 xfconf 4.7.4
 xfdesktop 4.7.4
 xfwm4 4.7.3

Release tarballs can be retrieved from the following mirrors (please note that it may take a few hours for the mirrors to catch up):

 http://archive.xfce.org/xfce/4.8pre2/src
 http://www.tx-us.xfce.org/archive/xfce/4.8pre2/src
 http://www.p0llux.be/xfce/xfce/4.8pre2/src
 http://www.ca-us.xfce.org/archive/xfce/4.8pre2/src

A tarball including all individual releases can be downloaded here:

 http://archive.xfce.org/xfce/4.8pre2/fat_tarballs
 http://www.tx-us.xfce.org/archive/xfce/4.8pre2/fat_tarballs
 http://www.p0llux.be/xfce/xfce/4.8pre2/fat_tarballs
 http://www.ca-us.xfce.org/archive/xfce/4.8pre2/fat_tarballs

Release notes for 4.8pre2

We are pleased to announce the second preview release of Xfce 4.8. This release marks the beginning of the string freeze. From today on until the final release, strings may no longer be changed in the master branch of Xfce core components. This will help translators to prepare their translations for the final release scheduled on January 16th, 2011.

For this release we focused on fixing bugs in all Xfce components. We managed to close a great number of them thanks to all the persons who reported them and tested proposed fixes quickly.

A few minor panel features were added despite feature freeze. We also managed to work on two long time requests: proper support for editing the application menu with menu editors (Alacarte being the one that we tested) and integration with the Compiz viewport. Of course, this release also features a lot of new and improved translations thanks to the amazing work of our translation teams.

A list of all changes is available on:

http://mocha.xfce.org/documentation/changelogs/4.8pre2

We hope you will enjoy this release. Please give us feedback by sharing your thoughts, blogging, tweeting, denting or by filing bug reports. With your help, 4.8 will be the best release ever (at least until 4.10)!

Kind regards and thanks to everyone who has contributed to this release,

The Xfce development team

Sunday, November 7 2010

Xfce 4.8pre1 released!

Xfce 4.8pre1 is now available for download.

It includes the following releases of Xfce core components:

 exo 0.5.4
 gtk-xfce-engine 2.6.0
 libxfce4ui 4.7.4
 libxfce4util 4.7.3
 libxfcegui4 4.7.0
 thunar 1.1.4
 thunar-vfs 1.1.1
 xfce-utils 4.7.1
 xfce4-appfinder 4.7.1
 xfce4-dev-tools 4.7.3
 xfce4-panel 4.7.4
 xfce4-session 4.7.1
 xfce4-settings 4.7.4
 xfconf 4.7.3
 xfdesktop 4.7.2
 xfwm4 4.7.1

Release tarballs can be retrieved from the following mirrors (please note that it may take a few hours for the mirrors to catch up):

 http://archive.xfce.org/xfce/4.8pre1/src
 http://www.tx-us.xfce.org/archive/xfce/4.8pre1/src
 http://www.p0llux.be/xfce/xfce/4.8pre1/src
 http://www.ca-us.xfce.org/archive/xfce/4.8pre1/src

A tarball including all individual releases can be downloaded here:

 http://archive.xfce.org/xfce/4.8pre1/fat_tarballs
 http://www.tx-us.xfce.org/archive/xfce/4.8pre1/fat_tarballs
 http://www.p0llux.be/xfce/xfce/4.8pre1/fat_tarballs
 http://www.ca-us.xfce.org/archive/xfce/4.8pre1/fat_tarballs

Release notes for 4.8pre1

The Xfce development team is proud to announce the first preview release for Xfce 4.8. Together with this preview release, the Xfce project announces the feature freeze for the final 4.8 release which is set to be pushed out to the world on January 16th, 2011.

This release incorporates major changes to the core of the Xfce desktop environment and hopefully succeeds in fulfilling a number of long time requests. Among the most notable updates is that we have ported the entire Xfce core (Thunar, xfdesktop and thunar-volman in particular) from ThunarVFS to GIO, bringing remote filesystems to the Xfce desktop. The panel has been rewritten from scratch and provides better launcher management and improved multi-head support. The list of new panel features is too long to mention in its entirety here. Thanks to the new menu library garcon (formerly known as libxfce4menu, but rewritten once again) we now support menu editing via a third-party menu editor such as Alacarte (we do not ship our own yet). Our core libraries have been streamlined a bit, a good examplle being the newly introduced libxfce4ui library which is meant to replace libxfcegui4.

Perhaps the most important achievement we will accomplish with Xfce 4.8 is that, despite suffering from the small size of the development team from time to time, the core of the desktop environment has been aligned with today’s desktop technologies such as GIO, ConsoleKit, PolicyKit, udev and many more. A lot of old cruft like has been stripped from the core as well, as has happened with HAL and ThunarVFS (which is still around for compatibility reasons).

Thanks to the awesome Transifex translation platform, our language teams have been able to update their translations at an incredible pace. Please include them when praising this release!

A complete list of all changes since the latest stable release is available on

http://mocha.xfce.org/documentation/changelogs/4.8pre1

Below you will find download information for Xfce4.8pre1. Please give our mirrors a few hours to synchronize. We hope you will enjoy this release, feel encouraged to blog and tweet about it! Feedback is welcome in all forms. Bugs can be reported in our bug tracker as usual. We need your help to make Xfce 4.8 our best release ever!

Kind regards and thanks to everyone who has contributed to this release,

The Xfce development team

- page 1 of 2