<?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"
	>

<channel>
	<title>toastup!</title>
	<atom:link href="http://toastycode.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://toastycode.com/blog</link>
	<description>updates from toastycode</description>
	<pubDate>Thu, 19 Jun 2008 17:50:20 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Catching up.</title>
		<link>http://toastycode.com/blog/2008/06/19/catching-up/</link>
		<comments>http://toastycode.com/blog/2008/06/19/catching-up/#comments</comments>
		<pubDate>Thu, 19 Jun 2008 17:47:11 +0000</pubDate>
		<dc:creator>Daniel Sandler</dc:creator>
		
		<category><![CDATA[Pyrotheque]]></category>

		<category><![CDATA[Site News]]></category>

		<category><![CDATA[Software Releases]]></category>

		<category><![CDATA[TapeDeck]]></category>

		<guid isPermaLink="false">http://toastycode.com/blog/?p=20</guid>
		<description><![CDATA[Hi, it&#8217;s been a while, hasn&#8217;t it?
New releases: TapeDeck and Pyrothèque



TapeDeck, my exciting joint project with Chris Liscio of SuperMegaUltraGroovy, has made it all the way up to version 1.0.3 without so much as a mention over here on toastup!. The latest release fixes a few more quirks that we&#8217;ve discovered in the weeks since [...]]]></description>
			<content:encoded><![CDATA[<p>Hi, it&#8217;s been a while, hasn&#8217;t it?</p>
<h3>New releases: TapeDeck and Pyrothèque</h3>

<p align="center"><a href="http://tapedeckapp.com/"><img src="/images/tapedeck-logo-med.png" style="border:none;"></a></p>

<p><a href="http://tapedeckapp.com/">TapeDeck</a>, my exciting joint project with Chris Liscio of <a href="http://supermegaultragroovy.com/">SuperMegaUltraGroovy</a>, has made it all the way up to <strong>version 1.0.3</strong> without so much as a mention over here on <em>toastup!</em>. The latest release fixes a few more quirks that we&#8217;ve discovered in the weeks since TapeDeck’s <a href="http://dsandler.org/wp/archives/2008/05/09/tapedeck-10">big introduction</a> last month.</p>

<p align="center"><a href="/pyrotheque"><img src="/pyrotheque/images/pyro-advert-4.png" style="border:none;"></a></p>
<p>
More recently, <a href="/pyrotheque">Pyrothèque</a> got a long-overdue update.  Version 1.1.1 incorporates almost a year&#8217;s worth of minor bug fixes, including an adjustment to the rocket launcher to better position explosions on monitors of odd sizes and proportions.  (That means the fireworks ought to show up properly now, Mister Thirty Inch Cinema Display.)</p>

<h3>Web site fixes</h3>

<p>One of Google&#8217;s robot army helpfully informed me last month that spammers had exploited a hole in the version of <a href="http://wordpress.org/">WordPress</a> used here at <em>toastup!</em>—resulting in lots of invisible nasty spam keywords that got the blog evicted from Google&#8217;s index. The hole&#8217;s now been patched, so (hopefully) we&#8217;ll re-appear in your search results in the near future.  I&#8217;ve also gone through and fixed up earlier blog posts that were mangled by the update, so you should be able to see images again in the popular <a href="http://toastycode.com/blog/2008/02/05/lcd-scrub/">LCD Scrub article</a>, among others.</p>

<h3>And, finally—</h3>
<p>Expect updates to be light for several months, as we&#8217;re expecting a rather large new <a href="http://en.wikipedia.org/wiki/External_cephalic_version">“version”</a> here at toastycode HQ in the next few weeks.  Please don&#8217;t hesitate to get in touch (using the email link below, or in your toastycode software product) if you have questions or find any bugs—but also please understand if my replies are somewhat in arrears.</p>]]></content:encoded>
			<wfw:commentRss>http://toastycode.com/blog/2008/06/19/catching-up/feed/</wfw:commentRss>
		</item>
		<item>
		<title>LCD Scrub, Foam get updates</title>
		<link>http://toastycode.com/blog/2008/04/15/lcd-scrub-foam-get-updates/</link>
		<comments>http://toastycode.com/blog/2008/04/15/lcd-scrub-foam-get-updates/#comments</comments>
		<pubDate>Tue, 15 Apr 2008 16:07:44 +0000</pubDate>
		<dc:creator>Daniel Sandler</dc:creator>
		
		<category><![CDATA[BeOS]]></category>

		<category><![CDATA[LCD Scrub]]></category>

		<category><![CDATA[Software Releases]]></category>

		<guid isPermaLink="false">http://toastycode.com/blog/2008/04/15/lcd-scrub-foam-get-updates/</guid>
		<description><![CDATA[
I&#8217;ve had a small pile of bug fixes to waiting to be released, and, finding myself with a few minutes to spare, I&#8217;ve gone ahead and pushed them out:






LCD Scrub version 1.0.1
(download)



Foam version 1.3.1
(download)



If you run into any trouble with these new versions, please get in touch using the email link at the bottom of [...]]]></description>
			<content:encoded><![CDATA[<p>
I&#8217;ve had a small pile of bug fixes to waiting to be released, and, finding myself with a few minutes to spare, I&#8217;ve gone ahead and pushed them out:
</p>

<table border="0" cellpadding="0" cellspacing="16" width="100%">
<tr>
<td align="center" class="photocaption">
<a href="/lcdscrub"><img src="http://toastycode.com/lcdscrub/icons/lcd-scrub-128.png" title="LCD Scrub" border="0" /></a>
<p><a href="/lcdscrub">LCD Scrub</a> version 1.0.1<br/>
(<a href="/files/LCDScrub-101.zip">download</a>)</p>
</td>
<td align="center" class="photocaption">
<a href="/besavers"><img src="http://toastycode.com/besavers/icons/Foam-thumb.png" title="Foam.saver" border="0" /></a><br/>
<p><a href="/besavers">Foam</a> version 1.3.1<br/>
(<a href="/files/Foam-131.dmg">download</a>)</p>
</td></tr></table>

<p>
If you run into any trouble with these new versions, please get in touch using the email link at the bottom of this page.  Release notes:
</p>

<h3>Changes in LCD Scrub 1.0.1</h3>
<ul><li>Fixes registration problems for some users.</li>
<li>Now shows license agreement when entering registration code.</li>
<li>Other small improvements.</li>
</ul>
<h3>Changes in Foam 1.3.1</h3>
<ul>
<li>Uses a different (better) <a href="http://devworld.apple.com/documentation/Darwin/Reference/ManPages/man3/arc4random.3.html">pseudorandom number generator</a> to improve randomness of bubble placement. (The previous method was OK, but could cause repeated sequences when invoking Foam in rapid succession.)</li>
<li>Fixes a pretty silly infinite loop that the preferences would enter if you selected <em>no</em> color combinations.</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://toastycode.com/blog/2008/04/15/lcd-scrub-foam-get-updates/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Introducing LCD Scrub</title>
		<link>http://toastycode.com/blog/2008/02/05/lcd-scrub/</link>
		<comments>http://toastycode.com/blog/2008/02/05/lcd-scrub/#comments</comments>
		<pubDate>Wed, 06 Feb 2008 03:05:12 +0000</pubDate>
		<dc:creator>Daniel Sandler</dc:creator>
		
		<category><![CDATA[LCD Scrub]]></category>

		<category><![CDATA[Software Releases]]></category>

		<guid isPermaLink="false">http://toastycode.com/blog/2008/02/05/lcd-scrub/</guid>
		<description><![CDATA[&#8230;or, the story of how I really saved my screen.
Every piece of software available here at toastycode exists first and foremost because it was something I wanted to use and, finding it not to exist, had to go about creating it.  Pyroth&#232;que is a perfect example: I had fond memories of Pyro!&#8482;&#8212;perhaps the granddaddy [...]]]></description>
			<content:encoded><![CDATA[<h3>&hellip;or, the story of how I <em>really</em> saved my screen.</h3>
<p>Every piece of software available here at <a href="http://toastycode.com/">toastycode</a> exists first and foremost because it was something I wanted to use and, finding it not to exist, had to go about creating it.  <a href="/pyrotheque">Pyroth&egrave;que</a> is a perfect example: I had <a href="http://dsandler.org/wp/archives/2006/07/04/pyromania">fond memories</a> of <nobr>Pyro!&trade;</nobr>&mdash;perhaps the granddaddy of all screen savers&mdash;and wanted to bring its iconic B&amp;W fireworks back for a revival.
</p>
<p>OK, now that that&#8217;s out of the way, let&#8217;s talk about LCDs.</p>
<p>At my <a href="http://flickr.com/photos/dsandler/144966034/" title="Stitched panoramic photo of my grad student office.">office</a> I have my Mac workstation hooked up to a 19&Prime; flat-panel display from Dell (the <a title="Dell 2001FP LCD display" href="http://support.euro.dell.com/support/edocs/monitors/2001fp/EN/specs.htm">2001FP</a>). I drive it over DVI at native resolution (1600&times;1200), which is totally sufficient for my <a href="http://www.randsinrepose.com/archives/2003/07/10/nadd.html">multitasking</a> needs.
</p>
<h3>April 25, 2007</h3>
<p>One sunny Wednesday morning, I arrived at my office to find this:
</p>
<p align="center"> <a href="/lcdscrub/stories/dsandler/before-broken-screen.jpg"><img class="pictureframe" width="240" height="180" src="/lcdscrub/stories/dsandler/before-broken-screen-sm.jpg" /></a><div class="imagecaption"><strong>Fig. 1.</strong> &nbsp; Uh oh.</div> </p>
<span id="more-18"></span>
<p>
<a name="lcd-scrub_foot1back"></a> The standard &ldquo;Computer Name&rdquo; screen saver was running<sup><a href="#lcd-scrub_foot1">1</a></sup>, but something was very, very wrong. Bright green lines streaked down the black areas of the screen, while green echoes smeared rightward off displayed images. The entire screen was dusted with stray green pixels, sparkling and popping like TV snow.</p>
<p>Not good.</p>

<p align="center"><a href="/lcdscrub/stories/dsandler/before-detail.jpg"><img class="pictureframe" width="240" height="180" src="/lcdscrub/stories/dsandler/before-detail-sm.jpg" /></a> <div class="imagecaption"><strong>Fig. 2.</strong> &nbsp; Detail.</div> </p>

<p>
It turned out that my officemate had used my iSight/iChat setup the previous evening.  He must have swiveled the monitor around when he was finished; it was torqued so far out of position that the DVI cable came loose (with a few bent pins for good measure).  Somehow the cross-talked DVI signal resulted in the green noise, which danced on my screen all night long.
</p>
<h3>The video, it burns</h3>
<p>
Here&#8217;s where it gets interesting. When I replaced the DVI cable, the screen <em>almost</em> went back to normal: my Mac&#8217;s screen was now covered in dark shadows where the searing green had been.  It was like having CRT burn-in.
</p>
<p>
<a name="lcd-scrub_foot2back"></a> I continued using the monitor for the rest of the day, but the lines were distracting, irritating, and deeply concerning: I didn&#8217;t want to have to tell my adviser that I&#8217;d busted my shiny LCD panel<sup><a href="#lcd-scrub_foot2">2</a></sup>. I turned it off overnight, hoping to release whatever bad mojo had found its way in there, but when I powered it back on the next morning, the lines were still there.
</p>
<p>
<a name="lcd-scrub_foot3back"></a> I turned the display off when I went home, and over the course of normal use over the next few days, the ghosts faded a little, but were still pretty annoying. I came in a couple of days later with a better camera<sup><a href="#lcd-scrub_foot3">3</a></sup> and took some close-up images of the burned-in areas:</p>

<p align="center"> <a href="/lcdscrub/stories/dsandler/before-dock.jpg"><img class="pictureframe" width="240" height="180" src="/lcdscrub/stories/dsandler/before-dock-sm.jpg" /></a><a href="/lcdscrub/stories/dsandler/before-trash.jpg"><img class="pictureframe" width="240" height="180" src="/lcdscrub/stories/dsandler/before-trash-sm.jpg" /></a> <div class="imagecaption"><strong>Fig. 3.</strong> &nbsp; The most persistent ghosting occurred toward the bottom of my screen; it still hadn&#8217;t cleared after a few days.</div> </p>

<p>
<a name="lcd-scrub_foot4back"></a> Over the weekend I did some research. I had always assumed that flat panels couldn&#8217;t get burn-in<sup><a href="#lcd-scrub_foot4">4</a></sup>; it turns out I (along with <a href="http://gizmodo.com/gadgets/home-entertainment/lcd-burn+in-exists-and-it-isnt-pretty-292842.php">countless LCD salespeople</a>) was mistaken. LCDs can instead get <strong>image persistence</strong> (aka image &#8220;retention&#8221; or &#8220;ghosting&#8221; or &#8220;traces&#8221;), and manufacturers disagree as to exactly why it occurs; perhaps <a href="http://www.mitsubishi-presentations.com/pdf/MIT_MDTLCD_IMAGE_PERSISTENCE.pdf">stray charge</a>, maybe combined with <a href="http://www.necdisplay.com/SupportCenter/Monitors/TechLibrary/Image_Persistence_White_Paper_0505.pdf">heat and &#8220;ionic impurities&#8221;</a>, or some other <a href="http://en.wikipedia.org/wiki/Image_persistence">abstruse electrochemical condition</a>.
</p>

<p>What is universally acknowledged is that one image, displayed for a long time, will tend to leave an after-image on an LCD screen or TV.  <a href="http://www.necdisplay.com/SupportCenter/Monitors/TechLibrary/Image_Persistence_White_Paper_0505.pdf">High-contrast static images</a> (like my green lines) are the worst.  There also seems to be some consensus that Dell displays are <a href="http://www.widescreengamer.com/articles/lcd_image_screen_burn_on_dell_2005fpw.html">particularly prone</a> to this sort of thing.  Lucky me.</p>

<h3>Prevention and repair</h3>

<p>The common recommendation, from manufacturers and message boards, is: <em>don&#8217;t leave a static image on your screen.</em> (So keep using those <a href="/pyrotheque">screen</a> <a href="/besavers">savers</a>, folks.)  Which is all fine and well, but what to do with a screen that&#8217;s already burned?</p>

<p>Finally, some good news: it turns out that <strong>image persistence is usually reversible</strong> (something that was never possible with CRTs).  I quickly found Apple&#8217;s <a href="http://docs.info.apple.com/article.html?artnum=88343">recommendation</a> for eliminating image persistence: Create an all-white image in Photoshop and set up the photo-album screen saver to use just that one image. (Other manufacturers and <a href="http://techreport.com/forums/viewtopic.php?t=38066">forum posts</a> also recommend displaying a solid white image.)</p>

<p>I tried the solid white image technique for a day, but for whatever reason, the lines were still there.  After reading the NEC white paper talking about fixed high-contrast images <em>causing</em> persistence, though, I wondered: Could I use <em>moving</em> high-contrast images to &#8220;scrub away&#8221; and smooth out the excess electrical charge (or whatever it is that causes the problem)?</p>

<h3>Scrubbing solution</h3>

<p>I set about building a screen saver module that would let me try different high-contrast patterns to see how they fared.  Furthermore, since patterns with thin bright lines caused the problem, I set about using similar line patterns to ameliorate it.</p>

<p>It worked.</p>

<p>After a day of using the high-contrast patterns, the lines were almost invisible; the next day they were gone.</p>

<p align="center" title="&ldquo;Pics or it didn't happen.&rdquo;"> <a href="/lcdscrub/stories/dsandler/after-dock-2.jpg"><img class="pictureframe" width="240" height="180" src="/lcdscrub/stories/dsandler/after-dock-2-sm.jpg" /></a><a href="/lcdscrub/stories/dsandler/after-trash-2.jpg"><img class="pictureframe" width="240" height="180" src="/lcdscrub/stories/dsandler/after-trash-2-sm.jpg" /></a> <div class="imagecaption"><strong>Fig. 4.</strong> &nbsp; My dock and Trash, after a couple of days of pattern-based LCD scrubbing.</div> </p>

<p>
So, to recap: Dan&#8217;s LCD is hosed; Dan does a bunch of Internet reading, tries a bunch of stuff, creates a solution that works; Dan doesn&#8217;t have to get a new monitor.  Q.E.D., the end.
</p>

<h3>An epilogue&mdash;and also a preface</h3>

<p>
I thought I was done with LCD scrubbing forever; with my display fixed, my screen saver properly configured, and my DVI cable securely screwed to the back of my display (!), I was free of the whole issue.
</p>
<p>
And then I started hearing, from friends and family who had heard the sob story of <em>how my monitor was ruined and how I fixed it,</em> that I should make this tool available to everyone.  &#8220;Our office&#8217;s IT guy just threw a few LCDs away,&#8221; said my brother-in-law. &#8220;They had burned-in logos and patterns, and we couldn&#8217;t use them like that. I told him about your scrub thing, and he said, <em>where can I get that?</em>&#8221;
</p>
<p>
&#8220;Don&#8217;t you <em>sell</em> software?&#8221; he added, somewhat irritably, to my blank stare.
</p>
<p>
So, here we are: A few months later (well, more than a few; it&#8217;s been a busy time for my <a href="http://www.cs.rice.edu/~dsandler/">other career</a>), I present <a href="/lcdscrub"><b>LCD Scrub</b> 1.0</a>.</p>
<p align="center"> <a href="/lcdscrub/"><img src="/lcdscrub/icons/lcd-scrub-200.png" border="0" title="LCD Scrub: busts flat-panel ghosts" alt="LCD Scrub: busts flat-panel ghosts" /></a> </p>
<p>It&#8217;s a descendant of the same screen saver I wrote for myself last spring; to use it, set your energy saver settings to never turn off the display, and your display settings to your LCD panel&#8217;s native resolution.  Then select LCD Scrub as your screen saver, pick a pattern, and let it run overnight.  If you don&#8217;t see any improvement, try another pattern.
</p>
<p>
You can download a trial version from the <a href="/lcdscrub">LCD Scrub</a> page; it will run for 20 minutes so you can see how it works and decide if you want to purchase it. The full version (without time limits) costs just <strong>$18</strong>.
</p>
<p>
If LCD Scrub doesn&#8217;t work on your display, <a href="javascript:void(window.location=('mailtx:suppxrt@txstycxde.cxm'.replace(/x/g,'o')+'?subject=LCD%20Scrub%20question'));">shoot me an email</a> (with photos of the problem, please) and we&#8217;ll try to figure out how to improve the software. I can&#8217;t guarantee that it will work in every case of image persistence (having only a limited set of screens to test it on) but, as it uses Apple&#8217;s recommended techniques along with my additional high-contrast patterns, I expect it to be effective on all but the most severe cases of image persistence.
</p>
<p>
<a href="/lcdscrub">Download LCD Scrub</a> and give it a shot.
</p>

<div class="footnotes">
<p><a class="footlabel" name="lcd-scrub_foot1">1</a> Don&#8217;t worry, <a href="/pyrotheque">Pyroth&egrave;que</a> was running on my PowerBook. <a href="#lcd-scrub_foot1back" class="footback">&#x2934;</a> </p>
<p><a class="footlabel" name="lcd-scrub_foot2">2</a> Which might mean having to buy a whole new display. From Dell&#8217;s <a href="http://support.dell.com/support/topics/global.aspx/support/dsn/en/document?c=us&#038;docid=10892E6E9EC371C8E040030ABD620AFF&#038;journalid=44A8638E072880EBE040A68F7328451C&#038;l=en&#038;s=gen ">support document on &#8220;burn-in&#8221;</a>: <em>Image Retention (or &#8220;burn in&#8221;) on LCD flat-panel displays is consider <em>[sic]</em> improper use of the display and is not cover by Dell&#8217;s limited warranty.</em> Yikes. <a href="#lcd-scrub_foot2back" class="footback">&#x2934;</a> </p>
<p><a class="footlabel" name="lcd-scrub_foot3">3</a> Well, better than my cameraphone, at any rate. <a href="#lcd-scrub_foot3back" class="footback">&#x2934;</a> </p>
<p><a class="footlabel" name="lcd-scrub_foot4">4</a> And, consequently, I felt a little foolish using screensavers all the time. <a href="#lcd-scrub_foot4back" class="footback">&#x2934;</a>
</p>
</div>

]]></content:encoded>
			<wfw:commentRss>http://toastycode.com/blog/2008/02/05/lcd-scrub/feed/</wfw:commentRss>
		</item>
		<item>
		<title>BONGGGG: Cuckoo 1.2.0 is here.</title>
		<link>http://toastycode.com/blog/2007/12/25/cuckoo-120/</link>
		<comments>http://toastycode.com/blog/2007/12/25/cuckoo-120/#comments</comments>
		<pubDate>Wed, 26 Dec 2007 03:55:45 +0000</pubDate>
		<dc:creator>Daniel Sandler</dc:creator>
		
		<category><![CDATA[Cuckoo]]></category>

		<category><![CDATA[Software Releases]]></category>

		<guid isPermaLink="false">http://toastycode.com/blog/2007/12/25/cuckoo-120/</guid>
		<description><![CDATA[

Early yesterday morning I made the final build of Cuckoo 1.2.0 available for download.
It wasn&#8217;t finished quite as early as I had hoped, but still in time for Christmas (and any other contemporaneous Yuletide celebration).


Fig. 1.&#160; Screenshot: the Cuckoo 1.2 preference panel. (Click for detail.)

The new version includes the usual heap of bug fixes and [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="/cuckoo"><img src="/cuckoo/images/icon-64.png" border="0" title="Cuckoo: configurable clock chimes for your Mac." class="insetright" /></a>
Early yesterday morning I made the final build of <a href="/cuckoo">Cuckoo 1.2.0</a> available for download.
It wasn&#8217;t finished quite as <a href="http://toastycode.com/blog/2007/12/21/happy-holidays/">early</a> as I had hoped, but still in time for Christmas (and any other contemporaneous Yuletide celebration).
</p>
<p align="center"><div style="overflow: hidden; text-align: center; margin: 0 auto;"><a href="/cuckoo/images/cuckoo-120-dissected.png"><img         border="0"        title="Screenshot clipping: Cuckoo 1.2 dissected."        src="/cuckoo/images/cuckoo-120-dissected-crop.png" /></a></div>
<div style="text-align: center;"><small><b>Fig. 1.&nbsp;</b> Screenshot: the Cuckoo 1.2 preference panel. (Click for detail.)</small></div>
</p>
<p>The new version includes the usual heap of bug fixes and unremarkable tweaks, and adds the following nifty new features:</p>
<ul>
		<li>For registered users: Cuckoo can now optionally <strong>toll the hour</strong> (that is, play the sound
			five times at 5:00) at the top of the hour.  This is one of the most often requested Cuckoo features, the other being different sounds at different times.<sup><a  href="#cuckoo120_foot1">1</a></sup></li>
		<li>Includes a new <strong>clock-tower sound</strong> called &ldquo;Campanile&rdquo;—quite effective when tolling the hour as described above.  <em>BONGGGGG.</em> (Because it&#8217;s built in to Cuckoo, this sound is available in Cuckoo&#8217;s free mode.)</li>
		<li>Finally, the <em>de rigeur</em> background checking for <strong>software updates.</strong> If the appropriate box is checked, Cuckoo will check the toastycode website every few
			days for new releases.  If an update is available, the Cuckoo
			preference pane will open automatically and you&rsquo;ll be given
			the opportunity to download the new version—or ignore or defer it. Cuckoo won&#8217;t make any changes to your system (you&#8217;ll have to double-click the new version to install it) and no personally-identifying information is be sent in the update query. <sup><a  href="#cuckoo120_foot2">2</a></sup>
</li>
	</ul>

<p>Please download the new version, and then consider stopping by <a href="http://osx.iusethis.com/app/cuckoo">iUseThis</a> to vote for Cuckoo.  Happy holidays!</p>
<div class="footnotes">
<p><a class="footlabel" name="cuckoo120_foot1">1</a>I&#8217;ve been slow to add these two features because of the impact they&#8217;ll have on Cuckoo&#8217;s straightforward user interface. What you see in 1.2.0 is sort of a stop-gap solution; I&#8217;m not entirely happy with it, but it accomplishes the bare minimum to allow tolling the hour, and I wanted to get the functionality out there for everyone to use.</p>
<p><a class="footlabel" name="cuckoo120_foot2">2</a>(Other independent Mac developers may wonder why I&#8217;m not using the excellent <a href="http://sparkle.andymatuschak.org/">Sparkle framework</a> by Andy Matuschak; in this case, I wanted something a little lighter weight that, uh, works with preference panes.)</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://toastycode.com/blog/2007/12/25/cuckoo-120/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Happy holidays.</title>
		<link>http://toastycode.com/blog/2007/12/21/happy-holidays/</link>
		<comments>http://toastycode.com/blog/2007/12/21/happy-holidays/#comments</comments>
		<pubDate>Fri, 21 Dec 2007 21:17:31 +0000</pubDate>
		<dc:creator>Daniel Sandler</dc:creator>
		
		<category><![CDATA[Cuckoo]]></category>

		<category><![CDATA[Orthogonal]]></category>

		<guid isPermaLink="false">http://toastycode.com/blog/2007/12/21/happy-holidays/</guid>
		<description><![CDATA[

I hope December finds you well and with family or friends. I was hoping to have Cuckoo 1.2 ready for you by now, but time seems to have gotten away from me.


While you&#8217;re waiting, here&#8217;s a little treat: an audio clip of sleigh bells you can use with Cuckoo for a little bit of holiday [...]]]></description>
			<content:encoded><![CDATA[<p align="center"><img src="http://toastycode.com/cuckoo/images/xmas-cuckoo-200.png" title="Cuckoo, all dressed up for the holidays." />
<p>
I hope December finds you well and with family or friends. I was hoping to have <a href="/cuckoo">Cuckoo</a> 1.2 ready for you by now, but time seems to have gotten away from me.
</p>
<p>
While you&#8217;re waiting, here&#8217;s a little treat: an audio clip of sleigh bells you can use with Cuckoo for a little bit of holiday cheer on the hour (or, you know, whenever).  Download it below, double-click the .zip to expand, and then place the mp3 in your Library/Sounds folder.
</p>
<p align="center">
<a href="/files/CuckooSleighBells.zip"><div style="text-decoration:none;"><img border="0" src="http://toastycode.com/cuckoo/images/xmas-bird-icon.png" alt="Cuckoo Sleigh Bells icon" /></div>
<div style="font-family: Lucida Grande; font-weight:bold;">CuckooSleighBells.zip</div></a>
</p>
<p>
Happy holidays, and I&#8217;ll see you in 2008.
</p>]]></content:encoded>
			<wfw:commentRss>http://toastycode.com/blog/2007/12/21/happy-holidays/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ordering System Preferences around.</title>
		<link>http://toastycode.com/blog/2007/12/12/ordering-system-preferences-around/</link>
		<comments>http://toastycode.com/blog/2007/12/12/ordering-system-preferences-around/#comments</comments>
		<pubDate>Wed, 12 Dec 2007 05:28:36 +0000</pubDate>
		<dc:creator>Daniel Sandler</dc:creator>
		
		<category><![CDATA[Code Journal]]></category>

		<category><![CDATA[Cuckoo]]></category>

		<guid isPermaLink="false">http://toastycode.com/blog/2007/12/12/ordering-system-preferences-around/</guid>
		<description><![CDATA[
Just a quick note: the following very useful tidbit was added to System Preferences&#8217; AppleScript dictionary in Leopard.

tell application &#34;System Preferences&#34;
    activate
    reveal pane id &#34;com.toastycode.Cuckoo&#34;
end tell


That is, you can use reveal pane localizedName or reveal pane id bundleId to tell SysPrefs to switch to a given prefPane.  [...]]]></description>
			<content:encoded><![CDATA[<p>
Just a quick note: the following very useful tidbit was added to System Preferences&#8217; AppleScript dictionary in Leopard.</p>
<pre>
<b>tell application</b> &quot;System Preferences&quot;
    activate
    <span style="background-color:yellow;">reveal pane id &quot;com.toastycode.Cuckoo&quot;</span>
<b>end tell</b>
</pre>
<p>
That is, you can use <code>reveal pane <i>localizedName</i></code> or <code>reveal pane id <i>bundleId</i></code> to tell SysPrefs to switch to a given <code>prefPane</code>.  This is an improvement on <code>reveal</code> in earlier versions of the OS, which only supported the <code>reveal anchor <i>someTabName</i> in pane <i>name</i></code> phrasing, which doesn&#8217;t fly if your preference pane doesn&#8217;t have tabs.  (As noted <a href="http://macscripter.net/articles/468_0_10_29_C/">here</a>, you can use the pseudo-anchor <code>main</code> on Apple&#8217;s tabless prefPanes, but I couldn&#8217;t find any kind of documentation on how to add &#8220;main&#8221; to my own prefPane.)
</p>
<p>If you try the 10.5-style <code>reveal pane</code> syntax on Tiger and earlier, you&#8217;ll be rewarded with a less-than-elucidating <code>NSReceiversCantHandleCommandScriptError</code>.  (Try saying that three times fast. Or, uh, once.)</p>
<p>The following AppleScript will work on all releases of Mac OS X, however:</p>
<pre>
<b>tell application</b> &quot;System Preferences&quot;
    activate
    <i>-<tt></tt>- works in 10.4 and 10.5</i>
    <span style="background-color:yellow;"><b>set</b> current pane <b>to</b> pane id &quot;com.toastycode.Cuckoo&quot;</span>
<b>end tell</b>
</pre>
<p>
Just thought I&#8217;d share in case there&#8217;s some other poor soul out there trying to launch a specific preference panel from AppleScript or Cocoa.
</p>]]></content:encoded>
			<wfw:commentRss>http://toastycode.com/blog/2007/12/12/ordering-system-preferences-around/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Cuckoo revved for Leopard.</title>
		<link>http://toastycode.com/blog/2007/11/04/cuckoo-revved-for-leopard/</link>
		<comments>http://toastycode.com/blog/2007/11/04/cuckoo-revved-for-leopard/#comments</comments>
		<pubDate>Sun, 04 Nov 2007 22:32:41 +0000</pubDate>
		<dc:creator>Daniel Sandler</dc:creator>
		
		<category><![CDATA[Cuckoo]]></category>

		<category><![CDATA[Software Releases]]></category>

		<guid isPermaLink="false">http://toastycode.com/blog/2007/11/04/cuckoo-revved-for-leopard/</guid>
		<description><![CDATA[
Cuckoo was bumped up to version 1.1.2 today, fixing a longstanding (albeit minor) problem: the Cuckoo preference pane would reset your sound to &#8220;Pure Cuckoo&#8221; every time you opened it up.  (The problem only affected unregistered users.)

There&#8217;s another minor fix for Mac OS X 10.5 users, and it has to do with one of [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="/cuckoo">Cuckoo</a> was bumped up to version 1.1.2 today, fixing a longstanding (albeit minor) problem: the Cuckoo preference pane would reset your sound to &#8220;Pure Cuckoo&#8221; every time you opened it up.  (The problem only affected unregistered users.)</p>
<p>
There&#8217;s another minor fix for Mac OS X 10.5 users, and it has to do with one of the new security features in the OS.  Read on for the details.
</p>
<span id="more-14"></span>
<p>
In Leopard, when you download software from the Internet using Safari, an <a href="http://arstechnica.com/reviews/os/mac-os-x-10-5.ars/11">invisible &#8220;quarantine&#8221; label</a> is applied to the file.  Then, when you (or any other entity, including automated tasks and login items) launch the application for the first time, the Finder notices the quarantine and first asks the user if the application is OK to launch.
</p>
<p>
While this feature has proved somewhat annoying for advanced Mac users (who have already invented ways to <a href="http://henrik.nyh.se/2007/10/lift-the-leopard-download-quarantine">disable it</a>), everyday users ought to appreciate the fact that the new Finder is looking out for them.
</p>
<p>
For preference panes, the process is a little bit different.  When you double-click on a <tt>.prefPane</tt> file (like <tt>Cuckoo.prefPane</tt>) to install it, Mac OS X has always presented a dialog to confirm the operation.  In Leopard this process is unchanged (and, in fact, doesn&#8217;t mention the quarantine at all, which may very well be a bug).  In the case of Cuckoo, the prefPane is installed and the CuckooChimeAgent—the background application that takes care of chiming at exactly the right moment—is automatically launched.
</P>
<p>
The trouble comes when you reboot and see this dialog:
</p>
<p align="center">
<a href="http://dsandler.org/entries/images/2007/leopard-chime-agent.png"><img src="http://dsandler.org/entries/images/2007/leopard-chime-agent-sm.png"
alt="Leopard dialog: '&ldquo;CuckooChimeAgent.app&rdquo; is an application which was downloaded from the internet. Are you sure you want to open it?'"
></a>
</p>
<p>
The prefPane installation process appears not to lift the quarantine on downloaded items (another small Leopard bug), and (as stated earlier) Login Items are subject to quarantine. So the user is presented with this perplexing dialog the first time she reboots 10.5 after installing (or updating) Cuckoo.
</p>
<p>
The <a href="/cuckoo">latest version</a> includes code to explicitly remove the quarantine label from CuckooChimeAgent once you&#8217;ve already approved the installation of Cuckoo itself.  Future bug fixes to Leopard may make this unnecessary, but for the time being, it should save some extra clicking (and possibly some extra confusion, especially if you don&#8217;t reboot very often, in which case this dialog—appearing a long time after you&#8217;ve installed Cuckoo—will be very puzzling indeed).
</p>]]></content:encoded>
			<wfw:commentRss>http://toastycode.com/blog/2007/11/04/cuckoo-revved-for-leopard/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Leopard-compatible.</title>
		<link>http://toastycode.com/blog/2007/10/29/leopard-compatible/</link>
		<comments>http://toastycode.com/blog/2007/10/29/leopard-compatible/#comments</comments>
		<pubDate>Mon, 29 Oct 2007 21:54:44 +0000</pubDate>
		<dc:creator>Daniel Sandler</dc:creator>
		
		<category><![CDATA[Code Journal]]></category>

		<category><![CDATA[Cuckoo]]></category>

		<guid isPermaLink="false">http://toastycode.com/blog/2007/10/29/leopard-compatible/</guid>
		<description><![CDATA[
I got my hands on a Leopard machine today to verify that all toastycode screen savers and tools work perfectly in Leopard, a.k.a. Mac OS X 10.5. (And they do.) Feel free to upgrade, toasty users!


My only gripe: Why does the new Finder take Cuckoo&#8217;s pretty birdhouse icon and cram it into a tiny little [...]]]></description>
			<content:encoded><![CDATA[<p>
I got my hands on a Leopard machine today to verify that all toastycode <a href="/pyrotheque">screen savers</a> and <a href="/cuckoo">tools</a> work perfectly in Leopard, a.k.a. Mac OS X 10.5. (And they do.) Feel free to upgrade, toasty users!
</p>
<p>
My only gripe: Why does the new Finder take Cuckoo&#8217;s pretty birdhouse icon and cram it into a tiny little badge stamped on a generic &#8220;PREF&#8221; document?  You can barely see it, even at 128&times;128 pixels (see below). For shame.
</p>
<p align="center">
<img src="http://dsandler.org/entries/images/2007/cuckoo-leopard-icon.png" />
<div style="text-align: center; margin-top: 0.5em; font-size: 90%;"><b>Fig. 1.</b> &nbsp; Hey, I worked hard on that icon&hellip;</div>
</p>]]></content:encoded>
			<wfw:commentRss>http://toastycode.com/blog/2007/10/29/leopard-compatible/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Excellent screensaver.</title>
		<link>http://toastycode.com/blog/2007/10/11/excellent-screensaver/</link>
		<comments>http://toastycode.com/blog/2007/10/11/excellent-screensaver/#comments</comments>
		<pubDate>Thu, 11 Oct 2007 18:35:41 +0000</pubDate>
		<dc:creator>Daniel Sandler</dc:creator>
		
		<category><![CDATA[Orthogonal]]></category>

		<category><![CDATA[Pyrotheque]]></category>

		<guid isPermaLink="false">http://toastycode.com/blog/2007/10/11/excellent-screensaver/</guid>
		<description><![CDATA[
Today&#8217;s Toothpaste for Dinner (an exquisitely lo-fi webcomic by one Mister Drew) seemed appropriate to include here:





We can only hope he was referring to Pyroth&#232;que.
]]></description>
			<content:encoded><![CDATA[<p>
Today&#8217;s <a href="http://www.toothpastefordinner.com/">Toothpaste for Dinner</a> (an exquisitely lo-fi webcomic by one Mister <a href="http://en.wikipedia.org/wiki/Drew_%28webcomic_artist%29">Drew</a>) seemed appropriate to include here:
</p>
<p align="center">
<a href="http://toothpastefordinner.com/"><img 
title="i've fixed a lot of 
computers in my day, 
and i have to say 
that yours has an 
excellent screensaver"
src="http://toothpastefordinner.com/101107/excellent-screensaver.gif" 
width="272" height="353"
border=0></a>
</p>
<p>
We can only hope he was referring to <a href="http://toastycode.com/pyrotheque/">Pyroth&egrave;que</a>.
</p>]]></content:encoded>
			<wfw:commentRss>http://toastycode.com/blog/2007/10/11/excellent-screensaver/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Login items, continued</title>
		<link>http://toastycode.com/blog/2007/10/03/login-items-continued/</link>
		<comments>http://toastycode.com/blog/2007/10/03/login-items-continued/#comments</comments>
		<pubDate>Wed, 03 Oct 2007 17:54:38 +0000</pubDate>
		<dc:creator>Daniel Sandler</dc:creator>
		
		<category><![CDATA[Code Journal]]></category>

		<guid isPermaLink="false">http://toastycode.com/blog/2007/10/03/login-items-continued/</guid>
		<description><![CDATA[
Following up on my loginitem script, Nick writes:


I was wondering if this script could be modified to remove all login items from all users and not just the currently logged in one?  We have about 30 computers with at least 6 users each that we need to remove all the login items from.

Think it [...]]]></description>
			<content:encoded><![CDATA[<p>
Following up on my <a href="http://toastycode.com/blog/2007/07/25/loginitem/">loginitem script</a>, Nick writes:
</p>
<blockquote>
I was wondering if this script could be modified to remove all login items from all users and not just the currently logged in one?  We have about 30 computers with at least 6 users each that we need to remove all the login items from.

Think it would be possible?
</blockquote>
<p>
It turns out that because <tt>loginitem</tt> uses AppleScript to ask <tt>System Events.app</tt> to do the work, it&#8217;s fundamentally limited to operating on the current user&#8217;s login items.  We&#8217;ll need some other way of manipulating those settings.  Fortunately, this particular problem (deleting all login items) has a convenient solution.
</p>
<P>Referring back to <a href="http://developer.apple.com/documentation/MacOSX/Conceptual/BPSystemStartup/Articles/CustomLogin.html#//apple_ref/doc/uid/20002134-SW2">Apple&#8217;s documentation</a>, we see that a user&#8217;s login items are stored in <tt>~/Library/Preferences/loginitem.plist</tt>.  For a single user, it&#8217;s sufficient to delete the <b>AutoLaunchedApplicationDictionary</b> key and log out and in again, but we&#8217;re trying to automate this process across a number of users.
</p>
<p>
Here, finally, is the recipe:
</p>
<ol>
<li>Create a &#8220;pristine&#8221; version of <tt>loginitem.plist</tt>, with no login items in it.  You might do this by opening <tt>~/Library/Preferences/loginitem.plist</tt> in Property List Editor and deleting the <b>AutoLaunchedApplicationDictionary</b> key, or by running the command:
<pre>defaults delete loginwindow &#x5c;
     AutoLaunchedApplicationDictionary</pre>
</li>
<li>Stash that file somewhere:
<pre>cp ~/Library/Preferences/loginitem.plist /tmp/</pre></li>
<li>Run:<pre>for aHome in /Users/*; do
  sudo cp /tmp/loginitem.plist &#x5c;
    $aHome/Library/Preferences/
done</pre></li>
</ol>
<p>
[Theoretically it should suffice to simply <em>delete</em> the <tt>loginitem.plist</tt> file, since the remaining values in that file (BuildVersionStampAsNumber, etc.) seem like the sort of things that the system could re-create for you. I don't know if it does, though, so the safest bet is to preserve them.]
</p>
<p>
<b>Exercise:</b> Convert your pristine <tt>loginitem.plist</tt> to text (either with <tt>defaults read</tt> or <tt>plutil</tt>); embed in a script; ssh in parallel to all the Macs in your lab, downloading and running the script on each.
</p>]]></content:encoded>
			<wfw:commentRss>http://toastycode.com/blog/2007/10/03/login-items-continued/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
