Just another bit of shell glue which took about twenty minutes but yielded lovely results as it occurred to me that the DICE-wide inventory tools can now locate (at least in theory) any machine.
Being able to find out what office I’m in is more useful a feature than you might think. Primary of those is the ability to advertise my whereabouts to colleagues, for example on entering a server room, in case I can be of button-pushing assistance to others. Whenever I move around, I make an effort to update my Jabber status to point this out.
In fact, the glue was very straightforward and I learned about a particularly useful new tool: the Python DBUS libraries. DBUS is the message bus adopted by most modern “freedesktop”-compatible environments, and the Python library provides a quick and easy way onto the bus.
First, I hacked together a tiny script to establish where I am. Continue reading
Profiling isn’t often important for my python programs, but when a performance black hole appears out of nowhere it’s very useful for narrowing down the problem, even on smaller scripts.
(Recently I had cause to profile a script manipulating large-ish (<50Mb) files, whose performance had taken a turn for the worse. I had a suspicion that poor list manipulation was to blame, but the results spoke for themselves: 99% of CPU time was spent in the function
list.pop(0)! Based on this I discovered PEP-290 which describes the
collections.deque structure, significantly more efficient than a basic list — the replacement function,
deque.popleft(), barely registers a percentage of overall execution time(!)
I could have discovered this using basic profiling, but whilst playing with the profiler I discovered a very straightforward, easy-to-read python profile visualiser, and thought it worth sharing. It doesn’t do anything very beautiful or complicated, but it’s very quick, provides a neat “squaremap” view of your code performance, and importantly Just Works. RunSnakeRun is its name.
Edit: The future is here! I’ve shortened my wishlist since OfflineIMAP now supports the IDLE command.
Further Edit: Kerberos instructions for Mac OS now available
For some time I’ve been meaning to make use of some sort of mail caching, in order to use my favourite email client whilst offline. The end result of this process is that my incoming mail now takes a somewhat circuitous route of:
offlineimap - local uw-imapd - alpine
on my laptop.