Subscribe to Planet KDE feed
Planet KDE -
Updated: 2 min 13 sec ago

guam: an IMAP session filter/proxy

Thu, 12/10/2015 - 20:59

 an IMAP session filter/proxy

These days, the bulk of my work at Kolab Systems does not involve writing code. I have been spending quite a bit of time on the business side of things (and we have some genuinely exciting things coming in 2016), customer and partner interactions, as well as on higher-level technical design and consideration. So I get to roll around Roundcube Next, Kube (an Akonadi2-based client for desktop and mobile ... but more on that another time), Kolab server hardware pre-installs .. and that's all good and fun. Still, I do manage to write a bit of code most weeks, and one of the projects I've been working on lately is an IMAP filter/proxy called Guam.

I've been wanting to blog about it for a while, and as we are about to roll version 0.4 I figured now is as good a time as any.

The Basics of Guam

Guam provides a simple framework to alter data being passed between an IMAP client and server in real time. This "interference" is done using sets of rules. Each port that Guam listens has a set of rules with their own order and configuration. Initially rules start out passive and based on the data flow may elect to become active. Once active, a rule gets to peek at the data on the wire and may take whatever actions it wish, including altering that data before it gets sent on. In this way rules may alter client messages as well as server responses; they may also record or perform other out-of-band tasks. The imagination is the limit, really.

Use Cases

The first practical use case Guam is fulfilling is selective hiding of folders from IMAP clients. Kolab stores groupware data such as calendars, notes, tags and more in plain old IMAP folders. Clients that connect over IMAP to a Kolab server which are not aware of this get shown all those folders. I've even heard of users who have seen these folders and delete them thinking they were not supposed to be there, only to then wonder where the heck their calendars went. ;)

So there is a simple rule called filter_groupware_folders that tries to detect if the client is a Kolab-aware client by looking at the ID string it sends and if it does not look like a Kolab client it goes about filtering out those groupware folders. Kolab continues on as always, and IMAP clients do as well but simply do not see those other special folders. Problem solved.

But Guam can be used for much more than this simple, if rather practical, use case. Rules could be written that prevent downloading of attachments from mobile devices, or accessing messages marked as top-secret when being accessed from outside an organization's firewall. Or they could limit message listings to just the most recent or unread ones and provide access to that as a special service on a non-standard port. They could round-robin between IMAP servers, or direct different users to different IMAP servers transparently. And all of these can be chained in whichever order suits you.

The Essential Workings

The two most important things to configure in Guam are the IMAP servers to be accessed and the ports to accept client connections on.

 an IMAP session filter/proxy

Listener configuration includes the interface and port to listen on, TLS settings, which IMAP backend to use and, of course, the rule set to apply to traffic. IMAP server configuration includes the usual host/port and TLS preferences, and the listeners refer to them by name. It's really not very complicated. :)

Rules are implemented in Guam as Erlang modules which implement a simple behavior (Erlangish for "interface"): new/1, applies/3, apply_to_client_message/3, apply_to_server_message/3, and optionally imap_data/3. The name of the module defines the name of the rule in the config: a rule named foobar would be implemented in a module named kolab_guam_rule_foobar.

... and for a quick view that's about all there is to it!

Under the hood

I chose to write it in Erlang because the use case is pretty much perfect for it: lots of simultaneous connections that must be kept separate from one another. Failure in any single connection (including a crash of some sort in the code) does not interfere with any other connection; everything is asynchronous while remaining simple (the core application is a bit under 500 lines of code); and Erlang's VM scales very well as you add cores. In other words: stability, efficiency, simplicity.

Behind the scenes, Guam uses an Erlang IMAP client library that I've been working on called eimap. I won't get any awards for creativity in the naming of it, certainly, but "erlang IMAP" does what it says on the box: it's IMAP in Erlang. That code base is rather larger than the Guam one, and is quite interesting in its own right: finite state machines! passthrough modes! commands as independent modules! async and multi-process! ooh! aaaaaah! sparkles! eimap is a very easy project to get your fingers dirty with (new commands can be implemented in well under 6 lines of code) and will be used by a number of applications in future. More in the next blog entry about that, however.

In the meantime, if you want to get involved, check out the git repo, read the docs in there and take a look at the Guam workboard.

Kdenlive 15.12, what to expect

Thu, 12/10/2015 - 19:47

We have been working hard over the past months to improve stability, polish the interface and continue our big code cleanup. Kdenlive 15.12.0 will be released next week, and here are some of the changes you will get with this new version:

New Features

We managed to add a few nice features. here are a few of them:

  • Timeline effects and Bin effects can be temporarily disabled and re-enabled in 2 clicks
  • A basic implementation of a copy / paste feature has been added, which allows you to save a part of your timeline and import it later inside another project with all effects and transitions being editable
  • Track transparency: a simple click allows you to enable / disable transparency for a given track
  • Icons now automatically adapt their color scheme (light or dark) to the UI theme
  • More infos on the features should hopefully be published soon...
General Workflow Improvements

We did several small but nice changes to improve the workflow. Several context menus and buttons have been reviewed and changed to make the most useful features easier to find.
You can also now drag an effect in the clip monitor to add it to the selected clip. Or define favorite effects that will be available from a quick pull down menu in the main toolbar... just to name a few of the changes.


We fixed many crashes and timeline corruption problems, so we hope you will enjoy working with this version.


Vincent Pinon started work on packages for Kdenlive's development version so that we can get more feedback before releasing a version.

Team and Events

As previously said, the Randa Meeting really helped the Kdenlive development, and we also hope to organize a small Kdenlive coding sprint in the first months of 2016.
Mario Fux stepped in to organize a Kdenlive Café which will be a great opportunity to exchange about the present and future of Kdenlive.

And as usual, several very motivated users really helped us improving Kdenlive by reporting issues, following and testing the fixes, proposing ideas, features and patches on the bugtracker, so a big thanks to them.

Game Art Quest 150% funded

Thu, 12/10/2015 - 17:07

Here’s Nathan with a new update:gameartquest150-funded

I’m back with a new batch of tutorials for you! As promised, here are the overviews of the Beta instant preview and animation toolset in Krita.

The next batch of tutorials will come at the end of the week, with the 3rd part of the rocks painting series. And another video will focus on creating life bars, an essential UI element in many game genres, in Krita.

I’m delaying the video about the tangent brush engine. I’ve written the overview, but I want to add 2 examples using Krita and Blender to show you how to use it in practice. It’s all coming out next Tuesday!

The campaign is now over 150% funded! Less than €2000 to go and we get to the first stretch goal. Pretty cool, isn’t it? I’m going to do my best to get there, and beyond!

Gaming on Linux: Move to next generation?

Thu, 12/10/2015 - 12:36

In this blog post I want to outline some thoughts on how the gaming experience can be improved on Linux.

Situation on X11

On X11 the big problem for gaming is the Compositor. Games need access to the GPU and need to pretty much exclusively use the GPU. Compare to a true console like a PlayStation: while the game is running you can be sure it’s the exclusive user of the GPU. The way how compositing works on X11 this cannot be provided. There is the compositor which needs to render the scene. The setup looks simplified like:

  1. Game renders through OpenGL/GLX
  2. X-Server notifies Compositor through XDamage extension
  3. Compositor schedules a repaint for changed area
  4. Compositor uses the XComposite extension to get a pixmap for the Game window
  5. Compositor binds pixmap to an OpenGL texture
  6. Compositor renders the texture using OpenGL/GLX to the composite overlay window
  7. X server presents the rendered image from the Compositor through kernel mode settings

In this setup we have a few things which are not optimal for a fullscreen game: the roundtrips through Xserver-compositor and the possible delay added by the compositor. In such a setup the compositor will always
slow down the game as it performs vsync, etc.

Workarounds on X11

There is an existing solution to improve this which is known as “unredirection of full-screen windows”. The idea is that if there is a full screen window the compositor won’t run for it and the “normal” non-composited functionality of the X server is used.

In my opinion this is the wrong solution to the problem, because the Compositor is still running, it still gets damage events (from possibly other windows) and might start to composite the scene at any time again (e.g. a notification pops up as a override-redirect window).

In KWin/Plasma we have a better solution: blocking compositing. We can do that as we do not require compositing, other environments which require compositing can only use unredirection as best measurement. In fact we even have high-level API for games to tell us that they want to block compositing. It’s just one X atom, please use it.

This also explains why in KWin/Plasma the option to fullscreen unredirection is not enabled by default. It has drawbacks for a non-gaming usage, while we offer a better solution for games. It also explains why I don’t care at all about gaming benchmarks through the PTS as that in my opinion tests an invalid setup for us. If we cared about it, it would be easy to just ensure that the games used by PTS disable compositing.

Situation on Wayland

On Wayland the setup is better as we don’t have X11 in between. So a setup looks like the following:

  1. Game renders through OpenGL/EGL
  2. Compositor gets notified through wl_surface damage
  3. Compositor directly presents the wl_buffer through KMS as it knows there is nothing else to see

So the situation is much improved in an ideal case. I need to point out that KWin doesn’t support this ideal case yet and still renders through OpenGL, but that’s where we are going to.

But I think there are still problems. Our Compositor still gets damage events from other windows, it gets woken up, etc. Running a game in a desktop environment means that there are other session processes which the game needs to share resources with. We want to have a PlayStation like setup: game everything, everyone else nothing. I don’t want KWin to take away important CPU/GPU time from the game.

Kernel Mode Settings in games

So what can we do? I thought about this and propose that we change gaming completely on Linux: remove the windowing system! Games should talk to kernel mode settings directly, games should interact with libinput directly. Let’s remove everything in between, we don’t need it, it only can worsen the gaming experience.

When a fullscreen game starts, it can create a “sub-session” on a new virtual terminal and become the logind- session controller for that session. This would allow the game to open the device files for rendering and for input just like a Wayland compositor does. Rendering could be done through EGL on top of DRM/GBM just like a Wayland compositor. The game would have full control over rendering, there is no desktop environment to slow it down any more. And it would have control over mode setting. Need a different resolution? No problem, just set it. On a desktop environment that’s always problematic (terrible on X11, better on Wayland). For games in windowed mode nothing should be changed, those should stay on the desktop environment.

Of course this would remove all interaction with the desktop environment. This is something which needs to be considered, like how to get Mumble to work in such a setup? Maybe the game could launch its own Wayland server?

That breaks Alt+Tab! Well not really. For one on X11 at least games often grab the keyboard, so Alt+Tab won’t work anyway. And of course one can still switch with ctrl+alt+f1 to the running session. Games should also have a common way to achieve this in my opinion.

There are certainly a few things which still need to be solved to get there, like how to start such a sub-session, how to return to the running session without needing to unlock the screen. The experience should be as good as on dedicated gaming console. So it’s still some work, but I think this is work well invested and better than trying to somehow make games work in Desktop Environments as that just cannot work as good as a dedicated gaming console.

Randa Meetings – the Past and the Future

Wed, 12/09/2015 - 20:06

The end of the year is near and this year’s Randa Meetings ended quite some weeks ago. But just some days ago we published an extensive report about the happenings at this KDE Tech Summit: Randa Meetings 2015 – Huge Success Again. I’d say it’s worth reading and looking at the pictures.

And this edition of the Meetings wouldn’t have happened without the great help of supporters, donators and sponsors (in alphabetical order):

Thanks a lot to you! And if you want to be on this list next year don’t hesitate to contact us.

Randa Meetings Konqi with Matterhorn and Edelweiss

So what about the future of the Randa Meetings? They will happen again next year and we’ve already a main topic:

Multi-platform end-user application development: Bring KDE Apps to other platforms and strengthen them on their free home platforms. This might include stuff like improving KDE Frameworks 5 on other platforms like MS Windows, Android or Apple’s MacOSX, presenting and discussing how distribution works on other systems than GNU/Linux (Windows installers, app stores and application bundles) and learning from the experience projects like Krita, digiKam, Rkward, Kdenlive & Co collected. We’d like to bring this information to more KDE Apps and work on this together.

So if you would like to bring your KDE Application to other platforms than just GNU/Linux, have some knowledge about Qt on these platforms or “just” know a lot about how to integrate software on these platforms hesitate and add yourself to the date selection Doodle. We need to start early as the house is quite occupied in the summer months and there is a lot work ahead to make another edition of the Randa Meetings happen and another huge success.

Flattr this!

Krita 2.9.10

Wed, 12/09/2015 - 18:56

The tenth bugfix release already! There are quite a few fixes, though the focus these days is really on getting Krita 3.0 ready for the first alpha release. Of particular interest to owners of a system with an AMD processor is the option to disable vectorization support. That might improve performance, but only for users of AMD systems! We’ve also got a fix by a new contributor, Nicholas LaPointe!

Here’s the full, unordered, list:

  • Fix crash in artistic text tool selection (bug 354907)
  • Fix saving tags: use the UTF-8 codec to save the tags instead of the locale codec (bug 356306)
  • Do no longer allow users to save 16 bit/channel linear gamma sRGB files to PNG without a profile
  • Do not crash when scaling down an image if the scaling factor gets too close to 0 (bug 356156)
  • Add a basic storyboard template
  • Fix generating the .kra and .ora thumbnail (bug 355884)
  • Fix loading some PSD files by Photoshop after saving from Krita (bug 355110)
  • Add an option to disable the vectorization speed up. This is for broken AMD processors.
  • Add an option to log OpenGL calls for debugging purposes
  • Remember the last-used profile when importing an untagged 16 bit/channel PNG image
  • Fix a number of import/export filters that reported the wrong error code after the user pressed cancel. Patch by Nicholas LaPointe, thanks!
  • Fix a rare crash that could happen during slow operations (bug 352918)
  • Fix an even rarer crash that could happen when recalculating the image under some circumstances. (bug 353043)
  • Fix a crash when switching sub-windows after removing a layer (bug 355205)
  • Improve memory usage when saving images by now creating a big image then scaling it down for the thumbnail
  • Make the small color selector consistent in color layout with other color selectors (bug 353505)
  • Fix a crash that occasionally happened when working with multiple images (bug 354975)
  • Fix a crash when using painting assistants (bug 353152)
  • Fix a race condition that could happen during complex operations (bug 353638)
  • Fix a crash in the shortcut system (bug 345562)
  • Restore the window correctly after going to canvas-only and back (bug 352018)

There are packages for Ubuntu Linux, Windows and OSX in the usual place! Steam users will be able to get the new packages shortly through the beta channel, and Stuart is also working on packages from the Animation branch. And speaking of animation… Later this week, we’ll probably have new animation branch packages for Ubuntu Linux and Windows!

A closer look to Ark 15.12

Wed, 12/09/2015 - 14:22

Ark 15.08 was the first Ark release after the port to KF5, so there wasn’t much room for new features.
With the upcoming 15.12 release the situation is quite different, as there are a significant number of changes that are worth of a blog post.

New features

First of all, the plugin loading mechanism is now much more smart: Ark can load an alternative plugin if the highest-priority one is not found.
This allows us to set p7zip as the default backend for zip archives handling, in order to fix one of the biggest issues of Ark: proper support of unicode archives.
So if you work often with archives whose entries have non-ASCII filenames, make sure to install p7zip on your distribution.
If p7zip is not installed, Ark will fallback on using info-zip as currently does.

One of the most requested feature was the ability to open an archived entry directly in the default application. This was already possible by right-clicking it and using the “Open with…” action, but now there is a dedicated “Open File” action that the user can trigger with a single click. Even better, through the settings dialog Ark lets the users choose what to do when an entry is clicked: open directly in the default app, or preview using the KParts technology.

Open File actionOpen File action Default action when clicking an entryDefault action when clicking an entry

Another useful feature is the ability to read archive comments. Ark can now show comments in zip and rar archives.
Currently, it is not possible to edit/add comments, but this will implemented in a future release.

A zip archive with commentA zip archive with comment

A very important feature is that Ark can now detect whether an archive is corrupt. In this case, Ark will ask the user whether to attempt to open the archive.
If the user chooses yes, the archive will be opened in read-only mode (you won’t be able to add or remove entries).
This makes sense because a huge archive might be corrupt in a very small portion of the file, yet the 99% of the content could still be extracted.
This feature is available for zip, 7z and rar formats.

A corrupt archiveA corrupt archive

Thanks to Ragnar Thomsen for his awesome work on implementing these new features, and thanks also to the VDG for their feedback on the UI changes.


Besides the new features, many bugs have been fixed with this release.
The most annoying ones were the broken drag-and-drop to the desktop and the broken preview of XML files.
The former has been fixed by Eike Hein on both the Ark and Plasma 5 sides (you will have to wait for Plasma 5.5 though).
The latter has been fixed by dropping the old and deprecated KHTML framework/kpart. The Kate part is now used by default to preview XML and HTML files.
Rendered previews of HTML files is no longer available, but now you can open them directly in your default browser using the new Open File action.

Calligra 2.9.10 Released

Wed, 12/09/2015 - 14:16

We are happy to announce the release of the Calligra Suite, and Calligra Active 2.9.10. It is recommended update for the 2.9 series of the applications and underlying development frameworks.

Support Calligra! Bug fixes in This Release

Here is an overview of the most important fixes. There are several others that may be not mentioned here.

  • Fix crash in artistic text tool selection (bug 354907)
  • Fix the outer line width of double borders increasing on round tripping. We were storing the total width, so each time to outer width would increase by the inner width+space. (bug 355318)
  • Fix showing of comments when loading a file with comments (bug 353857)
  • Fix saving tags: use the UTF-8 codec to save the tags instead of the locale codec (bug 356306)

  • SQL handling:
    • Make “BETWEEN … AND” and “NOT BETWEEN … AND” also valid for NULL arguments

  • Do no longer allow users to save 16 bit/channel linear gamma sRGB files to PNG without a profile
  • Do not crash when scaling down an image if the scaling factor gets too close to 0 (bug 356156)
  • Add a basic storyboard template
  • Fix generating the .kra and .ora thumbnail (bug 355884)
  • Fix loading some PSD files by Photoshop after saving from Krita (bug 355110)
  • Add an option to disable the vectorization speed up. This is for broken AMD processors.
  • Add an option to log OpenGL calls for debugging purposes
  • Remember the last-used profile when importing an untagged 16 bit/channel PNG image
  • Fix a number of import/export filters that reported the wrong error code after the user pressed cancel. Patch by Nicholas LaPointe, thanks!
  • Fix a rare crash that could happen during slow operations (bug 352918)
  • Fix an even rarer crash that could happen when recalculating the image under some circumstances. (bug 353043)
  • Fix a crash when switching sub-windows after removing a layer (bug 355205)
  • Improve memory usage when saving images by now creating a big image then scaling it down for the thumbnail
  • Make the small color selector consistent in color layout with other color selectors (bug 353505)
  • Fix a crash that occasionally happened when working with multiple images (bug 354975)
  • Fix a crash when using painting assistants (bug 353152)
  • Fix a race condition that could happen during complex operations (bug 353638)
  • Fix a crash in the shortcut system (bug 345562)
  • Restore the window correctly after going to canvas-only and back (bug 352018)
Try It Out

Download small The source code of the release is available for download here: calligra-2.9.10.tar.xz.
Also translations to many languages and MD5 sums.
Alternatively, you can download binaries for many Linux distributions and for Windows (users: feel free to update that page).

What’s Next and How to Help?

The next step after the 2.9 series is Calligra 3.0 which will be based on new technologies. We expect it later in 2015.

You can meet us to share your thoughts or offer your support on general Calligra forums or dedicated to Kexi or Krita. Many improvements are only possible thanks to the fact that we’re working together within the awesome community.

(Some Calligra apps need new maintainers, you can become one, it’s fun!) How and Why to Support Calligra?

Calligra apps may be totally free, but their development is costly. Power, hardware, office space, internet access, travelling for meetings – everything costs. Direct donation is the easiest and fastest way to efficiently support your favourite applications. Everyone, regardless of any degree of involvement can do so. You can choose to:
Heart Support entire Calligra indirectly by donating to KDE, the parent organization and community of Calligra:

Heart Support Krita directly by donating to the Krita Foundation, to support Krita development in general or development of a specific feature:

Heart Support Kexi directly by donating to its current BountySource fundraiser, supporting development of a specific feature, or the team in general: About the Calligra Suite

Calligra Suite is a graphic art and office suite developed by the KDE community. It is available for desktop PCs, tablet computers and smartphones. It contains applications for word processing, spreadsheets, presentation, databases, vector graphics and digital painting. For more information visit

About KDE

KDE is an international technology team that creates free and open source software for desktop and portable computing. Among KDE’s products are a modern desktop system for Linux and UNIX platforms, comprehensive office productivity and groupware suites and hundreds of software titles in many categories including Internet, multimedia, entertainment, education, graphics and software development. KDE’s software available in more than 60 languages on Linux, BSD, Solaris, Windows and Mac OS X.

} .button:hover{ padding:11px 32px; border:solid 1px #004F72; -webkit-border-radius:10px; -moz-border-radius:10px; border-radius: 10px; font:18px Arial, Helvetica, sans-serif; font-weight:bold; color:#E5FFFF; background-color:#3BA4C7; background-image: -moz-linear-gradient(top, #3BA4C7 0%, #1982A5 100%); background-image: -webkit-linear-gradient(top, #3BA4C7 0%, #1982A5 100%); background-image: -o-linear-gradient(top, #3BA4C7 0%, #1982A5 100%); background-image: -ms-linear-gradient(top, #3BA4C7 0% ,#1982A5 100%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1982A5', endColorstr='#1982A5',GradientType=0 ); background-image: linear-gradient(top, #3BA4C7 0% ,#1982A5 100%); -webkit-box-shadow:0px 0px 2px #bababa, inset 0px 0px 1px #ffffff; -moz-box-shadow: 0px 0px 2px #bababa, inset 0px 0px 1px #ffffff; box-shadow:0px 0px 2px #bababa, inset 0px 0px 1px #ffffff;

} .button:active{ padding:11px 32px; border:solid 1px #004F72; -webkit-border-radius:10px; -moz-border-radius:10px; border-radius: 10px; font:18px Arial, Helvetica, sans-serif; font-weight:bold; color:#E5FFFF; background-color:#3BA4C7; background-image: -moz-linear-gradient(top, #3BA4C7 0%, #1982A5 100%); background-image: -webkit-linear-gradient(top, #3BA4C7 0%, #1982A5 100%); background-image: -o-linear-gradient(top, #3BA4C7 0%, #1982A5 100%); background-image: -ms-linear-gradient(top, #3BA4C7 0% ,#1982A5 100%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1982A5', endColorstr='#1982A5',GradientType=0 ); background-image: linear-gradient(top, #3BA4C7 0% ,#1982A5 100%); -webkit-box-shadow:0px 0px 2px #bababa, inset 0px 0px 1px #ffffff; -moz-box-shadow: 0px 0px 2px #bababa, inset 0px 0px 1px #ffffff; box-shadow:0px 0px 2px #bababa, inset 0px 0px 1px #ffffff; }

.button a,.button a:link, .button a:visited, .button a:hover, .button a:active { color:#E5FFFF; } -->

Extension: FOSDEM 2016 Desktops DevRoom Call for Talks

Tue, 12/08/2015 - 21:41

Want to give a talk at a 6,000+ guest conference with more than 6,000 guests?

Do you feel you can deliver better than any other the other 250 speakers?

Here is your opportunity!

The FOSDEM Organization has graciously given devroom organizers a little extension. We are therefore extending our own deadline for the Desktops DevRoom: the new deadline is December 14th. There will be no further extensions.

Check the details on how to submit in the Call for Participation:

FOSDEM Desktops DevRoom 2016 Call for Participation

Topics include anything related to the Desktop: desktop environments, software development for desktop/cross-platform, applications, UI, etc

See you in Brussels!

Almost there…

Tue, 12/08/2015 - 02:17

Hi guys!

Today I will share with you a little bit more about the changes that Br-Print3D suffered these days…

After I learned more about the VTK features, I was able to make the prism to visualize the 3D models.

Screenshot from 2015-12-04 21-04-03

I also made the function to render the prism in conformation to the volume size given to the insert box…

And was quite good discover the class Vtk Axes(yes, is Axes instead of Axis), that made the XYZ axis automatically.

Screenshot from 2015-12-04 21-04-29

Screenshot from 2015-12-04 21-04-55

This changes is already set to the KDE git.

Now the challenge is learn about the LibUdev, to improve the function to get the connection of Arduino’s or other boards derived from Arduino Project.

I’m just waiting for a new release of KI version, to improve and implement others actions to Pandora.

About the 3D Enviroment, if you work with VTK and have more experience with the VTK assets, I would like a little help about the lighting on the visualization, ’cause the light is too strong and doesn’t allow see the details of the loaded models.

Well… Another warnings:

We recently discovered that VTK doesn’t allow to compile the source code if you have a Nvidia GPU with Cuda. I’m already in touch with VTK communitty to know more about this error and find the solution.

Also I found a bug on load STL files at ASCII format. But, as for now we won’t release a slicer inside the environment, I don’t think that is a big problem, but soon enough I will release this function. I just need to discover whats is causing this bug, and how to set the STL model to the ‘base’ of the prism… Any tips on this part will help too. =)

That’s all folks!

See ya!


Danbooru Client 0.5.0 released

Mon, 12/07/2015 - 23:20

A new version of Danbooru Client is now available!

What is Danbooru Client?

Danbooru Client is an application to access Danbooru-based image boards (Wikipedia definition).

It offers a convenient, KF5 and Qt5-based GUI coupled with a QML image view to browse, view, and download images hosted in two of the most famous Danbooru boards ( and

Highglights of the new version
  • The image window is shown again with recent Qt and KF5 versions;
  • Remember the last directory saved when saving images;
  • Remove (hopefully) hang when saving images.
Coming up next

I’ve been told there are issues with HiDPI screens, so I’ll try to fix them up next (no guarantees on ETA… also I don’t own any HiDPI screens). Adding support for copying links to images would also be nicec.

Release details

Currently, there is only a source tarball. For security, I have signed it with my public GPG key (A29D259B) and I have also provided a SHA-512 hash of the release.

How to run Rails with PostgreSQL on openSUSE Leap 42.1

Mon, 12/07/2015 - 22:23

I wrote about how to run Rails with PostgreSQL on openSUSE 12.3 before. Things have changed since then. While Rails, PostgreSQL, and openSUSE are still excellent choices, new versions have been released. This warrants an update. So here is how to get a development environment of Rails with PostgreSQL running on the latest and greatest openSUSE Leap 42.1.

Install PostgreSQL:

    sudo zypper install postgresql-server postgresql-devel

Start the database server:

    sudo systemctl start postgresql

Enable server to be started on boot:

    sudo systemctl enable postgresql

Switch to the postgres user to set up the database:

    sudo su -l postgres

Create database user:

   createuser -d USERNAME

Return to your normal user, exchange the database driver in the Gemfile from sqlite3 to pg and run

   bundle install

Change the configuration of the database driver to something like:
default: &default
adapter: postgresql
username: cs

<<: *default
database: APPNAME_development

<<: *default
database: APPNAME_test

<<: *default
database: APPNAME_production
Create the databases:

    rake db:create
    rake db:migrate
    rake db:migrate RAILS_ENV=test

That's it.

Kdenlive Café #1 and #2 - Date selections

Mon, 12/07/2015 - 16:16

We would like to try something new for the Kdenlive community: Kdenlive Cafés. These are one to two hour informal meetings on in channel #kdenlive. We might select certain topics for these Cafés but normally you can just chat about recent things in Kdenlive development, ask questions to developers and other users and talk about the progress of this great and free non-linear video editor.

So to select the dates and times for the first two Cafés please add yourself to this date selection tool. On Sunday, the 13th of December 2015 we will close the date selection and announce the first Café here, in the forum and on the Kdenlive mailing list.

UPDATE: The timezone would be Central European Timezone - UTC+1.


It’s Season of KDE!

Mon, 12/07/2015 - 12:46

Hello folks, it’s Season of KDE!

Who’s talking is Fernando. I’m a newcomer on the brazilian KDE community and in this year I’m participating of SoK – Season of KDE.
SoK is the outreach program from KDE community to encourage people who wants contribute with free software projects. For me, its a great opportunity be part of a program which evolves a great free software community like KDE. As a Computer Science student, it is like to be a intern in a great company and helps on development of quality software with global reach.
I’m working on Cantor project, a mathematics applications software for statistical and scientific analysis. My work will be to fix existing bugs on the backends used by Cantor, as well as to support and maintain these backends working on it’s current version. This work will be supervised by Filipe Saraiva who will be my mentor during SoK. Until February, month of finish of this season, I hope to contribute a lot to Cantor. Until then, i will make more posts talking about my progress.

digiKam 5.0.0-beta2 is released

Mon, 12/07/2015 - 12:08


Dear digiKam fans and users,

digiKam team is proud to announce the release of digiKam Software Collection 5.0.0 beta2. This version is the second public release of the new main digiKam version and is a result of the long development process by the team.

read more

Interview with Jack the Vulture

Mon, 12/07/2015 - 08:00

Grinspitter Portrait

Could you tell us something about yourself?

Hi! My name is Crystal Snyder, but most people call me Jack. I’m 22 years old, I’m from New Jersey, USA. I have an associates degree in Studio Art but digital painting and drawing is my main focus. Animation and nature are my biggest inspirations.

Do you paint professionally, as a hobby artist, or both?

Right now I’m just a hobby artist though I would like to work professionally one day.
Dragon Character Design

What genre(s) do you work in?

I’m kind of all over the place. Lately I’ve been drawing a lot of fanart. I know some artists look down on it, but for me its a fun way to interact with the community of fans and explore ideas that I have. Its fun! Sometimes we need a little fun. And I get to make other people happy, which is the best part. When I’m not doing that I would say creatures, and fantasy creatures. I love creature design, though I’m a beginner at it. It’s one of my favorite things to do creatively! Whenever I see a creature that inspires me I get excited and think “I can use that!”

Whose work inspires you most — who are your role models as an artist?

Chris Sanders and Nico Marlet come to mind immediately. Chris Sanders has a beautiful and distinct drawing style, and I adore his story telling. Nico Marlet’s character and creature designs, particularly his work on movies like How to Train Your Dragon and Kung Fu Panda, have been a huge influence on me. They are beautiful to look and and very detailed while remaining very sketchy. I like art where I can see the artist’s process and lines rather than super polished. David Revoy has been a huge influence and help in the open source painting world. He’s a phenomenal artist and I am definitely a fan of his Pepper and Carrot comic!
Jack The Vulture

How and when did you get to try digital painting for the first time?

Not counting scribbling in MS Paint as a kid, I took a Graphic Arts course when I was 14. I had no idea what to expect, but I learned how to use the Adobe Creative Suite, and they introduced tablets and digital painting to me. I took to it immediately and asked my parents for a tablet for Christmas. Before I got a tablet, I used Gimp to color sketches. My dad was and still is an avid Linux user, and he was the first to introduce me to open source programs.

What makes you choose digital over traditional painting?

So much more freedom. To experiment, to make mistakes, to change things around, to try whatever you can think in your mind without having to make the journey to an art supply store. Especially when you don’t have the money to buy all those paints and canvases. Also, digital art has its own look, or a collection of looks really, digital art is so varied. But like any medium, digital art has its own charm to me. I like seeing digital brush strokes as much as I like seeing oil paint strokes. It has its own charm. I think its a beautiful medium with lots of possibilities. Its also very accessible. For me, as long as I have a tablet and a computer, I can create anything I am willing to work to create, I won’t run out of digital canvases.

How did you find out about Krita?

Probably about 7 or 8 years ago, when I was just starting to learn digital art, my dad showed it to me.

What was your first impression?

I wasn’t extremely impressed, having been taught only Photoshop and really not knowing enough about digital art to have any worthy opinions about art programs. I barely remember what Krita was like back then. But over the years, I liked collecting as many free digital art programs as I could get my hands on. I eventually checked back in on Krita and saw that it was still in development. The tools looked exciting. I don’t think I remember exactly but I think back then it wasn’t yet available on Windows, which was all I had at the time. I waited until it was available, started using it, and never really looked back.

What do you love about Krita?

So much. I don’t only use this program because its free, that’s for sure. I bought Photoshop in college and all but abandoned it for Krita as my main painting application. The navigation is one of my favorite things. How easy it is to move around the canvas, rotate, scale my brush, open my favorite brushes with just a click of my pen, and continue painting without having to take my hands off my tablet and hit extra keys makes almost every other program I’ve used feel clunky by comparison. The program is also very customizable, there are so many brush engines to play with, and new features are being worked on all the time. It develops very fast, there’s always something to look forward to. The developers actually care about what the community wants, and its focused on a great painting experience. I love that. I love that our opinions as users are so valued, I love how dedicated the developers are to making Krita a wonderful professional experience.
Mountain Goat Creature

What do you think needs improvement in Krita? Is there anything that
really annoys you?

It’s actually hard for me to tell since my current computer is not very fast at all, but Krita still feels pretty slow sometimes with large brushes and canvases. Though I know that is being worked on and I’m excited to see the improvements! And hopefully a faster computer will help me.

What sets Krita apart from the other tools that you use?

Customization, navigation, development speed, and developers who care about the needs and wants of the painting community. Krita feels like it was made for painters. It feels like it was made to accommodate anyone’s style. I love that. Photoshop never gave me that. Painter makes me feel like I’m being pushed into a “real media” box. SAI doesn’t have enough features for me. Krita takes the best of all these programs and gives it to me in one package. I feel like I can do anything with it. I’m also very excited for the animation feature!

If you had to pick one favourite of all your work done in Krita so far, what would it be, and why?

It’s actually very hard for me to choose favorites. I draw and paint a lot but rarely work on big projects. Sometimes why I like a picture is based on the emotion I felt I expressed, sometimes its on how successful I think my technical skill was. Right now its probably a portrait I did of a dragon species I designed. I spent time on her scales and I like the lighting. I’m really bad at naming my artwork, so it doesn’t have a proper title.

What techniques and brushes did you use in it?

​I don’t really remember but I probably my usual workflow. Sketch, color under the sketch, use layer modes to achieve desired lighting, paint over the sketch, clean up, etc. It’s different every time. It really depends on the mood I’m in what brushes I’ll use.

Where can people see more of your work?

​My Deviantart is probably the best place to view my art.

Anything else you’d like to share?

​I really just want to thank everyone working on Krita for their hard work on this incredible program. You make so much possible, especially for people who can’t afford “industry standard” software. But Krita never feels like an alternative to paid programs, I use it because I love it. It is its own, incredible software that happens to be free and open source. Thank you for all you do.

Git trick #628: automatically set commit author based on repo URL

Sun, 12/06/2015 - 20:45

If you have more than one email identity that you use to commit to different projects you have to remember to change it in .git/config every time you git clone a new repository. I suck at remembering things and it’s been annoying me for a long time that I kept pushing commits with wrong email addresses to wrong repositories.

I can’t believe I am the only one having this problem, but I could not find anything on the interwebs so I just fixed it myself and I’m posting it here so that maybe hopefuly someone else will find it useful too :).

The trick is very simple: we create a post-checkout hook that will check the value of in .git/config and set it to whatever we want based on URL of the “origin” remote.  Why post-checkout? Because there’s no post-clone hook, but git automatically checkouts master after clone so the hook gets executed. It also gets executed every time you run git checkout by hand but the overhead is minimal and we have a guard against overwriting the identity in case it’s already set.

#!/bin/python # # (C) 2015 Daniel Vrátil <> # License: GPL # # import git import ConfigParser import os import sys repo = git.Repo(os.getcwd()) # Don't do anything if an identity is already configured in this # repo's .git/config config = repo.config_reader(config_level = 'repository') try: # The value of is non-empty, stop here if config.get_value('user', 'email'): sys.exit(0) except (ConfigParser.NoSectionError, ConfigParser.NoOptionError): # Section or option does not exist, continue pass origin = repo.remote('origin') if not origin: print('** Failed to detect remote origin, identity not updated! **') sys.exit(0) # This is where you adjust the code to fit your needs if '' in origin.url or origin.url.startswith('kde:'): email = '' elif '' in origin.url: email = '' elif '' in origin.url: email = '' else: print('** Failed to detect identity! **') sys.exit(0) # Write the option to .git/config config = repo.config_writer() config.set_value('user', 'email', email) config.release() print('** User identity for this repository set to \'%s\' **' % email)

To install it, just copy the script above to ~/.git-templates/hooks/checkout-hook, make it executable and run

git config --global init.templatedir ~/.git-templates

All hooks from templatedir are automatically copied into .git/hooks when a new repository is created (git init or git clone) – this way the hook will get automatically deployed to every new repo.

And here’s a proof that it works :-)

[dvratil@Odin ~/devel/KDE] $ git clone kde:kasync Cloning into 'kasync'... remote: Counting objects: 450, done. remote: Compressing objects: 100% (173/173), done. remote: Total 450 (delta 285), reused 431 (delta 273) Receiving objects: 100% (450/450), 116.44 KiB | 0 bytes/s, done. Resolving deltas: 100% (285/285), done. Checking connectivity... done. ** User identity for this repository set to '' ** [dvratil@Oding ~/packaging/fedpkg] $ git clone ssh:// Cloning into 'gammaray'... remote: Counting objects: 287, done. remote: Compressing objects: 100% (286/286), done. remote: Total 287 (delta 113), reused 0 (delta 0) Receiving objects: 100% (287/287), 57.24 KiB | 0 bytes/s, done. Resolving deltas: 100% (113/113), done. Checking connectivity... done. ** User identity for this repository set to '' **

Getting Qt 5 right in your application

Sat, 12/05/2015 - 23:36

I’m sure many of you already read about Clazy. For those who didn’t, it’s a quite convenient tool for checking your code and making sure you’re getting Qt’s API right. There’s some non-trivial quirks here and there that aren’t very important but once polished can push your system considerably, especially on those cases that are ran repeatedly.

Recently, I introduced a -DENABLE_CLAZY=ON setting on extra-cmake-modules, that comes quite handy so if you want to run it on your project you just need to enable it and then Clazy will get rather verbose (although with arguably no false positives). It will work on any KDE project right away, since it comes from KDECMakeSettings.

Note: This will work provided clazy is installed and you’re running Clang as a compiler.

Includes in your git config

Sat, 12/05/2015 - 10:19

So, let's assume you work on several machines. You have set up a system to centralize all your dot files so that you have a familiar environment everywhere you log in.

There are many ways to do this, I personally created a Git repository for my dot files. This repository contains a script which creates symbolic links at the right place, and another script which periodically commits any changes, pulls then pushes.

So far so good. Now, what if you want your Git configuration to be subtly different from machine to machine? In my case I wanted to have a different value for when I am on a work account and when I am on a personal account.

Git supports includes, so you can modify your ~/.gitconfig like this:

[include] path = ~/.gitconfig.local

Then you can create a ~/.gitconfig.local with account-specific configuration, for example:

[user] name = Aurélien Gâteau email =

Simple enough, but I actually lost a lot of time because I was testing the configuration like this:

$ git config --global

The --global option tells Git to ignore the repository configuration and only look at the ~/.gitconfig. Turns out that when you specify a configuration file, using --global or -f <somefile>, then git config does not expand includes! Reading documentation a bit more, I found out that the correct command is:

$ git config --global --includes

That's it, hope it saves you some time!

Minuet: intervals, chords, and scales exercises

Sat, 12/05/2015 - 06:44

 intervals, chords, and scales exercises

Hi planet,

Exactly one month ago I blogged about a new KDE application for music education named Minuet. Since it was only a few days until featuring freezing KDE Applications 15.12 at that time, we postponed the first release of Minuet to 16.04. The plan is to move it in a couple weeks to KDE review and make the final adjustments for having our newly KDE-Edu baby out in the wild.

That said, some nice new features have been added to Minuet in the meanwhile:

  • Ear training exercises can now be specified in separate JSON files. That's of paramount importance for easily identifying and evolving the large set of exercises we intent to support. Minuet's core takes care of loading all exercise specification files and merging them in a single JSON model, used by the dynamic QML stuff which creates the exercise menu and presentation grid.
  • A system verification wizard was implemented to detect the availability of commonly used MIDI backends like TiMidity++. TiMidity++ is automatically started and stopped during Minuet initialization and shutdown, respectively.
  • Exercise answers are automatically highlighted in piano keyboard when hovering the answer's options.
  • Initial support for exercises regarding chords (11 exercises with 19 different chord types) and scales (currently only major scale and its modes) has been added.
  • Descending melodic intervals exercises have been included, in addition to the ascending ones.
  • A KConfig-based UI for initial MIDI configuration has been implemented.
  • Major refactoring in QML source code.

Well, nothing better than checking out a demonstration video, isn't it?

Click here if you can't see the embedded video

So, what can you expect for the next steps?

  • Sheet music support;
  • Indicators and metrics for student achievements;
  • More ear training lessons.

You already know it ;) but it doesn't hurt to remind: comments, suggestions, and of course contributions are quite welcome! Just clone it from git://

See you ...