<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
 	<channel>
		<title>Blogmarks | Sheep Systems</title>
		<link>http://www.sheepsystems.com/developers_blog/</link>
		<description></description>
		<language>en</language>
		<lastBuildDate>Mon, 10 Jun 2019 11:56:44 -0700</lastBuildDate>
		<docs>http://blogs.law.harvard.edu/tech/rss</docs>
		<generator>Sandvox 2.10.12</generator>
		<item>
			<title>Recording Music with Olympus LS-P4</title>
			<link>http://www.sheepsystems.com/developers_blog/recording-music-with-olympu.html</link>
			<description>
				&lt;div class="article-summary"&gt;&lt;p&gt;The Olympus LS-P4 voice recorder is capable of really high quality recording if properly configured.  This explains how to do that.&lt;br /&gt;&lt;br /&gt;In our church, the built-in &lt;em&gt;SCENE&lt;/em&gt; = &lt;em&gt;MUSIC&lt;/em&gt; would be OK for most English Masses, but I don't use that because for Hispanic Masses using this scene results in a few dB of clipping in music such as cumbias with hard driving bass.  Fortunately, the LS-P4 will remember all settings, including the recording level &lt;em&gt;Volume&lt;/em&gt; number.  So if you always record in the same way, you only need to do the following once.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 1em;"&gt;&lt;strong&gt;Turn on the third (central) mic&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The LS-P4 is capable of quite flat frequency response over the audible spectrum, but to get the bass end you need to use all three microphones – the &lt;em&gt;tres mic&lt;/em&gt;&lt;/span&gt;&lt;span style="font-style: normal; font-size: 1em;"&gt; feature.&lt;/span&gt;&lt;span style="font-size: 1em;"&gt;&lt;br /&gt;&lt;br /&gt;Push button &lt;em&gt;MENU&lt;/em&gt;&lt;/span&gt;.&lt;br /&gt;&lt;span style="font-size: 1em;"&gt;Push DOWN button once to get to &lt;em&gt;Rec Menu&lt;/em&gt;&lt;/span&gt;.&lt;br /&gt;&lt;span style="font-size: 1em;"&gt;Push RIGHT button once to select it.&lt;br /&gt;Push DOWN button a five times to get into &lt;em&gt;Mic Select&lt;/em&gt;.&lt;br /&gt;Push RIGHT button again to get into select it.&lt;br /&gt;Push UP or DOWN button to get to &lt;em&gt;Central Mic&lt;/em&gt;. &lt;br /&gt;Push RIGHT button to select it.&lt;/span&gt;
					&lt;/p&gt;&lt;/div&gt;
			</description>
			<pubDate>Thu, 31 Jan 2019 14:00:30 -0800</pubDate>
			<guid>http://www.sheepsystems.com/developers_blog/recording-music-with-olympu.html</guid>
            <enclosure url="http://www.sheepsystems.com/_Media/pastedimage-3_med.png" length="53257" type="application/octet-stream"></enclosure>
			<category>Olympus LS-P4</category><category>Music recording</category>
		</item>
		<item>
			<title>Goodbye to Delicious, aka del.icio.us 2</title>
			<link>http://www.sheepsystems.com/developers_blog/goodbye-to-delicious-aka.html</link>
			<description>
				&lt;div class="article-summary"&gt;&lt;p&gt;&lt;span style="font-size: 1em;"&gt;The Delicious, aka del.icio.us bookmarking service has undergone several ownership changes, and during the last year the site has often been not working.  Last year at this time, we were fielding support requests from Delicious users.  After testing, we responded by saying &lt;em&gt;Yes, it looks like Delicious is down again&lt;/em&gt;.  There is of course nothing we can do to fix that.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;We’ve now learned that, indeed &lt;span style="font-size: 1em;"&gt;&lt;a href="https://blog.pinboard.in/2017/06/pinboard_acquires_delicious/"&gt;Delicious is gone&lt;/a&gt;.&lt;/span&gt;
					&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 1em;"&gt;Jerry Krinock&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
			</description>
			<pubDate>Sat, 22 Oct 2016 14:00:30 -0700</pubDate>
			<guid>http://www.sheepsystems.com/developers_blog/goodbye-to-delicious-aka.html</guid>
            
			<category>NSConditionLock</category>
		</item>
		<item>
			<title>New File Format in the BookMacster Family</title>
			<link>http://www.sheepsystems.com/developers_blog/new-bmco-file-format.html</link>
			<description>
				&lt;div class="article-summary"&gt;&lt;p&gt;Version 2.5 of Smarky, Synkmark, Markster and BookMacster introduces a new document file format, replacing the old &lt;em&gt;Bookmarkshelf&lt;/em&gt; document (&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;.bkmslf&lt;/span&gt; file) with a new &lt;em&gt;Collection&lt;/em&gt; document (&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;.bmco&lt;/span&gt; file package).  Note: BookMacster users may have more than one document file.  Synkmark, Markster and Smarky only support a single document file, which appears as its “main
					&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 1em;"&gt;A &lt;/span&gt;&lt;span style="font-size: 1em; font-family: &amp;quot;Courier New&amp;quot;;"&gt;.bkmslf&lt;/span&gt; &lt;span style="font-size: 1em;"&gt;file opened in version 2.5 or later will automatically be deleted from the disk and replaced with a new&lt;/span&gt; &lt;span style="font-size: 1em; font-family: &amp;quot;Courier New&amp;quot;;"&gt;.bmco&lt;/span&gt; &lt;span style="font-size: 1em;"&gt;file package.  For BookMacster, if it resided in the default&lt;/span&gt; &lt;span style="font-size: 1em; font-family: &amp;quot;Courier New&amp;quot;;"&gt;Bookmarkshelf Documents&lt;/span&gt; &lt;span style="font-size: 1em;"&gt;folder, the corresponding&lt;/span&gt; &lt;span style="font-size: 1em; font-family: &amp;quot;Courier New&amp;quot;;"&gt;.bmco&lt;/span&gt; &lt;span style="font-size: 1em;"&gt;file will reside in a new&lt;/span&gt; &lt;span style="font-size: 1em; font-family: &amp;quot;Courier New&amp;quot;;"&gt;Collections&lt;/span&gt; &lt;span style="font-size: 1em;"&gt;folder.  Like the old &lt;/span&gt;&lt;span style="font-size: 1em; font-family: &amp;quot;Courier New&amp;quot;;"&gt;Bookmarkshelf Documents&lt;/span&gt;&lt;span style="font-size: 1em;"&gt; folder, the new &lt;/span&gt;&lt;span style="font-size: 1em; font-family: &amp;quot;Courier New&amp;quot;;"&gt;Collections&lt;/span&gt;&lt;span style="font-size: 1em;"&gt; folder also resides in&lt;/span&gt; &lt;span style="font-size: 1em; font-family: &amp;quot;Courier New&amp;quot;;"&gt;~/Library/Application Support/BookMacster/&lt;/span&gt;&lt;span style="font-size: 1em;"&gt;.&lt;/span&gt;
					&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 1em;"&gt;The new file format plays nicer and more efficiently with recent versions of macOS.  It is a file package instead of a flat file, its SQLite store now supports write-ahead logging.  Instead of using Apple’s&lt;/span&gt; &lt;span style="font-size: 1em; font-family: Helvetica;"&gt;&lt;s&gt;notoriously problematic&lt;/s&gt;&lt;/span&gt; &lt;span style="font-size: 1em;"&gt;NSPersistentDocument, it is based on&lt;/span&gt; &lt;a href="https://github.com/karelia/BSManagedDocument" style="font-size: 1em;"&gt;BSManagedDocument&lt;/a&gt;&lt;span style="font-size: 1em;"&gt;.  It has adopted Apple's asynchronous saving.&lt;/span&gt;
					&lt;/p&gt;&lt;/div&gt;
			</description>
			<pubDate>Sat, 22 Oct 2016 14:00:30 -0700</pubDate>
			<guid>http://www.sheepsystems.com/developers_blog/new-bmco-file-format.html</guid>
            <enclosure url="http://www.sheepsystems.com/_Media/bkmslf-vs-bmco-icons_med.png" length="168331" type="image/png"></enclosure>
			<category>NSConditionLock</category>
		</item>
		<item>
			<title>Status Items (aka Menulets) Get Keyboard Access in 10.12 2</title>
			<link>http://www.sheepsystems.com/developers_blog/status-items-aka-menulets.html</link>
			<description>
				&lt;div class="article-summary"&gt;&lt;p&gt;My thanks to whomever it was at Apple who decided, in macOS 10.12 Sierra, to fix Bug 15499730 which I filed almost three years ago, in 2013 on Nov 18!&lt;br /&gt;&lt;br /&gt;This bug involves the non-Apple &lt;em&gt;Status Items&lt;/em&gt;, colloquially called &lt;em&gt;menulets&lt;/em&gt;, which appear in your menu bar to the right of center, provided by non-Apple applications, such as &lt;a href="http://www.sheepsystems.com/products/bkmx.html"&gt;our bookmarks management apps&lt;/a&gt;.
					&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 1em;"&gt;Until macOS 10.12 Sierra, the only way for a user to access these was by clicking them with the mouse, which was difficult for users with limited vision, and annoying for those of us who feel we work faster with the keyboard.  If you enabled a Keyboard Shortcut to to &lt;em&gt;Move focus to status menus&lt;/em&gt;, as shown in the screenshot below, you could use your arrow keys to access the (Apple) Menu Extras, but not the (non-Apple) Status Items.  But after upgrading to macOS 10.12 Sierra, it works for the Status Items too.  Markster users, and BookMacster users, who use our Status Item to land new bookmarks &lt;em&gt;directly&lt;/em&gt;, will appreciate it!&lt;/span&gt;&lt;/p&gt;
					&lt;div class="first graphic-container wide center ImageElement"&gt;
						&lt;div class="graphic"&gt;
							&lt;div class="figure-content"&gt;
								&lt;!-- sandvox.ImageElement --&gt;&lt;img src="http://www.sheepsystems.com/_Media/keybdprefs_med.png" alt="KeybdPrefs" width="642" height="401" /&gt;
								&lt;!-- /sandvox.ImageElement --&gt;&lt;/div&gt;
						&lt;/div&gt;
					&lt;/div&gt;&lt;p&gt;Jerry Krinock
					&lt;/p&gt;
				&lt;/div&gt;
			</description>
			<pubDate>Sat, 22 Oct 2016 14:00:30 -0700</pubDate>
			<guid>http://www.sheepsystems.com/developers_blog/status-items-aka-menulets.html</guid>
            <enclosure url="http://www.sheepsystems.com/_Media/menubar_med.png" length="18017" type="image/png"></enclosure>
			<category>NSConditionLock</category>
		</item>
		<item>
			<title>Safari Bookmarks not being “pushed” in iOS 9</title>
			<link>http://www.sheepsystems.com/developers_blog/safari-bookmarks-not-being-pushed.html</link>
			<description>
				&lt;div class="article-summary"&gt;&lt;p&gt;&lt;span style="font-family: Arial; font-size: 14px;"&gt;&lt;strong&gt;UPDATE (2016-Feb-15)&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14px; font-family: Arial;"&gt;This problem is no longer reproducible.  For the last few weeks, iCloud Safari bookmarks syncing has been working OK for me.  However, I don’t test it every day.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Arial; font-size: 14px;"&gt;&lt;strong&gt;SHORT VERSION WITH WORKAROUND&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Arial; font-size: 14px;"&gt;In order to see recent bookmarks changes made on other devices in Safari on your iPhone or iPad running iOS 9, you must relaunch Safari (double-click the home button, then in the application switcher which appears, flick the Safari tile upward, then relaunch Safari).&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Arial; font-size: 14px;"&gt;This seems to affect all Safari users, whether or not you are using BookMacster, Synkmark or Smarky.  The same behavior occurs if you change bookmarks directly in Safari, as explained below.  We repor&lt;/span&gt;&lt;span style="font-size: 14px; font-family: Arial;"&gt;ted this as a Bug 22932240 to Apple on 201&lt;/span&gt;&lt;span style="font-family: Arial; font-size: 14px;"&gt;5 Oct 01, as follows:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Arial; font-size: 14px;"&gt;&lt;strong&gt;SUMMARY&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Arial; font-size: 14px;"&gt;In iOS 9, when using iCloud Safari syncing, Safari bookmarks are not pushed from iCloud automatically, no matter how long you wait.  They don't show up until you forcibly relaunch Safari.  This was tested most recently in iOS 9.0.1 (Build 13A404).&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Arial; font-size: 14px;"&gt;&lt;strong&gt;STEPS TO REPRODUCE&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
			</description>
			<pubDate>Thu, 01 Oct 2015 06:51:30 -0700</pubDate>
			<guid>http://www.sheepsystems.com/developers_blog/safari-bookmarks-not-being-pushed.html</guid>
            
			<category>Safari</category><category>bookmarks</category><category>iOS9</category><category>iCloud</category>
		</item>
		<item>
			<title>Bicycle Helmet gets “Used&quot;</title>
			<link>http://www.sheepsystems.com/developers_blog/bicycle-helmet-gets-used.html</link>
			<description>
				&lt;div class="article-summary"&gt;&lt;p&gt;&lt;span class="pr"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 16px;"&gt;I’ve often said that helmets serve no purpose when you’re riding a recumbent bike like my&lt;/span&gt; &lt;a href="http://www.easyracers.com/index.html" style="font-size: 16px;"&gt;Tour Easy&lt;/a&gt;&lt;span style="font-size: 16px;"&gt;, because you’re highly unlikely to go flying head first, as commonly occurs when something bad happens to an upright bike.  Well, it turns out that is wrong.  Riding about as fast as I could on my steel Tour Easy (maybe 15 miles per hour at my age of 58), northbound on Sunol St., north of San Carlos St. in San José on Sunday 2015 April 19, I felt my front end lift up, and then a second later collapse under me.  Next thing I knew, my helmet bounced off of the asphalt, on the right side just above the visor.  Wow, this would have been a serious head injury.  (It was the first time that I’d ever “used” a bicycle helmet.)&lt;/span&gt;
					&lt;/p&gt;&lt;p style="font-size: 11px;"&gt;&lt;span style="font-size: 16px;"&gt;The accident was due to a quite high ridge in the pavement that runs parallel to the direction of travel.  The only damage to me or my bike was a slightly sore shoulder that went away after a day, a loosened rear view mirror, which was kind of loose even before that, and another tear in the light cloth that I have clipped over my fairing to protect it from scuffs and degradation by sunlight.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
			</description>
			<pubDate>Fri, 27 Feb 2015 20:51:30 -0800</pubDate>
			<guid>http://www.sheepsystems.com/developers_blog/bicycle-helmet-gets-used.html</guid>
            
			<category>helmet</category><category>bicycle</category><category>recumbent</category><category>Tour Easy</category>
		</item>
		<item>
			<title>Have you ever done Auto-reverse engineering?</title>
			<link>http://www.sheepsystems.com/developers_blog/have-you-ever-done-auto.html</link>
			<description>
				&lt;div class="article-summary"&gt;&lt;p&gt;&lt;span style="color: rgb(0, 0, 0); font-family: Baskerville; font-size: 24px;"&gt;auto&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: Baskerville; font-size: 24px;" class="hw"&gt;-&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: Baskerville; font-size: 24px;"&gt;reverse&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; color: rgb(119, 119, 119); font-size: 24px;" class="pr"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: Baskerville; font-size: 24px;"&gt;engineering&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: Baskerville; font-size: 24px;" class="gp ty_hom tg_hw"&gt;  &lt;/span&gt;&lt;span style="color: rgb(106, 102, 255); font-family: 'Times New Roman'; font-size: 24px;"&gt;|&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 24px; color: rgb(0, 0, 0);" class="ph"&gt;ɔdoʊ &lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 24px; color: rgb(0, 0, 0);" class="ph t_respell"&gt;riˈvərs enjəˈni(ə)&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 24px; color: rgb(0, 0, 0);"&gt;riNG&lt;/span&gt;&lt;span style="font-size: 24px; font-family: 'Times New Roman'; color: rgb(0, 0, 0);"&gt;|&lt;/span&gt;&lt;span class="pr"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 18px;"&gt;A type of engineering work inspired by its progenitor, &lt;em style="color: rgb(35, 30, 26); font-family: Helvetica, Arial, sans-serif;"&gt;reverse engineering&lt;/em&gt;, which, as is well-known, describes the&lt;/span&gt; &lt;span style="font-size: 18px; font-family: Helvetica;"&gt;action&lt;/span&gt; &lt;span style="font-size: 18px;"&gt;of a company disassembling a competitor’s product in order to figure out how it works and learn some tricks.  &lt;em&gt;Auto-reverse engineering&lt;/em&gt; is the action of a company &lt;strong&gt;disassembling its own product&lt;/strong&gt;, because its design was never documented, and the engineers who designed it have moved on.&lt;/span&gt;&lt;span class="pr"&gt;&lt;br /&gt;&lt;/span&gt;
					&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
			</description>
			<pubDate>Fri, 27 Feb 2015 20:51:30 -0800</pubDate>
			<guid>http://www.sheepsystems.com/developers_blog/have-you-ever-done-auto.html</guid>
            
			<category>quotes</category><category>reverse engineering</category>
		</item>
		<item>
			<title>Building with 10.6 SDK in Xcode 6 - Still works!</title>
			<link>http://www.sheepsystems.com/developers_blog/loading-apple-frameworks.html</link>
			<description>
				&lt;div class="article-summary"&gt;&lt;p&gt;A job I’m working on requires that the customer's massive old project be built with the 10.6 SDK.  After spending a few minutes with Xcode 3, I was thinking of walking out the door.  Actually, it was more than a few minutes – I watched Xcode 3 beachball for &lt;strong&gt;eight and a half minutes&lt;/strong&gt; doing a &lt;em&gt;Find in Project&lt;/em&gt; (not frameworks, &lt;em&gt;just Project&lt;/em&gt;!).  I remembered the bad old days.&lt;br /&gt;&lt;span style="font-size: 1em;"&gt;&lt;br /&gt;But then I also remembered how, years ago, I’d copied the 10.5 SDK into Xcode 4, I think when I needed to build Bookdog.  I  remembered there were some issues, though, and eventually it was no longer possible.  Realizing this was a much bigger stretch, in desperation I tried it again.  I copied the 10.6 SDK from an Xcode 3 installation to Xcode 6.1 as described in&lt;/span&gt; &lt;a href="http://stackoverflow.com/questions/9621859/how-to-build-for-mac-os-x-10-6-sdk-in-xcode-versions-that-dont-include-it" target="_blank" style="font-size: 1em;"&gt;this Stack Overflow article&lt;/a&gt;&lt;span style="font-size: 1em;"&gt;  Amazingly, after 15 minutes of “indexing”, Xcode 6.1&lt;/span&gt; &lt;strong style="font-size: 1em;"&gt;Build Succeeded&lt;/strong&gt; &lt;span style="font-size: 1em;"&gt;on this massive project, including CodeWarrior PowerPlant, using the 10.6 SDK, and the product launched and&lt;/span&gt; &lt;strong style="font-size: 1em;"&gt;it works&lt;/strong&gt;&lt;span style="font-size: 1em;"&gt;.  Hey, I got 999+ warnings, but they were supposedly getting 700+ in Xcode 3.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 1em;"&gt;Hmmm, there were probably fewer issues with this than with Bookdog and 10.5, because back then we were dealing with the PowerPC thing and different gcc versions.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 1em;"&gt;Something I don&lt;/span&gt;’&lt;span style="font-size: 1em;"&gt;t say very often:  Thank you, Apple, for not breaking this unsupported hack.&lt;br /&gt;&lt;br /&gt;I might recommend still doing the final production build in Xcode 3 on the old Power Mac, but at least now I can develop.&lt;/span&gt;
					&lt;/p&gt;&lt;/div&gt;
			</description>
			<pubDate>Wed, 25 Feb 2015 20:51:30 -0800</pubDate>
			<guid>http://www.sheepsystems.com/developers_blog/loading-apple-frameworks.html</guid>
            
			<category>Xcode</category><category>SDK</category><category>10.6 SDK</category><category>Xcode 5</category><category>Xcode 6</category>
		</item>
		<item>
			<title>Loading Apple frameworks with @rpath in 2015</title>
			<link>http://www.sheepsystems.com/developers_blog/loading-apple-frameworks-2.html</link>
			<description>
				&lt;div class="article-summary"&gt;&lt;p&gt;&lt;span style="font-size: 1em;"&gt;A very good &lt;a href="http://www.dribin.org/dave/blog/archives/2009/11/15/rpath/"&gt;old blog post by Mike Ash&lt;/a&gt; and &lt;a href="http://www.dribin.org/dave/blog/archives/2009/11/15/rpath/"&gt;one by Dave Dribin&lt;/a&gt; explain the history behind @rpath.  But today, we can forget the sordid history.  To use @rpath, simply make the following Build Settings:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 1em;"&gt;• In the framework target that needs to be loaded, set &lt;/span&gt;&lt;strong style="font-size: 1em;"&gt;Installation Directory&lt;/strong&gt;&lt;span style="font-size: 1em;"&gt; to&lt;/span&gt; &lt;span style="font-family: 'Courier New';"&gt;&lt;strong&gt;@rpath&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size: 1em;"&gt;.  (*)&lt;br /&gt;&lt;br /&gt;• In the target that needs to load the framework, add to its &lt;/span&gt;&lt;strong style="font-size: 1em;"&gt;Runpath Search Paths&lt;/strong&gt;&lt;span style="font-size: 1em;"&gt; the relative path from the its executable, which in this context is called the &lt;em&gt;loader&lt;/em&gt;, to the framework, denoting the starting point by the symbol &lt;/span&gt;&lt;span style="font-size: 1em; font-family: 'Courier New';"&gt;@loader_path.&lt;/span&gt;&lt;span style="font-size: 1em;"&gt;  It makes sense if you think about it!  For the typical example of an application executable in&lt;/span&gt; &lt;span style="font-size: 1em; font-family: 'Courier New';"&gt;Contents/MacOS&lt;/span&gt; &lt;span style="font-size: 1em;"&gt;which needs to load a framework in&lt;/span&gt; &lt;span style="font-size: 1em; font-family: 'Courier New';"&gt;Contents/Frameworks&lt;/span&gt;&lt;span style="font-size: 1em;"&gt;, the answer is: &lt;/span&gt;&lt;span style="font-size: 1em; font-family: 'Courier New';"&gt;&lt;strong&gt;@loader_path/../Frameworks&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size: 1em;"&gt;.&lt;/span&gt;
					&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 1em;"&gt;* It seems to me that the example Apple&lt;/span&gt;’&lt;span style="font-size: 1em;"&gt;s &lt;em&gt;Dynamic Library Programming Topics&lt;/em&gt; &amp;gt; &lt;em&gt;Run-Path Dependent Libraries&lt;/em&gt; &amp;gt; &lt;em&gt;Using &lt;/em&gt;&lt;/span&gt;&lt;em style="font-size: 1em;"&gt;Run-Path Dependent Libraries&lt;/em&gt;&lt;span style="font-size: 1em;"&gt;, which says to use &lt;/span&gt;&lt;span style="font-family: 'Courier New';"&gt;@rpath/MyFramework.framework/Versions/A/MyFramework&lt;/span&gt;, is either wrong or confusing.
					&lt;/p&gt;&lt;/div&gt;
			</description>
			<pubDate>Wed, 25 Feb 2015 20:51:30 -0800</pubDate>
			<guid>http://www.sheepsystems.com/developers_blog/loading-apple-frameworks-2.html</guid>
            
			<category>rpath</category><category>@rpath</category><category>runpath</category><category>@loader_path</category><category>loader</category><category>OS X</category><category>Apple</category>
		</item>
		<item>
			<title>Four Ducks, Very Sad</title>
			<link>http://www.sheepsystems.com/developers_blog/four-ducks-very-sad.html</link>
			<description>
				&lt;div class="article-summary"&gt;&lt;p&gt;Four ducks perch on the bank of one of the ponds in the Oakdale / Farmer's Creek wetland in Lapeer, Michigan.  A couple weeks ago, the geese left the area and for the last week or so, dozens of ducks like this were happily swimming and doing duck things in this pond, until a couple days ago when the temperatures became colder, rather early in the season, according to the local people I talk to.&lt;br /&gt;&lt;span style="font-size: 1em;"&gt;&lt;br /&gt;Today, you can see to the left of these four remaining ducks is the one small still-shimmering section of the pond which has not yet skinned over with ice.  It is about 15:15 in the afternoon on Sunday, 2014 Nov 16.  Overnight, this small section will certainly become skinned with ice also, and with temperatures predicted to average -5 Celsius from Monday night thru Friday, the whole surface will be frozen hard.&lt;br /&gt;&lt;br /&gt;I wonder what the ducks are thinking.&lt;/span&gt;
					&lt;/p&gt;&lt;/div&gt;
			</description>
			<pubDate>Sun, 16 Nov 2014 20:51:30 -0800</pubDate>
			<guid>http://www.sheepsystems.com/developers_blog/four-ducks-very-sad.html</guid>
            <enclosure url="http://www.sheepsystems.com/_Media/four-ducks-very-sad_med.jpeg" length="1237902" type="image/jpeg"></enclosure>
			<category>ducks</category><category>freeze</category><category>sad</category>
		</item>
		<item>
			<title>Weird Email from Dropbox saying my Dropbox app is out of date 2</title>
			<link>http://www.sheepsystems.com/developers_blog/weird-email-from-dropbox.html</link>
			<description>
				&lt;div class="article-summary"&gt;&lt;p&gt;This happened Saturday, 2014 Aug 16.&lt;br /&gt;&lt;br /&gt;• I received an email allegedly from Dropbox.&lt;br /&gt;&lt;span style="font-size: 1em;"&gt;• It says my Dropbox app is out of date.&lt;br /&gt;• Strange, because the Dropbox app updates itself, silently and automatically.&lt;br /&gt;• I check my Dropbox version.  It is Dropbox 2.10.27.  Is this the latest, I don't know?&lt;br /&gt;• By the way, I have Mac OS X 10.10 Yosemite DP5.&lt;br /&gt;• The email (HTML) contains an "Update" button anchored to:&lt;br /&gt;      &lt;/span&gt;&lt;span style="font-family: 'Andale Mono'; font-size: 1em;"&gt;https://www.dropbox.com/l/D597IVhchBlArC6GhlySxq/&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 1em;"&gt;• That looks legitimate.&lt;br /&gt;• So I click the button.  A web page opens, a download begins, disk image decompresses, Dropbox.app appears. &lt;br /&gt;• I double-click the decompressed Dropbox.app.   Gatekeeper (Apple security feature built into OS X since late 2012) pops up a dialog, tells me that app is not allowed to launch because it is from an unidentified developer.  Eeek!&lt;br /&gt;• I check the version of the decompressed app, (Contents/Info.plist).  It says that it is version 1.0.  Well, definitely that explains why it would not have been signed for Gatekeeper, if it is indeed Dropbox 1.0 which was published in 2010.  But it also would definitely not be an update from my current version 2.10.27.&lt;/span&gt;
					&lt;/p&gt;&lt;/div&gt;
			</description>
			<pubDate>Sat, 16 Aug 2014 20:51:30 -0700</pubDate>
			<guid>http://www.sheepsystems.com/developers_blog/weird-email-from-dropbox.html</guid>
            
			<category>Dropbox</category><category>phishing</category><category>email</category><category>version</category>
		</item>
		<item>
			<title>Advanced iOS/Objective-C/Swift Meetup, Sunnyvale CA, 2014 Sep 09</title>
			<link>http://www.sheepsystems.com/developers_blog/advanced-iosobjective-cswif.html</link>
			<description>
				&lt;div class="article-summary"&gt;&lt;p&gt;Follow-up resources regarding my talk to the Advanced iOS/Objective-C/Swift Meetup at Sandbox Suites in Sunnyvale, California, the evening of 2014 Sep 09.   Thank to all who attended!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 1em;"&gt;Jerry Krinock&lt;/span&gt;
					&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 1em;"&gt;The &lt;a href="https://github.com/jerrykrinock/YaBT-Yet-another-Bug-Tracker"&gt;project I showed&lt;/a&gt; to demonstrate Core Data Concurrency.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 1em;"&gt;&lt;strong&gt;The High Level View&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Brent Simmons’ 2010 blog post &lt;/span&gt;&lt;a href="http://inessential.com/2010/02/26/on_switching_away_from_core_data" style="font-size: 1em;"&gt;&lt;em&gt;On Switching Away from Core Data&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 1em;"&gt;Tim Roadley's &lt;/span&gt;&lt;a href="http://www.informit.com/articles/article.aspx?p=2160906" style="font-size: 1em;"&gt;Ten Mistakes People Make with Core Data&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;&lt;br /&gt;From Apple&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Apple's &lt;a href="https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/cdProgrammingGuide.html"&gt;Core Data Programming Guide&lt;/a&gt;  &lt;br /&gt;&lt;span style="font-size: 1em;"&gt;&lt;br /&gt;Apple's&lt;a href="https://developer.apple.com/library/prerelease/ios/qa/qa1809/_index.html"&gt; Technical Q&amp;amp;A 1809&lt;/a&gt; on Write-Ahead Lookup Journaling, added in OS X 10.9 and iOS 7, which causes Core Data persistent store files to be three files instead of one, and how to work around it or revert to the old behavior.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://asciiwwdc.com/2014/sessions/225"&gt;Transcript of WWDC 2014 Session 225, &lt;em&gt;What’s New in Core Data&lt;/em&gt;&lt;/a&gt;  Reading a searchable transcript on a technical topic is so much more efficient than watching a video!  Even if someone gives you a time marker in the video.  However, you might want to watch the video too.  It looks like there was only this one Core Data Session this year.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 1em;"&gt;&lt;br /&gt;&lt;strong&gt;Open-Source Tools and Libraries&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Matthew Morey’s &lt;/span&gt;&lt;a href="http://www.raywenderlich.com/75244/top-10-core-data-tools-libraries" style="font-size: 1em;"&gt;Top 10 List of Core Data Tools and Libraries&lt;/a&gt;&lt;span style="font-size: 1em;"&gt;.  Number 2 in the list, mogenerator, contains some instructions for using mogenerator.&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Wolf Rentzsch’ &lt;/span&gt;&lt;a href="https://github.com/rentzsch/mogenerator" style="font-size: 1em;"&gt;mogenerator&lt;/a&gt;&lt;span style="font-size: 1em;"&gt;, a tool for generting Core Data model classes.  Version 1.27, the current built binary download, does not support Swift, but supposedly the current trunk does and presumably 1.28 should.&lt;/span&gt;
					&lt;/p&gt;&lt;/div&gt;
			</description>
			<pubDate>Sat, 16 Aug 2014 20:51:30 -0700</pubDate>
			<guid>http://www.sheepsystems.com/developers_blog/advanced-iosobjective-cswif.html</guid>
            
			<category>Dropbox</category><category>phishing</category><category>email</category><category>version</category>
		</item>
		<item>
			<title>Xcode Messes with Time Machine … too much</title>
			<link>http://www.sheepsystems.com/developers_blog/xcode-vs-time-machine.html</link>
			<description>
				&lt;div class="article-summary"&gt;&lt;p&gt;Watch out if you are using Xcode for non-Mac-App-Store builds.  It may exclude more than you realize from Time Machine.
					&lt;/p&gt;&lt;p&gt;In the following experiment, I configured Xcode to build Smarky two levels up from the project directory, into a directory named &lt;span style="font-family: 'Courier New';"&gt;Builds2&lt;/span&gt;.  The app target’s Build Settings &amp;gt; Build Locations looks like this…
					&lt;/p&gt;&lt;p&gt;
					&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 1em;"&gt;As you can see, this setting was propagated into the&lt;/span&gt; &lt;em style="font-size: 1em;"&gt;Intermediate Build FIles Paths&lt;/em&gt; &lt;span style="font-size: 1em;"&gt;too.&lt;/span&gt;
					&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 1em;"&gt;Next, I deleted the &lt;/span&gt;&lt;span style="font-family: 'Courier New';"&gt;Builds2&lt;/span&gt;&lt;span style="font-size: 1em;"&gt; directory (if any), so that we are starting over from scratch.  Then, I executed a &lt;em&gt;Release&lt;/em&gt; build (using&lt;/span&gt; &lt;span style="font-family: 'Courier New';"&gt;xcodebuild&lt;/span&gt;&lt;span style="font-size: 1em;"&gt;).  Here is what it produced…&lt;/span&gt;
					&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.sheepsystems.com/_Media/image-22_med.png" alt="" width="582" height="515" class="first" /&gt;&lt;span style="font-size: 1em;"&gt;&lt;br /&gt;&lt;/span&gt;
					&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 1em;"&gt;To the &lt;/span&gt;“&lt;span style="font-size: 1em;"&gt;naked eye&lt;/span&gt;”&lt;span style="font-size: 1em;"&gt;, all looks as expected.&lt;/span&gt;
					&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 1em;"&gt;But wait.  Let&lt;/span&gt;’&lt;span style="font-size: 1em;"&gt;s look at these directories' pesky Extended Attributes.&lt;br /&gt;&lt;br /&gt;As expected and desired, because it contains garbage, the&lt;/span&gt; &lt;em style="font-size: 1em;"&gt;Intermediate Build Files&lt;/em&gt; &lt;span style="font-size: 1em;"&gt;directory has Time Machine exclusions…&lt;br /&gt;&lt;/span&gt;
					&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 'Courier New';"&gt;Air2:~ jk$ xattr -l /Users/jk/Documents/Programming/Builds2/BkmkMgrs.build&lt;br /&gt;com.apple.XcodeGenerated: Yes&lt;br /&gt;com.apple.metadata:com_apple_backup_excludeItem:&lt;br /&gt;00000000  62 70 6C 69 73 74 30 30 5F 10 11 63 6F 6D 2E 61  |bplist00_..com.a|&lt;br /&gt;00000010  70 70 6C 65 2E 62 61 63 6B 75 70 64 08 00 00 00  |pple.backupd….|&lt;br /&gt;00000020  00 00 00 01 01 00 00 00 00 00 00 00 01 00 00 00  |…………….|&lt;br /&gt;00000030  00 00 00 00 00 00 00 00 00 00 00 00 1C           |………….|&lt;br /&gt;0000003d&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
			</description>
			<pubDate>Wed, 30 Oct 2013 20:51:30 -0700</pubDate>
			<guid>http://www.sheepsystems.com/developers_blog/xcode-vs-time-machine.html</guid>
            <enclosure url="http://www.sheepsystems.com/_Media/image-18_med.png" length="923970" type="image/tiff"></enclosure>
			<category>xcode</category><category>time machine</category><category>extended attributes</category>
		</item>
		<item>
			<title>Arranging Apps on the old iPad</title>
			<link>http://www.sheepsystems.com/developers_blog/arranging-apps-on-the-old.html</link>
			<description>
				&lt;div class="article-summary"&gt;&lt;p&gt;Many years ago, when I worked for a company in a cubicle, after one of our many relocations, all of the engineers were busy rearranging our cubicles.  You had a desk, a chair, a computer, a file cabinet, usually a storage cabinet and whatever else you wanted which you could “appropriate”.  You were free to put these where you wanted.  Some people were trying to be innovative, others copied.  A wise engineer, older than me at the time, viewed the scene and remarked &lt;em&gt;Yes, it’s hard to figure out the “optimum” arrangement.  Maybe stay at home and have them send the check every month.&lt;/em&gt;  He was great about saying stuff like that with a straight face.
					&lt;/p&gt;&lt;p&gt;I feel the same way about apps on my iPad Mini, which I use mostly for reading music notation with forScore, but of course it’s a note pad and web browser too.  I won’t do email on an iPad because I’m never far away from my MacBook Air, and I can type faster on a real keyboard.  iTunes tells me I have 34 apps.  I’d rearranged the apps once, “logically”, into three screens, but it never quite made sense.  Today I decided it do it like I do my bookmarks - &lt;strong&gt;in alphabetical order&lt;/strong&gt;.
					&lt;/p&gt;&lt;/div&gt;
			</description>
			<pubDate>Wed, 30 Oct 2013 20:51:30 -0700</pubDate>
			<guid>http://www.sheepsystems.com/developers_blog/arranging-apps-on-the-old.html</guid>
            
			<category>iPad</category><category>apps</category><category>arrange</category><category>alphabetical</category>
		</item>
		<item>
			<title>TransformProcessType() : Better but Still Finicky in 10.9 2</title>
			<link>http://www.sheepsystems.com/developers_blog/transformprocesstype--bette.html</link>
			<description>
				&lt;div class="article-summary"&gt;&lt;p&gt;&lt;em&gt;(Most of this post originally was &lt;a href="https://devforums.apple.com/thread/203753"&gt;published in an Apple Developer Forum&lt;/a&gt;.)&lt;/em&gt;&lt;/p&gt;&lt;p&gt;I am happy to see that a 5-years longstanding bug in TransformProcessType(), &lt;span style="font-size: 1em;"&gt;&lt;a href="http://www.cocoabuilder.com/archive/cocoa/205558-transformprocesstype-fails-to-show-menu-bar.html?q=TransformProcessType#205558"&gt;noted by Mike Ash&lt;/a&gt;, and &lt;a href="http://www.cocoabuilder.com/archive/cocoa/193082-bring-app-to-foreground-in-10-5.html#193082"&gt;earlier by others&lt;/a&gt;, has been fixed!&lt;/span&gt;
					&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 1em;"&gt;(The bug was that after invoking TransformProcessType to bring a process from the background to the foreground, the foregrounded app would not get the menu bar until after a different app was activated and then the foregrounded app was activated by the user clicking it in the Dock or doing ⌘-tab.  Trying to do these activations programatically, as a workaround, experimenting with delays, etc., resulted only in hours of frustration.)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 1em;"&gt;But, for BookMacster, it requires a code change to do this during app launching.  BookMacster has a user preference to Launch in Background.  The way it works is  straightforward:  We set LSUIElement to "1" in the Info.plist, then during launch, check the user's preference, and if user wants it in the foreground, TransformProcessType() to foreground type.  Prior to Mavericks, this needed to be done early, in the app delegate's -init, or it wouldn't work.  Now, it needs to be done later, in -applicationDidFinishLaunching.   Here are our complete experimental results …&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
			</description>
			<pubDate>Wed, 30 Oct 2013 20:51:30 -0700</pubDate>
			<guid>http://www.sheepsystems.com/developers_blog/transformprocesstype--bette.html</guid>
            
			<category>TransformProcessType</category>
		</item>
		<item>
			<title>Interprocess Communication with Google Chrome : 2014</title>
			<link>http://www.sheepsystems.com/developers_blog/interprocess-communication.html</link>
			<description>
				&lt;div class="article-summary"&gt;&lt;p&gt;&lt;span style="font-size: 1em;"&gt;Since Google Chrome (and other browsers based on the Chromium source code, such as Google Chrome Canary, Opera 15+, Maxthon, White Hat Aviabor) will &lt;a href="http://blog.chromium.org/2013/09/saying-goodbye-to-our-old-friend-npapi.html"&gt;no longer support NPAPI soon&lt;/a&gt;, we needed to find a different way for our bookmarks managemenet apps to communication with our Chrome extension.  The alternative suggested by the Chrome team, &lt;em&gt;&lt;a href="https://developer.chrome.com/extensions/messaging#native-messaging"&gt;Native Messaging&lt;/a&gt;&lt;/em&gt;, looks like it will do the job.  &lt;s&gt;At least it passed our proof-of-concept test.&lt;/s&gt;   &lt;em&gt;UPDATE: It is now shipping in the Stable/Production versions of our apps Synkmark, Markster and BookMacster.&lt;/em&gt;  The architecture looks like this…&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 1em;"&gt;This architecture looks quite similar to how NPAPI worked, except that&lt;/span&gt; &lt;span style="font-style: italic; font-size: 1em;"&gt;Your &lt;/span&gt;&lt;em&gt;“&lt;/em&gt;&lt;em style="font-size: 1em;"&gt;Messenger&lt;/em&gt;&lt;em&gt;”&lt;/em&gt;&lt;span style="font-size: 1em;"&gt; &lt;em&gt;Tool&lt;/em&gt; was &lt;em&gt;your NPAPI plugin&lt;/em&gt;.  It still has two moving parts, but the Messenger has a drastically smaller surface area than the NPAPI Plugin…&lt;br /&gt;&lt;br /&gt;• Its size, in our case, is looking to be less than 200 KB, compared to the 2 MB size of our NPAPI plugin, which is based on&lt;/span&gt; &lt;a href="http://www.firebreath.org/" style="font-size: 1em;"&gt;FireBreath&lt;/a&gt;&lt;span style="font-size: 1em;"&gt;.  (I gave up after a couple days of trying to write an NPAPI plugin myself, and found FireBreath.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 1em;"&gt;• Much as I appreciate the FireBreath product, it was scary to use such a complicated black box which I could barely troubleshoot when there was an issue.  You see, I gave up on C++ a decade ago after realizing that I could never learn the new C++ features as fast as the C++ gurus were adding them.  Life will be sweet with no more shared &lt;/span&gt;pointers, no more Boost library, no more black magic, no more CMake.  (&lt;a href="http://www.kitware.com/opensource/cmake.html"&gt;CMake&lt;/a&gt; is another amazing open source project, one which Firebreath uses to create cross-platform &lt;em&gt;project&lt;/em&gt; files for Apple’s Xcode.  Unfortunately, since Apple changes Xcode so much and so frequently, it is challenging to keep it working.)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 1em;"&gt;• I no longer need to worry whether or not our NPAPI plugin will work when the Chrome team ever decides to ship a 64-bit version of Chrome for OS X.  (A &lt;a href="http://www.sheepsystems.com/developers_blog/chrome-native-mess.html" target="_blank"&gt;64-bit developer build has recently appeared for Microsoft Windows&lt;/a&gt;.)  Of course, it could not be tested&lt;/span&gt; until they do.  Now, it won't be needed :))&lt;br /&gt;&lt;br /&gt;• When our extension is installed into multiple user profiles in Chrome (which can be running simultaneously), each profile launches its own instance of our Messenger tool.  Our NPAPI plugin required some careful accounting to avoid “crosstalk" in this case.&lt;br /&gt;&lt;span style="font-size: 1em;"&gt;&lt;br /&gt;• Because whatever goes into &lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: 1em;"&gt;~/Library/Internet Plug-Ins&lt;/span&gt;&lt;span style="font-size: 1em;"&gt; gets loaded into all browsers whether it needs them or not, our plugin uselessly loads itself into Firefox, Safari, etc., where it has no effect other than to waste the user&lt;/span&gt;’s &lt;span style="font-size: 1em;"&gt;RAM, and paste our good name into the Crash Report whenever one of these browsers decides to take a nosedive.  Viva isolated processes!&lt;br /&gt;&lt;br /&gt;* * *&lt;br /&gt;&lt;br /&gt;Here is how the above subsystem seems to work.  When user opens the first window in a given Chrome profile, a background.html page in our Chrome extension invokes &lt;/span&gt;&lt;span style="font-size: 1em; font-family: 'Courier New';"&gt;chrome.runtime.connectNative()&lt;/span&gt; &lt;span style="font-size: 1em;"&gt;with a given host name.  Chrome then looks for a&lt;/span&gt; &lt;em style="font-size: 1em;"&gt;special manifest file&lt;/em&gt;&lt;span style="font-size: 1em;"&gt; matching the given host name in&lt;br /&gt;        &lt;/span&gt;&lt;span style="font-size: 1em; font-family: 'Courier New';"&gt;~/Library/Application Support/Google/Chrome/NativeMessagingHosts/&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 1em;"&gt;Of course, our extension installer will have installed this file. Most importantly, it contains the path to our new “Messenger” tool, a Command-Line tool written in Objective-C.  We’re probably going to install that into our own&lt;/span&gt; &lt;span style="font-size: 1em; font-family: 'Courier New';"&gt;~/Library/Application Support&lt;/span&gt; &lt;span style="font-size: 1em;"&gt;folder.  Knowing this path, Chrome&lt;/span&gt; &lt;em style="font-size: 1em;"&gt;launches&lt;/em&gt;&lt;span style="font-size: 1em;"&gt; an instance of our Messenger tool.&lt;br /&gt;&lt;br /&gt;Chrome communicates with its child messenger via unix stdin and stdout.  It seemed like an odd choice for interprocess communication, until I realized that these big-name web browsers need to be cross-platform and run on old systems.  They needed something ubiquitous.&lt;br /&gt;&lt;br /&gt;In the Chrome-to-Messenger direction, you first open communication via &lt;/span&gt;&lt;span style="font-size: 1em; font-family: 'Courier New';"&gt;chrome.runtime.connectNative()&lt;/span&gt;&lt;span style="font-size: 1em;"&gt; , which returns a &lt;em&gt;port&lt;/em&gt; object that will accept a &lt;/span&gt;&lt;span style="font-size: 1em; font-family: 'Courier New';"&gt;postMessage()&lt;/span&gt;&lt;span style="font-size: 1em;"&gt; call whose single parameter is a JavaScript object, typically a dictionary.  Very nice; you can use the keys in the dictionary like commands, and the values like command parameters.  Via stdin, the Messenger receives a JSON serialization of this object, prefixed by a four byte header.  The four byte header is one field, the length of the JSON data in bytes.&lt;br /&gt;&lt;br /&gt;In the Messenger-to-Chrome direction, your Messenger similarly creates a similar command/parameter dictionary, serializes it object into JSON, (using for example, &lt;/span&gt;&lt;span style="font-size: 1em; font-family: 'Courier New';"&gt;NSJSONSerialization&lt;/span&gt;&lt;span style="font-size: 1em;"&gt;), encodes it to data as UTF8, then gets the length of the data, prepends it to the JSON, and writes it to stdout.  About 9 lines of Objective-C code if you’re verbose like me.  Not bad.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 1em;"&gt;Apparently because the background.html is a child of the Chrome user profile and not of a window, communication remains open even after the last browser window of the current user profile in Chrome is closed.  (Whew!  This behavior is critical for edge-case apps like bookmarks management, that work on the background profile data, unrelated to a browser window.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 1em;"&gt;When Chrome completely quits, it apparently sends an end-of-file (EOF) to your Messenger.  (I can’t see the EOF for sure because NSFileHandle probably swallows it, but I’m guessing this must be what happens.)  Anyhow, when your messenger receives an empty stdin from NSFileHandle, it should terminate itself gracefully too.  Or you can just wait for the system to kill it due to its parent process (Chrome) terminating.&lt;br /&gt;&lt;br /&gt;I&lt;/span&gt;’&lt;span style="font-size: 1em;"&gt;ve noticed one odd but probably harmless behavior and maybe beneficial behavior, which is that if Chrome is running with browser windows open in two different user profiles, and both have our extension loaded and consequently two of our Messenger tools are running, if you quit Chrome without closing the browser windows, then relaunch,&lt;/span&gt; &lt;em style="font-size: 1em;"&gt;two&lt;/em&gt;&lt;span style="font-size: 1em;"&gt; Messenger tools will launch, apparently one for each user profile, even though only one browser window opens (for the last-started user profile).  Probably, Chrome re-opens two background.html pages, one for each profile which had a browser window open when Chrome was quit.  If browser windows are closed first, then only one Messenger will launch, for the one browser window which opens.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 1em;"&gt;Native Message has a very nice, super-minimalist, low-level protocol.  You define your own higher-level protocols with commands and parameters (Use JSON!).  The design process is natural, and easily extensible; you can pretty much make it up as you go along.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 1em;"&gt;I think the Chrome team did a nice job on Native Messaging.  I just wish they&lt;/span&gt;’&lt;span style="font-size: 1em;"&gt;d done it four or five years ago, so I wouldn&lt;/span&gt;’&lt;span style="font-size: 1em;"&gt;t have had to design in and then design out NPAPI 😩&lt;br /&gt;&lt;br /&gt;* * * &lt;br /&gt;&lt;br /&gt;Update 2017-03-03.  Firefox now uses the Chrome extension system, with this same Native Messaging.  Future versions of our Firefox extension will use it.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 1em;"&gt;Safari extensions, unfortunately, still have so few capabilities that we’ve found no reason to bother writing one yet.&lt;/span&gt;
					&lt;/p&gt;&lt;/div&gt;
			</description>
			<pubDate>Wed, 30 Oct 2013 20:51:30 -0700</pubDate>
			<guid>http://www.sheepsystems.com/developers_blog/interprocess-communication.html</guid>
            <enclosure url="http://www.sheepsystems.com/_Media/chrome-native-messaging_med.png" length="152896" type="image/png"></enclosure>
			<category>IPC</category><category>Google Chrome</category><category>Native Messaging</category><category>NPAPI</category>
		</item>
		<item>
			<title>“Saving A Document” : Apple Errata</title>
			<link>http://www.sheepsystems.com/developers_blog/saving-a-document--apple.html</link>
			<description>
				&lt;div class="article-summary"&gt;&lt;p&gt;&lt;em&gt;I have more than once reported to Apple that their document section&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;Document-Based App Programming Guide for Mac&lt;br /&gt;    Alternative Design Considerations&lt;br /&gt;         Message Flow in the Document Architecture&lt;br /&gt;               Saving A Document&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;has given incorrect information since Mac OS X 10.7 was released in 2011.  As of this writing (2013-10-30), it is still incorrect.  Let this blog post serve as an errata until they rewrite it.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 1em;"&gt;The section &lt;/span&gt;&lt;em style="font-size: 1em;"&gt;Document-Based App Programming Guide for Mac &amp;gt; &lt;a href="https://developer.apple.com/library/mac/documentation/DataManagement/Conceptual/DocBasedAppProgrammingGuideForOSX/AdvancedTopics/AdvancedTopics.html#//apple_ref/doc/uid/TP40011179-CH7-SW21" target="_blank"&gt;Alternative Design Considerations&lt;/a&gt;&lt;/em&gt;&lt;a href="https://developer.apple.com/library/mac/documentation/DataManagement/Conceptual/DocBasedAppProgrammingGuideForOSX/AdvancedTopics/AdvancedTopics.html#//apple_ref/doc/uid/TP40011179-CH7-SW21" target="_blank"&gt;&lt;span style="font-size: 1em;"&gt; &amp;gt; &lt;/span&gt;&lt;em style="font-size: 1em;"&gt;Message Flow in the Document Architecture&lt;/em&gt;&lt;/a&gt; &lt;span style="font-size: 1em;"&gt;&amp;gt;&lt;/span&gt; &lt;em style="font-size: 1em;"&gt;Saving a Document&lt;/em&gt; &lt;span style="font-size: 1em;"&gt;has been incorrect since Lion was released.  Some of the errors are obvious - step 4 refers to method &lt;/span&gt;
					&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 13px;"&gt;              &lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: 13px;"&gt;saveToURL:&lt;br /&gt;           ofType:&lt;br /&gt; forSaveOperation:&lt;br /&gt;         delegate:&lt;br /&gt;  didSaveSelector:&lt;br /&gt;      contextInfo:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 1em;"&gt;This method is depracated, no longer used and does not appear in the diagram.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 1em;"&gt;But more importantly, the timeline (colored rectangles) along the left side of the graphic indicate that these methods invoke one another in a conventional "stack".  But that is not what happens any more.  Since 10.7, some of these methods return and only later are the methods higher in the stack (actually more "rightmost" because the time axis on this diagram is downward) invoked by the "perform synchronous activity" magic.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
			</description>
			<pubDate>Wed, 30 Oct 2013 20:51:30 -0700</pubDate>
			<guid>http://www.sheepsystems.com/developers_blog/saving-a-document--apple.html</guid>
            
			<category>Message Flow</category><category>NSDocument</category><category>Cocoa</category>
		</item>
		<item>
			<title>Perl fails @INC (again) after OS X upgrade</title>
			<link>http://www.sheepsystems.com/developers_blog/perl-fails-inc-again-after.html</link>
			<description>
				&lt;div class="article-summary"&gt;&lt;p&gt;After upgrading to Mac OS X 10.9 on my main Mac account today, as happens every time I upgrade Mac OS X, my Perl scripts didn’t work.  Again,
					&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 'Courier New';"&gt;Can't locate My/Module.pm in @INC (@INC contains:/Library/Perl/blah, /System/Library/Perl/blah, blah, blah…&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Sigh.  The problem is that @INC is hard-coded into Perl to contain only system directories, and so the installers for third-party Perl modules that I’ve downloaded from the &lt;a href="http://www.cpan.org/"&gt;Comprehensive Perl Archive Network (CPAN)&lt;/a&gt; put modules that I need into these system directories, which are wiped by Apple’s installers when you upgrade Mac OS X.
					&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 1em;"&gt;It doesn’t seem to bother the Linux geeks.  But in Mac OS X, we try to to keep all of&lt;/span&gt; &lt;em style="font-size: 1em;"&gt;our stuff&lt;/em&gt; &lt;span style="font-size: 1em;"&gt;in our Home directories.  (We also don’t like kill several weekends per year reinstalling our systems from scratch.)&lt;/span&gt;
					&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 1em;"&gt;Rather than getting them off of my Time Machine disk and installing them back into the same stupid place, this time I put them in my Home directory,&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 'Courier New';"&gt;~/Library/Perl/&lt;/span&gt;&lt;span style="font-size: 1em;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 1em;"&gt;and also I put all of the modules into that folder directly, foregoing the &lt;/span&gt;“&lt;span style="font-size: 1em;"&gt;5.10&lt;/span&gt;”&lt;span style="font-size: 1em;"&gt;, &lt;/span&gt;“&lt;span style="font-size: 1em;"&gt;5.12&lt;/span&gt;”&lt;span style="font-size: 1em;"&gt;, &lt;/span&gt;“&lt;span style="font-size: 1em;"&gt;5.16&lt;/span&gt;”&lt;span style="font-size: 1em;"&gt; etc. subfolders.  It doesn&lt;/span&gt;’&lt;span style="font-size: 1em;"&gt;t make any sense to me that these modules are associated with specific Perl versions.  I&lt;/span&gt;’&lt;span style="font-size: 1em;"&gt;m only running one version of Perl, and if I need to update a module, I need to update a module.  Old versions of modules, if that&lt;/span&gt;’&lt;span style="font-size: 1em;"&gt;s what those folders are for, don&lt;/span&gt;’&lt;span style="font-size: 1em;"&gt;t do me any good.&lt;/span&gt;
					&lt;/p&gt;&lt;/div&gt;
			</description>
			<pubDate>Tue, 22 Oct 2013 18:51:30 -0700</pubDate>
			<guid>http://www.sheepsystems.com/developers_blog/perl-fails-inc-again-after.html</guid>
            
			<category>Perl</category><category>INC</category><category>home</category><category>library</category>
		</item>
		<item>
			<title>Mavericks tried to Repack my Favorites Bar</title>
			<link>http://www.sheepsystems.com/developers_blog/bookmacster-caught-maverick-2.html</link>
			<description>
				&lt;div class="article-summary"&gt;&lt;p&gt;Got a little surprise today after upgrading to the public release of Mac OS X 10.9 Mavericks, which we hadn’t noticed in Apple’s beta builds.
					&lt;/p&gt;&lt;p&gt;BookMacster is configured on my Mac account to sync several browsers including Safari.  After a few minutes, possibly triggered by my responding affirmatively to take the Mavericks &lt;em&gt;Tour&lt;/em&gt;, BookMacster squawked that syncing had been stopped because too many changes were coming in from Safari.  Taking a look, I found that, by golly, there were a couple dozen new bookmarks and two folders named &lt;em&gt;News&lt;/em&gt; and &lt;em&gt;Popular&lt;/em&gt; in Safari’s &lt;em&gt;Favorites Bar&lt;/em&gt; (formerly called the &lt;em&gt;Bookmarks Bar&lt;/em&gt;).  There were bookmarks to Apple, iCloud, Facebook, Twitter, etc.
					&lt;/p&gt;&lt;p&gt;Apparently what happened is that &lt;strong&gt;Apple decided to repack my Favorites Bar with Safari's default bookmarks&lt;/strong&gt;.  These are bookmarks that I don’t want.  (If I’d wanted them, I would already have them.)  Then, &lt;strong&gt;BookMacster’s Safe Sync Limit stepped in and duly did the right thing&lt;/strong&gt;.  BookMacster saw all of these new bookmarks trying to come in, stopped, and told me that something was suspicious&lt;em&gt;.  &lt;/em&gt;
					&lt;/p&gt;&lt;/div&gt;
			</description>
			<pubDate>Tue, 22 Oct 2013 16:51:30 -0700</pubDate>
			<guid>http://www.sheepsystems.com/developers_blog/bookmacster-caught-maverick-2.html</guid>
            
			<category>Mavericks</category><category>Safari</category><category>Favorites</category><category>Favorites Bar</category><category>10.9</category>
		</item>
		<item>
			<title>Sparkle as a Subframework</title>
			<link>http://www.sheepsystems.com/developers_blog/sparkle-subfmwk.html</link>
			<description>
				&lt;div class="article-summary"&gt;&lt;p&gt;The &lt;a href="http://sparkle.andymatuschak.org/"&gt;Sparkle framework&lt;/a&gt; is built with an &lt;span style="font-family: 'Courier New'; font-size: 13px;"&gt;INSTALL_PATH&lt;/span&gt; set to &lt;span style="font-size: 13px; font-family: 'Courier New';"&gt;@loader_path/../Frameworks&lt;/span&gt;.  This works fine when Sparkle is embedded into an app or a plugin, but not if you're embedding Sparkle inside of another framework, as a "sub" framework.&lt;br /&gt;&lt;br /&gt;
					&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Short Explanation&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The short explanation is that &lt;span style="font-size: 13px; font-family: 'Courier New';"&gt;@loader_path&lt;/span&gt; is referenced to the &lt;em&gt;executable&lt;/em&gt; inside the package, so the path from it to its target depends on the directory structure of the hosting app, plugin or framework.  The directory structure of a plugin is the same as that of an app, so it "just works", as explained in the &lt;a href="https://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/ld.1.html"&gt;ld man page&lt;/a&gt;.  But a framework is different, so it needs a different path.&lt;br /&gt;&lt;br /&gt;
					&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Longer Explanation&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The INSTALL_PATH of  &lt;span style="font-size: 13px; font-family: 'Courier New';"&gt;@loader_path/../Frameworks&lt;/span&gt; works fine when Sparkle is embedded directly into an application or plugin.  In either case, the package looks like this…
					&lt;/p&gt;&lt;p&gt;   &lt;span style="font-size: 13px; font-family: 'Courier New';"&gt;Contents&lt;br /&gt;      MacOS&lt;br /&gt;         MyPlugin (Unix executable)&lt;br /&gt;      Resources&lt;br /&gt;      Frameworks&lt;br /&gt;         Sparkle.framework&lt;/span&gt;
					&lt;/p&gt;&lt;p&gt;because the &lt;span style="font-size: 13px; font-family: 'Courier New';"&gt;@loader path&lt;/span&gt; is &lt;span style="font-size: 13px; font-family: 'Courier New';"&gt;MacOS&lt;/span&gt;, the &lt;span style="font-size: 13px; font-family: 'Courier New';"&gt;..&lt;/span&gt; is &lt;span style="font-size: 13px; font-family: 'Courier New';"&gt;Contents&lt;/span&gt;, and &lt;span style="font-size: 13px; font-family: 'Courier New';"&gt;Frameworks&lt;/span&gt; is, nicely, a subfolder of &lt;span style="font-size: 13px; font-family: 'Courier New';"&gt;Contents&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;However, embedding Sparkle into another framework is different because of the different directory structure.
					&lt;/p&gt;&lt;/div&gt;
			</description>
			<pubDate>Mon, 22 Apr 2013 10:51:30 -0700</pubDate>
			<guid>http://www.sheepsystems.com/developers_blog/sparkle-subfmwk.html</guid>
            
			<category>Sparkle</category><category>@loader_path</category><category>Frameworks</category><category>INSTALL_PATH</category>
		</item>
		<item>
			<title>How to Stream Audio on the Web</title>
			<link>http://www.sheepsystems.com/developers_blog/stream-audio-web.html</link>
			<description>
				&lt;div class="article-summary"&gt;&lt;p&gt;I've recently needed to publish a website with streaming audio and was surprised how difficult it was to find code which would work on all computers, tablets and smartphones in year 2012, and also the number of professionally-designed websites which fail in this regard.  The answer appears to be in this &lt;a href="http://www.w3schools.com/html/html5_audio.asp" target="_blank"&gt;W3C Schools article&lt;/a&gt;.  The short version is: &lt;em&gt;Use &lt;strong&gt;HTML5 &lt;span style="font-family: 'Courier New';"&gt;&amp;lt;audio&amp;gt;&lt;/span&gt; backed by mp3 + ogg&lt;/strong&gt;&lt;/em&gt;.
					&lt;/p&gt;&lt;p&gt;Here is a demo…
					&lt;/p&gt;
					&lt;div class="first wide center"&gt;
						&lt;div style="" class="graphic"&gt;
							&lt;div class="figure-content HTMLElement"&gt;
								&lt;audio controls&gt;
								  &lt;source src="http://sheepsystems.com/files/BlogPost-2012-12-13.ogg" type="audio/ogg"&gt;
								  &lt;source src="http://sheepsystems.com/files/BlogPost-2012-12-13.mp3" type="audio/mpeg"&gt;
								Sorry, your browser does not support this audio stream.
								&lt;/audio&gt;
							&lt;/div&gt;
						&lt;/div&gt;
					&lt;/div&gt;&lt;p&gt;However, since the article is pretty old, I tested it on a number of current systems and found that it works in all of them, right out of the box, with no optional plugin installations.  Here is what I tested…
					&lt;/p&gt;&lt;p&gt;• Android (on a smart phone) : The &lt;em&gt;Internet&lt;/em&gt; app&lt;br /&gt;• iOS 6 (on iPad) : Safari web browser&lt;br /&gt;• iOS 6 (on iPad) : Atomic web browser&lt;br /&gt;• Mac OS X 10.8 : Firefox 18.0&lt;br /&gt;• Mac OS X 10.8 : Google Chrome 23.0&lt;br /&gt;• Mac OS X 10.8 : Safari 6.02&lt;br /&gt;• Mac OS X 10.8 : Opera 12.11&lt;br /&gt;• Windows 7 : Internet Explorer 9.0&lt;br /&gt;• Windows 7 : Firefox 17.0&lt;br /&gt;• Windows 7 : Google Chrome 23.0
					&lt;/p&gt;&lt;p&gt;In the code (&lt;em&gt;Show Page Source&lt;/em&gt;), please note that you &lt;strong&gt;must&lt;/strong&gt; provide &lt;strong&gt;two audio files,&lt;/strong&gt; &lt;strong&gt;.mp3 and .ogg&lt;/strong&gt;.  This is because, for some reason which a mere mortal electrical engineer cannot understand (probably involving patents or &lt;em&gt;&lt;a href="http://en.wikipedia.org/wiki/Not_invented_here"&gt;not invented here&lt;/a&gt;&lt;/em&gt;), Firefox (by my testing) and Opera (according to the aformentioned article) cannot play mp3 files.  But, lo, they can play ogg files.  Conversely, the other browsers seem able to play mp3, but not always ogg.  There are other file formats which are supported by various browsers, but it seems that the combination of mp3 + ogg is the smallest combination which will work in all browsers.
					&lt;/p&gt;
				&lt;/div&gt;
			</description>
			<pubDate>Thu, 13 Dec 2012 16:51:30 -0800</pubDate>
			<guid>http://www.sheepsystems.com/developers_blog/stream-audio-web.html</guid>
            <enclosure url="http://sheepsystems.com/files/BlogPost-2012-12-13.mp3" type="audio/mpeg"></enclosure>
			<category>HTML5</category><category>audio</category><category>stream</category><category>browsers</category>
		</item>
		<item>
			<title>Devs: Getting Trouble Data from Users</title>
			<link>http://www.sheepsystems.com/developers_blog/devs-getting-trouble-data.html</link>
			<description>
				&lt;div class="article-summary"&gt;&lt;p&gt;I spent some time yesterday improving our&lt;em&gt; Trouble Zipper&lt;/em&gt; AppleScript package.  It now finds crash reports generated by Mac OS X 10.7 and 10.8.  (Apparently, we haven't needed to look at many crash reports since 10.7!)  Also, using a new Perl script in the package (&lt;em&gt;filterConsoleLogs.pl&lt;/em&gt;), the filtering of console log entries for those written only by a target app now gets all lines of multi-line entries.
					&lt;/p&gt;&lt;p&gt;The AppleScript source, and other useful scripts and tools in the package, are all open for any other interested developers to dig in to.  Unfortunately, if your app is sandboxed, you may not be able to allow your users to download and run such a &lt;em&gt;Trouble Zipper&lt;/em&gt; from the Help menu in your app, as BookMacster does.  But if you can figure out a way to deliver it to your users, you might want to &lt;a href="http://sheepsystems.com/files/SSYTroubleZipper.zip"&gt;download Trouble Zipper&lt;/a&gt;, tear it apart, and use whatever you like.
					&lt;/p&gt;&lt;p&gt;Oh, but, Apple gave us one more annoying surprise in Mountain Lion.  The &lt;em&gt;applet&lt;/em&gt; executable in &lt;em&gt;Trouble Zipper&lt;/em&gt;'s &lt;span style="font-family: 'Andale Mono';"&gt;Contents/MacOS/&lt;/span&gt; subdirectory is a triple-fat binary: x86_64, i386, and ppc.  &lt;em&gt;AppleScript Editor&lt;/em&gt; in Mountain Lion will not open it, apparently because it does not like the PowerPC (ppc) architecture in the &lt;em&gt;applet&lt;/em&gt;.  And in characteristic Apple oversimplified style, the error dialog simply says that the script &lt;em&gt;cannot be opened&lt;/em&gt;.  If you don't need to support any more PowerPC users, you can fix this problem by swapping in the &lt;em&gt;applet&lt;/em&gt; from any other AppleScript application package you have.  Or, you can work around it by opening &lt;span style="font-family: 'Andale Mono';"&gt;Contents/Resources/Scripts/main.scpt&lt;/span&gt; inside the package, instead of the package itself, and editing that.  &lt;em&gt;AppleScript Editor&lt;/em&gt; will occasionally give you some crap about not being able to save the file because another app has modified it.  Just click &lt;em&gt;Save Anyway&lt;/em&gt;.  Also, before testing or shipping, you'll need to manually click &lt;em&gt;Compile&lt;/em&gt; before &lt;em&gt;Save&lt;/em&gt;.
					&lt;/p&gt;&lt;/div&gt;
			</description>
			<pubDate>Wed, 29 Aug 2012 08:51:30 -0700</pubDate>
			<guid>http://www.sheepsystems.com/developers_blog/devs-getting-trouble-data.html</guid>
            
			<category>developer</category><category>trouble</category><category>filter</category><category>console logs</category><category>logs</category><category>Mac OS X</category><category>AppleScript Editor</category><category>Mountain Lion</category>
		</item>
		<item>
			<title>Tree Trimming is Serious Mechanical Engineering</title>
			<link>http://www.sheepsystems.com/developers_blog/tree-trimmers-computer.html</link>
			<description>
				&lt;div class="article-summary"&gt;&lt;p&gt;It's been said that all jobs are difficult in their own way.  Even though I rarely eat at restaurants, I respect the people who work there.  Trimming trees can involve some complicated mechanical engineering, especially in predicting how branches are going to fall when working in urban areas where life and property are at stake.  Engineers designing products can run computer simulations &lt;em&gt;and&lt;/em&gt; build prototypes before cutting into production.  Tree trimmers contemplating a cut like this one that David Henschel did in front of our house yesterday can do neither.  You only get one chance, and the only tools available are experience and luck.
					&lt;/p&gt;&lt;p&gt;The shorter pieces were cut from the lift, but the long piece, was one cut made from the grouond.  Wow.  It came down with only a few bent trackers in the chain.
					&lt;/p&gt;&lt;/div&gt;
			</description>
			<pubDate>Mon, 06 Aug 2012 04:23:50 -0700</pubDate>
			<guid>http://www.sheepsystems.com/developers_blog/tree-trimmers-computer.html</guid>
            <enclosure url="http://www.sheepsystems.com/_Media/treetrim_med.png" length="4526568" type="image/png"></enclosure>
			
		</item>
		<item>
			<title>Scroll Different</title>
			<link>http://www.sheepsystems.com/developers_blog/scroll-different.html</link>
			<description>
				&lt;div class="article-summary"&gt;&lt;p&gt;Because I got the Developer Preview of Lion, I didn't get the warning dialog that most people got about the "new and improved" scrolling direction.  For weeks, during the preview, I thought that the upside-down behavior was because of my old Macally trackball.  Then I tried an Apple mouse and found that it was backwards too!  I couldn't find anything in System Preferences ▸ Mouse.  Finally I called AppleCare and was pointed to the checkbox…
					&lt;/p&gt;&lt;p&gt;
					&lt;/p&gt;&lt;p&gt;What in the world does that mean?  After a few seconds I guessed what they meant by &lt;em&gt;content&lt;/em&gt;, then activated the engineering side of my brain, and visualized it moving as described.  "Oh, oh!  Now I get it."  Apparently I had skimmed over that checkbox, thinking that since it was so complicated it must not be what I was looking for.
					&lt;/p&gt;&lt;p&gt;Especially with early versions of BookMacster, people have commented to me that the control names, tooltips and other text "strings" as we call them were too long, too technical and hard to understand.  I've been working on simplifying those, trying to be more like Apple.  But with this checkbox, I see that Apple is going in the other direction.  I told the rep on the phone that the title of that checkbox should have been something more understandable like this…
					&lt;/p&gt;&lt;/div&gt;
			</description>
			<pubDate>Fri, 12 Aug 2011 10:23:10 -0700</pubDate>
			<guid>http://www.sheepsystems.com/developers_blog/scroll-different.html</guid>
            <enclosure url="http://www.sheepsystems.com/_Media/image-4_med.jpeg" length="45978" type="image/tiff"></enclosure>
			<category>scroll</category><category>backwards</category><category>Mac OS X</category><category>Lion</category>
		</item>
		<item>
			<title>The #1 Winter Bicycling Slide in San José</title>
			<link>http://www.sheepsystems.com/developers_blog/slippery_when_leaves.html</link>
			<description>
				&lt;div class="article-summary"&gt;&lt;p&gt;When I lived in Warren, Michigan in the 1970s I would rotate commuting by automobile, public bus or bicycle.  My safety rule for snow was: No bicycling if more than one inch of fresh snow.  During the 1990s I visited Boston and was amazed to see bicyclists older than me commuting in any amount of snow.
					&lt;/p&gt;&lt;p&gt;But I've learned, more than once, that we have a &lt;i&gt;winter slide&lt;/i&gt; here in San José, California too.  I've had to, since I no longer own an automobile, and public bus rarely goes where and when I want to.  The worst months for it are: &lt;i&gt;November and December&lt;/i&gt;.  It's &lt;i&gt;fallen leaves mixed with rain&lt;/i&gt;.  Being aged now, I'm more careful – during our first winter storm(*) a few weeks ago, I was actually &lt;i&gt;too careful&lt;/i&gt; and skidded down while stopping for a motorist coming out of a driveway who had probably already seen me and was waiting.  Thanks to &lt;a href="http://www.easyracers.com/"&gt;Easy Racer's&lt;/a&gt; recumbent bicycle technology, I only got a skinned elbow that was very sensitive for a few weeks, instead of another broken collar bone.  No incidents occurred during my commute to or from the Haines Swim Center in Santa Clara this morning.
					&lt;/p&gt;&lt;/div&gt;
			</description>
			<pubDate>Mon, 07 Dec 2009 13:45:10 -0800</pubDate>
			<guid>http://www.sheepsystems.com/developers_blog/slippery_when_leaves.html</guid>
            
			<category>Snow Leopard</category><category>kludge</category>
		</item>
 	</channel>
</rss>