Add your blog

If you are a KDE contributor you can have your blog on Planet KDE. Blog content should be mostly KDE themed, English language and not liable to offend. If you have a general blog you may want to set up a tag and subscribe the feed for that tag only to Planet KDE.

We also include feeds in different categories, currently Dot News, Project News feeds, User Blogs, french Language, Spanish Language, Polish Language and Portuguese Language KDE blogs. If you have a feed which falls into these categories (or another non-English language) please file a bug as below.

Planet KDE is kept in KDE's Git. If you have an account you can add or edit your own feed:

  • git clone kde:websites/planet-kde-org
  • Put your hackergotchi in website/hackergotchi/. A hackergotchi should be a photo of your face smaller than 80x80 pixels with a transparent background. git add the file.
  • At the end of the planetkde/config file add your details (the name in brackets is your IRC nick):
  • feed 45m http://path.to/my/feed.rss define_name Konqi Konqueror (konqi) define_face hackergotchi/konqi.png define_facewidth 80 define_faceheight 80
  • git commit -a; git push

If you want to add a Twitter microblog to the Microblogging sidebar add define_microblog true and follow your name with [twitter]. Currently only Twitter is known to work, please contact Jonathan Riddell before adding non-Twitter microblogs to check it works.

If you do not have a Git account, file a bug in Bugzilla listing your name, Git account (if you have one), IRC nick (if you have one), RSS or Atom feed and what you do in KDE. Attach a photo of your face for hackergotchi.

Blog Classes

The default class for blogs is English language personal blogs. Other classes are:

  • Spanish language:
    define_feedclass spanish
  • Portugese language:
    define_feedclass portuguese
  • Chinese lanugage:
    define_feedclass chinese
  • Polish lanugae:
    define_feedclass polish
  • Italian lanugae:
    define_feedclass italian
  • French lanugae:
    define_feedclass french
  • KDE User blogs:
    define_feedclass user
  • KDE News feeds:
    define_feedclass news
  • KDE Dot News:
    define_feedclass dot

Planet KDE Guidelines

Planet KDE is one of the public faces of the KDE project and is read by millions of users and potential contributors. The content aggregated at Planet KDE is the opinions of its authors, but the sum of that content gives an impression of the project. Please keep in mind the following guidelines for your blog content and read the KDE Code of Conduct. The KDE project reserves the right to remove an inappropriate blog from the Planet. If that happens multiple times, the Community Working Group can be asked to consider what needs to happen to get your blog aggregated again.

If you are unsure or have queries about what is appropriate contact the KDE Community Working Group.

Blogs should be KDE themed

The majority of content in your blog should be about KDE and your work on KDE. Blog posts about personal subjects are also encouraged since Planet KDE is a chance to learn more about the developers behind KDE. However blog feeds should not be entirely personal, if in doubt set up a tag for Planet KDE and subscribe the feed from that tag so you can control what gets posted.

Posts should be constructive

Posts can be positive and promote KDE, they can be constructive and lay out issues which need to be addressed, but blog feeds should not contain useless, destructive and negative material. Constructive criticism is welcome and the occasional rant is understandable, but a feed where every post is critical and negative is unsuitable. This helps to keep KDE overall a happy project.

You must be a KDE contributor

Only have your blog on Planet KDE if you actively contribute to KDE, for example through code, user support, documentation etc.

It must be a personal blog, or in a blog class

Planet KDE is a collection of blogs from KDE contributors.

Do not inflame

KDE covers a wide variety of people and cultures. Profanities, prejudice, lewd comments and content likely to offend are to be avoided. Do not make personal attacks or attacks against other projects on your blog.

For further guidance on good practice see the KDE Code of Conduct.

People Aggregated

FeedRSSLast fetchedNext fetched after
Rajko Albrecht (alwin) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Guillaume DE BURE (gdebure) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Christophe Giboudeaux (krop) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Stuart Dickson (stuartmd) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Anant Kamath (flak37) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Akshay Ratan (akshay_r) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Evgeniy Ivanov (powerfox/pfx) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Punit Mehta (punit9462) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Alex Fiestas (afiestas) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Łukasz Jaśkiewicz (ljaskiewicz) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Arjun Basu (ultimatrix) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Cristina Yenyxe González García XML 23:06, Wednesday, 30 July 23:21, Wednesday, 30 July
Marc Mutz XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Dan Leinir Turthra Jensen (leinir) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Petr Mrázek (petrm) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Philipp Knechtges (d1saster) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Roland Wolters (liquidat) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Michał Zając (Quintasan) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Dinesh (saidinesh5) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Diego Casella ([Po]lentino) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Mojtaba Shahi Senobari (moji) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
A. L. Spehr (blauzahl) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Felix Lemke (HobbyBlobby) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Adrian Draghici (adrianb) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Dario Freddi (drf__) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Francesco Nwokeka (nwoki) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Aakriti Gupta (aakriti) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Abhinav Gangwar XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Adam Celarek (adamce) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Adam Rakowski (foo-script/efes) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Aditya Bhatt (adityab) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Andrea Diamantini (adjam) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Ahmed AbouElhamayed (TheMonster) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Aike Sommer XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Dmitry Ivanov (vonami) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Keith Rusler (comawhite) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Anton Kreuzkamp (akreuzkamp) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Albert Vaca (albertvaka) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Alessandro Diaferia (alediaferia) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Alejandro Wainzinger (xevix) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Alexander Dymo (adymo) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Alexander Neundorf XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Jeremias Epperlein XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Alessandro Cosentino (cosenal) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Alan Alvarez (clsk) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Lukas Tinkl XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Jos Poortvliet XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Sri Ramadoss M (amachu) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Amandeep Singh (amandeepsingh) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Andras Mantia XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Ana Guerrero (ana) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Ander Pijoan (ander) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Andi Clemens (aclemens) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Andreas Demmer (ademmer) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Andreas Schilling XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Andreas Schneider (gladiac) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Andrei Duma (AndreiDuma) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Andrew Coles (coles) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Andrius Štikonas XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Andre Moreira Magalhaes (andrunko) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Aniket Anvit (packo) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Timothee Giet (Animtim) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Anmol Ahuja (DarthCodus) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Anne Wilson (annew) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Anne-Marie Mahfouf (annma) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Antonio Larrosa Jimenez (antlarr) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Antonis Tsiapaliokas (kokeroulis) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Anuj Pahuja (alasin) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Andreas Pakulat XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Alexander Rieder (arieder) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Arindam Ghosh XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Arno Rehn (pumphaus) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Arthur Ribeiro (arthurribeiro) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Aaron Seigo (aseigo) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Ashish Madeti (madeti) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Friedrich Kossebau (frinring) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Aurelien Gateau XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Alberto Villa (avilla) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Allen Winter XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Andrew Lake (Jamboarder) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Bart Coppens (BCoppens) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Behind KDE XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Stephan Binner (Beineri) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Benjamin Port (ben2367) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Benjamin Kaiser (benkaiser) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Lim Yuen Hoe (moofang) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Bhaskar Kandiyal XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Bastian Holst (bholst) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Bhushan Shah (bshah) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Will Stephenson XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Mohammed Nafees (binaryking) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Hamish Rodda (blackarrow) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Jesper K. Pedersen (blackie) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Jeff Mitchell (jefferai) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Andres Betts (anditosan) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Sune Vuorela (svuorela) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Carlos Licea XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Agustín Benito Bethencourt XML 23:06, Wednesday, 30 July 23:21, Wednesday, 30 July
Tatiana Gornak XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Mojtaba Shahi Senobari (moji) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Mailson Menezes (mailson) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Michael Pyne (mpyne) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Wang Hoi (wkai) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Adriaan de Groot (adridg) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
C. Boemann (boemann) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Lukas Appelhans XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Jaroslav Řezník (jreznik) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Brad Hards (bradh) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Simon St James (SSJ_GZ) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Stephan Platz (paalsteek) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Bharath M S (brat197) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Brijesh Patel (erione) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Michał Małek (mmalek) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Bernd Buschinski (buscher) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Călin Cruceru (crucerucalin) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Calligra News XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Thorsten Zachmann XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Allan Sandfeld Jensen (carewolf) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Carsten Niehaus (carsten) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Remi Villatel XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Anselmo L. S. Melo (anselmolsm) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Detlev Casanova (Cazou) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Chandan Kumar (chandankumar) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Chani Armitage (Chani) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Andrew Stromme (astromme) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Alexandr Goncearenco XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Mathieu Chouinard (chouimat) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Christian Loose XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Aracele Torres (araceletorres) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Cies Breijs (cies) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Clarence Dang XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Claus Christensen (Claus_chr) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Mauricio Piacentini (piacentini) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Igor Trindade Oliveira XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Daker (dakerfp) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Andriy Rysin (rysin) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Andrew Manson ( mansona aka real_ate ) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Sven Assmann XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Colin Guthrie (coling) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Bjørn Erik Nilsen (bnilsen) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Nick Shaforostoff (shaforostoff) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Ryan Rix (rrix) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Fania Jöck (fjoe) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Stephan Kulow (coolo) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Andreas Cord-Landwehr (CoLa) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Sujith H (sujith_h) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Somsubhra Bairi (somsubhra) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Mirko Boehm XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Cristian Tibirna (Inorog) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Carlos Leonhard Woelz (cwoelz) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Cyril Oblikov (munknex) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Cyrille Berger XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
David E. Narváez (dMaggot) XML 20:36, Wednesday, 30 July 20:36, Thursday, 31 July
Rolf Eike Beer (Dakon) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Dan Vratil (dvratil) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Daniel Molkentin (danimo) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Danny Kukawka XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Daniel Nicoletti (dantti) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Dario Andres Rodriguez (Dario_Andres) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Dario Massarin XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Alexis Menard (darktears) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
David Edmundson (d_ed) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
David Vignoni (davigno) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Florentina Musat (chrome) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Vijay Dhameliya (vijay13) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Sander Koning XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Dennis Nienhüser (Earthwings) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Luca Beltrame (einar77) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Josef Spillner XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
David Faure (dfaure) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Derek Kite (dkite) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Dimitrios T. Tanis (diggy) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Gilles Caulier (cgilles) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Sebastian Sauer (dipesh) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
David Jarvie (djarvie) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Dimitri Popov XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Dmitry Kazakov (dmitryK) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Dominik Seichter XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Ariya Hidayat XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Klaas Freitag (dragotin) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Daniele E. Domenichelli (drdanz) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Simon at Facebook Open Academy XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Eduardo Robles Elvira (Edulix) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Mihail Ivchenko (EgorMatirov) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Eike Hein (Sho) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Joon-Kyu Park XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Pau Garcia i Quiles (pgquiles) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Enrico Ros XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Adrien Facelina XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Kevin Ottens (ervin) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
kunal ghosh (kunalghosh) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Constantin Berzan (exit) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Akarsh Simha (kstar) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Andreas Ramm (psychobrain) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Fabrice Mous (fab) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Boudewijn Rempt (boud) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Fathi Boudra (fabo) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Filipe Saraiva (filipesaraiva) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Christian Mollekopf (cmollekopf) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Flavio Castelli XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Nadeem Hasan XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Fabrizio Montesi (fmontesi) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Diane Trout (detrout) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Frank Karlitschek (karli) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Frank Osterfeld (fosterfeld) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Frederic Coiffier (fcoiffier) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Frederik Gladhorn (fregl) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Frederik Gladhorn (fregl) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Rafael Fernández López (ereslibre) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Siddharth Sharma (siddvicious) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Frank Reininghaus XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Freoffice: KOffice based Open Mobile Office Suite XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Friedrich Pülz (fkpulz) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Harri Porten XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Frerich Raabe XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Koos Vriezen XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Nicolas Lécureuil (neoclust) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Felix Rohrbach (fxrh) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Gokmen Goksel (gokmen) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Gabriel Voicu (gvoicu) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Michael Gapczynski (MTGap) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Bruno Coudoin (bdoin) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Ian Geiser (geiseri) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Gerhard Kulzer (gkulzer) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Giannis Konstantinidis (giannisk) XML 23:06, Wednesday, 30 July 23:21, Wednesday, 30 July
Giorgos Tsiapaliokas (terietor) XML 23:06, Wednesday, 30 July 23:21, Wednesday, 30 July
Gregor Iaskievitch XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
George Kiagiadakis (gkiagia) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Cédric Bellegarde (gnumdk) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Antonio Aloisio XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Inge Wallin (ingwa) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Cezar Mocan (CezarMocan) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Debjit Mondal (debjit) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Simon A. Eugster (Granjow) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Paul Adams XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Johannes Bergmeier (joselb) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
George Goldberg (grundleborg) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Denis Kuplyakov (dener.kup) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Denis Kuplyakov XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Denis Kuplyakov (denerkup) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Vedant Agarwala (vedu) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Siddharth Srivastava (akssps011) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Edward Toroshchin (hades) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Harald Hvaal (metellius) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Harshita Mistry XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Sebastian Pipping (sping) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Diego Iastrubni XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Helio Castro (heliocastro) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Henri Bergius (bergie) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Henrique Pinto XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Henry de Valence (hdevalence) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Harshit Jain (hjain) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Florian Graessle (holehan) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Holger Foerster (foerster) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Loic Corbasson XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Mathias Kraus (hias) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Chakra OS XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Ozan Çağlayan (ozancaglayan) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Fabio A. Locati (flocati) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Guillermo Amaral (gamaral) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Bartosz Wadolowski XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Boudewijn Rempt's Krita blog XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Fredrik Höglund XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Gopalakrishna Bhat XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Petri Damstén XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Sergey Kalinichev (klins) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Vladimir Prus XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Arnaud Dupuis (Arno[Slack]) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Dani Gutiérrez Porset XML 23:06, Wednesday, 30 July 23:21, Wednesday, 30 July
Weng Xuetian (csslayer) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Risto Saukonpaa (fri13) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Nicolas Lecureuil (nlecureuil) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Francesco Riosa (riosa) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Angelo Naselli (anaselli) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
David Hubner (hubner) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Daniel Meltzer (hydrogen) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Robin Burchell (w00t) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Andrea Scarpino (ilpianista) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Ronny Yabar (ronnyml) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
William Viana (Liw-) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Niklas Laxström (Nikerabbit) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Ivan Čukić (ivan) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Jean-Baptiste Mardelle (j-b-m) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
James Ots XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Jan Grulich (grulja) XML 23:06, Wednesday, 30 July 23:21, Wednesday, 30 July
Jan Muehlig (janushead) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Jan Gerrit Marker (jangmarker) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Jarle Akselsen XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Jarosław Staniek (jstaniek) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Jason Harris (LMCboy) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Javier Llorente XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Jens Muller (jmueller) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Jan Kundrát (jkt) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Joseph Simon (jsimon3) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Jörg Ehrichs XML 23:06, Wednesday, 30 July 23:21, Wednesday, 30 July
John Ratke XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
John Layt XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Johannes Huber (johu) XML 23:06, Wednesday, 30 July 23:21, Wednesday, 30 July
Jon Ander Peñalba (jonan) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Jonathan Thomas (JontheEchidna) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Avik Pal (avikpal) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Joseph Wenninger XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
John-Paul Stanford (jp) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Ashley Winters XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Jonathan Riddell (riddell) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Juan Carlos Torres (jucato) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Julien Narboux (jnarboux) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Jussi Schultink (jussi01) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Gaël de Chalendar (kleag) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Karan Luthra (luthrak) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Kashyap Puranik (kashthealien) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Ekaterina Gerasimova (kittykat) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Adrian Lungu (lungu) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Alexander Neundorf XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Christoph Cullmann (cullmann) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
David Herberth (dav1d) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Diana Tiriplica (dianat) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Dominik Haumann XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Emmanuel Bouthenot (bouthenot) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Erlend Hamberg XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Joseph Wenninger (jowenn) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Kåre Särs (ksars) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Marco Mentasti (mentasti) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Maximilian Löffler (max) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Pablo Martín Cobos (pcobos) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Shaheed Haque (shaheed) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Simon St James (ssj) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Svyatoslav Kuzmich XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Thomas Fjellstrom (fjellstrom) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
KDAB on Qt XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Laszlo Papp (lpapp) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Kevin Funk (kfunk) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Shantanu Tushar (shantanu) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Tobias Koenig (tokoe) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
John Tapsell (JohnFlux) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Baltasar Ortega XML 23:06, Wednesday, 30 July 23:21, Wednesday, 30 July
Hugo Pereira Da Costa XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
KMix - the KDE Multimedia Mixer XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Nuno Pinheiro (pinheiro) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Camila Ayres (camilasan) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Wagner Reck (wiglot) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Wagner Reck (wiglot) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
KDE Sysadmins XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
KDE User Working Group XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Jens Reuterberg (jensreuterberg) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Martin Bříza (mbriza) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
KDE Dot News XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
David Miller XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Kdenlive team XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Christoph Feck (kdepepo) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Egon Willighagen XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Percy Camilo Triveño Aucahuasi XML 23:06, Wednesday, 30 July 23:21, Wednesday, 30 July
Kurt Hindenburg XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Ramon Zarazua (_killerfox_) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Valerio Pilo (Amroth) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Jasem Mutlaq (KNRO) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Jigar Raisinghani (jigar) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Nikhil Marathe (nsm) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Wade Olson XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Konrad Zemek XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Kevin Krammer XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Sahil Nagpal (sahil) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Mohit Goyal (mohit) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Vladimir Kuznetsov XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Rafał Kułaga (rkulaga) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Kubuntu Wire XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Lamarque Souza (lamarque or lvsouza) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Johannes Wienke (languitar) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Luca Tringali (lucatringali) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Leo Franchi (lfranchi) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Lydia Pintscher (Nightrose) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Johan Thelin XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Gabriel Poesia (gpoesia) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Valorie Zimmerman (valorie) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Sven Brauch (scummos) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Alex Raymond (alexraymond) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Aracele Torres (araceletorres) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Filipe Saraiva (filipesaraiva) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Luiz Romário (luizromario) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Sandro Andrade (sandroandrade) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Tomaz Canabrava (tomaz) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Vinicius Azevedo (stdcout) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Vito Chiarella (vitochiarella) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Vitor Boschi (Klanticus) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Alex Turbov (zaufi) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Luboš Luňák (llunak) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Frederik Schwarzer (icwiener) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Lucas Lira Gomes (MaskMaster) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Lucijan Busch (lucijan) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Luís Gabriel Lima (luisgabriel) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Lukas Dzikaras (LukasLt2) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Lukas Tvrdy (lukast) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Tejas Dinkar (gja) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Piyush Verma XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Andy Coder XML 23:06, Wednesday, 30 July 23:21, Wednesday, 30 July
Mahfuz062 XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Adam Treat (manyoso) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Marc Cramdal XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Marcel Wiesweg (mwiesweg) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Marcus Hanwell (cryos) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Marco Calignano (marcuzzo) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Mario Fux (unormal) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Mark Gaiser (markg) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Markus Slopianka (markuss) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Marco Martin (notmart) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Martijn Klingens XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Martin Küttler (mkuettler) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Martin Klapetek (mck182) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Martin Konold (Mortimer) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Martin Gräßlin XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Martin Klapetek (mck182) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Daniel Jones XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Matthias Fuchs (mat69) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Mateu Batle (mbatle) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Matt Williams XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Mayank Madan (mayankmadan) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Michael Bohlender (mbohlender) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Kenneth Wimer (kwwii) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Mehrdad Momeny (mtux) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Benjamin Meyer (icefox) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Pedro López-Cabanillas XML 23:06, Wednesday, 30 July 23:21, Wednesday, 30 July
Pedro Lopez-Cabanillas XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Milian Wolff (milianw) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Mirko Boehm (miroslav) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Magda Konkiewicz XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Marijn Kruisselbrink XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Mohamed Anwer (tootis) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Mohamed Malik XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Ben Martin (monkeyiq) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Jean-Nicolas Artaud (morice-net) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Artur Souza (MoRpHeUz) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Mauro Iazzi (iazzi) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Rupanjana Mitra (mrupanjana) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Miquel Sabaté (mssola) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Tony Murray (murrant) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Carsten Pfeiffer (gis) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Martyn Circus XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Sven Burmeister (rabauke) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Maurizio Monge XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Sayak Banerjee (sayakb) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Ben Cooksley (bcooksley) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Srikanth Tiyyagura XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Myriam Schweingruber (Mamarok) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Jason A. Donenfeld (zx2c4/jdonenfeld) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Ingo Malchow (neverendingo) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Krita News XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Kubuntu News XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Patrick Spendrin (SaroEngels) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Abhijeet Nikam (nikam08) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Nikolaos Chatzidakis XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Niko Sams (nsams) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Nilesh Suthar (nil1511) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Juan Luis Baptiste (Maeztro) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Jos van den Oever (vandenoever) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Guillaume Martres (smarter) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Oindrila Gupta (oini) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Marta Rybczyńska XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Dmitry Suzdalev (dimsuz) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Aaron Reichman (areichman) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Kai-Uwe Behrmann (oy) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Francisco Fernandes (chicao) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Paul Mendez (paul_m) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Paul Pacheco (paulpach) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Marc Pegon (mpeg) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
José Luis Vergara Toloza (Pentalis) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Peter Grasch XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Adam Pigg XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Pierre Ducroquet XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Rob Scheepmaker (pinda) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Matthias Meßmer (pipesmoker) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Kurt Pfeifle (pipitas) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Ignat Semenov (isemenov) XML 23:06, Wednesday, 30 July 23:21, Wednesday, 30 July
Rene Kuettner (rku) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Peter Penz XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Pranav Ravichandran (Pranav_rcmas) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Frans Englich (FransE) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Paulo Rômulo (promulo) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Pierre Stirnweiss (PierreSt) XML 23:06, Wednesday, 30 July 23:21, Wednesday, 30 July
Tomasz Olszak (tolszak) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Illya Kovalevskyy (tucnak) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Raphael Kubo da Costa (rakuco) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Jeremy Whiting (jpwhiting) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Peter Simonsson (psn) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Randa Meetings XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Petr Vanek XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Mark Kretschmann (markey) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Reinhold Kainhofer XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Alex Merry XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Rex Dieter (rdieter) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Richard Moore (richmoore2) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Richard Johnson (nixternal) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Richard Dale XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Rishab Arora (spacetime) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Rivo Laks XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Robert Knight XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Robert Riemann (rriemann) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Robert Mathias Marmorstein (robertm) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Radoslaw Wicik (rockford_) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Roozbeh Shafiee XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Björn Ruberg (ruberg) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Jordi Polo (jordl) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Ruediger Gad (rcg) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Ryan Bitanga XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Rob Buis (rwlbuis) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Maksim Orlovich (SadEagle) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Sascha Manns (saigkill) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Samikshan Bairagya (samxan) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Martin Sandsmark (sandsmark) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Sanjiban Bairagya (fewcha) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Sascha Peilicke (saschpe) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Adenilson Cavalcanti (Savago) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Matteo Agostinelli (agostinelli) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Scott Wheeler (wheels) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Sebastian Gottfried (sebasgo) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Sergio Martins (sergio) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Thomas Pfeiffer (colomar) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Rohan Garg (shadeslayer) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Shaun Reich (sreich) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Bernhard Beschow (shentey) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Shivaraman Aiyer (sraman) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Simon Edwards XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Peter Grasch XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Sinny Kumari (ksinny) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Casian-Valentin Andrei (skelet) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Smit Patel (smitpatel) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Sam Duff (Socceroos) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Alvaro Soliverez (Hei_Ku) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Holger Freyther (zecke) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Christian Ehrlicher XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Germain Garand XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Shawn Starr (spstarr) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Denis Steckelmacher (steckdenis) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Stefan Teleman XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Stefan Derkits (HorusHorrendus) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Stephanie Das Gupta (stephdg) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Stephen Kelly (steveire) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Matěj Laitl (strohel) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Stuart Jarvis XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Claudio Desideri (snizzo) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Sven Langkamp (slangkamp) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Swair Shah (swair) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Romain Pokrzywka (kromain) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Prakash Mohan (praksh) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Sebastian Dörner XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Alexandr Akulich XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Teo Mrnjavac (Teo`) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Bart Cerneels (Stecchino) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Hayri Bakici (thehayro) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Peter Schiffer (aceton) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Cornelius Schumacher XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Danny Allen (dannya) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Jeffery MacEachern (jaem) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Matt Broadstone XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Andreas K. Hüttel (dilfridge) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Roopesh Chander XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Stefan Majewsky (majewsky) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Roney Gomes (roney) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Theo Chatzimichos (tampakrap) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Ahmed Ghonim XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Yuvraj Tomar (yuvrajtomar) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Kaushik Saurabh (roide) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Jussi Kekkonen (Tm_T) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Gary Greene (greeneg) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Jan Hambrecht (jaham) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Jonathan Schmidt-Dominé (The User) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Luke Wolf (Luke_Wolf) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Harald Sitter (apachelogger) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Abhishek Patil (thezeroth) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Aleix Pol (apol) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Janet Theobroma (theobroma) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Thiago Macieira (thiago) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Philip Rodrigues (PhilRod) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Emmanuel Lepage Vallee (Elv13) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Dion Moult (Moult) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Thomas McGuire XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Thomas Thym (ungethym) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Till Adam XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Duncan Mac-Vicar (duncanmv) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Tina Trillitzsch XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Raymond Wooninck (tittiatcoke) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Torgny Nyblom (tnyblom) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Torsten Rahn (tackat) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Agustin Benito Bethencourt XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Konstantinos Smanis (ksmanis) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Eva Brucherseifer XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Alexandra Leisse (troubalex) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Sebastian Trueg XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Sebastian Trueg (trueg) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Albert Astals Cid (TSDgeos) XML 23:06, Wednesday, 30 July 23:21, Wednesday, 30 July
Albert Astals Cid (TSDgeos) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Till Theato (ttill) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Davide Bettio (WindowsUninstall) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Björn Balazs XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Utku Aydın (utku) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Valentin Rusu (valir) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Vishesh Handa (vhanda) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Sebastian Kügler (sebas) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Vlad Codrea XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Vyacheslav Tokarev (vtokarev) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Pradeepto Bhattacharya XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Tirtha Chatterjee (wyuka) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Floris-Andrei Stoica-Marcu XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Laurent Montel (mlaurent) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Smit Shah XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Hans Chen (Mogger) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Nikolas Zimmermann (WildFox) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Dirk Mueller XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Daniel Kreuter (xardas008) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Matthias Klumpp (ximion) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Xavier Vello (xvello) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
YANG Qiao (yangqiao) XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Yash Shah (yashshah) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Philip Muškovac (yofel) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Zack Rusin (zrusin) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Rafał Miłecki (Zajec) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Zanshin Announcements XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
Marcin Zieminski XML 23:06, Wednesday, 30 July 23:51, Wednesday, 30 July
Waldo Bastian (zogje) XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July
David Nolden XML 23:06, Wednesday, 30 July 23:36, Wednesday, 30 July

Microblogging from KDE

July 30, 2014

Kevin Funk (kfunk)

GSoC Status Report: Code Completion features

Context: I'm currently working on getting Clang integration in KDevelop into usable shape as part of this year's Google Summer of Code. See the initial blog post for my road map.

While we had basic support for code completion provided by Clang from the beginning (thanks to David Stevens for the initial) work, it still didn't really feel that useful in most cases. In the last two weeks I've spent my time streamlining the code completion features provided by Clang.

This blog post is going to be full of screenshots showing the various features we've been working on lately.

Task recap: Code completion

  • Code completion: Implement “virtual override completion”. Also the automatic replacement of . to -> and vice-versa in case of pointer/non-pointer types is still missing.

  • “Implement function” feature: If a function is only declared but not defined, we offer a "implement function" helper item in the code completion. This is currently not yet ported to clangcpp.

  • "Switch to Definition/Declaration” feature: If the cursor is at some declaration in a header file, KDevelop offers a shortcut to automatically switch to its definition in the source file (opening the corresponding file in the active view). This is not yet possible in clangcpp.

  • Show viable expressions for current context: When inside a function call or constructor call, show viable expressions which fit the signature of the current argument. Example: int i = 1; char* str = “c”; strlen( – this should show variable str in the completion popup as best match.

  • Include completion: Oldcpp offers completion hints when attempting to #include some file, port this to clangcpp.

Achievements

Virtual override completion

Simple case

When in a class context, we can now show completion items for methods that are declared virtual in the base class.

KDevelop screenshot KDevelop showing the "virtual override helper". By pressing Ctrl+Space inside the derived class, KDevelop will propose overriding virtual functions from the base class

By pressing Enter now, KDevelop automatically inserts the following code at the current cursor position:

virtual void foo()

Oh, no! Templates!

We've spent a bit of work to make this feature work with templated base classes, too. Have a look at this:

KDevelop screenshot KDevelop showing the "virtual override helper". KDevelop knows the specialized version of the virtual method in the base-class and proposes to reimplement it

Nice, right?

Implement function helper

When encountering an undefined method which is reachable from within the current context, KDevelop offers to implement those via a tooltip

KDevelop screenshot KDevelop showing the "implement function helper". By pressing Ctrl+Space in an appropriate place, KDevelop offers to implement undefined functions (this also works for free functions, of course)

By pressing Enter now, KDevelop automatically inserts the following code at the current cursor position:

void Foo::foo()
{
}

This works for all types of functions, be it class member functions or free member functions and/or functions in namespaces. Since this is mostly the same code path as the "virtual override helper" feature, this plays nicely with templated functions, too.

"Switch to Definition/Declaration” feature

Sorry, no pictures here, but be assured: It works!

Pressing Ctrl+, ("Jump to Definition") while having the cursor on some declaration will bring you to the definition. Consecutively, pressing Ctrl+. ("Jump to Declaration") on some definition will bring you to the declaration of that definition.

Show viable expressions for current context

Best matches

KDevelop screenshot KDevelop showing completion items when calling a function. KDevelop offers all declarations that are reachable from and useful for the current context. In addition to that, best matching results are put to the front. As you can see variable str gets a higher "match" than variable i.

This is some of the features we actually get for free when using Clang. We get the completion results by invoking clang_codeCompleteAt(...) on the current translation unit and iterating through the results libclang is offering us. Clang gives highly useful completion results, the LLVM team did an amazing job here.

Another example: Enum-case completion

KDevelop screenshot KDevelop showing completion items when in a switch-context and after a 'case' token. KDevelop is just offering declarations that match the current context. Only enumerators from SomeEnum are shown here.

You can play around with Clang's code completion ability from the command-line. Consider the following code in some file test.cpp:

enum SomeEnum { aaa, bbb };

int main()
{
    SomeEnum e;
    switch (e) {
    case 
    }
}

Now do clang++ -cc1 -x c++ -fsyntax-only -code-completion-at -:7:9 - < test.cpp and you'll get:

COMPLETION: aaa : [#SomeEnum#]aaa  
COMPLETION: bbb : [#SomeEnum#]bbb  

Awesome, right?

Issues: Too many Clang's code completion result

One thing I've found a bit annoying about the results we're getting is that Clang also proposes to explicitly call the constructors/destructors or assignment operators in some cases. Or in other words: It proposes too many items

Consider the following code snippet:

struct S
{
    void foo();
};

int main()
{
    S s;
    s.  
}

Now doing clang++ -cc1 -x c++ -fsyntax-only -code-completion-at -:8:7 - < test.cc results in:

COMPLETION: foo : [#void#]foo()  
COMPLETION: operator= : [#S &#]operator=(<#const S &#>)  
COMPLETION: S : S::  
COMPLETION: ~S : [#void#]~S()  

Using one of the last three completion results would encourage Clang to generate code such as s.S, s.~S or s.operator=. While these constructs point to valid symbols, this is likely undesired.
Solution: We filter out everything that looks like a constructor, destructor or operator declaration by hand.

So, in fact, what we end up showing the user inside KDevelop is:

KDevelop screenshot KDevelop showing completion items after a dot member access on the variable s. KDevelop is just offering useful declarations, hiding all undesired results from Clang.

Just what you'd expect.

Wrap-Up

Code completion features are mostly done (at least from the point-of-view of what Clang can give us here).

Still, there other interesting completion helpers that could^Wshould be ported over from oldcpp to kdev-clang, such as Olivier's lookahead-completion feature (which I find quite handy). This is not yet done.

I'm writing up yet another blog post which is going to highlight some of the other bits and pieces I've been busy with during the last weeks.

Thanks!

17:54, Wednesday, 30 July UTC

KDE Dot News

Akademy 2014 Keynotes: Sascha Meinrath and Cornelius Schumacher

Akademy 2014 will kick off on September 6 in Brno, Czech Republic; our keynote speakers will be opening the first two days. Continuing a tradition, the first keynote speaker is from outside the KDE community, while the second is somebody you all know. On Saturday, Sascha Meinrath will speak about the dangerous waters he sees our society sailing into, and what is being done to help us steer clear of the cliffs. Outgoing KDE e.V. Board President, Cornelius Schumacher, will open Sunday's sessions with a talk about what it is to be KDE and why it matters.


Sascha Meinrath - photo by Faith Swords

Sascha Meinrath on the Internet of Things

Sascha Meinrath is well-known in the broad FOSS community. Wikipedia describes him as an "Internet culture leader and community Internet pioneer". He was a leading voice in the successful opposition to the U.S. SOPA and PIPA legislation, and is the founder of the Open Technology Institute (OTI), a public policy think tank advocating policy and regulations that are healthy for open source, open standards and innovation. OTI also works on lowering the barrier to wireless communication (Commotion Wireless) and advancing network research in the Measurement Lab. Recently, Sascha started the X-Lab, which anticipates technology directions and develops public policy for them, rather than reacting afterward with the risk of being caught off guard.

Sascha looks ahead at potential challenges, aware of the ways governments and companies abuse technology or could do so. With the Akademy program committee, he discussed "digital feudalism—the interlocking system of devices and applications that are reducing us to a serf-like state". Having coined this term, he is in a good position to explain the ways in which private and government forces are undermining the democratic, participatory platform of the Internet. And how this subterfuge has further broad impacts that reduce our freedom.

Resolving this dilemma cannot be solely a technical endeavor. Sascha said, "I see the work with the Commotion Wireless Project or fighting against NSA surveillance or on major spectrum licensure reform as different facets of the same problem, but am most worried about what happens with the so-called 'Internet of Things'—which I view with extreme skepticism". The Internet of Things (IoT) has the potential to transform communication networks massively. Enormous security implications aren't even the biggest concern. Sascha notes that "there are tremendous opportunities for building open ecosystems and privacy-protecting equivalents to mainstream products—but that has to be combined with strong pushes in governmental/policy circles as well as in outreach/PR".

In other words, it is Sascha's intention to ensure that this transition to the Internet of Things—whatever shape it will have—is built on open standards, protocols and strong protection of individual freedom. "And if that disrupts the dominant business model of many major corporations today (who all want to commoditize your private data), so be it".

Sascha Meinrath is one of Time Magazine's "Most Influential Minds in Tech" and Newsweek's "Digital Power Index Top 100 Influencers". KDE is in a strong position to provide technical innovation and has consistently demonstrated the power of community, freedom and openness. At Akademy 2014 in Brno, there is a strong possibility that this partnership will produce outcomes that will benefit people the world over. Anyone who is committed to having technology make a difference owes it to themselves to be part of Akademy.


Cornelius - photo by Helge Heß

Cornelius Schumacher on How KDE Makes You a Better Person

A strikingly related subject will be brought to the Akademy audience on Sunday. Cornelius Schumacher, president of KDE e.V., has been a KDE contributor since 1999. He has seen changes in every direction and has been at the heart of several of them. Cornelius will talk about the tremendous opportunity KDE provides to learn and grow, not only technology, but also people. He will show how the community consistently acts as a breeding ground for software and for personal growth as well. "I joined KDE for the technology, but stayed for the community", Cornelius says. "I have never stopped being amazed by the people around me in KDE, the talent, the friendship, the passion to do something for the greater good. I learned so much from these people and owe a big part of my career and personal development to the community."

Over the years Cornelius has seen many people join KDE and grow, and often outgrow the community. Roots for industry-changing technology and for amazing careers can be found in KDE. But what makes this environment so special? What holds it together over the many years where hundreds, even thousands of people contribute and form the KDE community? Cornelius gives a hint: "If the community is the soil, freedom is the fertilizer. The ideals of free software create the foundation that makes KDE possible, and these ideals extend to more than just software. Within KDE, it's a commonly felt responsibility to give everybody access to great technology, retaining individual freedoms and control about not only your computing, but your life."

Cornelius's topic is not just abstract or conceptual; it is something which relates to all of us on a personal level. This is a challenge and a chance. In the end Cornelius will reveal the secret of how KDE makes you a better person.

Akademy 2014 Brno

For most of the year, KDE—one of the largest FOSS communities in the world—works online by email, IRC, forums and mailing lists. Akademy provides all KDE contributors the opportunity to meet in person to foster social bonds, work on concrete technology issues, propose and consider new ideas, and reinforce the innovative, dynamic culture of KDE. Akademy brings together artists, designers, developers, translators, users, writers, sponsors and other types of KDE contributors to celebrate the achievements of the past year and help determine the direction for the following year. Hands-on sessions offer the opportunity for intense work to bring those plans to reality. The KDE Community welcomes companies building on KDE technology, or looking to begin using it.

If you are someone who believes that it's possible for technology to make a difference in the world, Akademy 2014 in Brno, Czech Republic is the place to be.

Dot Categories:

16:20, Wednesday, 30 July UTC

Baltasar Ortega

KDE y el poder de la elección

Una de las mejores armas del escritorio Plasma de la Comunidad KDE es que deja al usuario el control total del escritorio, permitiendo elegir casi todos los aspectos del mismo. Esta libertad se aprecia en los botones, tipos de fondo, las barras de tareas, comportamiento del ratón, etc. No obstante, esta absoluta libertad acarrea problemas [&hellip

08:10, Wednesday, 30 July UTC

July 29, 2014

Albert Astals Cid (TSDgeos)

Logging in into Picasa 3.9 under Linux

A few years ago I showed my father Picasa under Linux, he liked it and started to use it to upload his photos, and has been using it for almost 6 years, even Google discontinued Picasa for Linux at version 3.0 (Picasa is at 3.9 now).

Unfortunately a few weeks ago seems Google decided to kill support for old APIs in the server side and Picasa 3.0 for Linux was giving back an error when trying to upload an image ("Could not find POST url" or similar). I suggested to wait to see if they would come back, but it seems they haven't and so i've had to fix it for him.

Since he's heavily invested in Picasa I've had to install Picasa for windows under wine to make it work. It has not been trivial to get to work so I'll share it here for others that committed the error of trusting privative software and services.

The story is this: Installing picasa 3.9 for windows under wine is pretty easy (next, next, next). The problem is once you are running it, being able to log in. First problem is that the webview using for login doesn't even show. Most of the interwebs suggest installing ie8 using winetricks to solve that and it indeed solves the problem of the webview not showing, but still i can't log in (interestingly the webview will tell you if you wrote the password wrong).

At this point i was stuck for a few hours, even found some dude that claimed he had installed Google Chrome Frame for Internet Explorer and that had fixed for him. But not for me.

After a few hours, I stopped trusting the internet and started to think. I have a windows installation laying around, and i can log in from there, and once logged in Picasa does not ask for the password again, so it must be storing something no?

So I made a copy of the Program Files folder and compared it after loggin in, folders where exactly the same. So it was not stored there, which makes sense since log in is per user not per machine. Next i tried in that weird Personal Folder (Windows $HOME) but could not find any change either. Last chance was the registry, i used http://www.nirsoft.net/utils/reg_file_from_application.html and saw that when logging in, Picasa writes a few entries in HKEY_CURRENT_USER\Software\Google\Picasa\Picasa2\Preferences namely GoogleOAuth, GoogleOAuthEmail, GoogleOAuthServices and GoogleOAuthVersion, so I copied these over to the wine installation (with "wine regedit") and now my father can run Picasa just fine again.

Lessons learned:
* Non Free Software will eventually come back and hit you, if possible don't use it for stuff that is critical to you
* Think about your problem, sometimes is easier than just googling random instructions from the internet.

21:50, Tuesday, 29 July UTC

Jos Poortvliet

ownCloud 7 Release Party August 8, Berlin

In a little over a week, on the 8th of August, you're all invited to join Danimo, Blizz and myself at a release party to celebrate the awesomeness that is ownCloud 7 in Berlin!



When and where

We will gather at 7pm at the Wikimedia office in Berlin:
Tempelhofer Ufer 23/24
10963 Berlin
Germany
It is awesome that we can use their office, a big thank you to our fellow data lovers!!

So we start to gather at 7 and round 7:30 we'll have a demo of/talk about ownCloud 7. We will order some pizza to eat. After that: party time!






18:09, Tuesday, 29 July UTC

Kubuntu Wire

Rohan on ubuntuonair.com

Kubuntu Ninja Rohan was on today’s ubuntuonair talking about Plasma 5 and what is happening in Kubuntu.  Watch it now to hear the news.

 

16:07, Tuesday, 29 July UTC

Sebastian Trueg (trueg)

YouID Identity Claim

di:sha1;eCt+TB1Pj/vgY05nqB48sd1seqo=?http=trueg.selfhost.eu%3A8899


13:54, Tuesday, 29 July UTC

Avik Pal (avikpal)

[GSoC'14]: Chronicle of a hitchhiker’s journey so far

nuqneH [Klingon | in English- "Hello"], I am Avik [:avikpal] and this summer I got the opportunity to work with Andreas Cord-Landwehr [:CoLa] to contribute to the KDE-Edu project Artikulate. My task is to implement a way so as to tell a learner how well his/her pronunciation is compared to a native speaker.

Let me warn you about a couple of stuff beforehand; firstly, the trailing post is going to be a bit lengthy to read but I have tried to keep things interesting, secondly, I have a habit of addressing people by their IRC nicks though I have tried to put their real name as well ;)

So let me dive right into what I have been doing for the last couple of months. The first thing I had to do was to port Artikulate to QtGStreamer 1.0. The API changes in QtGStreamer mainly follow the changes performed in GStreamer 1.0. The biggest change is that Gst::PropertyProbe is gone or in our case QGst::PropertyProbePtr is gone which results in a compilation error. So the related code had to be adapted i.e. worked around to do the same. I got some great insights and tips from George Kiagiadakis [:gkiagia] and Diane Trout [:detrout] at #qtgstreamer and finally resolved this.

But still I was getting a runtime error because of Artikulate linking to both libgstreamer-1.0.so.0 and libgstreamer-0.10.so.0. It is a very common problem as GStreamer does not use symbol versioning and in some cases programs end up linking both of them through indirect shared library dependencies. I used pax-utils and lddtree (thanks to CoLa for telling me about these two great tools) to find out the cause of the linking error. Actually libqtwebkit.so.4 links the GStreamer 0.10 shared library as its dependency. CoLa got libqtwebkit built against GStreamer 1.0 and did some code changes and refactoring.

Also we decided against keeping phonon multimedia backend and Artikulate now supports only GStreamer backend. Precisely with Artikulate we are at QtGstreamer 1.2 and for the last few days the CI system also has it. This is just a heads up- I will let CoLa share the details of this work himself so stay tuned.

For pronunciation comparison I had initially decided to generate fingerprint of the audio file and then compare the two fingerprints (i.e. learner pronunciation and native pronunciation). Most of the phrases available with the trainer have one/two-syllable and are around 4-5 seconds in duration. The present chromaprint APIs don’t generate distinguishable fingerprints for audio of such low duration. I talked to Lukas Lalinsky from the Accoustid about how can the Chromaprint library be tweaked so as to get distinguishable fingerprints for small duration audio files. Chromaprint does a STFT analysis (FFT over a sliding window) and the window size and overlap determines how much data the algorithm generates. I went on trying to better the results by tweaking with the library but it was giving me only erratic data.

This was the time when I decided that it would be prudent to start working on writing a very basic audio fingerprint generator to cater my purpose. The concept is well discussed and illustrated in numerous papers and blogs so it wasn’t hard to break it up into modules.

The first job was to generate a spectrogram of the audio clip. I used the sox API to generate a spectrogram- the following system illustrates such a spectrogram.

Spectrogram of 'European Union' pronounced by me in Bengali

Spectrogram of ‘European Union’ pronounced by me in Bengali

Next I wrote a code to find the peaks in amplitude where peak is a (time, frequency) pair corresponding to an amplitude value which is the greatest in a local neighborhood around it. Other pairs around it are lower in amplitude, and  thus are less likely to survive noise.

My next job is to group these neighborhood peaks into collections/beans and then use a hash function to get the final fingerprint. I am currently working on implementing this part.

Now to get the peaks out of the spectrogram I first found out the histogram of the image and there came an idea to see how different are the histograms of spectrograms of two pronunciation are. There are several statistical ways to compare histograms and so far the results that I have found are quite promising. I shall try to demonstrate using an example.

I asked CoLa for audio recordings of the word “weltmeisterschaft” [World Champion in English] and he send me several recordings- let me take a couple of those.

And its spectrogram looks like this-

CoLa's pronunciation (sample 1)

CoLa’s pronunciation (sample 1)

And this is another sample from CoLa

And its spectrogram looks like-

CoLa's pronunciation (sample 2)

CoLa’s pronunciation (sample 2)

It may be noted that in above two spectrograms there is only a linear shift by a small amount which is expected and desired.

Before giving examples of my pronunciations let me clarify how I have compared the two histograms. To compare two histograms (H1 and H2), first we have to choose a metric (d(H1,H2)) to express how well both histograms match. I have computed four different metric to compute the matching: Correlation, Chi-Square, Intersection and Bhattacharya distance.

Next I present to you my first attempt at pronouncing “weltmeisterschaft”

Yeah I admit, though my first obviously I could have done better and it sounds kind of like “wetmasterschaft”. And here is the reportcard (err….spectrogram) of my poor performance

My first attempt

My first attempt

But I was not ready to give up yet…. I made some disgusting though necessary gurgling sounds and tried to set my vocals into tune and this is what I came up with.

and its spectrogram looks like

weltmeisterschaft- by me after a few attempts

Now I shall show you how the comparison metrics stack up- for correlation and intersection methods, the higher the metric the more accurate the match and for the other two the less the metrics the better the match.

*it is actually a comparison between the two same pronunciation by CoLa with which the rest are compared- this is just to give a sense of accuracy achievable.

*it is actually a comparison between the two same pronunciation by CoLa with which the rest are compared- this is just to give a sense of accuracy achievable.

The next job is to converge on a single metric which will take into account all four metrics that I currently have. Meanwhile I will also work on the fingerprinting part as it would also enable it to point out specific parts of pronunciation in which further improvement is needed. I am working on removing noise from the spectrograms as it is needed in finding out the intensity peaks(part of the fingerprinting work)- I have finished writing a code to find an intensity threshold for the noise from the histogram.

Below is a histogram of the spectrogram of my somewhat better pronunciation of “weltmeisterschaft”-

Histogram- different colours depict different channels

Histogram- different colours depict different channels

I hope to club these all modules in a standalone application and share it with community members for their testing, meanwhile you may use the code at https://github.com/avikpal/noise-removal-and-sound-visualization and test it yourself.

Now its time to fire up the warp machine but even in a parallel universe too I will be eagerly listening to #kde-artikulate with my identifier being “avikpal” for any kind of suggestion and/or queries. You may also mail me at avikpal[dot]me[at]gmail[dot]com.

Qapla’![Klingon | in English- "Good-bye"] until next time.


11:43, Tuesday, 29 July UTC

Baltasar Ortega

3 vídeos sobre owncloud 7, tu nube personal

Ya hemos hablado en el blog sobre el lanzamiento de owncloud 7, la aplicación para servidores que te permitetener tus archivos sincronizados en tu PC y con un servicio de almacenamiento en la nube propio, seguro y privado. Veamos hoy algunas de sus funcionalidades en forma de vídeo.   3 vídeos sobre owncloud 7 En [&hellip

08:10, Tuesday, 29 July UTC

July 28, 2014

Jens Reuterberg (jensreuterberg)

Layout Guidelines: A quick example

For planet readers: This post is written by Andrew Lake

We recently released new layout guidelines to aid with designing applications and plasmoids. So I wanted to provide a quick example of how to use the guidelines to design the layout for an imaginary calendar application.

A quick design for an imaginary calendar app

To choose an application layout, the new guidelines encourage awareness of the functions and commands provided by your application as well as the structure of the content provided by your application.

So let's start with commands. Suppose we want the primary function of our calendar application to be providing a daily, weekly or monthly schedule of the user's upcoming work or personal events. The user, Sue, would also like to be able to add events to her schedule. There are many other functions for a calendar application that I'm sure we're all aware of. We're not designing in a vacuum - there are many calendar applications from within KDE and elsewhere from which to draw inspiration. For the sake of this example though, lets start with the described functions and commands.

The guidelines suggest layout patterns for simple, complex and very complex command structures. So where does our calendar app fit? Well, I wasn't quite sure either. And that's ok! Some things are tough to know until you start delving into the design work. The guidelines suggest starting with a pattern for a simple command structure when you're not sure. So that's what I did. As I started putting together a design and thinking about how Sue would use it for the purposes described, it became clear that not only were there several other desirable functions (like switching calendars, setting up calendar accounts, setting calendar colors, and more) but there are also certain commands Sue might use quite often (like switching between a day, week and month view of her schedule, adding an event and quickly getting back to today after browsing forward or back in time). So I settled on the suggested Toolbar + Menu Button command pattern for a complex command structure.

The mockup toolkit provides an example:


The content structure for a calendar is pretty much flat: Just a collection of days (with or without events). I wanted to show a single day view, a week view(7 days) or month view (28 - 31 days) as well as properties related to the current view or selection like the date, the agenda for the current day or view and the active calendars. So I settled on a Selection-Properties navigation pattern from the recommended patterns for a flat content structure


The mockup toolkit provides an example of a Selection-Properties navigation pattern combined with a Toolbar+Menu Button.


Now I have a basic layout I can use for the rest of the design work. I put what I think will be the most frequently used commands on the toolbar - Today, Day, Week and Month views as well as a command to add an event. 


Many of the other commands like setting up calendar accounts and the like are exposed through the menu button. I design a week view using the recommended design color set and occasionally checking the typography guidelines. For the properties panel. I draw some inspiration of Sebastian Kügler's great design work on the new clock plasmoid panel popup for the current date to achieve some additional visual consistency with the desktop. I also decided to add a mini month view for convenience and a legend for the active calendars (possibly directly editable?).

 

Put it all together and we have a quick design for an imaginary calendar application. 


It's not a complete design in any sense of the word - icons, day and month views aren't shown, nor are calendar settings and the like. But it's probably enough to, for example, start a review on the VDG forums to get feedback from our fellow intrepid designers, the usability team and/or potential developers.

Just to be clear, you still have to design. Design is a creative activity. While guidelines can provide a sandbox, it still requires creativity within that sandbox. Often that means that the best way is to just start and figure it out as you go. For me, that's usually a bumpy trial and error process which I simply accept rather than agonize about. And no, you're not allowed to declare that you're not creative! :-) 

Always feel free to ask for help or feedback on the VDG forums - it's a great place for us to learn together. This design was done using the mockup toolkit, but just use whatever tool you're comfortable with, including just sketching on paper and taking a picture of it. Don't wait. Don't hesitate. Just do. The long term hope is that these new layout guidelines will provide enough flexibility to create layouts suitable across the full spectrum of KDE applications while also helping to achieve layout consistency where it makes actually sense. Like all guidelines, it is a living document which we'll update collaboratively over time. We'll also do more examples like this in the future.

Hope this helps!




21:35, Monday, 28 July UTC

Jens Reuterberg (jensreuterberg)

Monday Report: Creating Documentation

Yesterday we reached a small but important goal, we completed the first of our self-set tasks for this cycle, namely finishing our application layout guideline. The guideline has been presented to the community to gather feedback and was moved to the HIG wiki yesterday.
If you think something blatantly obvious has been overlooked, don’t be afraid to speak up. The guidelines can always be improved. Keep in mind though that we intend to make more visual examples available in the guidelines. As of now we were mainly concerned with the textual content of the guidelines.
The guidelines are intended to standardise which layout elements KDE applications use and to help pointing out which layout is best suited for a specific type of application.
Additionally to the release of the application layout guidelines Andrew Lake has updated the mockup toolkit with some examples of how one can use the layout guidelines in combination with the toolkit to prototype application designs.



Another project that starts to take shape is the next network system settings module. This module is intended to be one of the first with an updated design for the new system settings.
This work is in its early planning phase so if you have something important to say, chime in!

On the window decoration front Martin Gräßlin has blogged about the advances he’s made. If you haven't seen the blog post yet give it a read, it provides very interesting insights in the internals of KWin’s new decoration API. Now it’s time for us to work on the details like padding, etc. We're very pleased with the amount of progress being made, which shows again how absolutely awesome the KDE developers are.

Community

We are very happy to see the increased community activity in the forums. Last week a whole bunch of new users arrived in the forums and started to give all kinds of useful feedback and ideas.
It’s very impressive what a difference a few motivated individuals can make. We hope to integrate all of you into our workflow as good as possible and try not miss any of your ideas. If this should happen anyway don’t be afraid to voice your ideas again.

17:09, Monday, 28 July UTC

Johan Thelin

meta-kf5 usable

Finally I’ve had the time to work over the final issues in meta-kf5. Right now, I build most tier 1 and tier 2 components. I’ve packaged most functional modules and integration modules from these tiers.

When it comes to integration modules, there might be missing dependencies that need to be added – but that should not be too hard to add.

To be able to create useable cmake files, I had to employ a small hack modifying the cmake-files from KF5 before installing and packaging them. This seems to work (i.e. tier 2 builds), but there might be other sed-expressions that are needed.

Also, the autotests are not built as long at Qt5Test is left out form the build. If you would add Qt5Test, I believe that the unit tests will be included in the same package as the libs. I’ll address this as I integrate the autotests into ptest.

Summing up all of this, I’d say that the meta-kf5 layer now is usable!

That is all for now. As always, contributions are welcome! If you find a use for this, I’d be happy to add your project as a reference to the layer!

15:21, Monday, 28 July UTC

Kubuntu News

New Kubuntu Plasma 5 Flavour in Testing

Kubuntu Plasma 5 ISOs have started being built. These are early development builds of what should be a Tech Preview with our 14.10 release in October. Plasma 5 should be the default desktop in a future release.

Bugs in the packaging should be reported to kubuntu-ppa on Launchpad. Bugs in the software to KDE.

10:33, Monday, 28 July UTC

Jonathan Riddell (riddell)

Kubuntu Plasma 5 ISOs Rolling

KDE Project:

Your friendly Kubuntu team is hard at work packaging up Plasma 5 and making sure it's ready to take over your desktop sometime in the future. Scarlett has spent many hours packaging it and now Rohan has spent more hours putting it onto some ISO images which you can download to try as a live session or install.

This is the first build of a flavour we hope to call a technical preview at 14.10. Plasma 4 will remain the default in 14.10 proper. As I said earlier it will eat your babies. It has obvious bugs like kdelibs4 theme not working and mouse themes only sometimes working. But also be excited and if you want to make it beautiful we're sitting in #kubuntu-devel having a party for you to join.

I recommend downloading by Torrent or failing that zsync, the server it's on has small pipes.

Default login is blank password, just press return to login.

10:20, Monday, 28 July UTC

Rohan Garg (shadeslayer)

Plasma5 : Now more awesome as a Kubuntu ISO

Kbuntu Next

The Kubuntu team is proud to announce the immediate availability of the Plasma 5 flavor of the Kubuntu ISO which can be found here (here’s a mirror to the torrent file in case the server is slow). Unlike it’s Neon 5 counterpart , this ISO contains packages made from the stock Plasma 5.0 release . The ISO is meant to be a technical preview of what is to come when Kubuntu switches to Plasma 5 by default in a future release of Kubuntu.

A special note of thanks to the Plasma team for making a rocking release. If you enjoy using KDE as much as we do, please consider donating to Kubuntu and KDE :)

NB: When booting the live ISO up, at the login screen, just hit the login button and you’ll be logged into a Plasma 5 session.


09:39, Monday, 28 July UTC

Baltasar Ortega

¿Está Plasma 5 preparado para el gran público?

Uno de los sueños que tengo es que el Software Libre creado por la Comunidad KDE sea muy popular y utilizado en todos los dispositivos electrónicos. En el mundo de los ordenadores personales este sueño está cerca de alcanzarse, al menos es 100% utilizable. Ahora bien, en el mundo de los smartphoens y las tablets [&hellip

08:10, Monday, 28 July UTC

Friedrich Kossebau (frinring)

WebODF easily used, part 1: ViewerJS

WebODFYou possibly have heard of WebODF already, the Open Source JavaScript library for displaying and editing files in the OpenDocument format (ODF) inside HTML pages. For ideas what is possible with WebODF and currently going on, see e.g. Aditya’s great blog posts about the usage of WebODF in OwnCloud Documents and Highlights in the WebODF 0.5 release.

The WebODF library webodf.js comes with a rich API and lots of abstraction layers to allow adaption to different backends and enviroments. There is an increasing number of software using WebODF, some of that listed here.

Those which are interested in the capabilities of WebODF, without needing a custom and highly integrated solution, can additionally go for ready-made simple-to-use components based on WebODF. This blog post is the first of a series to introduce you to those. It starts with the component that gives you embedded display of OpenDocument format files, that is text documents (ODT), presentation slides (ODP) and spreadsheets (ODS), in webpages by just a single (sic!*) line of HTML code:
* no-one would add a line-break there ;)

ViewerJS

ViewerJS is an Open Source document viewer that enables embedded display of ODF or PDF files directly in webpages, without any external server dependencies, just done with HTML, CSS and Javascript. It uses WebODF to display files in the OpenDocument format and PDF.js for files in the PDF format.

Deploying and using ViewerJS with your webpages can be done in a few minutes. Follow this guide and see yourself!

Quickly Added

Start with looking at the current time and noting it.

As example file take an ODP of your choice, otherwise let’s use the slides from a talk at KDE’s Akademy in 2013, akademy2013-ODF-in-KDE-Calligra-WebODF.odp.

If you do not have a webserver handy, create a mini one locally on your system:


# Create a folder structure to serve statically
mkdir htroot

# Put the sample ODP file into htroot, renamed as "example.odp"
cp akademy2013-ODF-in-KDE-Calligra-WebODF.odp htroot/example.odp

# Add a simple html file:
touch htroot/example.html

Open example.html in an editor and have this as content:

<!DOCTYPE HTML>
<html>
  <head>
    <title>example.odp</title>
  </head>
  <body>
    <div>We got an ODP file.</div>
    <div>Would be nice to show it here.</div>
  </body>
</html>

Start a simple webserver program serving that directory, e.g. the one built into Python. For that open a separate console and do:


cd htroot
python -m SimpleHTTPServer

example.odp not embeddedNow browse to http://127.0.0.1:8000/example.html and make sure you see that HTML file.

The ODP file example.odp is not displayed yet, right. Not so nice.

Let’s change that and deploy ViewerJS for it.

In the first console now do:


# Download http://viewerjs.org/releases/viewerjs-0.5.2.zip
# (check if there is a newer version perhaps, then change
# all "0.5.2" below to the new version string)
wget http://viewerjs.org/releases/viewerjs-0.5.2.zip

# Unzip the file
unzip viewerjs-0.5.2.zip

# Move the folder "ViewerJS" to the toplevel dir of
# the folder structure statically served by the webserver
# (could also be a non-toplevel dir)
mv viewerjs-0.5.2/ViewerJS htroot

Now replace the “Would be nice to show it here.” in the example.html with this code (remove the REMOVEME, workaround to strange WordPress behaviour):

<REMOVEMEiframe id="viewer" src="/ViewerJS/#../example.odp" width='400' height='300' allowfullscreen webkitallowfullscreen></iframe>

(in the sources one line, as promised. But add line-breaks as you like ;) )

example.odp embedded with ViewerJSNow reload http://127.0.0.1:8000/example.html in your browser. And if everything worked out, you see the ODP file now embedded in the webpage, ready to be read or e.g. presented fullscreen.

Look again at the current time. How minutes did you need? :)

ODF or PDF

For publishing done documents that should be only read and not further processed, PDF is the better choice IMHO, because the format specifies the exact positioning of everything.
ODF (same with similar formats like OOXML) leaves the actual fine-layout to the program displaying/printing the document, which can differ between computer systems and setups, usually due to the used font engine. This makes sense, as it allows to create ODF files from code that has no clue about layout calculations, e.g. some Perl script generating a report. But it can result in frustrations if some document with manually optimized layout gets differently layout-ed elsewhere.

Thanks to PDF.js ViewerJS can also nicely display PDFs, so use whatever format suits the needs, be it preview of some document to further process or display of the final result.

Take a PDF file and change the above example to show that instead of the ODP file. Then try also with an ODT or ODS file.

Getting better week by week

The developers of WebODF are constantly enhancing its coverage of the ODF spec. See how the slides template for this year’s GUADEC (of course done in ODP :) ) are almost looking the same in LibreOffice and ViewerJS (v0.5.2):
GUADEC2015SlideDesign in LibreOfficeGUADEC2014SlideDesign in ViewerJS

Currently the Wiki hosting the GUADEC slide templates still has to say:

Current configuration does not allow embedding of the file lightning_talks.odp because of its mimetype application/vnd.oasis.opendocument.presentation

ViewerJS and WebODF hopefully can be a reason to change that soon :)

When giving talks about WebODF of course ODPs and ViewerJS are used. Knowing the pitfalls the slides can be done avoiding those. Still many real-life samples not designed for current WebODF capabilities are increasingly well displayed, also e.g.
050 in LibreOffice050 in ViewerJS
or
MCT in LibreOfficeMCT in ViewerJS

In general are ODF documents with only formatted text and images in SVG, PNG, JPEG or similar no problem for WebODF and thus ViewerJS. But as can be seen next, e.g. native ODF graphic elements are still a TODO (and the result not related to any censoring code ;) ). But, the display is already good enough for a “preview” :) :
DLP in LibreOfficeDLP in ViewerJS

BTW, if you are browsing a website that does not yet use ViewerJS to display ODF files embedded but only provides them as links, there is another WebODF-based option for Firefox users: the ODF viewer Firefox Add-on, that allows viewing ODF documents directly in Firefox on any device, without the need of a (big) office suite.

More on ViewerJS.org

Learn more about ViewerJS on the website ViewerJS.org, e.g. how to support non-embedded custom fonts. Discover the ViewerJS plugin for WordPress. Think about how you and your websites could make use of ViewerJS and how you could help to improve ViewerJS and WebODF, and then contact the ViewerJS and WebODF developers about that! They are looking forward to working together with you as well.


03:03, Monday, 28 July UTC

July 27, 2014

Nicolas Lécureuil (neoclust)

Some news about KF5

Things moved recently about kf5 in mageia. We had, since a long time, the framework part.

Now that the first stable release is out we packaged the desktop/workspace  release based on KF5.

Unfortunalty this can’t be co-installed in parallel of KDE4. For the moment ( not yet clean packages ) you have to follow those steps:

1- Remove  kdebase4-workspace ( this will remove a bunch of packages workspace dependant ( plasma applets, etc).
2- install plasma-desktop and plasma-workspace

3 restart your session and in your favorite DM go in KF5.

Keep in mind that those are experimental packages.

To report « packaging » bugs, please go to the Mageia Bugzilla

To report funcionnal bugs, please go to KDE Bugzilla

22:54, Sunday, 27 July UTC

Ivan Čukić (ivan)

Per-activity favourites in Kickoff

I’ve become overly lazy when writing blog posts is concerned. Maybe it is because I’m again working on the user-visible features, and it is much easier to just post a screen-shot or a screen-cast, than to actually write anything meaningful.

Per-Activity Favourites

It also gives the audience a chance to ask ‘does this mean that plasma will have …’ which sometimes brings wonderful ideas to life.

21:37, Sunday, 27 July UTC

KDE Dot News

First Okular Sprint ever at Barcelona

In May a group of three Okular developers met for four days at the Blue Systems Barcelona office to hack on the KDE universal document viewer.

Okular 2014 sprint group picture
Albert Astals Cid, Luigi Toscano and Fabio D'Urso

The first day the team triaged a lot of bugs resulting in a nice drop of unconfirmed bugs. There are still a lot of UNCONFIRMED items in that chart, almost all of them are wishes that we didn't know how to omit on the chart.

During the next days there were discussions about ideas and implementations, including:

  • Mimetype backend priority now that we have a txt backend that can open almost any file
  • Investigation about a printing regression regarding hardware margins in newer versions of CUPS
  • Removal of lots of widget code from backends
  • Idea of creating a command line okular2text application to test libokularcore which can be used in a gui-less environment.
Albert  talking about the workflow for saving documents
Albert talking about the workflow for saving documents

We decided that when porting to KF5 we will aim to have libokularcore be dependent on QtGui but not on QtWidget.

The most important item we discussed was how Okular saves file data. The proposal is to never autosave, making Okular act more like an editor. This has implications for bringing up old autosaved content if autosave was not used any more. By the end of the last day, we think we developed what seems a good plan. Now we only need time to code it ;)

Dot Categories:

21:07, Sunday, 27 July UTC

KDE Dot News

2014 Calligra Sprint in Deventer

From the fourth to the sixth of July, the Calligra team got together in sunny Deventer (Netherlands) for the yearly developer sprint at the same location as the last Krita sprint. Apart from seeing the sights and having our group photo in front of one of the main attractions of this quaint old Dutch town in the province of Overijssel, namely the cheese shop (and much cheese was taken home by the Calligra hackers, as well as stroopwafels from the Saturday market) we spent our time planning the future of Calligra and doing some healthy hacking and bug fixing!

Calligra 2014 sprint group picture
Jos van den Oever, Thorsten Zachmann, Arjen Hiemstra, Jigar Raisinghani,
Friedrich Kossebau, Dmitry Kazakov, Jaroslaw Staniek, Boudewijn Rempt (left to right)

What's coming

For Calligra, we've been planning the next release: Calligra 2.9, which is planned for December. It will be the last release based on Qt4. We're a bit slow in porting to Qt5 and KDE Frameworks 5, because we still have the scars of the port to Qt4, which took years... This release will be pretty much Calligra as you know it, with all the bits intact.

So then, after 2.9, we're planning to do a proper port to Qt5 and KF5, using Frameworks where appropriate. In early January, we'll lock down the repo, send everyone on vacation while the porting scripts run. When every script has ran, and everything builds again, we'll start properly porting Calligra. We expect to be able to release Calligra 3.0 end of March, so that's a three month release cycle.

We need help!

Here's a bit of serious news, though: parts of Calligra are essentially unmaintained. Applications like Karbon or Plan, which have a long pedigree and have been around for ages, have not seen any development for over a year -- or more. These applications are still unique, have lots and lots of promise... But for Calligra 3.0, this means that we'll disable those applications from the build after the initial automated port. And it's up to volunteers to re-enable them, fix all porting issues and take up maintainership!

Frameworking

As for the Calligra libraries, we've long felt that some of them could do with a wider exposure. There are libraries for handling property bags and showing them in a gui, there are libraries for loading vector images, for handling OpenDocument. We've got a library for handling color management, too. Right now, the libraries are tangled together, and it would be good to split them up again.

We did that once before, but the split was undone during the KOffice 2 development process. Revisiting it right now isn't an option for lack of manpower. However, especially the vector image library might make a good addition to the KDE Frameworks, with a bit of work on API, documentation and so on. We want to get down to that during the port to Qt5.

Translation

Finally, Dmitry has been working with the Russian translation team to iron out some kinks in the translation process. In particular, undo strings are difficult in a language like Russian that uses a different (grammatical) case in different contexts. He has created a version of the undo library that forces developers to provide the proper context. We also discussed more long-term plans to make it easy to see the strings that need to be translated in the context of the gui -- as well as trying to create tools that make it easier to add new tooltips and other helpful strings.

All in all, the get-together was very fruitful. We now have a pretty good plan for 2014 and 2015 and know where we want to go. Planning and setting directions matters: it motivates the current developers and makes clear to potential contributors where things are going and where they can chime in.

Dot Categories:

21:03, Sunday, 27 July UTC

Adriaan de Groot (adridg)

Off the bike again

Welp, summer vacation is over again, cycled from Nijmegen south.

At the outset I said “we’ll go south till we have to speak French, and then turn around”, which meant “until Luik / Liége”. Didn’t make it that far, for the simple reason that campgrounds that are compatible with a family of cyclists with a tent are rare in that area.
Instead, we cycled through Belgian Limburg, across Dutch Limburg from Maastricht to Vaals, and then back up north to Venlo. I would show a map (as I did last year with Marble), but I did my GPS logging with My Tracks on Android this time, and I’d have to spend too much time mucking about to get the data off the device for processing.
Last year we rode 440km of completely flat Friesland and Groningen. This year there were hills (the Dutch Mountains!), and we weren’t sure how the kids would fare in more challenging terrain. We needn’t have worried. Mira’s “hey dad, let’s bike up the tallest mountain in the Netherlands” (322m above sea level, rising from Vaals at 160m, so this is not Tour de France material yet) was later followed by Amiel’s “hey dad, I want to ride 100km on the last day”. He’s nine years old and it took us from 10:30am to 9:00pm, but we got to the train station at Venray with 99.98km on the meter (and another 3km to go after we got off the train in Nijmegen).
Still got a few days off from work-work, so I’ve decided to pick up some KDE-FreeBSD stuff again, and Tupi in particular.

09:39, Sunday, 27 July UTC

Laurent Montel (mlaurent)

What’s new in kf5 porting script (convert-ktemporaryfile.pl and co :) )

I continue to write some scripts:

  • convert-ktempdir.pl. It will allow to port from KTempDir to QTemporaryDir
  • convert-ktemporaryfile.pl. It will allow to port from KTemporaryFile to QTemporaryFile
  • convert-qt-os-macro.pl. Q_WS_* was replaced by Q_OS_*
  • convert-kmd5.pl. Now we use QCryptographicHash(QCryptographicHash::Md5)
  • convert-kdoublenuminput.pl. It converts from KDoubleNumInput to QSpinBox

And there was some fix in other scripts.

I will continue to create new script.

05:55, Sunday, 27 July UTC

July 25, 2014

KDE Dot News

KDE Ships Third Beta of Applications and Platform 4.14

KDE has released the third beta of the 4.14 versions of Applications and Development Platform. With API, dependency and feature freezes in place, the focus is now on fixing bugs and further polishing. Your assistance is requested!

A more detailed list of the improvements and changes will be available for the final release in the middle of August.

This third beta release needs a thorough testing in order to improve quality and user experience. A variety of actual users is essential to maintaining high KDE quality, because developers cannot possibly test every configuration. User assistance helps find bugs early so they can be squashed before the final release. Please join the 4.14 team's release effort by installing the beta and reporting any bugs. The official announcement has information about how to install the betas.

Dot Categories:

19:36, Friday, 25 July UTC

Martin Gräßlin

A KDecoration2 update

Before heading into the weekend I thought about writing a small update about the KDecoration2 status. Since my last blog post I started integrating KDecoration2 into KWin. This was partially easier and partially more difficult than anticipated. Especially ripping out the old decoration code is rather complex. There are quite some design differences which make the transition complex and especially values inside KWin core are using enums defined in the decoration API – e.g. the maximized state is kept as a KDecorationDefines::MaximizedMode. This will need further work to move the enums and so at the moment the old decoration library is still compiled although the library is no longer in use.

Ah that means there is code? Yes, today I pushed the branch as “graesslin/kdecoration2″ into kde:kwin git repository. To give it a proper try you also need the kde:kdecoration (master branch) and kde:breeze also on “graesslin/kdecoration2″ branch. The new decoration API is working quite well and I’m rather satisfied. The memory usage of KWin dropped significantly. In a previous report I mentioned that KWin needs around 200 MB, right now my KWin only needs around 40 MB, the number of open windows is a little bit smaller, but still it shows in the right direction. And that’s without any optimisations. There is still some optimization potential in Breeze (check out our todos, all purple tasks are in Breeze) and in KWin (red tasks). Also a nice improvement is that the window decoration no longer flickers when resizing the window. This is a rather big annoyance of KWin 5.0. I expected that the new API would fix this issue, but seeing it confirmed is really nice :-)

Last but not least the restart of KWin got faster which is a nice improvement for KWin developers, for users it’s not that important. The reason for this is that when we enabled/disabled compositing we recreated the window decorations. So when restarting KWin we first created all windows with their decoration before enabling compositing to just destroy them and create them again (yes it would have been possible to improve it, but it doesn’t hit users). Now with the new API there is no need to recreate the decoration. Only a Renderer is exchanged, but the rendering is delayed till it’s needed.

This screen shot does not only show the new Breeze decoration, but also some new features: when quick tiling a window the borders cornering the screen edges are removed. Also in the preview application one can see that the decoration scales which is nice for high-dpi screens. The decoration API follows the approach Plasma is using.

I have been running a KWin with the new decoration API since Monday, which means we are close to start the review process. But there’s of course still work to be done and I’d appreciate any help. The window tab API is not yet implemented, the configuration module needs adjustments to load and render the new deco and most important we have to port the existing decorations like Oxygen, Aurorae, deKorator and QtCurve. For the last three I want to improve the theme experience by allowing the plugin to say that it supports themes directly in the JSON meta data and point to where to find them. So the configuration module can just show all of them. The trick will be to pass the to be used theme to the factory method (we have a nice QVariantList there which can be used). Also the meta data will make it possible to point to GHNS configuration files so that we can not only download Aurorae themes from the configuration module, but also other themes.

16:49, Friday, 25 July UTC

Vedant Agarwala (vedu)

Another report

As I make progress on my project, I learn just as all gain is not monetary not all progress is code.

From the time of my last report (Sorry Myriam since it was more than a week ago), I have not written any "pushable" code i.e. only some code has been changed that serve as markers (like a TODO) for future work or some really minor bugs fixed that I stumbled upon as I use my flavor of Amarok.

Anyway, I was going through the collectionscanner code, trying to understand how it works: it as another process that the main Amarok process communicates with. It is designed to go through files and directories and mark files that are useful to Amarok. Like .mp3 , .ogg , etc. I am thinking to add .lrc to this list. For this I will have to create a class whose instance would represent an lrc file.

After this I will need to add these lyrics to the Amarok database. I still haven't been able to decide should I make this change in the generic core/collections/Collection.cpp class or the core-impl/collections/SqlCollection.cpp class. When this is over, I will just have to save the lyrics as lyrics tag and the LyricsApplet will pick it up.

14:02, Friday, 25 July UTC

Kubuntu News

Kubuntu 14.04 LTSUpdate Out

The first update to our LTS release 14.04 is out now. This contains all the bugfixes added to 14.04 since its first release in April. Users of 14.04 can run the normal update procedure to get these bufixes.

See the 14.04.1 release announcement.

Download 14.04.1 images.

10:35, Friday, 25 July UTC

Sebastian Kügler (sebas)

Plasma’s Road to Wayland

Road to WaylandWith the Plasma 5.0 release out the door, we can lift our heads a bit and look forward, instead of just looking at what’s directly ahead of us, and make that work by fixing bug after bug. One of the important topics which we have (kind of) excluded from Plasma’s recent 5.0 release is support for Wayland. The reason is that much of the work that has gone into renovating our graphics stack was also needed in preparation for Wayland support in Plasma. In order to support Wayland systems properly, we needed to lift the software stack to Qt5, make X11 dependencies in our underlying libraries, Frameworks 5 optional. This part is pretty much done. We now need to ready support for non-X11 systems in our workspace components, the window manager and compositor, and the workspace shell.

Let’s dig a bit deeper and look at at aspects underlying to and resulting from this transition.

Why Wayland?

The short answer to this question, from a Plasma perspective, is:

  • Xorg lacks modern interfaces and protocols, instead it carries a lot of ballast from the past. This makes it complex and hard to work with.
  • Wayland offers much better graphics support than Xorg, especially in terms of rendering correctness. X11′s asynchronous rendering makes it impossible to be sure about correctness and timeliness of graphics that ends up on screen. Instead, Wayland provides the guarantee that every frame is perfect
  • Security considerations. It is almost impossible to shield applications properly from each other. X11 allows applications to wiretap each other’s input and output. This makes it a security nightmare.

I could go deeply into the history of Xorg, and add lots of technicalities to that story, but instead of giving you a huge swath of text, hop over to Youtube and watch Daniel Stone’s presentation “The Real Story Behind Wayland and X” from last year’s LinuxConf.au, which gives you all the information you need, in a much more entertaining way than I could present it. H-Online also has an interesting background story “Wayland — Beyond X”.

While Xorg is a huge beast that does everything, like input, printing, graphics (in many different flavours), Wayland is limited by design to the use-cases we currently need X for, without the ballast.
With all that in mind, we need to respect our elders and acknowledge Xorg for its important role in the history of graphical Linux, but we also need to look beyond it.

What is Wayland support?

KDE Frameworks 5 apps under Weston

KDE Frameworks 5 apps under Weston

Without communicating our goal, we might think of entirely different things when talking about Wayland support. Will Wayland retire X? I don’t think it will in the near future, the point where we can stop caring for X11-based setups is likely still a number of years away, and I would not be surprised if X11 was still a pretty common thing to find in enterprise setups ten years down the road from now. Can we stop caring about X11? Surely not, but what does this mean for Wayland? The answer to this question is that support for Wayland will be added, and that X11 will not be required anymore to run a Plasma desktop, but that it is possible to run Plasma (and apps) under both, X11 and Wayland systems. This, I believe, is the migration process that serves our users best, as the question “When can I run Plasma on Wayland?” can then be answered on an individual basis, and nobody is going to be thrown into the deep (at least not by us, your distro might still decide to not offer support for X11 anymore — that is not in our hands). To me, while a quick migration to Wayland (once ready) is something desirable, realistically, people will be running Plasma on X11 for years to come. Wayland can be offered as an alternative at first, and then promote to primary platform once the whole stack matures further.

Where at we now?

With the release of KDE Frameworks 5, most of the issues in our underlying libraries have been ironed out, that means X11-dependent codepaths have become optional. Today, it’s possible to run most applications built on top of Frameworks 5 under a Wayland compositor, independent from X11. This means that applications can run under both, X11 and Wayland with the same binary. This is already really cool, as without applications, having a workspace (which in a way is the glue between applications would be a pointless endeavour). This chicken-egg situation plays both ways, though: Without a workspace environment, just having apps run under Wayland is not all that useful. This video shows some of our apps under the Weston compositor. (This is not a pure Wayland session “on bare metal”, but one running in an X11 window in my Plasma 5 session for the purpose of the screen-recoding.)

For a full-blown workspace, the porting situation is a bit different, as the workspace interacts much more intimately with the underlying display server than applications do at this point. These interactions are well-hidden behind the Qt platform abstraction. The workspace provides the host for rendering graphics onto the screen (the compositor) and the machinery to start and switch between applications.

We are currently missing a number of important pieces of the full puzzle: Interfaces between the workspace shell, the compositor (KWin) and the display server are not yet well-defined or implemented, some pioneering work is ahead of us. There is also a number of workspace components that need bigger adjustments, global shortcut handling being a good example. Most importantly, KWin needs to take over the role of Wayland compositor. While some support for Wayland has already been added to KWin, the work is not yet complete. Besides KWin, we also need to add support for Wayland to various bits of our workspace. Information about attached screens and their layout has to be made accessible. Global keyboard shortcuts only support X11 right now. The screen locking mechanism needs to be implemented. Information about Windows for the task-manager has to be shared. Dialog positioning and rendering needs to be ported. There are also a few assumptions in startkde and klauncher that currently prevent them from being able to start a session under Wayland, and more bits and pieces which need additional work to offer a full workspace experience under Wayland.

Porting Strategy

The idea is to be able to run the same binaries under both, X11 and Wayland. This means that we (need to decide at runtime how to interact with the windowing system. The following strategy is useful (in descending order of preference):

  • Use abstract Qt and Frameworks (KF5) APIs
  • Use XCB when there are no suitable Qt and KF5 APIs
  • Decide at runtime whether to call X11-specific functions

In case we have to resort to functions specific to a display server, X11 should be optional both at build-time and at run-time:

  • The build of X11-dependent code optional. This can be done through plugins, which are optionally included by the build-system or (less desirably) by #ifdef’ing blocks of code.
  • Even with X11 support built into the binary, calls into X11-specific libraries should be guarded at runtime (QX11Info::isPlatformX11() can be used to check at runtime).

Get your Hands Dirty!

Computer graphics are an exciting thing, and many of us are longing for the day they can remove X11 from their systems. This day will eventually come, but it won’t come by itself. It’s a very exciting time to get involved, and make the migration happen. As you can see, we have a multitude of tasks that need work. An excellent first step is to build the thing on your system and try running, fix issues, and send us patches. Get in touch with us on Freenode’s #plasma IRC channel, or via our mailing list plasma-devel(at)kde.org.

02:28, Friday, 25 July UTC

July 24, 2014

Daniel Nicoletti (dantti)

Cutelyst 0.3.0 is now C10K ready!

Release early, release often has never been my strength especially since I don’t do a fair scheduling of all the projects I’m involved…

So since I was in need to better polish Cutelyst I took more time on it, and the result is great, around 100% speed up and a few new features added.

Cutelyst uWSGI plugin now has support for –thread, which will create a QThread to process a request, however I strongly discourage its usage in Cutelyst, the performance is ~7% inferior and a crash in your code will break other requests, and as of now ASYNC mode is not supported in threaded mode due to a limitation in uWSGI request queue.

Thanks to valgrind I managed to make a hello world application from 5K request per second on 0.2.0 to 10K req/s on 0.3.0 on an Intel Core2Duo 2.4Ghz (or 44K req/s on an AMD Phenom II 965 x4 3.4Ghz), however if you enable Grantlee templating you get around 600 req/s so if I happen to have time I will be looking into improving its performance.

Response::body() is now a QIODevice so you can set a QFile* of something else and have Cutelyst to send it back.

Now http://cutelyst.org points to a gitorious Wiki which is slowly getting populated, and API is available as http://api.cutelyst.org.

The 0.3.0 tarball can be downloaded here

Have fun :)


23:18, Thursday, 24 July UTC

Denis Steckelmacher (steckdenis)

Node.js support in KDevelop

This is a quick blog post to say that I’m working on support for the Node.js framework by the KDevelop QML/JS language plugin. The first part of my work is already finished: “require” is properly recognized and Node.js modules are properly looked-up and included. The “exports” and “module.exports” identifiers are also recognized and allow Javascript files to export symbols and to be used as modules. This means that you can now edit Javascript files using Node.js and have most of the modules recognized, included and parsed.

The second part is writing huge Javascript files for the built-in Node.js modules. “http”, “buffer”, “fs”, “url” and many other modules exist only as part of Node.js. There are Javascript files for them in the Node.js Git repository, but these files don’t allow the QML/JS plugin to infer the types of the methods. They are also fairly big and would need a big cleanup in order to be fast enough to parse.

As with ECMAScript, I solve the problem by shipping with QML/JS stripped down versions of those files. These files describe the classes, methods and attributes of each module, and follow a very simple format. This code is not designed to be run, only to be parsed by the QML/JS plugin, that will discover the types of the function parameters and their return type.

1
2
exports.spawn = function (command, args, options) { return new exports.ChildProcess(); };
exports.spawn("", [], new Object());

Writing all these files is tiring and will take some time (in fact, I’m writing them for a bit more than one day, now). So, there may be fewer commit than usual in the QML/JS repository, but I hope that this feature will serve many users. Here is a teaser of what is coming (note that functions are now listed in a way more human-friendly form):

Node.js support on KDevelop

Once this feature is finished, I will concentrate my efforts on the QML code-completion. I’ll also experiment with the KDE Frameworks 5 (and the KF5 version of KDevelop), because I’d like to offer a KF5 version of the QML/JS plugin. The reason is twofold: Qt5 offers the wonderful QtQuick.Controls module (it will allow me to implement many navigation widget, that will assist the users in choosing a font family, configuring and previewing animations, etc), and early KF5/Plasma5 adopters may be well pleased to be able to use the latest and greatest KDevelop on their latest and greatest environment, while still being able to work on QML and Javascript files.

UPDATE: Here is an additional screenshot that shows that child_process.ChildProcess is correctly recognized, and that it correctly inherits from event.EventEmitter (you see that addListener is in the list), which in turn inherits from Object (there is an “assign” method at the very bottom of the list). Having all of this working was a bit more difficult than expected, but now function prototypes and class inheritance seem to work.

Correct class inheritance

22:00, Thursday, 24 July UTC

Older blog entries