Tag Archives: FLOSS

The KDE Randa 2014 meeting, in easy-digestible video format!

In case you were wondering what was going on in Randa, here are some first hand impressions. The video was produced by Françoise Wybrecht (alias Morgane Marquis) and Lucie Robin, and the people in it are the actual participants of the event. It was also created using KDenlive, one of the awesome Free Software tools a team has been working on at the Randa meeting itself. The video introduces the faces and personalities of the contributors and their different backgrounds and origins. Many thanks to our brand new ad-hoc media team for producing this video!

(In case the embedded video does not show up, see here: https://www.youtube.com/watch?v=yua6M9jqoEk)

How to contribute to the KDE Frameworks Cookbook

The annual KDE Randa Meeting, in itself already shock-ful of awesome, this year hosted the KDE Frameworks Cookbook sprint. Valorie, Cornelius and I already wrote a lot about it. Plenty of attention went into finding the place for the cookbook between the getting-started HOWTOs on KDE Techbase and the full-blown API documentation. Not surprisingly, there is a space and a good purpose for the book. Frameworks developers and maintainer have had to deal with the question of where to put introductions that segue newcomers into how to use the modules many times, and so far, the answer have been unsatisfactory. Newcomers only find the API documentation when they already know about a framework, and TechBase is a great resource for developers, but not necessarily a good introduction. What is missing is a good way to help and learn about what KDE Frameworks have to offer. So there is the purpose of the KDE Frameworks Cookbook – to help developers find and learn about the right tools for the problems they need to solve (and also, consumable on a e-book reader by the pool). For developers and maintainers, this means they need to know how to add sections to the book that cover this information about their frameworks. These tools and workflows will be explained in this post. Continue reading

KDE Frameworks Book Sprint at the Randa Meeting 2014

A couple of weeks before the KDE Randa Meeting of 2014, the meeting’s organizer Mario Fux suggested to have a book sprint to help developers adopt the newly released KDE 5 Frameworks. In the Open Source spirit, the idea was not to start from scratch, but rather to collect the various bits and pieces of documentation that exist in different places in one location that offers itself more to a developer than before. Valorie Zimmermann stepped up to organize it (many thanks!), and a number of people volunteered to take part. After a week the project completely changed its orientation and struggled and found and also newly defined its place as a part of KDE’s documentation efforts. And it produced an initial version of the book, which is currently circulated on people’s ebook readers around here. Continue reading

Defensive Publications: Shedding Light on Innovation


The patent system is broken. The point of patents is to encourage innovation and inventiveness. Instead of promoting innovation, patent offices have awarded overly broad, vague, and unoriginal patents that draw unclear lines allowing bad actors to profit and threaten costly lawsuits. Patent examiners have a strong sense of the technology that is patented, but they’re missing an understanding of what has been and is currently being developed in the open source world. As shocking as it may seem, the result is the examiner formulating an inaccurate sense of what is innovative. As the final arbiter of a very significant monopoly grant, they are often grossly uninformed in terms of what lies beyond their narrowly scoped search. This is not wholly their fault as they have limited resources and time. However, it is a strong indication of a faulty system that is so entrenched in the archaic methods under which patent offices have been operating.

We have faced and continue to cope with the effects of bad patents on multiple fronts. The most widely known are being displayed on the large stage where huge companies battle in the courts, resulting in large money settlements or high stakes jury verdicts (i.e. Apple v. Samsung). This leads to higher costs to consumers and users, uncertainty amongst innovators about what is patented, a veritable arms race to secure patents to corner the market, and limited competition. These ‘wars’ cost companies money and that cost trickles down to the consumer.

On another stage, we also see the threat of trolls exponentially increase as more patents are acquired and used against small companies, nonprofits, and independent developers. The fear of costly litigation forces licensing agreements with the result of stifling innovation by suffocating independent inventors. On all fronts, more money is being spent on co-existing with undeserving patents rather than developing new ideas. We are losing out on breakthroughs and advancement in technology because of the environment of fear and uncertainty that has been created.

The answer has to be more than abolition of the patent system, as from a pragmatic point of view, it won’t happen. It does us little service to ignore patents and abandon the system. Rather, we need to address and combat the threats to innovation so that we can begin to bring an end to the age of fear and litigation. We can continue to deal with patents as they are issued, identify those that abuse the system, then spend the money and invest time to work to invalidate these. Taking this one step further, we can also proactively prevent these obstacles to innovation from even existing by directly communicating to the examiner what is being and has been developed. The tools to do so are available through the use of defensive publications.

A defensive publication essentially describes what is known or currently being developed. For those who are developing software, these documents are regularly created in the form of blog posts, community updates or releases. However, examiner constraints prevent these sources from being found. The last step is formalizing this and ensuring that the patent examiner has access to an open source database of these documents.

With increasing amounts of low quality patents being issued worldwide and a lack of clear boundaries, patent examiners are losing a sense of what is indeed inventive. Those who patent are getting a voice. Every free software release, solved issue or innovative development process can be turned into a defensive publication. References to current or older releases can also be demonstrated to help illustrate how the community of developers resolves obstacles. By writing these disclosures, free software can demonstrate how to be proactive. In turn, a patent application is rejected and a potential lawsuit is avoided.

Through the Linux Defenders program, Open Invention Network works  with open source developer communities to create defensive publications. We will be working closely with Linux kernel and Qt  developers, because we think that these represent major driving innovative forces in the Open Source spectrum. Important innovations in Linux and Qt should be documented in defensive publications following the releases of the software. We invite interested individuals and companies to contribute to this, and will support the authors in getting their publications out. If you are interested in writing Qt related defensive publications, or will be able to help identifying topics that should be documented, consider joining the mailing list to follow the discussion: http://lists.qt-project.org/mailman/listinfo/defpubs

[Image by Nick Kocharhook, thanks: http://www.flickr.com/photos/k9/35010906/%5D

KDE Frameworks 5 Tech Preview released, with updated ThreadWeaver

Today, the KDE Community released a tech preview of the upcoming KDE 5 Frameworks, the new, modularised incarnation of what was previously distributed simply as the KDE libraries. The new frameworks are drop-in extensions to Qt applications, with minimal and well-documented dependencies for easier deployment. The tech preview contains two frameworks that are marked as mature, namely KArchive and ThreadWeaver. The updated ThreadWeaver was my major piece of library coding work in 2013, and was finished just in time for the release. Even though it is a tech preview, it is stable, and no major (or even significant but minor) changes in the current API are expected until the final release. Programmers are already encouraged to use it, and provide feedback and bug reports.

2897019812_c6bddd5fb1_oThreadWeaver is a concurrent execution scheduler written in C++. Available for all target platforms of the Qt framework, including desktop, mobile and embedded environments, ThreadWeaver delivers concurrent execution of tasks, load balancing with regard to user-defined criteria, multiple independent queues, processing graph modelling, aggregate jobs and other comprehensive features. As all other KDE frameworks, ThreadWeaver is Free Software. Its only dependency is Qt, which makes it a tier 1 framework in KDE’s lingo.

A number of the new features of ThreadWeaver were announced at Akademy 2013. Jobs, the unit of concurrent execution in ThreadWeaver, are now managed by the queue using shared pointers, meaning that auto-delete behaviour is implicit and controlled by the user. Helper templates are available to queue stack or member variables, so allocation of jobs can be static or dynamic. Functors or lambda functions can be used to construct jobs. Job aggregates like collections and sequences now execute their own run() method before queueing their elements, so that aggregates can generate their own elements. Success and queueing state of jobs are now integrated into a single status. Jobs can signal the result of execution by setting a status, but also using exceptions, simplifying error reporting in more complex job classes. Jobs can be decorated, and no more inherit QObject by default. Decorators can be used to add signals, change priorities or modify just about any behaviour of jobs independently of the actual job class used. The construction of the global queue can now be customised using a queue factory. The QueueStream API greatly simplifies queueing jobs with a familiar iostream-like C++ syntax.

ThreadWeaver follows the Unix idiom of doing one thing, and doing it right. Similar to how small Unix programs can be combined to create an practically infinite space of computing solutions, ThreadWeaver offers itself to programmers as an add-on module with minimal dependencies. Including it extends an application with concurrent scheduling capability. But the same Unix idiom is also applied in a second sense. Within ThreadWeaver, a few basic concepts – jobs and their aggregates, queues and policies – are implemented that again provide simple building blocks that can be combined creatively, offering a vast space of potential solutions within the scope of the application.

The history of ThreadWeaver goes back to KDE 3. The idea of implementing a thread pool based execution scheduler that manages dependencies between jobs was implemented as a proof of concept using Qt 3. However it turned out to be difficult to implement and use because of the lack of thread-safe reference counting of the implicitly shared classes at the time. These fundamental problems have been solved with the release of Qt 4. Additionally, the introduction of cross-thread signal-slot connections further simplified the communication between jobs and the application’s user interface. The first production ready version of ThreadWeaver was released as part of KDELibs with KDE 4.0. For KDE Frameworks 5, it was almost completely re-written to simplify memory management of jobs, make use of new Qt 5 features like atomic variables, and in part to reflect new language constructs in C++11 like lambda functions. ThreadWeaver comes with an extensive set of unit tests that all pass in the tech preview (hear, hear).

In the following weeks and months, the framework will be polished and debugged based on user feedback. Also, a series of posts here on this blog will introduce individual ThreadWeaver concepts and features in depth, mostly based on example programs, including contrasting it to thread handling in Qt using QThread or Qt Concurrent. ThreadWeaver is very close to production quality, having been tested continuously in the last couple of months. There may still be smaller, source compatible changes to the framework. We ask interested programmers out there to provide feedback and bug reports to make ThreadWeaver what it should be — a worry-free, easy to use and powerful add-on to Qt that programmers enjoy using. Have fun!

[Image by Shannan Sinclair, thanks: http://www.flickr.com/photos/originalbliss/2897019812%5D