<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Bat Country</title>
	<atom:link href="http://steelpangolin.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://steelpangolin.wordpress.com</link>
	<description>the adventures of Jeremy Ehrhardt and his motley crew of bits</description>
	<lastBuildDate>Sun, 13 Sep 2009 22:53:35 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='steelpangolin.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/6d2bc85db665b9df6f47074ddab76116?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Bat Country</title>
		<link>http://steelpangolin.wordpress.com</link>
	</image>
			<item>
		<title>WMP12: Don&#8217;t Bother</title>
		<link>http://steelpangolin.wordpress.com/2009/09/13/wmp12-dont-bother/</link>
		<comments>http://steelpangolin.wordpress.com/2009/09/13/wmp12-dont-bother/#comments</comments>
		<pubDate>Sun, 13 Sep 2009 22:52:05 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[wmp]]></category>

		<guid isPermaLink="false">http://steelpangolin.wordpress.com/2009/09/13/wmp12-dont-bother/</guid>
		<description><![CDATA[I like Windows 7. It’s got all the things I liked about Vista (Aero Glass, cleaner-looking user directory structure, better support for multiple network interfaces, more text labels and fewer incomprehensible icons, to start) and it’s got the Dock from Mac OS X.   So it stood to reason that the Media Player that [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=steelpangolin.wordpress.com&blog=277318&post=88&subd=steelpangolin&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I like Windows 7. It’s got all the things I liked about Vista (Aero Glass, cleaner-looking user directory structure, better support for multiple network interfaces, more text labels and fewer incomprehensible icons, to start) and it’s got the Dock from Mac OS X. <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  So it stood to reason that the Media Player that comes with Windows 7, namely, <a href="http://en.wikipedia.org/wiki/Windows_Media_Player_12">Windows Media Player 12</a>, might be worth another look.</p>
<p>I’ve tried to use <a href="http://www.microsoft.com/windows/windowsmedia/default.mspx">Windows Media Player</a> a few times before. I think the last time was when WMP10 came out, back when I was still running XP.&#160; It was ugly, glitchy, and liked to freeze for long periods of time for no reason, especially when network shares were involved or the library was much above 20 GB. Once in a while, it would eat its own database and refuse to show anything until I nuked the library database files on disk and reimported everything. Not so good.</p>
<p>Normally, I’d use <a href="http://www.apple.com/itunes/download/">iTunes</a>, but over the past couple of releases it’s been hard not to notice that Apple is a lot worse at writing Windows software than Microsoft is at writing Mac software. I’ve experienced redraw glitches, funky-looking (i.e. <a href="http://www.codinghorror.com/blog/archives/000884.html">not</a> <a href="http://www.microsoft.com/typography/cleartypeInfo.mspx">ClearType</a>) text rendering, general sluggishness, and an inability to turn off annoying things like those go-to-the-iTunes-store arrows which can be taken care of with a preferences editor on the Mac. Also, my iPod 4G finally died. RIP Inductive Satanograph 2004-2009. You’re syncing and charging over FireWire with the angels now… *sniff*</p>
<p>A lot of people use <a href="http://www.winamp.com/">WinAmp</a>, but <a href="http://www.productwiki.com/upload/images/winamp_screen_large.jpg">the UI is like a cheesegrater being rubbed across my corneas</a>. It’s one step above <a href="http://www.overclock3d.net/gfx/articles/2008/11/20122513523l.jpg">a Taiwanese OEM’s overclocking utility</a>. There are things with command-line interfaces that are prettier and more usable than WinAmp. It’s skinnable, so theoretically there could be a skin out there that fixes this problem, but so far every 3rd-party skin I’ve seen has been worse than the default.</p>
<p>So. WMP12. Been using it for a few weeks now. Turns out it has problems. Big ones.</p>
<h2>Tag Support</h2>
<p>Surprisingly, WMP12 supports MPEG-4 tags better than MP3 tags. I’m not aware of any published standard for MPEG-4 tags. Tools like <a href="http://atomicparsley.sourceforge.net/">AtomicParsley</a> and <a href="http://code.google.com/p/mutagen/">Mutagen</a> appear to have been built <a href="http://atomicparsley.sourceforge.net/mpeg-4files.html">based on inspection of iTunes-tagged files</a>. WMP12 had no problem reading my collection of MPEG-4 AAC music, album art and all (except for the problems it has with all album art, which I discuss below.)</p>
<p>However, it doesn’t support <a href="http://www.id3.org/">ID3</a> <a href="http://www.id3.org/Developer_Information">v2.4</a> tags on MP3s at all. The word from the WMP team at work is that this is intended behavior, because v2.4 isn’t widely supported. Umm… The standard’s been out for <em>nine years</em>, guys. You should at least be able to read them even if you don’t write them. Why not ask the Xbox 360 team for some code? The 360’s media player can read them. I don’t know if it supports fancy features like replay gain frames (RVA2) but at least it gets title, album. and artist right.</p>
<p>This is not an insurmountable obstacle; downgrading from v2.4 to <a href="http://www.id3.org/id3v2.3.0">v2.3</a> doesn’t cause any problems in my music library. I ended up writing my own Python utility for reading and writing v2.3 tags, because Mutagen won’t write anything except v2.4, and after downgrading (and cleaning up a few screwed-up files with a hex editor), metadata started appearing in WMP12.</p>
<h2>Metadata</h2>
<p>Unfortunately, WMP12 doesn’t seem to support the ID3 TPOS frame or whatever the MPEG-4 equivalent is. This is the disc number field in iTunes, the one that lets you specify where a track belongs in a multi-disc set. <a href="http://msdn.microsoft.com/en-us/library/dd743220%28VS.85%29.aspx">It’s listed as known by the Windows Media Format SDK</a>, but there’s no way to display it in WMP12, and it doesn’t affect sort ordering, so it might as well not exist. Without it, all the tracks on a multi-disc set get zippered together, sorted by track number and then alphabetically:</p>
<p><a href="http://steelpangolin.files.wordpress.com/2009/09/multidisc_set.png"><img style="border-bottom:0;border-left:0;display:block;float:none;margin-left:auto;border-top:0;margin-right:auto;border-right:0;" title="multidisc_set" border="0" alt="multidisc_set" src="http://steelpangolin.files.wordpress.com/2009/09/multidisc_set_thumb.png?w=713&#038;h=440" width="713" height="440" /></a> </p>
<p>On top of that, <a href="http://social.technet.microsoft.com/Forums/en-US/w7itpromedia/thread/469fb26b-79ca-4a64-8ac6-62161901b714">the Advanced Tag Editor is gone</a>, and the Edit context menu option seems to be broken for some data types: I can’t clear a wrong release year, for example. On hitting Return, it snaps back to the previous value.</p>
<h2>Album art</h2>
<p>I have nice high-quality album art from <a href="http://www.amazon.com/">Amazon</a>, <a href="http://www.discogs.com/">Discogs</a>, iTMS, or the web embedded in almost all of my music files. WMP12 finds it, creates a tiny little downscaled copy, and uses that for album art display instead of the full-resolution stuff in the music file. Then it poops invisible JPEG versions all over the library folder structure (<strong>Folder.jpg</strong>, <strong>AlbumArtSmall.jpg</strong>, and friends.) <a href="http://dalepreston.com/Blog/2009/08/laughable-album-art-craziness-in.html">There was a workaround for earlier versions, but it’s gone now.</a> Look at this Now Playing window. Doesn’t the artwork look lonely? And blurry?</p>
<p><a href="http://steelpangolin.files.wordpress.com/2009/09/tiny_album_art.png"><img style="border-bottom:0;border-left:0;display:block;float:none;margin-left:auto;border-top:0;margin-right:auto;border-right:0;" title="tiny_album_art" border="0" alt="tiny_album_art" src="http://steelpangolin.files.wordpress.com/2009/09/tiny_album_art_thumb.png?w=733&#038;h=613" width="733" height="613" /></a> </p>
<h2>Glitches</h2>
<p>Every so often, I’ll start WMP12 on my home machine and it’ll go through the entire library and make two entries for each track. They’re pointing to the same file location, so nothing’s being copied, but everything is listed twice. This is infuriating. Sometimes it goes away if I relaunch WMP12. Sometimes it doesn’t. It goes away if I delete the library databases in <strong>%LOCALAPPDATA%\Microsoft\Media Player</strong>, but it can come back just as easily. Possibly related is that Last.fm’s scrobbler has stopped scrobbling tracks played in WMP12.</p>
<p>Neither of these glitches happen on my computer at work, and the only difference I’ve noted so far is that the Music library at home includes a folder on an external hard drive (which is always plugged in), while the Music library at work only includes the My Music folder. Don&#8217;t know what’s going on here.</p>
<h1></h1>
<h2>Conclusions</h2>
<p>Man, they’re not even trying any more. Time to reinstall iTunes.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/steelpangolin.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/steelpangolin.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/steelpangolin.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/steelpangolin.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/steelpangolin.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/steelpangolin.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/steelpangolin.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/steelpangolin.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/steelpangolin.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/steelpangolin.wordpress.com/88/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=steelpangolin.wordpress.com&blog=277318&post=88&subd=steelpangolin&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://steelpangolin.wordpress.com/2009/09/13/wmp12-dont-bother/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/98d9c9e85f5996635e5aa785ed61d0da?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">steelpangolin</media:title>
		</media:content>

		<media:content url="http://steelpangolin.files.wordpress.com/2009/09/multidisc_set_thumb.png" medium="image">
			<media:title type="html">multidisc_set</media:title>
		</media:content>

		<media:content url="http://steelpangolin.files.wordpress.com/2009/09/tiny_album_art_thumb.png" medium="image">
			<media:title type="html">tiny_album_art</media:title>
		</media:content>
	</item>
		<item>
		<title>welcome to the Asylum</title>
		<link>http://steelpangolin.wordpress.com/2009/08/22/welcome-to-the-asylum/</link>
		<comments>http://steelpangolin.wordpress.com/2009/08/22/welcome-to-the-asylum/#comments</comments>
		<pubDate>Sat, 22 Aug 2009 17:21:56 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[blog]]></category>

		<guid isPermaLink="false">http://steelpangolin.wordpress.com/2009/08/22/welcome-to-the-asylum/</guid>
		<description><![CDATA[I just had my own Wonko the Sane moment, brought on by a toaster. On emptying the crumb tray, I discovered words embossed on the steel, reading “WARNING – TO PREVENT ELECTRIC SHOCK, UNPLUG BEFORE CLEANING.” Somewhere, there is a man who is familiar enough with the intimate operations of toasters to be trusted to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=steelpangolin.wordpress.com&blog=277318&post=83&subd=steelpangolin&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I just had my own Wonko the Sane moment, brought on by a toaster. On emptying the crumb tray, I discovered words embossed on the steel, reading “WARNING – TO PREVENT ELECTRIC SHOCK, UNPLUG BEFORE CLEANING.” Somewhere, there is a man who is familiar enough with the intimate operations of toasters to be trusted to write warning labels for them, but somehow doesn’t consider that the words he writes will be (a) covered in crumbs and (b) inside a toaster.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/steelpangolin.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/steelpangolin.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/steelpangolin.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/steelpangolin.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/steelpangolin.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/steelpangolin.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/steelpangolin.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/steelpangolin.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/steelpangolin.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/steelpangolin.wordpress.com/83/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=steelpangolin.wordpress.com&blog=277318&post=83&subd=steelpangolin&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://steelpangolin.wordpress.com/2009/08/22/welcome-to-the-asylum/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/98d9c9e85f5996635e5aa785ed61d0da?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">steelpangolin</media:title>
		</media:content>
	</item>
		<item>
		<title>saw a boat from the bus today</title>
		<link>http://steelpangolin.wordpress.com/2009/08/05/saw-a-boat-from-the-bus-today/</link>
		<comments>http://steelpangolin.wordpress.com/2009/08/05/saw-a-boat-from-the-bus-today/#comments</comments>
		<pubDate>Thu, 06 Aug 2009 03:10:10 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[blog]]></category>

		<guid isPermaLink="false">http://steelpangolin.wordpress.com/2009/08/05/saw-a-boat-from-the-bus-today/</guid>
		<description><![CDATA[had Lucky Swede IV painted on the stern in letters of gold. If it’s so lucky, I want to know, what happened to the first three?
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=steelpangolin.wordpress.com&blog=277318&post=82&subd=steelpangolin&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>had Lucky Swede IV painted on the stern in letters of gold. If it’s so lucky, I want to know, what happened to the first three?</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/steelpangolin.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/steelpangolin.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/steelpangolin.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/steelpangolin.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/steelpangolin.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/steelpangolin.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/steelpangolin.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/steelpangolin.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/steelpangolin.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/steelpangolin.wordpress.com/82/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=steelpangolin.wordpress.com&blog=277318&post=82&subd=steelpangolin&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://steelpangolin.wordpress.com/2009/08/05/saw-a-boat-from-the-bus-today/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/98d9c9e85f5996635e5aa785ed61d0da?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">steelpangolin</media:title>
		</media:content>
	</item>
		<item>
		<title>I&#8217;m not dead, I got a job</title>
		<link>http://steelpangolin.wordpress.com/2009/07/31/im-not-dead-i-got-a-job/</link>
		<comments>http://steelpangolin.wordpress.com/2009/07/31/im-not-dead-i-got-a-job/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 22:40:46 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[sharepoint]]></category>

		<guid isPermaLink="false">http://steelpangolin.wordpress.com/2009/07/31/im-not-dead-i-got-a-job/</guid>
		<description><![CDATA[When I was working at JPL for the summer a few years ago, we were doing some very cool stuff that I still think will be crucial to the eventual rise of the machines, but our efforts were greatly impeded by the nature of government operations. For example, most of the lab’s computers were on [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=steelpangolin.wordpress.com&blog=277318&post=78&subd=steelpangolin&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>When I was working at JPL for the summer a few years ago, we were doing some very cool stuff that I still think will be crucial to the eventual rise of the machines, but our efforts were greatly impeded by the nature of government operations. For example, most of the lab’s computers were on three-year rental contracts from a subsidiary of some defense contractor. We weren’t allowed to replace or even upgrade them. I was lucky enough to have my own workstation, and unlucky in that it was a real dark ages UltraSPARC running Solaris, frequently got tapped to run processor-intensive SPICE jobs for other researchers, and on top of that, was the lab’s web server. The other summer researchers weren’t as lucky. There were two or three modern computers which had to be shared among them, and the only reason the lab were able to get them at all is that some bright fellow worked out that he could get around the computer supply contract if he billed computer purchases as “miscellaneous electronic equipment”.</p>
<p>So, screw academia. I’m now living in Seattle and working for <a href="http://www.microsoft.com/">Microsoft</a> on <a href="http://office.microsoft.com/">Office</a> <a href="http://sharepoint.microsoft.com/">SharePoint</a> <a href="http://office.microsoft.com/en-us/sharepointdesigner/">Designer</a> 2010. I’ve been working on improvements to <a href="http://office.microsoft.com/en-us/sharepointdesigner/HA101005871033.aspx">SharePoint workflows</a>, which are long-running, event-driven background processes. The canonical example is approval of an expense report: an approval workflow can automatically trigger when someone uploads an Excel spreadsheet to a SharePoint document library for expense reports, fish around inside for the total, and process it and mark it as approved in the document library if the total is less than $500, or hand it off to the uploader’s manager for manual approval if the total is $500 or more, and send them a reminder email. The workflow authoring component of SharePoint Designer (aka SPD) is aimed at nontechnical users and is actually strongly reminiscent of the trigger editor from StarEdit, so if you’ve ever made a scripted Starcraft map, you’ll be able to fire up a copy of SPD and snap together your first workflow in about ten minutes. (Actions for recharging your shields or setting your department’s mineral count are not yet included.)</p>
<p>I did an internship with the SharePoint Designer team last summer, when I was trying to decide whether to stay in academia and start planning for grad school, or get out and give industry a try, and I liked it so much that when the team offered me a job at the end of the summer, I jumped on it. My development machines are powered by electricity instead of whale oil, there’s <a href="https://careers.microsoft.com/careers/en/us/collegeUSBenefits.aspx">free soda</a> down the hall, and people actually use our product. Exciting times, these.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/steelpangolin.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/steelpangolin.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/steelpangolin.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/steelpangolin.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/steelpangolin.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/steelpangolin.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/steelpangolin.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/steelpangolin.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/steelpangolin.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/steelpangolin.wordpress.com/78/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=steelpangolin.wordpress.com&blog=277318&post=78&subd=steelpangolin&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://steelpangolin.wordpress.com/2009/07/31/im-not-dead-i-got-a-job/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/98d9c9e85f5996635e5aa785ed61d0da?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">steelpangolin</media:title>
		</media:content>
	</item>
		<item>
		<title>Ceci n&#8217;est pas une pipebomb</title>
		<link>http://steelpangolin.wordpress.com/2009/05/19/ceci-nest-pas-une-pipebomb/</link>
		<comments>http://steelpangolin.wordpress.com/2009/05/19/ceci-nest-pas-une-pipebomb/#comments</comments>
		<pubDate>Wed, 20 May 2009 04:56:49 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[l4d]]></category>
		<category><![CDATA[magritte]]></category>

		<guid isPermaLink="false">http://steelpangolin.wordpress.com/?p=68</guid>
		<description><![CDATA[Today&#8217;s Left 4 Dead sprays are brought to you by René Magritte. Download and unzip to C:\Program Files\Steam\steamapps\common\left 4 dead\left4dead\materials\vgui\logos\custom\.
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=steelpangolin.wordpress.com&blog=277318&post=68&subd=steelpangolin&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br />
<a href='http://steelpangolin.wordpress.com/2009/05/19/ceci-nest-pas-une-pipebomb/treasonofimages/' title='TreasonOfImages'><img width="150" height="150" src="http://steelpangolin.files.wordpress.com/2009/05/treasonofimages.png?w=150&#038;h=150" class="attachment-thumbnail" alt="" title="TreasonOfImages" /></a>
<a href='http://steelpangolin.wordpress.com/2009/05/19/ceci-nest-pas-une-pipebomb/treasonofexplosives/' title='TreasonOfExplosives'><img width="150" height="150" src="http://steelpangolin.files.wordpress.com/2009/05/treasonofexplosives.png?w=150&#038;h=150" class="attachment-thumbnail" alt="" title="TreasonOfExplosives" /></a>

<p>Today&#8217;s Left 4 Dead sprays are brought to you by <a href="http://en.wikipedia.org/wiki/Ren%C3%A9_Magritte">René Magritte</a>. <a href="http://bat-country.us/blog/2009/05/19/ceci-nest-pas-une-pipebomb/L4D_Magritte.zip">Download</a> and unzip to <strong>C:\Program Files\Steam\steamapps\common\left 4 dead\left4dead\materials\vgui\logos\custom\</strong>.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/steelpangolin.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/steelpangolin.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/steelpangolin.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/steelpangolin.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/steelpangolin.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/steelpangolin.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/steelpangolin.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/steelpangolin.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/steelpangolin.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/steelpangolin.wordpress.com/68/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=steelpangolin.wordpress.com&blog=277318&post=68&subd=steelpangolin&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://steelpangolin.wordpress.com/2009/05/19/ceci-nest-pas-une-pipebomb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/98d9c9e85f5996635e5aa785ed61d0da?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">steelpangolin</media:title>
		</media:content>
	</item>
		<item>
		<title>Unicorn Support Would Be Easier</title>
		<link>http://steelpangolin.wordpress.com/2009/05/18/unicorn-support-would-be-easier/</link>
		<comments>http://steelpangolin.wordpress.com/2009/05/18/unicorn-support-would-be-easier/#comments</comments>
		<pubDate>Mon, 18 May 2009 10:43:48 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mac os x]]></category>
		<category><![CDATA[samba]]></category>
		<category><![CDATA[unicode]]></category>
		<category><![CDATA[xfs]]></category>

		<guid isPermaLink="false">http://steelpangolin.wordpress.com/?p=59</guid>
		<description><![CDATA[Unicode has two ways to represent composite characters like accented Roman letters. If you want to write a ü (that should render as a lowercase u with umlaut/diaeresis/two dots over it, if your browser is any good), you can represent it as the single Unicode codepoint LATIN SMALL LETTER U WITH DIAERESIS (U+00FC), or you [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=steelpangolin.wordpress.com&blog=277318&post=59&subd=steelpangolin&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Unicode has two ways to represent composite characters like accented Roman letters. If you want to write a <strong>ü</strong> (that should render as a lowercase u with <a href="http://en.wikipedia.org/wiki/Umlaut_%28diacritic%29">umlaut/diaeresis/two dots over it</a>, if your browser is any good), you can represent it as the single Unicode codepoint <a href="http://www.fileformat.info/info/unicode/char/00fc/index.htm">LATIN SMALL LETTER U WITH DIAERESIS (U+00FC)</a>, or you can represent it as <a href="http://www.fileformat.info/info/unicode/char/0075/index.htm">LATIN SMALL LETTER U (U+0075)</a> followed by <a href="http://www.fileformat.info/info/unicode/char/0308/index.htm">COMBINING DIAERESIS (U+0308)</a>. Since these are, in fact, the same letter, Unicode defines <a href="http://unicode.org/reports/tr15/">normalization forms</a> for things like comparing and sorting strings. In the <strong>NFC</strong> form, all composite characters that have a single codepoint representation are represented as that single codepoint; in the <strong>NFD</strong> form, they are all decomposed into multiple codepoint representations. If you pick a normalization form and stick with it, then you can ensure that <strong>ü</strong> is always equal to <strong>ü</strong> no matter which representation it came in with.</p>
<p>If you don&#8217;t do normalization, then annoying things happen. The setup is as follows: I&#8217;ve got a server machine running Debian 5 Linux, serving files from an XFS filesystem through Samba, talking to a client Mac running OS X 10.5 (Leopard) and mounting the share using <a href="http://developer.apple.com/documentation/Darwin/Reference/ManPages/man8/mount_smbfs.8.html"><strong>mount_smbfs(8)</strong></a>. Some files and folders have accented letters in their names. Now, they display fine in Finder directory listings. Problem is, when you click on them, they disappear!</p>
<p>It took some poking around in <a href="http://www.wireshark.org/">Wireshark</a> to figure out what was going on. I noticed that the file names being received from the server in directory listings were not the same as the ones that were later being requested: specifically, characters like our friend <strong>ü</strong> were decomposed in the listings, but composed in the requests. Samba would then report the requested files as missing.</p>
<p>I&#8217;m honestly not sure who to blame here. It could be OS X&#8217;s fault for not keeping track of received filenames somewhere so it could send out the same ones it got. It could be Samba&#8217;s fault for not normalizing incoming requests before looking up files when it&#8217;s set to use Unicode. It could even be XFS&#8217;s fault: XFS filenames are byte strings and can include any bytes other than the ASCII codes for / and NUL. The Mac OS filesystem HFS+ uses <a href="http://developer.apple.com/technotes/tn/tn1150.html#UnicodeSubtleties">a normalization form that is (almost) NFD</a>, so filenames are stored on disk in one format only, and other representations are illegal. XFS does not appear to do any processing of filenames. It&#8217;s actually possible to create two files named &#8220;ü&#8221; in the same directory, or at least two filenames that display as &#8220;ü&#8221; when interpreted as UTF-8 byte strings, decoded to Unicode code points, and displayed by something that can handle Unicode characters.</p>
<p>Fortunately, there is a workaround. If Unicode filenames are converted to NFC on disk on the server, they appear to survive the round trip to the Finder and back just fine. Python&#8217;s <strong><a href="http://docs.python.org/library/unicodedata.html">unicodedata</a></strong> module has a <strong>normalize()</strong> function that makes this pretty painless.</p>
<p style="text-align:center;">***</p>
<p><em>update</em>: here&#8217;s some working sample code to NFC-ize everything in a folder hierarchy.</p>
<pre>import os
import unicodedata

for root, dirs, files in os.walk(u'/path/to/base', topdown=False):
    for entry in files:
        nfc = unicodedata.normalize('NFC', entry)
        if entry != nfc:
            os.rename(
                os.path.join(root, entry),
                os.path.join(root, nfc))
            print os.path.join(root, nfc)
    rootparent, rootentry = os.path.split(root)
    nfc = unicodedata.normalize('NFC', rootentry)
    if rootentry != nfc:
        os.rename(root, os.path.join(rootparent, nfc))
        print os.path.join(rootparent, nfc)</pre>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/steelpangolin.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/steelpangolin.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/steelpangolin.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/steelpangolin.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/steelpangolin.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/steelpangolin.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/steelpangolin.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/steelpangolin.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/steelpangolin.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/steelpangolin.wordpress.com/59/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=steelpangolin.wordpress.com&blog=277318&post=59&subd=steelpangolin&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://steelpangolin.wordpress.com/2009/05/18/unicorn-support-would-be-easier/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/98d9c9e85f5996635e5aa785ed61d0da?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">steelpangolin</media:title>
		</media:content>
	</item>
		<item>
		<title>waiting for the L4D SDK</title>
		<link>http://steelpangolin.wordpress.com/2009/04/13/waiting-for-the-l4d-sdk/</link>
		<comments>http://steelpangolin.wordpress.com/2009/04/13/waiting-for-the-l4d-sdk/#comments</comments>
		<pubDate>Tue, 14 Apr 2009 03:11:02 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[l4d]]></category>
		<category><![CDATA[sourcemod]]></category>

		<guid isPermaLink="false">http://steelpangolin.wordpress.com/?p=42</guid>
		<description><![CDATA[Valve&#8217;s taking their sweet time to release Left 4 Dead&#8217;s mod tools. Meanwhile, I have a hacked-up Orange Box SDK, Sourcemod, and this prototype laser rifle.
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=steelpangolin.wordpress.com&blog=277318&post=42&subd=steelpangolin&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a href="http://www.valvesoftware.com/">Valve</a>&#8217;s taking their sweet time to release <a href="http://www.l4d.com/">Left 4 Dead</a>&#8217;s mod tools. Meanwhile, I have <a href="http://www.l4dmaps.com/mapping.php">a hacked-up Orange Box SDK</a>, <a href="http://www.sourcemod.net/">Sourcemod</a>, and this prototype laser rifle.</p>

<a href='http://steelpangolin.wordpress.com/2009/04/13/waiting-for-the-l4d-sdk/l4d_smalltown04_mainstreet0003/' title='l4d_smalltown04_mainstreet0003'><img width="150" height="93" src="http://steelpangolin.files.wordpress.com/2009/04/l4d_smalltown04_mainstreet0003.jpg?w=150&#038;h=93" class="attachment-thumbnail" alt="" title="l4d_smalltown04_mainstreet0003" /></a>
<a href='http://steelpangolin.wordpress.com/2009/04/13/waiting-for-the-l4d-sdk/l4d_smalltown04_mainstreet0004/' title='l4d_smalltown04_mainstreet0004'><img width="150" height="93" src="http://steelpangolin.files.wordpress.com/2009/04/l4d_smalltown04_mainstreet0004.jpg?w=150&#038;h=93" class="attachment-thumbnail" alt="" title="l4d_smalltown04_mainstreet0004" /></a>
<a href='http://steelpangolin.wordpress.com/2009/04/13/waiting-for-the-l4d-sdk/l4d_smalltown04_mainstreet0006/' title='l4d_smalltown04_mainstreet0006'><img width="150" height="93" src="http://steelpangolin.files.wordpress.com/2009/04/l4d_smalltown04_mainstreet0006.jpg?w=150&#038;h=93" class="attachment-thumbnail" alt="" title="l4d_smalltown04_mainstreet0006" /></a>
<a href='http://steelpangolin.wordpress.com/2009/04/13/waiting-for-the-l4d-sdk/l4d_smalltown04_mainstreet0008/' title='l4d_smalltown04_mainstreet0008'><img width="150" height="93" src="http://steelpangolin.files.wordpress.com/2009/04/l4d_smalltown04_mainstreet0008.jpg?w=150&#038;h=93" class="attachment-thumbnail" alt="" title="l4d_smalltown04_mainstreet0008" /></a>
<a href='http://steelpangolin.wordpress.com/2009/04/13/waiting-for-the-l4d-sdk/l4d_smalltown04_mainstreet00111/' title='l4d_smalltown04_mainstreet0011'><img width="150" height="93" src="http://steelpangolin.files.wordpress.com/2009/04/l4d_smalltown04_mainstreet00111.jpg?w=150&#038;h=93" class="attachment-thumbnail" alt="" title="l4d_smalltown04_mainstreet0011" /></a>
<a href='http://steelpangolin.wordpress.com/2009/04/13/waiting-for-the-l4d-sdk/l4d_smalltown04_mainstreet0013/' title='l4d_smalltown04_mainstreet0013'><img width="150" height="93" src="http://steelpangolin.files.wordpress.com/2009/04/l4d_smalltown04_mainstreet0013.jpg?w=150&#038;h=93" class="attachment-thumbnail" alt="" title="l4d_smalltown04_mainstreet0013" /></a>
<a href='http://steelpangolin.wordpress.com/2009/04/13/waiting-for-the-l4d-sdk/l4d_smalltown05_houseboat0027/' title='l4d_smalltown05_houseboat0027'><img width="150" height="93" src="http://steelpangolin.files.wordpress.com/2009/04/l4d_smalltown05_houseboat0027.jpg?w=150&#038;h=93" class="attachment-thumbnail" alt="" title="l4d_smalltown05_houseboat0027" /></a>
<a href='http://steelpangolin.wordpress.com/2009/04/13/waiting-for-the-l4d-sdk/l4d_smalltown05_houseboat0028/' title='l4d_smalltown05_houseboat0028'><img width="150" height="93" src="http://steelpangolin.files.wordpress.com/2009/04/l4d_smalltown05_houseboat0028.jpg?w=150&#038;h=93" class="attachment-thumbnail" alt="" title="l4d_smalltown05_houseboat0028" /></a>

  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/steelpangolin.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/steelpangolin.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/steelpangolin.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/steelpangolin.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/steelpangolin.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/steelpangolin.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/steelpangolin.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/steelpangolin.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/steelpangolin.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/steelpangolin.wordpress.com/42/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=steelpangolin.wordpress.com&blog=277318&post=42&subd=steelpangolin&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://steelpangolin.wordpress.com/2009/04/13/waiting-for-the-l4d-sdk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/98d9c9e85f5996635e5aa785ed61d0da?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">steelpangolin</media:title>
		</media:content>
	</item>
		<item>
		<title>the new spaghetti code</title>
		<link>http://steelpangolin.wordpress.com/2009/04/09/the-new-spaghetti-code/</link>
		<comments>http://steelpangolin.wordpress.com/2009/04/09/the-new-spaghetti-code/#comments</comments>
		<pubDate>Fri, 10 Apr 2009 02:25:56 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[mac os x]]></category>
		<category><![CDATA[quartz composer]]></category>

		<guid isPermaLink="false">http://steelpangolin.wordpress.com/?p=33</guid>
		<description><![CDATA[Found Apple&#8217;s Quartz Composer last night. Proceeded to write a clock. It&#8217;s very easy to use, but it could be much better if it had some sort of layout manager for 2D patches.
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=steelpangolin.wordpress.com&blog=277318&post=33&subd=steelpangolin&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Found Apple&#8217;s <a href="http://developer.apple.com/graphicsimaging/quartz/quartzcomposer.html">Quartz Composer</a> last night. Proceeded to write a clock. It&#8217;s very easy to use, but it could be much better if it had some sort of layout manager for 2D patches.</p>

<a href='http://steelpangolin.wordpress.com/2009/04/09/the-new-spaghetti-code/screen_intro/' title='screen_intro'><img width="150" height="93" src="http://steelpangolin.files.wordpress.com/2009/04/screen_intro.png?w=150&#038;h=93" class="attachment-thumbnail" alt="" title="screen_intro" /></a>
<a href='http://steelpangolin.wordpress.com/2009/04/09/the-new-spaghetti-code/screen_clock/' title='screen_clock'><img width="150" height="93" src="http://steelpangolin.files.wordpress.com/2009/04/screen_clock.png?w=150&#038;h=93" class="attachment-thumbnail" alt="" title="screen_clock" /></a>
<a href='http://steelpangolin.wordpress.com/2009/04/09/the-new-spaghetti-code/qtz_root/' title='qtz_root'><img width="150" height="35" src="http://steelpangolin.files.wordpress.com/2009/04/qtz_root.png?w=150&#038;h=35" class="attachment-thumbnail" alt="" title="qtz_root" /></a>
<a href='http://steelpangolin.wordpress.com/2009/04/09/the-new-spaghetti-code/qtz_clock/' title='qtz_clock'><img width="150" height="99" src="http://steelpangolin.files.wordpress.com/2009/04/qtz_clock.png?w=150&#038;h=99" class="attachment-thumbnail" alt="" title="qtz_clock" /></a>

  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/steelpangolin.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/steelpangolin.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/steelpangolin.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/steelpangolin.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/steelpangolin.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/steelpangolin.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/steelpangolin.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/steelpangolin.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/steelpangolin.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/steelpangolin.wordpress.com/33/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=steelpangolin.wordpress.com&blog=277318&post=33&subd=steelpangolin&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://steelpangolin.wordpress.com/2009/04/09/the-new-spaghetti-code/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/98d9c9e85f5996635e5aa785ed61d0da?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">steelpangolin</media:title>
		</media:content>
	</item>
		<item>
		<title>Convert Adium smileys to Colloquy smileys</title>
		<link>http://steelpangolin.wordpress.com/2009/03/24/convert-adium-smileys-to-colloquy-smileys/</link>
		<comments>http://steelpangolin.wordpress.com/2009/03/24/convert-adium-smileys-to-colloquy-smileys/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 10:31:46 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[adium]]></category>
		<category><![CDATA[colloquy]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://steelpangolin.wordpress.com/?p=27</guid>
		<description><![CDATA[Like almost every chat client, Colloquy uses its own format for smileys. There are many more smileys available for Adium than there are in Colloquy format, so I wrote a utility to convert Adium emoticon packages to Colloquy emoticon packages. It&#8217;s a Python script, and requires the plistlib module, which means you&#8217;ll need Python 2.5 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=steelpangolin.wordpress.com&blog=277318&post=27&subd=steelpangolin&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Like almost every chat client, <a href="http://colloquy.info/">Colloquy</a> uses its own format for smileys. There are many more smileys available for <a href="http://www.adiumx.com/">Adium</a> than there are in Colloquy format, so I wrote <a href="http://bat-country.us/code/emot_port/emot_port.py">a utility to convert Adium emoticon packages to Colloquy emoticon packages</a>. It&#8217;s a <a href="http://www.python.org/">Python</a> script, and requires the <a href="http://docs.python.org/library/plistlib.html"><strong>plistlib</strong></a> module, which means you&#8217;ll need Python 2.5 if you&#8217;re running it on a Mac or Python 2.6 if you&#8217;re not.</p>
<p>Note: <strong>plistlib</strong> only handles XML-format plists, so if you get parse errors, your Adium smiley pack probably has a binary-format <strong>Emoticons.plist</strong> (the file inside the pack that describes the provided smileys.) To fix this, use OS X&#8217;s <a href="http://developer.apple.com/DOCUMENTATION/DARWIN/Reference/ManPages/man1/plutil.1.html">plutil</a> tool to rewrite <strong>Emoticons.plist</strong>:</p>
<pre style="padding-left:30px;">plutil -convert xml1 smileys.AdiumEmoticonSet/Emoticons.plist</pre>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/steelpangolin.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/steelpangolin.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/steelpangolin.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/steelpangolin.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/steelpangolin.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/steelpangolin.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/steelpangolin.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/steelpangolin.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/steelpangolin.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/steelpangolin.wordpress.com/27/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=steelpangolin.wordpress.com&blog=277318&post=27&subd=steelpangolin&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://steelpangolin.wordpress.com/2009/03/24/convert-adium-smileys-to-colloquy-smileys/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/98d9c9e85f5996635e5aa785ed61d0da?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">steelpangolin</media:title>
		</media:content>
	</item>
		<item>
		<title>invalid BS_jmpBoot in boot block: 000000</title>
		<link>http://steelpangolin.wordpress.com/2009/03/15/invalid-bs_jmpboot-in-boot-block-000000/</link>
		<comments>http://steelpangolin.wordpress.com/2009/03/15/invalid-bs_jmpboot-in-boot-block-000000/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 01:34:10 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[mac os x]]></category>
		<category><![CDATA[macdrive]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://steelpangolin.wordpress.com/?p=23</guid>
		<description><![CDATA[MediaFour&#8217;s MacDrive (7.2.6) keeps screwing up the GPT on my external GPT-formatted drive. It has one HFS+ partition and one 200 MB EFI system partition, and when I boot my iMac into Windows (Vista SP1 x86), mount the drive, and then boot back into Mac OS X (10.5), I usually find that OS X won&#8217;t [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=steelpangolin.wordpress.com&blog=277318&post=23&subd=steelpangolin&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a href="http://www.mediafour.com/">MediaFour</a>&#8217;s <a href="http://www.mediafour.com/products/macdrive/">MacDrive</a> (7.2.6) keeps screwing up the <a href="http://developer.apple.com/technotes/tn2006/tn2166.html">GPT</a> on my external GPT-formatted drive. It has one HFS+ partition and one 200 MB EFI system partition, and when I boot my iMac into Windows (Vista SP1 x86), mount the drive, and then boot back into Mac OS X (10.5), I usually find that OS X won&#8217;t recognize the HFS+ volume any more. The characteristic error is an ignore/eject/format unrecognized dialog after OS X login, and &#8220;invalid BS_jmpBoot in boot block: 000000&#8243; from Disk Utility when trying to repair it.</p>
<p>It seems that the GUID for the HFS+ volume is changed from {48465300-0000-11AA-AA11-00306543ECAC} (HFS+) to {EBD0A0A2-B9E5-4433-87C0-68B6B72699C7} (&#8220;Microsoft Basic Data&#8221;). Windows doesn&#8217;t have any trouble mounting it as long as MacDrive is installed, it&#8217;s OS X that has the problem. I was able to fix the GPT by changing the GUID back to what it should be, at which point the drive was recognized by OS X, and found that the actual HFS+ file system was unharmed. I wrote most of a GPT editor in the process, and if Mediafour doesn&#8217;t fix MacDrive soon, I may end up turning it into a one-click GPT fixer.</p>
<p style="text-align:center;">***</p>
<p><em>update</em>:</p>
<p>Here&#8217;s the tool I used to fix my own disk: <strong><a href="http://bat-country.us/code/GPTools/gpt_surgeon.py?view=markup">gpt_surgeon.py</a></strong></p>
<p>It&#8217;ll need Python 2.5 or higher, and has only been tried in OS X on my own machine. Run it with no arguments or look at the code for a usage statement. The repair process goes like this:</p>
<p>First, <strong>list</strong> the partitions on your disk to figure out which one needs to be relabeled with the right filesystem type. If you don&#8217;t know what your disk device path is, go look in <strong>Disk Utility</strong> or <strong>System Profiler</strong> or run <strong><a href="http://developer.apple.com/documentation/Darwin/Reference/Manpages/man8/diskutil.8.html">diskutil(8)</a></strong> with its <strong>list</strong> option. The path for my external disk is /dev/disk1.</p>
<pre style="padding-left:30px;">$ <strong>./gpt_surgeon.py list /dev/disk1</strong>

Read MBR and GPT from /dev/disk1.
partition 0:
     type: EFI System
     name: u'EFI System Partition'
    flags: 0x00000000
partition 1:
     type: Microsoft Basic Data
     name: u'Untitled'
    flags: 0x00000000</pre>
<p>Note the partition that says &#8220;Microsoft Basic Data&#8221;. Assuming that you had a single non-system partition on the disk, and that the partition was HFS+ before MacDrive got to it, this is probably that partition. In my case, it&#8217;s partition 1. Remember the number; you&#8217;ll need it in the next step.</p>
<p>If you have multiple data partitions on the disk, especially if one of them is actually a Windows data partition, you should use something like <strong><a href="http://disktype.sourceforge.net/">disktype</a></strong> to check what filesystems are present in each partition, so that you don&#8217;t accidentally relabel the wrong one.</p>
<p>If you have any other partitions from this disk mounted, unmount them now.</p>
<p>You&#8217;ll need to run with sudo to get the privileges necessary to actually <strong>repair</strong> the GPT on disk.</p>
<pre style="padding-left:30px;">$ <strong>sudo ./gpt_surgeon.py repair /dev/disk1 1</strong>

Read MBR and GPT from /dev/disk1.
Changing type of partition #1 on /dev/disk1 to HFS+...
    Opened /dev/disk1 for writing.
    Wrote MBR.
    Wrote GPT header.
    Wrote GPT entries.
    Closed /dev/disk1.
Done.</pre>
<p>And this is what the disk&#8217;s GPT should look like afterwards. Your HFS+ partition should be mountable now.</p>
<pre style="padding-left:30px;">$ <strong>./gpt_surgeon.py list /dev/disk1</strong>

Read MBR and GPT from /dev/disk1.
partition 0:
     type: EFI System
     name: u'EFI System Partition'
    flags: 0x00000000
partition 1:
     type: Apple HFS+
     name: u'Untitled'
    flags: 0x00000000</pre>
<p style="text-align:center;">***</p>
<p><em>second update</em>: commenter James let me know that <a href="http://www.cgsecurity.org/">Christophe Grenier</a>&#8217;s <a href="http://www.cgsecurity.org/wiki/TestDisk"><strong>TestDisk</strong></a> utility can also be used to fix this problem.</p>
<p style="text-align:center;">***</p>
<p><em>third update</em>: here&#8217;s a video walkthrough of the process. For people who have Flash turned off for some reason, please see the <a href="http://bat-country.us/blog/2009/03/15/invalid-bs_jmpboot-in-boot-block-000000/gpt_surgeon-instructions.mov">QuickTime version</a> of the walkthrough.</p>
<p style="text-align:center;"><span style="text-align:center; display: block;"><a href="http://steelpangolin.wordpress.com/2009/03/15/invalid-bs_jmpboot-in-boot-block-000000/"><img src="http://img.youtube.com/vi/Xumbf5rOp6c/2.jpg" alt="" /></a></span></p>
<p style="text-align:center;">
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/steelpangolin.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/steelpangolin.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/steelpangolin.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/steelpangolin.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/steelpangolin.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/steelpangolin.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/steelpangolin.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/steelpangolin.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/steelpangolin.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/steelpangolin.wordpress.com/23/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=steelpangolin.wordpress.com&blog=277318&post=23&subd=steelpangolin&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://steelpangolin.wordpress.com/2009/03/15/invalid-bs_jmpboot-in-boot-block-000000/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
<enclosure url="http://bat-country.us/blog/2009/03/15/invalid-bs_jmpboot-in-boot-block-000000/gpt_surgeon-instructions.mov" length="5182061" type="video/quicktime" />
	
		<media:content url="http://1.gravatar.com/avatar/98d9c9e85f5996635e5aa785ed61d0da?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">steelpangolin</media:title>
		</media:content>

		<media:content url="http://img.youtube.com/vi/Xumbf5rOp6c/2.jpg" medium="image" />
	</item>
	</channel>
</rss>