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

<channel>
	<title>Paper Jammed</title>
	<atom:link href="http://paperjammed.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://paperjammed.com</link>
	<description>Has paper taken over your life?</description>
	<lastBuildDate>Wed, 04 Apr 2012 00:42:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>What I learned today: You can&#8217;t tell how old a file is in Linux</title>
		<link>http://paperjammed.com/2012/04/03/what-i-learned-today-you-cant-tell-how-old-a-file-is-in-linux/</link>
		<comments>http://paperjammed.com/2012/04/03/what-i-learned-today-you-cant-tell-how-old-a-file-is-in-linux/#comments</comments>
		<pubDate>Wed, 04 Apr 2012 00:42:56 +0000</pubDate>
		<dc:creator>Tad</dc:creator>
				<category><![CDATA[Geekery]]></category>
		<category><![CDATA[Workflow]]></category>
		<category><![CDATA[Files and Folders]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Macintosh]]></category>

		<guid isPermaLink="false">http://paperjammed.com/?p=1225</guid>
		<description><![CDATA[I&#8217;m certain that there are all kinds of filesystems in the Linux world that support file creation dates, but the plain fact of the matter is if you perform a vanilla Ubuntu installation, your files will remain ageless. Why should I care? In a word, Photographs. I keep everything I own on network attached storage [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-medium wp-image-1233" title="Digital Image by Sean Locke Digital Planet Design www.digitalplanetdesign.com" src="http://paperjammed.com/wp-content/uploads/2012/04/iStock_000005643790XSmall-200x300.jpg" alt="" width="200" height="300" />I&#8217;m certain that there are all kinds of filesystems in the Linux world that support file creation dates, but the plain fact of the matter is if you perform a vanilla Ubuntu installation, your files will remain ageless.</p>
<p>Why should I care? In a word, Photographs. I keep everything I own on network attached storage devices that are formatted with popular Linux or Unix file systems that lack this information. When I move files between my Mac and one of these devices, the file creation time just doesn&#8217;t survive the trip.</p>
<p>I like to have the file creation timestamp match the EXIF time that the photo was taken—normally not a problem since the camera sets the EXIF time and file creation time at the same moment. Keeping the creation timestamp in sync with the EXIF timestamp makes it a snap to sort image files by chronological order.<span id="more-1225"></span></p>
<p>In cases where the times are off, I use a handy-dandy tool called <a href="http://www.publicspace.net/ABetterFinderAttributes/">A Better Finder Attributes</a> to copy the EXIF time to the file creation time.</p>
<p>On Mac OS X, you can easily view the file creation time as well as the file modification time, by adding the appropriate column to the Finder window:</p>
<p><img class="alignnone size-full wp-image-1227" title="20120403-created-date" src="http://paperjammed.com/wp-content/uploads/2012/04/20120403-created-date1.jpg" alt="" width="481" height="183" /></p>
<p>So my assumption has always been that every file always has these two attributes, <strong>creation date</strong> and <strong>modified date</strong>, and that this data simply goes along for the ride whenever files are copied anywhere. Clearly that is a naive and simplistic view, and a moment&#8217;s thought made me realize that this information is metadata, not stored within the file, so it wouldn&#8217;t make sense for these timestamps to survive something as simple as traveling as an attachment to an email.</p>
<p>I was happily copying files between my local machine and a server using <a href="http://www.binarynights.com/">Forklift</a>, and I was puzzled by the appearance of many &#8220;created date&#8221; values from 1969. Had the timestamp been 1970, I would have immediately figured that it was a Unix issue (the beginning of <a href="http://en.wikipedia.org/wiki/Unix_time">the Epoch</a>), but the Year of Apollo 11 threw me off.</p>
<p>A few Google searches <a href="http://stackoverflow.com/questions/5929419/how-to-get-file-creation-date-in-linux">revealed</a> <a href="http://brainstorm.ubuntu.com/idea/8763">the</a> <a href="http://stackoverflow.com/questions/4710753/rename-files-according-to-date-created">truth</a> <a href="http://www.linuxquestions.org/questions/general-10/file-creation-date-in-linux-473684/">to</a> <a href="http://nixcraft.com/centos-rhel-fedora/13883-wondering-about-file-creation-date-time.html">me</a>.</p>
<p>A quote from one of those pages:</p>
<blockquote><p>Unix/Linux does not store file creation date and time as it stores modification/access/change date and time.</p></blockquote>
<p>Here&#8217;s another quote:</p>
<blockquote><p>Only FreeBSD and the UFS2 filesystem support file creation times (that they call &#8220;birth time&#8221;).</p></blockquote>
<p>Is it a problem for me? Not really. But it&#8217;s nice to understand limitations like this when you are messing around with multiple machines in your workflow.</p>
<p><img class="alignnone size-full wp-image-1228" title="20120403-droplet" src="http://paperjammed.com/wp-content/uploads/2012/04/20120403-droplet.jpg" alt="" width="439" height="255" /></p>
<p>The practical impact of this is that I now have to copy the EXIF timestamps to the creation date and then copy the creation date to the modified date. I do this with two droplets I created with A Better Finder Attributes. Maybe the ABFA developer will tweak the tool a little bit to allow copying EXIF to created and modified in one operation. It can&#8217;t hurt to ask.</p>
<p>Oh, and why do I end up with the out-of-sync dates in the first place? Blame it on <strong>Aperture</strong>. After I edit photos and add captions and all kinds of nice stuff, I export the finished versions.  The export operation does not provide a <em>keep the original timestamps</em> option—Aperture simply creates new files for you with fresh new timestamps. I somehow doubt Apple will listen to my opinions on this front, so I will deal with the timestamps myself.</p>
]]></content:encoded>
			<wfw:commentRss>http://paperjammed.com/2012/04/03/what-i-learned-today-you-cant-tell-how-old-a-file-is-in-linux/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Happiness is a new Linux machine!</title>
		<link>http://paperjammed.com/2012/03/29/happiness-is-a-new-linux-machine/</link>
		<comments>http://paperjammed.com/2012/03/29/happiness-is-a-new-linux-machine/#comments</comments>
		<pubDate>Fri, 30 Mar 2012 03:38:02 +0000</pubDate>
		<dc:creator>Tad</dc:creator>
				<category><![CDATA[Geekery]]></category>
		<category><![CDATA[Geeky]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Media]]></category>
		<category><![CDATA[Music]]></category>
		<category><![CDATA[Photos]]></category>

		<guid isPermaLink="false">http://paperjammed.com/?p=1213</guid>
		<description><![CDATA[In my last post I was lamenting the premature demise of my old Squeezebox server, caused by a nasty plague that afflicts tech gear: burst capacitors. After a long search, sifting through eBay listings, reading the fine details of each offering, comparing options, I was able to find a nice newish Shuttle server, sporting good [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://paperjammed.com/wp-content/uploads/2012/03/iStock_000012973800XSmall.jpg"><img class="size-medium wp-image-1214 alignright" title="iStock_000012973800XSmall" src="http://paperjammed.com/wp-content/uploads/2012/03/iStock_000012973800XSmall-300x225.jpg" alt="iStockphoto" width="300" height="225" /></a></p>
<p>In my last post I was lamenting the premature demise of my old Squeezebox server, caused by a nasty plague that afflicts tech gear: burst capacitors.</p>
<p>After a long search, sifting through eBay listings, reading the fine details of each offering, comparing options, I was able to find a nice newish Shuttle server, sporting good drives, far better cooling than my older one, much more memory, much better processing power, and a snazzy paint job applied by the former owner.</p>
<p><span id="more-1213"></span>It was barely out of the box when I was off on my Mac burning a CD for Ubuntu Lucid Lynx 10.04 LTS. The Ubuntu install went flawlessly—I set it up with a standard LAMP stack. By the evening I had installed the latest version of Squeezebox Server (now called Logitech Media Server) and was serving up tunes to the local Squeezeboxes.</p>
<p><strong>A Fresh Start</strong></p>
<p>Now I am looking into what kinds of neat stuff to do with this device. If any of these turns out to be particularly compelling, I will eventually write them up here.</p>
<ul>
<li>I am playing around with photo gallery servers for photos within the house, so all of our family members can see our photos in the house without the need to put them on an Internet gallery.</li>
<li>The Squeezebox playlist sync tool is limping along, but it needs work.</li>
<li>I already put CVS on the box, to hold any ongoing project work.</li>
<li>The wiki (MoinMoin) that I use to keep track of technical meanderings is already installed.</li>
</ul>
<p>But the box is going to get lonely pretty soon if I don&#8217;t figure out some exciting things to do with it. Setting it up as a media server sounds fun, but I would probably have to trade my Apple TV for a Roku if I went the <a href="http://plexapp.com/">Plex</a> route for serving media on Linux.</p>
<p>I&#8217;m also looking to see if I can automate some of my photography workflow tasks, getting photos moved to the right place for backups to happen and the right place for the gallery software to pick them up. That kind of work isn&#8217;t as exciting, but is still needed.</p>
<p>By the way, the capacitors are Shuttle&#8217;s new solid cans that don&#8217;t burst. Nice!</p>
<p><img class="alignnone size-full wp-image-1215" title="20120329-shuttle" src="http://paperjammed.com/wp-content/uploads/2012/03/20120329-shuttle.jpg" alt="" width="550" height="413" /></p>
]]></content:encoded>
			<wfw:commentRss>http://paperjammed.com/2012/03/29/happiness-is-a-new-linux-machine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>May my Squeezebox Server rest in peace</title>
		<link>http://paperjammed.com/2012/02/26/may-my-squeezebox-server-rest-in-peace/</link>
		<comments>http://paperjammed.com/2012/02/26/may-my-squeezebox-server-rest-in-peace/#comments</comments>
		<pubDate>Mon, 27 Feb 2012 02:38:29 +0000</pubDate>
		<dc:creator>Tad</dc:creator>
				<category><![CDATA[Geekery]]></category>
		<category><![CDATA[AppleScript]]></category>
		<category><![CDATA[Backups]]></category>
		<category><![CDATA[Data Loss]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://paperjammed.com/?p=1199</guid>
		<description><![CDATA[If you find yourself dealing with wonky hardware problems, such as a PC that doesn’t boot or frequent BSOD when watching video, pop open the case and give the caps a gander. You might save yourself hours of troubleshooting effort.]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-medium wp-image-1200" title="iStock_000015560203XSmall" src="http://paperjammed.com/wp-content/uploads/2012/02/iStock_000015560203XSmall-300x268.jpg" alt="" width="300" height="268" /></p>
<p>It has been quite a long time since I have posted anything here—the spam bucket was choked with well over a hundred pages of who-knows-what when I first came back.</p>
<p>One thing I did notice was that several folks have taken advantage of the <a href="http://paperjammed.com/2011/03/01/export-itunes-playlists-to-a-non-itunes-world/">iTunes-to-Playlist script</a> that I put together last year, and that&#8217;s always encouraging. I haven&#8217;t really done any work on tweaking or refining the script because there was a small bit of a problem in the homestead: my happy little Shuttle server died an untimely death.</p>
<p>I bought it off of eBay brand new for a little over a hundred bucks last February and was quite pleased with my purchase. It was a <strong>Shuttle K45</strong>, a pretty old platform with a lightweight processor, but more than enough horsepower to be a home Squeezebox server as well as a Wiki server and a CVS server.</p>
<p>But it was too good to be true. After I had settled in and set up my workflow around my silent little Shuttle box, it simply died one day. I pressed the power button to restart it and was greeted with a blinking light that was anything but encouraging—the server was dead. An autopsy revealed the probable cause of death to be bad capacitors.</p>
<p>If you find yourself dealing with wonky hardware problems, such as a PC that doesn&#8217;t boot or frequent BSOD when watching video, pop open the case and give the caps a gander. You might save yourself hours of troubleshooting effort. See below for details&#8230;<span id="more-1199"></span></p>
<p><strong>Shuttle K45 = Bad Caps</strong></p>
<p>I now know why I occasionally find new-in-box K45s on eBay: there was a bad production run of them.</p>
<p>Just do a quick search for &#8220;Shuttle K45 bad capacitors&#8221; and you will find plenty of complaints. Here is a <a href="http://www.tomshardware.com/forum/264822-30-warning-shuttle-product">good example</a> of a post about the problem from Tom&#8217;s Hardware.</p>
<p><strong>Here&#8217;s the Problem</strong></p>
<p><img class="size-full wp-image-1201 alignnone" title="R0010534-edited" src="http://paperjammed.com/wp-content/uploads/2012/02/R0010534-edited.jpg" alt="Bad Capacitors" width="550" height="413" /></p>
<p>This is how the motherboard looked. That bit of brown goop that is oozing out of the top of the capacitor on the left is a sure sign of death. You might note that the one on the far right seems to be bulging a bit at the top as well, ready to blow. In fact, that&#8217;s why the manufacturer put the little cross hatch in the top of the aluminum can: it&#8217;s a sort of safety release when pressure gets to great within.</p>
<p>I checked all of them, and there were a half dozen of them that were oozing brown stuff.</p>
<p><strong>Not the first time</strong></p>
<p>As I had alluded to at the start, I have seen this behavior before: I once wasted many hours of my time trying to track down the demons that were causing random blue screens on my old Windows Media Server box.</p>
<p>I had re-imaged the machine twice with the factory disks and had even gone so far as to run a live CD version of Linux in order to eliminate Windows and the hard drive from the equation. Indeed, watching video in Ubuntu caused similar hard crashes, so it was clear that I had a hardware problem.</p>
<p>I had a distant memory of having read some article talking about bulging electrolytic capacitors, so on a hunch I popped off the cover and looked at the video card. Sure enough, the caps on that old ATI card had little brown dots in their crowns. That episode ended fairly well: I bought a new video card and that particular machine returned to service for several more years.</p>
<p><strong>A Heroic Repair Attempt</strong></p>
<p>I really did like my little Shuttle server and hated to see it go, so I immediately began looking in to how I might bring it back to life. I have wielded a soldering iron before and so I decided to roll up my sleeves and fix it myself.</p>
<p>I didn&#8217;t find the right capacitor sizes at Radio Shack—it&#8217;s sad to see that their selection has diminished greatly from my childhood memories of going to buy parts for radio kits with my dad.</p>
<p>I ended up going to an outfit called <a href="http://www.badcaps.net">Badcaps.net</a> that sells prepackaged kits for the usual suspects, and they do indeed sell a <a href="http://www.badcaps.net/store/product_info.php?cPath=1_6&amp;products_id=121">Shuttle K45 18pc Capacitor Kit</a> for $17 and shipping.</p>
<p>Here they are, fresh out of the plastic baggie:</p>
<p><img class="size-full wp-image-1202 alignnone" title="R0010536-edited" src="http://paperjammed.com/wp-content/uploads/2012/02/R0010536-edited.jpg" alt="" width="550" height="413" /></p>
<p>My soldering exercise took about two hours, after which I understood the following statements to be true:</p>
<ul>
<li>Desoldering is much more annoying than soldering.</li>
<li>Those solder sucker tools just don&#8217;t work. Maybe I needed to use that desoldering braid.</li>
<li>The motherboard of a K45 is a sweet pain in the backside to extract from the case.</li>
<li>The server was just as dead after my efforts as it was before.</li>
</ul>
<p>I decided that I had already invested too much time and effort into this exercise and threw in the towel. I lost no data in the process—it was all backed up elsewhere. Life is good!</p>
<p>Last week I set up a new server on an aging Dell PC, but I&#8217;m on the hunt for a new server.</p>
]]></content:encoded>
			<wfw:commentRss>http://paperjammed.com/2012/02/26/may-my-squeezebox-server-rest-in-peace/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>A slick fix for an annoying problem with my Traveler Guitar</title>
		<link>http://paperjammed.com/2011/04/26/a-slick-fix-for-an-annoying-problem-with-my-traveler-guitar/</link>
		<comments>http://paperjammed.com/2011/04/26/a-slick-fix-for-an-annoying-problem-with-my-traveler-guitar/#comments</comments>
		<pubDate>Wed, 27 Apr 2011 00:25:59 +0000</pubDate>
		<dc:creator>Tad</dc:creator>
				<category><![CDATA[Randomness]]></category>
		<category><![CDATA[Guitars]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://paperjammed.com/?p=1170</guid>
		<description><![CDATA[Last year I purchased a Traveler Guitar EG-1 in the mahogany finish, and I have enjoyed it tremendously—it&#8217;s great for rockin&#8217; it out in my room at the Marriott while on the road. One tiny issue has marred what I would consider a perfect instrument: the sharp ends of the strings dig into your T-shirt [...]]]></description>
			<content:encoded><![CDATA[<p>Last year I purchased a Traveler Guitar EG-1 in the mahogany finish, and I have enjoyed it tremendously—it&#8217;s great for rockin&#8217; it out in my room at the Marriott while on the road. One tiny issue has marred what I would consider a perfect instrument: the sharp ends of the strings dig into your T-shirt and belly when you are playing.</p>
<p><img class="alignnone size-full wp-image-1171" title="20110426-traveler-guitar1" src="http://paperjammed.com/wp-content/uploads/2011/04/20110426-traveler-guitar1.jpg" alt="" width="550" height="367" /></p>
<p>I decided once and for all to fix this problem, and I hope that other Traveler Guitar owners can use this approach to save themselves from getting jabbed by sharp guitar strings. Read on for my cheap and cheerful solution.<span id="more-1170"></span></p>
<p><strong>The Guitar</strong></p>
<p>It&#8217;s a fun little electric guitar with a full-length scale, built-in amplifier, and headphone jack. The best thing is, it fits in an airplane overhead compartment—I have traveled by air several times with my guitar and nobody has even lifted an eyebrow.</p>
<p>They achieve this diminutive size by removing the head and putting the tuners in the center of the guitar body. You can see the strings starting at the tip of the fingerboard and then wrapping around little pulleys at the base of the instrument.</p>
<p><strong>The Problem</strong></p>
<p><img class="alignnone size-full wp-image-1172" title="20110426-traveler-guitar2" src="http://paperjammed.com/wp-content/uploads/2011/04/20110426-traveler-guitar2.jpg" alt="" width="550" height="367" /></p>
<p>From this view of the back of the guitar, you can see that the tuning machines are flush against your belly when you play the instrument. Unless you have some superior string wrapping technique that does not expose the sharp tip of the string, you will get jabbed as you play. And don&#8217;t think you can arrange things so the pointy bits are all on the inside—as soon as you tune up, the sharp ends will rotate around.</p>
<p><strong>My Simple Fix</strong></p>
<p><img class="alignnone size-full wp-image-1191" title="20110426-traveler-guitar3" src="http://paperjammed.com/wp-content/uploads/2011/04/20110426-traveler-guitar31.jpg" alt="" width="550" height="367" /></p>
<p>Today over lunch I stopped by my local music store and asked the guitar tech if he had some nice looking pick guard material lying around. He found a very attractive piece of laminated tortoise shell plastic which he cut roughly to size for me. He sort of squinted at it and said &#8220;How&#8217;s ten bucks sound?&#8221;, which was fine by me.</p>
<p>Here&#8217;s a <a href="http://paperjammed.com/wp-content/uploads/2011/04/20110426-traveler-guitar-eg1-back-plate.pdf">drawing with measurements</a>.</p>
<p>I used a belt sander and a smooth file to put the finishing touches on the shape, checking squareness with a try square as I worked. I then rounded the corners and put a slight bevel on all edges.</p>
<p>I hit Home Depot and bought some strips of Velcro, which I trimmed to size and attached to the back of the guitar and the new back plate.</p>
<p><strong>The Finished Product</strong></p>
<p><img class="alignnone size-full wp-image-1176" title="20110426-traveler-guitar4" src="http://paperjammed.com/wp-content/uploads/2011/04/20110426-traveler-guitar4.jpg" alt="" width="550" height="367" /></p>
<p>Problem solved!</p>
]]></content:encoded>
			<wfw:commentRss>http://paperjammed.com/2011/04/26/a-slick-fix-for-an-annoying-problem-with-my-traveler-guitar/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Export iTunes Playlists to a non-iTunes World</title>
		<link>http://paperjammed.com/2011/03/01/export-itunes-playlists-to-a-non-itunes-world/</link>
		<comments>http://paperjammed.com/2011/03/01/export-itunes-playlists-to-a-non-itunes-world/#comments</comments>
		<pubDate>Wed, 02 Mar 2011 01:42:50 +0000</pubDate>
		<dc:creator>Tad</dc:creator>
				<category><![CDATA[Geekery]]></category>
		<category><![CDATA[Workflow]]></category>
		<category><![CDATA[Files and Folders]]></category>
		<category><![CDATA[Macintosh]]></category>
		<category><![CDATA[Media]]></category>
		<category><![CDATA[Music]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Scripting]]></category>

		<guid isPermaLink="false">http://paperjammed.com/?p=1148</guid>
		<description><![CDATA[Do you want to automatically publish iTunes playlists to a non-iTunes music library? This free application will convert iTunes playlists to m3u files, transform paths to match your external master library, and then copy the playlists over the network. It will even ping a Squeezebox server to force a playlist refresh.]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-medium wp-image-1165" title="iStock_000000260938XSmall" src="http://paperjammed.com/wp-content/uploads/2011/03/iStock_000000260938XSmall-300x225.jpg" alt="" width="300" height="225" />I freely admit my dislike for iTunes—it&#8217;s a black box where you toss your music, giving full control over your library to Apple.</p>
<p>The problem is that sometimes you might want to manage your library in a way that Apple never intended, and then things become challenging. iPods, iPads, and iPhones pretty much force us to use iTunes, so why not figure out some way to lessen the pain?</p>
<p>I like the playlist tools that iTunes provides, and I find it very convenient to create Smart Playlists or to create Genius lists. However, I want to keep my Master Library of music elsewhere, far from iTunes. Wouldn&#8217;t it be great if I could share these playlists on my home network in a completely nondenominational format? Wouldn&#8217;t it be nice if my Squeezebox server would have those same playlists available? And wouldn&#8217;t it be spectacular if those playlists would magically appear on a network drive whenever the lists change in iTunes?</p>
<p>Read on for details on how I accomplished this and to download the free utility I wrote to handle this task.<span id="more-1148"></span></p>
<p><strong>The Problem To Be Solved</strong></p>
<p>In order to understand what this application does, you need to know what I was trying to accomplish.</p>
<p>I have a NAS drive on my network that contains my Master Library of mp3 files. The files on this drive are located under <strong>/media/music</strong>.</p>
<p>I have a <a href="http://en.wikipedia.org/wiki/Squeezebox_Server">Squeezebox server</a>, running on an Ubuntu machine. This server is used by Squeezebox devices to play music anywhere in my house. It holds a copy of the Master Library, located under <strong>/srv/squeezebox/music</strong></p>
<p>What I want: I want my Mac to magically push <a href="http://en.wikipedia.org/wiki/M3U">proper m3u playlists</a> to the Squeezebox server—the Squeezebox server understands m3u playlists.</p>
<p>What I don&#8217;t want: Squeezebox supports direct access to iTunes. But I don&#8217;t want to do this because I don&#8217;t want to have to run Squeezebox on my Mac. Why did I bother setting up a dedicated <em>server</em> if I have to keep my Mac running?</p>
<p>Why is this challenging: Even if I could point Squeezebox to the bare iTunes database file, all of the file paths are wrong. My master library might have a song at <strong>&#8230;/artist/album_name/disc 1/</strong>, while iTunes might put it at <strong>&#8230;/Artist/Album Name/</strong>, omitting the <strong>disc 1</strong> folder and reformatting names.</p>
<p><strong>My Solution</strong></p>
<p>I wrote a small command line application in Perl that supports the following:</p>
<ul>
<li>Paths to songs in Apple&#8217;s mysterious black box are converted to nice paths to the same songs in my golden Master Library.</li>
<li>Even if a song name changes or a folder path changes, the original master copy is found.</li>
<li>All playlists are generated in m3u format.</li>
<li>Smart playlists and Genius playlists are supported.</li>
<li>The generated playlists are automatically moved to either a local directory or a remote server, using <strong><a href="http://en.wikipedia.org/wiki/Secure_copy">scp</a></strong>.</li>
<li>Network shares are automatically mounted at beginning of process and unmounted at end of process.</li>
<li>You can provide a file path to be prepended to all playlist entries.</li>
<li>Exits early if the iTunes library has not changed since the last run.</li>
<li>Supports exclusion patterns in order to skip some playlists.</li>
<li>A local Squeezebox server can be automatically pinged to cause it to refresh playlists.</li>
</ul>
<p>Here is the <a title="plmapper man page" href="http://paperjammed.com/plmapper.html">full documentation</a> for the Playlist Mapper application.</p>
<p><img class="alignnone size-full wp-image-1157" title="20110301-squeezebox" src="http://paperjammed.com/wp-content/uploads/2011/03/20110301-squeezebox.png" alt="" width="550" height="471" /></p>
<p><strong>Basic Installation</strong></p>
<p>Please note that this is a command line program. Some day I might figure out how to make a pretty GUI installer for it, but for now you have to get your hands a little dirty in order to install and configure.</p>
<p>Download the application here: <a href="http://paperjammed.com/wp-content/uploads/2011/03/plmapper.zip">plmapper</a></p>
<p>This is a Perl script that uses many standard utilities already present in a Snow Leopard OS X installation. You should not need anything other than the <strong>plmapper</strong> file itself.</p>
<p>Unzip the file and place <strong>plmapper</strong> in your home directory.</p>
<p>Open a Terminal window and make the script executable:</p>
<pre>chmod u+x plmapper</pre>
<p>Read the man page for the application by doing this:</p>
<pre>./plmapper --man</pre>
<p>There are many command line arguments, but you don&#8217;t need to worry about most of them. Create a file called <strong>plmapper.config</strong> in your home directory and put any arguments you need in that file, as name-value pairs.</p>
<p>Example:</p>
<pre>itunes=/Users/Bozo/Music/iTunes Music Library.xml
dest=/Users/Bozo/Desktop
library=/Volumes/media/music</pre>
<p>Once you have added all of the configuration settings, go ahead and run it:</p>
<pre>./plmapper</pre>
<p>You should see plenty of status information go by as each playlist is processed.</p>
<p><strong>Making it Run Automatically</strong></p>
<p>There are better ways of doing this, but I&#8217;m a command-line commando, so I simply added the following <strong><a href="http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man8/cron.8.html">cron</a></strong> entry (see <strong><a href="http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/crontab.1.html">crontab</a></strong>):</p>
<pre>0 22 * * * /Users/Me/bin/plmapper &gt;/Users/Me/plmapper.log 2&gt;&amp;1</pre>
<p>This causes the plmapper program to run once daily at 10pm, logging output to a file called <strong>plmapper.log</strong> in my home directory.</p>
<p>Of course, this can be tweaked to taste; it doesn&#8217;t matter if you run it hourly since the app skips any heavy lifting once it sees that the iTunes library file hasn&#8217;t been touched.</p>
<p><strong>How It Works</strong></p>
<p>The application performs the following basic steps:</p>
<ul>
<li>Mounts network shares using <strong><a href="http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man8/mount_smbfs.8.html">mount_smbfs</a></strong>.</li>
<li>All music files in the external non-iTunes Master Library are listed in an internal data structure, sorted by file size.
<p>This allows us to quickly find a &#8220;short list&#8221; of possible candidate files that match a given source file. This works because mp3 files have fairly random sizes.</li>
<li>The iTunes database XML file is processed using an XSLT transformation to generate a set of basic <strong>m3u</strong> playlist files. The <strong><a href="http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/xsltproc.1.html">xsltproc</a></strong> command line utility is used to run the transformation.</li>
<li>All paths in the playlists are converted from escaped URI syntax (e.g. %20 for space) to regular UTF-8 characters.</li>
<li>Each path is resolved to a single music file (i.e. an mp3 file) in the Master Library.
<p>This is done by obtaining the size of the iTunes version of the file and then looking this up in the internal list created in the first step.</li>
<li>Once a short list of candidates is found, the first few thousand bytes of each file are compared until a match is found.The risks of choosing the wrong file are low: all that will happen is that a song might be switched in the playlist accidentally. As such, it isn&#8217;t worth scanning the full file to ensure they are exact matches.This algorithm works quite well, and can detect music files that have been renamed and moved around.</li>
</ul>
<ul>
<li>The playlist files are now converted from <strong>utf8mac</strong> to <strong>utf8</strong> using the <strong><a href="http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/iconv.1.html">iconv</a></strong> command line utility.This process collapses wide UTF-8 characters, consisting of a letter plus an accent add-on, into their single-letter equivalents. This process is known as Unicode Normalization, and this tool uses <strong>Normalization form C</strong>: Compatibility decompisitiion followed by canonical composition.</li>
<li>Playlist files are now copied to a local or remote directory, either as direct file copy or via the <strong><a href="http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/scp.1.html">scp</a></strong> utility.</li>
<li>Optionally, a special call is made to a specified Squeezebox server to tell the server to refresh all playlists.</li>
<li>Any mounted shares that were mounted by this process are unmounted via <strong><a href="http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man8/diskutil.8.html">diskutil</a> unmount</strong>.</li>
</ul>
<p><strong>Limitations</strong></p>
<ul>
<li>Nested folders of playlists currently act funny. The lists will come over, but you may get two lists. You can use the exclude option to prevent this.</li>
<li>Songs with non-ASCII characters in the file name might not be recognized by all players. Squeezebox has a problem with many special characters—I tested this by adding songs like <strong>Águas de Março.mp3</strong> using Squeezebox&#8217;s own playlist editor, and when I reloaded the list the songs were not there. This is a bug in Squeezebox server.</li>
<li>Occasionally the file matching algorithm might pick the wrong song. In an effort to speed up processing, the program only looks at the first few thousand bytes of files when comparing. It isn&#8217;t a big deal if the wrong file is added to a playlist, is it?</li>
<li>You might see a message that says that the network share is already mounted followed by an error that says that the music library path cannot be found. This may be the result of an empty mount-point directory (e.g. <tt>/Volumes/mymusic</tt>) left when the device was last mounted or if mounting failed. It is not uncommon in Unix environments to leave mount points hanging around unmounted, but OS X usually doesn&#8217;t leave them this way—when you unmount a network drive in OS X, the mount point directory disappears. This orphaned mount point directory will cause <strong>plmapper</strong> to think the share is mounted when it isn&#8217;t. Just remove the empty mount point directory.</li>
</ul>
<p><strong>Closing Thoughts</strong></p>
<p>As often happens, this program was written because I had an itch that needed to be scratched. Now that I went through all of the hassles, I hope others can benefit.</p>
<p>Through good fortune, I am working in a Macintosh environment. This means that all of the important tools were already present on my machine: <strong>perl</strong>, <strong>xsltproc</strong>; <strong>mount</strong>; <strong>iconv</strong>; <strong>scp</strong>; <strong>nc</strong>; and others. If I were writing this for a PC, I probably would have written the whole thing in Java—a more familiar language to me, but one that comes with its own configuration issues.</p>
<p>I plan on updating <strong>plmapper</strong> over time, and if anyone has suggestions, please let me know.</p>
<p>And if a Perl guru wants to tell me my Perl skillz are subpar, go right ahead—but be gentle, and let me know how to improve the app.</p>
<p>[Update]</p>
<p>Fixed a couple of bugs related to path and &#8220;qx&#8221; calls, thanks to Chris. Updated version <a href="http://paperjammed.com/wp-content/uploads/2011/03/plmapper.zip">here</a>.</p>
<p>[Update 26-Feb-2012]</p>
<p>It has been quite a long time since I last looked at this. As things turned out, my Squeezebox Server died an untimely death and that sort of put the brakes on my central music library project.</p>
<p>A couple of weeks ago I located a spare PC and set up a new Squeezebox Server, so I&#8217;m back in business.</p>
<p>Some things I have noticed:</p>
<ul>
<li>Squeezebox Server is now called Logitech Media Server. Keep that in mind when you are looking for an installer. I was following instructions on <a href="http://www.havetheknowhow.com/Install-the-software/Install-Squeezebox-server.html">how to install Squeezebox Server on Ubuntu</a> and I had to change the <strong>apt-get</strong> command from <strong>sudo apt-get install squeezeboxserver</strong> to <strong>sudo apt-get install logitechmediaserver</strong></li>
<li>Apparently they have changed from using MySQL to using SQLite. This made the install even easier—there was no need for me to mess around with creation or configuration of the MySQL user or database.</li>
<li>The default server port has changed from 9090 to 9000.</li>
<li>They still haven&#8217;t fixed the bug with international characters in song titles in playlists.</li>
</ul>
<p>That said, the <strong>plmapper</strong> script worked just fine with my new Squeezebox even on Lion. Hope it works for everyone else.</p>
]]></content:encoded>
			<wfw:commentRss>http://paperjammed.com/2011/03/01/export-itunes-playlists-to-a-non-itunes-world/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Another fifty pictures scanned and ten thousand to go&#8230;where did I leave off?</title>
		<link>http://paperjammed.com/2011/02/19/another-fifty-pictures-scanned-and-ten-thousand-to-go-where-did-i-leave-off/</link>
		<comments>http://paperjammed.com/2011/02/19/another-fifty-pictures-scanned-and-ten-thousand-to-go-where-did-i-leave-off/#comments</comments>
		<pubDate>Sun, 20 Feb 2011 04:12:41 +0000</pubDate>
		<dc:creator>Tad</dc:creator>
				<category><![CDATA[Scanning]]></category>
		<category><![CDATA[Workflow]]></category>
		<category><![CDATA[Photos]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://paperjammed.com/?p=1135</guid>
		<description><![CDATA[I have tons of old photos that I am always in the process of scanning in. Some are pictures from childhood, others are from my time in the Navy, and still others are from family life before digital photography (somewhere around the end of 2000 I bought my first digital camera, a Canon G1). I [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-medium wp-image-1136" title="iStock_000003028590XSmall" src="http://paperjammed.com/wp-content/uploads/2011/02/iStock_000003028590XSmall-300x201.jpg" alt="" width="180" height="121" />I have tons of old photos that I am always in the process of scanning in. Some are pictures from childhood, others are from my time in the Navy, and still others are from family life before digital photography (somewhere around the end of 2000 I bought my first digital camera, a Canon G1).</p>
<p>I have been struggling with making everything digital for years now, and there are stacks of photos and thick albums that remain uncharted territory. Every once in awhile I sit down and scan in an album.</p>
<p>Trouble is, unless you do the whole job at once, it&#8217;s pretty easy to lose track of where you have already been. And if that&#8217;s not bad enough, we always bought double prints—they didn&#8217;t cost much more, and we could give some away. Now how do I know if I have scanned the long-lost twins of some photos that are already on my computer? That&#8217;s a problem for another day.</p>
<p>Here&#8217;s how I make sure I don&#8217;t scan the same single photo twice:</p>
<p><img class="size-full wp-image-1137 alignnone" title="20110219-marked-photos" src="http://paperjammed.com/wp-content/uploads/2011/02/20110219-marked-photos.jpg" alt="" width="500" height="375" /></p>
<p>That&#8217;s right, I leave breadcrumbs in the form of little dots on the back of each one.</p>
<p>Such a simple thing, but it saves me from a lot of head scratching and wasted time scanning the same stuff over and over.</p>
]]></content:encoded>
			<wfw:commentRss>http://paperjammed.com/2011/02/19/another-fifty-pictures-scanned-and-ten-thousand-to-go-where-did-i-leave-off/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>A couple of AppleScript droplets to tweak EXIF timestamps</title>
		<link>http://paperjammed.com/2011/02/14/a-couple-of-applescript-droplets-to-tweak-exif-timestamps/</link>
		<comments>http://paperjammed.com/2011/02/14/a-couple-of-applescript-droplets-to-tweak-exif-timestamps/#comments</comments>
		<pubDate>Tue, 15 Feb 2011 04:52:45 +0000</pubDate>
		<dc:creator>Tad</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Workflow]]></category>
		<category><![CDATA[AppleScript]]></category>
		<category><![CDATA[Files and Folders]]></category>
		<category><![CDATA[Geeky]]></category>
		<category><![CDATA[Macintosh]]></category>
		<category><![CDATA[Macros]]></category>
		<category><![CDATA[Photos]]></category>
		<category><![CDATA[Scanning]]></category>
		<category><![CDATA[Scripting]]></category>

		<guid isPermaLink="false">http://paperjammed.com/?p=1114</guid>
		<description><![CDATA[Most of the time I don&#8217;t really bother with the timestamp information that my camera embeds in each digital photo. In fact, I can&#8217;t remember the last time I checked to see if the clock was right. Scanned photographs are an entirely different brew. They typically represent events from the distant past, and scanner software [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-medium wp-image-1116" title="iStock_000010531463XSmall" src="http://paperjammed.com/wp-content/uploads/2011/02/iStock_000010531463XSmall-300x193.jpg" alt="" width="300" height="193" />Most of the time I don&#8217;t really bother with the timestamp information that my camera embeds in each digital photo. In fact, I can&#8217;t remember the last time I checked to see if the clock was right.</p>
<p>Scanned photographs are an entirely different brew. They typically represent events from the distant past, and scanner software EXIF data is hit or miss.</p>
<p>I looked for commercial software to handle a few special cases of EXIF data troubles, but came up empty handed. So I wrote a few useful AppleScript droplets that do these tasks quite nicely, and I will share them here.<span id="more-1114"></span></p>
<p><strong>Warning!</strong></p>
<p>These scripts use <strong>jhead</strong> to manipulate and <em>rewrite</em> your JPEG files!</p>
<p>Don&#8217;t be a fool. Experiment first with a safe set of throwaway JPEGs. And never use these tools on original files; always keep a backup.</p>
<p><strong>Prerequisite</strong></p>
<p>All of these scripts depend on a fine piece of free software called <a href="http://www.sentex.net/~mwandel/jhead/">jhead</a> written by <a href="http://www.sentex.net/~mwandel/index.html">Matthias Wandel</a>.</p>
<p>Installation is not difficult, but it does involve the command line.</p>
<ul>
<li>Go to the <a href="http://www.sentex.net/~mwandel/jhead/">jhead site</a></li>
<li>Scroll down to the <strong>Releases</strong> section and look for <strong>Pre-built OS-X Intel executable</strong></li>
<li>Right click on the <strong>jhead</strong> link on that row and choose <strong>Save Linked File to &#8220;Downloads&#8221;</strong></li>
</ul>
<p>At this point, I found that <strong>jhead</strong> was saved as <strong>jhead.txt</strong>. Oh well. We needed to do some command-line magic anyway.</p>
<ul>
<li>Open a terminal window and enter the following:</li>
</ul>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ <span style="color: #7a0874; font-weight: bold;">cd</span> ~<span style="color: #000000; font-weight: bold;">/</span>Downloads<br />
$ <span style="color: #c20cb9; font-weight: bold;">mv</span> jhead.txt jhead<br />
$ <span style="color: #c20cb9; font-weight: bold;">chmod</span> <span style="color: #000000;">777</span> jhead<br />
$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">mv</span> jhead <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>bin</div></td></tr></tbody></table></div>
<p>These lines do the following:</p>
<ul>
<li>Lines 1 and 2 navigate to the Downloads directory and remove the &#8220;.txt&#8221; from the name</li>
<li>Line 3 makes the file executable by everyone on your Mac</li>
<li>Line 4 places the file in a public area where everyone on your Mac can see it (you will be prompted for your password)</li>
</ul>
<p><strong>Stripping All EXIF Data</strong></p>
<p>Sometimes I receive files that have corrupt EXIF data. I had a large quantity of scanned files in my collection that claimed to be scanned some time in 2038, while others insisted that they had been around since 1901. Neither situation is good, and I found that standard EXIF editing tools may fail to change these corrupt EXIF sections.</p>
<p>The answer is to blow away the EXIF data.</p>
<p>Download: <a href="http://paperjammed.com/wp-content/uploads/2011/02/Strip-EXIF.zip">Strip EXIF</a></p>
<p>This zip file contains a compiled AppleScript application. You can unzip it and place the application on your desktop. Safari will probably unzip it for you when you click the link.</p>
<p>To be safe, open AppleScript Editor and use it to open the <strong>Strip EXIF</strong> app to see its magic.</p>
<p>Now you can drop any number of JPEG files onto the <strong>Strip EXIF</strong> app and it will kindly eviscerate each JPEG, removing all traces of EXIF data.</p>
<p><strong>Adding Basic EXIF Data to a vanilla JPEG</strong></p>
<p>Some tools create JPEG files without EXIF date and time information within. This is typically the hallmark of photo manipulation software and dodgy scanner software. And if you happened to use the <strong>Strip EXIF</strong> app to rip out a bad EXIF block, then you will want to replace it with a proper data block so that you can still use camera date and timestamps.</p>
<p>Download: <a href="http://paperjammed.com/wp-content/uploads/2011/02/Add-Basic-EXIF.zip">Add Basic EXIF</a></p>
<p>Again, unzip the file, place the app on your desktop, and then drop any number of JPEG files onto <strong>Add Basic EXIF</strong>.</p>
<p>The app will set the EXIF date to the file creation timestamp.</p>
<p><strong>Spreading EXIF Timestamps</strong></p>
<p>This is the real reason why I wrote these scripts. I couldn&#8217;t find a satisfactory tool on the market that would allow me to automatically spread out the shooting times for a series of images.</p>
<p>Why would anyone want to do this? Because some processes give you fifty JPEG files all with the exact same creation time and exact same shooting time. I like to use file renaming tools to incorporate the shooting time in the filename, so that files sort by chronological order. This doesn&#8217;t work if all of the timestamps are the same.</p>
<p>So I wrote a little app that adjusts the first photo by one minute, the second by two minutes, and so on. If there are fifty photos, then the last one will have its shooting time adjusted by fifty minutes.</p>
<p>The result is a series of photos/scans that have different timestamps.</p>
<p>Download: <a href="http://paperjammed.com/wp-content/uploads/2011/02/Spread-EXIF-Timestamps.zip">Spread EXIF Timestamps</a></p>
<p>Again, please look at the short program before you run it.</p>
<p><strong>Closing Thoughts</strong></p>
<p>I hope that my favorite tool implements these tricks soon (<strong>A Better Finder Attributes</strong>, I&#8217;m looking at you!), but until then, I will be dropping my files onto these three little droplets.</p>
<p>The <strong>jhead</strong> tool is so versatile that I will probably end up with a whole slew of similar droplets that will do all kinds of spiffy stuff. Nevertheless, I would rather the commercial products already provided these features. Not everyone likes dipping into AppleScript and the command line!</p>
]]></content:encoded>
			<wfw:commentRss>http://paperjammed.com/2011/02/14/a-couple-of-applescript-droplets-to-tweak-exif-timestamps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Extra Geek Points Today: Ubuntu running on Soekris</title>
		<link>http://paperjammed.com/2011/02/06/extra-geek-points-today-ubuntu-running-on-soekris/</link>
		<comments>http://paperjammed.com/2011/02/06/extra-geek-points-today-ubuntu-running-on-soekris/#comments</comments>
		<pubDate>Mon, 07 Feb 2011 03:52:17 +0000</pubDate>
		<dc:creator>Tad</dc:creator>
				<category><![CDATA[Geekery]]></category>
		<category><![CDATA[Geeky]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://paperjammed.com/?p=1099</guid>
		<description><![CDATA[This is all about getting another stamp on my geek card, so if that&#8217;s not your thing, you might want to just move on&#8230; Anyway, some weeks ago I was thinking how cool it would be to have a totally fanless and silent little black box that would serve up something useful in my house, [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-medium wp-image-1104" title="Computer Geek Happy" src="http://paperjammed.com/wp-content/uploads/2011/02/iStock_000006522132XSmall-200x300.jpg" alt="iStockPhoto" width="200" height="300" />This is all about getting another stamp on my geek card, so if that&#8217;s not your thing, you might want to just move on&#8230;</p>
<p>Anyway, some weeks ago I was thinking how cool it would be to have a totally fanless and silent little black box that would serve up something useful in my house, such as the wiki I use to keep track of my geeky pursuits.</p>
<p>The other day I managed to obtain a spare Soekris net4801 box, a device best known for embedded applications such as firewalls. Between last night and this morning, I spent about three hours working out the hitches and getting MoinMoin and Ubuntu up and running on this neat little box.<span id="more-1099"></span></p>
<p><strong>The Device</strong></p>
<p>So this is what I am talking about:</p>
<p><img class="alignnone size-medium wp-image-1101" title="20091006-soekris-net4801" src="http://paperjammed.com/wp-content/uploads/2011/02/20091006-soekris-net4801-300x115.jpg" alt="" width="300" height="115" /></p>
<p>Cute, isn&#8217;t it?</p>
<p>It&#8217;s a <a href="http://www.soekris.com/net4801.htm">Soekris net4801</a>, a single board computer, a bit smaller than a hardcover book, with a 233MHz chip and 128MB of RAM soldered on the board. It doesn&#8217;t even have a hard drive—it runs everything off of a CF card.</p>
<p><strong>The Operating System</strong></p>
<p>After searching around for various combinations, I chose Ubuntu. Many people use FreeBSD on these boxes, because it is such a lightweight Linux distro, but I immediately ran into issues during the FreeBSD install process, and it was clear that I was going to have to learn many details of this different distro if I wanted to make my own custom install.</p>
<p>The approach I followed involved creating an image using an existing Ubuntu machine—a Hardy instance (8.04LTS) that I have running in a VM on my Mac.</p>
<p><strong>The Process</strong></p>
<p>I followed two different pages for getting Ubuntu up and running:</p>
<ul>
<li><a href="http://wiki.soekris.info/Installing_Ubuntu_7.04_Server_via_debootstrap">Installing Ubuntu 7.04 Server via debootstrap</a></li>
<li><a href="http://www.swineworld.org/odds/ubuntu9.04-soekris4801.html">Ubuntu 9.04 (jaunty) on a soekris net-4801</a></li>
</ul>
<p>As it turned out, I had to keep bouncing between the two pages, using a little bit from one and then grabbing something from the other. For example, one page mentioned using <tt>parted</tt> for partitioning the CF card, while the other used <tt>cfdisk</tt>. I found <tt>cfdisk</tt> a little less intimidating, so that&#8217;s the one I used.</p>
<p>Both of these pages talk about using a tool called <a href="http://wiki.debian.org/Debootstrap">Debootstrap</a> to install a new Debian base system in a subdirectory of another.</p>
<p>By mounting the CF card on a running Ubuntu instance, and then mounting the ISO Ubuntu disk image, you use <tt>debootstrap</tt> to generate a base Ubuntu install on the CF card.</p>
<p>It ain&#8217;t simple, but it ain&#8217;t rocket science. There are several tedious details, but for the most part it is a matter of following the directions.</p>
<p>The overall process is as such:</p>
<ul>
<li>Format and partition the CF card with Linux filesystems</li>
<li>Use <tt>debootstrap</tt> to create a base Ubuntu install on the card</li>
<li>Use <tt>chroot</tt> to set the card as the root filesystem and make several tweaks, such as setting up mount points, configuring networking, and adding users</li>
<li>Get the latest kernel and set up grub</li>
</ul>
<p>Then you plug it into the Soekris and boot</p>
<p><strong>Other Hardware Issues</strong></p>
<ul>
<li>You need a CF card reader, a device which is becoming more rare as each day passes.</li>
<li>You also need a serial cable and a machine with a serial port—that&#8217;s how you get to the console on the Soekris.</li>
</ul>
<p><strong>Ubuntu Configuration</strong></p>
<p>Once I got Ubuntu up and running and was connected via the console, I did the following:</p>
<ul>
<li>Installed <tt>ssh</tt></li>
<li>Installed <tt>apache2</tt></li>
<li>Installed and configured MoinMoin</li>
</ul>
<p>Once <tt>ssh</tt> was up and running, I could abandon the serial console and do my work from a terminal window on my Mac.</p>
<p><strong>Final Outcome</strong></p>
<p>I was saddened by the results. Each page takes about seven seconds to render. This is probably a combination of these factors:</p>
<ul>
<li>My box uses a CF card, and not a hard drive. It is quite possible that the claimed 15MB/s written on the card is a lie, and I haven&#8217;t even checked to see how far that is from hard drive access times.</li>
<li>MoinMoin is filesystem intensive, and they recommend running on a system with lots of memory, to keep the files in-memory.</li>
<li>This device has only 128MB of memory, and it isn&#8217;t expandable.</li>
<li>The processor isn&#8217;t that fast: 233MHz.</li>
<li>I have done nothing to tune the Ubuntu install to make it faster.</li>
</ul>
<p>I looked at top while the pages were being generated, and it was clear that the CGI script for MoinMoin was really taking seven seconds each time.</p>
<p>I looked up MoinMoin tuning and saw that I should be using WSGI instead of CGI, but there wasn&#8217;t a ready made package for Hardy, and I didn&#8217;t want to spend the time building it, chasing after a possible second or two of performance.</p>
<p>Maybe some day I&#8217;ll buy the hard drive adapter for the Soekris and see if I can bump up the speed that way. It&#8217;s better to run a system like this on a hard drive anyway.</p>
<p>Another thing I have in mind is to try this on my PC Engines ALIX box that runs my home firewall—that&#8217;s a much faster board with more memory.</p>
<p>So, if you landed here because you were trying something similar, let me know. Share your thoughts and successes or failures.</p>
<p><strong>Update</strong></p>
<p>So I had some spare time today and I decided to take another whack at loading some of the other variants of Unix/Linux onto the device, hopefully finding something lightweight with a smaller memory footprint.</p>
<p>The mysteries of <a href="http://en.wikipedia.org/wiki/Preboot_Execution_Environment"><strong>PXE</strong></a> were slowly made clear to me—if you read a the Wikipedia page, it looks fairly complex with lots of configuration on the various bits. The reality is that PXE involves a few simple things:</p>
<ul>
<li>Local DHCP server tweaks to point the way to the PXE server</li>
<li>A <strong><a href="http://en.wikipedia.org/wiki/Trivial_File_Transfer_Protocol">tftp</a></strong> server—meaning Trivial File Transfer Protocol</li>
<li>The actual PXE boot payload file (typically a bootstrap file along with a config file)</li>
<li>Some kind of file server, such as HTTP or NFS, to host the full install directory tree from the ISO of choice (FreeBSD, Ubuntu, etc)</li>
</ul>
<p>Any decent geek who messes around with Linux boxes probably already has a few of these pieces running somewhere.</p>
<p>The reason it seems so darned complicated is that most online solutions do all of this in one shot on one machine, building a DHCP server as well as an NFS server, talking about this mysterious <tt>tftp</tt> along with <tt>inetd</tt> (&#8220;Trivial FTP&#8221; sounds so much more manageable, doesn&#8217;t it?).</p>
<p>Upon realizing that most of the scary stuff was all about getting <tt>tftp</tt> running, I followed this fine set of instructions on <a href="http://www.davidsudjiman.info/2006/03/27/installing-and-setting-tftpd-in-ubuntu/">Installing and setting TFTPD in Ubuntu</a> and had my Ubuntu <tt>tftp</tt> server running in about five minutes.</p>
<p>I was also able to relatively quickly add two single entries in my m0n0wall firewall configuration (my DHCP server) so that it would redirect local PXE requests correctly. This involved two &#8220;hidden options&#8221; from this m0n0wall page: <a href="http://doc.m0n0.ch/handbook/faq-hiddenopts.html">What about hidden config.xml options?</a></p>
<p>And the web server? I already had an Apache server installed on my Ubuntu box, so that was no problem whatsoever.</p>
<p>Once you separate it out into its pieces, it is a pretty quick setup.</p>
<p>The hardest part is setting up the PXE payload. I was able to get Soekris to boot a couple of different boot kernels, but at this point I realized that any more progress would require custom boot loaders and such, compiled on a FreeBSD machine, and this was more than I wanted to get into.</p>
<p>So I reimaged the borrowed Soekris as a m0n0wall firewall, as it had been before, and restored the original configuration file. In a few days it will be back in its home, doing a proper job of being a firewall.</p>
]]></content:encoded>
			<wfw:commentRss>http://paperjammed.com/2011/02/06/extra-geek-points-today-ubuntu-running-on-soekris/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Why must basic copy/paste operations always result in &#8220;Ransom Note&#8221; text?</title>
		<link>http://paperjammed.com/2011/01/31/why-must-basic-copypaste-operations-always-result-in-ransom-note-text/</link>
		<comments>http://paperjammed.com/2011/01/31/why-must-basic-copypaste-operations-always-result-in-ransom-note-text/#comments</comments>
		<pubDate>Tue, 01 Feb 2011 02:06:51 +0000</pubDate>
		<dc:creator>Tad</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Macintosh]]></category>
		<category><![CDATA[Macros]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://paperjammed.com/?p=1077</guid>
		<description><![CDATA[I estimate that in any given day I must use clipboard copy and paste operations a few dozen times—and if I&#8217;m working with multiple documents, such as when transcribing information from a spreadsheet to a Word document, that figure becomes more like a few hundred times a day. But in all of those times, I [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-medium wp-image-1078" title="iStock_000004240660XSmall" src="http://paperjammed.com/wp-content/uploads/2011/01/iStock_000004240660XSmall-300x199.jpg" alt="" width="300" height="199" />I estimate that in any given day I must use clipboard copy and paste operations a few dozen times—and if I&#8217;m working with multiple documents, such as when transcribing information from a spreadsheet to a Word document, that figure becomes more like a few hundred times a day.</p>
<p>But in all of those times, I almost never want my computer to paste &#8220;ransom note&#8221; text. Ninety nine times out of a hundred, I want clean text to be pasted, neatly blending with its surroundings. In other words, paste it as if I were typing it at the keyboard.</p>
<p>So why does Apple think we always want to paste styled text? And why does Microsoft think we always want our spreadsheet to suddenly be filled with somebody else&#8217;s 24 point Comic Sans letters instead of a nice unformatted date and time?</p>
<p>Here are my workarounds for this problem. Maybe someone can offer a few other workarounds.<span id="more-1077"></span></p>
<p><strong>Windows</strong></p>
<p>The easiest way to pasting unformatted content in Windows is to use a free program called Pure Text by a gentleman named Steve Miller. <a href="http://www.stevemiller.net/puretext/">Download PureText 2.0</a> for all modern versions of Windows.</p>
<p>This app doesn&#8217;t have an installer; it runs from wherever it is. However, since it does provide  the ability to launch when Windows starts, I recommend you first drag the small executable file to a nice permanent home somewhere on your hard drive (I usually create a <strong>C:\Program Files\PureText</strong> folder).</p>
<p>Now launch the app. You will see a small <strong>PT</strong> icon in your system tray.</p>
<p>All you need to do for an unformatted non-ransom-note paste action is to hit <strong>Windows+V</strong>. In other words, instead of <strong>Control+V</strong>, hit the Microsoft flag key and <strong>V</strong>. You will hear a short cowbell sound as the paste action is performed.</p>
<p><strong>Macintosh</strong></p>
<p>Amazingly, there doesn&#8217;t seem to be such a free simple little tool available for Macintosh.</p>
<p>In some applications, such as Pages, the four-key combination of <strong>Option+Shift+Command+V</strong> will perform an unformatted Paste operation.</p>
<p>If you don&#8217;t mind spending a bit of money, programs such as <a href="http://www.apimac.com/cleantext/">Clean Text for Mac</a> and <a href="http://www.selznick.com/products/smartwrap/mac/index.htm">SmartWrap 2</a> provide this functionality at a price: both are about twenty bucks. Fortunately, both products provide much more functionality than just stripping formatting from the clipboard.</p>
<p>If you want to roll your own, the best I could come up with is to use a keyboard macro application to assign a tiny script to the desired keys—this option works fine if you already happen to have a keyboard macro application installed. I use <a href="http://www.keyboardmaestro.com/main/">Keyboard Maestro</a>, though this method should work just as well with other macro tools.</p>
<p>The essence of the &#8220;strip formatting&#8221; operation lies in this very short shell script:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/bin/sh</span><br />
pbpaste <span style="color: #000000; font-weight: bold;">|</span> pbcopy</div></td></tr></tbody></table></div>
<p>What this does is it simply pipes the output of a command-line &#8220;read clipboard&#8221; action into a command-line &#8220;copy&#8221; action. This is a text-level operation, so no funky formatting makes it through. Now, the clipboard contains only pure unformatted text.</p>
<p>The trick is to make your keyboard macro program execute this when you hit the key combination of your choice. Maybe I&#8217;ll find inspiration some day to learn how to make a small application like PureText for the Mac. When I do, I&#8217;ll post it here.</p>
<p>There are other options available for Macintosh. If you are ambitious, you can turn the problem around and <a href="http://hints.macworld.com/article.php?story=20090905230902190">Create a &#8216;copy as plain text&#8217; service</a>.</p>
<p><strong>Why do computers do this?</strong></p>
<p>When you copy text, the computer puts it on the clipboard in many different styles, referred to as <em>flavors</em>. Typical flavors might be &#8220;Rich Text&#8221;, &#8220;Unformatted Text&#8221; or &#8220;Image Data&#8221;. When you then perform a paste operation somewhere else, the receiving application sifts through the available flavors of your clipboard data and selects the one it likes the most. The application will usually pick the fanciest usable flavor available.</p>
<p>Usually, this process works fairly well. When you copy a selection of cells in an Excel spreadsheet, it might paste into a Word document as a proper Word table, but if you paste into an email application, you might get an image of the cells, and if you paste into a text editor such as Notepad, you will see just the numbers and words.</p>
<p>Likewise, a copied Visio diagram might paste into Word as an embedded editable Visio object, while a paste into Photoshop would result in a flat image, like a screenshot.</p>
<p><strong>Final Thoughts</strong></p>
<p>People have been swearing at the clipboard for years. The typical lowest common denominator is to paste the text into Notepad and the copy from Notepad. Even for this, Mac comes up short: the standard text editor, TextEdit, simply pastes in your ransom note text with formatting and all.</p>
<p>If you use Windows, go right ahead and install PureText. You won&#8217;t regret it.</p>
<p>If you use Macintosh, make it easy on yourself and invest in one of the payware applications. Think of how many times you have wanted to paste clean text, as if you had typed it in from the keyboard.</p>
]]></content:encoded>
			<wfw:commentRss>http://paperjammed.com/2011/01/31/why-must-basic-copypaste-operations-always-result-in-ransom-note-text/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Friends and family, please use the BCC option in your mailings!</title>
		<link>http://paperjammed.com/2010/12/26/friends-and-family-please-use-the-bcc-option-in-your-mailings/</link>
		<comments>http://paperjammed.com/2010/12/26/friends-and-family-please-use-the-bcc-option-in-your-mailings/#comments</comments>
		<pubDate>Mon, 27 Dec 2010 00:59:52 +0000</pubDate>
		<dc:creator>Tad</dc:creator>
				<category><![CDATA[Privacy]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Rants]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://paperjammed.com/?p=1061</guid>
		<description><![CDATA[Recently, someone at my sister-in-law&#8217;s school sent out an announcement to all of the parents, using a list of e-mail addresses maintained by the school. The content was innocent enough, but when they sent out the mailing, they made a critical error: they had pasted the entire mailing list of addresses into the Recipients field [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-medium wp-image-1064" title="iStock_000001956906XSmall" src="http://paperjammed.com/wp-content/uploads/2010/12/iStock_000001956906XSmall-201x300.jpg" alt="" width="201" height="300" />Recently, someone at my sister-in-law&#8217;s school sent out an announcement to all of the parents, using a list of e-mail addresses maintained by the school.</p>
<p>The content was innocent enough, but when they sent out the mailing, they made a critical error: they had pasted the entire mailing list of addresses into the <strong>Recipients</strong> field in their mail program. As a result, every parent had every other parent&#8217;s email address. Some never noticed, and others didn&#8217;t really care. Several were displeased about this breach of privacy and let the school know about it.</p>
<p>That individual had committed the same error as many friends and family do when they want to share a message with many people.</p>
<p>This social faux-pas is easy to prevent, so I include here a quick set of instructions on how to maintain your mailing list&#8217;s privacy when you have a large mailing to send out.<span id="more-1061"></span></p>
<p><strong>What&#8217;s the problem?</strong></p>
<p>When you send an email to a few dozen people, you risk the following:</p>
<ul>
<li>Some people might be upset because you are passing their private email address around in public. Treat the email list as if it were a list of private phone numbers. Would you send such a list to everyone you know?</li>
<li>You are exposing everyone on the list to an increased spam risk. If anyone has a virus-compromised email account or is a spammer themselves (perish the thought!), they will now have access to the entire list of your friends.</li>
<li>It is quite possible that someone in the mailing list will click &#8220;reply all&#8221; and either send personal information meant for you to everyone else, or at least annoy the others on the list.</li>
</ul>
<p><strong>Keeping it Private</strong></p>
<p>The solution is very simple:</p>
<ul>
<li>Put <em>your own</em> address in the <strong>To</strong> field.</li>
<li>Put all of your friends&#8217; addresses in the <strong>BCC</strong> field—<strong>B</strong>lind <strong>C</strong>arbon <strong>C</strong>opy.</li>
<li>Compose and send your email.</li>
</ul>
<p>Your friends will receive an email that contains only your address and their address; they cannot see any of the other names on the list, even if they were to dig into the gritty details of the email headers.</p>
<p><img class="alignnone size-full wp-image-1066" title="20101226-using-bcc-in-gmail" src="http://paperjammed.com/wp-content/uploads/2010/12/20101226-using-bcc-in-gmail.png" alt="" width="550" height="712" /><strong>Have Consideration</strong></p>
<p>When you send a message to a large mailing list, please</p>
<ul>
<li>Keep their email addresses private</li>
<li>Edit out unnecessary content of forwarded messages</li>
<li>Respect their wishes if they ask to be removed from your list</li>
<li>Carefully consider if your mailing is appropriate for everyone in the group</li>
</ul>
<p>In other words, don&#8217;t become a spammer in your friends&#8217; eyes.</p>
]]></content:encoded>
			<wfw:commentRss>http://paperjammed.com/2010/12/26/friends-and-family-please-use-the-bcc-option-in-your-mailings/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

