Pythonaro blog

08 June 2008

KDelicious 3.3 beta build

I'm going back to the old habit of uploading "beta" builds of KDelicious a few days before releasing. I had a lot of problems with Debian packages after I stopped doing that (for completely unrelated reasons), so I thought I'd summon a bit of old-times' luck... The files are in a little corner of the web. If you try them, please report any problems to me (g dot lacava on Gmail) or on the bugtracker at

Labels: ,

posted by GiacomoL @ 11:20 PM   2 comments links to this post

KDelicious documentation now online

I've just uploaded "the KDelicious Handbook", that is the documentation for all old (and new) KDelicious features.

This was the first time I used docbook to generate this sort of files, but I thought that it would have been nice to follow KDE guidelines, after all it's a KDE add-on!

Advantages of docbook: you write the docs once, then you can have as many stylesheets you want and get consistent output for different media. Using the KDE xsl files, it's really a snap.

Disadvantages: you have to write lots of markup, which can be painful; Emacs' SGML mode can help a bit there. Translation processes must be terrible, you have to re-write pretty much everything as there's no easy gettext-like method to keep style and content separated.

I've also written a small shell script to repeat the process, as I know tomorrow I'll forget everything I've learnt about meinproc and where the xsl templates are (/usr/share/apps/ksgmltools2/customization). The script also appends the Sourceforge logo to all pages meant for the web, as it's required by the SF policy (thanks to the wonders of sed). And of course it's all been put under version control. Am I "Pragmatic" or what?

Labels: , , ,

posted by GiacomoL @ 4:00 AM   2 comments links to this post

13 May 2008

KDelicious 3.2.1 is out

KDelicious 3.2.1 is a minor update, released in order to distribute the translations kindly provided by users (German, Spanish and Dutch, plus the original Italian and English). And obviously, the day after I released, a new translation (French) was sent... I'll probably push it out next month, I'd rather not release every other week if I'm not going to add new features.

It's worth mentioning that about half the downloads are for the debian package now, and the total downloads have increased since last time. I wonder how hard it would be to package for SuSE (the most popular KDE distribution), maybe that would give it a little boost as well.

Labels: , , ,

posted by GiacomoL @ 3:17 PM   0 comments links to this post

26 February 2008

KDED & me (& Python)

It's clear that KDelicious needs a background service to periodically synchronize with the server without user intervention. KDED seems the perfect answer to this, right? You can build modules that will be started and stopped with the desktop and managed with the "Service Manager" screen in the Control Center (KControl).

Unfortunately, KDED will only load a compiled shared library, not a script or a generic command (which would have been quite handy). I've no idea why, but I guess the KDE devs had their motives when they designed the system. The latest version of kdedistutils (in the pykdeextensions package, hosted on currently-down only supports the creation of C++ "glue" modules for kparts and kpartplugins, so once again I'm a bit stuck. I guess what one would need is a stub similar to the one that pykdedistutils generates for KControl plugins, KParts and KPartPlugins... I'm not fluent in C++, but I'll see if I can hack my way through. If I manage, i'll send Simon a patch for pykdedistutils.

On a side note, I noticed a few issues with kdedistutils when building KControl modules:

  • it fails creating source distributions (but maybe it's me doing something daft)
  • when building a binary distribution (bdist), it doesn't do static linking, which means that the produced libs are not really portable and require libpythonize to be in the exact same position on the target host.

Labels: , , , , ,

posted by GiacomoL @ 9:17 PM   0 comments links to this post

23 February 2008

KDelicious 3.2 out

Just a minor release really, I added some translations (thanks to Oliver Bock for the German one) and fixed a few bugs. I'm still looking for new features to add. Apparently, it might soon be reviewed by a magazine, which would be sweet.

Labels: ,

posted by GiacomoL @ 4:27 PM   0 comments links to this post

22 February 2008

kdepyuic essential patch

This little patch for kdepyuic just made my day.

kdepyuic is a small utility to produce python files from .ui files produced by QtDesigner, ready to be used in PyKDE applications; it basically adds KDE-specific stuff to the standard pyuic utility (a compiler included in the generic PyQt distribution).
This i18n patch (courtesy of Stephan Hermann) solves a few headaches with importing the correct i18n function to translate stuff, and I'd strongly recommend everyone writing KDE apps in python to apply it.

(... and this means that a kdelicious release is on its way...)

Labels: , , , , , ,

posted by GiacomoL @ 7:39 AM   0 comments links to this post

14 January 2008

KDelicious now on public SVN

I migrated the KDelicious SVN repository to SourceForge, mainly to make it easier for people to volunteer translations. If you fancy having a go (as of today we'd really need de/fr/nn/nb/es, but feel free to add other ones!), just download the KDelicious .pot template, save it as yourlang.po (for example, fr.po), open it with a gettext-compliant tool like KBabel, translate the strings and then send the saved file to me (g dot lacava at Thanks a lot!

Labels: , , , ,

posted by GiacomoL @ 10:14 PM   0 comments links to this post

11 January 2008

KDelicious 3.1

Faithful to the open-source mantra "release early, release often", here's another fresh version of KDelicious!

All the (ugly) calls to kdialog have been replaced by a proper (and nicer) custom UI, I added an About dialog to check the version, and the translations in the .desktop files are getting better thanks to users sending in corrections.

I also fixed a little bug with variable capitalization (i.e. tagging items "ToDo", "todo" or "Todo" would previously create three different folders with different bookmarks); is internally case-sensitive! Its web UI overrides this, but it still shows the different tag capitalization in XML files served by  API. Curious.

The new release is available from the KDelicious area on Sourceforge.

Labels: , ,

posted by GiacomoL @ 11:59 AM   0 comments links to this post

08 January 2008

for once in my lifetime...

... I'm actually (fairly) happy with the design of one of my Java programs. I'm crap at design, I always try to decouple too much and end up with writing loads of bridging code that doesn't really do anything. This time it seems like I've found a good balance... well, we'll see if/when this little thing will actually be released.

Meanwhile, KDelicious is picking up steam, thanks to my relentless advertising :) -- it's now on Freshmeat too!

Labels: , , ,

posted by GiacomoL @ 3:40 PM   0 comments links to this post

06 January 2008

KDelicious now on SourceForge!

KDelicious finally has a proper home on SourceForge. I hope this will bring a few more users (and feature requests).

I don't think I'll use their Subversion server yet. The bugtracker and wiki will definitely be handy; I have a local Trac instance (which is nice), but I'd rather not administer it f I can.

Labels: , ,

posted by GiacomoL @ 8:09 PM   2 comments links to this post

Thank $DEITY for version control

  • User points out a little bug in program
  • Author meanwhile made several changes to the codebase, not ready for release yet, but the required fix is trivial
  • Author checks out the latest tagged release from svn repository, tags as new release, commits fix, uploads and announces updated version in a few minutes
  • (...and right after that, he realises that there are other places in which the change must be applied, so he repeats the last step...)
  • With calm and tranquility, a day later, author applies changes to trunk (thanks to KDiff3)

Labels: , ,

posted by GiacomoL @ 10:52 AM   2 comments links to this post

18 December 2007

KDelicious 3.0 (+ roadmap)

After a few days of obsessive bugfixing, I've finally released KDelicious 3.0.

This is a big step forward from pykeylicious: it now uses PyKDE components to save preferences and interact with the network, which means transparent support for proxies and KWallet.

On the usability side, I've moved the option "Tag this post on" to its natural place, out of the submenu. There's now a GUI to manage options, which means that you can now switch username or choose how to rearrange your locally-synchronized bookmarks, all from a nice and simple interface.

Unfortunately, the resulting proliferation of files forced me to adopt a "proper" installer mechanism, and for now I settled on distutils. This has one major drawback: non-root installs are much harder than they used to be, if you don't know your way around python.

Mainly for this reason, I (foolishly) decided to maintain two codelines. Pykeylicious 2.x will still be available for people who can't be root or don't have/want the KDE bindings for python, in bugfixing mode. It will not have support for proxies, unless somebody else hacks it in. I hope this doesn't come back to bite me; I'm actually tempted to "downgrade" pykeylicious to 1.0, which got better feedback than 2.0.

In the short time (3.1) I'd like to get rid of all calls to kdialog. I resisted up to now because they work and are fairly low-maintenance, whereas using the proper bindings need a little bit more infrastructure, but they are really ugly and slow and I hate when dialogs stick around after the program crashes. I am also tempted to use the python-dcop bindings, but they look complicated and dcop is going away in KDE4 anyway, so I don't know if it's worth it.

One thing that didn't make it in KDelicious 3.0 is support for Ma.gnolia.
I personally don't use the service, but they (very cunningly) expose a mirror of the API to allow for an easy switch, so adding the new backend shouldn't be too time-consuming. Unfortunately they don't support bundles, which in KDelicious are very useful for sorting the locally-synchronized bookmarks. I'm thinking to add this "multi-backend" option in 3.5.

For 3.2 I might package it for debian. The only reason for the effort is to have an "uninstall" option, that distutil hasn't. It's a boring job, but probably necessary. I'll also try out other plugins to steal featu--- ahem, get "inspiration" for new features.

By the time all this is done, KDE4 will have been around for a while (see my previous post)... KDelicious 4 might be a very nice app by that time ;)

Labels: , , , , , ,

posted by GiacomoL @ 1:19 PM   0 comments links to this post

17 December 2007

Things I learnt last week on Python, PyKDE and KDE

  • if PyKDE segfaults on you, don't despair: you are probably just using the wrong arguments for a method call. Get the right invocation and you'll be fine, no need for recompilation or other drastic measures.
  • KCmdLineArgs is cool!
  • how to use KConfig from python (saves so much time):
    conf = KConfig("your_rc_file") # ends up in $KDEHOME/share/config/
    # non-string values DON'T work
    conf.sync() # this will actually write out the stuff
  • KIO.NetAccess can save a lot of trouble storing passwords etc., seamlessly integrating with konqueror and kwallet
  • distutils is cool, in its own way. PyPi integration looks terrific, can't wait to upload my stuff there...
  • dependency checking in distutils still sucks. Either you go with setuptools, or you have to litter your with ugly import tests.
  • kdedistutils (from pykdeextensions) looks useful enough
  • the KDE TechBase is very good for KDE4. For KDE3, better to get the kdelibs-apidoc packages in your distro. Don't understand why (on Debian Etch) it doesn't register with QtAssistant.
  • Google Translations can be weird.

I'm very close to releasing "KDelicious 3.0", which is a big improvement on pykeylicious. While adding a few "simple" options to manage how bookmarks are imported into Konqueror, I tried to refactor out nontrivial code from the main script into modules, and added a GUI to manage these options. I also pushed the integration with KDE in order to do things like transparent proxy support and kwallet integration, which spared me from maintain connection code, passwords, etc... I ended up with several files to distribute, which required a "proper" installer.

This release will still use the kdialog hacks. I'll get rid of them in 3.1, because I really want to put this out before the end of the week and get some feedback.

On bookmark synchronization: in an ideal world, synchronization would be done in the background, if we are online, every couple of hours, and by just pulling the more recent posts. But this is a bad world, and I'm a bad coder... KDelicious will only synchronize manually, will download all your bookmarks each time it runs, and will just try to stop you from getting banned by if you launch it too often. The only way around this would be to write a KService or a systray applet (which would also allow me to support other "minor" browsers like Opera), but this stuff is changing in KDE4 so I don't want to spend time on it before march.

After Christmas I'll think about putting the code on sourceforge (or savannah, or something) and have a proper homepage for it. But first, let's release ;)

Labels: , , , , , , , , ,

posted by GiacomoL @ 2:46 PM   0 comments links to this post