<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.0.11" -->
<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/"
	>

<channel>
	<title>njr 3.0</title>
	<link>http://njr.sabi.net</link>
	<description>Nicholas Riley’s weblog</description>
	<pubDate>Mon, 19 May 2008 00:46:33 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.11</generator>
	<language>en</language>
			<item>
		<title>Goodbye, arnold</title>
		<link>http://njr.sabi.net/2008/05/18/goodbye-arnold/</link>
		<comments>http://njr.sabi.net/2008/05/18/goodbye-arnold/#comments</comments>
		<pubDate>Mon, 19 May 2008 00:32:33 +0000</pubDate>
		<dc:creator>Nicholas Riley</dc:creator>
		
		<category>Administrivia</category>

		<category>Computing</category>

		<guid isPermaLink="false">http://njr.sabi.net/2008/05/18/goodbye-arnold/</guid>
		<description><![CDATA[
19:00 = sabi [nicholas@arnold.sabi.net] quit (Quit: goodbye, arnold old friend.)
[...]
overlord% console arnold
Enter njriley@console's password:
[Enter `^Ec?' for help]

arnold console login: nicholas
Password:
Last login: Sat May 17 22:24:06 from [...]
{nicholas#console@arnold:1025} ~%sudo /usr/sbin/shutdown -i6 -g0 -y      7:21PM

Shutdown started.    Sun May 18 19:21:17 CDT 2008

Changing to init state 6 - please wait
Broadcast [...]]]></description>
			<content:encoded><![CDATA[<pre>
19:00 = sabi [nicholas@arnold.sabi.net] quit (Quit: goodbye, arnold old friend.)
[...]
overlord% console arnold
Enter njriley@console's password:
[Enter `^Ec?' for help]

arnold console login: nicholas
Password:
Last login: Sat May 17 22:24:06 from [...]
{nicholas#console@arnold:1025} ~%sudo /usr/sbin/shutdown -i6 -g0 -y      7:21PM

Shutdown started.    Sun May 18 19:21:17 CDT 2008

Changing to init state 6 - please wait
Broadcast Message from root (console) on arnold Sun May 18 19:21:18...
THE SYSTEM arnold IS BEING SHUT DOWN NOW ! ! !
Log off now or risk your files being damaged

{nicholas#console@arnold:1026} ~%                                        7:21PM
INIT: New run level: 6
The system is coming down.  Please wait.
System services are now being stopped.
Killing: 103
Stopping baculafd.
Stopping openvpn.
May 18 19:21:28 arnold openvpn[302]: event_wait : Interrupted system call (code=4)
Waiting for PIDS: 302.
postfix/postfix-script: stopping the Postfix mail system
No screen session found.
May 18 19:21:31 arnold syslogd: going down on signal 15
The system is down.
syncing file systems... done
</pre>
<p>Today I shut down <a href="http://en.wikipedia.org/wiki/Arnold_the_Pitbull">arnold</a>.sabi.net for good.<sup><a href="#note">1</a></sup> It&#8217;s just a computer, but I&#8217;m strangely emotional about it.</p>
<p>
I first wrote in March 2003 about <a href="http://njr.sabi.net/2003/03/25/">buying arnold</a> on eBay. A generous friend has been hosting arnold for free at his residence since then&mdash;first about a mile away in Champaign, then moving in July 2003 <a href="http://njr.sabi.net/2003/07/02/">to Virginia</a> where it&#8217;s been ever since.  It&#8217;s served me well with no hardware failures until some ECC errors prodded me into moving the last service (dynamic DNS) off it yesterday.
</p>
<p>
As I mentioned <a href="http://njr.sabi.net/2007/09/03/moved-servers/">back in September</a>, I&#8217;ve been working on reducing my administrative load.  I&#8217;m now nearly finished migrating services, but two aging machines&mdash;calamity and shrug&mdash;remain to be decommissioned.
</p>
<p>
I&#8217;ve mentioned calamity <a href="http://njr.sabi.net/2002/06/06/">a</a> <a href="http://njr.sabi.net/2002/12/22/">few</a> <a href="http://njr.sabi.net/2004/10/28/server-woes/">times</a> over the years; it predates arnold by a couple of years, having ably served as my parents&rsquo; DNS, email, Web, VPN and monitoring server.  There&rsquo;ve been no hardware failures, though I&#8217;ve upgraded the hard drives and SCSI card once and switched the backup medium from <a href="http://oss.sgi.com/projects/xfs/"><tt>xfsdump</tt></a> on an <a href="http://web.sabi.net/photos/tapeDriveAndSGIWeirdness/image/dscn0517.jpg">external MO drive</a> to the network via <a href="http://www.bacula.org/en/">Bacula</a>.  I moved the email and Web services off a few months ago; when I swap the Mac mini for my old G4 in a few months, I&rsquo;ll have a slightly newer machine to host its remaining services.  (You can see calamity on the right in <a href="http://web.sabi.net/temp/9500.jpg">this photo from May 2006</a>, to the left of hamton, a hand-me-down PC which died before it could be put to any use.)
</p>
<p>
<a href="http://www.flickr.com/photos/njr/2501054489/">shrug</a> (which is not a Tiny Toon Adventures character; blame <a href="http://doomsey.livejournal.com/">doomsey</a>) is a P3/700 still running FreeBSD 4.11.  It hosts my primary email environment, which has had a long and varied history.
</p>
<p>
In the 90s, I read mail in a bunch of places&mdash;some via Eudora and POP, some via Unix mailreaders including <tt>pine</tt>, <tt>mutt</tt> and <tt>(ex)mh</tt>.  My accounts included tiac.net, netcom.com, macirc.com, three Brandeis accounts, online service Internet gateways (CompuServe, AOL, eWorld, BIX and Delphi at various times) and some others I&rsquo;d rather not mention.  Over time, I reduced the number of accounts I checked to three, for personal, school and work use.  My &#8220;forever&#8221; personal email address was nriley@shore.net, served by a small ISP in Massachusetts.  Mail for school lived on students.uiuc.edu until November 1999, then griffin.canis.uiuc.edu until January 2001.
</p>
<p>
sabi.net was served starting in mid-1999 by alexandria.invantage.com, an <a href="http://web.sabi.net/photos/149-sidney/alexandria.jpg">old 486DX2/66 in the corner</a> at my then-employer. (My old reliable USR Courier in that picture was a fallback for our flaky RADSL connection.)  At the time I didn&#8217;t use sabi.net much for email; my sabi.net mail, what little of it there was, forwarded to my shore.net account.  Eventually, Shore.Net got <a href="http://www.internetnews.com/xSP/article.php/332741">bought</a> and destroyed; I learned the lesson that I should never rely on someone else&#8217;s domain name for my email.
</p>
<p>
Since I was switching labs at the time I didn&#8217;t have a server at school to use, but luckily I could borrow Invantage&#8217;s new colocated server for a few months.  chronos.invantage.com thus became sabi.net&#8217;s MX in January 2001.  chronos also hosted my first truly consolidated email setup, with procmail and Mutt folder-hooks configured to deliver mail from three accounts into separate inboxes: invantage.com (the mailspool, i.e., <tt>!</tt>), uiuc.edu (<tt>=INBOX</tt>) and sabi.net (<tt>=+/INBOX</tt>).  I dumped my Shore.Net account in March and switched sabi.net&#8217;s MX to pair.com in August 2001, where it remains.  pair is still around, still independent, still conservative and reliable; its CEO still posts in the newsgroups.  I plan to keep my account there for the foreseeable future.
</p>
<p>
With sabi.net&#8217;s MX switched, I could finally migrate my email setup from chronos, moving it to theremin.cs.uiuc.edu and finally to shrug.csl.uiuc.edu (later shrug.acm.uiuc.edu) in September 2003.  On shrug I added an IMAP server and several generations of spam and virus filtering.  I&#8217;ll be moving off shrug over the next few weeks to a similar setup where I won&#8217;t be the machine&#8217;s primary administrator.  (shrug was originally like that, too, but its owner graduated and left maintenance to me.)
</p>
<p>
Planning and executing these migrations is tedious and mind-numbing, so I&#8217;m glad they&#8217;re coming to a close along with graduate school; I&#8217;ll have more time in future to focus on things I really care about.  Another good thing about getting rid of machines is that I don&#8217;t need to come up with a new naming scheme <a href="http://njr.sabi.net/2002/06/06/">as I thought I would</a>.  My laptops since then have all been named Shirley; my Intel iMac is <a href="http://en.wikipedia.org/wiki/Mary_Melody">Mary</a>.
</p>
<p>
<sup><a name="note">1</a></sup>Actually, runlevel 6 reboots; I&#8217;ve still got to wipe the disks.</p>
]]></content:encoded>
			<wfw:commentRss>http://njr.sabi.net/2008/05/18/goodbye-arnold/feed/</wfw:commentRss>
		</item>
		<item>
		<title>AntiRSI 1.4njr4</title>
		<link>http://njr.sabi.net/2007/12/10/antirsi-14njr4/</link>
		<comments>http://njr.sabi.net/2007/12/10/antirsi-14njr4/#comments</comments>
		<pubDate>Tue, 11 Dec 2007 05:00:52 +0000</pubDate>
		<dc:creator>Nicholas Riley</dc:creator>
		
		<category>Computing</category>

		<category>Mac OS X</category>

		<guid isPermaLink="false">http://njr.sabi.net/2007/12/10/antirsi-14njr4/</guid>
		<description><![CDATA[Since releasing AntiRSI 1.4njr2 I&#8217;ve made a couple more minor releases.

1.4njr3, released on November 5, fixes some graphical rounding issues reported by Andy Reitz; the times were displayed as 3:01, 2:00, 2:59, etc.  I was really surprised I never noticed this myself.


1.4njr4 shows the break window in all Spaces on Leopard; of course you [...]]]></description>
			<content:encoded><![CDATA[<p>Since releasing <a href="http://njr.sabi.net/2007/08/10/antirsi-14njr2/">AntiRSI 1.4njr2</a> I&rsquo;ve made a couple more minor releases.</p>
<p>
1.4njr3, released on November 5, fixes some graphical rounding issues reported by Andy Reitz; the times were displayed as 3:01, 2:00, 2:59, etc.  I was really surprised I never noticed this myself.
</p>
<p>
1.4njr4 shows the break window in all Spaces on Leopard; of course you could do this with the Spaces preference pane, but doing so by default makes sense.  It also stops AntiRSI from getting focus when you hit the &ldquo;Postpone&rdquo; button (Cocoa&rsquo;s API for this is&#8230;interesting).  Or, if you have AntiRSI set to force itself to the front during breaks, it&rsquo;ll bring your previous app to the front when the break is finished so you can resume work.
</p>
<p>
I&rsquo;ve made some Spaces-related changes for Pester, too, and will try to get beta 8 released one of these days. Happily, my research is going <i>really</i> well at the moment and I don&rsquo;t want to disturb my focus.
</p>
<p>
Download AntiRSI 1.4njr4 <a href="http://web.sabi.net/nriley/software/#antirsi">here</a>, or just use the &ldquo;Check for Updates&#8230;&rdquo; item in the AntiRSI menu if you&rsquo;ve already got my version of AntiRSI installed.
</p>
]]></content:encoded>
			<wfw:commentRss>http://njr.sabi.net/2007/12/10/antirsi-14njr4/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Pester 1.1b5 released</title>
		<link>http://njr.sabi.net/2007/11/24/pester-11b5-released/</link>
		<comments>http://njr.sabi.net/2007/11/24/pester-11b5-released/#comments</comments>
		<pubDate>Sun, 25 Nov 2007 04:45:20 +0000</pubDate>
		<dc:creator>Nicholas Riley</dc:creator>
		
		<category>Computing</category>

		<category>Mac OS X</category>

		<guid isPermaLink="false">http://njr.sabi.net/2007/11/24/pester-11b5-released/</guid>
		<description><![CDATA[Pester 1.1b5 is out.  If you&#8217;re wondering where betas 1&#8211;4 went, they were released privately&#8230;in 2003.  Looking back at my weblog posts from May 2003, I see my comment about my parents &#8220;finally finishing up renovations on their house in Boston&#8221;&#8212;four years later, they&#8217;re still living in a single room of that house, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://web.sabi.net/nriley/software/#pester"><tt>Pester</tt> 1.1b5 is out</a>.  If you&rsquo;re wondering where betas 1&#8211;4 went, they were released privately&#8230;in 2003.  Looking back at my weblog posts from <a href="http://njr.sabi.net/2003/05/">May 2003</a>, I see my comment about my parents &ldquo;finally finishing up renovations on their house in Boston&rdquo;&mdash;four years later, they&rsquo;re still living in a single room of that house, though they continue to make steady progress on fixing the disaster left by their contractors.</p>
<p>
For various reasons I didn&rsquo;t pick Pester back up until this weekend, because <tt>NSDateFormatter</tt> broke natural language date parsing for Pester 1.0 in Leopard.  Pester 1.0&#8211;1.1b4 ran on Mac OS X 10.1 or later; Pester 1.1b5 requires Mac OS X 10.4 or later. It was a bit sad to rip out painstakingly developed workarounds for old Cocoa date parsing bugs, but good to see that the new ICU-based formatters basically work, even if they completely lack any natural language parsing ability.
</p>
<p>
In an effort to get <i>something</i> usable on Leopard released, this version has some features disabled because they aren&rsquo;t stable enough yet (QuickTime playback, speech), don&rsquo;t work at all (dock bouncing) or are untested (wake from sleep). The user interface is still mostly what I came up with <a href="http://njr.sabi.net/2002/11/10/">back in November 2002</a> (wow, Jaguar really was <i>that</i> ugly).
</p>
<p>
Among the changes that aren&rsquo;t from 2003 are my first use of Sparkle:</p>
<p style="position: relative; left: -40px; top: -20px; margin-bottom: -60px; overflow: visible;">
<img src="http://njr.sabi.net/wp-content/uploads/2007/11/pester-sparkle/Picture 2.png" border="0" height="475" width="646" alt="" />
</p>
<p>
Subsequent updates should therefore be simple.
</p>
<p>
Back to the reason for this update: <tt>NSDateFormatter</tt> in pre-10.4 mode used to <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html#//apple_ref/occ/instm/NSDateFormatter/initWithDateFormat:allowNaturalLanguage:">understand &ldquo;tomorrow&rdquo;</a>; in Leopard, it doesn&rsquo;t, despite being documented as doing so.<br />
There seems to be a severe lack of open source libraries for natural language date parsing&mdash;all I found was <a href="http://chronic.rubyforge.org/">chronic</a> (Ruby, English only); <a href="https://jchronic.dev.java.net/">jchronic</a> (Java port of chronic, English only) and <a href="http://www.cise.ufl.edu/~sbeck/"><tt>Date::Manip</tt></a> (Perl, multilanguage).
</p>
<p>
I chose <tt>Date::Manip</tt>.
</p>
<p>
Yes, this means Pester now embeds a Perl interpreter.
</p>
<p>
Perl&rsquo;s embedding API is interesting, but it works, and aside from the memory usage, nobody has to know.  I don&rsquo;t actually have non-English parsing in this version yet, because I ran into some weird bugs in <tt>Date::Manip</tt>; I&rsquo;ve emailed the author but haven&rsquo;t heard back yet.
</p>
<p>
I&rsquo;m otherwise in the middle of the final work for my PhD, so I can&rsquo;t guarantee 1.1 final will come out soon, but I think it&rsquo;ll be less than 4 years!</p>
]]></content:encoded>
			<wfw:commentRss>http://njr.sabi.net/2007/11/24/pester-11b5-released/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Moved servers</title>
		<link>http://njr.sabi.net/2007/09/03/moved-servers/</link>
		<comments>http://njr.sabi.net/2007/09/03/moved-servers/#comments</comments>
		<pubDate>Mon, 03 Sep 2007 05:14:34 +0000</pubDate>
		<dc:creator>Nicholas Riley</dc:creator>
		
		<category>Administrivia</category>

		<guid isPermaLink="false">http://njr.sabi.net/2007/09/03/moved-servers/</guid>
		<description><![CDATA[This weblog is now running on a brand new Joyent Shared Accelerator. It brings all kinds of great goodies such as OpenSolaris, ZFS, greater resource limits and newer versions of PHP and MySQL, but hopefully the average reader won&#8217;t notice any difference aside from pages rendering a bit faster.  Stumbling blocks were MySQL character [...]]]></description>
			<content:encoded><![CDATA[<p>This weblog is now running on a brand new <a href="http://joyent.com/connector/web-hosting/">Joyent Shared Accelerator</a>. It brings all kinds of great goodies such as OpenSolaris, ZFS, greater resource limits and newer versions of PHP and MySQL, but hopefully the average reader won&rsquo;t notice any difference aside from pages rendering a bit faster.  Stumbling blocks were <a href="http://forum.textdrive.com/viewtopic.php?pid=145199#p145199">MySQL character set conversion</a> (when is UTF-8 not UTF-8?) and a change in PHP object handling breaking the OpenID plugin (<a href="http://forum.textdrive.com/viewtopic.php?pid=145199#p145199">patch</a>).</p>
<p>Still remaining in the great server migration: moving <a href="http://rileys.us/">rileys.us</a>, <a href="http://mail.rileys.us/">mail.rileys.us</a> and <a href="http://dev.sabi.net">dev.sabi.net</a> from their current locations on arnold.sabi.net, calamity.bos.sabi.net and gilford.textdrive.com, respectively.  It&rsquo;ll be great when I have consolidated and don&rsquo;t have to play sysadmin quite so much.</p>
<p>If you&rsquo;re missing frequent posts and are interested in the minutiae of my life, feel free to watch <a href="http://twitter.com/nriley">Twitter</a> and <a href="http://www.flickr.com/photos/njr/">Flickr</a>.  As I&rsquo;m wrapping up writing and getting back to research coding again, you&rsquo;ll find lots of complaints about broken software in the near future, I&rsquo;m sure.  (Currently I&rsquo;m fighting with <a href="http://jpackage.org/">JPackage</a>; why oh why must the CS department have standardized on Red Hat?)
</p>
]]></content:encoded>
			<wfw:commentRss>http://njr.sabi.net/2007/09/03/moved-servers/feed/</wfw:commentRss>
		</item>
		<item>
		<title>AntiRSI 1.4njr2</title>
		<link>http://njr.sabi.net/2007/08/10/antirsi-14njr2/</link>
		<comments>http://njr.sabi.net/2007/08/10/antirsi-14njr2/#comments</comments>
		<pubDate>Sat, 11 Aug 2007 03:33:24 +0000</pubDate>
		<dc:creator>Nicholas Riley</dc:creator>
		
		<category>Computing</category>

		<category>Mac OS X</category>

		<guid isPermaLink="false">http://njr.sabi.net/2007/08/10/antirsi-14njr2/</guid>
		<description><![CDATA[Onne Gorter&#8217;s AntiRSI is a Mac OS X application which reminds you to take periodic breaks from typing.  Along with my beloved IBM model M15 keyboard, it&#8217;s essential to my getting any work done at all.

However, AntiRSI had some problems. The animated progress bar displayed during breaks sucked CPU like crazy, causing problems if [...]]]></description>
			<content:encoded><![CDATA[<p>Onne Gorter&rsquo;s <a href="http://tech.inhelsinki.nl/antirsi/">AntiRSI</a> is a Mac OS X application which reminds you to take periodic breaks from typing.  Along with my beloved <a href="http://www.dansdata.com/clicky2.htm">IBM model M15 keyboard</a>, it&rsquo;s essential to my getting any work done at all.</p>
<p>
However, AntiRSI had some problems. The animated progress bar displayed during breaks sucked CPU like crazy, causing problems if I was watching a video at the time.  Breaks kept getting prematurely reset because AntiRSI thought I was typing when it was a program like VLC calling <tt>UpdateSystemActivity</tt>, trying to avoid triggering the screensaver. Finally, the break window was just <a href="http://tech.inhelsinki.nl/antirsi/antirsi_screen.png">plain ugly</a>&mdash;look at those poorly antialiased corners.
</p>
<p>
The last problem was more of a missing feature.  While programming, I spend enough time thinking that I&rsquo;m generally pain-free even if I work all day; unfortunately, debugging, writing and system administration can be much more typing-intensive, so I have to limit my daily typing time in aggregate, but AntiRSI didn&rsquo;t keep track of it.
</p>
<p>
Over the past few years I&rsquo;ve fixed these issues, and since my previous emails offering patches have gone unanswered, thought the result might be useful to others: <a href="http://web.sabi.net/nriley/software/#antirsi">download AntiRSI 1.4njr2</a> if you&rsquo;re interested.
</p>
<p>
Some screenshots:
</p>
<p>
<a href="http://www.flickr.com/photos/njr/1056138733/" title="Photo Sharing"><img src="http://farm2.static.flickr.com/1142/1056138733_99ced41bfc_o.png" width="142" height="291" alt="Session timer in AntiRSI 1.4njr2" /></a> <a href="http://www.flickr.com/photos/njr/1077793458/" title="Photo Sharing"><img src="http://farm2.static.flickr.com/1331/1077793458_1ef53836e5_o.png" width="255" height="230" alt="AntiRSI 1.4njr2 Preferences" /></a>
</p>
</p>
<p>If you have a Mac and don&rsquo;t like AntiRSI, try <a href="http://www.dejal.com/timeout/">Time Out</a>: it&rsquo;s much more customizable, but takes over the entire screen, making it unusable for me. According to a VersionTracker review, it also hogs CPU during breaks.</p>
<p>
For Windows and X11, check out <a href="http://www.workrave.org/welcome/">Workrave</a>; it&rsquo;s great, includes a session timer and even comes with network support if you use multiple computers.</p>
]]></content:encoded>
			<wfw:commentRss>http://njr.sabi.net/2007/08/10/antirsi-14njr2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Internationalization, services and ICeCoffEE</title>
		<link>http://njr.sabi.net/2007/06/19/internationalization-services-and-icecoffee/</link>
		<comments>http://njr.sabi.net/2007/06/19/internationalization-services-and-icecoffee/#comments</comments>
		<pubDate>Wed, 20 Jun 2007 03:35:34 +0000</pubDate>
		<dc:creator>Nicholas Riley</dc:creator>
		
		<category>Computing</category>

		<category>Mac OS X</category>

		<guid isPermaLink="false">http://njr.sabi.net/2007/06/19/internationalization-services-and-icecoffee/</guid>
		<description><![CDATA[While taking a break to work on ICeCoffEE today, I discovered an annoying internationalization bug.

First, some background. Since version 1.4, ICeCoffEE has let you hide items in contextual Services menus.  Peter Hosey covers the feature nicely here.


Service menu items can be localized, like almost everything else in Mac OS X.  The service provider [...]]]></description>
			<content:encoded><![CDATA[<p>While taking a break to work on ICeCoffEE today, I discovered an annoying internationalization bug.</p>
<p>
First, some background. Since version 1.4, ICeCoffEE has let you hide items in contextual Services menus.  Peter Hosey covers the feature nicely <a href="http://boredzo.org/blog/archives/2007-04-12/icecoffee-and-services-are-your-friends">here</a>.
</p>
<p>
Service menu items can be localized, like almost everything else in Mac OS X.  The service provider apps include one or more language translations for their item names.  The user configures a list of languages in order of preference in the International System Preferences. And the <i>service-invoking application</i>&mdash;the one from which you pull down or pop up the Services menu&mdash;also has a list of languages in which its user interface is localized.
</p>
<p>
Mac OS X makes the (sensible) choice that the service-invoking application&#8217;s user interface language dictates the language of all text in that application.  But the fact that we&#8217;re dealing with ordered <i>lists</i> of languages, rather than individual languages, makes things a bit more complicated.  Let&#8217;s take an example:
</p>
<blockquote><p>
Your user interface language preferences are, in order, <b>Japanese</b>, <b>German</b> and <b>English</b>.</p>
<p>
(Those also happen to be the languages I understand in ascending order of proficiency, with a gigantic gap between Japanese and German.)
</p>
<p>
Service menu item <b>A</b> has <b>Japanese</b>, <b>German</b> and <b>English</b> localizations.  Item <b>B</b> has only <b>German</b> and <b>English</b>.
</p>
<p>
Say the app you&#8217;re running has only an <b>English</b> localization. Items <b>A</b> and <b>B</b> both appear in <b>English</b>.
</p>
<p>
What if your app has a <b>Japanese</b> localization? Item <b>A</b> appears in <b>Japanese</b>, but item <b>B</b> appears in <b>German</b>, <i>even if the app has no German localization</i>.
</p>
</blockquote>
<p>I&#8217;m guessing (have not completely verified) that OS X picks a list of potential service menu item languages by looking at the user&#8217;s preferred language list, starting with the user interface language of the current application.</p>
<p>
What&#8217;s the bug? ICeCoffEE&#8217;s configuration sheet is hosted in System Preferences. When looking for a list of filter-able services, ICeCoffEE asks System Preferences for its Services menu and saves your choices according to the displayed item text.  See for yourself:
</p>
<pre>
% defaults read net.sabi.icecoffee ICServiceOptions
{
    ChineseTextConverter = {ICServiceHidden = 1; };
    "CocoaMySQL-SBG" = {ICServiceHidden = 1; };
    "Define in OmniDictionary" = {ICServiceHidden = 1; };
[...]
</pre>
<p>
I did this because it seemed to be a WYSIWYG method of filtering, but it means that the user interface language of System Preferences influences what service names you see.  If an item is also localized in a different language, it won&#8217;t get hidden.
</p>
<p>
I&#8217;ve never received a report of this bug. However, if it affects you, I can suggest two workarounds.
</p>
<ol>
<li>Edit the preferences property list yourself.  The format is pretty simple, but I don&#8217;t recommend this.  If you break it, you get to keep both pieces.
</li>
<li>For every user interface language you use, launch System Preferences with that language at the top of the preferred list, and select the localized service names for that language in ICeCoffEE&#8217;s preferences.  This assumes, of course, that System Preferences is localized in every language for which a service item you want to hide is localized.  At worst, you will end up with something like this, where ICeCoffEE&#8217;s interface is in German and the service names are in Japanese:
<p>
<img src="http://njr.sabi.net/wp-content/uploads/2007/06/icecoffee-i18n/i18n.png" border="0" height="121" width="504" alt="i18n.png" />
</p>
<p>
(Sharp-eyed people may notice two changes in the screenshot above, which hint at features coming in ICeCoffEE 1.5 <img src='http://njr.sabi.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />
</p>
</li>
</ol>
<p>I plan to fix the bug by doing something like option 2, adding the text of every available service menu item localization to the ignore list.  It makes things more complicated because I currently store hidden services hierarchically, such that if you disable the submenu, everything inside it goes away; however, it&#8217;s possible that different localizations of service names will have different submenu structures.  (Yuck.)  This method also breaks if a newer version of an application adds a service name localization, but simply opening and closing the ICeCoffEE configuration sheet should fix that problem.</p>
<p>
There are other ways I could handle this.  I could store the bits used to define a service (NSMessage, NSPortName, etc.) but that would mean a lot more work to do when filtering the service list without scanning the disk as <a href="http://www.manytricks.com/servicescrubber/">Service Scrubber</a> does.  Or I could canonicalize to English before filtering, which conflicts with applications that have no English localization, or applications like <a href="http://monolingual.sourceforge.net/">Monolingual</a> which delete localizations&mdash;although deleting English is often unsafe because it&#8217;s the ultimate &#8220;fallback&#8221; language.</p>
]]></content:encoded>
			<wfw:commentRss>http://njr.sabi.net/2007/06/19/internationalization-services-and-icecoffee/feed/</wfw:commentRss>
		</item>
		<item>
		<title>An AppleScript to update podcasts and your iPod</title>
		<link>http://njr.sabi.net/2007/03/04/an-applescript-to-update-podcasts-and-your-ipod/</link>
		<comments>http://njr.sabi.net/2007/03/04/an-applescript-to-update-podcasts-and-your-ipod/#comments</comments>
		<pubDate>Mon, 05 Mar 2007 02:37:05 +0000</pubDate>
		<dc:creator>Nicholas Riley</dc:creator>
		
		<category>Computing</category>

		<category>Mac OS X</category>

		<guid isPermaLink="false">http://njr.sabi.net/2007/03/04/an-applescript-to-update-podcasts-and-your-ipod/</guid>
		<description><![CDATA[These days nearly 100% of my iPod listening is podcasts, and iTunes&#8217; iPod-syncing podcast support is decent but lacking in a few areas.
One issue that bugs me is that, after connecting my iPod, I must update podcasts then update the iPod again in order for the already-listened episodes to disappear from the iPod.  While [...]]]></description>
			<content:encoded><![CDATA[<p>These days nearly 100% of my iPod listening is podcasts, and iTunes&rsquo; iPod-syncing podcast support is decent but lacking in a few areas.</p>
<p>One issue that bugs me is that, after connecting my iPod, I must update podcasts then update the iPod <i>again</i> in order for the already-listened episodes to disappear from the iPod.  While the play counts update on the first, automatic iPod sync, the associated action (removing the corresponding episodes) doesn&#8217;t happen until you do another podcast update.</p>
<p>Another issue is the update timeout&mdash;after a few days if you haven&#8217;t played an episode of a podcast, it&#8217;ll stop updating.  For people like my father who abandon their iPod for months at a time (hi, Dad!) it is a great bandwidth-conserving idea, but for me, with video podcasts and a non-video iPod, I like to accumulate episodes to watch when I&#8217;m exercising at home.</p>
<p><a href="http://www.dougscripts.com/itunes/scripts/ss.php?sp=updateexpiredpodcasts">One of Doug&#8217;s AppleScripts for iTunes</a> handily solves the second issue, and I&#8217;ve written a script to deal with the first.  iTunes doesn&#8217;t let you query its iPod update status, so I instead wait for iTunes to unmount the iPod.  I found <a href="http://www.macosxhints.com/article.php?story=20060731010250960">this script</a> which periodically checks the iPod disk space usage, but it fails for me, probably because iSync takes a long time to often do nothing.</p>
<p><img src="http://njr.sabi.net/wp-content/uploads/2007/03/podcast-update/applescript.png" border="0" height="625" width="554" alt="" align="" /></p>
<p>Embedding this <tt>bash</tt> script into AppleScript was a real pain, what with <tt>do shell script</tt>&#8217;s <a href="http://developer.apple.com/technotes/tn2002/tn2065.html">many and varied limitations</a>, as I had to remove line breaks, indentation, my use of extended globs and even the <tt>while</tt> loop, because iTunes failed to finish updating the iPod while the script was executing. I think I will be checking out the newly revived <a href="http://mail.python.org/pipermail/pythonmac-sig/2007-March/018733.html">PyOSA</a> so I can do all this in Python instead.</p>
<p><img src="http://njr.sabi.net/wp-content/uploads/2007/03/podcast-update/bash.png" border="0" height="153" width="386" alt="" align="" /></p>
<p><a href="http://njr.sabi.net/wp-content/uploads/2007/03/podcast-update/Update Podcasts &#038; iPod.zip">Download the AppleScript</a>, unzip it and place it in <tt>~/Library/iTunes/Scripts</tt>.</p>
<p>(Note: this script is only tested on my Mac with my 3G FireWire-connected iPod; it definitely won&#8217;t work if you have iPod disk mode turned on, and may not work on other configurations.)
</p>
]]></content:encoded>
			<wfw:commentRss>http://njr.sabi.net/2007/03/04/an-applescript-to-update-podcasts-and-your-ipod/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Happy New Year</title>
		<link>http://njr.sabi.net/2007/01/01/happy-new-year/</link>
		<comments>http://njr.sabi.net/2007/01/01/happy-new-year/#comments</comments>
		<pubDate>Mon, 01 Jan 2007 13:01:31 +0000</pubDate>
		<dc:creator>Nicholas Riley</dc:creator>
		
		<category>Administrivia</category>

		<guid isPermaLink="false">http://njr.sabi.net/2007/01/01/happy-new-year/</guid>
		<description><![CDATA[This is the first new year I can remember that I haven&#8217;t spent with family or friends; instead, I had a quiet night at home cooking Indian food and flailing at leftover crossword puzzles.

2007 is a year a lot of things will be changing for me, and I hereby resolve to try my hardest to [...]]]></description>
			<content:encoded><![CDATA[<p>This is the first new year I can remember that I haven&#8217;t spent with family or friends; instead, I had a quiet night at home cooking Indian food and flailing at leftover crossword puzzles.</p>
<p>
2007 is a year a lot of things will be changing for me, and I hereby resolve to try my hardest to make sure the transition is a smooth one.
</p>
<p>
Happy new year, everyone; may this year be better than last.
</p>
]]></content:encoded>
			<wfw:commentRss>http://njr.sabi.net/2007/01/01/happy-new-year/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Buying a CO alarm</title>
		<link>http://njr.sabi.net/2006/12/26/buying-a-co-alarm/</link>
		<comments>http://njr.sabi.net/2006/12/26/buying-a-co-alarm/#comments</comments>
		<pubDate>Tue, 26 Dec 2006 22:43:02 +0000</pubDate>
		<dc:creator>Nicholas Riley</dc:creator>
		
		<category>Web</category>

		<guid isPermaLink="false">http://njr.sabi.net/2006/12/26/buying-a-co-alarm/</guid>
		<description><![CDATA[So Illinois is mandating carbon monoxide detector/alarms in residences as of January 1. Today I decided to buy one. I wanted to get a combination smoke/CO detector, that way I wouldn&#8217;t need to change two batteries. Sounds easy, doesn&#8217;t it?

Let&#8217;s see, this one is on clearance because its battery lasts 2 weeks.


This one seems to [...]]]></description>
			<content:encoded><![CDATA[<p>So Illinois is <a href="http://www.ilga.gov/legislation/publicacts/fulltext.asp?Name=094-0741">mandating</a> carbon monoxide detector/alarms in residences as of January 1. Today I decided to buy one. I wanted to get a combination smoke/CO detector, that way I wouldn&#8217;t need to change two batteries. Sounds easy, doesn&#8217;t it?</p>
<p>
Let&#8217;s see, <a href="http://www.amazon.com/gp/product/customer-images/B00004WA4C/ref=cm_ciu_pdp_images_all/104-2658910-4699945?ie=UTF8&#038;s=hi#gallery">this one</a> is on clearance because its battery lasts 2 weeks.
</p>
<p>
<a href="http://www.amazon.com/First-Alert-Carbon-Monoxide-SC01CN3/dp/B00005OU73/ref=pd_ys_qtk_k2a_title/104-2658910-4699945">This one</a> seems to give a lot of false alarms, and has a rather humorous review attached.
</p>
<blockquote><p>
Reviewer: <b>A Kitchen &amp; Housewares enthusiast</b><br />
This is not and I repeat is not a good alarm. There is one alarm light and you can hardly tell which one is sounding. It looks as if the specs are lying to me and I hate lies. Also the battery died after 6-8 months. The low battery alert is loud and chirps so anoyingly. I also noticed that the alarm sounds a loud shrieking alarm when it sounds. I will return this alarm. Never again will I trust in First Alert!
</p></blockquote>
<p>It also makes me wish I never meet a &#8220;kitchen and housewares enthusiast&#8221; in person.</p>
<p>
<a href="http://www.amazon.com/First-SCO7CN-Combination-Carbon-Monoxide/dp/B0002CWXZG/sr=1-9/qid=1167170219/ref=sr_1_9/104-2658910-4699945?ie=UTF8&#038;s=hi">This one</a> goes off when you try to use an infrared remote control.  The detector goes in the hallway behind my stereo, so that one&#8217;s out.
</p>
<p>
Finally, I give up on Amazon.com and do a Google search. I eventually stumble upon the <a href="http://electricsuppliesonline.com/fi12camoands.html">Firex 12000</a>, which has such useful features as a mute button that actually mutes for longer than you hold it down, an alarm that starts out quiet, a battery that&#8217;s easy to replace, and an industrial design that looks vaguely like someone cared.  It&#8217;s AC/DC so I don&#8217;t have to replace batteries every 6 months, and even communicates over the power line with other units of its type.  I read prior ones have freaked out after 4&#8211;6 years, but I plan to be gone by then.
</p>
<p>
A <a href="http://www.pricegrabber.com/rating_getprodrev.php/product_id=2013839/">bonus review</a> (for a CO-only alarm). The username is a nice touch.</p>
]]></content:encoded>
			<wfw:commentRss>http://njr.sabi.net/2006/12/26/buying-a-co-alarm/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ATSServer really, really, really sucks</title>
		<link>http://njr.sabi.net/2006/11/03/atsserver-really-really-really-sucks/</link>
		<comments>http://njr.sabi.net/2006/11/03/atsserver-really-really-really-sucks/#comments</comments>
		<pubDate>Sat, 04 Nov 2006 01:28:15 +0000</pubDate>
		<dc:creator>Nicholas Riley</dc:creator>
		
		<category>Computing</category>

		<category>Mac OS X</category>

		<guid isPermaLink="false">http://njr.sabi.net/2006/11/03/atsserver-really-really-really-sucks/</guid>
		<description><![CDATA[The biggest day-to-day annoyances I&#8217;ve had since 10.0 have been, in descending order of irritation:

Fonts: inconsistencies between rendering paths, bad support for bitmaps (I still can&#8217;t use my favorite font in BBEdit), ATSServer hangs/crashes, silent refusal to activate, font cache corruption, worthless Font Book interface, etc.

Disks/filesystems: HFS+ slowness, Spotlight flakiness.  AFP instability, slowness and [...]]]></description>
			<content:encoded><![CDATA[<p>The biggest day-to-day annoyances I&#8217;ve had since 10.0 have been, in descending order of irritation:</p>
<ul>
<li>Fonts: inconsistencies between rendering paths, bad support for bitmaps (I <i>still</i> can&#8217;t use my favorite font in BBEdit), ATSServer hangs/crashes, silent refusal to activate, font cache corruption, worthless Font Book interface, etc.
</li>
<li>Disks/filesystems: HFS+ slowness, Spotlight flakiness.  AFP instability, slowness and complete inability to handle concurrent accesses.  Disk Arbitration flakiness. Disk imaging instability and yet more flakiness.  Flaky network browsing.  Still no LVM.  ZFS on OS X can&#8217;t come too soon&mdash;it&#8217;s been a joy to use on Solaris.
</li>
<li>USB: crashy drivers (less so of late), poor transfer throughput, overly aggressive port deactivation and poor feedback when something appears to go wrong.  Some of these problems might be hardware&mdash;this Intel mini doesn&#8217;t work with my external USB 2 enclosure, whereas my iBook worked fine.
</li>
<li>Finder (need I say more?)
</li>
</ul>
<p>Today alone I spent about an hour troubleshooting font problems.  First I spent about four reboots trying, and eventually failing, to get the fonts in <tt>~/Library/Fonts</tt> to activate.  No amount of font cache trashing or safe booting fixed it; I eventually just renamed the folder and told FontExplorer X to import them, at which point everything worked&#8230; until half an hour later when <a href="http://njr.sabi.net/wp-content/uploads/2006/11/atsserver-samples/Camino_1015.sample.txt">Camino hung</a> then <a href="http://njr.sabi.net/wp-content/uploads/2006/11/atsserver-samples/Terminal_848.sample.txt">Terminal hung</a> (as did every other app I tried, such as Dock and LaunchBar).  Turned out <a href="http://njr.sabi.net/wp-content/uploads/2006/11/atsserver-samples/ATSServer_74.sample.txt">ATSServer was using 100% CPU in some C++ destructor</a>.  I had to SSH in from another machine to kill ATSServer, at which point everything started working again.  Guess I should be glad that it worked, or something.</p>
<p>I wonder how bad the underlying code really is, and pray it&#8217;ll get some attention in Leopard.
</p>
]]></content:encoded>
			<wfw:commentRss>http://njr.sabi.net/2006/11/03/atsserver-really-really-really-sucks/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
