› kdevelop

» Kate/KDevelop HackSprint - Up To Day 4
Wed, 02/17/2010 - 19:43
Woha, quite a few days flew by without me blogging about anything. Thankfully the others started to write so I don’t have to repeat it all ;-) Instead I’ll concentrate on stuff I did or learned.
GHNS for Snippets
Well, first I think an excuse is in oder: There is a GHNS button for Kate Snippets in 4.4.0 but it’s broken, neither me nor Joseph had time to acutally use and fix it… But anyways, I fixed it now for 4.4.1. For 4.5 we’ll also have an Upload Dialog.
I also added both now to KDevelop, you can now upload and download snippets from it. I added a few dump examples but will probably improve it steadily.
Kate Performance
On Saturday and Sunday I started to profile Kate highlighting for a large MySQL dump and managed to greatly improve the speed. Actually the funny thing is that I could improve RegExp based highlighting (you still should try to prevent using it, it will always be slower than simple char/string based highlighting). And the knowledge for this optimization I had from my time as an active contributor for GeSHi. I feel like it was ages ago, he funny :)
So if anybody has a big file that takes ages to load (but only if you use KDE 4.5 trunk or higher), tell me and give me the file. I might find some more ways to optimize different languages.
Other Stuff
Other than that I also managed to fix a few more bugs in Kate and KDevelop and had a good time with the other guys here in Berlin. Yesterday I showed some others how I spent quite a few nights: Partying in Berlin is nice :)
Oh and Bernhard showed me a little gem of his: Kate Standalone which you can use to build only KatePart from kdelibs trunk. This actually works very well (up until some new API from KDE trunk is used).
» Kate/KDevelop HackSprint Day 1
Sun, 02/14/2010 - 01:58
So, first day of the Kate/KDevelop hacksprint.
We just talked and hacked at the rented flat,got to know each other and had a fun time. Everybody made it more or less in time, even last minute attendee Adymo from Ukraine, nice! Hacking-wise the productivity wasn’t that high, esp. for me, but a few patches got committed here and there.
Right now I’m working on a little speedup for Kate, esp. for big MySQL files - lets see how it turns out. Cullmann showed me a few things I could do so maybe it works out, lets see.
Over the next week I plan to push in user configurable include paths for the PHP plugin and do some more Snippets & Scripting work in Kate, lets see how it turns out. I’ll go home now, kinda sucks that I don’t stay with the others here at the flat but have to take a 1h ride into the city… Berlin is definitely too big :D
» Snippets In KDevelop / Kate
Wed, 02/03/2010 - 17:59
Hey all!
Just wanted to give you a little rundown on Snippets in Kate 4.4 (via the snippets_tng plugin) and KDevelop Beta 8 (soon to be released).
Note: The Kate plugin was written by Jowenn and introduced me to all these nice features. For KDevelop I wrote a somewhat simpler yet imo better implementation. We will try to get the best of both worlds into KDE 4.5. Stay tuned!
General Usage & Features
- create a snippet repository (or download via GHNS [see below])
- create snippets in that repository
- insert snippets via the snippets view (i.e. double click), or (imo better/faster) insert them via code-completion (remember: CTRL + Space requests code completion at the current cursor position!).
- snippet gets inserted (properly indented) and potential placeholders/variables get expanded. A variable is something like
%{date}or${email}. Also take a look at the API documentation. - variables that get inserted via “${…}” will be “selectable”, meaning you can jump from one var to the other by hitting TAB / Shift TAB
- the
%{...}vars will only get expanded and inserted, without getting selectable. - multiple occurrences of the same variable will be updated once one of them gets edited, something that is called “mirroring” in other editors.
- once one edits ESC the cursor is placed at the end of the snippet or to the first occurrence of
${cursor}or%{cursor}and the user types something, the snippet-handler quits and you are left with your normal editor until you insert the next snippet - nested snippets (i.e. insert snippet than insert another one) should “just work”.
Snippet Management
- group snippets by file type, i.e. PHP snippets will only be offered during code completion when one edits a PHP file.
Note: In KDevelop and KDE 4.4 nested documents are supported, e.g. create a CSS snippet and it will be shown inside the CSS parts of a HTML document or similar. This uses my HighlightInterface I wrote for KDE 4.4. I still have to rewrite some parts of the snippets_tng plugin for Kate so that it works there as well - group snippets in repositories, set an Author and a License of your choice
- publish snippet repositories via GHNS: In Kate you can already download snippets from GHNS but we sadly don’t have any repos up on opendesktop… I’ll have to add some prior to KDE 4.4. Also we didn’t have enough time to implement uploading of Repos from inside Kate in time for KDE 4.4. So stay tuned for KDE 4.5. KDevelop currently has no support for GHNS, but I plan to fix this tomorrow or the next days - together with uploading from inside KDevelop, i.e. all the nice features of GHNS v3.
- in KDevelop (and someday in Kate as well) you can simply select a part of your currently opened document and select the “create snippet from selection” in the ContextMenu - easy & fast!
TODO
There’s much to do.
- Highest priority right now for me is to get GHNS with all bells and whistles supported for KDevelop.
- Then I’ll merge and integrate the Kate & KDevelop plugins as much as possible, so we have a reduce code base.
- Also important is to make all shortcuts configurable
- Another thing is: How could we improve interoperability even between e.g. editors like TextMate or Gedit? Both have snippets features and their bundles are available in the net. If we can support those we’d save us a lot of work
Also, I should probably do a screencast… Not now though ;-)
» 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?
Documentation
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 PHP.net 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
@sincewhere 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.
» 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:
http://websvn.kde.org/trunk/playground/edu/cantor-backends/qalculate/
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).
» 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:
http://www.doodle.com/vkyh9up9794zr4s8
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 :)
Documentation
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: http://techbase.kde.org/Development/KDevelop-PG-Qt_Introduction
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…
Performance
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):
********* Start testing of KDevPG::Benchmarks ********* Config: Using QTest library 4.5.2, Qt 4.5.2 PASS : KDevPG::Benchmarks::initTestCase() RESULT : KDevPG::Benchmarks::positionAt():"initial, linear": 1,184.0 msec per iteration (total: 11840, iterations: 10) RESULT : KDevPG::Benchmarks::positionAt():"initial, random": 1,008.5 msec per iteration (total: 10085, iterations: 10) RESULT : KDevPG::Benchmarks::positionAt():"relative, linear": 1.3 msec per iteration (total: 14, iterations: 10) RESULT : KDevPG::Benchmarks::positionAt():"relative, random": 1,185.0 msec per iteration (total: 11850, iterations: 10) RESULT : KDevPG::Benchmarks::positionAt():"binary, linear": 31.1 msec per iteration (total: 312, iterations: 10) RESULT : KDevPG::Benchmarks::positionAt():"binary, random": 39.2 msec per iteration (total: 392, iterations: 10) RESULT : KDevPG::Benchmarks::positionAt():"binary & relative, linear": 0.8 msec per iteration (total: 8, iterations: 10) RESULT : KDevPG::Benchmarks::positionAt():"binary & relative, random": 40.2 msec per iteration (total: 402, iterations: 10) PASS : KDevPG::Benchmarks::positionAt() PASS : KDevPG::Benchmarks::cleanupTestCase() Totals: 3 passed, 0 failed, 0 skipped ********* 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 :)
» KDevelop PHP digest - August to Oktober 2009
Fri, 10/02/2009 - 15:08
Hi there again! I’ve been silent again on my blog, but didn’t rest on development. In the one and a half months since the last digest, I started writing a PHP application This finally made me eat my own dog food :). It resulted in lots of polishing and quite a few bug fixes for the PHP plugin in KDevelop. Here’s a list of what I think are the notably changes since the last digest:
(Note: to view screenshots, go to the bottom of this article.)
- refactoring of parts of the Code Completion code, should already result in faster code under certain situations
- properly mark constants as “Kind: Constant” in the declaration tooltips
- offer argument hints for ctors during code completion in class init statements
- greatly improve the generate inline documentation of built-in PHP functions, classes, properties etc. pp.
- add documentation of public properties
- support aliased functions (thanks to Victor Grischenko for his patch)
- show more/all documentation, and not only the first paragraph
- fix type-lookup
- don’t get confused when a documentation file documents both, a method and a function (greatly improves e.g. MySQLi documentation)
- don’t offer “jump to declaration” for built-in PHP declarations
- add support for
list(...)statement - cleanup code-completion list, esp. show the return type of functions in the prefix field, and not something a la “function ReturnType ($arg1, $arg2, …)”
- improve the code-completion for include/require statements
- add language constructs to code completion (e.g. class, while, foreach, print, …)
- show declaration tooltip for magic constants, showing their current value
- make functions, methods and classes case-insensitive, just like PHP handles them
- some performance improvements, especially in code completion and parsing of the generated file containing php-internal declarations
- lots of bug fixes, don’t want to iterate them all ;-)
I created a Flickr account and will push screenshots to it for every upcoming digest I do. To see some of the features I talk about above, visit: http://www.flickr.com/photos/milianw/sets/72157622375662249/detail/
EDIT: A note to those that want to try this out , but cannot / don’t want to compile it: I heard that there is / will be an AUR package for Arch users available. And I’d really appreciate it if others could create packages for their favorite distribution as well. You’ll need bleeding-edge kdevplatform + kdevelop though!









