Skip to main content

Posts

Keep It Complex and Kludgy

KICK is my brand new backronym for " keep it complex and kludgy ". It is related to Macco's razor , which holds that the weirder and more obscure answer is always the correct answer. This seems to be the main ground rule for way too many self-appointed systems architects I've met over the years. I'm about to unveil this advanced guiding principle which will boost your design skills, turning you in a real professional. The KICK principle states that you should design every system as complex as you are able to (not that you need to understand it). This way you will make sure nobody could comprehend it whatsoever . The goal of this philosophy is to become irreplaceable in the context of the project. A disciplined and tenacious work will make you an essential part of your organization ! In order to achieve this objectives, there are a number of well-known techniques at your disposal: Class explosion : follow the wise aphorism " the more, the merrier ".
Recent posts

Keep It Simple, Stupid!

KISS stands for the guiding principle " keep it simple and stupid ". It is related to Occam's razor , which states: entia non sunt multiplicanda praeter necessitatem (entities must not be multiplied beyond necessity). This should probably be the main ground rule in any design, but it's often overlooked, if not plain unknown by many self-appointed systems architects. The KISS principle states that every system should be as simple as possible ( but not simpler ). It doesn't talk about the easiness of a system, but the complexity . Some people tend to mix these two concepts up. There is nothing to be proud of when designing complex systems per se . It is always way harder to design simple systems. They are also superior to more complex systems, provided that they support the same functionality. This philosophy is also related with some other aphorism, such as: Perfect is the enemy of good . This means that, most of the time, trying to design the best (the m

KRunner and Skype with a Plasma Python runner

After the odyssey of developing a KDE Plasma runner in Python I have finally develop a simple one that interacts with Skype. You can read the full story (part 1 , 2 , 3 and 4 ) or just the (useful part)  modifications to my KDE  and the final example . You can download this version from here or download the latest (and beta) version from the bazaar repository... To uninstall it just... I hope to get a fully stable version very soon and then, I will publish a downloadable file in project page and a deb package in my PPA .

KRunner in Python (and IV)

To make this very simple example working, I've had to modify the pyrunner.py file that I checked out in the last post . I don't know if this changes will be necessary in newer KDE versions (mine is 4.3.4), but by now this patch can be used. And here is a final working example: from PyKDE4 import plasmascript from PyKDE4.plasma import Plasma class EchoRunner(plasmascript.Runner): def match(self, search): if not search.isValid(): return term = search.query() if term.length < 2: return m = Plasma.QueryMatch(self.runner) m.setType(Plasma.QueryMatch.ExactMatch) m.setText('You said "%s"' % term) m.setData(term) search.addMatch(term, m) def run(self, search, action): print 'You said "%s"' % action.data().toPyObject() def CreateRunner(parent): return EchoRunner(parent) I think it is self explainable, but

KRunner in Python (III)

It works!! Thank to a comment in the bug I submitted , I've been taking a look and I've found that in trunk version, this problem has been fixed. In concrete, the support for runners and wallpapers has been added to the ones for applets and data engines. To add it to your kde installation, just use cmake to install it automatically (after you fix the missing dependencies) or do it by hand: svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdebase/workspace/plasma/generic/scriptengines/python python-scriptengine cd python-scriptengine sudo cp plasma-scriptengine-runner-python.desktop /usr/share/kde4/services/ sudo cp pyrunner.py /usr/share/kde4/apps/plasma_scriptengine_python/ sudo cp plasmascript.py /usr/lib/pymodules/python2.6/PyKDE4/plasmascript.py sudo cp plasmascript.py /usr/share/pyshared/PyKDE4/plasmascript.py # And if you want to add the support for wallpapers sudo cp plasma-scriptengine-wallpaper-python.desktop /usr/share/kde4/services/ sudo cp pywallpaper.py /u

KRunner in Python (II)

Digging into the way that kde handles services, I've found that this code emulates its behaviour : from PyQt4 import QtGui from PyKDE4.kdecore import KServiceTypeTrader QtGui.QApplication([]) constraint = "[X-Plasma-API] == '%s' and '%s' in [X-Plasma-ComponentTypes]" KServiceTypeTrader.self().query("Plasma/ScriptEngine", constraint % ("python", "Runner")) # -> [] KServiceTypeTrader.self().query("Plasma/ScriptEngine", constraint % ("python", "Applet")) # -> [<PyKDE4.kdecore.KService object at 0xb75bee6c>] KServiceTypeTrader.self().query("Plasma/ScriptEngine", constraint % ("python", "DataEngine")) # -> [<pykde4.kdecore.kservice 0xb75befac="" at="" object="">] Conclusion: There is no Python script engine for runners but there is for applets and data engines. :( To be continued (again)...

KRunner in Python (I)

This is my first post, so I don't really know how to start... [DONE]. My goal is to improve the usability of the time tracking software included in KDE: KTimeTracker , just because I don't want to spend time to track it. I'll try to expose the whole (good! It'll mean that I found a solution!) of the process I am following to get a working KDE Runner written in Python . KDE4 (actually Plasma) brings a very useful tool called KRunner . It's a launcher that can be customized with our own actions. The plugins that implements this functionality are Runners. So, after looking for a tutorial or example, I found the tutorials page for Plasma and, starting from the generic plasmoid tutorial , I developed a first version that looks like: # -*- coding: utf-8 -*- from PyKDE4.plasma import Plasma import sys sys.path.append('/usr/share/kde4/apps/plasma_scriptengine_python') import plasma_importer class PythonRunner(Plasma.RunnerScript): importer = None