<?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:ajaxxx</id>
  <title>now if you've got a pair of headphones...</title>
  <subtitle>you'd better get 'em on and get 'em cranked up</subtitle>
  <author>
    <name>Adam Jackson</name>
  </author>
  <link rel="alternate" type="text/html" href="http://ajaxxx.livejournal.com/"/>
  <link rel="self" type="text/xml" href="http://ajaxxx.livejournal.com/data/atom"/>
  <updated>2009-09-30T17:07:35Z</updated>
  <lj:journal userid="14256" username="ajaxxx" type="personal"/>
  <link rel="service.feed" type="application/x.atom+xml" href="http://ajaxxx.livejournal.com/data/atom" title="now if you've got a pair of headphones..."/>
  <link rel="hub" href="http://pubsubhubbub.appspot.com/"/>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ajaxxx:62015</id>
    <link rel="alternate" type="text/html" href="http://ajaxxx.livejournal.com/62015.html"/>
    <link rel="self" type="text/xml" href="http://ajaxxx.livejournal.com/data/atom/?itemid=62015"/>
    <title>On Portland</title>
    <published>2009-09-30T17:07:35Z</published>
    <updated>2009-09-30T17:07:35Z</updated>
    <category term="x"/>
    <lj:music>kmfdm - diy</lj:music>
    <content type="html">The Portland State University machine room - host of &lt;a href="http://www.penny-arcade.com/comic/2005/01/31/"&gt;annarchy&lt;/a&gt;, aka &lt;tt&gt;people.freedesktop.org&lt;/tt&gt; and the storage for personal git repos - had a rather catastrophic series of power failures yesterday.  As in, both of the independent, UPS-backed power rails to the room failed simultaneously, multiple times.  As best we can tell, one of those failures was during ext3 journal recovery of &lt;tt&gt;/home&lt;/tt&gt; from one of the previous failures.  fsck was utterly, utterly unable to cope with this.&lt;br /&gt;&lt;br /&gt;So, &lt;tt&gt;/home&lt;/tt&gt; got a reformat.  &lt;tt&gt;/home&lt;/tt&gt; on that machine was not backed up (and never has been advertised as permanent storage), so anything you had there is lost.  Git repos can be restored from your own clones, of course.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ajaxxx:61742</id>
    <link rel="alternate" type="text/html" href="http://ajaxxx.livejournal.com/61742.html"/>
    <link rel="self" type="text/xml" href="http://ajaxxx.livejournal.com/data/atom/?itemid=61742"/>
    <title>the platform of choice for linux and open source</title>
    <published>2009-08-07T18:40:30Z</published>
    <updated>2009-08-07T18:40:30Z</updated>
    <category term="heckling"/>
    <category term="x"/>
    <lj:music>download - affirmed</lj:music>
    <content type="html">I see Intel is &lt;a href="https://lists.ubuntu.com/archives/ubuntu-devel/2009-August/028670.html"&gt;continuing&lt;/a&gt; their excellent support story for Poulsbo.&amp;nbsp; I wonder just how much goodwill they're willing to lose over this chip.&lt;br /&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ajaxxx:61607</id>
    <link rel="alternate" type="text/html" href="http://ajaxxx.livejournal.com/61607.html"/>
    <link rel="self" type="text/xml" href="http://ajaxxx.livejournal.com/data/atom/?itemid=61607"/>
    <title>A brief treatise on standards</title>
    <published>2009-06-22T20:05:37Z</published>
    <updated>2009-06-22T20:05:37Z</updated>
    <category term="heckling"/>
    <category term="x"/>
    <lj:music>reverend horton heat - bales of cocaine</lj:music>
    <content type="html">Monitor plug and play works by storing a descriptor called EDID in the monitor.  The most important thing in this descriptor is the list of modes that the monitor supports.  You would think this would be a fairly straightforward thing, but it's actually not, because you've only got 128 bytes to work with.  So there end up being multiple ways to encode a mode in EDID:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;the Established Timings fields I and II and Manufacturer's Timings, which is a three-byte bitmap of 17 industry-standard timings, plus seven bits of &amp;quot;manufacturer's mask&amp;quot; which could in principle be more modes but no manufacturer publishes what they mean&lt;/li&gt;&lt;li&gt;the Standard Timings field, which is an array of eight two-byte codes, thus: eight bits for width in multiples of 8 with 0x01 meaning 256; two bits for image aspect ratio (with one of the combinations overloaded to mean 16:10 or 1:1 depending on the spec revision); six bits for field refresh rate minus 60&lt;/li&gt;&lt;li&gt;Up to four of various 18-byte detailed monitor descriptors, including:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Detailed Timing descriptors, which encode more or less every timing parameter including sync intervals and polarity, borders, interlacing, stereo, star sign, etc.&lt;/li&gt;&lt;li&gt;Display Range Limit descriptors, which can describe sync range intervals and optionally mark them as supporting the GTF or CVT timing formulas, implying that any mode conforming to those sync ranges and timing formulas is supported&lt;/li&gt;&lt;li&gt;arrays of up to six Standard Timing identifiers, encoded as above&lt;/li&gt;&lt;li&gt;arrays of up to four 3-byte CVT descriptors, which encode twelve bits for image height, two bits for aspect ratio, a two-bit enum for preferred refresh rate, and a five-bit mask for supported refresh rates&lt;/li&gt;&lt;li&gt;the Established Timings III descriptor, which comprises 44 bits of yet more industry-standard timings as published in the DMT spec, and 52 unused bits set to zero&lt;/li&gt;&lt;li&gt;potentially any of sixteen manufacturer-specific detailed blocks, none of which are documented, any of which could contain mode support information&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;Not content with the restrictive expressive power of base EDID, an extension mechanism was introduced.&amp;nbsp; You can have up to 255 128-byte extension blocks, including:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;the Consumer Electronics Association extension, which lets you specify:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Arbitrary numbers of Short Video Descriptors, which are one-byte indices into a list of timings in the CEA spec&lt;/li&gt;&lt;li&gt;Arbitrary numbers of detailed timing blocks, encoded as in base EDID&lt;span style="display: none;"&gt; &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;the Video Timing Block extension, which lets you specify:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Zero to six detailed timing blocks, encoded as in base EDID&lt;/li&gt;&lt;li&gt;Zero to forty CVT 3-byte descriptors, encoded almost as in base EDID except with fewer legal aspect ratios&lt;/li&gt;&lt;li&gt;Zero to sixty-one Standard Timing descriptors, encoded as in base EDID&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;the Device Information extension, which lets you specify:&lt;ul&gt;&lt;li&gt;A bit under the Miscellaneous Display Capabilities section for &amp;quot;VGA/DOS Legacy Timing Modes&amp;quot; support, which is a predefined set of 24 low-resolution modes you remember from EGA&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Manufacturer-specific extension blocks, which are naturally undocumented and could contain timing info&lt;/li&gt;&lt;/ul&gt;Naturally, the display industry found this lack of flexibility entirely unacceptable.&amp;nbsp; So, soon and very soon, you will also begin to see displays that conform to the newer DisplayID specification.&amp;nbsp; Fortunately, to minimize time to market and maximize software reuse, DisplayID timing descriptors are entirely compatible with EDID:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Type I detailed timings, which are encoded exactly like the detailed timing descriptors in EDID, except for using an additional byte for pixel clock, moving the stereo and interlace bits, adding an aspect ratio field, eliminating borders, and widening the storage for all the horizontal and vertical timing numbers&lt;/li&gt;&lt;li&gt;Type II&amp;nbsp;detailed timings, which are encoded exactly like the detailed timing descriptors in EDID, except for being only 11 bytes long, using an additional byte for pixel clock, moving the stereo and interlace bits, eliminating borders, storing all horizontal timing parameters in terms of eight-pixel character cells, and widening the storage for vertical timing numbers&lt;/li&gt;&lt;li&gt;Type III&amp;nbsp;short timings, which encode CVT&amp;nbsp;timings in three bytes exactly like CVT 3-byte descriptors in base EDID, but do it as a bit for preferred-timing-or-not, a bit for reduced-blanking-or-not, four bits for aspect ratio, eight bits for horizontal image size in eight-pixel character cells, a bit for interlaced-or-not, and seven bits for refresh rate&lt;/li&gt;&lt;li&gt;Type IV timing codes, which are one-byte indices into the DMT&amp;nbsp;timing list, unlike any EDID&amp;nbsp;encoding method&lt;/li&gt;&lt;li&gt;Supported VESA&amp;nbsp;Timings data blocks, which is a ten-byte bitfield corresponding to various modes in DMT, but not in the order that they're in the DMT spec, nor in the same order as the Established Timings I through III&amp;nbsp;in base EDID&lt;/li&gt;&lt;li&gt;Supported CEA Timings data blocks, which is a seven-byte bitfield corresponding (shockingly)&amp;nbsp;to a superset of the CEA mode list in the most recent version of the spec I&amp;nbsp;have handy, and even in the same order as in the spec&lt;/li&gt;&lt;li&gt;Display Range Limit descriptors, which are exactly like the encoding in base EDID, except for widening the storage for pixel clock, shrinking the storage for horizontal and vertical sync limits, adding maxima for horizontal and vertical blanking, and removing support for GTF&lt;/li&gt;&lt;li&gt;CEA-defined blocks, which are presumably in a newer version of the spec than I&amp;nbsp;have&lt;/li&gt;&lt;li&gt;Manufacturer-specific data blocks&lt;/li&gt;&lt;/ul&gt;Did I&amp;nbsp;say compatible?&amp;nbsp; That other thing.&lt;br /&gt;&lt;br /&gt;So the other great part about DisplayID is that it requires host software updates to work, because - afaict - it's published at the same I2C address as EDID was.&amp;nbsp; This is kind of okay for laptops, since you know what software is shipping on them.&amp;nbsp; It's less okay for standalone displays, because now it raises the very real possibility of being able to buy a monitor that is too new to work with your old operating system.&lt;br /&gt;&lt;br /&gt;Even better, drivers using VESA&amp;nbsp;BIOS&amp;nbsp;Extensions (which admittedly are kind of boned already) are about to be left out in the cold.&amp;nbsp; The VBE spec only defines a call to get EDID, and no legal DisplayID block can possibly be confused for an EDID block, so if your video BIOS&amp;nbsp;actually checks for the EDID&amp;nbsp;block header, there's no way to get it to return DisplayID anyway.&amp;nbsp; You now have a combination of video card, cable, and monitor, that can not be used together with VBE.&amp;nbsp; For people running the unfortunate sort of OS&amp;nbsp;you have to pay for, there's the other kind of connector conspiracy too, where you probably can't get a combination of (native driver that supports DisplayID)&amp;nbsp;and (operating system with native driver support) for your hardware either.&lt;br /&gt;&lt;br /&gt;Thanks VESA.&lt;br /&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ajaxxx:61355</id>
    <link rel="alternate" type="text/html" href="http://ajaxxx.livejournal.com/61355.html"/>
    <link rel="self" type="text/xml" href="http://ajaxxx.livejournal.com/data/atom/?itemid=61355"/>
    <title>burn like an animal</title>
    <published>2009-04-06T21:32:54Z</published>
    <updated>2009-04-06T21:33:28Z</updated>
    <category term="heckling"/>
    <category term="fail"/>
    <lj:music>rob zombie - dragula</lj:music>
    <content type="html">I really am stunned that anyone thinks &lt;a href="http://lists.debian.org/debian-devel-announce/2009/04/msg00001.html"&gt;this&lt;/a&gt; is a worthwhile use of time.&lt;br /&gt;&lt;br /&gt;Stunned is one word for it.  Dismayed is another.  Take your pick.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ajaxxx:61119</id>
    <link rel="alternate" type="text/html" href="http://ajaxxx.livejournal.com/61119.html"/>
    <link rel="self" type="text/xml" href="http://ajaxxx.livejournal.com/data/atom/?itemid=61119"/>
    <title>consume until you bleed</title>
    <published>2009-03-15T22:32:28Z</published>
    <updated>2009-03-15T22:32:28Z</updated>
    <category term="nerdery"/>
    <category term="x"/>
    <lj:music>depeche mode - wrong</lj:music>
    <content type="html">I've been poking at (tearing my hair out over) DisplayPort support for the various graphics chips under Linux.  Rather than post something here that would soon be out of date, I made a &lt;a href="http://www.x.org/wiki/DisplayPort"&gt;status page on the wiki&lt;/a&gt;.  The executive summary right now is No It Doesn't Work, but that should change soon.&lt;br /&gt;&lt;br /&gt;DP actually promises to be a pretty cool technology.  Compared to DVI it seems a bit overengineered, but that's sort of like comparing a car to a skateboard.  Given the per-port licensing tax on HDMI, I think DP's eventual dominance is inevitable, but HDMI is pretty entrenched so that won't be any time soon.  We'll just have to deal with the connector conspiracy until HDMI dies.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ajaxxx:60869</id>
    <link rel="alternate" type="text/html" href="http://ajaxxx.livejournal.com/60869.html"/>
    <link rel="self" type="text/xml" href="http://ajaxxx.livejournal.com/data/atom/?itemid=60869"/>
    <title>a sense of time</title>
    <published>2008-11-22T22:29:28Z</published>
    <updated>2008-11-22T22:29:28Z</updated>
    <category term="life"/>
    <lj:music>local h - cynic</lj:music>
    <content type="html">I realized while at the show last night that I've been going to see Local H perform for over ten years.&lt;br /&gt;&lt;br /&gt;No real story there or anything, but it was kind of pleasant to note, given how my life feels like it tends towards the transient.  Four years is an eternity.  Ten is incomprehensible.  Maybe some things last after all.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ajaxxx:60476</id>
    <link rel="alternate" type="text/html" href="http://ajaxxx.livejournal.com/60476.html"/>
    <link rel="self" type="text/xml" href="http://ajaxxx.livejournal.com/data/atom/?itemid=60476"/>
    <title>wtf pthreads</title>
    <published>2008-11-17T14:55:02Z</published>
    <updated>2008-11-17T14:55:02Z</updated>
    <category term="fail"/>
    <category term="nerdery"/>
    <lj:music>nine inch nails - gave up</lj:music>
    <content type="html">So I had this code that did essentially:&lt;br /&gt;&lt;pre&gt;
for (int i = 0; i &amp;lt; num_files; i++)
    if ((fd = open(files[i]-&amp;gt;name, O_RDONLY)))
        do_stuff(fd);
&lt;/pre&gt; And I figured, hey, I've got an I/O scheduler and my disks have command queueing now, let's mitigate some of that seek death and do multiple stuffs in parallel.  Well, &lt;a href="http://www.jerkcity.com/jerkcity2434.html"&gt;here in ***america***&lt;/a&gt; where &lt;tt&gt;fork()&lt;/tt&gt; is cheap you'd do:&lt;br /&gt;&lt;pre&gt;
for (int i = 0; i &amp;lt; num_files; i++) {
    if (num_kids == MAX_KIDS)
        wait(NULL);
    if ((fd = open(files[i]-&amp;gt;name, O_RDONLY))) {
        if (!fork()) {
            do_stuff(fd);
        } else {
            num_kids++;
        }
    }
    while (waitpid(-1, NULL, WNOHANG) &amp;gt; 0)
        num_kids--; 
}
while (num_kids--)
    wait(NULL);
&lt;/pre&gt; And then it's off to the bar.  For some reason I thought that maybe doing it in pthreads would be a good exercise, and tried it that way first.  (Actually I tried POSIX AIO zeroth.  Ha!  Good one, guys.  You almost got me.)  That went something like:&lt;br /&gt;&lt;pre&gt;
for (int i = 0; i &amp;lt; num_files; i++) {
    if ((fd == open(files[i]-&amp;gt;name, O_RDONLY)))
        pthread_create(&amp;amp;thread[min_thread_index], NULL, do_stuff, (void *)fd);
    /* hmm, how to throttle thread creation? */
    pthread_join(&amp;amp;thread[i % MAX_KIDS], NULL); /* bonghits in the hood */
    /* and then reset min_thread_index somehow? ugh */
}
&lt;/pre&gt; Except that doesn't work, because you can only join with named threads, and not just whichever one happens to die first.  I have no idea how long each of these threads is actually going to take, so round-robin is a waste of time.  I could stick in a semaphore that every thread downs on init and ups on termination, and block the dispatch loop on that, but that's still not enough, since then I still need to figure out - somehow - which thread died so I can reuse its slot in &lt;tt&gt;thread[]&lt;/tt&gt;.  Why &lt;tt&gt;pthread_create()&lt;/tt&gt; doesn't just &lt;b&gt;return&lt;/b&gt; the new &lt;tt&gt;pthread_t&lt;/tt&gt; is beyond me.&lt;br /&gt;&lt;br /&gt;Of course ideally we'd have &lt;tt&gt;&lt;a href="https://lists.ubuntu.com/archives/upstart-devel/2008-May/000599.html"&gt;waitfd()&lt;/a&gt;&lt;/tt&gt; that was smart enough to cope with thread IDs too, and you'd message the thread ID back out to the master process somehow, and you'd still have to allocate your own &lt;tt&gt;pthread_t&lt;/tt&gt;'s anyway.  Hooray for unix.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ajaxxx:60318</id>
    <link rel="alternate" type="text/html" href="http://ajaxxx.livejournal.com/60318.html"/>
    <link rel="self" type="text/xml" href="http://ajaxxx.livejournal.com/data/atom/?itemid=60318"/>
    <title>pac-man is loving it</title>
    <published>2008-10-17T02:56:11Z</published>
    <updated>2008-10-17T02:56:11Z</updated>
    <category term="heckling"/>
    <category term="nerdery"/>
    <lj:music>junkie xl - more</lj:music>
    <content type="html">I find it entirely appropriate that the ACPI name for the embedded controller in a Sony Vaio would be H8EC.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ajaxxx:60080</id>
    <link rel="alternate" type="text/html" href="http://ajaxxx.livejournal.com/60080.html"/>
    <link rel="self" type="text/xml" href="http://ajaxxx.livejournal.com/data/atom/?itemid=60080"/>
    <title>switching graphics argh</title>
    <published>2008-10-06T21:24:32Z</published>
    <updated>2008-10-06T21:47:13Z</updated>
    <lj:music>local h - michelle (again)</lj:music>
    <content type="html">There's a new kind of toy that keeps showing up at the office.  Laptop vendors are really starting to push multiple-GPU machines.  The theory goes that you can use one low-power GPU while you're on battery, and a high-performance GPU when you're plugged into wall power.  I've played with a couple of these so far and people are starting to ask about them, so I figured I'd write down what I know and what I think the plans are.&lt;br /&gt;&lt;br /&gt;The best case is that you get a laptop like the Lenovo Thinkpad W500, where the BIOS has options controlling the GPU setup.  You can pick GPU A, or GPU B, or switchable graphics.  If you pick one or the other, that's all that will show up on the PCI bus, and so X will pick it up and run with it.  Hooray!&lt;br /&gt;&lt;br /&gt;If you pick switchable graphics, we'll see two GPUs on the PCI bus.  And now, things get tricky.  Which one is active?  Well, you could look at the VGA routing bits in the PCI configuration and attempt to figure out which GPU the BIOS enabled.  But on the above-mentioned Lenovo, that doesn't work, VGA is just not routed anywhere.  Maybe you could look to see whether only one device has memory and i/o decoding enabled, but again, that doesn't seem to be reliable, and what do you do if there's more than one?&lt;br /&gt;&lt;br /&gt;Ideally this is where ACPI would come to our rescue, and there'd be some platform method to call to tell us which ASIC to talk to.  Maybe there is, but we haven't found it yet.  Neither do we seem to get any unexpected ACPI events when switching from battery power to wall power.  The Lenovo has an option in the BIOS that claims to automatically detect whether the OS supports GPU switching, but it doesn't seem to be reliable, in that if I turn detection on, I still see both chips on the PCI bus.  Nonetheless this does indicate that there's some platform support there somewhere and we just need to look harder.&lt;br /&gt;&lt;br /&gt;Of course, if you're unlucky, you got a machine like the Sony Vaio Z540, where the BIOS has no GPU options, period.  If you end up in a situation where you see two video devices on PCI, just write out a minimal xorg.conf that picks the driver and the PCI slot, and hopefully things will work.  If not, you have two pieces, and you can keep them or not.&lt;br /&gt;&lt;br /&gt;Anyway, that gets you as far as doing the same boring single GPU stuff you've always done.  As far as runtime switching goes, we're still pretty far off from making that a reality in the open drivers.  We could hack up the relevant drivers such that we initialize them both but just only feed commands to one or the other, and then write the serialization exercise to move pixmaps and such from one to the other on switch events.  Or, we might be able to start one X server on each GPU and then stick an Xdmx in front of them.  In neither case will GLX work the way you expect (if at all), and there will be all kinds of fun corner cases trying to get the second chip to come up exactly compatibly with the first.&lt;br /&gt;&lt;br /&gt;Getting this to work well should actually be a lot of fun, and there's lots of opportunity to sweep away old bad design and come up with something good.&lt;br /&gt;&lt;br /&gt;In tangentially related news: my LCA talk was accepted!  I'll be talking about shatter, which is a project to rewrite the X rendering layer to work around various hardware and coordinate limitations.  This is not unrelated to the above problem, hopefully we'll get rendering abstracted far enough away from the driver to make it easier to switch among drivers at runtime.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ajaxxx:59792</id>
    <link rel="alternate" type="text/html" href="http://ajaxxx.livejournal.com/59792.html"/>
    <link rel="self" type="text/xml" href="http://ajaxxx.livejournal.com/data/atom/?itemid=59792"/>
    <title>Words, words, words</title>
    <published>2008-07-23T14:34:49Z</published>
    <updated>2008-07-23T14:34:49Z</updated>
    <category term="fedora"/>
    <lj:music>dethklok - awaken</lj:music>
    <content type="html">The &lt;a href="https://admin.fedoraproject.org/voting/vote/relnamef10"&gt;Fedora 10 name elections&lt;/a&gt; are open.  My totally awesome name suggestion for F9 (Bathysphere) lost by a slim margin, so now I'm lobbying harder for decent names.  So here's what you should vote for:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Whiskey Run, because whiskey is awesome, and the potential for a whiskeyrunner theme in the artwork is excellent.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Saltpetre, because it's a double-whammy connection with Sulphur (British variant spelling, and component of gunpowder), and gunpowder -&amp;gt; steampunk art -&amp;gt; awesome.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Farnsworth, because Futurama.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Cambridge, because Red Hat Linux 10 would have been Cambridge, and we finally made it to version 10 of something.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Every time you vote for something else, God detonates a kitten.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ajaxxx:59573</id>
    <link rel="alternate" type="text/html" href="http://ajaxxx.livejournal.com/59573.html"/>
    <link rel="self" type="text/xml" href="http://ajaxxx.livejournal.com/data/atom/?itemid=59573"/>
    <title>mqp</title>
    <published>2008-07-03T13:32:13Z</published>
    <updated>2008-07-03T23:59:49Z</updated>
    <category term="mqp"/>
    <lj:music>system of a down - kill rock 'n roll</lj:music>
    <content type="html">&lt;tt&gt; &amp;lt;&lt;span class='ljuser  ljuser-name_airlied' lj:user='airlied' style='white-space: nowrap;'&gt;&lt;a href='http://airlied.livejournal.com/profile'&gt;&lt;img src='http://l-stat.livejournal.com/img/userinfo.gif' alt='[info]' width='17' height='17' style='vertical-align: bottom; border: 0; padding-right: 1px;' /&gt;&lt;/a&gt;&lt;a href='http://airlied.livejournal.com/'&gt;&lt;b&gt;airlied&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&amp;gt; is a blur-facist, someone who doesn't like Damon Albarn, or someone who thinks Damon Albarn is the new Hitler..&lt;/tt&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ajaxxx:59350</id>
    <link rel="alternate" type="text/html" href="http://ajaxxx.livejournal.com/59350.html"/>
    <link rel="self" type="text/xml" href="http://ajaxxx.livejournal.com/data/atom/?itemid=59350"/>
    <title>perhaps bonghits will fix my cell phone</title>
    <published>2008-06-24T14:24:54Z</published>
    <updated>2008-06-24T14:24:54Z</updated>
    <category term="fail"/>
    <lj:music>hybrid - higher than a skyscraper</lj:music>
    <content type="html">&lt;a href="http://www.symbianfoundation.org/"&gt;The Symbian Foundation&lt;/a&gt;: Because you didn't have enough bad free software already.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ajaxxx:58885</id>
    <link rel="alternate" type="text/html" href="http://ajaxxx.livejournal.com/58885.html"/>
    <link rel="self" type="text/xml" href="http://ajaxxx.livejournal.com/data/atom/?itemid=58885"/>
    <title>counterintuitive nipples</title>
    <published>2008-06-22T15:40:46Z</published>
    <updated>2008-06-22T15:40:46Z</updated>
    <category term="git"/>
    <lj:music>front line assembly - future fail</lj:music>
    <content type="html">I tire of people objecting to using git on the basis of bad documentation and UI obscurity.  There seems to be a common blind spot here, which is that CVS (which everyone learned first) is just as bad, if not worse.  The CVS manual has been getting steadily worse over time, and I challenge anyone reading about &lt;tt&gt;cvs up -j&lt;/tt&gt; for the first time to correctly explain it, let alone sticky tags or binary file handling.&lt;br /&gt;&lt;br /&gt;More fundamentally, I think people forget that source control is a very weird and very hard problem.  Much like the lower levels of particle physics, you kind of have to implement the behaviour you expect using a model that's not intuitive.  That the doc writers for git seem to revel in spewing nerdporn words like "tree-ish" at you is unfortunate, but people like seeing dmesg spew at boot for the same reason: it's obscure and therefore makes you feel cool.&lt;br /&gt;&lt;br /&gt;Of course, no one needs to know how pretty much any vcs works under the skin on a daily basis, and that's why &lt;a href="http://www.google.com/search?q=%22introduction+to+git%22&amp;amp;btnG=Search"&gt;sensible git documentation exists&lt;/a&gt;.  HELLO PEOPLE THE INTERNET HAS SEARCH NOW.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ajaxxx:58780</id>
    <link rel="alternate" type="text/html" href="http://ajaxxx.livejournal.com/58780.html"/>
    <link rel="self" type="text/xml" href="http://ajaxxx.livejournal.com/data/atom/?itemid=58780"/>
    <title>the reg: let's make shit up and pretend we're journalists</title>
    <published>2008-04-17T19:33:13Z</published>
    <updated>2008-04-17T19:33:13Z</updated>
    <category term="fail"/>
    <content type="html">Not, of course, that anyone should mistake The Register for journalism, but the &lt;a href="http://www.theregister.co.uk/2008/04/17/red_hat_abandons_consumer_desktop_market/"&gt;article&lt;/a&gt; on Red Hat's desktop strategy is right about 580 nm on the "yellow" scale.  For those of you not keeping score, we haven't released anything that could be called consumer desktop product in &lt;b&gt;over five years&lt;/b&gt;.  If this counts as "scurrying away" from a market, I wonder how they feel about the rapid decline of OS/2 in recent years.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ajaxxx:58615</id>
    <link rel="alternate" type="text/html" href="http://ajaxxx.livejournal.com/58615.html"/>
    <link rel="self" type="text/xml" href="http://ajaxxx.livejournal.com/data/atom/?itemid=58615"/>
    <title>not a substitute for sleep</title>
    <published>2008-04-14T23:24:16Z</published>
    <updated>2008-04-14T23:24:16Z</updated>
    <category term="x"/>
    <category term="travel"/>
    <lj:music>god lives underwater - don't know how to be</lj:music>
    <content type="html">I came into the office this morning and wrote four things on the whiteboard.  By the end of the day I'd crossed three things off.  I could use more days like today.&lt;br /&gt;&lt;br /&gt;Going to see Autechre with &lt;span class='ljuser  ljuser-name_kernelslacker' lj:user='kernelslacker' style='white-space: nowrap;'&gt;&lt;a href='http://kernelslacker.livejournal.com/profile'&gt;&lt;img src='http://l-stat.livejournal.com/img/userinfo.gif' alt='[info]' width='17' height='17' style='vertical-align: bottom; border: 0; padding-right: 1px;' /&gt;&lt;/a&gt;&lt;a href='http://kernelslacker.livejournal.com/'&gt;&lt;b&gt;kernelslacker&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&amp;nbsp;in about an hour.  Woot!  Then tomorrow, I leave for &lt;a href="http://xorg.freedesktop.org/wiki/Events/XDC2008"&gt;XDC2008&lt;/a&gt;.  I'm not on the schedule this year, mostly because I don't have a lot to talk about.  I expect I'll lead an ad-hoc session at some point whinging about releasing and integration and other such boring things.  Last XDS featured lots of talk about things ahead, and right now we seem to be well in the middle of getting things done.  Which is a pleasant problem to have, all things considered.&lt;br /&gt;&lt;br /&gt;Also, I don't fly out of SFO until like 10:30pm on Saturday.  Bay area people, you are hereby required to entertain me.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ajaxxx:58262</id>
    <link rel="alternate" type="text/html" href="http://ajaxxx.livejournal.com/58262.html"/>
    <link rel="self" type="text/xml" href="http://ajaxxx.livejournal.com/data/atom/?itemid=58262"/>
    <title>freenode: irc for idiots</title>
    <published>2008-03-05T16:11:34Z</published>
    <updated>2008-03-05T16:11:34Z</updated>
    <category term="fail"/>
    <lj:music>outkast - love hater</lj:music>
    <content type="html">To whoever made it so you can't &lt;tt&gt;/nick&lt;/tt&gt; when you're in a channel you can't send to: please die in a chemical fire.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ajaxxx:58027</id>
    <link rel="alternate" type="text/html" href="http://ajaxxx.livejournal.com/58027.html"/>
    <link rel="self" type="text/xml" href="http://ajaxxx.livejournal.com/data/atom/?itemid=58027"/>
    <title>braindrizzle</title>
    <published>2008-02-29T16:52:17Z</published>
    <updated>2008-02-29T16:52:17Z</updated>
    <category term="fail"/>
    <lj:music>combichrist - what the fuck is wrong with you?</lj:music>
    <content type="html">&lt;a href="http://brainstorm.ubuntu.com/idea/276/"&gt;yeah, we'll get right on that&lt;/a&gt;.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ajaxxx:57766</id>
    <link rel="alternate" type="text/html" href="http://ajaxxx.livejournal.com/57766.html"/>
    <link rel="self" type="text/xml" href="http://ajaxxx.livejournal.com/data/atom/?itemid=57766"/>
    <title>budget.com.au is made of fail</title>
    <published>2008-02-03T00:47:53Z</published>
    <updated>2008-02-03T00:47:53Z</updated>
    <category term="fail"/>
    <lj:music>cracker - i hate my generation</lj:music>
    <content type="html">1. Enter nationality.&lt;br /&gt;2. Enter rental period and locations.&lt;br /&gt;3. Select desired vehicle.&lt;br /&gt;4. -ETIMEDOUT.&lt;br /&gt;&lt;br /&gt;HELLO I HAVE MONEY I WANT TO GIVE YOU.  PLEASE HELP ME GIVE YOU MONEY.&lt;br /&gt;&lt;br /&gt;But no, these guys are novices:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://people.freedesktop.org/~ajax/i-can-has-website.png"&gt;&lt;br /&gt;&lt;br /&gt;Give up.  Find another industry.  Software is clearly not for you.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ajaxxx:57467</id>
    <link rel="alternate" type="text/html" href="http://ajaxxx.livejournal.com/57467.html"/>
    <link rel="self" type="text/xml" href="http://ajaxxx.livejournal.com/data/atom/?itemid=57467"/>
    <title>that's why the suicide machine is built for two</title>
    <published>2008-01-25T16:10:04Z</published>
    <updated>2008-01-25T16:10:04Z</updated>
    <category term="lca"/>
    <category term="travel"/>
    <lj:music>fear factory - securitron</lj:music>
    <content type="html">Going to &lt;a href="http://linux.conf.au/"&gt;LCA&lt;/a&gt; in about seven hours.  I absolutely did not lose the code I came in on a weekend to write three days before my flight, forcing a mad rewrite the day before.  Nope.  Nothing like that ever happens to me.&lt;br /&gt;&lt;br /&gt;Fortunately what I've got now looks like it might actually work, and there's enough left to do to keep me occupied on the plane ride.  Personal note to Australia: I don't know if this relationship can work.  You always seem so distant.&lt;br /&gt;&lt;br /&gt;After that I will be heroically uncommunicative, as I take a well deserved vacation.  Then, most likely, I get to come back and wrangle both the Fedora 9 X integration, as well as Xorg 7.4.  In lieu of postcards, please send your well-wishes written on the label of a bottle of tequila.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ajaxxx:57214</id>
    <link rel="alternate" type="text/html" href="http://ajaxxx.livejournal.com/57214.html"/>
    <link rel="self" type="text/xml" href="http://ajaxxx.livejournal.com/data/atom/?itemid=57214"/>
    <title>breaking the law to make your life harder</title>
    <published>2007-12-17T14:14:31Z</published>
    <updated>2007-12-17T14:14:31Z</updated>
    <category term="winter"/>
    <category term="life"/>
    <lj:music>queens of the stone age - mosquito song</lj:music>
    <content type="html">At about 1700 last night I went out to shovel snow.  This hadn't been done since at least Saturday, and it was raining for most of Sunday, so I had a good five inches of heavy wet snow to move.  Took about ninety minutes, all told.&lt;br /&gt;&lt;br /&gt;Except then later, at about 2200, I tried to take the trash out to the curb, and noticed that not only had the plows decided to run again, thus dumping about a ton of ice at the end of the driveway, but it had piled up so high that it crested over the snow pile on the curb, dumping another ton of ice on the sidewalk.&lt;br /&gt;&lt;br /&gt;My back is rather sore this morning.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ajaxxx:56886</id>
    <link rel="alternate" type="text/html" href="http://ajaxxx.livejournal.com/56886.html"/>
    <link rel="self" type="text/xml" href="http://ajaxxx.livejournal.com/data/atom/?itemid=56886"/>
    <title>Your moment of pie</title>
    <published>2007-11-20T22:40:00Z</published>
    <updated>2007-11-20T22:54:32Z</updated>
    <category term="pie"/>
    <category term="x"/>
    <lj:music>god lives underwater - vapors</lj:music>
    <content type="html">&lt;img src="http://people.freedesktop.org/~ajax/30-love.jpg" width="800" height="600"&gt;&lt;br /&gt;&lt;br /&gt;Dual 30" monitors, lit by open source drivers.  Note the remote debugging rig, which we used to get &lt;a href="http://airlied.livejournal.com/53129.html"&gt;this&lt;/a&gt; working.&lt;br /&gt;&lt;br /&gt;Happy Thanksgiving all.  Go home, eat pie.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ajaxxx:56629</id>
    <link rel="alternate" type="text/html" href="http://ajaxxx.livejournal.com/56629.html"/>
    <link rel="self" type="text/xml" href="http://ajaxxx.livejournal.com/data/atom/?itemid=56629"/>
    <title>ajaxxx @ 2007-08-24T20:24:00</title>
    <published>2007-08-25T00:25:01Z</published>
    <updated>2007-08-25T00:25:01Z</updated>
    <content type="html">&lt;div&gt;&lt;a href="http://www.livejournal.com/poll/?id=1044751"&gt;View Poll: #1044751&lt;/a&gt;&lt;/div&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ajaxxx:56315</id>
    <link rel="alternate" type="text/html" href="http://ajaxxx.livejournal.com/56315.html"/>
    <link rel="self" type="text/xml" href="http://ajaxxx.livejournal.com/data/atom/?itemid=56315"/>
    <title>Worst "Dear Lazyweb" ever</title>
    <published>2007-08-01T22:04:25Z</published>
    <updated>2007-08-01T22:04:25Z</updated>
    <category term="lazyweb"/>
    <category term="x"/>
    <lj:music>daft punk - revolution 909</lj:music>
    <content type="html">I'm trying really hard to find a monitor with &lt;a href="http://www.vesa.org/Standards/summary/2004_4.htm"&gt;DPVL&lt;/a&gt; support, because I'd like to implement support for it in X.  And failing.  It seems no one wants to tell you the features that their hardware implements, because they don't want you to actually buy the thing based on what it can do.  That, or it's just not implemented yet.&lt;br /&gt;&lt;br /&gt;Is there actually a monitor out there that can do this?&lt;br /&gt;&lt;br /&gt;There's also the semi-lazy way of discovering what devices have this, by implementing enough of the other VESA discovery specs so that I can read the appropriate bits out of the hardware, dump them in the X log, and then wait for google to index them.  Which I'm sure I'll get to eventually, but there's less instant gratification that way.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ajaxxx:55870</id>
    <link rel="alternate" type="text/html" href="http://ajaxxx.livejournal.com/55870.html"/>
    <link rel="self" type="text/xml" href="http://ajaxxx.livejournal.com/data/atom/?itemid=55870"/>
    <title>guadec: an epitaph</title>
    <published>2007-07-29T02:44:07Z</published>
    <updated>2007-07-29T02:44:07Z</updated>
    <category term="guadec"/>
    <category term="travel"/>
    <lj:music>moloko - the flipside</lj:music>
    <content type="html">We failed to sell Jono's backpack on eBay (without his knowledge, let alone consent) from the pub because we couldn't get any semblance of functional internet (despite more than one person with a Bluetooth+GPRS/EDGE phone and an N800).  This is not the flying car future I was promised, dammit.&lt;br /&gt;&lt;br /&gt;But at least there was Pimm's.&lt;br /&gt;&lt;br /&gt;My talk went okay I guess?  Most of the people attending it seemed to be way high above the toolkit layer I was hoping for, so there was less feedback than I was hoping for.  However, &lt;span class='ljuser  ljuser-name_fooishbar' lj:user='fooishbar' style='white-space: nowrap;'&gt;&lt;a href='http://fooishbar.livejournal.com/profile'&gt;&lt;img src='http://l-stat.livejournal.com/img/userinfo.gif' alt='[info]' width='17' height='17' style='vertical-align: bottom; border: 0; padding-right: 1px;' /&gt;&lt;/a&gt;&lt;a href='http://fooishbar.livejournal.com/'&gt;&lt;b&gt;fooishbar&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; did a similar talk on Saturday that was attended by the right set of people.  So now we have more stuff to do.  Yay!&lt;br /&gt;&lt;br /&gt;Flying back to the states was less eventful than flying out, no delays or anything.  Going through security three times was pretty awesome (wait, no).  Heathrow wasn't bad so much as dated; it's impressive how much traffic they handle given how crap their layout and checkin process are.  However they don't tell you your gate until 45 minutes before the flight departs, and - like every place else in the UK - the bagels aren't toasted.&lt;br /&gt;&lt;br /&gt;Note for the future: try to live in a country with a less crap currency, lest you leave it for a week and come back a broke-ass ho.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ajaxxx:55652</id>
    <link rel="alternate" type="text/html" href="http://ajaxxx.livejournal.com/55652.html"/>
    <link rel="self" type="text/xml" href="http://ajaxxx.livejournal.com/data/atom/?itemid=55652"/>
    <title>Guadec, day 3</title>
    <published>2007-07-17T22:00:01Z</published>
    <updated>2007-07-18T15:11:03Z</updated>
    <category term="guadec"/>
    <content type="html">&amp;lt;mjg59&amp;gt; i can't believe he's never been deported&lt;br /&gt;&lt;br /&gt;(updated to fix markup.  apparently lj's mobile UI doesn't escape html for you.  i shouldn't be surprised.)</content>
  </entry>
</feed>
