Blog Syndicate content

  • » FOSDEM, 4.4 release party in Berlin, ...

    Thu, 01/28/2010 - 00:56

    Hey everyone, just a quick blurp:


    Yeah, I’ll go to FOSDEM! Will be my first time, I’m really looking forward to it. Esp. considering that it marks the end of my current semester. My current plan for the following days is:

    • visit relatives & friends
    • go to FOSDEM
    • get an immense overload of hacking at the Kate/KDevelop sprint
    • start working as an intern at KDAB

    Looks like the future will be much fun :)

    But back to FOSDEM: If you have any questions about Kate/KDevelop/PHP, visit me at the KDE booth. I’ll also attend Aleix’s talk about KDevelop for sure.

    4.4 release party in Berlin

    So well, Nighrose poked me on IRC and I added a short note about a small get-together on the 13th in Berlin. I’m reluctant to call it release party since it’ll be at the rented flat for the Kate/KDevelop sprint attendees, hence only a limited number of people can attend. But esp. other KDE/Qt/KDAB hackers in Berlin & vicinity are welcome. If you want to come by, take a look at the wiki notes about the “party” and contact me by mail.

    If anyone else has a bigger party planned, please tell us. We’d be a horde of 10+ hackers, ready to crash anything :)

  • » Kate polishing

    Thu, 01/21/2010 - 02:09

    Phew, I just finished some last-minute backports to the KDE 4.3.5 branch. Lets hope the bug fixes I and pletourn did are as good as they look. Expect a much more stable Kate for 4.3.5 & 4.4! We managed to fix two bugs which are potentially the cause for dozens of bug reports, all seemingly random. Lets see whether our fixes hold up to our hopes!

    Other than that: You should look forward to Kate scripting (with JavaScript) in 4.4. It’s dead simple but actually useful. In the utils.js file we ship with Kate there are now the following tools (all operate on the selection or - if none exists - on the whole document):

    • sort - simple sorting
    • natsort - natural sorting
    • uniq - filter duplicates
    • trim - remove leading & trailing whitespace
    • ltrim - remove leading whitespace
    • rtrim - remove trailing whitespace

    Do you have more ideas for such simple helper functions?

  • » progress in PHP support for KDevelop

    Wed, 01/20/2010 - 14:44

    Hey everyone. Been some time since I last blogged… I want to take the chance to give you all a bit of overview over the last changes in the PHP plugin for KDevelop:

    Performance Improvements

    I spent quite some time profiling various aspects of the PHP plugin, be it parsing and DUChain building over to (just yesterday) code completion. I’m confident to say that I found (and removed) quite a few bottlenecks, making the plugin much more comfortable to use.

    I’m really blown away time over time again by valgrind & KCachegrind… What would we do without these tools?


    An (imo) very strong point for using KDevelop for PHP programming is it’s seamless support for documentation. Be it the “simple” inline documentation in the Declaration Tooltips or the extended integration of the remote docs. But these past days I improved our generator for the inline documentation of built-in PHP language constructs considerably:

    • add documentation for function/method parameters
    • add @since where appropriate
    • fix some missing declarations or bugs, esp. some that where part of SPL

    These changes increased the size of the generated file to whopping 3.1M. This was too much for me and hence I added support to ship this file zipped (i.e. now it’s 80% smaller) and we decompress it transparently with the use of KZip. Adding such a feature was a breeze, so nice to work with the KDE Api :)

    There are still a few things missing and stuff I plan to improve here, so stay tuned for more news in this regard.

  • » PHP & PHP-Docs now in extragear/sdk/kdevelop-plugins

    Fri, 01/08/2010 - 18:58

    Hey everyone! The PHP & PHP-Docs plugins for KDevelop now moved to Extragear! The new locations are:

    1. svn+ssh://
    2. svn+ssh://

    Or the anonsvn equivalent:

    1. svn://
    2. svn://

    Happy coding!

  • » Will code for food

    Tue, 12/22/2009 - 05:34

    Ha, what a bit of a bribe can do to me… Someday earlier today a user of the PHP plugin for KDevelop brought up the flickering issue in it again. Well as I told him: I myself find it very annoying and wanted to fix it since quite some time, but never got around to it… Usually that would be it and I’d go watch some more FamilyGuy until I’m in the mood to track this bugger down. But well, thankfully Phlogi wasn’t so easy to dispatch:

    <Phlogi> milian: ok… I’ll send you pizza and beer if you fix this!

    Hours of gdb sessions later, I finally committed a fix. So Phlogi, if you read this: You owe me ;-)

    To all others: If you tried the PHP plugin out and the flickering was too much for you: Give it a try again! I’m personally totally overwhelmed, the difference is huge! I often perceived the PHP plugin to be magnitudes slower than the C++ one. Well, looks like most of this was only due to the flickering. Now things are much smoother.

    Happy holidays!

  • » PHP and PHP-Docs plugins now up for review (meaning: SVN location moved!)

    Thu, 12/17/2009 - 22:29

    Hey all!

    Just a quick note: Niko and me moved PHP & PHP-Docs to kdereview, we hope to move both plugins to extragear/sdk/kdevelop-plugins. So, if I understood things correctly, after a two week period the plugins will get moved there (well, if we pass the review, but I think we can do that).

    So for anybody that uses the plugins from SVN, you’ll have to relocate. The new addresses are:

    • /trunk/kdereview/kdevelop-php
    • /trunk/kdereview/kdevelop-php-docs

    See you in two weeks :)

  • » Real FOSS appreciation

    Mon, 12/07/2009 - 03:25

    So, it’s been roughly a year since my first commit to kdelibs. According to Ohloh it’s been in November 2008. And boy have I learned much in this year. I learned C++ just to be able to contribute to KDE, since I thought it would be awesome to be able to “fix your own itch”. I have to say: It was the best decision I ever made.

    I really came to appreciate FOSS in a whole new light: Contributing to a big project like KDE gets you in contact with lots of nice people. And they will help you get things done. What’s better is that in the process you learn lots of things. And I mean lots. I can now use GDB, Valgrind, now my way around some parts of the KDE/Qt API, can investigate performance related questions… And since these are such huge topics, there’s always more to learn, much more!

    I doubt someone could learn that much by reading books or writing his own little application without the help of a community. The wealth of possibilities inside KDE will increase your horizon constantly. And there is tons of very good code to study! Want to know why something is not working? Look at the source. Still not helping? Ask your fellow developers. I really have to say it’s an awesome feeling to be part of this big community.

    Fixing an itch: Qalculate! backend for Cantor

    You know, I’m officially a Physics student, I just happen to be way more interested in programming (the practical part of it, not really that much the theoretical part).

    Since I started with Physics two years ago, I always required a good calculator, esp. for experimental physics. The best calculator I found was Qalculate!, especially it’s great support for units and constants made me solve tedious exercises in a fraction of the time it required my fellow students that could not use Qalculate (it only runs on Linux). Really, it’s an outstanding piece of software in my opinion.

    But to get to the point: Qalculate was the last KDE 3 app on my desktop, and I wanted to change that. Now I read about Cantor, esp. once fellow KDevelop hacker Apol wrote about his KAlgebra backend for Cantor, and I knew: This is the perfect fit for libqalculate!

    So last week I started and already have a somewhat working backend available:

    This once again showed the utterly insane greateness of FOSS: I started to hack on the backend and looked at the existing backends for guidance. I also contacted arieder, the author of Cantor, directly and chatted with him, getting help. But I did not only /take/. I reviewed his API, gave suggestions, reported whishes and bugs and eventually hacked a little bit on the sources themselves. Imagine this in a corporate environment: I’d probably have had to report in some shabby tracker and wait ages for my feature request to be closed as wontfix…

    And while writing the backend I had this realization that also triggered this blog post: I actually did something useful in a few days. I could never have imagined being in that position one year ago. I always thought that C++ was a bit of black magic, especially writing things from scratch. But now… Now I’m somehow able to grasp code and come up with something working in a few days.

    The problem this brings, is of course that you can easily loose track and overload yourself with work… I could spent lots of hours in any part of KDE. My TODO alone bears for KatePart, KDevelop-PHP, KDevelop itself, Quanta, …. You name it! I think this will become a fun holiday ;-)

    PS: Just a quick note: I really think that Cantor will become a great and useful application for science students. It will be your central application for any calculations, either numeric (e.g. Qalculate) or symbolic (e.g. Maxima).

  • » Kate Love: HighlightInterface, Autobrace

    Sun, 11/22/2009 - 20:15

    Well, I have to admit: I didn’t spent much time developing the PHP plugin for KDevelop these past weeks. Instead I hacked on Kate:


    I added another Kate interface, this time to access some of the highlighting information:

    • what’s the Attribute for a given default style right now? Default styles are those known from syntax files, e.g. dsKeyword, dsFunction,…
    • what are used Attributes in a given line and what range do they occupy?
    • what modes do we embed? E.g. PHP embeds HTML, JavaScript, CSS, …
    • what mode is used at a given Cursor position?

    This made it possible to port the “Export to HTML” action to a real plugin. If you come up with other output formats I might add them, I wondered about LaTeX support… might do this at some point.

    This should also make it possible to use KatePart in other applications and than export the highlighting to a different format, e.g. a Flake shape for Koffice. Afaik this is actually planned by The_User - lets see if it works out!

    The other stuff gives huge potential in various places, but I fear it won’t make it in KDE 4.4. But think of it:

    • simple code completion based on keyword databases, dependent on the mode at the position where completion was requested
    • same as above for snippets (actually this will make it to 4.4).
    • insert your ideas here :)
    Auto-Brace plugin

    Jakob Petsovits created this gem of a plugin some time ago, yet it lived in playground was probably only used by few. I imported it to kdelibs, hence it will be shipped with KDE 4.4. It supersedes the limited “auto-brackets” feature of Kate and only adds braces when a newline gets added. I find this fits my personal coding habits much better than blindly copying brackets when they get added.

    And I don’t just copied to kdelibs, I also added a few features:

    • automatically add a semicolon after the closing brace when we start a new struct/class in C++ mode
    • check for auto-brackets feature and disable it automatically

    Also did this:

    • don’t add brace when current line contains namespace and a following line starts with class or struct (C++ mode only)
    • don’t add brace when current line contains class, interface or struct and the following line contains private, public, protected. C++ code is also checked for signals, Q_SIGNALS", other modes are checked forfunction`.

    This should fix the bug for code like (note the indendation levels):

    1. namespace foo { // insert line here
    2. class bar;
    3. }
    4. class asdf { // insert line here
    5. private:
    6. ...
    7. };
  • » KDevelop & KWrite/Kate hacksprint 2010 in Berlin

    Mon, 11/16/2009 - 16:38

    Hey everybody!

    If you are a KDevelop and/or Kate/Kwrite developer and do not read the mailing lists: There’s a hack sprint coming up in Berlin in 2010. I think there’ve been enough sprints in Berlin already so that you know it’s a great city for such an event. Though this time it won’t be at KDAB or Nokia offices, but at the Physics Faculty of the FU-Berlin. Since I (currently) work there as an IT admin, it was my first choice and worked out. I hope it will be a good location for the meeting. If you want to attend, vote on doodle:

    But you probably also should register either on the KDevelop or KWrite mailing lists so I have some kind of way to contact you.

    PS: in unrelated news I’ll do an internship at KDAB next year! yay

  • » Improving KDevelop-PG-Qt

    Mon, 10/26/2009 - 19:13

    Good news everyone :)


    After years of pretty much no documentation (except looking at the sources…), The_User aka. Jonathan Schmidt-Dominé started documenting the parser generator that is used for most KDevelop language plugins (java, python, php, …). You can find it here:

    It has to be improved and more examples have to be put in there, but it’s already a huge improvement over the situation before…


    In related news I did some profiling on the parsing of the quite big file that includes all internal PHP declarations (i.e. all functions, classes, definitions,…). It drops in at a whopping 1.9M, with ~80k lines. Well, turns out that this showed a pretty easy to fix bottleneck in KDevelop-PG’s LocationTable, which used to use a linear lookup algorithm. Profiling showed that nearly 75% was spent in that function. But I used the past tense for a reason:

    I replaced it with an algorithm that combines a relative search (i.e. relative to the last lookup) with a binary search fallback. That’s comparatively blazingly fast. I added some benchmarks to KDevelop-PG-Qt that proofs that (benchmark below run with release mode build):

    1. ********* Start testing of KDevPG::Benchmarks *********
    2. Config: Using QTest library 4.5.2, Qt 4.5.2
    3. PASS : KDevPG::Benchmarks::initTestCase()
    4. RESULT : KDevPG::Benchmarks::positionAt():"initial, linear":
    5. 1,184.0 msec per iteration (total: 11840, iterations: 10)
    6. RESULT : KDevPG::Benchmarks::positionAt():"initial, random":
    7. 1,008.5 msec per iteration (total: 10085, iterations: 10)
    8. RESULT : KDevPG::Benchmarks::positionAt():"relative, linear":
    9. 1.3 msec per iteration (total: 14, iterations: 10)
    10. RESULT : KDevPG::Benchmarks::positionAt():"relative, random":
    11. 1,185.0 msec per iteration (total: 11850, iterations: 10)
    12. RESULT : KDevPG::Benchmarks::positionAt():"binary, linear":
    13. 31.1 msec per iteration (total: 312, iterations: 10)
    14. RESULT : KDevPG::Benchmarks::positionAt():"binary, random":
    15. 39.2 msec per iteration (total: 392, iterations: 10)
    16. RESULT : KDevPG::Benchmarks::positionAt():"binary & relative, linear":
    17. 0.8 msec per iteration (total: 8, iterations: 10)
    18. RESULT : KDevPG::Benchmarks::positionAt():"binary & relative, random":
    19. 40.2 msec per iteration (total: 402, iterations: 10)
    20. PASS : KDevPG::Benchmarks::positionAt()
    21. PASS : KDevPG::Benchmarks::cleanupTestCase()
    22. Totals: 3 passed, 0 failed, 0 skipped
    23. ********* Finished testing of KDevPG::Benchmarks *********

    In our “realworld” phpfunctions.php example the DUChain building process got twice as fast (in debug mode though, but still).

    We should probably get lost of the LocationTable altogether and use an existing container (QList, QVector, QLinkedList,… or any STL variant of them). But this would mean more profiling, and well, lets see when we get to it… But just got a reply on the KDevelop list showing interest on this, so maybe someone does that eventually!

    Profiling rocks, and KCacheGrind is such a great application. I love such visualization. Well done! And the QTestLib benchmark utilities are also very solid, nice!

    PS: KDevelop beta6 is in the pipelines and we’ll release a beta1 of the PHP plugin together with it. Packagers and users rejoice :)