--- /dev/null
+[[!meta title="Splittable **kwargs"]]
+[[!meta date="2008-12-21 02:40:44"]]
+
+Ah, it has been a while, but I am excited about a new python module I
+wrote so I shall post again ;). Actually, there has been a lot of
+Python learning over the past two months. It started out when I felt
+the need to setup a bug-tracker to keep track of all the things going
+wrong with my cantilever calibration software :p. Since I'm using git
+for versioning, I naturally wanted a 'distributed bugtracker'.
+Luckily there are a number of nice ones out there. I've been using
+[Bugs Everywhere](http://bugseverywhere.org/be/show/HomePage). My other
+favorite is [Ditz](http://ditz.rubyforge.org/), but I like being able to
+hack away on BE in my familiar Python.
+
+Besides helping keep track of my bugs, I've enjoyed hacking away at
+BE. In the process I've learned some cool tricks such as [Python
+decorators](http://www.python.org/dev/peps/pep-0318/) (see [this
+tutorial](http://adam.gomaa.us/blog/the-python-property-builtin/) for
+some really neat examples) and [Bash
+autocompletion](http://www.debian-administration.org/articles/317).
+
+Meanwhile, the calibration code developed, and I was getting tired of
+keeping assorted keyword arguments default in sync (how many times do
+I have to repeat minFreq=500?). The way to avoid repeating yourself
+in this situation is to use [`*args` or
+`**kwargs`](http://docs.python.org/tutorial/controlflow.html#keyword-arguments)
+(see [wxPython's endorsement](http://wiki.wxpython.org/wxPython Style Guide#line-42)).
+I don't trust myself to keep my code in sync enough to use *args, so
+lets focus on **kwargs. Consider the following example:
+
+ >>> def A(a=1):
+ ... return a
+ >>> def B(b=2):
+ ... return b
+ >>> def C(**kwargs):
+ ... return A(**kwargs)+B(**kwargs)
+ >>> C(a=3,b=4)
+ Traceback (most recent call last):
+ File "<stdin>", line 1, in <module>
+ File "<stdin>", line 2, in C
+ TypeError: A() got an unexpected keyword argument 'b'
+
+Hmm, how to split the kwargs into those for `A` and those for `B`? So
+I wrote the [splittable_kwargs
+module](/~wking/code/#splittable_kwargs). See the docstrings
+for some usage examples and more info. With my module the above
+example becomes
+
+ >>> from splittable_kwargs import splittableKwargsFunction
+ >>> @splittableKwargsFunction()
+ ... def A(a=1):
+ ... return a
+ >>> @splittableKwargsFunction()
+ ... def B(b=2):
+ ... return b
+ >>> @splittableKwargsFunction(A,B)
+ >>> def C(**kwargs):
+ ... akw,bkw = C._splitargs(C, kwargs)
+ ... return A(**bkw)+B(**akw)
+ >>> C(a=3,b=4)
+ 7
+
+In other news, my current side project is a MySQL-based, multi-user,
+archiving, command-line grade database. Down with web-forms ;).
+More information to come as the project progresses.
+
+[[!tag linux]]
+[[!tag programming]]