<?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/ -->
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:lj="http://www.livejournal.com">
  <id>urn:lj:livejournal.com:atom1:cgwalters</id>
  <title>cgwalters</title>
  <subtitle>cgwalters</subtitle>
  <author>
    <name>cgwalters</name>
  </author>
  <link rel="alternate" type="text/html" href="http://cgwalters.livejournal.com/"/>
  <link rel="self" type="text/xml" href="http://cgwalters.livejournal.com/data/atom"/>
  <updated>2009-03-19T19:20:11Z</updated>
  <lj:journal userid="12647998" username="cgwalters" type="personal"/>
  <link rel="service.feed" type="application/x.atom+xml" href="http://cgwalters.livejournal.com/data/atom" title="cgwalters"/>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cgwalters:24146</id>
    <link rel="alternate" type="text/html" href="http://cgwalters.livejournal.com/24146.html"/>
    <link rel="self" type="text/xml" href="http://cgwalters.livejournal.com/data/atom/?itemid=24146"/>
    <title>Words to keep in mind</title>
    <published>2009-03-19T19:20:11Z</published>
    <updated>2009-03-19T19:20:11Z</updated>
    <content type="html">&lt;blockquote&gt;&lt;br /&gt;We reject: kings, presidents and voting.&lt;br /&gt;We believe in: rough consensus and running code.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;From &lt;a href="http://en.wikipedia.org/wiki/David_D._Clark"&gt;David D Clark&lt;/a&gt;.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cgwalters:23852</id>
    <link rel="alternate" type="text/html" href="http://cgwalters.livejournal.com/23852.html"/>
    <link rel="self" type="text/xml" href="http://cgwalters.livejournal.com/data/atom/?itemid=23852"/>
    <title>Further awesome</title>
    <published>2009-02-02T23:17:14Z</published>
    <updated>2009-02-02T23:17:14Z</updated>
    <content type="html">&lt;p&gt;So earlier I raved about how &lt;a href="http://cgwalters.livejournal.com/6027.html"&gt;Firebug is made of awesome&lt;/a&gt;.  One of those Free Software projects that just saves you massive amounts of time as a developer, and really raises the quality bar you expect from tools.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;There's one other project I should have mentioned earlier in this category, which is &lt;a href="http://valgrind.org/"&gt;Valgrind&lt;/a&gt;.  I'm sure nearly all Planet Fedora/GNOME developer readers know if it (though I was surprised there were still people not using Firebug), but Valgrind almost makes you feel like if it was a bit smarter it could write the code itself, and you could kick back on the beach and watch it.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;But besides praising Firebug and Valgrind, I wanted to link to &lt;a href="http://www.antlr.org/"&gt;ANTLR&lt;/a&gt; as also raising the Free Software quality bar.  Now, probably a lot fewer programmers have the need for a parser generator than need to debug HTML/JS or C, but I have to say - if you need a parser, ANTLR is also made of awesome.  It's not just that the parser generator is powerful, documented etc.  What definitely takes ANTLR a notch up is that it actually comes with &lt;a href="http://www.antlr.org/works/index.html"&gt;a custom IDE&lt;/a&gt; for writing and interactively debugging your grammar.  All Free Software, and pretty sexy too (Though sadly the screenshots are on a Mac).  I also started using another nice Terrence library, &lt;a href="http://www.stringtemplate.org/"&gt;StringTemplate&lt;/a&gt; in a project recently, which is what motivated this blog post.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Are there any indispensible tools or libraries that have really impressed &lt;i&gt;you&lt;/i&gt; lately?</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cgwalters:23634</id>
    <link rel="alternate" type="text/html" href="http://cgwalters.livejournal.com/23634.html"/>
    <link rel="self" type="text/xml" href="http://cgwalters.livejournal.com/data/atom/?itemid=23634"/>
    <title>Not in DOS anymore</title>
    <published>2009-01-30T20:02:32Z</published>
    <updated>2009-01-30T20:02:32Z</updated>
    <content type="html">&lt;p&gt;I have to say, &lt;a href="http://spin.atomicobject.com/2009/01/30/ruby-for-desktop-applications-yes-we-can"&gt;this app&lt;/a&gt; makes quite a jump from their old DOS-based UI.  I would have no idea how to use it, but I'm sure it makes sense after you get training.  Good to know one fewer company's custom app is not tied to MSDN and Windows anymore, moving on to Free Software.  I wish I could make applications look at that good.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cgwalters:23514</id>
    <link rel="alternate" type="text/html" href="http://cgwalters.livejournal.com/23514.html"/>
    <link rel="self" type="text/xml" href="http://cgwalters.livejournal.com/data/atom/?itemid=23514"/>
    <title>And life gets a little better</title>
    <published>2009-01-27T17:50:40Z</published>
    <updated>2009-01-27T21:02:09Z</updated>
    <content type="html">&lt;p&gt;You know the feeling.  You're happily sitting there, coding away at some graphics or other code in C+GObject, and then comes the point where you need to add a signal to your object.  But your object doesn't have any signals yet, so you have to go find and copy the boilerplate.  Ok, not a big deal, you say to yourself, it only takes a minute or two.  Then you notice your signal takes multiple parameters, and thus you need to generate &lt;a href="http://library.gnome.org/devel/gobject/unstable/glib-genmarshal.html"&gt;a marshaler&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;At that point you go to add one to your &lt;tt&gt;foo-marshal.list&lt;/tt&gt; file, only to realize you don't have one yet!  Now you need to copy a chunk Automake boilerplate, and apparently if you want to do it really correctly it involves three times as much boilerplate involving &lt;a href="http://svn.gnome.org/svn/gtk+/trunk/gtk/Makefile.am"&gt;stamp files&lt;/a&gt; and other monsters.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;It's around this point you're probably thinking that finding medieval torture devices and using them on yourself on live television would be a less painful remunerative occupation than programming.  But there is hope - the awesome jdahlin wrote &lt;a href="http://bugzilla.gnome.org/show_bug.cgi?id=401080"&gt;a patch&lt;/a&gt;.  The problem - it's not in GLib yet, and it's unclear when it will be.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;So maybe you don't buy into the the pitch about polyglot applications yet, but the new &lt;a href="http://mail.gnome.org/archives/gnome-announce-list/2009-January/msg00069.html"&gt;GObject Introspection release&lt;/a&gt;, because it already depends on &lt;a href="http://sourceware.org/libffi/"&gt;libffi&lt;/a&gt;, contains a slightly tweaked version of jdahlin's patch, known as &lt;b&gt;gi_cclosure_marshal_generic&lt;/b&gt;.  Depend on introspection, and never deal with marshalers and other torture devices again!</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cgwalters:23179</id>
    <link rel="alternate" type="text/html" href="http://cgwalters.livejournal.com/23179.html"/>
    <link rel="self" type="text/xml" href="http://cgwalters.livejournal.com/data/atom/?itemid=23179"/>
    <title>A few releases in brief</title>
    <published>2009-01-15T15:42:59Z</published>
    <updated>2009-01-15T17:01:02Z</updated>
    <content type="html">&lt;p&gt;&lt;a href="http://dbus.freedesktop.org/"&gt;DBus 1.2.12 and 1.2.4.4permissive&lt;/a&gt; are out; this release has a good number of virtues, among them that it has &lt;a href="https://bugs.freedesktop.org/show_bug.cgi?id=18064"&gt;significantly faster&lt;/a&gt; transmission of fixed array types; see the announcement for details.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Guido Günther is now maintaining, and has released a &lt;a href="http://mail.gnome.org/archives/gnome-announce-list/2009-January/msg00045.html"&gt;new version of krb5-auth-dialog&lt;/a&gt;.  Thanks Guido!&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cgwalters:22945</id>
    <link rel="alternate" type="text/html" href="http://cgwalters.livejournal.com/22945.html"/>
    <link rel="self" type="text/xml" href="http://cgwalters.livejournal.com/data/atom/?itemid=22945"/>
    <title>From Here To There</title>
    <published>2009-01-14T22:01:40Z</published>
    <updated>2009-01-14T22:01:40Z</updated>
    <content type="html">&lt;p&gt;&lt;a href="http://live.gnome.org/GObjectIntrospection/FromHereToThere"&gt;From Here To There&lt;/a&gt; is a quick introductory tutorial for people interested in building multi-level applications using the GObject stack, and having your own application be split between C and your choice of runtime.  This tutorial uses Clutter and JavaScript, as we're using for &lt;a href="http://live.gnome.org/Boston2008/GUIHackfest/WindowManagementAndMore"&gt;gnome-shell&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I've been working for a while now on two applications using the system (gnome-shell, and a personal project not yet ready for announcement), and while there is still a fair bit more introspection system work to do, so far I'm pretty happy with how it's worked out for both projects.  My personal project is actually a mashup of C for some graphics and system stuff, &lt;a href="http://live.gnome.org/JGIR"&gt;Java (JGIR)&lt;/a&gt; for the core application logic, and &lt;a href="http://groovy.codehaus.org/"&gt;Groovy&lt;/a&gt; for some scripting and extensions.  It's quite polyglot; I'm practicing what I &lt;a href="http://cgwalters.livejournal.com/17292.html"&gt;preach&lt;/a&gt;.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cgwalters:22705</id>
    <link rel="alternate" type="text/html" href="http://cgwalters.livejournal.com/22705.html"/>
    <link rel="self" type="text/xml" href="http://cgwalters.livejournal.com/data/atom/?itemid=22705"/>
    <title>DBus 1.2.10 and DBus 1.2.4.2permissive</title>
    <published>2008-12-19T20:57:08Z</published>
    <updated>2008-12-19T20:58:45Z</updated>
    <content type="html">&lt;p&gt;Freedesktop.org vendors, please get the new &lt;a href="http://lists.freedesktop.org/archives/dbus/2008-December/010769.html"&gt;DBus 1.2.4.2permissive&lt;/a&gt; release into your development stream as soon as possible, so DBus service developers and testers can help cooperate on fixing the &lt;a href="http://bugs.freedesktop.org/show_bug.cgi?id=18980"&gt;broken services&lt;/a&gt;.  Thanks!&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: On my Fedora 10 system I got a lot of spam due to NetworkManager talking to HAL without &lt;a href="http://bugs.freedesktop.org/show_bug.cgi?id=18985"&gt;this patch&lt;/a&gt; - so you likely want to get that one in at the same time.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cgwalters:22508</id>
    <link rel="alternate" type="text/html" href="http://cgwalters.livejournal.com/22508.html"/>
    <link rel="self" type="text/xml" href="http://cgwalters.livejournal.com/data/atom/?itemid=22508"/>
    <title>HotSSH 0.2.6: Now with less reason for your sysadmin to come after you with an axe</title>
    <published>2008-12-19T04:11:50Z</published>
    <updated>2008-12-19T04:11:50Z</updated>
    <content type="html">&lt;p&gt;&lt;a href="http://projects.gnome.org/hotssh/"&gt;HotSSH&lt;/a&gt; 0.2.6 is &lt;a href="http://ftp.gnome.org/pub/GNOME/sources/hotssh/0.2/"&gt;released&lt;/a&gt;.  It fixes a number of bugs, probably most important is one where we could repeatedly try (and fail) to make a new connection every 3 seconds.  System administrators tend to get antsy about stuff in their log files, so if they were threatening to bodily harm etc., well, HotSSH 0.2.6 is the ssh client you were looking for!&lt;br /&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cgwalters:22189</id>
    <link rel="alternate" type="text/html" href="http://cgwalters.livejournal.com/22189.html"/>
    <link rel="self" type="text/xml" href="http://cgwalters.livejournal.com/data/atom/?itemid=22189"/>
    <title>If pain exists to teach one a lesson...</title>
    <published>2008-12-07T22:08:14Z</published>
    <updated>2008-12-07T22:08:14Z</updated>
    <content type="html">&lt;p&gt;...then I feel there must be a lot to learn from &lt;a href="http://lists.freedesktop.org/archives/dbus/2008-December/010702.html"&gt;this painful bug&lt;/a&gt;.  So far I've learned to always delay pushes into the Fedora queue, even for security updates.  Anyways, apologies for the trouble; this is really an awful bug.  We'll probably be turning up cases where developers had relied on the erroneous permission for some time.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cgwalters:21907</id>
    <link rel="alternate" type="text/html" href="http://cgwalters.livejournal.com/21907.html"/>
    <link rel="self" type="text/xml" href="http://cgwalters.livejournal.com/data/atom/?itemid=21907"/>
    <title>Tomorrow</title>
    <published>2008-11-05T19:39:20Z</published>
    <updated>2008-11-05T19:39:20Z</updated>
    <content type="html">&lt;p&gt;While traveling post-GUADEC in Turkey, I ended up after dinner one night walking next to a man speaking English to his wife, and like most people in a foreign country I was interested to talk to someone of similar culture.  It turned out though he was Iranian, now living in Dubai with his American wife.  He was a very intelligent person, a businessman of some sort and we had a discussion about world affairs as we walked back to our respective hotels.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;He obviously had a broad world view and experience, so it was a good conversation.  Of course the presidental run came up, and when I mentioned I supported Obama, he shook his head and I remember he said to me confidently and with some cynicism, "John McCain will be your next president". I had felt so sure that America would warm to this eloquent, charismatic scholar of constitutional law, but at that moment I experienced some lingering doubt which stayed for a week at least.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Not that he's likely to be reading this blog, but I'd just like to say - told you so!&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cgwalters:21617</id>
    <link rel="alternate" type="text/html" href="http://cgwalters.livejournal.com/21617.html"/>
    <link rel="self" type="text/xml" href="http://cgwalters.livejournal.com/data/atom/?itemid=21617"/>
    <title>Today</title>
    <published>2008-11-05T00:37:08Z</published>
    <updated>2008-11-05T00:37:08Z</updated>
    <content type="html">&lt;p&gt;A rare nontechnical blog entry from me today; I have had some technical ones queued up in the back of my mind for a bit, but it was hard to spend today thinking about technology.  Or, at least other than as a delivery mechanism for election results.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Before Obama decided to run for president, I read an article about possible presidential contenders which included him. The article linked to &lt;a href="http://www.youtube.com/watch?v=OmWlrtpqp40"&gt;this YouTube video&lt;/a&gt; of Obama.  I was struck by his charisma and, doing a bit more research, his extraordinary intelligence and hopeful message.  This guy didn't get into an ivy league school via the &lt;a href="http://en.wikipedia.org/wiki/Old_boy_network"&gt;old boy network&lt;/a&gt; like Bush did.  I decided within that hour that if he did run, I would contribute to his campaign, the first time I'd ever really done anything approaching active participation in politics beyond voting.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I have a feeling that's true for a lot of Americans right now.  Anyways, I planned to keep this blog short.  I just had to write something though - it's an immensely inspiring day today.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cgwalters:21421</id>
    <link rel="alternate" type="text/html" href="http://cgwalters.livejournal.com/21421.html"/>
    <link rel="self" type="text/xml" href="http://cgwalters.livejournal.com/data/atom/?itemid=21421"/>
    <title>finding algorithms</title>
    <published>2008-10-07T02:24:54Z</published>
    <updated>2008-10-07T02:24:54Z</updated>
    <content type="html">&lt;p&gt;Dear lazyweb, I recently found myself having a set of Unicode strings (in main memory) and the desire to search all of them for a particular prefix (&lt;i&gt;not substring&lt;/i&gt;).  For bonus points, let's say I want to do it in parallel (seems like an easily parallelizable problem, although at worst you can divide-and-conquer for a given number N of processors).  The constraints are that the set of strings can change, but not very often usually.  I don't want &lt;i&gt;too&lt;/i&gt; large of a hit to compute tables and the like though.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The real question is - how do &lt;b&gt;you&lt;/b&gt; find papers (and implementations thereof) for computer science problems like this?  My first instinct was to get an ACM subscription, which I did.  Their search turns out to be mediocre, and then I discovered Wikipedia has &lt;a href="http://en.wikipedia.org/wiki/String_searching_algorithm"&gt;useful pages&lt;/a&gt; on these kinds of things.  Wikipedia also has the winning feature of linking to &lt;a href="http://johannburkard.de/software/stringsearch/"&gt;quality free software implementations&lt;/a&gt; thereof.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;On this particular problem, a lot of the literature is around substring matching which isn't what I want, at least not directly.  Still looking.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cgwalters:21209</id>
    <link rel="alternate" type="text/html" href="http://cgwalters.livejournal.com/21209.html"/>
    <link rel="self" type="text/xml" href="http://cgwalters.livejournal.com/data/atom/?itemid=21209"/>
    <title>Dear GObject/C library authors</title>
    <published>2008-10-06T20:21:12Z</published>
    <updated>2008-10-06T20:26:22Z</updated>
    <content type="html">&lt;p&gt;Get ready - it's coming.  At the &lt;a href="http://live.gnome.org/Boston2008"&gt;GNOME Summit&lt;/a&gt; this weekend we're having a hackfest on &lt;a href="http://live.gnome.org/GObjectIntrospection/"&gt;introspection&lt;/a&gt;.   As a programmer working on a GObject library, here's what you need to understand:&lt;/p&gt;&lt;br /&gt;&lt;h3&gt;Using gtk-doc annotations&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;Just parsing the C code isn't enough - we sometimes need additional metadata.   Here's an example:&lt;br /&gt;&lt;pre&gt;
/**
 * gtk_list_store_set_column_types: 
 * @store: a #GtkListStore
 * @n_columns:
 * @types: &amp;lt;array,length=n_columns&amp;gt;: List of types
 */
void
gtk_list_store_set_column_types (GtkListStore *list_store,
                                 gint          n_columns,
                                 GType        *types);
&lt;/pre&gt;&lt;br /&gt;There are &lt;a href="http://live.gnome.org/GObjectIntrospection/Annotations"&gt;more examples here&lt;/a&gt;.  This syntax hasn't really seen much bikeshedding yet, and to be honest it's grown rather organically.  So things could change.  But the goal is for the annotations to be concise, fit in with gtk-doc, and support a variety of attributes; we don't want to require a totally different IDL format.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;h3&gt;Add your library to gir-repository and check it&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;The current thought on deploying introspection is to have two phases.  In the first "unstable" phase, we will also have two separate modules: &lt;a href="http://svn.gnome.org/svn/gobject-introspection/trunk"&gt;gobject-introspection&lt;/a&gt; and &lt;a href="http://svn.gnome.org/svn/gir-repository/trunk"&gt;gir-repository&lt;/a&gt;.  It's unclear yet whether the former will remain separate from glib or not in the long term, but expect it to exist separately for now.  For &lt;tt&gt;gir-repository&lt;/tt&gt;, the long term plan is to integrate everything into the relevant modules themselves, but for the next 6 months or so while we're finalizing bits, we will keep annotations and code to invoke the scanner inside this centralized module.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;So for now, you can add your library (if it isn't there already) to gir-repository by filing a patch in &lt;a href="http://bugzilla.gnome.org/"&gt;Bugzilla&lt;/a&gt; (glib/introspection), or pastebin on &lt;tt&gt;irc.gimp.org:#introspection&lt;/tt&gt;.  After you have your library successfully parsed by the scanner, the first task is to inspect the generated &lt;tt&gt;.gir&lt;/tt&gt; file.  This XML file describes the parsed API.  Try searching in particular for any APIs you think are tricky.&lt;/p&gt;&lt;br /&gt;&lt;h3&gt;Try out your library in a binding&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;After inspecting the &lt;tt&gt;.gir&lt;/tt&gt; file, you can try out your API from one of the bindings such as &lt;a href="http://live.gnome.org/PyBank"&gt;PyBank&lt;/a&gt; or &lt;a href="http://live.gnome.org/JGIR"&gt;JGIR&lt;/a&gt;, with more coming.  We expect to do some PyBank hacking in particular at the summit, and hopefully get the Spidermonkey and Mono bindings further along.  There is a lot to do for all the bindings, but I hope that introspection can be a strong focus point for collaboration between the bindings.&lt;/p&gt;&lt;br /&gt;&lt;h3&gt;Writing bindable APIs&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;I've started a wiki page about how you can keep your C code &lt;a href="http://live.gnome.org/GObjectIntrospection/WritingBindingableAPIs"&gt;easily bindable&lt;/a&gt;.  More content appreciated!  This page will likely be a bit fluid as we determine both what is supported in the introspection core, and how its concepts map to languages.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;That's it for now - remember if you're in the Boston to come to the summit!&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cgwalters:20763</id>
    <link rel="alternate" type="text/html" href="http://cgwalters.livejournal.com/20763.html"/>
    <link rel="self" type="text/xml" href="http://cgwalters.livejournal.com/data/atom/?itemid=20763"/>
    <title>Cambridge (US), 6pm today</title>
    <published>2008-09-29T16:53:23Z</published>
    <updated>2008-09-29T16:53:23Z</updated>
    <content type="html">&lt;p&gt;If you're interested in programming languages and you're in Cambridge, you should come to &lt;a href="http://common-lisp.net/pipermail/boston-lisp/2008-September/000077.html"&gt;this Boston Lispers&lt;/a&gt; meeting.  The author of Clojure, Rich Hickey, reportedly gave a &lt;a href="http://groups.google.com/group/clojure/browse_thread/thread/4c4a4e6500d06f8f"&gt;great talk&lt;/a&gt; at the &lt;a href="http://openjdk.java.net/projects/mlvm/jvmlangsummit/"&gt;JVM languages summit&lt;/a&gt; which hopefully he'll reprise here!&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cgwalters:20625</id>
    <link rel="alternate" type="text/html" href="http://cgwalters.livejournal.com/20625.html"/>
    <link rel="self" type="text/xml" href="http://cgwalters.livejournal.com/data/atom/?itemid=20625"/>
    <title>"Linux distribution"</title>
    <published>2008-09-18T18:47:02Z</published>
    <updated>2008-09-18T18:47:02Z</updated>
    <content type="html">&lt;p&gt;At the &lt;a href="http://linuxplumbersconf.org/"&gt;plumber's conference&lt;/a&gt; right now, just finished watching Arjan and Auke's &lt;a href="http://linuxplumbersconf.org/program/speakers/getspeaker.php?speaker=avandeven.txt"&gt;5 second boot time&lt;/a&gt; talk.  Very very impressive talk.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;They drove a lot of changes into the entire stack, from how the kernel works to fixing HAL and X.org bugs, filesystem tweaks in order to get to 5 seconds.  Of course they cut out some things too - since the netbook targets are mobile single user machines, they don't use GDM, I'm pretty sure they aren't starting CUPS, etc.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;But this talk led me to only feel more strongly about something that I've been feeling increasingly more lately - that we have been far too complacent about accepting "Linux distribution" as a concept.  This is the idea that you can take the Linux kernel and a variety of tarballs found on the Internet, compile them and put it in some variant of tar, and you have an operating system.  It turns out it's not that simple.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;To create a compelling system, first, you need to make decisions about how things work and how things fit together.  The "Linux distribution" mindset is an excuse for having different vendors make different decisions and we end up sharing very little.  We need people like Arjan's team, the Ubuntu team, the Fedora team, the OpenSuSE team to share far more than we do now.   I think a lot of vendors ("distributions") tend to have an insular mindset where they think they are the center of the universe and why doesn't everyone just join their project anyways?&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Five or six years ago I think there was more of a mindset that Linux and the Free Desktop was going to take over from Windows ("year of the Linux desktop" and all that) and each vendor thought they were going to take over the world and consequently were less interested in collaboration.  Personally I don't think we're going to see that &lt;a href="http://cgwalters.livejournal.com/18327.html"&gt;sudden takeover any time soon&lt;/a&gt;, but at the same time if we do things right there is a lot of opportunity.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;It's easy to say distributions are bad of course - far harder to actually collaborate better.  How do we do that?  Here's an idea:&lt;/p&gt;&lt;br /&gt;&lt;h3&gt;Share a core OS &lt;b&gt;image&lt;/b&gt; built at freedesktop.org&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;We're not going to unify all the different packaging tools tomorrow.  However, there's no reason that the core OS build tools and image (kernel, dbus, HAL, X.org) couldn't be shared.  So "distributions" could keep their favorite variant of tar and wget (.deb and apt, rpm and zypper, rpm and yum) for everything outside of the image.  In other words you could still do "apt-get install epiphany" or "yum install httpd" whatever other app on top of the image and that would still work in a normal "packaging" way, but the core OS image would be rsync'd outside of that.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Each vendor would still control all of the code - each component of the image could have a "vendor" branch where vendors can add kernel drivers and the like.  Image update policy would still be controlled by vendors.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;There of of course other things that it's &lt;b&gt;completely stupid&lt;/b&gt; to fork like bug trackers and more importantly the bug reports.  We need to do a much better job of sharing bugs in the right place - the upstream project.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;In a sentence, take projects like freedesktop.org and gnome.org as more than just tarball sources and turn them into real collaboration points where things get tied together, sharing actual infrastructure.  It wouldn't be easy but really, we need to stop thinking that it's acceptable to have 5+ major forks of the core OS infrastructure.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cgwalters:20363</id>
    <link rel="alternate" type="text/html" href="http://cgwalters.livejournal.com/20363.html"/>
    <link rel="self" type="text/xml" href="http://cgwalters.livejournal.com/data/atom/?itemid=20363"/>
    <title>How to unbreak Emacs somewhat</title>
    <published>2008-08-09T18:17:37Z</published>
    <updated>2008-08-09T18:17:37Z</updated>
    <content type="html">&lt;p&gt;I'm back to using &lt;a href="http://www.gnu.org/software/emacs/"&gt;Emacs&lt;/a&gt; for editing C and Python code for now.  There are various reasons for this, but mainly it comes down to the fact that I need an editor and not an IDE; creating projects just to edit a bit of code is too much overhead, at least in the IDEs I have tried.  Now, one major problem Emacs has had forever is that people (including me) have implemented new modules for it that "unbreak" various parts, but the maintainer has been very conservative about changing anything.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;For this reason, here's what I consider the "minimal unbreak Emacs &lt;tt&gt;.emacs&lt;/tt&gt;" file:&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;
;;; Minimal Unbreak Emacs
; Waste of display space if you can't click on it
(if (not window-system) (menu-bar-mode nil))
; Really.
(iswitchb-mode t)
; Assuming you didn't use Emacs from before when the concept of
; selecting a single region of text interactively was not supported.
(transient-mark-mode t)
; This one is actually fixed in Emacs 22; http://www.emacswiki.org/cgi-bin/wiki/CopyAndPaste
(setq x-select-enable-clipboard t)
; The default for "uniquifying" buffer names sucks
(require 'uniquify)
(setq uniquify-buffer-name-style 'post-forward-angle-brackets)
; Slightly more debatable
(global-set-key (kbd "C-x C-b") 'ibuffer)

(set-scroll-bar-mode 'right)

; Custom keybindings
(global-set-key (kbd "C-c i") 'imenu)
&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Technically I shouldn't be giving you a &lt;tt&gt;C-c&lt;/tt&gt; prefixed function, but I don't know of another good place for it.  Anyways, enjoy.  Someday Emacs will come out of the box unbroken; it's happening, just very slowly.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cgwalters:20199</id>
    <link rel="alternate" type="text/html" href="http://cgwalters.livejournal.com/20199.html"/>
    <link rel="self" type="text/xml" href="http://cgwalters.livejournal.com/data/atom/?itemid=20199"/>
    <title>But...</title>
    <published>2008-08-06T03:44:17Z</published>
    <updated>2008-08-06T03:44:17Z</updated>
    <content type="html">&lt;p&gt;&lt;a href="http://www.gnome.org/~federico/news-2008-08.html#05"&gt;Federico&lt;/a&gt;, self-signed certificates disproportionally affect programmers (particularly Free Software programmers) using random homebrew bugzilla instances.  For a website with any kind of real user base, the hosting fees and salaries of the programmers/designers/etc. are going to dwarf (by orders of magnitude) the cost of a SSL certificate.  Does it suck that you have to pay a fee to avoid a dialog?  Sure.  But rather than complain, some smart person needs to think of a way to make a distributed system that &lt;b&gt;actually works&lt;/b&gt; with non-cryptographic expert people in some way; i.e. doesn't just ask you "Do you trust this hex number"?&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cgwalters:19730</id>
    <link rel="alternate" type="text/html" href="http://cgwalters.livejournal.com/19730.html"/>
    <link rel="self" type="text/xml" href="http://cgwalters.livejournal.com/data/atom/?itemid=19730"/>
    <title>Two links</title>
    <published>2008-08-04T22:41:30Z</published>
    <updated>2008-08-04T22:41:30Z</updated>
    <content type="html">&lt;p&gt;I won't do this too often, but two things I saw today that were interesting:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;An &lt;a href="http://arstechnica.com/news.ars/post/20080804-larrabee-intels-biggest-leap-ahead-since-the-pentium-pro.html"&gt;Ars Techncia article on Larrabee&lt;/a&gt;, Intel's new graphics architecture.  Kind of scary they say "micro-OS" instead of "firmware"...is my next graphics card going to be running Linux?  Regardless, Ars Technica has a well-deserved place in my feed reader.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://groups.google.com/group/clojure/browse_thread/thread/807a0057cde4a96f"&gt;This thread&lt;/a&gt; on the Clojure group by a guy who wrote a DSL and compiler targeting Excel spreadsheets, originally in Ruby and now in Clojure.  This is one of those things that remind me how different the day to day life of other programmers is from mine.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cgwalters:19537</id>
    <link rel="alternate" type="text/html" href="http://cgwalters.livejournal.com/19537.html"/>
    <link rel="self" type="text/xml" href="http://cgwalters.livejournal.com/data/atom/?itemid=19537"/>
    <title>The life of a function in the Free desktop stack</title>
    <published>2008-08-03T19:21:33Z</published>
    <updated>2008-08-03T19:49:21Z</updated>
    <content type="html">&lt;p&gt;&lt;b&gt;The Old Way&lt;/b&gt;:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Developer in &lt;tt&gt;libfoo&lt;/tt&gt; (a C library) works on solving a problem, decides to create &lt;tt&gt;foo_bar()&lt;/tt&gt; function&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;Function &lt;i&gt;foo_bar&lt;/i&gt; works, and is committed&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;A period of time later, a new shared library appears in OS update package&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;You install the package&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;You try to use function &lt;i&gt;bar&lt;/i&gt; from your favorite $LANGUAGE bindings, but it isn't bound yet&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;You curse and go searching bugzilla to see what the status is&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;If upstream is active, some manual review is done to make sure the function is sanely callable from $LANGUAGE&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;If the function has some special requirements, sometimes metadata is manually added to hackish &lt;tt&gt;.defs&lt;/tt&gt; files&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;A patch is eventually made and committed&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;Another period of time later, new bindings appear&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;You can call &lt;i&gt;foo.bar()&lt;/i&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;Note that steps 7,8, and 9 have to be repeated for &lt;i&gt;each&lt;/i&gt; binding, be that PyGTK, Gtk#, java-gnome, etc.  Even worse they all have divergent &lt;tt&gt;.defs&lt;/tt&gt; files.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;The New Shiny Future Way&lt;/b&gt;:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;    &lt;li&gt;Developer in &lt;tt&gt;libfoo&lt;/tt&gt; (a C library) works on solving a problem, decides to create &lt;tt&gt;foo_bar()&lt;/tt&gt; function&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;If it is not sanely bindable, author gets warning from &lt;tt&gt;g-ir-scanner&lt;/tt&gt;, reworks it or adds metadata, commits&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;A period of time later, a new shared library appears in OS update package&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;You install the package&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;You can call &lt;i&gt;g.foo&lt;/i&gt;, because your $LANGUAGE bindings use &lt;a href="http://blogs.gnome.org/johan/2007/11/30/future-of-gnome-language-bindings/"&gt;GObject-Introspection&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The new way, obviously, is going to be significantly better.  By actually including all the metadata necessary to interface with the system in the shared library (&lt;tt&gt;.so&lt;/tt&gt;) itself, we eliminate a large lag time before improvements in the lower levels of the stack become usable to bindings.  Even more important I think is that by integrating into the build process of the GObject-based C libraries, we can help ensure that authors don't add new interfaces that are difficult to bind.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Why am I talking about this?  Well, I just reached a major milestone in a side project I've been working on.  Here's a screenshot:&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/cgwalters/Screenshots/photo#5230352024470678530"&gt;&lt;img src="http://lh3.ggpht.com/cgwalters/SJXxdGTR7AI/AAAAAAAABVo/MvyNxgIKwF0/s288/Screenshot-jgir-webkit.png" /&gt;&lt;/a&gt;&lt;br&gt;&lt;i&gt;Instant GObject/WebKit bindings for the JVM&lt;/i&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;And not just WebKit of course - this is a large step forward for Java bindings for Gtk, Clutter, libnotify, &lt;a href="http://folks.o-hand.com/iain/gypsy/reference/html/index.html"&gt;libgypsy&lt;/a&gt;, various canvases like &lt;a href="http://developer.mugshot.org/wiki/Hippo_Canvas"&gt;hippo canvas&lt;/a&gt; and in general the entire "Free desktop stack".&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Of course because it's Java, it's also instant bindings for Jython, Rhino, JRuby, Groovy, etc.  Just ran this program with Jython trunk:&lt;br /&gt;&lt;pre&gt;
from org.gnome.gir.dynamic.WebKit import *
from org.gnome.gir.dynamic.Gtk import *
from org.gnome.gir.gobject import *

GObjectGlobals.init()
GtkGlobals.initCheck(None, None)
win = Window(WindowType.TOPLEVEL);
sw = ScrolledWindow(None, None)
win.add(sw)
wv = WebView()
wv.open("http://www.gnome.org")
sw.add(wv)
win.setSizeRequest(640, 480)
win.showAll();
GtkGlobals.main();
&lt;/pre&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I just tossed up a web page for the project &lt;a href="http://live.gnome.org/JGIR#preview"&gt;here&lt;/a&gt;.  Right now it's basically blocked on finishing gobject-introspection itself; finishing the &lt;tt&gt;.gir&lt;/tt&gt; to &lt;tt&gt;.repo&lt;/tt&gt; compiler.  So I'll be looking at that.  My personal goal was to get bindings for some canvas (probably hippo), and clutter, along with all of Gtk+.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Let's take a step back though.  What I think is interesting about this is that it enables much more seamless multiple layer applications.  I &lt;a href="http://cgwalters.livejournal.com/17292.html"&gt;blogged about this&lt;/a&gt; before.  At the bottom, you have unmanaged C (GObject) code.  In the middle, you have a managed, statically typed core (Java/.NET).  At the top, you have a managed, dynamic language (Groovy,Boo,Python,JavaScript).  GObject-introspection dramatically lowers the pain for going between the bottom and middle layers.  Using the JVM (or .NET) makes the middle and top layer transition much nicer, especially for a runtime-native language.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Realistically landing and finishing all of this is probably a year out at the earliest still.  But it's fun to hack on!&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;Edit:&lt;/b&gt; By the way, HotSSH version &lt;a href="http://ftp.gnome.org/pub/GNOME/sources/hotssh/0.2/"&gt;0.2.5&lt;/a&gt; is out, and this one actually has a README that tells you how to install it!  It fixes various bugs, and most interesting it has the &lt;a href="http://cgwalters.livejournal.com/19030.html"&gt;favicon&lt;/a&gt; work.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cgwalters:19258</id>
    <link rel="alternate" type="text/html" href="http://cgwalters.livejournal.com/19258.html"/>
    <link rel="self" type="text/xml" href="http://cgwalters.livejournal.com/data/atom/?itemid=19258"/>
    <title>Awesome.</title>
    <published>2008-07-30T18:23:59Z</published>
    <updated>2008-07-30T18:24:52Z</updated>
    <content type="html">&lt;p&gt;&lt;a href="http://www.0xdeadbeef.com/weblog/?p=492"&gt;Awesome&lt;/a&gt;.  In the near future, I can record a &lt;tt&gt;.OGG&lt;/tt&gt; file, toss it up on the web somewhere (say my personal &lt;a href="http://s3.amazonaws.com"&gt;S3 bucket&lt;/a&gt;), and link to it in my blog with &lt;tt&gt;&amp;lt;video&amp;gt;&lt;/tt&gt;.  Now I have another motivation to make sure my family is using Firefox.  Of course really what we also need is a general video hosting site that uses &lt;tt&gt;&amp;lt;video&amp;gt;&lt;/tt&gt; - does one exist yet?&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cgwalters:19030</id>
    <link rel="alternate" type="text/html" href="http://cgwalters.livejournal.com/19030.html"/>
    <link rel="self" type="text/xml" href="http://cgwalters.livejournal.com/data/atom/?itemid=19030"/>
    <title>/etc/favicon.png</title>
    <published>2008-07-29T01:20:37Z</published>
    <updated>2008-07-29T01:20:37Z</updated>
    <content type="html">&lt;p&gt;Today I spent a good chunk of time going through DBus bugs and pending patches.  There are still some major things outstanding - large patches for Mac OS X and Windows integration, Scott's timeout work, but I have a feeling after those we'll be at the point where it really is basically done.  Now we're moving on to replacing the init system.  Woo.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;But, that's not what is exciting about today.  Is there anything exciting about today?  Well, today is the day that Unix gained &lt;tt&gt;/etc/favicon.png&lt;/tt&gt;.  No, I'm not talking about HTTP, I'm talking about a &lt;a href="http://www.gnome.org/projects/hotssh/"&gt;HotSSH&lt;/a&gt; patch that I finished on the shuttle ride back:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;center&gt;&lt;a href="http://picasaweb.google.com/cgwalters/Screenshots/photo#5228235555415883954"&gt;&lt;img src="http://lh5.ggpht.com/cgwalters/SI5siYqhgLI/AAAAAAAABVA/zHBJez_-hlw/s288/Screenshot-HotSSH-favicons-1.png" /&gt;&lt;/a&gt;&lt;br&gt;&lt;i&gt;Note the tabs have icons&lt;/i&gt;&lt;/center&gt;&lt;br /&gt;&lt;br&gt;&lt;p&gt;&lt;br /&gt;&lt;center&gt;&lt;a href="http://picasaweb.google.com/cgwalters/Screenshots/photo#5228235559732791762"&gt;&lt;img src="http://lh5.ggpht.com/cgwalters/SI5siovwSdI/AAAAAAAABVI/SiqyWcXGjzw/s288/Screenshot-HotSSH-allhosts.png" /&gt;&lt;/a&gt;&lt;br&gt;&lt;i&gt;The GNOME sysadmins haven't yet put /etc/favicon.png on &lt;tt&gt;window.gnome.org&lt;/tt&gt;, and I stole the &lt;tt&gt;freedesktop.org&lt;/tt&gt; favicon for my local machine to test&lt;/i&gt;&lt;/center&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Basically when you open a connection, we asynchronously run some Python code on the remote machine to test for the existence of &lt;tt&gt;/etc/favicon.png&lt;/tt&gt; and if it exists, its mtime.  If the cached favicon we have is old or nonexistent, we (again asynchronously) retrieve it via &lt;tt&gt;scp&lt;/tt&gt;.  All of this reuses OpenSSH's connection sharing so you don't have to reauthenticate for any of this.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;A quick Q&amp;A:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;OMGWTFBBQ!&lt;/b&gt; - That's not a question.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;I'm a system administrator and I have a &lt;tt&gt;favicon.ico&lt;/tt&gt; for our website, how do I set this up?&lt;/b&gt; - Run &lt;tt&gt;convert /path/to/favicon.ico /etc/favicon.png&lt;/tt&gt;, copy around to all machines as appropriate, put it in &lt;a href="http://reductivelabs.com/projects/puppet/"&gt;Puppet&lt;/a&gt; or whatever.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Are favicons associated with hosts or keys?&lt;/b&gt; - Good question, right now I attempt to associate them with the host key, but OpenSSH's host key hashing foils that sadly.  So probably with the host.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Why?&lt;/b&gt; - Because it's faster to recognize images than text.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cgwalters:18783</id>
    <link rel="alternate" type="text/html" href="http://cgwalters.livejournal.com/18783.html"/>
    <link rel="self" type="text/xml" href="http://cgwalters.livejournal.com/data/atom/?itemid=18783"/>
    <title>HotSSH 0.2</title>
    <published>2008-07-24T03:50:05Z</published>
    <updated>2008-07-24T03:52:50Z</updated>
    <category term="hotssh"/>
    <content type="html">&lt;p&gt;Ok, I should kick this out the door.  So I mentioned before one of my spare time projects is to take over the SSH experience in GNOME, because there are a lot of things that could be better and it's too important to have it trapped entirely inside a VT100 emulator.  &lt;a href="http://www.gnome.org/projects/hotssh/"&gt;HotSSH&lt;/a&gt; is the initial execution of that plan.  You can see the (new) website for a list of things that are done now.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;What's potentially in store for the future?&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Remote &lt;tt&gt;bash&lt;/tt&gt; integration, particularly remote working directory&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Drag and drop files onto window to copy (more generally better &lt;tt&gt;scp&lt;/tt&gt;)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Investigate general extension/scripting mechanism (HotSSH being in Python helps here)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Potentially have more flexible layout like &lt;a href="http://www.tenshu.net/terminator/"&gt;Terminator&lt;/a&gt;?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Translations other than my humorous (well I think so) initial &lt;tt&gt;en_CA.po&lt;/tt&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Actually ship as part of GNOME by default&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;For now there's no mailing list, so blog comments or personal mail until I get that set up; bugs &lt;a href="http://bugzilla.gnome.org/enter_bug.cgi?product=hotssh"&gt;here&lt;/a&gt;.  Free desktop vendors, start your packaging engines!&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;Edit:&lt;/b&gt; - The &lt;a href="http://ftp.gnome.org/pub/GNOME/sources/hotssh/0.2/"&gt;download link&lt;/a&gt; since the web page isn't synched quite yet&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cgwalters:18523</id>
    <link rel="alternate" type="text/html" href="http://cgwalters.livejournal.com/18523.html"/>
    <link rel="self" type="text/xml" href="http://cgwalters.livejournal.com/data/atom/?itemid=18523"/>
    <title>Transient Applications</title>
    <published>2008-07-23T18:40:53Z</published>
    <updated>2008-07-23T18:45:51Z</updated>
    <content type="html">&lt;p&gt;Thomas &lt;a href="http://blogs.gnome.org/metacity/2008/07/22/dona-nobis-pacem/"&gt;blogged&lt;/a&gt; about my nemesis, &lt;a href="http://bugzilla.gnome.org/show_bug.cgi?id=482354"&gt;bug 482354&lt;/a&gt;.  I've been trying to upstream the fix for unbreaking clicking on links for quite a while now.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;In it, Christophe &lt;a href="http://bugzilla.gnome.org/show_bug.cgi?id=482354#c48"&gt;brought up Rhythmbox&lt;/a&gt;, which is quite similar to Pidgin in how it acts with the tray icon.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Several years ago I was chatting with &lt;a href="http://blogs.gnome.org/seth"&gt;Seth&lt;/a&gt; about Rhythmbox and he mentioned that he thought it was a fairly special kind of application because it is generally used in a very "transient/background" way.  For example, a normal way to use it would be minimized to the tray (not even in tasklist at the bottom); then when you want to switch songs or albums, you click the tray, do a quick search, and then minimize again.  This contrasts with "regular" applications like Eclipse, Firefox, Evolution where it's expected that you will often spend a substantial amount of time in them in one go.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The tray icon approach sort of works, but I think we could do better.  Following is a potential approach that I'm recording in my blog so I don't forget, and of course to gather comments.&lt;/p&gt;&lt;br /&gt;&lt;h3&gt;Transient Application&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;First, for reference here is how Rhythmbox currently looks:&lt;br /&gt;&lt;center&gt;&lt;a href="http://picasaweb.google.com/cgwalters/Screenshots/photo#5226277359119222578"&gt;&lt;img src="http://lh4.ggpht.com/cgwalters/SId3kW_3xzI/AAAAAAAABUw/2g2SjP4l5mk/s288/Screenshot-Rhythmbox-normal.png" /&gt;&lt;/a&gt;&lt;br&gt;&lt;i&gt;Unmodified Rhythmbox&lt;/i&gt;&lt;/center&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;And here's a mockup of how it could work:&lt;br /&gt;&lt;center&gt;&lt;a href="http://picasaweb.google.com/cgwalters/Screenshots/photo#5226277357458646962"&gt;&lt;img src="http://lh6.ggpht.com/cgwalters/SId3kQz9Z7I/AAAAAAAABU4/HU-7MdJRukE/s288/Screenshot-Rhythmbox-transient.png" /&gt;&lt;/a&gt;&lt;br&gt;&lt;i&gt;How Rhythmbox could be a "transient" application&lt;/i&gt;&lt;/center&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The general idea is to treat the application window like a really fancy &lt;tt&gt;GtkMenu&lt;/tt&gt;.  Here's a concrete list of user-visible behavioral changes:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Clicking anywhere outside of the window causes it to minimize back to the tray icon.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;It does not appear in the task list&lt;/li&gt;&lt;br /&gt;&lt;li&gt;There are no minimize/maximize buttons&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The close button does not actually exit the app (i.e. stop your music), but just minimizes&lt;/li&gt;&lt;br /&gt;&lt;li&gt;There is a visible arrow showing you the association with the tray&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Overall I think this approach will make the "show Rhythmbox window, choose song/album, start playing, make it go away" task nicer since you'll only have to move your mouse to the tray icon and click once (to open) instead of twice (once to open, once to close).  It will make it a lot clearer to the user what's going on (in the current Rhythmbox we have the minimize/maximize animation, but no arrow).&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Implementing this would require window manager changes, new GTK+ API for &lt;tt&gt;GtkStatusIcon&lt;/tt&gt;, and updating several applications that fall in this category (Rhythmbox, Pidgin, Banshee, etc.) to use it.  Also someone with actual graphics skills would have to draw the arrow.  Does that sound like a lot of work just to save you one mouse click?  Not when you're applying the &lt;a href="http://cgwalters.livejournal.com/17760.html"&gt;forehead mashing method&lt;/a&gt; of user experience improvement!&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Now to find some time to implement it...&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;Edit:&lt;/b&gt; - I forgot to mention this would also be perfect for the new &lt;a href="http://blogs.gnome.org/dcbw/2008/06/11/great-taste-less-filling/"&gt;NetworkManager connection dialog&lt;/a&gt;.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cgwalters:18327</id>
    <link rel="alternate" type="text/html" href="http://cgwalters.livejournal.com/18327.html"/>
    <link rel="self" type="text/xml" href="http://cgwalters.livejournal.com/data/atom/?itemid=18327"/>
    <title>Whence world domination?</title>
    <published>2008-07-08T12:20:06Z</published>
    <updated>2008-07-08T12:51:40Z</updated>
    <category term="freedesktop"/>
    <category term="gnome"/>
    <category term="linux"/>
    <content type="html">&lt;p&gt;I've had this blog entry going around in the back of my head for some time now...it's seen a number of false starts and revisions, finally I've decided to cut it down to just the essence:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Andy &lt;a href="http://wingolog.org/archives/2008/06/07/gnome-in-the-age-of-decadence"&gt;(re)started&lt;/a&gt; an important discussion.  How do we increase use of GNOME and Free Software in general on the desktop?  What's our target audience?  What kinds of things can we do?  Why haven't we taken over the world yet?&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Basically, Microsoft Windows is like a big &lt;a href="http://en.wikipedia.org/wiki/Katamari"&gt;Katamari ball&lt;/a&gt;.  It has an enormous amount of momentum in the form of first and third party applications, drivers, hardware vendors, etc.  Put another way, it's a &lt;a href="http://en.wikipedia.org/wiki/Network_effect"&gt;Network effect&lt;/a&gt;.  Even Apple, who have a huge influx of cash from their consumer electronics business and been returning some of that as improvements to their OS, have only seen their market share increase by &lt;a href="http://en.wikipedia.org/wiki/Usage_share_of_desktop_operating_systems"&gt;tenths of percentage points&lt;/a&gt; (insert standard statistics disclaimer and standard Wikipedia disclaimer).&lt;/p&gt;&lt;br /&gt;&lt;p&gt;How about us?  First, let's note that overall, the Free Software movement is doing better than it ever has.  For example, Sun is quickly transitioning to becoming a primary Free Software company (I liked &lt;a href="http://blogs.sun.com/jonathan/entry/freedom_s_choice"&gt;this blog entry&lt;/a&gt;).  I'm sure if you told Richard Stallman back when he started GNU that he would end up completely winning versus all of the proprietary Unix systems of the day, he would have been amazed.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Even Microsoft is now employ people who work on projects like IronRuby (as Sun employs major JRuby hackers, and did you know Apple has their own &lt;a href="http://www.macruby.org/trac/wiki/MacRuby"&gt;Ruby bastard child&lt;/a&gt;?  (I'm doing my own Ruby implementation too)).  So in general almost every large technology company now ends up contributing back in some way to Free Software, typically infrastructure (development tools, shared libraries).  I liked &lt;a href="http://www.informationweek.com/news/software/linux/showArticle.jhtml?articleID=207800195"&gt;this quote&lt;/a&gt; from the New York Stock Exchange:&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;"Red Hat is like water; it's pervasive within our architecture. ... Without it, most of our computers wouldn't be running," -- NYSE&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;So we understand that Free Software is doing well.  Let's go back to the desktop specifically.  Despite some &lt;a href="http://linuxhaters.blogspot.com/"&gt;negativity&lt;/a&gt;, the Free desktop is widely regarded by a number of important software development organizations (both Free and proprietary) as a target platform.  For example, Mozilla and Adobe.  We have quite a lot of Free desktop applications.  There are a lot of professional developers, students, etc. using the Free desktop on an individual basis, and a growing number of managed (usually thin) deployments like &lt;a href="http://customers.press.redhat.com/2008/06/23/red-hat-drives-desktop-cost-savings-for-europcar/"&gt;this Europcar one&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;In particular from that story it sounds like Europcar basically needed a desktop to run Telnet to some proprietary backend booking system.  Yes, it doesn't make sense to spend large license fees to Microsoft to run &lt;tt&gt;telnet&lt;/tt&gt;.  More generally for a growing number of corporations their needs are increasingly met by the web browser (the 21st century telnet).  So we can expect deployments like this to increase.  Every time I see the default Windows XP screensaver on a point of sale system I just shake my head.  It's a testament both to how enormous the Windows Katamari ball is (it rolled in the ISVs developing the point-of-sale apps), and to how no one ever changes the defaults.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;But what about consumers?  Let me just say this straightforwardly: I don't think the free desktop is likely to see significant gains in unmanaged consumer computing in the next few years.  Fundamentally, it has to be &lt;i&gt;extremely&lt;/i&gt; compelling to get people to download it and replace their current operating system, and while we do have our advantages, most people just want to check their email and then go out and do something that doesn't involve looking at a computer screen.  Could we do better in the consumer area?  Yes, I think so; I have some specific business-related ideas in that area that I won't mention now, but in the end we're likely only talking about a percentage point or possibly two for the near future.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;For consumers though, Free Software does have decent success in the form of &lt;a href="http://mozilla.com"&gt;Firefox&lt;/a&gt;.  What's Mozilla's trick to get so many downloads?  What we can learn is that Free Software is certainly a &lt;b&gt;necessary&lt;/b&gt; condition, but not (in general) &lt;b&gt;sufficient&lt;/b&gt;.  The other key is the &lt;b&gt;user experience&lt;/b&gt;.  People can very much appreciate things that make computers &lt;b&gt;suck less&lt;/b&gt;.  Firefox 2 added tabs, Firefox 3 added the awesomebar.  There is of course also the fact that installing Firefox is far less risky than replacing your operating system, and while we can do some things to ameliorate that it's difficult.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Don't get me wrong; I think we will see more adoption of the free desktop among consumers (as a percentage), but again, the Katamari ball isn't going to stop overnight.  A lot of people seem to think either we won't see any increasing adoption (again, as a percentage), or that there will be an inflection point at which adoption takes off, and I don't think either of those are likely soon. &lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;So the other main audience is technical computing; sysadmins, developers, scientists, etc.  What we &lt;i&gt;absolutely must do&lt;/i&gt; is stay on the ball for this audience.  These people are in some ways a proxy for the larger audience; even particle physics researchers want their sound to Just Work.  For example, &lt;a href="https://bugzilla.redhat.com/show_bug.cgi?id=430624"&gt;this bug&lt;/a&gt; from a Mozilla developer.  That's a generic GNOME bug; on the vendor level we are still struggling with a good upgrade process.  &lt;a href="http://www.michaeldehaan.net/?p=640"&gt;This blog&lt;/a&gt; from a Fedora developer, and &lt;a href="http://weblogs.mozillazine.org/gerv/archives/2008/04/upgrading_to_hardy.html"&gt;this blog&lt;/a&gt; from a Mozilla developer using Ubuntu.  As I've said before, &lt;tt&gt;apt-get&lt;/tt&gt; or &lt;tt&gt;yum&lt;/tt&gt; or whatever are fundamentally just fancy implementations of &lt;tt&gt;wget&lt;/tt&gt;; upgrades (&lt;i&gt;without random manual intervention in a terminal&lt;/i&gt;) are a harder problem than that.&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Anyways this is a long entry now and at the beginning I said I'd keep it short =)  So the bottom line?  We're doing OK.  But truly spreading the Free desktop requires solving many hard problems that do exist.  We can't spend time &lt;a href="http://mail.gnome.org/archives/desktop-devel-list/2008-July/msg00011.html"&gt;screwing with the code&lt;/a&gt;.  Think about how to make the experience better; it could be for developers and sysadmins if you like, or better for nontechnical users.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;One last thing; while writing this entry I stumbled on &lt;a href="http://www.gnome.org/~federico/docs/gnome-deployments-2006/index.html"&gt;Federico's 2006 summary&lt;/a&gt; of feedback from thin client deployments that I hadn't seen before.  There's a lot of things there that are eminently solvable.  Let's just do it.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cgwalters:17956</id>
    <link rel="alternate" type="text/html" href="http://cgwalters.livejournal.com/17956.html"/>
    <link rel="self" type="text/xml" href="http://cgwalters.livejournal.com/data/atom/?itemid=17956"/>
    <title>Jython about to hit 2.5</title>
    <published>2008-06-26T17:47:46Z</published>
    <updated>2008-06-26T17:50:31Z</updated>
    <content type="html">&lt;p&gt;An &lt;a href="http://zyasoft.com/pythoneering/2008/06/realizing-jython-25.html"&gt;excellent&lt;/a&gt; update from one of the Jython hackers (&lt;a href="http://zyasoft.com/pythoneering/2008/06/flipping-25-bit-for-jython.html"&gt;and followup&lt;/a&gt;).  I particularly liked this:&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;
&amp;gt;&amp;gt;&amp;gt; from __future__ import GIL
Traceback (most recent call last):
(no code object) at line 0
File "", line 0
SyntaxError: Never going to happen!
&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;For me the most useful thing is that Jython SVN now supports &lt;a href="http://www.python.org/dev/peps/pep-0318/"&gt;decorators&lt;/a&gt;.  I use decorators fairly extensively in my Python code, and they were the main thing blocking me from using Jython more widely.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Some people may wonder - why Jython?  One reason is that the tooling around the JVM is &lt;b&gt;awesome&lt;/b&gt;.  &lt;a href="http://java.sun.com/j2se/1.5.0/docs/guide/jpda/jdwp-spec.html"&gt;JDWP&lt;/a&gt; (and clients like &lt;a href="http://eclipse.org"&gt;Eclipse&lt;/a&gt;'s debugger) blow away &lt;a href="http://www.gnu.org/software/gdb/"&gt;gdb&lt;/a&gt;.   For a while now I've been trying to debug a periodic lockup in a multithreaded Python process, and it's been immensely painful with gdb.  There are &lt;a href="http://java-source.net/open-source/profilers"&gt;a lot&lt;/a&gt; of other extremely useful FOSS tools for heap analysis, profiling, etc.  Even if your entire world currently runs on Python, and you aren't interested in easily taking advantage of some of the other &lt;a href="http://cgwalters.livejournal.com/14310.html"&gt;awesome JVM software&lt;/a&gt; out there like Hadoop, running on Jython makes sense alone just for OpenJDK being among the best Free VMs out there.&lt;/p&gt;</content>
  </entry>
</feed>
