<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <title>Andrew Clunis - Home</title>
  <id>tag:orospakr.ca,2008:mephisto/</id>
  <generator version="0.7.3" uri="http://mephistoblog.com">Mephisto Noh-Varr</generator>
  <link href="http://orospakr.ca/feed/atom.xml" rel="self" type="application/atom+xml"/>
  <link href="http://orospakr.ca/" rel="alternate" type="text/html"/>
  <updated>2008-06-02T15:51:31Z</updated>
  <entry xml:base="http://orospakr.ca/">
    <author>
      <name>orospakr</name>
    </author>
    <id>tag:orospakr.ca,2008-05-30:3003</id>
    <published>2008-05-30T17:10:00Z</published>
    <updated>2008-06-02T15:51:31Z</updated>
    <category term="code"/>
    <link href="http://orospakr.ca/2008/5/30/getting-power-button-events-with-hal" rel="alternate" type="text/html"/>
    <title>Getting power button events with HAL</title>
<content type="html">
            &lt;p&gt;I needed to teach the product I&#8217;m working on about the ACPI power button, so I fired up &lt;code&gt;dbus-monitor --system&lt;/code&gt; to see what events are emitted when the button is pressed.  It was easy to find the device in question in &lt;code&gt;d-feet&lt;/code&gt; afterwards.  Unfortunately, the HAL device objects (&lt;code&gt;/org/freedesktop/Hal/devices/computer_logicaldev_input_N&lt;/code&gt;) that emit the events for the various ACPI buttons change between machines and even between reboots, so it&#8217;s necessary to dynamically discover them by querying HAL for all devices with the &#8220;button&#8221; capability.&lt;/p&gt;

&lt;p&gt;This little spike solution prints out messages to stdout whenever certain special ACPI keys on your keyboard are pressed (on my Lenovo ThinkPad T61, it shows the power button, the volume buttons, the Fn-key chords for changing backlight, etc.):&lt;/p&gt;

&lt;pre class=&quot;blackboard&quot;&gt; 
&lt;span class=&quot;Keyword&quot;&gt;import&lt;/span&gt; gobject
&lt;span class=&quot;Keyword&quot;&gt;import&lt;/span&gt; dbus
&lt;span class=&quot;Keyword&quot;&gt;import&lt;/span&gt; dbus.mainloop.glib

&lt;span class=&quot;Storage&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;Entity&quot;&gt;getButtonCondition&lt;/span&gt;(&lt;span class=&quot;Variable&quot;&gt;condition&lt;/span&gt;, &lt;span class=&quot;Variable&quot;&gt;btn&lt;/span&gt;):
    &lt;span class=&quot;Keyword&quot;&gt;print&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;Condition: &lt;span class=&quot;StringInterpolation&quot;&gt;%s&lt;/span&gt;, button: &lt;span class=&quot;StringInterpolation&quot;&gt;%s&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;Keyword&quot;&gt;%&lt;/span&gt; (condition, btn)

mainloop &lt;span class=&quot;Keyword&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;MetaFunctionCallPy&quot;&gt;gobject.MainLoop&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;&lt;/span&gt;&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;dbus.mainloop.glib.DBusGMainLoop&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;&lt;span class=&quot;Variable&quot;&gt;set_as_default&lt;/span&gt;&lt;span class=&quot;Keyword&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;True&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
bus &lt;span class=&quot;Keyword&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;MetaFunctionCallPy&quot;&gt;dbus.SystemBus&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;&lt;/span&gt;&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

hal_manager_proxy &lt;span class=&quot;Keyword&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;MetaFunctionCallPy&quot;&gt;bus.get_object&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;&lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;org.freedesktop.Hal&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;&lt;/span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;                                   &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;/org/freedesktop/Hal/Manager&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

hal_manager &lt;span class=&quot;Keyword&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;MetaFunctionCallPy&quot;&gt;dbus.Interface&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;hal_manager_proxy, &lt;span class=&quot;Variable&quot;&gt;dbus_interface&lt;/span&gt;&lt;span class=&quot;Keyword&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;org.freedesktop.Hal.Manager&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

button_paths &lt;span class=&quot;Keyword&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;MetaFunctionCallPy&quot;&gt;hal_manager.FindDeviceByCapability&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;&lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;button&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

button_proxies &lt;span class=&quot;Keyword&quot;&gt;=&lt;/span&gt; []
buttons &lt;span class=&quot;Keyword&quot;&gt;=&lt;/span&gt; []

&lt;span class=&quot;Keyword&quot;&gt;for&lt;/span&gt; p &lt;span class=&quot;Keyword&quot;&gt;in&lt;/span&gt; button_paths:

    button_proxy &lt;span class=&quot;Keyword&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;MetaFunctionCallPy&quot;&gt;bus.get_object&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;&lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;org.freedesktop.Hal&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;&lt;/span&gt;, p&lt;/span&gt;&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

    button &lt;span class=&quot;Keyword&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;MetaFunctionCallPy&quot;&gt;dbus.Interface&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;button_proxy, &lt;span class=&quot;Variable&quot;&gt;dbus_interface&lt;/span&gt; &lt;span class=&quot;Keyword&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;org.freedesktop.Hal.Device&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;MetaFunctionCallPy&quot;&gt;button.connect_to_signal&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;&lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;Condition&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, getButtonCondition&lt;/span&gt;&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;MetaFunctionCallPy&quot;&gt;button_proxies.append&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;button_proxy&lt;/span&gt;&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;MetaFunctionCallPy&quot;&gt;buttons.append&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;mainloop.run&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;&lt;/span&gt;&lt;span class=&quot;MetaFunctionCallPy&quot;&gt;)&lt;/span&gt;&lt;/span&gt;

&lt;/pre&gt;
          </content>  </entry>
  <entry xml:base="http://orospakr.ca/">
    <author>
      <name>orospakr</name>
    </author>
    <id>tag:orospakr.ca,2008-01-08:2212</id>
    <published>2008-01-08T16:42:00Z</published>
    <updated>2008-01-09T22:19:50Z</updated>
    <link href="http://orospakr.ca/2008/1/8/relpats-ng-page-10" rel="alternate" type="text/html"/>
    <title>Relpats NG, Page 10</title>
<content type="html">
            &lt;p&gt;So, &#8220;The Creator&#8221; himself, Relpats, has done a new collection of riddles.&lt;/p&gt;

&lt;p&gt;People were collaborating on the final problem of the original Relpats puzzle on a web-based forum, and it proved quite useful.  A few friends and I have decided that page 10 is likewise worthy of a group effort, and the old forum is no longer available.  So, here&#8217;s a new one:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://relpats.orospakr.ca/&quot;&gt;Relpats Page 10 Forum&lt;/a&gt;.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://orospakr.ca/">
    <author>
      <name>orospakr</name>
    </author>
    <id>tag:orospakr.ca,2008-01-05:2076</id>
    <published>2008-01-05T01:01:00Z</published>
    <updated>2008-01-07T19:05:01Z</updated>
    <category term="code"/>
    <link href="http://orospakr.ca/2008/1/5/so-how-much-does-vista-s-uac-really-solve" rel="alternate" type="text/html"/>
    <title>So, how much does Vista's UAC really solve?</title>
<content type="html">
            &lt;p&gt;So, I was hacking on some code on Windows the other day.  The DRM for a piece of proprietary software I had a legitimate license for wasn&#8217;t working, and thus I had to seek out some&#8230; &lt;em&gt;licencing facilitation software&lt;/em&gt;.  Since such software usually originates from the sketchier regions of the Internet, I ended up infecting my copy of Vista with a trojan horse.  That&#8217;s one demerit point on my Geek Licence!&lt;/p&gt;

&lt;p&gt;Here&#8217;s the manifest from the executable:&lt;/p&gt;

&lt;pre class=&quot;blackboard&quot;&gt; 
&lt;span class=&quot;MetaTag&quot;&gt;&lt;span class=&quot;MetaTag&quot;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&quot;MetaTag&quot;&gt;xml&lt;/span&gt;&lt;span class=&quot;MetaTag&quot;&gt; version&lt;/span&gt;=&lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;1.0&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;MetaTag&quot;&gt; encoding&lt;/span&gt;=&lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;UTF-8&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;MetaTag&quot;&gt; standalone&lt;/span&gt;=&lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;yes&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;MetaTag&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;MetaTag&quot;&gt;&lt;span class=&quot;MetaTag&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;MetaTag&quot;&gt;assembly&lt;/span&gt; &lt;span class=&quot;MetaTag&quot;&gt;xmlns&lt;/span&gt;=&lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;urn:schemas-microsoft-com:asm.v1&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;MetaTag&quot;&gt;manifestVersion&lt;/span&gt;=&lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;1.0&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;MetaTag&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;MetaTag&quot;&gt;&lt;span class=&quot;MetaTag&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;MetaTag&quot;&gt;assemblyIdentity&lt;/span&gt; &lt;span class=&quot;MetaTag&quot;&gt;version&lt;/span&gt;=&lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;1.0.0.0&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;MetaTag&quot;&gt;     &lt;span class=&quot;MetaTag&quot;&gt;processorArchitecture&lt;/span&gt;=&lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;X86&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;MetaTag&quot;&gt;     &lt;span class=&quot;MetaTag&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;Installer&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;MetaTag&quot;&gt;     &lt;span class=&quot;MetaTag&quot;&gt;type&lt;/span&gt;=&lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;win32&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;MetaTag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;MetaTag&quot;&gt;&lt;span class=&quot;MetaTag&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;MetaTag&quot;&gt;trustInfo&lt;/span&gt; &lt;span class=&quot;MetaTag&quot;&gt;xmlns&lt;/span&gt;=&lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;urn:schemas-microsoft-com:asm.v2&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;MetaTag&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;MetaTag&quot;&gt;&lt;span class=&quot;MetaTag&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;MetaTag&quot;&gt;security&lt;/span&gt;&lt;span class=&quot;MetaTag&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;MetaTag&quot;&gt;&lt;span class=&quot;MetaTag&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;MetaTag&quot;&gt;requestedPrivileges&lt;/span&gt;&lt;span class=&quot;MetaTag&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;MetaTag&quot;&gt;&lt;span class=&quot;MetaTag&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;MetaTag&quot;&gt;requestedExecutionLevel&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;MetaTag&quot;&gt;          &lt;span class=&quot;MetaTag&quot;&gt;level&lt;/span&gt;=&lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;asInvoker&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;MetaTag&quot;&gt;          &lt;span class=&quot;MetaTag&quot;&gt;uiAccess&lt;/span&gt;=&lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;false&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;MetaTag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;MetaTag&quot;&gt;&lt;span class=&quot;MetaTag&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;MetaTag&quot;&gt;requestedPrivileges&lt;/span&gt;&lt;span class=&quot;MetaTag&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;MetaTag&quot;&gt;&lt;span class=&quot;MetaTag&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;MetaTag&quot;&gt;security&lt;/span&gt;&lt;span class=&quot;MetaTag&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;MetaTag&quot;&gt;&lt;span class=&quot;MetaTag&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;MetaTag&quot;&gt;trustInfo&lt;/span&gt;&lt;span class=&quot;MetaTag&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;MetaTag&quot;&gt;&lt;span class=&quot;MetaTag&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;MetaTag&quot;&gt;assembly&lt;/span&gt;&lt;span class=&quot;MetaTag&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;/pre&gt;

&lt;p&gt;For those without Windows-fu, the manifest is basically a PE resource containing some XML metadata that describes the executable.  They first found use with the release of XP, where they were primarily used by software developers to ask Windows to dynamically load version 6 of the Common Controls library (which also saw its debut in XP) instead of the venerable version 5.  The practical upshot of all this was that it gave you the nice new Windows themed controls, without any ABI changes.  Microsoft obliged developers to explicitly specify their desire for version 6 so that they could basically ship version 5 as is, to avoid any compatibility issues.&lt;/p&gt;

&lt;p&gt;Returning to the trojan hourse, I assume they were trying to intentionally prevent Vista&#8217;s UAC feature from asking the user for extra permissions.  This actually makes sense because most malware authors&#8217; goals do not include completely compromising the user&#8217;s machine, but rather the purpose of creating botnets, which don&#8217;t need administrator access to commit their nefarious deeds.  All they need to do is stay resident and use the network, all of which the regular Windows limited account allows them to do.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://orospakr.ca/">
    <author>
      <name>orospakr</name>
    </author>
    <id>tag:orospakr.ca,2008-01-03:2029</id>
    <published>2008-01-03T20:16:00Z</published>
    <updated>2008-01-03T20:28:52Z</updated>
    <category term="code"/>
    <link href="http://orospakr.ca/2008/1/3/setting-emacs-22-s-font-to-consolas" rel="alternate" type="text/html"/>
    <title>Setting Emacs 22 for Windows' font to Consolas</title>
<content type="html">
            &lt;p&gt;Emacs 22 for Windows, unlike its X11 counterpart, supports anti-aliased TrueType fonts.&lt;/p&gt;

&lt;p&gt;Thus, it looks much better if you set it to use the shiny new Consolas monospaced font included with Vista (or indeed, any other TrueType font you care to use):&lt;/p&gt;

&lt;p&gt;Add this to ~/.emacs:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(set-face-font 'default &quot;-outline-Consolas-normal-r-normal-normal-15-112-96-96-c-*-iso8859-1&quot;)
&lt;/code&gt;&lt;/pre&gt;
          </content>  </entry>
  <entry xml:base="http://orospakr.ca/">
    <author>
      <name>orospakr</name>
    </author>
    <id>tag:orospakr.ca,2007-12-12:1566</id>
    <published>2007-12-12T03:16:00Z</published>
    <updated>2007-12-12T05:46:28Z</updated>
    <category term="test"/>
    <link href="http://orospakr.ca/2007/12/12/it-lives" rel="alternate" type="text/html"/>
    <title>It lives!</title>
<content type="html">
            &lt;p&gt;My broken-yet-cached copy of Mephisto has been repaired.  Turns out it was frozen to an old version of Rails, d&#8217;oh!&lt;/p&gt;

&lt;p&gt;(it had also gotten stuck half way between two migrations)&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://orospakr.ca/">
    <author>
      <name>orospakr</name>
    </author>
    <id>tag:orospakr.ca,2007-08-03:769</id>
    <published>2007-08-03T05:59:00Z</published>
    <updated>2007-12-12T05:40:39Z</updated>
    <category term="code"/>
    <link href="http://orospakr.ca/2007/8/3/zimbra" rel="alternate" type="text/html"/>
    <title>Zimbra</title>
<content type="html">
            &lt;p&gt;So, I&#8217;ve finally set up Zimbra, after a bit of equivocating on whether to use it in the first place.&lt;/p&gt;

&lt;p&gt;It&#8217;s really slick; imagine a Free Software[1] replacment for GMail, Google Reader, and Google Gears, along with all the enterprisey management stuff that the likes of Active Directory/Exchange, Groupwise, and Notes have.  It takes care of all the thorniness of setting up a the Postfix MTA, and gives you advanced calendaring features (and it can sync up with webcal ics calendars, too!).&lt;/p&gt;

&lt;p&gt;It seems to take a best-of-both-worlds approach on several issues: the concept of tagging is pervasive throughout the interface, yet the classic Folders-based paradigm remains intact; it provides both SOAP and RESTful interfaces to its datastore; it&#8217;s (mostly) Free Software while providing a commercial subscription model attractive to the more traditional managers.&lt;/p&gt;

&lt;p&gt;[1] Actually, there is one slight issue of contention; Zimbra&#8217;s internals are MPL licensed, but the GUI component is licensed under the so-called &#8220;ZPL&#8221;, which is actually the MPL with a badgeware clause added.  The whole attribution argument is a shitfest I don&#8217;t want to get involved with, but I do prefer pure Free Software licenses over badgeware licenses; licenses that place limits on your ability to modify software present a slippery slope, as today it may only be display-logo-please requirements, and tomorrow it could be nasty DRM or patent clauses.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://orospakr.ca/">
    <author>
      <name>orospakr</name>
    </author>
    <id>tag:orospakr.ca,2007-08-03:768</id>
    <published>2007-08-03T05:58:00Z</published>
    <updated>2007-08-03T16:38:30Z</updated>
    <category term="code"/>
    <link href="http://orospakr.ca/2007/8/3/free-software-distribution-model" rel="alternate" type="text/html"/>
    <title>The Free Software distribution model</title>
<content type="html">
            &lt;p&gt;Someone on KernelTrap claimed that Windows has a superior distribution model for third party software.&lt;/p&gt;

&lt;p&gt;This is a faulty claim, on several levels:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;There is no &lt;em&gt;real&lt;/em&gt; standard for application distribution on Windows, save from a few common idioms and libraries like InstallShield.&lt;/li&gt;
&lt;li&gt;On GNU/Linux, the distribution model tends to be entirely different. Users generally get all their software, in the entire stack all the way from the kernel to the desktop applications, from a single distributor. Thus, there is a common infrastructure for dependency management, filesystem structure, and configuration file management. Not only does this normalized interface for software management allow for a cleaner user experience in managing and updating their software, but the distributor can perform integration testing. The fact that all this code is Free Software is what enables this distribution model.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;apt-get install vlc&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Easy!&lt;/p&gt;

&lt;p&gt;I suspect that the issues they had (complaining that VLC was difficult to install, etc.) probably arose from them attempting to use stuff that simply wasn&#8217;t ready yet at the time. If one elects to be on the bleeding edge, expect a bit of pain.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://orospakr.ca/">
    <author>
      <name>orospakr</name>
    </author>
    <id>tag:orospakr.ca,2007-05-04:630</id>
    <published>2007-05-04T15:18:00Z</published>
    <updated>2008-01-09T22:51:36Z</updated>
    <link href="http://orospakr.ca/2007/5/4/aacs-can-eat-my-shorts" rel="alternate" type="text/html"/>
    <title>AACS can eat my shorts</title>
<content type="html">
            09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0.
          </content>  </entry>
  <entry xml:base="http://orospakr.ca/">
    <author>
      <name>orospakr</name>
    </author>
    <id>tag:orospakr.ca,2007-02-27:528</id>
    <published>2007-02-27T07:47:00Z</published>
    <updated>2007-02-27T07:55:51Z</updated>
    <category term="olpc"/>
    <link href="http://orospakr.ca/2007/2/27/building-csound" rel="alternate" type="text/html"/>
    <title>Building CSound</title>
<content type="html">
            &lt;p&gt;Just a quick note to myself and others who might want to run TamTam under sugar-jhbuild:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;scons buildInterfaces=1 dynamicCsoundLibrary=1
sudo ./install.py
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;appears to be correct incantation to install CSound.&lt;/p&gt;

&lt;p&gt;It might also be necessary to remove &#8220;import csnd&#8221; (which was for importing the old CSound python binding) from Util/CSoundClient.py in TamTam itself.&lt;/p&gt;

&lt;p&gt;Don&#8217;t assume this will actually help you run TamTam itself, though, as the whole thing promptly dies with a floating point exception (logged as signal 8 in the Developer&#8217;s Console) on my laptop. :(&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://orospakr.ca/">
    <author>
      <name>orospakr</name>
    </author>
    <id>tag:orospakr.ca,2007-01-27:361</id>
    <published>2007-01-27T16:49:00Z</published>
    <updated>2008-01-09T22:53:33Z</updated>
    <category term="olpc"/>
    <link href="http://orospakr.ca/2007/1/27/develop-for-olpc" rel="alternate" type="text/html"/>
    <title>Develop for OLPC</title>
<content type="html">
            &lt;p&gt;Recently, I&#8217;ve started writing Develop activity, a simple Python IDE for the One Laptop Per Child project.&lt;/p&gt;

&lt;p&gt;I&#8217;ve been putting particular emphasis on the idea of that development on the Laptop should not be multi-tiered.  Students should have the same tools available (as much as technically possible; no C toolchain is available for capacity reasons) as the core developers do.&lt;/p&gt;

&lt;p&gt;Right now, the editor component is provided by an embedded instance of &lt;a href=&quot;http://www.vim.org/&quot;&gt;gvim&lt;/a&gt;, with has some interesting pros and cons.  Vim provides a powerful programmer&#8217;s editor that can be configured to be modeless (as it will be by default in Develop), but can be reconfigured to expose all of the hacker-friendly features.  Many thanks to Ali of &lt;a href=&quot;http://pida.co.uk/&quot;&gt;Pida&lt;/a&gt;, who wrote the vim embedding library.&lt;/p&gt;

&lt;p&gt;Develop will also integrate tightly with the mesh networking system and provide a basis for students to be able to modify activities written by others (including the core developers) and collaborate together on writing new ones.  As such, I&#8217;ve decided to include distributed version control functionality, which permits students to do all of those things, and can scale from tiny projects to large ones.  It also fits in nicely with the journal and mesh metaphors described in the HIG.&lt;/p&gt;

&lt;p&gt;Discussion about which version control system to use is ongoing, coming down to a deathmatch of sorts between &lt;a href=&quot;http://git.or.cz/&quot;&gt;git&lt;/a&gt; and &lt;a href=&quot;http://bazaar-vcs.org/&quot;&gt;bzr&lt;/a&gt;, which is documented in greater detail on the wiki page.&lt;/p&gt;

&lt;p&gt;Read more about the project at the &lt;a href=&quot;http://wiki.laptop.org/go/Develop&quot;&gt;Develop OLPC wiki page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Screenshot of Develop running on a real btest1 XO (many thanks to Flipo):&lt;/p&gt;

&lt;p&gt;
&amp;lt;center&gt;
&lt;a href=&quot;http://www.orospakr.ca/assets/2007/1/26/develop-activity-first-time-on-real-hardware.jpg&quot;&gt;&lt;img src=&quot;http://www.orospakr.ca/assets/2007/1/27/develop-activity-first-time-on-real-hardware-shrunk.jpg&quot; alt=&quot;Develop running on a real XO!&quot; /&gt;&lt;/a&gt;
&amp;lt;/center&gt;
&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://orospakr.ca/">
    <author>
      <name>orospakr</name>
    </author>
    <id>tag:orospakr.ca,2006-11-10:7</id>
    <published>2006-11-10T02:41:00Z</published>
    <updated>2008-01-09T22:54:28Z</updated>
    <category term="olpc"/>
    <link href="http://orospakr.ca/2006/11/10/one-laptop-per-child-uml-script-updated-to-0-2" rel="alternate" type="text/html"/>
    <title>One Laptop Per Child UML Script updated to 0.2</title>
<content type="html">
            &lt;p&gt;Hey folks,&lt;/p&gt;

&lt;p&gt;I&#8217;ve updated the script to 0.2.  This fixes compatibility with recent jhbuild trees (the other one would have failed with a dbus configuration error).&lt;/p&gt;

&lt;p&gt;The disk image for this version is based on build 155.  As of an hour ago, that&#8217;s already out of date.  However, J5 says he&#8217;ll look at integrating the hooks after they&#8217;ve shipped btest1.&lt;/p&gt;

&lt;p&gt;Just download it and follow the same instructions as before.&lt;/p&gt;

&lt;p&gt;NB:  if you tried out 0.1, you&#8217;ll need to remove all the COW files in the instance/ directory tree (or you can remove the entire uml&lt;em&gt;test&lt;/em&gt;env/ directory if you want clean start for certain).&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.orospakr.ca/stuff/olpc_uml/olpc_uml_emu.py&quot;&gt;Download Here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ChangeLog:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;updated to J5&#8217;s disk image build 155.&lt;/li&gt;
&lt;li&gt;fixed lots of stupid and weird typos in the documentation.  Sorry, I was really tired.&lt;/li&gt;
&lt;/ul&gt;
          </content>  </entry>
  <entry xml:base="http://orospakr.ca/">
    <author>
      <name>orospakr</name>
    </author>
    <id>tag:orospakr.ca,2006-11-07:3</id>
    <published>2006-11-07T17:52:00Z</published>
    <updated>2008-01-09T22:54:00Z</updated>
    <category term="olpc"/>
    <link href="http://orospakr.ca/2006/11/7/uml-based-testing-environment-for-olpc" rel="alternate" type="text/html"/>
    <title>UML-based Testing Environment for OLPC</title>
<content type="html">
            &lt;p&gt;I&#8217;ve spent some time writing a utility that runs a set of Sugar virtual machines under UML.  The idea being to facilitate debugging of Sugar itself and Activities that involve a lot of use of the network.&lt;/p&gt;

&lt;p&gt;I imagine this sort of work would get very tedious very quickly because otherwise one would have to use several machines to test this stuff effectively (plus all the sneakernet use that would entail).&lt;/p&gt;

&lt;p&gt;I must admit I was inspired by Michael Richardson&#8217;s test suite for Openswan, which does something similar. It runs a set of UML instances in a specific network topology so that they can effectively test the entire IPsec stack, all without leaving the machine.&lt;/p&gt;

&lt;p&gt;As described in the documentation, the disk image only has a few small modifications.  It would be awesome if we could see some love between this and pilgrim.&lt;/p&gt;

&lt;p&gt;I apologise for any ugliness in the script, but it&#8217;s not like I could have written a shiny MVC framework for this (that and I&#8217;m down and dirty with UNIX and UML in all its buggy glory, heh).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Screenshots:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&amp;lt;center&gt;&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://www.orospakr.ca/assets/2006/11/6/first_run1.png&quot;&gt;&lt;img src=&quot;http://www.orospakr.ca/assets/2006/11/6/first_run1_small.png&quot; alt=&quot;First Boot!&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://www.orospakr.ca/assets/2006/11/6/first_run2.png&quot;&gt;&lt;img src=&quot;http://www.orospakr.ca/assets/2006/11/6/first_run2_small.png&quot; alt=&quot;Running Sketch.&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&amp;lt;/center&gt;&lt;/p&gt;

&lt;p&gt;Grab it &lt;a href=&quot;http://orospakr.ca/stuff/olpc_uml/olpc_uml_emu.py&quot;&gt;Here&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;Run the following to read the documentation:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;./olpc_uml_emu.py --help
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Happy Hacking!&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://orospakr.ca/">
    <author>
      <name>orospakr</name>
    </author>
    <id>tag:orospakr.ca,2006-11-06:1</id>
    <published>2006-11-06T02:30:00Z</published>
    <updated>2007-01-07T02:14:04Z</updated>
    <link href="http://orospakr.ca/2006/11/6/test-post-on-new-blog" rel="alternate" type="text/html"/>
    <title>Test post on new blog.</title>
<content type="html">
            Test!
          </content>  </entry>
</feed>
