<?xml version='1.0' encoding='utf-8' ?>
<!--  If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/  -->
<rss version='2.0' xmlns:lj='http://www.livejournal.org/rss/lj/1.0/' xmlns:media='http://search.yahoo.com/mrss/' xmlns:atom10='http://www.w3.org/2005/Atom'>
<channel>
  <title>ok, we don&apos;t have sugar, beaters or measuring cups</title>
  <link>http://dannipenguin.livejournal.com/</link>
  <description>ok, we don&apos;t have sugar, beaters or measuring cups - LiveJournal.com</description>
  <lastBuildDate>Tue, 01 Dec 2009 22:23:02 GMT</lastBuildDate>
  <generator>LiveJournal / LiveJournal.com</generator>
  <lj:journal>dannipenguin</lj:journal>
  <lj:journalid>544381</lj:journalid>
  <lj:journaltype>personal</lj:journaltype>
  <atom10:link rel='hub' href='http://pubsubhubbub.appspot.com/' />
  <image>
    <url>http://l-userpic.livejournal.com/88878272/544381</url>
    <title>ok, we don&apos;t have sugar, beaters or measuring cups</title>
    <link>http://dannipenguin.livejournal.com/</link>
    <width>100</width>
    <height>100</height>
  </image>

<item>
  <guid isPermaLink='true'>http://dannipenguin.livejournal.com/287892.html</guid>
  <pubDate>Tue, 01 Dec 2009 22:23:02 GMT</pubDate>
  <title>things what I&apos;ve been up to</title>
  <link>http://dannipenguin.livejournal.com/287892.html</link>
  <description>&lt;center&gt;&lt;a href=&quot;http://www.flickr.com/photos/penguincakes/4137281267/&quot; title=&quot;the sun sets on brunswick by penguincakes, on Flickr&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2635/4137281267_ba365dd8bf.jpg&quot; width=&quot;500&quot; height=&quot;333&quot; alt=&quot;the sun sets on brunswick&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;i&gt;we&apos;ve been getting some killer sunsets&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.flickr.com/photos/penguincakes/4137282047/&quot; title=&quot;ethical christmas cards by penguincakes, on Flickr&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2696/4137282047_15d2787f24.jpg&quot; width=&quot;500&quot; height=&quot;333&quot; alt=&quot;ethical christmas cards&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;i&gt;Australian-themed, environmentally friendly Christmas cards (&lt;a href=&quot;http://www.earthgreetings.com.au/htm%20pages/peace%20on%20earth/christmascards1.htm&quot;&gt;link&lt;/a&gt;)&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.flickr.com/photos/penguincakes/4147954473/&quot; title=&quot;9 Lives Jamming #6 by penguincakes, on Flickr&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2711/4147954473_a4ac7dcbab.jpg&quot; width=&quot;500&quot; height=&quot;333&quot; alt=&quot;9 Lives Jamming #6&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;i&gt;Ballarat Rollerderby exhibition bout&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.flickr.com/photos/penguincakes/4146330889/&quot; title=&quot;pumpkin and tofu pie at tofwd by penguincakes, on Flickr&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2600/4146330889_a4f0cb3ebc.jpg&quot; width=&quot;500&quot; height=&quot;375&quot; alt=&quot;pumpkin and tofu pie at tofwd&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;i&gt;delicious lunch&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.flickr.com/photos/penguincakes/4150688533/&quot; title=&quot;lavender #1 by penguincakes, on Flickr&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2490/4150688533_b077af9889.jpg&quot; width=&quot;500&quot; height=&quot;333&quot; alt=&quot;lavender #1&quot; /&gt;&lt;/a&gt;&lt;/center&gt;</description>
  <comments>http://dannipenguin.livejournal.com/287892.html</comments>
  <category>photos melbourne</category>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dannipenguin.livejournal.com/287700.html</guid>
  <pubDate>Mon, 23 Nov 2009 23:07:29 GMT</pubDate>
  <title>GNOME Journal is out</title>
  <link>http://dannipenguin.livejournal.com/287700.html</link>
  <description>The GNOME Women edition of &lt;a href=&quot;http://gnomejournal.org/&quot;&gt;GNOME Journal&lt;/a&gt; has been released, including an article by &lt;a href=&quot;http://gnomejournal.org/article/84/telepathy-empathy-and-mission-control-5-in-gnome-228&quot;&gt;yours truly&lt;/a&gt; on Telepathy and MC5. Check it out.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;a href=&quot;http://www.flickr.com/photos/penguincakes/4060008276/&quot; title=&quot;ask dr opus by penguincakes, on Flickr&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2755/4060008276_ec3d6c57a2.jpg&quot; width=&quot;333&quot; height=&quot;500&quot; alt=&quot;ask dr opus&quot; /&gt;&lt;/a&gt;&lt;/center&gt;</description>
  <comments>http://dannipenguin.livejournal.com/287700.html</comments>
  <category>writing</category>
  <category>gnome-journal</category>
  <category>work</category>
  <category>gnome-women</category>
  <category>telepathy</category>
  <lj:security>public</lj:security>
  <lj:reply-count>10</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dannipenguin.livejournal.com/287280.html</guid>
  <pubDate>Sat, 21 Nov 2009 23:31:15 GMT</pubDate>
  <title>A complaint about Melbourne buses</title>
  <link>http://dannipenguin.livejournal.com/287280.html</link>
  <description>I missed something I wanted to go to yesterday, because I opted to wait for the bus that was coming in 5 minutes, and thus be early, rather than walk and only just make it on time.&lt;br /&gt;&lt;br /&gt;The bus companies in Melbourne seem quite small, they only run a couple of lines each. Most shifts seem to be a driving the same line back and forth. The problem is when there is a delay on a route, driving the same route back and forth leads to that delay stacking and stacking. A technique I&apos;ve seen to combat this is having buses change routes at the end of every route, effectively driving in circles around the area. This hopefully gives them an opportunity to make up the lost time. Of course, it requires bus routes that terminate in the same place and bus companies that operate more than just a couple of routes.&lt;br /&gt;&lt;br /&gt;For what it&apos;s worth, a lot of yesterday&apos;s angst could probably have been avoided if the City of Yarra had bothered to tell someone it was closing part of Johnston St. Simply adjusting the traffic light sequences for the detour would have been a huge win, instead of having a traffic light that gave you but 15 seconds to turn down the next road, backing traffic up for 15 minutes.</description>
  <comments>http://dannipenguin.livejournal.com/287280.html</comments>
  <category>traffic</category>
  <category>melbourne</category>
  <category>transport</category>
  <lj:security>public</lj:security>
  <lj:reply-count>17</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dannipenguin.livejournal.com/287125.html</guid>
  <pubDate>Fri, 20 Nov 2009 02:43:00 GMT</pubDate>
  <title>in case you missed it</title>
  <link>http://dannipenguin.livejournal.com/287125.html</link>
  <description>It turns out that PlanetPlanet starts to ignore you if you make four blog posts in quick succession, so in case you missed it yesterday:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://dannipenguin.livejournal.com/286110.html&quot;&gt;status update on Clutter-GTK&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://dannipenguin.livejournal.com/286276.html&quot;&gt;Useful python trick of the day: dict.get()&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://dannipenguin.livejournal.com/286685.html&quot;&gt;Why Telepathy is not like libpurple&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</description>
  <comments>http://dannipenguin.livejournal.com/287125.html</comments>
  <category>recap</category>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dannipenguin.livejournal.com/286736.html</guid>
  <pubDate>Thu, 19 Nov 2009 06:04:29 GMT</pubDate>
  <title>sky taco</title>
  <link>http://dannipenguin.livejournal.com/286736.html</link>
  <description>[Apparently today is one of those days where a lot of blogging happens.]&lt;br /&gt;&lt;br /&gt;Recently, Sydney Rd (the road that runs through the middle of Brunswick, once upon a time the road to Sydney, and to the goldfields) business were exhibiting local art in their windows. A couple of the pieces, by an artist called Lynette Joy Weber, really caught my eye. Specifically, I was fond of a piece called Little Raven. So we got in touch with her to buy one. Unfortunately, when I went to meet her, she wasn&apos;t able to liberate that piece of artwork from the shop it was in, so she was showing me some of the other pieces in her collection. I also fell in love with a piece called Friends. Because I&apos;m like that, I ended up buying both of them.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;a href=&quot;http://www.flickr.com/photos/penguincakes/4116141621/&quot; title=&quot;&amp;#39;Little Raven&amp;#39; by Lynette Joy Weber by penguincakes, on Flickr&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2594/4116141621_5b5eafa9e8.jpg&quot; width=&quot;333&quot; height=&quot;500&quot; alt=&quot;&amp;#39;Little Raven&amp;#39; by Lynette Joy Weber&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://www.flickr.com/photos/penguincakes/4054588766/&quot; title=&quot;&amp;#39;Friends&amp;#39; by Lynette Joy Weber by penguincakes, on Flickr&quot;&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3589/4054588766_20f0521db2.jpg&quot; width=&quot;333&quot; height=&quot;500&quot; alt=&quot;&amp;#39;Friends&amp;#39; by Lynette Joy Weber&quot; /&gt;&lt;/a&gt;&lt;/center&gt;&lt;br /&gt;They&apos;re now hanging in our entry hallway, outside my office. They make me smile when I see them. Most people are unimpressed; too poppy and too commercial, they say. I don&apos;t care, because I really, really like them.&lt;br /&gt;&lt;br /&gt;Going to a concert band rehearsal tonight.</description>
  <comments>http://dannipenguin.livejournal.com/286736.html</comments>
  <category>art</category>
  <category>melbourne</category>
  <category>purchases</category>
  <lj:security>public</lj:security>
  <lj:reply-count>5</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dannipenguin.livejournal.com/286685.html</guid>
  <pubDate>Thu, 19 Nov 2009 05:07:21 GMT</pubDate>
  <title>Why Telepathy is not like libpurple</title>
  <link>http://dannipenguin.livejournal.com/286685.html</link>
  <description>It seems, even though we talk about Telepathy a lot, that there are still people out there who believe that Telepathy is really just a reimplementation of libpurple, just with an annoyingly retentive specification, and D-Bus.&lt;br /&gt;&lt;br /&gt;The big thing to understand about Telepathy is not that it&apos;s platform independent (even though it is, and that&apos;s pretty neat). Or that it&apos;s modular (even though it is, and that&apos;s also pretty neat). The neat thing about Telepathy is that it&apos;s a service. Telepathy provides communications as a service.&lt;br /&gt;&lt;br /&gt;What does this mean? This means that Telepathy is &lt;i&gt;not just&lt;/i&gt; a library for enabling communications in Empathy, or Kopete. Telepathy can enable communications in &lt;i&gt;everything&lt;/i&gt;. Any program can listen to and interact with Telepathy. This means that you can send a user files, straight from Nautilus; or share your desktop with Vinagre/Vino, via a Telepathy Tube; all without having to set up your accounts in each of these programs (this information is stored in the Account Manager, a session-wide Telepathy service responsible for maintaining accounts and connections &amp;mdash; Empathy&apos;s accounts dialog is just a user interface to this service) or needing to establish a connection per application.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src=&quot;http://people.collabora.co.uk/~danni/images/telepathy-components.png&quot; alt=&quot;Telepathy components on the bus&quot; /&gt;&lt;/center&gt;&lt;br /&gt;Because the information you need is available everywhere, this allows communications features to be integrated into places where they make the most sense in your desktop, rather than implemented in your contact roster (like another chat client does). For instance, mail notifications that Telepathy learns about from webmail services such as MSN and Yahoo (note: not yet implemented) could be plugged into the existing mail-notification applet, or into Evolution to hint when to pull from IMAP. GNOME Shell could provide an embedded GMail-like chat-UI, with popout chat-windows provided by Empathy. All of this is possible without those applications having to have their own preferences dialog for your accounts.&lt;br /&gt;&lt;br /&gt;telepathy-glib provides classes for talking to the the Account Manager and Channel Dispatcher, setting up channels and handling contacts. In the future this will be expanded to make it much easier to develop Tube clients and other common tasks (note: avoid libtelepathy and libmission-control, they are deprecated traps and not to be used). Hopefully soon there will be a telepathy-gtk to provide common, reusable GTK+ widgets that applications can use. Telepathy-Qt4 has made it&apos;s first shared-library pre-release for those who prefer the other toolkit. If you&apos;re interested, I&apos;ve been working on the &lt;a href=&quot;http://people.collabora.co.uk/~danni/telepathy-book/&quot;&gt;Telepathy Developer&apos;s Manual&lt;/a&gt;.</description>
  <comments>http://dannipenguin.livejournal.com/286685.html</comments>
  <category>work</category>
  <category>telepathy</category>
  <lj:security>public</lj:security>
  <lj:reply-count>15</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dannipenguin.livejournal.com/286276.html</guid>
  <pubDate>Thu, 19 Nov 2009 03:20:53 GMT</pubDate>
  <title>Useful python trick of the day: dict.get()</title>
  <link>http://dannipenguin.livejournal.com/286276.html</link>
  <description>How often in Python have you written something like:&lt;br /&gt;&lt;pre&gt;d[k] &lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;if&lt;/span&gt; k &lt;span style=&quot;color: #AA22FF; font-weight: bold&quot;&gt;in&lt;/span&gt; d &lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #BA2121&quot;&gt;&amp;quot;Default&amp;quot;&lt;/span&gt;
&lt;/pre&gt;Admittedly this has gotten a lot shorter since the inclusion of ternary operators in Python, but did you know that Python provides a get method for dictionaries that allows you to provide a default?&lt;br /&gt;&lt;pre&gt;d&lt;span style=&quot;color: #666666&quot;&gt;.&lt;/span&gt;get(k, &lt;span style=&quot;color: #BA2121&quot;&gt;&amp;quot;Default&amp;quot;&lt;/span&gt;)
&lt;/pre&gt;I only found out today when reviewing code. Exciting!</description>
  <comments>http://dannipenguin.livejournal.com/286276.html</comments>
  <category>python</category>
  <category>hacking</category>
  <category>programming</category>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dannipenguin.livejournal.com/286110.html</guid>
  <pubDate>Thu, 19 Nov 2009 03:12:43 GMT</pubDate>
  <title>status update on Clutter-GTK</title>
  <link>http://dannipenguin.livejournal.com/286110.html</link>
  <description>Some time ago I &lt;a href=&quot;http://dannipenguin.livejournal.com/280866.html&quot;&gt;wrote about my work on Clutter-GTK&lt;/a&gt;. Well, I finally got around to rebasing this branch so it could be merged and ebassi merged it for me &lt;a href=&quot;http://git.clutter-project.org/cgit.cgi?url=clutter-gtk/log/&quot;&gt;last night&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;There are still bugs in the code that I&apos;ve not fixed, but many eyes make all bugs shallow, right?&lt;br /&gt;&lt;br /&gt;The code includes a number of &lt;a href=&quot;http://git.clutter-project.org/cgit.cgi?url=clutter-gtk/tree/examples&quot;&gt;examples&lt;/a&gt; of how to do things.&lt;br /&gt;&lt;br /&gt;If you&apos;re going to use these classes, you should understand how they work. There are caveats. Certainly I wouldn&apos;t base your entire toolkit around the interchanged use of GtkClutterActor and GtkClutterStandin.&lt;br /&gt;&lt;br /&gt;GtkClutterActor takes a GtkWidget, rendered offscreen to an XPixmap, and paints it onto a GL texture which it draws on the Clutter stage. As a result, it can draw that texture anywhere, at any stacking level, and do things like taking events and sending them back to GTK+. Updating of the offscreen pixmap is done using Damage events, and things are generally peachy.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src=&quot;http://people.collabora.co.uk/~danni/images/gtk-clutter-actor-impl.png&quot; alt=&quot;GtkClutterActor Implementation&quot; /&gt;&lt;/center&gt;&lt;br /&gt;Things basically work like you expect. Although there are some performance issues where widgets that draw using two expose events will sometimes have a delay between the two Damage events that I&apos;ve not yet explained, which can cause a visual rip.&lt;br /&gt;&lt;br /&gt;If GtkClutterActor lets you embed a GtkWidget into a Clutter stage, then GtkClutterStandin goes the other way around, allowing a ClutterActor to be placed within a GtkContainer; but the implementation is different. The ClutterActor is not rendered into offscreen memory, and then copied into an XPixmap and blitted into GTK+, this would not allow for all of those exciting animations you want to do.&lt;br /&gt;&lt;br /&gt;Instead what happens is that GtkClutterStandin reserves space within a GtkContainer for the actor it proxies and then places that actor on top of the texture containing the widget contents.&lt;br /&gt;&lt;br /&gt;Bugs should be filed in the &lt;a href=&quot;http://bugzilla.o-hand.com/buglist.cgi?query_format=advanced&amp;amp;short_desc_type=allwordssubstr&amp;amp;short_desc=&amp;amp;product=Clutter&amp;amp;component=clutter-gtk&amp;amp;long_desc_type=substring&amp;amp;long_desc=&amp;amp;bug_file_loc_type=allwordssubstr&amp;amp;bug_file_loc=&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;emailassigned_to1=1&amp;amp;emailtype1=substring&amp;amp;email1=&amp;amp;emailassigned_to2=1&amp;amp;emailreporter2=1&amp;amp;emailcc2=1&amp;amp;emailtype2=substring&amp;amp;email2=&amp;amp;bugidtype=include&amp;amp;bug_id=&amp;amp;chfieldfrom=&amp;amp;chfieldto=Now&amp;amp;chfieldvalue=&amp;amp;cmdtype=doit&amp;amp;order=Importance&amp;amp;field0-0-0=noop&amp;amp;type0-0-0=noop&amp;amp;value0-0-0=&quot;&gt;Opened Hand Bugzilla&lt;/a&gt;.</description>
  <comments>http://dannipenguin.livejournal.com/286110.html</comments>
  <category>clutter-gtk</category>
  <category>work</category>
  <category>hacking</category>
  <category>clutter</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dannipenguin.livejournal.com/285830.html</guid>
  <pubDate>Fri, 13 Nov 2009 21:22:03 GMT</pubDate>
  <title>bump</title>
  <link>http://dannipenguin.livejournal.com/285830.html</link>
  <description>So, I quite like the idea of &lt;a href=&quot;http://www.bumptechnologies.com/&quot;&gt;Bump&lt;/a&gt;, a technology that enables data transfer by matching a bump read by your phone&apos;s motion sensors along with information like your GPS location. However, it does require sending all of your contact information to a 3rd party server, maybe that&apos;s fine? Maybe it&apos;s not.&lt;br /&gt;&lt;br /&gt;It seems like this is exactly the sort of thing you could achieve using telepathy-salut (link-local XMPP) and Telepathy Tubes. You would have a MUC (multi-user, many-to-many) D-Bus tube where people&apos;s devices announced bumps, when clients found a match. Clients could then open up a 1-to-1 tube to transfer their data. Matching it slightly easier, because you&apos;d only have to look at bumps on your MUC (plus you have the bump sensor reading + GPS)&lt;br /&gt;&lt;br /&gt;Unfortunately this idea does full down with one problem. Multicast (as used in link-local XMPP) requires you to be on the same network segment, which it not something that can always been ensured, especially for phones and especially if there is no wireless network around. If the radios were also joined to an ad-hoc network for finding people nearby, this could work. Some wireless chipsets can multiplex their radios onto several networks, but you probably wouldn&apos;t be able to do this portably across many devices.</description>
  <comments>http://dannipenguin.livejournal.com/285830.html</comments>
  <category>ideas</category>
  <category>tubes</category>
  <category>work</category>
  <category>bump</category>
  <category>salut</category>
  <category>telepathy</category>
  <lj:security>public</lj:security>
  <lj:reply-count>10</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dannipenguin.livejournal.com/285538.html</guid>
  <pubDate>Sun, 08 Nov 2009 06:27:34 GMT</pubDate>
  <title>decorator factory for dbus-python methods</title>
  <link>http://dannipenguin.livejournal.com/285538.html</link>
  <description>This is a crazy idea I had; that I want to share with people.&lt;br /&gt;&lt;br /&gt;When you&apos;re implementing an object in dbus-python, you decorate your published method calls like this:&lt;br /&gt;&lt;pre&gt;&lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #0000FF; font-weight: bold&quot;&gt;ExampleObserver&lt;/span&gt;(dbus&lt;span style=&quot;color: #666666&quot;&gt;.&lt;/span&gt;service&lt;span style=&quot;color: #666666&quot;&gt;.&lt;/span&gt;Object):
    &lt;span style=&quot;color: #666666&quot;&gt;...&lt;/span&gt;

    &lt;span style=&quot;color: #AA22FF&quot;&gt;@dbus&lt;/span&gt;&lt;span style=&quot;color: #666666&quot;&gt;.&lt;/span&gt;service&lt;span style=&quot;color: #666666&quot;&gt;.&lt;/span&gt;method(dbus_interface&lt;span style=&quot;color: #666666&quot;&gt;=&lt;/span&gt;telepathy&lt;span style=&quot;color: #666666&quot;&gt;.&lt;/span&gt;interfaces&lt;span style=&quot;color: #666666&quot;&gt;.&lt;/span&gt;CLIENT_OBSERVER,
                         in_signature&lt;span style=&quot;color: #666666&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #BA2121&quot;&gt;&amp;#39;ooa(oa{sv})oaoa{sv}&amp;#39;&lt;/span&gt;,
                         out_signature&lt;span style=&quot;color: #666666&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #BA2121&quot;&gt;&amp;#39;&amp;#39;&lt;/span&gt;)
    &lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #0000FF&quot;&gt;ObserveChannels&lt;/span&gt;(&lt;span style=&quot;color: #008000&quot;&gt;self&lt;/span&gt;, account, connection, channels, dispatch_operation,
                        requests_satisfied, observer_info):
        &lt;span style=&quot;color: #666666&quot;&gt;...&lt;/span&gt;&lt;/pre&gt;The input and output signatures are incredibly easy to get wrong. The thing is, most D-Bus APIs (e.g. Telepathy) have a specification that contains these arguments. Some APIs (e.g. Telepathy-Python) provide generated code including interface names and constants. So why can&apos;t we do something more like?&lt;br /&gt;&lt;pre&gt;&lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #0000FF; font-weight: bold&quot;&gt;ExampleObserver&lt;/span&gt;(dbus&lt;span style=&quot;color: #666666&quot;&gt;.&lt;/span&gt;service&lt;span style=&quot;color: #666666&quot;&gt;.&lt;/span&gt;Object):
    &lt;span style=&quot;color: #666666&quot;&gt;...&lt;/span&gt;

    &lt;span style=&quot;color: #AA22FF&quot;&gt;@telepathy&lt;/span&gt;&lt;span style=&quot;color: #666666&quot;&gt;.&lt;/span&gt;decorators&lt;span style=&quot;color: #666666&quot;&gt;.&lt;/span&gt;Telepathy&lt;span style=&quot;color: #666666&quot;&gt;.&lt;/span&gt;Client&lt;span style=&quot;color: #666666&quot;&gt;.&lt;/span&gt;Observer&lt;span style=&quot;color: #666666&quot;&gt;.&lt;/span&gt;ObserveChannels
    &lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #0000FF&quot;&gt;ObserveChannels&lt;/span&gt;(&lt;span style=&quot;color: #008000&quot;&gt;self&lt;/span&gt;, account, connection, channels, dispatch_operation,
                        requests_satisfied, observer_info):
        &lt;span style=&quot;color: #666666&quot;&gt;...&lt;/span&gt;&lt;/pre&gt;With a decorator factory that looks up the parameters and then wraps the &lt;tt&gt;dbus.service.method&lt;/tt&gt; factory.&lt;br /&gt;&lt;br /&gt;Well, I just wrote a proof-of-concept. It looks something like this:&lt;br /&gt;&lt;pre&gt;&lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #0000FF; font-weight: bold&quot;&gt;Decorators&lt;/span&gt;(&lt;span style=&quot;color: #008000&quot;&gt;object&lt;/span&gt;):
    methods &lt;span style=&quot;color: #666666&quot;&gt;=&lt;/span&gt; {
        &lt;span style=&quot;color: #BA2121&quot;&gt;&amp;#39;org.freedesktop.DBus.Properties.GetAll&amp;#39;&lt;/span&gt;: [ &lt;span style=&quot;color: #BA2121&quot;&gt;&amp;#39;s&amp;#39;&lt;/span&gt;, &lt;span style=&quot;color: #BA2121&quot;&gt;&amp;#39;a{sv}&amp;#39;&lt;/span&gt; ],
        &lt;span style=&quot;color: #BA2121&quot;&gt;&amp;#39;org.freedesktop.DBus.Properties.Get&amp;#39;&lt;/span&gt;: [ &lt;span style=&quot;color: #BA2121&quot;&gt;&amp;#39;ss&amp;#39;&lt;/span&gt;, &lt;span style=&quot;color: #BA2121&quot;&gt;&amp;#39;v&amp;#39;&lt;/span&gt; ],
        &lt;span style=&quot;color: #BA2121&quot;&gt;&amp;#39;org.freedesktop.Telepathy.Client.Observer.ObserveChannels&amp;#39;&lt;/span&gt;: [ &lt;span style=&quot;color: #BA2121&quot;&gt;&amp;#39;ooa(oa{sv})oaoa{sv}&amp;#39;&lt;/span&gt;, &lt;span style=&quot;color: #BA2121&quot;&gt;&amp;#39;&amp;#39;&lt;/span&gt; ],
    }

    &lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #0000FF&quot;&gt;__init__&lt;/span&gt;(&lt;span style=&quot;color: #008000&quot;&gt;self&lt;/span&gt;, namespace):
        &lt;span style=&quot;color: #008000&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color: #666666&quot;&gt;.&lt;/span&gt;_namespace &lt;span style=&quot;color: #666666&quot;&gt;=&lt;/span&gt; namespace

    &lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #0000FF&quot;&gt;__getattr__&lt;/span&gt;(&lt;span style=&quot;color: #008000&quot;&gt;self&lt;/span&gt;, key):
        &lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;return&lt;/span&gt; Decorators(&lt;span style=&quot;color: #BA2121&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #BB6688; font-weight: bold&quot;&gt;%s&lt;/span&gt;&lt;span style=&quot;color: #BA2121&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #BB6688; font-weight: bold&quot;&gt;%s&lt;/span&gt;&lt;span style=&quot;color: #BA2121&quot;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&quot;color: #666666&quot;&gt;%&lt;/span&gt; (&lt;span style=&quot;color: #008000&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color: #666666&quot;&gt;.&lt;/span&gt;_namespace, key))

    &lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #0000FF&quot;&gt;__call__&lt;/span&gt;(&lt;span style=&quot;color: #008000&quot;&gt;self&lt;/span&gt;, func):
        iface &lt;span style=&quot;color: #666666&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008000&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color: #666666&quot;&gt;.&lt;/span&gt;_namespace&lt;span style=&quot;color: #666666&quot;&gt;.&lt;/span&gt;rsplit(&lt;span style=&quot;color: #BA2121&quot;&gt;&amp;#39;.&amp;#39;&lt;/span&gt;, &lt;span style=&quot;color: #666666&quot;&gt;1&lt;/span&gt;)[&lt;span style=&quot;color: #666666&quot;&gt;0&lt;/span&gt;]
        in_sig, out_sig &lt;span style=&quot;color: #666666&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008000&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color: #666666&quot;&gt;.&lt;/span&gt;methods[&lt;span style=&quot;color: #008000&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color: #666666&quot;&gt;.&lt;/span&gt;_namespace]
        &lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;return&lt;/span&gt; dbus&lt;span style=&quot;color: #666666&quot;&gt;.&lt;/span&gt;service&lt;span style=&quot;color: #666666&quot;&gt;.&lt;/span&gt;method(dbus_interface&lt;span style=&quot;color: #666666&quot;&gt;=&lt;/span&gt;iface,
                                   in_signature&lt;span style=&quot;color: #666666&quot;&gt;=&lt;/span&gt;in_sig,
                                   out_signature&lt;span style=&quot;color: #666666&quot;&gt;=&lt;/span&gt;out_sig)(func)

    &lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #0000FF&quot;&gt;__str__&lt;/span&gt;(&lt;span style=&quot;color: #008000&quot;&gt;self&lt;/span&gt;):
        &lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #008000&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color: #666666&quot;&gt;.&lt;/span&gt;_namespace

decorators &lt;span style=&quot;color: #666666&quot;&gt;=&lt;/span&gt; Decorators(&lt;span style=&quot;color: #BA2121&quot;&gt;&amp;#39;org.freedesktop&amp;#39;&lt;/span&gt;)&lt;/pre&gt;Obviously in the real version, it would have a generated map of functions, or map of interfaces each with a map of functions, and a way to handle signals, but neat huh?</description>
  <comments>http://dannipenguin.livejournal.com/285538.html</comments>
  <category>python</category>
  <category>work</category>
  <category>hacking</category>
  <category>telepathy</category>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dannipenguin.livejournal.com/285268.html</guid>
  <pubDate>Wed, 04 Nov 2009 04:41:56 GMT</pubDate>
  <title>Corner of Sydney Rd and Albion St, Brunswick Closed</title>
  <link>http://dannipenguin.livejournal.com/285268.html</link>
  <description>Not sure what&apos;s happened, but the intersection of Sydney Rd and Albion St in Brunswick is currently closed off with police barricades. Police and Fire in attendance. As well as two news crews and about a zillion bystanders. It looks like a building has collapsed, it&apos;s taken out the #19 southbound tramstop.&lt;br /&gt;&lt;br /&gt;It was the medical centre, which the media is reporting as being unused, but I&apos;m sure it was still being used at least a couple of weeks ago.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;a href=&quot;http://www.flickr.com/photos/penguincakes/4074412324/&quot; title=&quot;sydney rd with collapsed building by penguincakes, on Flickr&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2689/4074412324_f4ec9f15a6.jpg&quot; width=&quot;500&quot; height=&quot;333&quot; alt=&quot;sydney rd with collapsed building&quot; /&gt;&lt;/a&gt;&lt;/center&gt;&lt;br /&gt;&lt;a href=&quot;http://www.flickr.com/photos/penguincakes/sets/72157622605723887/&quot;&gt;Flickr Set&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update:&lt;/b&gt; Turns out the medical centre &lt;i&gt;was&lt;/i&gt; open. Thankfully people realised the building was at risk and left before the collapsed, so no one was injured. &lt;a href=&quot;http://www.theage.com.au/national/patient-flee-as-medical-centre-collapses-20091104-hxa3.html&quot;&gt;Article in The Age&lt;/a&gt;.</description>
  <comments>http://dannipenguin.livejournal.com/285268.html</comments>
  <category>traffic notice</category>
  <category>melbourne</category>
  <category>brunswick</category>
  <category>hyperlocal media</category>
  <lj:security>public</lj:security>
  <lj:reply-count>3</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dannipenguin.livejournal.com/285039.html</guid>
  <pubDate>Sat, 31 Oct 2009 05:46:10 GMT</pubDate>
  <title>Sunday is World Vegan Day</title>
  <link>http://dannipenguin.livejournal.com/285039.html</link>
  <description>If you&apos;re a vegetarian/vegan in Melbourne, come to &lt;a href=&quot;http://www.wvd.org.au/html/2009/&quot;&gt;World Vegan Day&lt;/a&gt; at the Abbortsford Convent. It looks like it&apos;s going to be a blast, with 54 stalls, talks, music and &lt;a href=&quot;http://www.wvd.org.au/html/2009/2009dating.php&quot;&gt;veg*n speed dating&lt;/a&gt; (I kid you not).&lt;br /&gt;&lt;br /&gt;Steph and I are going to eat food, hang out with some of our new Melbourne, veg*n friends and eat more food.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;a href=&quot;http://www.flickr.com/photos/penguincakes/3936685248/&quot; title=&quot;the remnants of a chocolate milkshake by penguincakes, on Flickr&quot;&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3478/3936685248_23b58aae68.jpg&quot; width=&quot;500&quot; height=&quot;333&quot; alt=&quot;the remnants of a chocolate milkshake&quot; /&gt;&lt;/a&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Speaking of things to do in Melbourne (and other Australian cities), there is a &lt;a href=&quot;http://www.equallove.info/&quot;&gt;marriage equality rally&lt;/a&gt; on November 28th. Australians can &lt;a href=&quot;http://www.equallove.info/petition&quot;&gt;sign the petition online&lt;/a&gt;.</description>
  <comments>http://dannipenguin.livejournal.com/285039.html</comments>
  <category>stuff to do</category>
  <category>abbotsford</category>
  <category>marriage</category>
  <category>melbourne</category>
  <category>world vegan day</category>
  <category>equality</category>
  <lj:security>public</lj:security>
  <lj:reply-count>9</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dannipenguin.livejournal.com/284726.html</guid>
  <pubDate>Tue, 27 Oct 2009 01:16:52 GMT</pubDate>
  <title>summer lunches</title>
  <link>http://dannipenguin.livejournal.com/284726.html</link>
  <description>The weather has been so nice, it&apos;s been inspiring me to eat summery foods. This was yesterday&apos;s throw-together lunch (and might also be today&apos;s):&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;a href=&quot;http://www.flickr.com/photos/penguincakes/4046286360/&quot; title=&quot;tofu and salad wraps by penguincakes, on Flickr&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2534/4046286360_5718f2e0e1.jpg&quot; width=&quot;500&quot; height=&quot;333&quot; alt=&quot;tofu and salad wraps&quot; /&gt;&lt;/a&gt;&lt;/center&gt;&lt;br /&gt;For treats, Steph made this &lt;a href=&quot;http://veganabouttown.blogspot.com/2009/10/chocolate-hedgehogs.html&quot;&gt;awesome hedgehog slice&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;a href=&quot;http://www.flickr.com/photos/penguincakes/4046285918/&quot; title=&quot;hedgehog slice by penguincakes, on Flickr&quot;&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3491/4046285918_02c72fa913.jpg&quot; width=&quot;500&quot; height=&quot;333&quot; alt=&quot;hedgehog slice&quot; /&gt;&lt;/a&gt;&lt;/center&gt;</description>
  <comments>http://dannipenguin.livejournal.com/284726.html</comments>
  <category>noms</category>
  <category>food</category>
  <category>lunch</category>
  <category>vegan</category>
  <lj:security>public</lj:security>
  <lj:reply-count>9</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dannipenguin.livejournal.com/284431.html</guid>
  <pubDate>Thu, 22 Oct 2009 01:01:37 GMT</pubDate>
  <title>streaming to Airtunes (Airport Express) with PulseAudio</title>
  <link>http://dannipenguin.livejournal.com/284431.html</link>
  <description>So, being back in Australia, the sun is shining, I&apos;m sat on my sofa and I can&apos;t help but feel like I&apos;m on summer holidays. So I want to crank some &lt;a href=&quot;http://en.wikipedia.org/wiki/Uh_Huh_Her_%28band%29&quot;&gt;Uh Huh Her&lt;/a&gt; on the stereo.&lt;br /&gt;&lt;br /&gt;We have an Airport Express, but using would normally require using Steph&apos;s computer, or the computer downstairs. So instead I thought I&apos;d give the support in PulseAudio a go.&lt;br /&gt;&lt;br /&gt;It&apos;s pretty easy to set up. Install the (Debian/Ubuntu) packages &lt;tt&gt;paprefs pavucontrol pulseaudio-module-raop pulseaudio-module-zeroconf&lt;/tt&gt; (Fedora packages might have different names). Run &lt;tt&gt;paprefs&lt;/tt&gt; and tick the option to discover Airtunes devices.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src=&quot;http://people.collabora.co.uk/~danni/images/Screenshot-PulseAudio%20Preferences.png&quot; alt=&quot;paprefs&quot; /&gt;&lt;/center&gt;&lt;br /&gt;Then using pavucontrol you can set the output device for an application.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src=&quot;http://people.collabora.co.uk/~danni/images/Screenshot-Volume%20Control.png&quot; alt=&quot;pavucontrol&quot; /&gt;&lt;/center&gt;&lt;br /&gt;It&apos;s not perfect yet, it can sometimes get stuck skipping, and you have to move the stream to your local computer and back to the Airport (apparently the buffering is just implemented using windowing, but maybe needs to be smarter?), but it&apos;s working pretty good. Still, it&apos;s insanely neat, and because it&apos;s in PulseAudio, you can redirect &lt;i&gt;any&lt;/i&gt; stream you like (not just from your music player).&lt;br /&gt;&lt;br /&gt;It&apos;s not just Airtunes either. You can stream to other PulseAudio servers (discovered over mDNS) as well as UPnP media renderers.</description>
  <comments>http://dannipenguin.livejournal.com/284431.html</comments>
  <category>pulseaudio</category>
  <category>audio</category>
  <category>airtunes</category>
  <category>hacking</category>
  <category>airport express</category>
  <category>ubuntu</category>
  <lj:security>public</lj:security>
  <lj:reply-count>11</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dannipenguin.livejournal.com/284201.html</guid>
  <pubDate>Tue, 20 Oct 2009 09:24:57 GMT</pubDate>
  <title>Upgrading to Ubuntu Karmic</title>
  <link>http://dannipenguin.livejournal.com/284201.html</link>
  <description>Upgraded to Ubuntu Karmic pre-release today on my Thinkpad X200s. Had two issues:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;machine wouldn&apos;t prompt for the key to unencrypt the hard disk so it didn&apos;t boot. This seems to be Launchpad bug &lt;a href=&quot;https://bugs.launchpad.net/ubuntu/+bug/446591&quot;&gt;446591&lt;/a&gt;. I followed &lt;a href=&quot;http://ubuntuforums.org/showpost.php?p=7159100&amp;amp;postcount=4&quot;&gt;this fix&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;forgot that I had downgraded my Intel graphics driver to v2.4, causing my consoles to break, suspend to RAM to break and only support a broken version of EXA. &lt;tt&gt;apt-get install xserver-xorg-video-intel&lt;/tt&gt; fixed this.&lt;/li&gt;&lt;/ol&gt;Things seem much better now than the mess I had this morning.</description>
  <comments>http://dannipenguin.livejournal.com/284201.html</comments>
  <category>laptop</category>
  <category>karmic</category>
  <category>hacking</category>
  <category>ubuntu</category>
  <lj:security>public</lj:security>
  <lj:reply-count>3</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dannipenguin.livejournal.com/283997.html</guid>
  <pubDate>Sat, 17 Oct 2009 20:04:06 GMT</pubDate>
  <title>improving your code by fixing warnings</title>
  <link>http://dannipenguin.livejournal.com/283997.html</link>
  <description>I don&apos;t know why, but there is a class of software programmer who seem to believe that compiler and runtime warnings are somehow optional, or something that can be cleaned up at a later date. This class of programmer is very common in the commercial software world.&lt;br /&gt;&lt;br /&gt;I&apos;ve never really been sure why people think these warnings can be ignored. Compilers are pretty smart these days, and if a the compiler says you have a type-mismatch for your pointer assignment... there&apos;s a good chance you did something silly.&lt;br /&gt;&lt;br /&gt;Library developers don&apos;t just add all of those pesky assertions to their methods for fun. If your code is outputting critical warnings, you probably shouldn&apos;t be surprised that it&apos;s crashing shortly afterwards. Something clearly went wrong.&lt;br /&gt;&lt;br /&gt;So what can you do? Compiling your code with warnings-as-errors when developing it is a very good step (-Werror in gcc). For runtime warnings, you can probably set an environment variable to make the program abort when reached (e.g. for GLib you can export G_DEBUG=fatal-warnings or fatal-criticals) &amp;mdash; this allows you to attach a debugger when the warning is reached.&lt;br /&gt;&lt;br /&gt;Simple steps for much better code.</description>
  <comments>http://dannipenguin.livejournal.com/283997.html</comments>
  <category>listen to your tools</category>
  <category>work</category>
  <category>best practice</category>
  <category>programming</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dannipenguin.livejournal.com/283705.html</guid>
  <pubDate>Sun, 11 Oct 2009 15:47:37 GMT</pubDate>
  <title>vegan eating in London</title>
  <link>http://dannipenguin.livejournal.com/283705.html</link>
  <description>Went to dinner with vegans &lt;span class=&apos;ljuser  ljuser-name_vegetus&apos; lj:user=&apos;vegetus&apos; style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://vegetus.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://l-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://vegetus.livejournal.com/&apos;&gt;&lt;b&gt;vegetus&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; and &lt;span class=&apos;ljuser  ljuser-name_nevryn&apos; lj:user=&apos;nevryn&apos; style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://nevryn.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://l-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://nevryn.livejournal.com/&apos;&gt;&lt;b&gt;nevryn&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; last night, they asked me what vegan places I&apos;d been to while I was in London. The answer is not that many, because they&apos;re all located in London itself, whereas I&apos;m out in the &apos;burbs. Still, I have managed to visit a few places.&lt;br /&gt;&lt;br /&gt;I want to apologise for the poorness of these photos, I only have my pocket camera, which has two options: blur (without flash) or nuke (with flash).&lt;br /&gt;&lt;br /&gt;I mentioned InSpiral in Camden Town. This meal was ok. I think I missed out by not taking a piece of cake with me though. The food is served out of a bain-marie, and you choose a main + 3 sides. I can&apos;t remember the price, it seemed about right for food in England, which means it cost a fortune in Australian dollars. Seriously regretting not trying the cake.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;a href=&quot;http://www.flickr.com/photos/penguincakes/3979702850/&quot; title=&quot;vege bake and sides by penguincakes, on Flickr&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2464/3979702850_21d379f41e.jpg&quot; width=&quot;500&quot; height=&quot;375&quot; alt=&quot;vege bake and sides&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;i&gt;Lunch at InSpiral&lt;/i&gt;&lt;/center&gt;&lt;br /&gt;I had lunch at VitaOrganic in Soho, a vegan/raw food cafe. &lt;span class=&apos;ljuser  ljuser-name_mandysbitch&apos; lj:user=&apos;mandysbitch&apos; style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://mandysbitch.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://l-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://mandysbitch.livejournal.com/&apos;&gt;&lt;b&gt;mandysbitch&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; and I were meant to go there before going to the theatre, but ran out of time. I ended up going yesterday after visiting Picadilly markets. Food is again served from a bain-marie and charged per scoop, with a flagfall for the plate. Lunch with a smoothie cost £10. Which makes it twice as expensive as Subway. The food was quite nice, but the &lt;a href=&quot;http://www.flickr.com/photos/penguincakes/4000475969/&quot;&gt;smoothie&lt;/a&gt; was fantastic. Seriously, it was like liquid crack. I&apos;m considering going back there before I leave to get another one.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;a href=&quot;http://www.flickr.com/photos/penguincakes/4000475955/&quot; title=&quot;lunch at VitaOrganic by penguincakes, on Flickr&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2500/4000475955_ae10fc561e.jpg&quot; width=&quot;500&quot; height=&quot;375&quot; alt=&quot;lunch at VitaOrganic&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;i&gt;Lunch at VitaOrganic&lt;/i&gt;&lt;/center&gt;&lt;br /&gt;Not wanting to be caught out on the cake-front again, I took a piece of raw apple pie to nom while on my travels. I didn&apos;t like this so much, it was a little too tart. It also got pretty smashed up in my bag, so it was a lot more like apple crumble by the time I ate it.&lt;br /&gt;&lt;br /&gt;Last night we (&lt;span class=&apos;ljuser  ljuser-name_vegetus&apos; lj:user=&apos;vegetus&apos; style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://vegetus.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://l-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://vegetus.livejournal.com/&apos;&gt;&lt;b&gt;vegetus&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;, &lt;span class=&apos;ljuser  ljuser-name_nevryn&apos; lj:user=&apos;nevryn&apos; style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://nevryn.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://l-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://nevryn.livejournal.com/&apos;&gt;&lt;b&gt;nevryn&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; and I) went to Root-master... it&apos;s a vegan bustaurant (that&apos;s a restaurant in an old Routemaster bus &amp;mdash; N.B. Americans, it makes sense if you say route properly). The food was really amazing. So much so that we forced in dessert, I was so full afterwards. There was vegan wine and maybe I got a little bit tipsy. The meal came to about £30 each, which seems expensive by Australian standards, but the others didn&apos;t seem too bothered.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;a href=&quot;http://www.flickr.com/photos/penguincakes/4001262656/&quot; title=&quot;Tofu tower by penguincakes, on Flickr&quot;&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3433/4001262656_47ca7125ab.jpg&quot; width=&quot;500&quot; height=&quot;375&quot; alt=&quot;Tofu tower&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;i&gt;Dinner at Rootmaster&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.flickr.com/photos/penguincakes/4001284148/&quot; title=&quot;berry cheezecake by penguincakes, on Flickr&quot;&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3430/4001284148_f0996a5b0b.jpg&quot; width=&quot;500&quot; height=&quot;375&quot; alt=&quot;berry cheezecake&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;i&gt;Dessert at Rootmaster&lt;/i&gt;&lt;/center&gt;&lt;br /&gt;Disappointingly, I learnt that unlike in Australia, Subway veggie patties here are not vegan. They contain egg. I have to admit, the difference in texture did have me wondering (they were just too well bound), but I thought it was just paranoia. I&apos;m feeling pretty bad, because I&apos;ve had like 9 of them. At least I&apos;ve found out now.&lt;br /&gt;&lt;br /&gt;Today (Sunday), I decided that I would go to Waitrose, and throw together the classic meal for when you&apos;re travelling through country towns: a salad roll. Whoever came up with the idea of prepackaged salad is a genius, because it enables the creation of salad rolls with nothing but your hands. This roll includes some salsa I found while hunting for vegan snacks to last me the final week.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;a href=&quot;http://www.flickr.com/photos/penguincakes/4001284166/&quot; title=&quot;lunch ala Waitrose by penguincakes, on Flickr&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2544/4001284166_17338d77b5.jpg&quot; width=&quot;500&quot; height=&quot;375&quot; alt=&quot;lunch ala Waitrose&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;i&gt;Lunch ala Waitrose&lt;/i&gt;&lt;/center&gt;</description>
  <comments>http://dannipenguin.livejournal.com/283705.html</comments>
  <category>london</category>
  <category>food</category>
  <category>photos</category>
  <category>travel</category>
  <category>vegan</category>
  <lj:security>public</lj:security>
  <lj:reply-count>23</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dannipenguin.livejournal.com/283590.html</guid>
  <pubDate>Fri, 09 Oct 2009 19:47:11 GMT</pubDate>
  <title>and now for something from the school of pure evil (setting a background on a GtkTextView)</title>
  <link>http://dannipenguin.livejournal.com/283590.html</link>
  <description>This is something that comes up from time to time, someone wants to set some attractive background on a GtkTextView. Well, unfortunately for you, the theme engine isn&apos;t able to help you here because GtkTextView never calls gtk_paint_box() or friends. Still, today I stared at the code for a bit and came up with a particularly hacky solution: &lt;a href=&quot;http://people.collabora.co.uk/~danni/files/textview-background.c&quot;&gt;see for yourself&lt;/a&gt;. You have to handle everything yourself, resizing (hook into size-allocate), scaling whatever is needed. You could probably cheat though and call something like gtk_paint_box() and then let the theme engine do that bit of the work for you... I&apos;ve not tried.&lt;br /&gt;&lt;br /&gt;Just to prove it works:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src=&quot;http://people.collabora.co.uk/~danni/images/Screenshot-textview-background.png&quot; /&gt;&lt;/center&gt;&lt;br /&gt;This depends on what is basically an implementation detail of the widget, and I make no promises that it will continue working in the future. With that warning in mind, do what you will with the code.&lt;br /&gt;&lt;br /&gt;P.S. the background image is a photo of the art in my hotel room. If I was Google, I&apos;d totally sue.</description>
  <comments>http://dannipenguin.livejournal.com/283590.html</comments>
  <category>hotel</category>
  <category>hacking</category>
  <category>kludge</category>
  <category>gtk+</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dannipenguin.livejournal.com/283360.html</guid>
  <pubDate>Wed, 07 Oct 2009 20:02:58 GMT</pubDate>
  <title>halfway mark</title>
  <link>http://dannipenguin.livejournal.com/283360.html</link>
  <description>So I&apos;ve more or less reached the halfway point of my visit to England. Besides working, I&apos;ve been trying to make the most of my time here. It turns out that a number of my friends are in London at the moment.&lt;br /&gt;&lt;br /&gt;Met up with &lt;span class=&apos;ljuser  ljuser-name_mandysbitch&apos; lj:user=&apos;mandysbitch&apos; style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://mandysbitch.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://l-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://mandysbitch.livejournal.com/&apos;&gt;&lt;b&gt;mandysbitch&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; and a friend of hers last week for drinks and dinner at a vegetarian, queer cafe (First Out), which had a distressingly small number of vegan options.&lt;br /&gt;&lt;br /&gt;On Saturday, kov and I met up with &lt;span class=&apos;ljuser  ljuser-name_resiak&apos; lj:user=&apos;resiak&apos; style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://resiak.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://l-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://resiak.livejournal.com/&apos;&gt;&lt;b&gt;resiak&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; in Camden on our way to Cambridge, who was in London for the weekend (and otherwise we wouldn&apos;t see). Went to InSpiral Lounge, which was really nice. I wish I&apos;d taken a piece of take-away cake though. Overall I was actually disappointed with Camden. Instead of being filled with really interesting, out-there market stalls, it seemed to be filled with lots of generic crap, rastafarian hats, beads, pirate t-shirts, etc. There were some awesome stalls, like the person who was selling turn of the century luggage, and there were some awesome clothes, but I don&apos;t really have any space to bring stuff back. I tried and failed to find the Secret Society of Vegans, which was disappointing. I think I must have walked right past it too.&lt;br /&gt;&lt;br /&gt;Met up with &lt;span class=&apos;ljuser  ljuser-name_mandysbitch&apos; lj:user=&apos;mandysbitch&apos; style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://mandysbitch.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://l-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://mandysbitch.livejournal.com/&apos;&gt;&lt;b&gt;mandysbitch&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; again last night to go and see &lt;a href=&quot;http://www.speakingintonguestheplay.com/&quot;&gt;Speaking in Tongues&lt;/a&gt;, which funnily enough is an Australian play. I really enjoyed it. I&apos;ve not seen much theatre, so I&apos;m not really familiar with the sorts of devices they employ compared with film, but the way some of the scenes were executed was really quite clever.&lt;br /&gt;&lt;br /&gt;The first scene was two separate conversations, in two separate hotel rooms but happening on the same set. As if the two sets had been superimposed. The lines of dialogue would frequently coincide, being said simultaneously by two actors from the two separate conversations. Each of the couples in the hotel room was there with someone they&apos;d met that night, planning to betray their husband/wife... then you realised that each was married to the character from the other instance. The play also used a lot of multiplexing between two separate conversations happening on the stage simultaneously (between the front, lower stage and the rear upper stage); where the dialogue would move between two separate conversations, but between them the story unfolded.&lt;br /&gt;&lt;br /&gt;Wandered into Soho afterwards to see where we&apos;d been planning to go to dinner if I hadn&apos;t been amazingly late (British trains seem to spend a lot of time stopped). Might find out if someone wants to go there on the weekend or next week.&lt;br /&gt;&lt;br /&gt;Hoping to see &lt;span class=&apos;ljuser  ljuser-name_vegetus&apos; lj:user=&apos;vegetus&apos; style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://vegetus.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://l-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://vegetus.livejournal.com/&apos;&gt;&lt;b&gt;vegetus&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; and &lt;span class=&apos;ljuser  ljuser-name_nixwilliams&apos; lj:user=&apos;nixwilliams&apos; style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://nixwilliams.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://l-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://nixwilliams.livejournal.com/&apos;&gt;&lt;b&gt;nixwilliams&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; and &lt;span class=&apos;ljuser  ljuser-name_daniel_bethany&apos; lj:user=&apos;daniel_bethany&apos; style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://daniel-bethany.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://l-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://daniel-bethany.livejournal.com/&apos;&gt;&lt;b&gt;daniel_bethany&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; in the coming week, also my Mum and Nan (seriously everyone is in the UK at the moment).</description>
  <comments>http://dannipenguin.livejournal.com/283360.html</comments>
  <category>life</category>
  <category>travel</category>
  <lj:security>public</lj:security>
  <lj:reply-count>7</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dannipenguin.livejournal.com/282957.html</guid>
  <pubDate>Sat, 26 Sep 2009 04:55:26 GMT</pubDate>
  <title>cartographers are expressly forbidden from joyriding during work hours</title>
  <link>http://dannipenguin.livejournal.com/282957.html</link>
  <description>Flying to the UK tonight for three weeks.&lt;br /&gt;&lt;br /&gt;Will be staying on the outskirts of London.</description>
  <comments>http://dannipenguin.livejournal.com/282957.html</comments>
  <category>travel</category>
  <category>work</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dannipenguin.livejournal.com/282771.html</guid>
  <pubDate>Tue, 22 Sep 2009 03:18:45 GMT</pubDate>
  <title>key maintenance</title>
  <link>http://dannipenguin.livejournal.com/282771.html</link>
  <description>For those who care about things like GPG keys, I generated a new GPG key today. My old key wasn&apos;t compromised, but it&apos;s been around for a long time and is full of lots of old subkeys and my old name and stuff. I&apos;ve signed my new key with my old key and set the expiry for my old key to tomorrow (I&apos;ve not revoked it &amp;mdash; should I?).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update:&lt;/b&gt; it turns out that everyone in Debian is now generating 4096 RSA+RSA keys (&lt;a href=&quot;http://keyring.debian.org/creating-key.html&quot;&gt;Debian instructions&lt;/a&gt;). May as well be future proof, so I&apos;ve revoked the key from this afternoon and generated another one. Thanks to Sjoerd for the tip.&lt;br /&gt;&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;I&apos;ve pushed the keys to the keyserver, but for reference:&lt;br /&gt;&lt;pre&gt;pub   4096R/4EE4E30F 2009-09-22 [expires: 2011-09-22]
      Key fingerprint = 5ED7 A3C0 F83A D937 300B  DA54 82EC F846 4EE4 E30F

uid                  Danielle Madeley &amp;lt;danielle@madeley.id.au&amp;gt;
uid                  Danielle Madeley &amp;lt;danielle.madeley@collabora.co.uk&amp;gt;

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.9 (GNU/Linux)

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
=Nihe
-----END PGP PUBLIC KEY BLOCK-----&lt;/pre&gt;Please don&apos;t sign a key from someone you aren&apos;t sure is the real person, yadda yadda.</description>
  <comments>http://dannipenguin.livejournal.com/282771.html</comments>
  <category>gpg</category>
  <category>work</category>
  <category>crypto</category>
  <category>keys</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dannipenguin.livejournal.com/282562.html</guid>
  <pubDate>Tue, 22 Sep 2009 02:23:47 GMT</pubDate>
  <title>quick and dirty icon theme viewer</title>
  <link>http://dannipenguin.livejournal.com/282562.html</link>
  <description>So very often I find myself trying to find the name of an icon in the icon theme, and I end up having to search through my icon theme with a combination of &lt;tt&gt;find&lt;/tt&gt; and &lt;tt&gt;eog&lt;/tt&gt;. Usually I miss the icon on my first pass through.&lt;br /&gt;&lt;br /&gt;Today I cracked, and decided to hammer together a quick and dirty viewer and searcher for the icon theme which looks something like this:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src=&quot;http://people.collabora.co.uk/~danni/images/icon-theme-viewer.png&quot; alt=&quot;icon theme viewer&quot; /&gt;&lt;/center&gt;&lt;br /&gt;It&apos;s written in PyGTK and so far only has the single feature of &apos;Search&apos; (this is my 90% case). It could be a lot more advanced if people wanted to hack on it: it could select themes, show whether an icon is in this theme or a parent theme, what sizes are available, etc. I will certainly accept patches!&lt;br /&gt;&lt;br /&gt;Hopefully other people find this useful too. &lt;a href=&quot;http://git.collabora.co.uk/?p=user/danni/icon-theme-viewer.git;a=summary&quot;&gt;Source code is here&lt;/a&gt;.</description>
  <comments>http://dannipenguin.livejournal.com/282562.html</comments>
  <category>gtk</category>
  <category>python</category>
  <category>icon themes</category>
  <category>hacking</category>
  <category>tool</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dannipenguin.livejournal.com/282160.html</guid>
  <pubDate>Sun, 20 Sep 2009 07:23:45 GMT</pubDate>
  <title>new hackergotchi</title>
  <link>http://dannipenguin.livejournal.com/282160.html</link>
  <description>I really don&apos;t look like my hackergotchi. Among other reasons, this is because my hackergotchi is something like 7 years old. Rather than finishing the vacuuming, I spent a bit of time redoing it today:&lt;br /&gt;&lt;center&gt;&lt;img src=&quot;http://oracle.bridgewayconsulting.com.au/~danni/misc/hackergotchi.png&quot; alt=&quot;hackergotchi&quot; /&gt;&lt;/center&gt;It would be awesome if the maintainers of any planets could update this for me (also fix up my name and IRC nick too, if it&apos;s not been done). Thanks :)</description>
  <comments>http://dannipenguin.livejournal.com/282160.html</comments>
  <category>hackergotchi</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dannipenguin.livejournal.com/281924.html</guid>
  <pubDate>Mon, 14 Sep 2009 02:03:25 GMT</pubDate>
  <title>GTK+ client-side-windows and threading</title>
  <link>http://dannipenguin.livejournal.com/281924.html</link>
  <description>Some people (including me) had noticed that recent Empathy&apos;s video calling was breaking with recent GTK+ builds. Some people (not including me) were smart enough to work out &lt;a href=&quot;https://bugzilla.gnome.org/show_bug.cgi?id=594890&quot;&gt;the bug was related to client-side-windows&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In CSW-enabled GTK+, calls to GDK_WINDOW_XID() &amp;mdash; the function with returns the XID of a GdkWindow &amp;mdash; implicitly makes a call to gdk_window_ensure_native() before retrieving the XID. It does this so that there is a window on the X server to return the XID for, and thus ideally no one&apos;s application will break under CSW. The problem in Empathy was that the first call to GDK_WINDOW_XID() happened in a thread, which in the olden days would have been harmless, but now it can magically result in your window being allocated server side.&lt;br /&gt;&lt;br /&gt;The fix for Empathy (and maybe your program to) is to call gdk_window_ensure_native() as soon as the widget is realized. In Empathy we&apos;re calling GDK_WINDOW_XID(), because we don&apos;t want to depend on GTK+ 2.18, which looks a lot like &lt;a href=&quot;http://bugzilla-attachments.gnome.org/attachment.cgi?id=143128&quot;&gt;this&lt;/a&gt;.</description>
  <comments>http://dannipenguin.livejournal.com/281924.html</comments>
  <category>client-side-windows</category>
  <category>gtk</category>
  <category>bugfixes</category>
  <category>empathy</category>
  <category>hacking</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://dannipenguin.livejournal.com/281790.html</guid>
  <pubDate>Thu, 10 Sep 2009 11:52:57 GMT</pubDate>
  <title>changing commit authors in git (renaming commits)</title>
  <link>http://dannipenguin.livejournal.com/281790.html</link>
  <description>&lt;b&gt;WARNING:&lt;/b&gt; this command is like a running around with loaded shotgun and a loose trigger. I&apos;m not kidding guys. It&apos;s like the kettle that turns itself on in the middle of the night and sets your house on fire. Use this knowledge with extreme caution.&lt;br /&gt;&lt;br /&gt;Let&apos;s say that you have a whole branch you&apos;ve been writing for work, which has all been committed with the wrong name and email address, and you&apos;d like to fix that before the branch is merged into the trunk. Editing every single commit would really suck: thankfully, &lt;tt&gt;git filter-branch&lt;/tt&gt; is here to help.&lt;br /&gt;&lt;br /&gt;Effectively, this works by running a little command on every commit in the branch, and by fiddling environment variables, you can change what the new commits look like. It &lt;b&gt;does&lt;/b&gt; change your commit ids, so any other branches that lean on your branch will need rebasing, and obviously it isn&apos;t fastforwardable (you&apos;ll need to push --force).&lt;br /&gt;&lt;br /&gt;Anyway, it goes something like this:&lt;br /&gt;&lt;pre&gt;git filter-branch -d /tmp/git-filter-branch --env-filter \
    &apos;if [ &quot;$GIT_AUTHOR_NAME&quot; = &quot;Danielle&quot; ]; then \
         export GIT_AUTHOR_NAME=&quot;Danielle Madeley&quot; GIT_AUTHOR_EMAIL=&quot;danielle.madeley@collabora.co.uk&quot;;\
     fi&apos; \
   somecommit..HEAD&lt;/pre&gt;You can also alter &lt;tt&gt;GIT_COMMITTER_NAME&lt;/tt&gt; and &lt;tt&gt;GIT_COMMITTER_EMAIL&lt;/tt&gt; if you need.&lt;br /&gt;&lt;br /&gt;Like I said before, if this melts your git repo, I&apos;m very sorry. You made a copy first, right?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update:&lt;/b&gt; Brenda Wallace has a &lt;a href=&quot;http://coffee.geek.nz/how-change-author-git.html&quot;&gt;prior, similar solution&lt;/a&gt;.</description>
  <comments>http://dannipenguin.livejournal.com/281790.html</comments>
  <category>tricks</category>
  <category>git</category>
  <category>hacking</category>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
</item>
</channel>
</rss>
