<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">

<channel>
	<title>MikeBach.org » Blog</title>
	
	<link>http://mikebach.org/blog</link>
	<description>tech musings; exotica</description>
	<lastBuildDate>Wed, 05 Aug 2009 03:17:42 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/mikebach" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="mikebach" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>TVShows and EZRSS.it</title>
		<link>http://mikebach.org/blog/2009/08/04/tvshows-and-ezrss-it/</link>
		<comments>http://mikebach.org/blog/2009/08/04/tvshows-and-ezrss-it/#comments</comments>
		<pubDate>Wed, 05 Aug 2009 02:58:53 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[1]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[TV]]></category>

		<guid isPermaLink="false">http://mikebach.org/blog/2009/08/04/tvshows-and-ezrss-it/</guid>
		<description><![CDATA[First and foremost, this post is about a technology. It is not about how to pirate TV shows or promoting such actions. It&#8217;s about using and modifying software.

A few years ago, a program for OS X called TVShows was released. It has two components. The first is a set of Ruby scripts which run every [...]]]></description>
			<content:encoded><![CDATA[<p>First and foremost, this post is about a technology. It is not about how to pirate TV shows or promoting such actions. It&#8217;s about using and modifying software.</p>

<p>A few years ago, a program for OS X called <a href="http://tvshows.sourceforge.net/index2.html">TVShows</a> was released. It has two components. The first is a set of Ruby scripts which run every 30 minutes to probe TVRSS.net for TV show torrents, and then downloads the new episodes. The second is a GUI front end which shows a list of available shows and allows the user to subscribe. And it worked. It worked really well. Unlike some alternatives which need to be running constantly (wasting resources and screen real estate on something which should happen in the background) or would download torrents pointing to private trackers, TVShows downloaded new episodes, every time. Its background process was invoked by <code>launchd</code> every 30 minutes, meaning it took no resources when it wasn&#8217;t running and only ran for about 30 seconds (a ridiculously generous estimate) every hour. The program wasn&#8217;t feature complete, but it worked well for what it did. It has been stuck at 0.3.4 since May 2007, and version 1.0 has been promised for years, but the project had seen no movement since then. But that was fine, because it worked.</p>

<p>Until it didn&#8217;t.</p>

<p>A few months ago, TVRSS.net went offline. A message was shown saying that the site would return, but it never did. Since TVShows needed the TVRSS feeds to get new episodes, the program stopped working. Some weeks later, EZTV.it, a site which distributes TV show torrents, went down as well. After some new servers and a code update, the site rose from the ashes, and launched a new site as well: <a href="http://www.ezrss.it">EZRSS.it</a>. EZRSS was designed as a drop-in replacement for the now-defunct TVRSS.net. Its webpages respond to the same queries and give the same results.</p>

<p>Knowing what I know about languages like Ruby, I dove into the TVShows code and tried to understand its architecture. What I found was slightly confusing at first but very well laid out and ultimately easy to understand. I tried modifying my copy of the TVShows.rb script to use the new EZRSS pages. A simple Find &amp; Replace worked really well, and I was able to get my copy to read the EZRSS feeds and try to download the torrents. Unfortunately, Ruby&#8217;s open-uri library seemed to have difficulty downloading the torrent files themselves. This was quite literally the first time I&#8217;d ever seriously looked at a Ruby script, and I wasn&#8217;t really able to figure out why open-uri was having trouble with these URIs.</p>

<p>Luckilly, someone much smarter than me could. On the <a href="http://sourceforge.net/forum/forum.php?forum_id=671198">TVShows Forums</a> at Sourceforge, Adam Randall <a href="http://sourceforge.net/forum/message.php?msg_id=7542785">posted</a> that he had fixed all the problems and had TVShows working again. He <a href="http://sourceforge.net/forum/message.php?msg_id=7544029">packaged</a> it up and put it on his personal website, available at <a href="http://source.xaren.net/Applications/">http://source.xaren.net/Applications/</a>. I&#8217;ve tested the program and it works perfectly. I ran a diff between it and TVShows 0.3.4 and everything looks clean (sorry Adam, I just had to be sure). As Adam mentions, Ruby had issues with the unescaped <code>[</code> and <code>]</code> in the torrent URLs, so they were replaced with <code>%5B</code> and <code>%5D</code> respectively.</p>

<p>With Adam&#8217;s changes downloaded and installed, TVShows, or as he now calls it, EZTVShows, is working perfectly. I have some tips on how to use it better.</p>

<p>First, run the <code>uninstall.sh</code> script for the old TVShows before you install the new one. TVShows caches its script in the Application Support folder, so the changes Adam made won&#8217;t take effect if you don&#8217;t do this. To run it, open Terminal (it&#8217;s in <code>Applications/Utilities</code>), drag the <code>uninstall.sh</code> script onto the Terminal window, and hit Return. Drag the TVShows program to the Trash. If you no longer have the <code>uninstall.sh</code> file, a copy can be found in the <code>eztvshows.tar.bz2</code> file from Adam&#8217;s site.</p>

<p>Second, there is a way to save your previous show subscriptions. <strong>Before</strong> you run the uninstall script, navigate to <code>~/Library/Application Support/TVShows</code> in the Finder and copy the <code>TVShows.plist</code> file somewhere, like the Desktop. Next, run the uninstall script. Install Adam&#8217;s version into your Applications folder (by dragging the program there) and run it. You&#8217;ll see that none of your shows are selected. Close TVShows, and then go back to the <code>~/Library/Application Support/TVShows</code>. Replace the <code>TVShows.plist</code> file that&#8217;s there with the one you copied earlier. Now, re-launch the TVShows program and you should see all your subscriptions return. However, the show list will be outdated, so click the Update List button to get the new version.</p>

<p>Adam did a great job with the changes and TVShows is working perfectly for me. Unfortunately, the original developer seems to have abandoned the project, and the latest version in the SVN repository on Sourceforge doesn&#8217;t build properly. If that can be fixed, there may be future versions of TVShows. But until then, 0.3.4 with the EZRSS changes, available from <a href="http://source.xaren.net/Applications/">http://source.xaren.net/Applications/</a>, is the latest, greatest version.</p>
]]></content:encoded>
			<wfw:commentRss>http://mikebach.org/blog/2009/08/04/tvshows-and-ezrss-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exporting OmniOutliner files to Markdown</title>
		<link>http://mikebach.org/blog/2009/05/24/exporting-omnioutliner-files-to-markdown/</link>
		<comments>http://mikebach.org/blog/2009/05/24/exporting-omnioutliner-files-to-markdown/#comments</comments>
		<pubDate>Sun, 24 May 2009 17:47:28 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[1]]></category>
		<category><![CDATA[applescript]]></category>
		<category><![CDATA[markdown]]></category>
		<category><![CDATA[OmniOutliner]]></category>
		<category><![CDATA[osx]]></category>

		<guid isPermaLink="false">http://mikebach.org/blog/?p=120</guid>
		<description><![CDATA[Over the past year, I&#8217;ve been learning to use two programs for nearly everything I do. The first is OmniOutliner Pro, which I used to take notes in my University lectures. Its outlines fit well with how my lectures were presented and my note-taking style, making it a near perfect tool. For non-note taking, I&#8217;ve [...]]]></description>
			<content:encoded><![CDATA[<p>Over the past year, I&#8217;ve been learning to use two programs for nearly everything I do. The first is <a href="http://www.omnigroup.com/applications/omnioutliner/">OmniOutliner Pro</a>, which I used to take notes in my University lectures. Its outlines fit well with how my lectures were presented and my note-taking style, making it a near perfect tool. For non-note taking, I&#8217;ve been using John Gruber&#8217;s <a href="http://daringfireball.net/projects/markdown">Markdown</a>, which provides a simple formatting syntax, which is clear and easy to read before it&#8217;s processed, and a processor to convert the plain text into HTML.</p>

<p>I often use Markdown for quick note taking and even some long form writing (I&#8217;m using it to write this post, for instance). I love Markdown because all its files are just plain text; OmniOutliner&#8217;s files, while rather open, can&#8217;t come close to the openness of Markdown. Were something to happen to the Omni Group, or I were for some reason unable to use OmniOutliner, I&#8217;d like to be able to access my notes. What I really wanted was a way to get all of my school notes, stored in OmniOutliner format, exported to Markdown syntax.
<span id="more-120"></span></p>

<p>There is a <a href="http://fletcherpenney.net/multimarkdown/multimarkdown_and_omnioutliner/">Markdown export plugin</a> available, but it doesn&#8217;t quite fit my needs. It exports each level as an HTML heading, starting at H1 going all the way to H6. While this may be useful for some, my ideal export would be as an HTML Unordered List, with each node indented, but otherwise presented as standard text.</p>

<p>While looking at the various export options, I discovered that the &#8220;Plain Text (with tabs)&#8221; exporter generates almost perfect Markdown, with a few problems. First, collapsed rows don&#8217;t show up. Secondly, status checkboxes are shown, and don&#8217;t look quite right. I only learnt how to disable them in the default template last year, so many of my notes have them shown, but not used. Finally, because the header of the notes is unstyled, the whole note parses as one paragraph, and the formatting is completely wrong. After some more tinkering, I found that by putting three hashes (###) at the beginning of the first line, making it a H3, the entire note would be processed correctly.</p>

<p>With these things in mind, I realized what I needed. I wanted something to automatically open every OmniOutliner note I took in school, expand the rows, hide the status checkboxes and export the file to Markdown format. When the word &#8220;automatically&#8221; pops up with respect to a Mac, especially with a very Mac-like program like OmniOutliner, the first thoughts should be of Automator and Applescript. Applescript allows Mac users to access parts of many applications through a simple English-like scripting language. Automator does something similar, but with a graphical interface and some limitations. I fiddled about in Automator, but was unable to get the proper files selected, so I moved on to Applescript.</p>

<p>OmniOutliner provides an extensive Applescript Dictionary, a list of all the objects and functions available to a script. I quickly found there were methods for doing everything I needed. First, a sample document which I would use this script on.</p>

<p><img src="http://mikebach.org/blog/wp-content/uploads/2009/05/outline2.png" alt="A Sample Outline" title="A Sample Outline" width="500" height="412" class="alignnone size-full wp-image-128" /></p>

<p>As you can see, the outline is very simple. The header is just the course and date of the note, and then the rest is a simple outline, with nodes and children. Here&#8217;s the finished script I made:</p>

<p><style></p>

<p>.as2 {
    color: #000000;
}
.as3 {
    color: #4C5D5D;
}
.as4 {
    color: #000000;
}
.as5 {
    font-weight: bold;
    color: #2800FF;
}
.as6 {
    color: #0000FF;
}
.as7 {
    color: #4F7F00;
}</p>

<p></style></p>

<blockquote>
<pre class="applescript">
<span class="as5">on</span> <span class="as6">open</span> <span class="as7">names</span><span class="as4">
</span><span class="as4">   </span><span class="as5">tell</span> <span class="as6">application</span> <span class="as2">"OmniOutliner Professional"</span><span class="as4">
</span><span class="as4">       </span><span class="as6">open</span> <span class="as7">names</span><span class="as4">
        </span><span class="as5">set</span> <span class="as7">theDocuments</span> <span class="as5">to</span> <span class="as5">every</span> <span class="as6">document</span><span class="as4">
        </span><span class="as5">repeat</span> <span class="as5">with</span> <span class="as7">currentDocument</span> <span class="as5">in</span> <span class="as7">theDocuments</span><span class="as4">
</span><span class="as4">           </span><span class="as5">tell</span> <span class="as7">currentDocument</span><span class="as4">
</span><span class="as4">               </span><span class="as6">expandAll</span><span class="as4">
                </span><span class="as5">set</span> <span class="as6">status visible</span> <span class="as5">to</span> <span class="as6">false</span><span class="as4">
                </span><span class="as5">set</span> <span class="as7">oldFirstColumn</span> <span class="as5">to</span> <span class="as5">the</span> <span class="as6">title</span> <span class="as5">of</span> <span class="as5">second</span> <span class="as6">column</span><span class="as4">
                </span><span class="as5">set</span> <span class="as7">newFirstColumn</span> <span class="as5">to</span> <span class="as2">"###"</span> <span class="as2">&#038;</span> <span class="as7">oldFirstColumn</span><span class="as4">
                </span><span class="as5">set</span> <span class="as5">the</span> <span class="as6">title</span> <span class="as5">of</span> <span class="as5">second</span> <span class="as6">column</span> <span class="as5">to</span> <span class="as7">newFirstColumn</span><span class="as4">
                </span><span class="as6">export</span> <span class="as6">to</span> <span class="as6">path</span> <span class="as2">&#038;</span> <span class="as2">".markdown"</span> <span class="as6">as</span> <span class="as2">"NSStringPboardType"</span><span class="as4">
                </span><span class="as5">set</span> <span class="as5">the</span> <span class="as6">title</span> <span class="as5">of</span> <span class="as5">second</span> <span class="as6">column</span> <span class="as5">to</span> <span class="as7">oldFirstColumn</span><span class="as4">
                </span><span class="as6">save</span><span class="as4">
                </span><span class="as6">close</span><span class="as4">
</span><span class="as4">           </span><span class="as5">end</span> <span class="as5">tell</span><span class="as4">
</span><span class="as4">       </span><span class="as5">end</span> <span class="as5">repeat</span><span class="as4">
</span><span class="as4">   </span><span class="as5">end</span> <span class="as5">tell</span><span class="as4">
</span><span class="as5">end</span> <span class="as6">open</span></pre>

</blockquote>

<p><s>Download the script</s> <strong>See update <a href="#update">below</a></strong></p>

<p>Let&#8217;s walk through the script to see what&#8217;s happening. The first line, &#8220;<span class="as5">on</span><span class="as4"> </span><span class="as6">open</span><span class="as4"> </span><span class="as7">names</span>&#8220;, sets the script up to act as a droplet, which lets you drag any type of file from the Finder directly onto the script and have them operated on. A list of the files is stored in the <span class="as7">names</span> variable. The next line directs all the following commands to the OmniOutliner Professional application. The line &#8220;<span class="as6">open</span> <span class="as7">names</span>&#8221; tells OmniOutliner to open every file which was dropped onto the droplet. There are two things to note here: first, if a lot of files are done at once, this can take a long time and a lot of RAM. Second, if you try to do this with a file OmniOutliner cannot open, the program with stop and alert you. At this point, no files will have been modified, but there may be other outlines open. Just be aware of these facts. I used the script with nearly 200 OmniOutliner documents, and it worked flawlessly on all of them, though it was rather slow at it.</p>

<p>The script then asks OmniOutliner for a list of all its open documents (which the script itself just opened) and begins iterating over each one. First, it expands all the rows with the <span class="as6">expandAll</span> command, and it sets the <span class="as6">status visible</span> property to <span class="as6">false</span>. Next, the script adds the &#8220;###&#8221; to the beginning of the header so the exported file will parse as proper Markdown with the lines</p>

<blockquote>
<span class="as5">set</span> <span class="as7">oldFirstColumn</span> <span class="as5">to</span> <span class="as5">the</span> <span class="as6">title</span> <span class="as5">of</span> <span class="as5">second</span> <span class="as6">column</span><br />
<span class="as5">set</span> <span class="as7">newFirstColumn</span> <span class="as5">to</span> <span class="as2">&#8220;###&#8221;</span> <span class="as2">&#038;</span> <span class="as7">oldFirstColumn</span><br />
<span class="as5">set</span> <span class="as5">the</span> <span class="as6">title</span> <span class="as5">of</span> <span class="as5">second</span> <span class="as6">column</span> <span class="as5">to</span> <span class="as7">newFirstColumn</span>
</blockquote>

<p>Now comes the exporting, with the command <span class="as6">export</span> <span class="as6">to</span> <span class="as6">path</span> <span class="as2">&amp;</span> <span class="as2">&#8220;.markdown&#8221;</span> <span class="as6">as</span> <span class="as2">&#8220;NSStringPboardType&#8221;</span>. Each <span class="as6">document</span> has a <span class="as6">path</span> property, which contains the full path of the file. We can use this to save the exported file to the same location as the original. We add &#8220;.markdown&#8221; to the file path so the system can recognize the Markdown file and we don&#8217;t accidently overwrite our OmniOutliner document. The &#8220;NSStringPboardType&#8221; tells the <span class="as6">export</span> function to use the &#8220;Plain Text (with tabs)&#8221; format. With the file exported, we get rid of the &#8220;###&#8221; by restoring the old header text, with the command <span class="as5">set</span> <span class="as5">the</span> <span class="as6">title</span> <span class="as5">of</span> <span class="as5">second</span> <span class="as6">column</span> <span class="as5">to</span> <span class="as7">oldFirstColumn</span>. Finally, we save the document and close it.</p>

<p>Save the script as an Application and you can drag and drop files from the Finder onto the droplet. I used a Spotlight search to find all the files with Kind matching &#8220;OmniOutliner 3&#8243; in my School folder and dragged them over. The 187 documents opened one after the other (giving 187 windows), made the changes, exported and closed. Running the script took a few minutes; it was probably about 1 second per file.</p>

<p><strong>Some caveats</strong></p>

<ul>
<li>If there are any &#8220;LinkBack Items&#8221; to other Omni Group programs, like a Graffle object in the middle of the outline, they won&#8217;t be exported as images. They&#8217;ll simply have the text &#8220;LinkBack Item from OmniGraffle&#8221; inline. I suspect a proper Markdown export plugin may be able to export images as well. </li>
<li>Any Markdown syntax, like hashes or square brackets, in an outline will not be escaped. The exported file will still be human readable without any data loss, but it may need some modification before being run through a Markdown processor.</li>
<li>After running through this script, OmniOutliner documents will have their rows expanded and status checkboxes hidden. If this doesn&#8217;t suit you, you can remove or comment out the </span><span class="as6">save</span> command.</li>
<li>Once again, be wary of opening too many files with this script at once. It may severely slow down your computer.</li>
</ul>

<p>I know the script is rather specialized, but it may be useful for you. Applescript is a powerful language that can take some getting used to, but using it can be quite fun and help you do a lot of things with your Mac.</p>

<p><strong id="update">UPDATE</strong>
I&#8217;ve rewritten the script with a few changes. First and foremost, the script now opens a file, operates on it and closes it, rather than opening ALL the files, then operating and closing them. This should make it better for computers with limited resources. With that change I was able to have the script check if a dropped file is an oo3 file. If it ISN&#8217;T, the script ignores it. This should let you drag groups of files without worrying about if they&#8217;re all files.</p>

<p>The updated version, 1.1, can be downloaded <a href="http://mikebach.org/blog/wp-content/uploads/2009/05/omnioutliner-markdown-exporter-11.scpt">here</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mikebach.org/blog/2009/05/24/exporting-omnioutliner-files-to-markdown/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On Merging Two OS X Installations</title>
		<link>http://mikebach.org/blog/2009/04/20/on-merging-two-os-x-installations/</link>
		<comments>http://mikebach.org/blog/2009/04/20/on-merging-two-os-x-installations/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 19:32:24 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[1]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[rsync]]></category>

		<guid isPermaLink="false">http://mikebach.org/blog/2009/04/20/on-merging-two-os-x-installations/</guid>
		<description><![CDATA[Four years ago, I bought my first Mac, a 20&#8243; iMac G5 which I named Zeus. It&#8217;s a great machine, but I&#8217;ve decided to sell it. As I talked about before, I bought a Macbook last January, which I named Hera (Zeus&#8217; wife). In the last few months, I&#8217;ve noticed that Hera is so much [...]]]></description>
			<content:encoded><![CDATA[<p>Four years ago, I bought my first Mac, a 20&#8243; iMac G5 which I named Zeus. It&#8217;s a great machine, but I&#8217;ve decided to sell it. As I <a href="http://mikebach.org/blog/2008/01/28/macbook/">talked about before</a>, I bought a Macbook last January, which I named Hera (Zeus&#8217; wife). In the last few months, I&#8217;ve noticed that Hera is so much more powerful than Zeus. With the rise in online Flash video, I&#8217;ve noticed Zeus stutter and be slow, but Hera has always been able to run it just fine. I decided it was time to put Zeus out to pasture and begin using Hera full time.</p>

<p>Now, Zeus&#8217; slowness wasn&#8217;t the only reason. Whenever I travel, I bring Hera with me, which has meant using her (yes, I call it &#8216;her&#8217;) exclusively for weeks at a time when I&#8217;ve gone to Florida or New York or even to my parents&#8217; place in London. In that time, using Hera exclusively has been wonderful. She&#8217;s fast and light and easy to carry. Her keyboard is wonderful, unlike the old-style one that came with Zeus.</p>

<p>I&#8217;m also moving to my parents&#8217; place for a few months. Networking at their house has always been tough. I&#8217;m convinced the place acts as a <a href="http://en.wikipedia.org/wiki/Faraday_Cage">Faraday Cage</a>, so 802.11g wifi was very spotty in most places (Cell signal is also a problem). A few months ago they bought an Apple Airport Extreme, covering the house in 802.11n WiFi, which has much greater range. It&#8217;s a great fit for their house, and Hera works just fine on it. However, Zeus is too old to use it; he only can do 802.11g. The house used to have Cat5 cable running to the bedrooms, but they had it removed when they renovated their kitchen. The only place to put Zeus would be next to the router, in my mother&#8217;s office, which she likes to keep slightly neater than a pigsty. As much as I love my mother, I wouldn&#8217;t be able to work there. Without an internet connection, Zeus would be pretty useless.</p>

<p>So, the time came to get rid of Zeus and use Hera full time.</p>

<p><span id="more-117"></span>Hera, as a base model Macbook, came with an 80GB hard drive. I have nearly 30GB of music and regularly use BitTorrent to download, um, Linux, so I needed a bit more space than her current configuration offered. Zeus came with a 250GB hard drive, which was fine, but I decided that a bigger hard drive today would be worth it in the long run, so I picked up a 500GB SATA laptop hard drive and an external enclosure at one of my local Mom &amp; Pop computer stores.</p>

<p>The first step to switching my hard drives was getting all my data onto the new one. I regualrly use a program called <a href="http://www.shirt-pocket.com/SuperDuper/SuperDuperDescription.html">SuperDuper!</a> to backup my computers. SuperDuper!&#8217;s main feature is that the backups it makes are exact copies of the hard drive, including all the system files. It&#8217;s backups are bootable; in the event of a hard drive failure, you could just switch the disks and be back in business in a few minutes. Though Zeus&#8217; drive never failed, the ability to boot to my backup has saved my butt a few times. 
The first step with a backup drive should be making sure that it works. To do this, I used DiskUtility to &#8220;zero out&#8221; the drive, which essentially writes 0 on every part of the drive. This gets rid of whatever was there before (which should have been nothing) and also makes sure that there are no errors on the drive. The drive can detect them if it sees them, so this step makes sure it checks the whole thing. With this step, Disk Utility also sets up a single HFS+ filesystem for use by Mac OS X.</p>

<p>With the drive all prepped, I simply ran SuperDuper! with the default settings, which made an exact copy of the internal drive to the external one. It took a while to move about 30GB of data, but it went. At the same time, I used SuperDuper on Zeus to update its backup. Registered versions of SuperDuper! can do &#8220;Smart Update,&#8221; which only updates the changed files, resulting in an exact copy, but taking much less time. I ran this Smart Update every week, so my backup is always very fresh. With both drives mirrored to externals, it was time to upgrade Hera.</p>

<p>The Macbook hard drive is simple to replace. With the machine switched off, remove the battery, undo three very small Phillips head screws, remove the L bracket, and pull the white tab. The drive still has 4 very small <a href="http://en.wikipedia.org/wiki/Torx">Torx</a> T8 screws connecting it to a shielding (and the aformentioned white tab), but I only had a T10 bit. I eventually just used flat-nose pliers to grab the screws and turn the drive, which got them off very easily. After putting the shielding on the 500GB hard drive and reattaching the screws, I simply slipped the drive back into its slot, reattached the L bracket, screwed in the three screws, and put the battery back in place. The machine booted just fine, and looked just like it had before, except this time it had a 500GB hard drive. Frankly, it was a really simple process.</p>

<p>Now, for merging the data from the two machines. Mac OS X is centred around the Home foder, represented by ~. Every file you save, and data from programs you use, should be stored there, and all the software from Apple does, including iTunes. I didn&#8217;t really use iTunes on Hera on an ongoing basis. If I were away from home, I would use it for downloading podcasts, but any other time the library was basically empty. This made moving my music simple. After attaching the external backup of Zeus to the newly well-endowed Hera, I deleted the contents of Hera&#8217;s <code>~/Music</code> folder and dragged over the contents of Zeus&#8217;. iTunes stores all the library data in <code>~/Music/iTunes</code> so all my playlists, play counts, dates added and songs moved along with the folder. Once the files were moved, I opened iTunes on Hera and saw all my music, just as I&#8217;d left it.</p>

<p>There was <em>one</em> problem, though. Aparently, iTunes also stores the size of the iTunes window in the iTunes library. The window on Zeus was taller than Hera&#8217;s screen. I couldn&#8217;t resize the window, because the resize area (the bottom right corner) was off the screen. Unlike most porgrams, pressing the green button in the top left of the iTunes window doesn&#8217;t &#8220;zoom&#8221; it to the full screen, but switches to the mini-player. After some Googling, I learnt that holding Option while clicking the green button performs the normal action, resizing my iTunes window to a size that fit fully on the screen. Crisis averted.</p>

<p>The rest of my Home folder could just be dragged over. The Pictures folder was just like the Music one, with the contents from Zeus replacing the things from Hera. Most of my documents have been stored in my <a href="https://www.getdropbox.com/referrals/NTIzMzE2NTk">Dropbox</a> for several months, which replaced FolderShare (as I discussed in my <a href="http://mikebach.org/blog/2008/01/28/macbook/">initial post</a> on my Macbook). I didn&#8217;t even have to touch them. Dropbox kept them perfectly in sync for me. There were a few odds and ends in my Documents folder which I moved over, and some folders with files from my jobs, which all moved over in a few minutes.</p>

<p>The next step to merging my computers was making sure I had all the programs I need. Most of the programs I&#8217;ve needed I either used exclusively on my laptop (in school, for example) or used on both machines. Just to make sure, I opened up both <code>/Applications folders</code> and went through the lists, deciding which programs needed to be moved. Some programs had data that needed to be moved, which is stored in <code>~/Library/Application Support</code>. These files can just be moved over, due to Mac OS X&#8217;s fondness for using xml files to store data. While comparing programs, I found my <a href="http://www.mamp.info/en/mamp/index.html">MAMP</a> program folder, which contained some PHP work I&#8217;d done a few years ago. I moved the database files and the <code>htdocs</code> folder into a new install of MAMP on Hera. Once I had all my program data moved over, I copied over the contents of ~/Library/Scripts where I had some Applescript and Bash scrpits, and ~/Library/LaunchAgents, where I had a launchd task that runs every 15 minutes.</p>

<p>The last thing to get merged were my Chat Logs. I had chat logs going back to 2003 on Zeus [some of which actually predate my Mac], and wanted them moved to Hera. However, Hera had her own logs from all the conversations I&#8217;ve had on her. For the last few versions, Adium has logged its chats in per-conversation files, which made marging the two groups of logs really simple. Adium stores its chat logs in <code>~/Library/Application Support/Adium 2.0/Users/Default/Logs</code> as folders for each acount, with contact folders in those, and then folders for each conversation. To merge them, I made copies of both Logs folders, and used <code>rsync</code> to merge them. <code>rsync</code> is a program for keeping folders in sync. It has many features that are designed for syncing over a network, but I only needed its local features. With the Zeus logs in a folder called <code>Zeus</code> and Hera&#8217;s in <code>Hera</code>, I ran</p>

<blockquote>
  <p><code>$ rsync Zeus/ Hera</code></p>
</blockquote>

<p>The <code>/</code> at the end of <code>Zeus/</code> tells rsync to sync the contents of <code>Zeus</code> into the <code>Hera</code> folder. After a bit of churning, rsync had copied all the conversations from my Zeus logs to the Hera ones, perfectly. After copying the contents of the resulting Hera folder into <code>~/Library/Application Support/Adium 2.0/Users/Default/Logs</code>, I had all my logs from the past 6 years in one place, indexed and searchable by Adium, with one terminal command.</p>

<p>So, after a hard drive purchase, several hours of backup, moving files and a simple rsync command, I have all my files, music, programs and chat logs from two computers merged into one tiny laptop. I plan to keep this computer for a few more years, and I&#8217;m not anticipating needing to make any more changes to it, beyond some new RAM which will be even easier to change than the Hard Drive (no Torx screws). All in all, I&#8217;m quite happy about the result.</p>
]]></content:encoded>
			<wfw:commentRss>http://mikebach.org/blog/2009/04/20/on-merging-two-os-x-installations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Working With TechSoup</title>
		<link>http://mikebach.org/blog/2009/04/09/working-with-techsoup/</link>
		<comments>http://mikebach.org/blog/2009/04/09/working-with-techsoup/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 21:49:46 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[1]]></category>
		<category><![CDATA[school]]></category>

		<guid isPermaLink="false">http://mikebach.org/blog/2009/04/09/working-with-techsoup/</guid>
		<description><![CDATA[As part of the final assignment in my Computer Science degree, I had to work with a non-profit in Toronto to help them with a technology issue they faced. I chose to work with TechSoup Canada, an organization which acts as a clearing house for large companies to donate copies of their software to the [...]]]></description>
			<content:encoded><![CDATA[<p>As part of the final assignment in my Computer Science degree, I had to work with a non-profit in Toronto to help them with a technology issue they faced. I chose to work with <a href="http://www.techsoupcanada.ca/">TechSoup Canada</a>, an organization which acts as a clearing house for large companies to donate copies of their software to the non-profit sector, saving those charities up to 95% of the cost of that software. It was a great experience and gave me an opportunity to see what issues are faced when working in the non-profit sector.</p>

<p><span id="more-66"></span>TechSoup is a very small organization, with only two employees. To help with their marketing, they wanted to be able to showcase the work they&#8217;ve done with some of their clients. However, with so few people, it was hard for them to find time to travel to the organizations, conduct interviews and turn the information into something useful; that&#8217;s where we came in. As a group of four, we were tasked with visiting three non-profits in Toronto to conduct video interviews with their directors and IT managers. In groups of two, we asked the interview subjects a series of five questions designed to showcase their use of TechSoup&#8217;s services. After the initial five questions, we would often ask the subject some follow up questions to lead them towards interesting or useful stories about what they were able to do with the software they received.</p>

<p>Once the interviews were completed, TechSoup asked us to provide both a transcription of the unedited interview and a summary of the subject&#8217;s answers to the questions. Finally, we were asked to edit together a short video showcasing the work TechSoup has done for them, and how the organization was able to use the software they received to better serve their clients. With this video and information in hand, TechSoup will be able to update their website with testimonials from real clients to showcase the work they do and how important it is to the communities they serve.</p>

<p>In talking to the non-profits who use TechSoup&#8217;s services, I discovered just how expensive it can be to run a charitable organization. Microsoft Office alone can cost $400 per user, which gets very expensive very quickly in an organization with 15 employees. These organizations can purchase expensive video editing software, which can cost thousands of dollars, for only $20 from TechSoup. With TechSoup&#8217;s prices, they spend less money on software and more money on what matters, helping their clients. Unfortunately, there are many non-profits who don&#8217;t know that a place like TechSoup exists, and waste their resources paying retail prices.</p>

<p>Over the weeks we were working with TechSoup, we had several tasks to perform. First and foremost were the interviews. It was not easy scheduling interviews with three different organizations and four busy university students. There were several proposed times where none of our group members were available and only certain days on which the non-profits were. However, we were eventually able to find times that worked for the clients and two group members, and the interviews could take place. Once there, with a borrowed video camera, one of the two group members present would ask a series of questions about their organization, the services they use from TechSoup, how the services have affected the organization and ways in which TechSoup could improve. With the interview completed, each one had to be transcribed completely. TechSoup also requested summaries of the interview subjects&#8217; responses to the questions. Finally, they wanted an edited version of the interviews showcasing TechSoup&#8217;s services and impact on the clients.</p>

<p>With four group members, dividing the duties was rather straight forward. We were initially asked to perform four interviews, but due to time constraints and scheduling issues, that was reduced to three. Under the initial plan, we decided that two group members would attend each interview, one to ask questions and one to film. We decided this needed no modification given the reduced number of interviews, so two people went to interviews twice. Once the interviews were filmed, there were four tasks left: three transcriptions and editing the video. These were divided in the simplest way possible, with three people transcribing one video each and the fourth editing the interviews. While at times it seemed like there were disparities in the division of work due to the scheduling issues, overall things evened out.</p>

<p>The experience working with TechSoup was very rewarding. It&#8217;s a great organization with interesting and knowledgeable employees and clients, which can make have a huge impact on the budget of a non-profit.</p>
]]></content:encoded>
			<wfw:commentRss>http://mikebach.org/blog/2009/04/09/working-with-techsoup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Heavenly Rub-n-Tug</title>
		<link>http://mikebach.org/blog/2009/03/27/a-heavenly-rub-n-tug/</link>
		<comments>http://mikebach.org/blog/2009/03/27/a-heavenly-rub-n-tug/#comments</comments>
		<pubDate>Sat, 28 Mar 2009 02:37:55 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[1]]></category>

		<guid isPermaLink="false">http://mikebach.org/blog/2009/03/27/a-heavenly-rub-n-tug/</guid>
		<description><![CDATA[This one proves it. It is someone&#8217;s job to come up with inappropriate headlines.

God &#8216;will not give happy ending&#8217;.

Why does the BBC do this to me?
]]></description>
			<content:encoded><![CDATA[<p>This one proves it. It is someone&#8217;s job to come up with inappropriate headlines.</p>

<p><a href="http://news.bbc.co.uk/2/hi/uk_news/7964880.stm">God &#8216;will not give happy ending&#8217;</a>.</p>

<p>Why does the BBC do this to me?</p>
]]></content:encoded>
			<wfw:commentRss>http://mikebach.org/blog/2009/03/27/a-heavenly-rub-n-tug/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Down Tools</title>
		<link>http://mikebach.org/blog/2008/12/12/down-tools/</link>
		<comments>http://mikebach.org/blog/2008/12/12/down-tools/#comments</comments>
		<pubDate>Fri, 12 Dec 2008 20:48:23 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[1]]></category>

		<guid isPermaLink="false">http://mikebach.org/blog/?p=54</guid>
		<description><![CDATA[I&#8217;m becoming convinced that news agencies and wire services have people whose jobs are dedicated to coming up with dirty headlines that will pass the censors.


Gays down tools in protests against same-sex wedding ban

1 day ago

SAN FRANCISCO (AFP) — Gays across the United States were urged to skip work on Wednesday as part of the [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m becoming convinced that news agencies and wire services have people whose jobs are dedicated to coming up with dirty headlines that will pass the censors.</p>

<blockquote>
<strong><a href="http://www.google.com/hostednews/afp/article/ALeqM5jFSAi_R0WfBvQKJaG-WYtL8I5Kcg">Gays down tools in protests against same-sex wedding ban</a></strong>
<br /><br />
1 day ago
<br /><br />
SAN FRANCISCO (AFP) — Gays across the United States were urged to skip work on Wednesday as part of the latest protest against recent votes outlawing same-sex marriage in several regions.</blockquote>

<p>[<a href="http://gawker.com/5108599/news-report-on-gay-protests-alarmingly-accurate">via</a>]</p>
]]></content:encoded>
			<wfw:commentRss>http://mikebach.org/blog/2008/12/12/down-tools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Writing Prose</title>
		<link>http://mikebach.org/blog/2008/08/08/writing-prose/</link>
		<comments>http://mikebach.org/blog/2008/08/08/writing-prose/#comments</comments>
		<pubDate>Sat, 09 Aug 2008 00:41:31 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[1]]></category>
		<category><![CDATA[writing]]></category>

		<guid isPermaLink="false">http://mikebach.org/blog/?p=47</guid>
		<description><![CDATA[From the New York Times Manual of Style and Usage, on writing style.


Verbs work hardest, and adjectives little: the welfare worker checked; the gunfire snapped; the pitcher was ready to fire a ball. Sentences are nearly all short; exceptions are rare, purposeful and easily navigated. And what is missing? Not one example speaks of implementing [...]]]></description>
			<content:encoded><![CDATA[<p>From the <a href="http://www.nytstore.com/ProdDetail.aspx?prodId=874">New York Times Manual of Style and Usage</a>, on writing style.</p>

<blockquote>
Verbs work hardest, and adjectives little: the welfare worker <em>checked</em>; the gunfire <em>snapped</em>; the pitcher was ready to <em>fire</em> a ball. Sentences are nearly all short; exceptions are rare, purposeful and easily navigated. And what is missing? Not one example speaks of <em>implementing</em> anything, or <em>funding</em> an <em>ongoing</em> program. Nothing is <em>prior</em> to something else, or <em>hitherto</em>. No sentence creaks under the tread of bureaucracy or recycles prefabricated originality: no one gets a <em>wake-up call</em> or puts anything <em>on hold</em>. No one is <em>in-your-face</em>. The word choices break ground: who ever heard of a <em>funky</em> fish?
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://mikebach.org/blog/2008/08/08/writing-prose/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I love New York</title>
		<link>http://mikebach.org/blog/2008/05/15/i-love-new-york/</link>
		<comments>http://mikebach.org/blog/2008/05/15/i-love-new-york/#comments</comments>
		<pubDate>Thu, 15 May 2008 05:17:09 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[1]]></category>
		<category><![CDATA[links]]></category>
		<category><![CDATA[new york]]></category>

		<guid isPermaLink="false">http://mikebach.org/blog/?p=46</guid>
		<description><![CDATA[There&#8217;s no bones about it. New York is the greatest city on Earth. If you&#8217;ve never been, you have to visit. But be sure to follow these tips so you can have the best experience. Really, it&#8217;s not a scary place.


  DO NOT DO THE FOLLOWING:  Walk four abreast holding hands; Congregate around [...]]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s no bones about it. New York is the greatest city on Earth. If you&#8217;ve never been, you have to visit. But be sure to follow <a href="http://bigpicture.typepad.com/comments/2008/05/guide-for-new-y.html">these tips</a> so you can have the best experience. Really, it&#8217;s not a scary place.</p>

<blockquote>
  <p><strong>DO NOT DO THE FOLLOWING:</strong>  Walk four abreast holding hands; Congregate around busy street corners, hang around stairways or active doorways; Do not clutter up Grand Central Station during rush-hour (8-9 and 5-6) &#8212; its much nicer around 11am;</p>
</blockquote>

<p>Don&#8217;t forget the <a href="http://www.kottke.org/03/05/jason-rules-nyc-subway">rules of the subway</a>, either.</p>

<p>And while you&#8217;re there, go see the 7:30 show of <a href="http://newyork.ucbtheatre.com/shows/12">ASSSSCAT 3000</a> Sunday nights at the Upright Citizen&#8217;s Brigade Theater. It&#8217;s a great improv show done by many Saturday Night Live-related people, like Amy Poehler, Horatio Sanz and Jack McBrayer (Kenneth from 30 Rock). Tickets are $8 for the 7:30 show. They can be reserved ahead, and there is a standby line. There is a 9:30 show which is free, but tickets can&#8217;t be reserved. It&#8217;s really one of the best hours you can spend in New York. If you&#8217;re not going to be in town on Sunday, they have shows <a href="http://newyork.ucbtheatre.com/schedule/">every night of the week</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://mikebach.org/blog/2008/05/15/i-love-new-york/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Drunk Russian sleeps off knifing</title>
		<link>http://mikebach.org/blog/2008/05/10/drunk-russian-sleeps-off-knifing/</link>
		<comments>http://mikebach.org/blog/2008/05/10/drunk-russian-sleeps-off-knifing/#comments</comments>
		<pubDate>Sun, 11 May 2008 01:01:27 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[1]]></category>
		<category><![CDATA[news]]></category>

		<guid isPermaLink="false">http://mikebach.org/blog/?p=45</guid>
		<description><![CDATA[I don&#8217;t intend to keep posting BBC articles, but they&#8217;ve got some good articles this week.


  A Russian man trying to sleep off a night of after-work drinking failed to notice a six-inch (15-cm) knife in his back &#8211; until his wife woke him up. 
  &#8216;We were drinking&#8217;

]]></description>
			<content:encoded><![CDATA[<p>I don&#8217;t intend to keep posting BBC articles, but they&#8217;ve got some good articles this week.</p>

<blockquote>
  <p>A Russian man trying to sleep off a night of after-work drinking failed to notice a six-inch (15-cm) knife in his back &#8211; until his wife woke him up. 
  <em><a href="http://news.bbc.co.uk/2/hi/europe/7353025.stm">&#8216;We were drinking&#8217;</a></em></p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://mikebach.org/blog/2008/05/10/drunk-russian-sleeps-off-knifing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Great tits cope well with warming</title>
		<link>http://mikebach.org/blog/2008/05/09/great-tits-cope-well-with-warming/</link>
		<comments>http://mikebach.org/blog/2008/05/09/great-tits-cope-well-with-warming/#comments</comments>
		<pubDate>Sat, 10 May 2008 01:25:45 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[1]]></category>
		<category><![CDATA[science]]></category>

		<guid isPermaLink="false">http://mikebach.org/blog/?p=44</guid>
		<description><![CDATA[The article is slightly less interesting.


  At least one of Britain&#8217;s birds appears to be coping well as climate change alters the availability of a key food.
  
  Researchers found that great tits are laying eggs earlier in the spring than they used to, keeping step with the earlier emergence of caterpillars.


But [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://news.bbc.co.uk/2/hi/science/nature/7390109.stm">article</a> is slightly less interesting.</p>

<blockquote>
  <p>At least one of Britain&#8217;s birds appears to be coping well as climate change alters the availability of a key food.</p>
  
  <p>Researchers found that great tits are laying eggs earlier in the spring than they used to, keeping step with the earlier emergence of caterpillars.</p>
</blockquote>

<p>But &#8220;yay&#8221; for evolution!</p>
]]></content:encoded>
			<wfw:commentRss>http://mikebach.org/blog/2008/05/09/great-tits-cope-well-with-warming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
