<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>[mar blog].</title>
	<atom:link href="http://www.smallersystems.com/blogs/mar/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.smallersystems.com/blogs/mar</link>
	<description>just another blog</description>
	<lastBuildDate>Sat, 21 Mar 2009 03:33:08 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Problems with the OS X 10.5.5 update and X11</title>
		<link>http://www.smallersystems.com/blogs/mar/2008/10/17/problems-with-the-os-x-1055-update-and-x11/</link>
		<comments>http://www.smallersystems.com/blogs/mar/2008/10/17/problems-with-the-os-x-1055-update-and-x11/#comments</comments>
		<pubDate>Sat, 18 Oct 2008 00:47:02 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[OS X]]></category>
		<category><![CDATA[osx X11 Apple]]></category>

		<guid isPermaLink="false">http://www.smallersystems.com/people/mar/blog/?p=84</guid>
		<description><![CDATA[After upgrading to OS X 10.5.5 I ran into an issue with X11 refusing to start. I first noticed this issue as a problem with ssh hanging while trying to establish a connection. When I dug into this problem I noticed that ssh was hanging immediately after some X11 related operations were performed. I have [...]]]></description>
			<content:encoded><![CDATA[<p>After upgrading to OS X 10.5.5 I ran into an issue with X11 refusing to start. I first noticed this issue as a problem with <span style="font-family: courier, monospace;">ssh</span> hanging while trying to establish a connection. When I dug into this problem I noticed that <span style="font-family: courier, monospace;">ssh</span> was hanging immediately after some X11 related operations were performed. I have <span style="font-family: courier, monospace;">ssh</span> configured to set up X11 forwarding unless otherwise specified on the ssh command line. By explicitly disabling X11 forwarding (using <span style="font-family: courier, monospace;">ssh -x</span>) the connection would connect normally. Unfortunately this means that the very cool auto-start of X11 that Apple implemented with OS X 10.5 is lost.</p>
<p>With X11 being the suspected cause of the <span style="font-family: courier, monospace;">ssh</span> problem I tried launching <span style="font-family: courier, monospace;">X11.app</span> manually by double clicking the X11 application in <span style="font-family: courier, monospace;">/Applications/Utilities/X11.app</span>. I noticed that X11 did not bounce in the Dock. In fact X11 did not appear in the Dock at all. That&#8217;s odd&#8230;</p>
<p>I noticed the following lines repeating in the system logs:<br />
<code style="font-size: 90%">Oct 17 10:25:34 macBook com.apple.launchd[113] (org.x.startx): Throttling respawn: Will start in 10 seconds<br />
Oct 17 10:26:04 macBook com.apple.launchd[113] (org.x.startx): Throttling respawn: Will start in 10 seconds</code></p>
<p>At least these log entries confirm that X11 is unhappy.</p>
<p>The machine on which I first noticed this problem may have had the <a href="http://xquartz.macosforge.org/trac/wiki">XQuartz</a> updates to X11 installed at some point. To eliminate this third-party code as a contributor to the problem I attempted to reproduce the problem a few configurations:</p>
<p><center></p>
<table width="80%" style="border-collapse: collapse;">
<tr style="background: rgb(221, 221, 221);">
<th style="text-align: left; padding: 2px 8px 2px 8px;">Before upgrade</th>
<th style="text-align: left; padding: 0 8px 0 8px;">After upgrade</th>
<th style="padding: 0 8px 2px 8px;">Exhibits problem?</th>
</tr>
<tr>
<td style="padding: 0 0 1em 8px;">OS X 10.5.4 (PPC)<br />XQuartz not installed</td>
<td style="padding: 0 0 1em 8px;">OS X 10.5.5 (PPC)<br />XQuartz not installed</td>
<td style="text-align: center; vertical-align: middle;">yes</td>
</tr>
<tr>
<td style="padding: 0 0 1em 8px;">OS X 10.5.4 (Intel)<br />Apple X11 installed<br />XQuartz not installed</td>
<td style="padding: 0 0 1em 8px;">OS X 10.5.5 (Intel)<br />XQuartz not installed</td>
<td style="text-align: center; vertical-align: middle;">yes</td>
</tr>
<tr>
<td style="padding: 0 0 1em 8px;">OS X 10.5.4 (Intel)<br />XQuartz not installed</td>
<td style="padding: 0 0 1em 8px;">OS X 10.5.5 (Intel)<br />XQuartz installed (updated to 2.3.1)</td>
<td style="text-align: center; vertical-align: middle;">yes</td>
</tr>
<tr>
<td style="padding: 0 0 1em 8px;">OS X 10.5.4 (Intel)<br />XQuartz installed</td>
<td style="padding: 0 0 1em 8px;">OS X 10.5.5 (Intel)<br />XQuartz installed (updated to 2.3.1)</td>
<td style="text-align: center; vertical-align: middle;">yes</td>
</tr>
</table>
<p></center></p>
<p>Since the problem can be reproduced on machines that have never had XQuartz installed I can rule out XQuartz as contributing to the problem.</p>
<p>Based on a tip found on the Apple support forums I investigated whether any of my shell start-up scripts had any impact on the problem. It appears that Apple has made a change to the way that X11 starts in 10.5.5. These changes make X11 start-up brittle in the face of the common shell start-up idiom of using the <span style="font-family: courier, monospace;">exec</span> command to replace the current shell process with another process.</p>
<p>I have used my old <span style="font-family: courier, monospace;">.profile</span> start-up script for bash has been in use on various machines since OS X 10.2 without problems. This old script was:</p>
<blockquote><pre>if [ -e /sw/bin/tcsh ]; then
    # We prefer to use the fink installed version of tcsh..
    exec /sw/bin/tcsh
elif [ -e /bin/tcsh ]; then
    # ... but we will use the OS X installed version if it exists
    echo "warning: using Apple version of tcsh from /bin/tcsh"
    exec /bin/tcsh
else
    echo "error: could not find a version of tcsh to exec!"
    echo "       dropping to default bash setup (no fink environment)"
fi</pre>
</blockquote>
<p>Nothing exciting there other than the <span style="font-family: courier, monospace;">exec</span>. <span style="font-family: courier, monospace;">exec</span> is commonly used in this manner to dynamically change the user&#8217;s shell for typically one of two reasons:</p>
<ul>
<li>to change to a user shell that uses a different syntax (such as csh or ksh) without risking breaking system shell scripts and installer scripts, or</li>
<li>to lock the user into a program that limits what the user can do on the system. (For example, locking the user into a menu-driven terminal program rather than providing full shell access.)</li>
</ul>
<p>Back when I worked on Solaris and Ultrix (showing my age) machines, the guidance was that shells used to start system services should be executed with options that prevent execution of user-supplied shell configuration files. This was advised to ensure that commands and environment variables applied by the user-supplied configuration files would not interfere with the system service. Said in another way, you want to ensure that your services scripts are executing in a known environment rather than an environment that the user has futzed with. <span style="font-family: courier, monospace;">bash</span> provides the options <span style="font-family: courier, monospace;">&#8211;noprofile</span> and <span style="font-family: courier, monospace;">&#8211;norc</span> to provide this level of control over the script execution environment.</p>
<p>Working on the theory that the <span style="font-family: courier, monospace;">exec</span> commands are tickling this X11 start-up problem I have worked around the problem by switching to the following <span style="font-family: courier, monospace;">.profile</span> start-up script:</p>
<blockquote><pre>if [ -t 0 ]; then
  export INTERACTIVE=true
else
  export INTERACTIVE=false
fi

if [ "${INTERACTIVE}" == "true" ]; then
  if [ -e /sw/bin/tcsh ]; then
    # We prefer to use the fink installed version of tcsh..
    exec /sw/bin/tcsh
  elif [ -e /bin/tcsh ]; then
    # ... but we will use the OS X installed version if it exists
    echo "warning: using Apple version of tcsh from /bin/tcsh"
    exec /bin/tcsh
  else
    echo "error: could not find a version of tcsh to exec!"
    echo "       dropping to default bash setup (no fink environment)"
  fi
fi</blockquote>
</pre>
<p>This work-around avoids tickling the problem with the Apple start-up scripts for X11 by determining if the shell invoking my <span style="font-family: courier, monospace;">.profile</span> is an interactive shell (i.e. something that a user will type commands into). If the shell is not interactive then set an environment variable and exit. Otherwise, the <span style="font-family: courier, monospace;">.profile</span> file executes the commands in my old start-up script.</p>
<p>Note the use of <span style="font-family: courier, monospace">test -t 0</span> to determine if we are an interactive shell. Until recently I used <span style="font-family: courier, monospace">tty -s</span> to determine if the script was in an interactive shell. Apparently POSIX has deprecated the <span style="font-family: courier, monospace">-s</span> option so <span style="font-family: courier, monospace">test -t 0</span> may be a safer choice.</p>
<img src="http://www.smallersystems.com/blogs/mar/5bd81536/266bbf65/CCBot/1.0 (+http://www.commoncrawl.org/bot.html).gif" />]]></content:encoded>
			<wfw:commentRss>http://www.smallersystems.com/blogs/mar/2008/10/17/problems-with-the-os-x-1055-update-and-x11/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How to install Windows XP on an external USB drive connect to an Apple MacBook</title>
		<link>http://www.smallersystems.com/blogs/mar/2008/05/31/install-windows-xp-on-an-external-usb-drive-connect-to-an-apple-macbook/</link>
		<comments>http://www.smallersystems.com/blogs/mar/2008/05/31/install-windows-xp-on-an-external-usb-drive-connect-to-an-apple-macbook/#comments</comments>
		<pubDate>Sun, 01 Jun 2008 06:29:17 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Operating Systems]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[USB]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.smallersystems.com/people/mar/blog/?p=81</guid>
		<description><![CDATA[In August 2006, I posted instructions on how to install Windows XP onto an external USB drive to the macrumors.com forums. I&#8217;m reposting the instructions here so that this information does not get lost.
Some notes on these instructions:

These instructions result in an installation of Windows XP that is completely contained on an external USB drive. [...]]]></description>
			<content:encoded><![CDATA[<p>In August 2006, I posted instructions on how to install Windows XP onto an external USB drive to the macrumors.com forums. I&#8217;m reposting the instructions here so that this information does not get lost.</p>
<p>Some notes on these instructions:</p>
<ul>
<li>These instructions result in an installation of Windows XP that is completely contained on an external USB drive. Other approaches usually create a Windows partition on the internal drive.</li>
<li>The instructions <b>require</b> you to remove your internal drive from your MacBook during the installation. If you do not remove the internal drive you risk damaging the operating systems installed on your internal drive. Also, if the internal drive is not removed then Windows will not correctly install onto the external drive.</li>
<li>For the past year I have relied on VMware to eliminate the need to boot to Windows on bare hardware.</li>
</ul>
<p><b>Windows XP on USB for MacBook instructions:</b></p>
<div style="margin: 0 3em 0 3em; background: #DDDDDD; padding: 2em 2em 2em 3em;">
I have completed this install 4 different times.</p>
<p>Steps:</p>
<ol>
<li>Modify Windows install CD to support booting off a USB drive. (Instructions are on the web at <a href="http://www.ngine.de/index.jsp?pageid=4176">http://www.ngine.de/index.jsp?pageid=4176</a>.)</li>
<li>Remove internal hard drive from MacBook.</li>
<li>Connect external USB drive to MacBook.</li>
<li>Boot from modified Windows install CD.</li>
<li>Progress through Windows install, creating partitions and formating the partitions as you see fit. In most of my installed I partitioned the drive under OS X using a firewire connection to the drive since Disk Tool isn&#8217;t always happy partitioning USB drives. I have also successfully used a GParted boot disk to partition an external USB drive and then running the Windows installer without modifying the partition table on the external drive.</li>
<li>Wait for about 34 minutes for the Windows install to finish.</li>
<li>Reboot into Windows on the external drive.</li>
<li>Install the Apple device drivers for windows.</li>
<li>Replace internal drive.</li>
</ol>
<p>After all of this you will be able to boot into OS X. You will not be able to boot into Windows by holding down the option key when booting. Instead you will need to connect the USB drive to a running OS X system, open the Startup Disk Preference Pane and select the windows partition. Then when you reboot you will boot into Windows. To return to OS X you need to use the Windows Startup Disk control panel to select OS X.</p>
<p>(OS X will also boot if the USB drive is not connected.)</p>
<p>This fiddling with the Startup Disk Preference Pane is a limitation that I haven&#8217;t found a way to work around. For me, I can live with this since I only boot to Windows occasionally.
</p></div>
<p>Additional notes:</p>
<ul>
<li>I have always plugged my USB drive into the rear-most USB port on my MacBook (the USB port closest to the MagSafe power connector). Some forum posts report that using another USB port results in Windows errors.</li>
<li>Windows is unable to use a pagefile that on an external USB drive. After completing a install based on these instructions you will not be able to set up a working pagefile for Windows. Since I rarely boot to Windows and only then put it to light use then my 2GB of main memory means that I don&#8217;t require a working pagefile. Realistically, if you have less than 1.5GB of RAM in your Mac then you are will have problems with Windows running out of memory. Your mileage may vary.</li>
<li>Even after following these instructions exactly some people have reported that they are unable to successfully boot Windows. It is likely that these failed attempts are due to differences in USB enclosure implementations and/or Windows memory issues.</li>
</ul>
<img src="http://www.smallersystems.com/blogs/mar/5bd81536/266bbf65/CCBot/1.0 (+http://www.commoncrawl.org/bot.html).gif" />]]></content:encoded>
			<wfw:commentRss>http://www.smallersystems.com/blogs/mar/2008/05/31/install-windows-xp-on-an-external-usb-drive-connect-to-an-apple-macbook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Embedding a command line tool within a Cocoa application</title>
		<link>http://www.smallersystems.com/blogs/mar/2008/05/23/embedding-a-command-line-tool-within-a-cocoa-application/</link>
		<comments>http://www.smallersystems.com/blogs/mar/2008/05/23/embedding-a-command-line-tool-within-a-cocoa-application/#comments</comments>
		<pubDate>Fri, 23 May 2008 17:41:11 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[cocoa]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://www.smallersystems.com/people/mar/blog/?p=80</guid>
		<description><![CDATA[I'm developing in XCode and have manged to import the source code for the command line tool as say <code>command_line.c</code>. What do I need to do to have this file built as a command line tool that is embedded in the main Cocoa application?]]></description>
			<content:encoded><![CDATA[<p>Back in 2006 I posted a forum question seeking help with embedding a command line tool inside a Cocoa application. After a few days I had muddled out a way to both embed the command line tool and set up XCode to automatically build the command line tool when the Cocoa wrapper is rebuilt. I posted my solution answering my own question.</p>
<p>Recently I received a message from someone who stumbled on my solution and found it useful. I&#8217;m reposting the solution here so that this information does not get lost.</p>
<p><b>My original question:</b></p>
<div style="margin: 0 3em 0 3em; background: #DDDDDD; padding: 2em 2em 2em 3em;">I&#8217;m hacking together a small Cocoa application in XCode. I have all the GUI and events coded up and now I need to integrate a command line tool that I coded up in C a while back.</p>
<p>Poking around in the package contents for a few applications I&#8217;ve noticed that it is not uncommon for developers to package up small command line tools within the main Cocoa application. Presumably these command line tools are executed as a new process from the Cocoa application.</p>
<p>I&#8217;m developing in XCode and have manged to import the source code for the command line tool as say <code>command_line.c</code>. What do I need to do to have this file built as a command line tool that is embedded in the main Cocoa application?
</div>
<p><b>My solution:</b><br />
(Warning: Long and technical post.)<br />
<span id="more-80"></span></p>
<div style="margin: 0 3em 0 3em; background: #DDDDDD; padding: 2em 2em 2em 3em;">
I wanted to end up with the application structure of:</p>
<div style="margin: 0 3em 0 3em; font-family: courier, monospace; background: #FFFFFF; padding: 0 1em 1em 0.5em;">
<pre>MyCocoaApp.app/
    Info.plist
    Contents/
        MacOS/
            MyCocoaApp
            some_command_line_tool
        PkgInfo/
        ...</pre>
</div>
<p>Where <code>MyCocoaApp</code> is the main Cocoa executable for this application and <code>some_command_line_tool</code> is a standard BSD C application coded to know nothing about Objective-C or Cocoa.</p>
<p>After creating a Cocoa application project for <code>MyCococaApp.app</code> in X-Code the steps below will add the command line tool into the project.</p>
<p>First we need to add the source files for <code>some_command_line_tool</code> into the X-Code project. In this example the command line tool is implemented in one file named <code>some_command_line_tool.c</code>.</p>
<ol>
<li>Click to highlight the project group for <code>MyCocoaApp</code> in X-Code. This is the first item in the <i>Groups &#038; Files</i> tree view.</li>
<li>Right-click (control-click) on the project group and select the <i>Add->New File&#8230;</i> option from the context menu.</li>
<li>Select <i>BSD C File</i> in the File Assistant and click <i>Next</i>.</li>
<li>Specify a name for the file, in this example the name is <code>some_command_line_tool.c</code>.</li>
<li>Accept the default location and select the <code>MyCocoaApp</code> from the <i>Add to Project</i> drop-down.</li>
<li>Do not select any <i>Targets</i>.</li>
<li>Click <i>Finish</i>.</li>
</ol>
<p>Now we need to tell X-Code about this new command line by setting up a new target for it. This target will compile the <code>some_command_line_tool.c</code> file to produce the <code>some_command_line_tool</code> executable.</p>
<ol>
<li>Double-Click to expand the <i>Targets</i> group in the <i>Groups &#038; Files</i> tree view.</li>
<li>Right-Click (control-click) on the <i>Targets</i> group and select the <i>Add->New Target..</i> option from the context menu.</li>
<li>Select <i>BSD->Shell Tool</i> in the Target Assistant and click <i>Next</i></li>
<li>Specify a name for the target, in this example the name is <code>some_command_line_tool</code>.</li>
<li>Select the <code>MyCocoaApp</code> project from the <i>Add to Project</i> drop-down.</li>
<li>Click <i>Finish</i>.</li>
<li>Close the Target Info window that opens.</li>
</ol>
<p>You can now select the <code>some_command_line_tool</code> as the active target from the project menu and open <code>some_command_line_tool.c</code> to hack away at implementing the command line tool and testing it. Once you have it implemented, set the active target for the project back to the Cocoa target <code>MyCocoaApp</code> and continue with these instructions.</p>
<p>Since our Cocoa application will invoke the command line tool we want to set up a dependency between the Cocoa application target and the command line tool target. This dependency will ensure that whenever the Cocoa application target is built then the command line tool will also be built.</p>
<ol>
<li>Right-Click (control-click) on the <code>MyCocoaApp</code> target and select the <i>Get Info</i> option.</li>
<li>In the Target Info window that pops up select the <i>General</i> tab.</li>
<li>Click on the + button at the bottom of the window and add the command line tool target from the pop-up list.</li>
<li>Close the Target Info window.</li>
</ol>
<p>Now, if you select the Project group and select <i>Build->Clean All Targets</i> from the menubar followed by a build on the <code>MyCocoaApp</code> target you should notice that the <code>some_command_line_tool</code> is also built.</p>
<p>The remaining step is to automate copying the <code>some_command_line_tool</code> executable file into the correct place in the <code>MyCococaApp.app</code> bundle. This is done by adding a new build phase to the <code>MyCococaApp</code> target.</p>
<ol>
<li>Right-Click (control-click) on the <code>MyCocoaApp</code> target and select the <i>Add->New Build Phase->New Copy Files Build Phase</i> option.</li>
<li>You want to copy an executable file so set the <i>Destination</i> to be <i>Executable</i> in the pop-up window. Do not specify a <i>Path</i>. The <i>Destination</i> setting means that the files copied in this phase will be copied to <code>Contents/MacOS</code> in the Cocoa application bundle. The <i>Path</i> setting is to specify a sub-path below the MacOS folder.</li>
<li>Close the Copy Files Phase Info window.</li>
<li>Double-click to expand the <code>MyCocoaApp</code> target and notice the <i>Copy Files</i> target at the bottom of the build phases.</li>
<li>Click to highlight the project group for <code>MyCocoaApp</code>.</li>
<li>Find your <code>some_command_line_tool</code> executable file in the right side of the window and drag-and-drop the file onto the new <i>Copy Files</i> phase in the <code>MyCocoaApp</code> target.</li>
<li>Clean and build the Cocoa application target.</li>
</ol>
<p>If you now use the Finder or Terminal to navigate to the build folder in your X-Code project folder you will find the Cocoa application. Navigating into the package contents for the application should show both <code>MyCocoaApp</code> and <code>some_command_line_tool</code> executables in the MacOS folder.
</div>
<img src="http://www.smallersystems.com/blogs/mar/5bd81536/266bbf65/CCBot/1.0 (+http://www.commoncrawl.org/bot.html).gif" />]]></content:encoded>
			<wfw:commentRss>http://www.smallersystems.com/blogs/mar/2008/05/23/embedding-a-command-line-tool-within-a-cocoa-application/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>I&#8217;d like to buy a vowel&#8230; will the iPhone bring English to SMS?</title>
		<link>http://www.smallersystems.com/blogs/mar/2007/07/13/id-like-to-buy-a-vowel-will-the-iphone-bring-english-to-sms/</link>
		<comments>http://www.smallersystems.com/blogs/mar/2007/07/13/id-like-to-buy-a-vowel-will-the-iphone-bring-english-to-sms/#comments</comments>
		<pubDate>Fri, 13 Jul 2007 17:50:29 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[User Interface]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[sms]]></category>

		<guid isPermaLink="false">http://www.smallersystems.com/people/mar/blog/2007/07/13/id-like-to-buy-a-vowel-will-the-iphone-bring-english-to-sms/</guid>
		<description><![CDATA[

14 days into the iPhone and I&#8217;m very happy with the iPhone. There are omitted features that would be nice to have, such as a List application. But everything the phone currently does it does well. I haven&#8217;t got lost in the iPhone interface at any time unlike every other mobile phone I&#8217;ve used. The [...]]]></description>
			<content:encoded><![CDATA[<div style="margin: 0pt 0pt 0px 16px; float: right; height: auto; width: 192px;"><img src='http://www.smallersystems.com/people/mar/blog/wp-content/uploads/2007/07/iphonesms.png' alt='iphonesms.png' />
</div>
<p>14 days into the iPhone and I&#8217;m very happy with the iPhone. There are omitted features that would be nice to have, such as a List application. But everything the phone currently does it does well. I haven&#8217;t got lost in the iPhone interface at any time unlike every other mobile phone I&#8217;ve used. The experience has been so good that I am happy to discount the mail issues and SyncServices corruption on my Mac last week as an oddity with my setup. The SyncServices corruption ended up taking a day to resolve by moving all my files into a fresh OS X account.</p>
<p>Last night I used the iPhone SMS application for the first time. I typed out my message. It wasn&#8217;t until 3 lines into the message before I realized that I was typing complete sentences. I felt no need 4 sms spk.</p>
<p>Vowels are here, punctuation too. Hello prepositions, how I missed you.</p>
<p>Back in Australia, sending an SMS was a few cents a message with SMS service included in the phone service. So SMS charges ended up being background noise in my mobile phone costs. It wouldn&#8217;t surprise me if 50% of my Australian mobile phone use was short messages.&#8221;xing hbr bdg &#8211; b @ qvb in 15&#8243; was a common message to sync up with friends in the city. Hmmm, that&#8217;s almost as ugly as writing Perl.</p>
<p>In the USA I&#8217;ve found SMS to be not worth using. This avoidance has been as much about the per message cost as it was about messages not getting through to the receiver and the way that each of my US cell phones have made writing a short messages difficult.</p>
<p>Part of the issue with SMS on my US phones was that a ridiculous amount of screen real-estate occupied by non-message elements: To, From, and Subject fields that were not relevant to SMS, soft-button labels that were not needed for the SMS task, an so on. The iPhone fixes this issue by virtue of its large, high-res screen. Additionally, the iPhone SMS application is focused solely on the SMS task showing the SMS history, the current SMS, the keyboard and a send button. The SMS history is shown as an instant-message like history above the current SMS text area. The result is a very simple UI for what is essentially a very simple task.</p>
<p>This simplification is a result of Apple&#8217;s design aesthetic, but I also wonder if it is also a side-effect of building phone software in individual pieces rather than as a monolithic block of code that handles all phone functions. Each function on the iPhone (SMS, Phone, Address Book, Mail, Settings, Safari, etc) is implemented as a separate stand-alone application. This focus on an application doing one task well rather than trying to solve everything in one application leads to simpler and more task-focused applications.</p>
<p>It might be the IM-like history view. It may be that the message that I am composing fits onto the screen. It may just be my time away from SMS over the past 4 years. In all likelihood it is probably the combination of these aspects that result in making it feel natural to write short messages using actual English on the iPhone.</p>
<p>Though it&#8217;s probably too much to hope that the iPhone will bring back natural language and relegate SMS-speak to the dustbin of history. At least the iPhone helps to show SMS-speak for what it is&mdash;a kludge to deal with bad SMS user interfaces of the past.</p>
<img src="http://www.smallersystems.com/blogs/mar/5bd81536/266bbf65/CCBot/1.0 (+http://www.commoncrawl.org/bot.html).gif" />]]></content:encoded>
			<wfw:commentRss>http://www.smallersystems.com/blogs/mar/2007/07/13/id-like-to-buy-a-vowel-will-the-iphone-bring-english-to-sms/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>iPhone Firmware&#8230; come out, come out, wherever you are.</title>
		<link>http://www.smallersystems.com/blogs/mar/2007/07/01/iphone-firmware-come-out-come-out-wherever-you-are/</link>
		<comments>http://www.smallersystems.com/blogs/mar/2007/07/01/iphone-firmware-come-out-come-out-wherever-you-are/#comments</comments>
		<pubDate>Sun, 01 Jul 2007 17:25:34 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[OS X]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.smallersystems.com/people/mar/blog/2007/07/01/iphone-firmware-come-out-come-out-wherever-you-are/</guid>
		<description><![CDATA[After poking at these crash report files I spent a little time searching my MacBook to find the iPhone firmware. It turns out that the firmware is not part of the basic iTunes 7.3 install.
Somehow I got the iPhone Mail client into a weird state where it was downloading email but  would only show [...]]]></description>
			<content:encoded><![CDATA[<p>After poking at these crash report files I spent a little time searching my MacBook to find the iPhone firmware. It turns out that the firmware is not part of the basic iTunes 7.3 install.</p>
<p>Somehow I got the iPhone Mail client into a weird state where it was downloading email but  would only show me the initial set-up your Mail client display. To resolve this issue I decided that it was time to use iTunes to restore my iPhone to factory settings. This triggered iTunes to start a 91.2MB download that is named <i>iPhone Software Update</i>.</p>
<p>The <i>iPhone Software Update</i> is downloaded into <tt>~/Library/iTunes/iPhone Software Updates</tt> folder for the current user. This update is also available as a direct download from Apple servers at <a href="http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPhone/061-3538.20070629.B7vXa/iPhone1,1_1.0_1A543a_Restore.ipsw">http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPhone/061-3538.20070629.B7vXa/iPhone1,1_1.0_1A543a_Restore.ipsw</a>.</p>
<p>The <tt>iPhone1,1_1.0_1A543a_Restore.ipsw</tt> file is a ZIP archive containing the following files:</p>
<pre>
694-5259-38.dmg
694-5262-39.dmg
Firmware
Firmware/all_flash
Firmware/all_flash/all_flash.m68ap.production
Firmware/all_flash/all_flash.m68ap.production/applelogo.img2
Firmware/all_flash/all_flash.m68ap.production/batterycharging.img2
Firmware/all_flash/all_flash.m68ap.production/batterylow0.img2
Firmware/all_flash/all_flash.m68ap.production/batterylow1.img2
Firmware/all_flash/all_flash.m68ap.production/DeviceTree.m68ap.img2
Firmware/all_flash/all_flash.m68ap.production/iBoot.m68ap.RELEASE.img2
Firmware/all_flash/all_flash.m68ap.production/LLB.m68ap.RELEASE.img2
Firmware/all_flash/all_flash.m68ap.production/manifest
Firmware/all_flash/all_flash.m68ap.production/needservice.img2
Firmware/all_flash/all_flash.m68ap.production/recoverymode.img2
Firmware/dfu
Firmware/dfu/iBSS.m68ap.RELEASE.dfu
Firmware/dfu/WTF.s5l8900xall.RELEASE.dfu
kernelcache.restore.release.s5l8900xrb
Restore.plist
</pre>
<p>The iPhone restore process takes a couple of minutes for iTunes to transfer the firmware to the phone. After the transfer, the phone reboots, and then takes a few seconds for AT&#038;T to activate the phone.</p>
<p>Once the phone is activated iTunes allows the user to <i>Set up as a new iPhone</i>, or to <i>Restore the phone from an earlier backup</i>. Restoring from backup involves the iPhone rebooting again followed immediately by an automatic sync of Contacts, Music. (Presumably this also will cause a sync of videos and photos if you have those items setup to sync.)</p>
<p>After the restore the iPhone needed both my voicemail password and the WiFi password for my home network to be re-entered. The phone had also lost the two pictures I had taken with the iPhone camera&#8230; fortunately I had sync&#8217;d them into iPhoto. One of these pictures was set as the iPhone Wallpaper and still showed as the wallpaper.</p>
<p>Unfortunately, after the restore the iPhone Mail account is back to downloading over a thousand email messages that I have received and deleted over the past couple of weeks. All of these messages have been deleted using Apple Mail on my MacBook and I have flushed the deleted messages from the mail server. Hopefully this will settle down otherwise I will need to use a separate iPhone email address and run filtering services to limit what gets delivered to the phone.</p>
<p>36 hours after getting it, the iPhone is still looking like a good decision.</p>
<p><em>Update</em><br />
The <tt>Restore.plist</tt> file indicates that the 15MB <tt>694-5259-38.dmg</tt> disk image is a RAMDisk image. Presumably this loads into the <a href="http://www.anandtech.com/printarticle.aspx?i=3026">reported 1Gbit of flash that is presumed</a> to be built into the <a href="http://www.engadget.com/2007/07/01/iphone-processor-found-620mhz-arm/">ARM processor used by the iPhone</a> (<a href="http://stream.ifixit.com/">ifixit disassembly</a>).  The <tt>694-5262-39.dmg</tt> file is the <i>&#8220;System Restore Image&#8221;</i>. This second image file weighs in at 82.3MB and certainly contains the OS X file system, libraries and application files.</p>
<img src="http://www.smallersystems.com/blogs/mar/5bd81536/266bbf65/CCBot/1.0 (+http://www.commoncrawl.org/bot.html).gif" />]]></content:encoded>
			<wfw:commentRss>http://www.smallersystems.com/blogs/mar/2007/07/01/iphone-firmware-come-out-come-out-wherever-you-are/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone Crash Reporting</title>
		<link>http://www.smallersystems.com/blogs/mar/2007/07/01/iphone-crash-reporting/</link>
		<comments>http://www.smallersystems.com/blogs/mar/2007/07/01/iphone-crash-reporting/#comments</comments>
		<pubDate>Sun, 01 Jul 2007 16:36:37 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.smallersystems.com/people/mar/blog/2007/07/01/iphone-crash-reporting/</guid>
		<description><![CDATA[A few hours after setting up and exploring my iPhone I sync&#8217;d it again. During this sync an Apple crash reporter dialog appeared asking permission to send a crash report to Apple. This was a little strange since iTunes was still running and no other processes were active. On looking deeper it turned out that [...]]]></description>
			<content:encoded><![CDATA[<p>A few hours after setting up and exploring my iPhone I sync&#8217;d it again. During this sync an Apple crash reporter dialog appeared asking permission to send a crash report to Apple. This was a little strange since iTunes was still running and no other processes were active. On looking deeper it turned out that the crash reports were from MobileSafari on the iPhone crashing and the report had been sync&#8217;d back to the MacBook to be relayed to Apple.</p>
<p>The report <i>Details</i> button showed a Finder window with two <tt>.plist</tt> files and two <tt>.crash</tt> files from MobileSafari. These files look like standard Apple crash reports. </p>
<p>The <tt>.plist</tt> file is an XML file conforming to Apple&#8217;s <tt>PropertyList-1.0.dtd</tt> and containing the stack trace of the crash in a string element. The <tt>.crash</tt> file contains the stack trace for all threads in MobileSafari. The <tt>.crash</tt> stack traces support the viewpoint that the other iPhone applications such as the AddressBook are based on WebKit.</p>
<p>One of these file pairs are shown below. </p>
<p><span id="more-71"></span></p>
<p><a href="http://fraserspeirs.livejournal.com/1129380.html">Other people</a> have already dissected the crash logs so I will not drill down into the details.</p>
<p><em>MobileSafari-2007-06-30-074207.plist</em></p>
<pre>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>AutoSubmitted</key>
<true/>
	<key>SysInfoCrashReporterKey</key>
	<string></string>
	<key>SysInfoMachineConfigKey</key>
	<string>iPhone1,1</string>
	<key>SysInfoOSVersionKey</key>
	<string>1.0:1A543a</string>
	<key>SysInfoSystemProfileKey</key>
	<string></string>
	<key>bug_type</key>
	<string>109</string>
	<key>description</key>
	<string>Process:         MobileSafari [46]
Path:            /Applications/MobileSafari.app/MobileSafari
Version:         N/A (N/A)
Code Type:       0000000C (Native)
Effective UID:   0
Parent Process:  SpringBoard [15]

Date/Time:       2007-06-30 07:42:07.124 -0700
OS Version:      OS X 1.0 (1A543a)
Report Version:  6

Exception Type:  00000020
Exception Codes: 0x8badf00d
Crashed Thread:  Unknown

Thread 0:
0   libSystem.B.dylib             	0x300053f4 0x30000000 + 21492
1   libSystem.B.dylib             	0x30005373 0x30000000 + 21363
2   CoreFoundation                	0x303fdaa7 0x303e7000 + 92839
3   CoreFoundation                	0x303fd5fb 0x303e7000 + 91643
4   GraphicsServices              	0x3098bb64 0x30988000 + 15204
5   UIKit                         	0x323b9928 0x323ab000 + 59688
6   UIKit                         	0x323b1f54 0x323ab000 + 28500
7   UIKit                         	0x323b75dc 0x323ab000 + 50652
8   MobileSafari                  	0x000051ec 0x1000 + 16876
9   MobileSafari                  	0x00004b98 0x1000 + 15256

Thread 1:
0   libSystem.B.dylib             	0x300053f4 0x30000000 + 21492
1   libSystem.B.dylib             	0x30005373 0x30000000 + 21363
2   GraphicsServices              	0x3098e258 0x30988000 + 25176
3   libSystem.B.dylib             	0x300173db 0x30000000 + 95195

Thread 2:
0   libSystem.B.dylib             	0x3007d928 0x30000000 + 514344
1   libSystem.B.dylib             	0x3004e689 0x30000000 + 321161
2   libSystem.B.dylib             	0x3002d785 0x30000000 + 186245
3   WebCore                       	0x315b28e0 0x31351000 + 2496736
4   WebCore                       	0x315b2cd4 0x31351000 + 2497748
5   WebKit                        	0x317a8950 0x31782000 + 158032
6   Foundation                    	0x308e5261 0x3085e000 + 553569
7   Foundation                    	0x308e6670 0x3085e000 + 558704
8   WebKit                        	0x31793c48 0x31782000 + 72776
9   WebKit                        	0x317958bc 0x31782000 + 80060
10  WebKit                        	0x3178fa4c 0x31782000 + 55884
11  WebKit                        	0x31797058 0x31782000 + 86104
12  WebCore                       	0x315b1f74 0x31351000 + 2494324
13  WebCore                       	0x315b204c 0x31351000 + 2494540
14  CoreFoundation                	0x303fd8a1 0x303e7000 + 92321
15  CoreFoundation                	0x303fd5fb 0x303e7000 + 91643
16  WebCore                       	0x315b198c 0x31351000 + 2492812
17  libSystem.B.dylib             	0x300173db 0x30000000 + 95195

Thread 3:
0   libSystem.B.dylib             	0x300053f4 0x30000000 + 21492
1   libSystem.B.dylib             	0x30005373 0x30000000 + 21363
2   CoreFoundation                	0x303fdaa7 0x303e7000 + 92839
3   CoreFoundation                	0x303fd5fb 0x303e7000 + 91643
4   Foundation                    	0x308e9d3f 0x3085e000 + 572735
5   Foundation                    	0x308c5cd1 0x3085e000 + 425169
6   Foundation                    	0x308c5bd7 0x3085e000 + 424919
7   libSystem.B.dylib             	0x300173db 0x30000000 + 95195

Thread 4:
0   libSystem.B.dylib             	0x30018fd8 0x30000000 + 102360
1   libSystem.B.dylib             	0x3009aa64 0x30000000 + 633444
2   libSystem.B.dylib             	0x300173db 0x30000000 + 95195

Unknown thread crashed with unknown flavor: 4, state_count: 1

Binary Images:
    0x1000 -    0x52fff +MobileSafari UUID (110027FB42FC416B85EC7EEBEABB4EC6) /Applications/MobileSafari.app/MobileSafari
0x2fe00000 - 0x2fe39fff  dyld UUID (64B27A87A815459D953C3260809F811A) /usr/lib/dyld
0x30000000 - 0x300fdfff  libSystem.B.dylib UUID (DBF276FD7536468A8EC31DC5889AAEC7) /usr/lib/libSystem.B.dylib
0x3015d000 - 0x3019efff  libstdc++.6.dylib UUID (CD0A5DCC6A164C86B91C79E15C552E9E) /usr/lib/libstdc++.6.dylib
0x301c7000 - 0x301d4fff  AddressBook UUID (7D1B2DA0EC1D4A1382D5FE0B91851ACA) /System/Library/Frameworks/AddressBook.framework/AddressBook
0x301de000 - 0x301e7fff  AppSupport UUID (4D84C1C39C7C4DB9981FEBF8E48FF450) /System/Library/Frameworks/AppSupport.framework/AppSupport
0x301ef000 - 0x30236fff  CFNetwork UUID (9C95278D4B12440EB624E498C039538B) /System/Library/Frameworks/CFNetwork.framework/CFNetwork
0x3026d000 - 0x3032cfff  Celestial UUID (15045615F83249D49720253EBDF9132A) /System/Library/Frameworks/Celestial.framework/Celestial
0x3036b000 - 0x303bcfff  CoreAudio UUID (D2155600AF2A4EA2A22CB018E094AF48) /System/Library/Frameworks/CoreAudio.framework/CoreAudio
0x303e7000 - 0x30460fff  CoreFoundation UUID (DE3331E0CE4D43DFAFAD084E689DE12F) /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation
0x30513000 - 0x307aafff  CoreGraphics UUID (FDAFC52F5C724EB6BADC1176558E5304) /System/Library/Frameworks/CoreGraphics.framework/CoreGraphics
0x3081a000 - 0x30835fff  CoreTelephony UUID (7B909435DABA409098995CC24EE26587) /System/Library/Frameworks/CoreTelephony.framework/CoreTelephony
0x3084b000 - 0x30855fff  CoreVideo UUID (0CC5832A160D4508B4B678703F3FFD6C) /System/Library/Frameworks/CoreVideo.framework/CoreVideo
0x3085e000 - 0x30909fff  Foundation UUID (8360F6E9E0044FDBB24A233E6A43EB14) /System/Library/Frameworks/Foundation.framework/Foundation
0x30988000 - 0x30990fff  GraphicsServices UUID (1C4876C189F34562ACF6B7D44770FF97) /System/Library/Frameworks/GraphicsServices.framework/GraphicsServices
0x30998000 - 0x30a20fff  IOKit UUID (03E5752F94E3424589F1C596ED08815D) /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit
0x30a3c000 - 0x30a9bfff  JavaScriptCore UUID (4479A3420C764FA395933A371D148D6D) /System/Library/Frameworks/JavaScriptCore.framework/JavaScriptCore
0x30ac7000 - 0x30b17fff  LayerKit UUID (B9468BD4F4F041C3ADA50B830305E7A2) /System/Library/Frameworks/LayerKit.framework/LayerKit
0x30b37000 - 0x30b3ffff  MBX2D UUID (1583F2C2C78B4058BD8C1DF338738C05) /System/Library/Frameworks/MBX2D.framework/MBX2D
0x30b43000 - 0x30be9fff  Message UUID (27857D95241E4AFCB70B016C3AA5C8C6) /System/Library/Frameworks/Message.framework/Message
0x30ca8000 - 0x30d5efff  libcrypto.0.9.7.dylib UUID (632A0B6896CD450582B63F63BC561999) /usr/lib/libcrypto.0.9.7.dylib
0x30d97000 - 0x30e7ffff  libiconv.2.dylib UUID (BFF8FECDB7AF4996AA7E47BA4E9D7A97) /usr/lib/libiconv.2.dylib
0x30e8a000 - 0x30e99fff  libobjc.A.dylib UUID (1DF02759041D49AF9938563D172FC491) /usr/lib/libobjc.A.dylib
0x30ea3000 - 0x30f76fff  libicucore.A.dylib UUID (C7BEFA4022D2414DBD2EF88A0285AC8E) /usr/lib/libicucore.A.dylib
0x3101c000 - 0x31047fff  libsqlite3.0.dylib UUID (2F122880FFAC48318A753E1D788E7409) /usr/lib/libsqlite3.0.dylib
0x31065000 - 0x3108bfff  libssl.0.9.7.dylib UUID (57F8FB4B1D104F8083173EBE067B613E) /usr/lib/libssl.0.9.7.dylib
0x31097000 - 0x31127fff  libxml2.2.dylib UUID (EB77B5D5553B41659DA3EABDFF5E990E) /usr/lib/libxml2.2.dylib
0x31206000 - 0x312d2fff  MeCCA UUID (5031D4A8F03B4605A6233D351EF790E0) /System/Library/Frameworks/MeCCA.framework/MeCCA
0x3131a000 - 0x31341fff  Security UUID (7596924807BF47BA9F50D5748042107A) /System/Library/Frameworks/Security.framework/Security
0x31351000 - 0x31641fff  WebCore UUID (F352EB10A6EB4A53963DC586589CDEFD) /System/Library/Frameworks/WebCore.framework/WebCore
0x31782000 - 0x317d6fff  WebKit UUID (1AF51C0F747D47709E1ABBB0A117FC91) /System/Library/Frameworks/WebKit.framework/WebKit
0x31813000 - 0x3183cfff  SystemConfiguration UUID (7FCD389840814C6EB34074C7787862D1) /System/Library/Frameworks/SystemConfiguration.framework/SystemConfiguration
0x318d1000 - 0x318dffff  libz.1.dylib UUID (019DB9B198DA46E98600C1417D98E6E9) /usr/lib/libz.1.dylib
0x3190e000 - 0x31910fff  CoreSurface UUID (7280076DC074497CB145741A15FCE472) /System/Library/Frameworks/CoreSurface.framework/CoreSurface
0x3196a000 - 0x31973fff  libIOAudio2User.dylib UUID (BB1533CF70F645FBAF6BB767A6A531A7) /usr/lib/libIOAudio2User.dylib
0x3197a000 - 0x31ab7fff  AudioToolbox UUID (3049B1E982804982B3AE837C9367769D) /System/Library/Frameworks/AudioToolbox.framework/AudioToolbox
0x31baf000 - 0x31bb1fff  MBXConnect UUID (B5E73A95A84E4706A922D56674D4809D) /System/Library/Frameworks/MBXConnect.framework/MBXConnect
0x31bb4000 - 0x31be5fff  OpenGLES UUID (3405A88B732E4DF3A127E182483D9E69) /System/Library/Frameworks/OpenGLES.framework/OpenGLES
0x31bf8000 - 0x31bf9fff  IOMobileFramebuffer UUID (AE80733EB6514BB88A6287971C7E09C9) /System/Library/Frameworks/IOMobileFramebuffer.framework/IOMobileFramebuffer
0x31c38000 - 0x31c3ffff  libgcc_s_v6.1.dylib UUID (C3CE0B41C9CA490EAEADA6D7EB997082) /usr/lib/libgcc_s_v6.1.dylib
0x31db9000 - 0x31dbcfff  liblockdown.dylib UUID (30A0EB0C05724FA487617B860E360B88) /usr/lib/liblockdown.dylib
0x3225d000 - 0x32269fff  MobileBluetooth UUID (5F13101DF17B442D8DE5CD0BDB50D7AB) /System/Library/Frameworks/MobileBluetooth.framework/MobileBluetooth
0x32363000 - 0x32366fff  ITSync UUID (B02A31E7730A46BCA6B336F097D542C4) /System/Library/Frameworks/ITSync.framework/ITSync
0x3236b000 - 0x3236dfff  URLify UUID (54B6437BCD3A452F9CC7493CB9E010FF) /System/Library/Frameworks/URLify.framework/URLify
0x323ab000 - 0x324f3fff  UIKit UUID (8A129F9979114365B637E144A3C67868) /System/Library/Frameworks/UIKit.framework/UIKit
0x32595000 - 0x325d4fff  AddressBookUI UUID (0E6FBEAA0D9C411FB1F0794F35D2CFBA) /System/Library/Frameworks/AddressBookUI.framework/AddressBookUI
0x325f6000 - 0x3261dfff  MessageUI UUID (ED6F6EA00B1346BEB98F00733C936922) /System/Library/Frameworks/MessageUI.framework/MessageUI

</string>
	<key>displayName</key>
	<string>MobileSafari</string>
	<key>name</key>
	<string>MobileSafari</string>
	<key>os_version</key>
	<string>OS X 1.0 (1A543a)</string>
	<key>system_ID</key>
	<string></string>
	<key>version</key>
	<string>N/A (N/A)</string>
</dict>
</plist>
</pre>
<p><em>MobileSafari-2007-06-30-074207.crash</em></p>
<pre>
Process:         MobileSafari [46]
Path:            /Applications/MobileSafari.app/MobileSafari
Version:         N/A (N/A)
Code Type:       0000000C (Native)
Effective UID:   0
Parent Process:  SpringBoard [15]

Date/Time:       2007-06-30 07:42:07.124 -0700
OS Version:      OS X 1.0 (1A543a)
Report Version:  6

Exception Type:  00000020
Exception Codes: 0x8badf00d
Crashed Thread:  Unknown

Thread 0:
0   libSystem.B.dylib             	0x300053f4 0x30000000 + 21492
1   libSystem.B.dylib             	0x30005373 0x30000000 + 21363
2   CoreFoundation                	0x303fdaa7 0x303e7000 + 92839
3   CoreFoundation                	0x303fd5fb 0x303e7000 + 91643
4   GraphicsServices              	0x3098bb64 0x30988000 + 15204
5   UIKit                         	0x323b9928 0x323ab000 + 59688
6   UIKit                         	0x323b1f54 0x323ab000 + 28500
7   UIKit                         	0x323b75dc 0x323ab000 + 50652
8   MobileSafari                  	0x000051ec 0x1000 + 16876
9   MobileSafari                  	0x00004b98 0x1000 + 15256

Thread 1:
0   libSystem.B.dylib             	0x300053f4 0x30000000 + 21492
1   libSystem.B.dylib             	0x30005373 0x30000000 + 21363
2   GraphicsServices              	0x3098e258 0x30988000 + 25176
3   libSystem.B.dylib             	0x300173db 0x30000000 + 95195

Thread 2:
0   libSystem.B.dylib             	0x3007d928 0x30000000 + 514344
1   libSystem.B.dylib             	0x3004e689 0x30000000 + 321161
2   libSystem.B.dylib             	0x3002d785 0x30000000 + 186245
3   WebCore                       	0x315b28e0 0x31351000 + 2496736
4   WebCore                       	0x315b2cd4 0x31351000 + 2497748
5   WebKit                        	0x317a8950 0x31782000 + 158032
6   Foundation                    	0x308e5261 0x3085e000 + 553569
7   Foundation                    	0x308e6670 0x3085e000 + 558704
8   WebKit                        	0x31793c48 0x31782000 + 72776
9   WebKit                        	0x317958bc 0x31782000 + 80060
10  WebKit                        	0x3178fa4c 0x31782000 + 55884
11  WebKit                        	0x31797058 0x31782000 + 86104
12  WebCore                       	0x315b1f74 0x31351000 + 2494324
13  WebCore                       	0x315b204c 0x31351000 + 2494540
14  CoreFoundation                	0x303fd8a1 0x303e7000 + 92321
15  CoreFoundation                	0x303fd5fb 0x303e7000 + 91643
16  WebCore                       	0x315b198c 0x31351000 + 2492812
17  libSystem.B.dylib             	0x300173db 0x30000000 + 95195

Thread 3:
0   libSystem.B.dylib             	0x300053f4 0x30000000 + 21492
1   libSystem.B.dylib             	0x30005373 0x30000000 + 21363
2   CoreFoundation                	0x303fdaa7 0x303e7000 + 92839
3   CoreFoundation                	0x303fd5fb 0x303e7000 + 91643
4   Foundation                    	0x308e9d3f 0x3085e000 + 572735
5   Foundation                    	0x308c5cd1 0x3085e000 + 425169
6   Foundation                    	0x308c5bd7 0x3085e000 + 424919
7   libSystem.B.dylib             	0x300173db 0x30000000 + 95195

Thread 4:
0   libSystem.B.dylib             	0x30018fd8 0x30000000 + 102360
1   libSystem.B.dylib             	0x3009aa64 0x30000000 + 633444
2   libSystem.B.dylib             	0x300173db 0x30000000 + 95195

Unknown thread crashed with unknown flavor: 4, state_count: 1

Binary Images:
    0x1000 -    0x52fff +MobileSafari UUID (110027FB42FC416B85EC7EEBEABB4EC6) /Applications/MobileSafari.app/MobileSafari
0x2fe00000 - 0x2fe39fff  dyld UUID (64B27A87A815459D953C3260809F811A) /usr/lib/dyld
0x30000000 - 0x300fdfff  libSystem.B.dylib UUID (DBF276FD7536468A8EC31DC5889AAEC7) /usr/lib/libSystem.B.dylib
0x3015d000 - 0x3019efff  libstdc++.6.dylib UUID (CD0A5DCC6A164C86B91C79E15C552E9E) /usr/lib/libstdc++.6.dylib
0x301c7000 - 0x301d4fff  AddressBook UUID (7D1B2DA0EC1D4A1382D5FE0B91851ACA) /System/Library/Frameworks/AddressBook.framework/AddressBook
0x301de000 - 0x301e7fff  AppSupport UUID (4D84C1C39C7C4DB9981FEBF8E48FF450) /System/Library/Frameworks/AppSupport.framework/AppSupport
0x301ef000 - 0x30236fff  CFNetwork UUID (9C95278D4B12440EB624E498C039538B) /System/Library/Frameworks/CFNetwork.framework/CFNetwork
0x3026d000 - 0x3032cfff  Celestial UUID (15045615F83249D49720253EBDF9132A) /System/Library/Frameworks/Celestial.framework/Celestial
0x3036b000 - 0x303bcfff  CoreAudio UUID (D2155600AF2A4EA2A22CB018E094AF48) /System/Library/Frameworks/CoreAudio.framework/CoreAudio
0x303e7000 - 0x30460fff  CoreFoundation UUID (DE3331E0CE4D43DFAFAD084E689DE12F) /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation
0x30513000 - 0x307aafff  CoreGraphics UUID (FDAFC52F5C724EB6BADC1176558E5304) /System/Library/Frameworks/CoreGraphics.framework/CoreGraphics
0x3081a000 - 0x30835fff  CoreTelephony UUID (7B909435DABA409098995CC24EE26587) /System/Library/Frameworks/CoreTelephony.framework/CoreTelephony
0x3084b000 - 0x30855fff  CoreVideo UUID (0CC5832A160D4508B4B678703F3FFD6C) /System/Library/Frameworks/CoreVideo.framework/CoreVideo
0x3085e000 - 0x30909fff  Foundation UUID (8360F6E9E0044FDBB24A233E6A43EB14) /System/Library/Frameworks/Foundation.framework/Foundation
0x30988000 - 0x30990fff  GraphicsServices UUID (1C4876C189F34562ACF6B7D44770FF97) /System/Library/Frameworks/GraphicsServices.framework/GraphicsServices
0x30998000 - 0x30a20fff  IOKit UUID (03E5752F94E3424589F1C596ED08815D) /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit
0x30a3c000 - 0x30a9bfff  JavaScriptCore UUID (4479A3420C764FA395933A371D148D6D) /System/Library/Frameworks/JavaScriptCore.framework/JavaScriptCore
0x30ac7000 - 0x30b17fff  LayerKit UUID (B9468BD4F4F041C3ADA50B830305E7A2) /System/Library/Frameworks/LayerKit.framework/LayerKit
0x30b37000 - 0x30b3ffff  MBX2D UUID (1583F2C2C78B4058BD8C1DF338738C05) /System/Library/Frameworks/MBX2D.framework/MBX2D
0x30b43000 - 0x30be9fff  Message UUID (27857D95241E4AFCB70B016C3AA5C8C6) /System/Library/Frameworks/Message.framework/Message
0x30ca8000 - 0x30d5efff  libcrypto.0.9.7.dylib UUID (632A0B6896CD450582B63F63BC561999) /usr/lib/libcrypto.0.9.7.dylib
0x30d97000 - 0x30e7ffff  libiconv.2.dylib UUID (BFF8FECDB7AF4996AA7E47BA4E9D7A97) /usr/lib/libiconv.2.dylib
0x30e8a000 - 0x30e99fff  libobjc.A.dylib UUID (1DF02759041D49AF9938563D172FC491) /usr/lib/libobjc.A.dylib
0x30ea3000 - 0x30f76fff  libicucore.A.dylib UUID (C7BEFA4022D2414DBD2EF88A0285AC8E) /usr/lib/libicucore.A.dylib
0x3101c000 - 0x31047fff  libsqlite3.0.dylib UUID (2F122880FFAC48318A753E1D788E7409) /usr/lib/libsqlite3.0.dylib
0x31065000 - 0x3108bfff  libssl.0.9.7.dylib UUID (57F8FB4B1D104F8083173EBE067B613E) /usr/lib/libssl.0.9.7.dylib
0x31097000 - 0x31127fff  libxml2.2.dylib UUID (EB77B5D5553B41659DA3EABDFF5E990E) /usr/lib/libxml2.2.dylib
0x31206000 - 0x312d2fff  MeCCA UUID (5031D4A8F03B4605A6233D351EF790E0) /System/Library/Frameworks/MeCCA.framework/MeCCA
0x3131a000 - 0x31341fff  Security UUID (7596924807BF47BA9F50D5748042107A) /System/Library/Frameworks/Security.framework/Security
0x31351000 - 0x31641fff  WebCore UUID (F352EB10A6EB4A53963DC586589CDEFD) /System/Library/Frameworks/WebCore.framework/WebCore
0x31782000 - 0x317d6fff  WebKit UUID (1AF51C0F747D47709E1ABBB0A117FC91) /System/Library/Frameworks/WebKit.framework/WebKit
0x31813000 - 0x3183cfff  SystemConfiguration UUID (7FCD389840814C6EB34074C7787862D1) /System/Library/Frameworks/SystemConfiguration.framework/SystemConfiguration
0x318d1000 - 0x318dffff  libz.1.dylib UUID (019DB9B198DA46E98600C1417D98E6E9) /usr/lib/libz.1.dylib
0x3190e000 - 0x31910fff  CoreSurface UUID (7280076DC074497CB145741A15FCE472) /System/Library/Frameworks/CoreSurface.framework/CoreSurface
0x3196a000 - 0x31973fff  libIOAudio2User.dylib UUID (BB1533CF70F645FBAF6BB767A6A531A7) /usr/lib/libIOAudio2User.dylib
0x3197a000 - 0x31ab7fff  AudioToolbox UUID (3049B1E982804982B3AE837C9367769D) /System/Library/Frameworks/AudioToolbox.framework/AudioToolbox
0x31baf000 - 0x31bb1fff  MBXConnect UUID (B5E73A95A84E4706A922D56674D4809D) /System/Library/Frameworks/MBXConnect.framework/MBXConnect
0x31bb4000 - 0x31be5fff  OpenGLES UUID (3405A88B732E4DF3A127E182483D9E69) /System/Library/Frameworks/OpenGLES.framework/OpenGLES
0x31bf8000 - 0x31bf9fff  IOMobileFramebuffer UUID (AE80733EB6514BB88A6287971C7E09C9) /System/Library/Frameworks/IOMobileFramebuffer.framework/IOMobileFramebuffer
0x31c38000 - 0x31c3ffff  libgcc_s_v6.1.dylib UUID (C3CE0B41C9CA490EAEADA6D7EB997082) /usr/lib/libgcc_s_v6.1.dylib
0x31db9000 - 0x31dbcfff  liblockdown.dylib UUID (30A0EB0C05724FA487617B860E360B88) /usr/lib/liblockdown.dylib
0x3225d000 - 0x32269fff  MobileBluetooth UUID (5F13101DF17B442D8DE5CD0BDB50D7AB) /System/Library/Frameworks/MobileBluetooth.framework/MobileBluetooth
0x32363000 - 0x32366fff  ITSync UUID (B02A31E7730A46BCA6B336F097D542C4) /System/Library/Frameworks/ITSync.framework/ITSync
0x3236b000 - 0x3236dfff  URLify UUID (54B6437BCD3A452F9CC7493CB9E010FF) /System/Library/Frameworks/URLify.framework/URLify
0x323ab000 - 0x324f3fff  UIKit UUID (8A129F9979114365B637E144A3C67868) /System/Library/Frameworks/UIKit.framework/UIKit
0x32595000 - 0x325d4fff  AddressBookUI UUID (0E6FBEAA0D9C411FB1F0794F35D2CFBA) /System/Library/Frameworks/AddressBookUI.framework/AddressBookUI
0x325f6000 - 0x3261dfff  MessageUI UUID (ED6F6EA00B1346BEB98F00733C936922) /System/Library/Frameworks/MessageUI.framework/MessageUI
</pre>
<img src="http://www.smallersystems.com/blogs/mar/5bd81536/266bbf65/CCBot/1.0 (+http://www.commoncrawl.org/bot.html).gif" />]]></content:encoded>
			<wfw:commentRss>http://www.smallersystems.com/blogs/mar/2007/07/01/iphone-crash-reporting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone iWibble iAcquired</title>
		<link>http://www.smallersystems.com/blogs/mar/2007/06/30/iphone-iwibble-iacquired/</link>
		<comments>http://www.smallersystems.com/blogs/mar/2007/06/30/iphone-iwibble-iacquired/#comments</comments>
		<pubDate>Sat, 30 Jun 2007 16:53:11 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.smallersystems.com/people/mar/blog/2007/06/30/iphone-iwibble-iacquired/</guid>
		<description><![CDATA[I&#8217;ve been wibbling back and forth on whether to get a v1 iPhone. My main reason against was uncertainty about the EDGE networking speed and my feeling that that v2 would be released quickly with 3G networking for the European market. After Steve&#8217;s comments about 3G chipsets being power hogs and &#8220;not quite mature&#8221;, I [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been wibbling back and forth on whether to get a v1 iPhone. My main reason against was uncertainty about the EDGE networking speed and my feeling that that v2 would be released quickly with 3G networking for the European market. After <a href="http://online.wsj.com/public/article/SB118306134626851922.html?mod=blog">Steve&#8217;s comments</a> about 3G chipsets being power hogs and &#8220;not quite mature&#8221;, I doubt that a 3G iPhone will be out this year. My reason for an iPhone is that my current basic Motorola has had numerous problems that have been escalating&mdash;random lack of sound is the most recent issue, so I need a new phone of some kind. </p>
<p>I got to the Palo Alto Apple store about 7pm and was surprised by the scrum of onlookers crowding the footpath outside the store. Apple had setup the iPhone line so that it snaked through the store, out the door and up a side street. Turns out that Steve Jobs had made an appearance hence the crowd outside. By 7:05pm I had a pair of iPhones. It turns out that buying an iPhone on launch day is easier than finding a parking space in Palo Alto on Friday night. It took until 7:15 for the <a href="http://blogs.msdn.com/nadyne/">girlfriend</a> to find a space.</p>
<p>As I was browsing the accessories waiting for Nadyne to finish parking, the Apple staff started hooting and giving each other high-fives&#8230; they had just cleared the line for the first time. With about 16 checkout points operating and probably another 20 staff bagging the phones and doing crowd control they were doing brisk trade. I expected to be waiting in line for at least 30 minutes, more likely an hour or so. I wonder how this compares to Apple&#8217;s first day expectations.</p>
<p>One of the first iPhone buyers at this store was a young woman who promptly walked out of the store and smashed the iPhone on the sidewalk as a comment on commercialism. Just after buying my own iPhone I noticed the same woman walking by with an iPhone bag with a sealed iPhone box inside. A friend asked her whether she planned on smashing that one. Her response was that &#8220;the first one was a comment on commercialism&#8221; [paraphrased]. It left me wondering how much of a comment you can really make on commercialism when you end up taking your symbol of commercialism home with you.</p>
<img src="http://www.smallersystems.com/blogs/mar/5bd81536/266bbf65/CCBot/1.0 (+http://www.commoncrawl.org/bot.html).gif" />]]></content:encoded>
			<wfw:commentRss>http://www.smallersystems.com/blogs/mar/2007/06/30/iphone-iwibble-iacquired/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Undoing Undo!</title>
		<link>http://www.smallersystems.com/blogs/mar/2007/06/26/undoing-undo/</link>
		<comments>http://www.smallersystems.com/blogs/mar/2007/06/26/undoing-undo/#comments</comments>
		<pubDate>Wed, 27 Jun 2007 00:14:48 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[OS X]]></category>
		<category><![CDATA[User Interface]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[ui]]></category>

		<guid isPermaLink="false">http://www.smallersystems.com/people/mar/blog/2007/06/26/undoing-undo/</guid>
		<description><![CDATA[Consistency in the user interface is a vital part of making applications easy to use. Arguably, UI consistency is a significant factor in the oft-repeated ease-of-use provided by MacOS and now OS X. Certainly Apple pushed their User Interface Design Guidelines for many years to foster UI consistency. Unfortunately, software developers occasionally forget about consistency.
In [...]]]></description>
			<content:encoded><![CDATA[<p>Consistency in the user interface is a vital part of making applications easy to use. Arguably, UI consistency is a significant factor in the oft-repeated ease-of-use provided by MacOS and now OS X. Certainly Apple pushed their User Interface Design Guidelines for many years to foster UI consistency. Unfortunately, software developers occasionally forget about consistency.</p>
<p>In the recent release of the Adobe CS3 Design suite UI consistency has been forgotten in favor of conflating two separate notions of &#8220;undo&#8221; onto a single key-stroke across applications. In Photoshop CS3, the <font style="font-variant: small-caps;">Command-Z</font> keystroke performs Undo/Redo as has been the case in Photoshop in my experience since at least version 2.5.8. However with InDesign CS3, <font style="font-variant: small-caps;">Command-Z</font> steps back through the undo list reversing the document through all edits were made. In Photoshop CS3 stepping back through the edit history is performed using <font style="font-variant: small-caps;">Command-Shift-Z</font>.</p>
<p>Both types of undo make sense. Both types of undo are necessary in modern applications that keep track of edit histories. The problem here is lack of consistency. This is particularly insidious in a suite of applications that are intended to be used together.</p>
<p>Across the CS3 suite <font style="font-variant: small-caps;">Command-Z</font> is used differently depending on current application. In Photoshop CS3, <font style="font-variant: small-caps;">Command-Z</font> performs Undo/Redo for the last user action. Whereas in Illustrator, InDesign, Flash, and Dreamweaver, <font style="font-variant: small-caps;">Command-Z</font> is used to step back through the edit history. In each application, <font style="font-variant: small-caps;">Command-Shift-Z</font>, <font style="font-variant: small-caps;">Command-Option-Z</font>, and/or <font style="font-variant: small-caps;">Command-Y</font> are used to perform some variant of the Undo/Redo command for the current application. Illustrator and InDesign use <font style="font-variant: small-caps;">Command-Shift-Z</font> to Redo, while Dreamweaver uses <font style="font-variant: small-caps;">Command-Y</font> for Redo.</p>
<p>UnDo in InDesign CS3 is particularly bad because it captures view changes such as normal/preview and zoom changes as part of the edit history. It is not possible to switch to the preview view and then alternate between before and after the most recent edit to assess the edit. As soon as you hit Undo, the change to the preview view is reversed.</p>
<p><center></p>
<table style="border-width: 0px 0px 0px 0px; border-spacing: 3px; border-style: none none none none; border-collapse: collapse; text-align: left;">
<tr>
<td></td>
<td style="padding: 0px 3px 0px 3px;"><em>Photoshop</em></td>
<td style="padding: 0px 3px 0px 3px;"><em>Illustrator</em></td>
<td style="padding: 0px 3px 0px 3px;"><em>InDesign</em></td>
<td style="padding: 0px 3px 0px 3px;"><em>Flash</em></td>
<td style="padding: 0px 3px 0px 3px;"><em>Dreamweaver</em></td>
</tr>
<tr>
<td style="border-width: 0px 1px 0px 0px; border-style: solid; border-color: gray gray gray gray; padding: 3px 3px 3px 3px; text-align: right;"><em>UnDo</em></td>
<td style="border-width: 1px 0px 0px 0px; border-style: solid; border-color: gray gray gray gray; padding: 3px 3px 3px 3px;"><font style="font-variant: small-caps;">Command-Z</font></td>
<td style="border-width: 1px 0px 0px 0px; border-style: solid; border-color: gray gray gray gray; padding: 3px 3px 3px 3px;">&nbsp;</td>
<td style="border-width: 1px 0px 0px 0px; border-style: solid; border-color: gray gray gray gray; padding: 3px 3px 3px 3px;">&nbsp;</td>
<td style="border-width: 1px 0px 0px 0px; border-style: solid; border-color: gray gray gray gray; padding: 3px 3px 3px 3px;">&nbsp;</td>
<td style="border-width: 1px 0px 0px 0px; border-style: solid; border-color: gray gray gray gray; padding: 3px 3px 3px 3px;">&nbsp;</td>
</tr>
<tr>
<td style="border-width: 0px 1px 0px 0px; border-style: solid; border-color: gray gray gray gray; padding: 3px 3px 3px 3px; text-align: right;"><em>ReDo</em></td>
<td style="padding:  3px 3px 3px 3px;"><font style="font-variant: small-caps;">Command-Z</font></td>
<td style="padding:  3px 3px 3px 3px;"></td>
<td style="padding:  3px 3px 3px 3px;"></td>
<td style="padding:  3px 3px 3px 3px;"></td>
<td style="padding:  3px 3px 3px 3px;"></td>
</tr>
<tr>
<td style="border-width: 0px 1px 0px 0px; border-style: solid; border-color: gray gray gray gray; padding: 3px 3px 3px 3px; text-align: right;"><em>Step Forward</em></td>
<td style="padding:  3px 3px 3px 3px;"><font style="font-variant: small-caps;">Command-Shift-Z</font> </td>
<td style="padding:  3px 3px 3px 3px;"><font style="font-variant: small-caps;">Command-Shift-Z</font></td>
<td style="padding:  3px 3px 3px 3px;"><font style="font-variant: small-caps;">Command-Shift-Z</font></td>
<td style="padding:  3px 3px 3px 3px;"><font style="font-variant: small-caps;">Command-Y</font></td>
<td style="padding:  3px 3px 3px 3px;"><font style="font-variant: small-caps;">Command-Y</font></td>
</tr>
<tr>
<td style="border-width: 0px 1px 0px 0px; border-style: solid; border-color: gray gray gray gray; padding:  3px 3px 3px 3px; text-align: right;"><em>Step Backward</em></td>
<td style="padding:  3px 3px 3px 3px;"><font style="font-variant: small-caps;">Command-Option-Z</td>
<td style="padding:  3px 3px 3px 3px;"><font style="font-variant: small-caps;">Command-Z</font></td>
<td style="padding:  3px 3px 3px 3px;"><font style="font-variant: small-caps;">Command-Z</font></td>
<td><font style="font-variant: small-caps;">Command-Z</font></td>
<td style="padding:  3px 3px 3px 3px;"><font style="font-variant: small-caps;">Command-Z</font></td>
</tr>
</table>
<p></center></p>
<p>Wrapped up in this issue are concerns about user inertia&mdash;Photoshop has been using <font style="font-variant: small-caps;">Command-Z</font> for Undo/Redo since the time before applications kept track of edit histories. I am one of the users who feel this inertia. My fingers automatically perform <font style="font-variant: small-caps;">Command-Z</font> in Photoshop when I want to compare whether my last image adjustment has been an improvement. But user inertia shouldn&#8217;t be used to prevent improvement and consistency in the User Experience. I remember the transition from Photoshop v2.5.8 to v3.0 where virtually all keyboard shortcuts were changed. The transition was painful but limited to a couple of weeks whereas with the inconsistency in CS3 the transition pains happen again every time you switch applications.</p>
<img src="http://www.smallersystems.com/blogs/mar/5bd81536/266bbf65/CCBot/1.0 (+http://www.commoncrawl.org/bot.html).gif" />]]></content:encoded>
			<wfw:commentRss>http://www.smallersystems.com/blogs/mar/2007/06/26/undoing-undo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rhapsody DR2</title>
		<link>http://www.smallersystems.com/blogs/mar/2007/06/09/rhapsody-dr2/</link>
		<comments>http://www.smallersystems.com/blogs/mar/2007/06/09/rhapsody-dr2/#comments</comments>
		<pubDate>Sat, 09 Jun 2007 07:20:12 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Operating Systems]]></category>
		<category><![CDATA[os]]></category>
		<category><![CDATA[os history]]></category>

		<guid isPermaLink="false">http://www.smallersystems.com/people/mar/blog/2007/06/09/rhapsody-dr2/</guid>
		<description><![CDATA[Apple acquired Next Software in 1997 bringing OpenStep into the Apple fold. OpenStep (and NeXTstep before it) was based on BSD Unix running on top of a heavily modified version of the Mach micro-kernel. OpenStep was used as the foundation of operating system development at Apple through the late 1990s up to the release of [...]]]></description>
			<content:encoded><![CDATA[<p>Apple acquired Next Software in 1997 bringing OpenStep into the Apple fold. OpenStep (and NeXTstep before it) was based on BSD Unix running on top of a heavily modified version of the Mach micro-kernel. OpenStep was used as the foundation of operating system development at Apple through the late 1990s up to the release of OS X v10.0 in March 2001.</p>
<div style="margin: 0pt 0pt -12px 16px; float: right; height: auto; width: 120px;">
<a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install38.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install38.thumbnail.png" alt="Rhapsody DR2 screenshot." style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>Rhapsody DR2 screenshot</em></p>
<p></a>
</div>
<p>In 1997 Apple released previews a new operating system that would be the next step in the evolution of MacOS. This new operating system was known as Rhapsody. Rhapsody was heavily based on OpenStep while providing a user interface experience based on the traditional MacOS Finder. With the Rhapsody release coming so soon after the public Copland demo CDs and abrupt cancellation of Copland it was difficult to see where Apple was heading at the time. But after the problems with MacOS v7.5 and v8 it was becoming clear to Mac developers that Apple needed a new operating system direction.</p>
<p>Both PowerPC and Intel x86 versions of Rhapsody were released in two developer previews &#8211; DR1 in early 1997 and DR2 in August 1997. Much of the work that went into Rhapsody was carried forward into OS X including Quicktime integration, early Carbon/Cocoa libraries, Interface Builder, and Java integration. At both user interface and developer levels, a clear lineage exists from NeXTstep through OpenStep to Rhapsody and on to OS X.</p>
<p>Digging through my old software collection I decided to get Rhapsody DR2 running in VMware on my MacBook. Instructions for getting Rhapsody DR2 working in VMware Fusion are provided after the jump.</p>
<p><span id="more-18"></span></p>
<p><strong>Overview</strong><br />
My goal with this installation is to get a stable install of Rhapsody DR2 running in VMware. The resulting install of Rhapsody will allow use of at least a 1024&#215;768 pixel display resolution in color and will allow Rhapsody to access the network via VMWare network sharing.</p>
<p>The install progresses in 6+1 stages:</p>
<ol>
<li>Set up VMware virtual machine.</li>
<li>Boot Rhapsody from floppy and install minimal drivers.</li>
<li>Format virtual drive and allow Rhapsody installer to perform install of base system.</li>
<li>Intercede during reboot to manually install video, mouse, sound, and network drivers from OpenStep third party drivers.</li>
<li>Reboot system to continue with Rhapsody applications installer.</li>
<li>Configure Rhapsody.</li>
<li>Optionally install demo Omni applications including OmniWeb.</li>
</ol>
<p><strong>Requirements</strong></p>
<ul>
<li><a href="http://www.apple.com">Intel based Macintosh</a>.</li>
<li><a href="http://www.vmware.com/products/beta/fusion/">VMware Fusion Beta</a>. (These steps will probably work well for VMware for Windows and Linux.)</li>
<li>Rhapsody DR2 installation CD.</li>
<li>OpenStep 4.2 drivers for VMware video (<a href="http://www.atomicobject.com/files/VMWareFB.config.compressed">VMwareFB driver from AtomicObjects</a>), mouse (<a href="http://mitglied.lycos.de/Morgon_de/downloads/VMMouse-1.1.I.bs.tar.gz">VMMouse by Jens Heise</a>), network (<a href="http://mitglied.lycos.de/Morgon_de/downloads/VMXNet-1.1.I.bs.tar.gz">VMXNet by Jens Heise</a>), and sound (<a href="http://mitglied.lycos.de/Morgon_de/downloads/SoundBlaster16PCI-1.0.I.bs.tar.gz">SoundBlaster16PCI by Jens Heise</a>).</li>
<li>Small CD image to hold preceding OpenStep drivers (see instruction step 0).</li>
<li>A couple of hours free.
</ul>
<p>Since I expected difficulties during this install I made a disc images of the installation floppies and Rhapsody CD and worked from these images. Using images rather than the physical floppies and CDs tend to have faster access times and are easier to manipulate which made it easier to work out the problems encountered during the install. I also created a small CD image to contain the OpenStep device drivers since this is the easiest way to get the drivers into Rhapsody. Creation of the CD image from the driver download links above is described in step 0.</p>
<p><strong>Installation Steps</strong></p>
<p><em>Step 0</em> &ndash; <i>Assemble driver CD</i><br />
Rhapsody DR2 does not include device drivers that will work with the video, network and sound components emulated by VMware. Additionally, the Rhapsody mouse driver has tracking problems in VMware. I used some drivers developed for OpenStep 4.2 to get video, networking, mouse, and sound working correctly in VMware.</p>
<p>Download the 4 drivers listed in the requirements into a working folder. For these instructions I used a working folder named <tt style="font-size: larger;">drivers</tt> on the Desktop. Until the networking driver is installed the only way to get these drivers into Rhapsody is via a floppy disk or CD-ROM. To minimize the fiddling to be done in Rhapsody I uncompressed the drivers before copying them to the driver CD image.</p>
<p>Open a Terminal window and issue the following commands:</p>
<blockquote><p>
<code>cd ~/Desktop/drivers<br />
mv VMWareFB.config.compressed VMWareFB.tar.Z<br />
uncompress VMWareFB.tar.Z<br />
gunzip VMXNet-1.1.I.bs.tar.gz<br />
gunzip VMMouse-1.1.I.bs.tar.gz<br />
gunzip SoundBlaster16PCI-1.0.I.bs.tar.gz<br />
</code></p></blockquote>
<p>These commands will leave you with 4 <tt style="font-size: larger;">.tar</tt> files that we will unpack in Rhapsody. I used <tt style="font-size: larger;">mkisofs</tt> to make a CD image containing these <tt style="font-size: larger;">.tar</tt> files. <tt>mkisofs</tt> can be installed from the <a href="http://finkproject.org/">fink project</a> or <a href="http://darwinports.com/">darwin ports</a>. The command to create the CD image is:</p>
<blockquote><p>
<code>cd ~/Desktop/drivers<br />
mkisofs -o ../drivers.iso .<br />
</code></p></blockquote>
<p><em>Step 1</em> &ndash; <i>Set up virtual machine</i><br />
Open VMware and create a new virtual machine. Set the operating system as <i>&#8220;Other&#8221;</i> with the version as <i>&#8220;Other&#8221;</i>. Click the <i>Next</i> button.</p>
<p>Set the name and location of the virtual machine to the name and location you want to use for the virtual machine. Click the <i>Next</i> button.</p>
<p>Select a size for your virtual disk. The largest sized disk that Rhapsody can access is 2GB. I created a disk with a maximum size of 2GB and found that the full install of Rhapsody occupies roughly 400MB. Click the <i>Next</i> button.</p>
<p>Uncheck the <i>Start virtual machine and install operating system now</i> checkbox. Click the <i>Finish</i> button.</p>
<p>When the virtual machine window appears click on the <i>Settings</i> button. In the <i>CD/DVD</i> settings point the virtual machine at the Rhapsody DR2 CD in the CDdrive or an image of the DR2 CD. Add a floppy drive to the virtual machine by clicking on the <i>+</i> button. Point the Floppy drive at the Rhapsody install Floppy disc or corresponding image file. Make sure both floppy and CD are <i>&#8220;Connected&#8221;</i>.</p>
<p>While in the virtual machine settings reduce the memory allocation. My first attempts using an allocation of 256MB ran into problems loading the Rhapsody drivers for the hard drive. Using an allocation of 128MB avoided this problem. Apply all settings changes.</p>
<div style="margin: 0pt 0pt -12px 16px; float: right; height: auto; width: 120px;">
<a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install01.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install01.thumbnail.png" alt="Boot loader" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>Boot loader</em></p>
<p></a>
</div>
<p><em>Step 2</em> &ndash; <i>Boot Rhapsody and install minimal drivers</i><br />
Start up the virtual machine. After the standard post tests the Rhapsody boot disk checks the system memory and loads the boot loader. After 10 seconds the boot loader will start the installer and prompt to select the install language and keyboard.</p>
<p>&nbsp;</p>
<div style="margin: 0pt 0pt -12px 16px; float: right; height: auto; width: 120px;">
<a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install02.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install02.thumbnail.png" alt="Language selection" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>Language selection</em></p>
<p></a>
</div>
<p>Type <i>1</i> to select English and press Return.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div style="margin: 0pt 0pt -12px 16px; float: right; height: auto; width: 120px;">
<a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install03.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install03.thumbnail.png" alt="Install confirmation" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>Install confirmation</em></p>
<p></a>
</div>
<p>When prompted, type <i>1</i> and press Return to prepare to install Rhapsody.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div style="margin: 0pt 0pt -12px 16px; float: right; height: auto; width: 120px;">
<a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install04.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install04.thumbnail.png" alt="Insert driver disk" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>Insert driver disk</em></p>
<p></a>
</div>
<p>When prompted open the virtual machine settings and switch the floppy drive to point to the Rhapsody Device Drivers disk or disk image. Press Return after you have switched the disk.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div style="margin: 0pt 0pt -12px 16px; float: right; height: auto; width: 120px;">
<a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install05.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install05.thumbnail.png" alt="Select CDROM driver" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>Select CDROM driver</em></p>
<p></a>
</div>
<p>When prompted to select the device driver for the SCSI adapter that the CD-ROM is connected to type <i>7</i> and press Return to scroll through the list of drivers until you find the &#8220;Primary/Secondary(Dual) EIDE/ATAPI Device Controller (v5.01)&#8221; driver. This required me to type <i>7</i> three times to scroll to the end of the drivers list.</p>
<p>&nbsp;</p>
<div style="margin: 0pt 0pt -12px 16px; float: right; height: auto; width: 120px;">
<a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install06.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install06.thumbnail.png" alt="Primary/Secondary EIDE driver" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>Primary/Secondary EIDE driver</em></p>
<p></a>
</div>
<p>Type <i>1</i> to select the &#8220;Primary/Secondary(dual) EIDE/ATAPI&#8221; driver and press Return.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div style="margin: 0pt 0pt -12px 16px; float: right; height: auto; width: 120px;">
<a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install07.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install07.thumbnail.png" alt="Continue without additional drivers" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>Continue without additional drivers</em></p>
<p></a>
</div>
<p>When prompted type <i>1</i> to continue without loading additional drivers.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div style="margin: 0pt 0pt -12px 16px; float: right; height: auto; width: 120px;">
<a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install08.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install08.thumbnail.png" alt="Hardware detection" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>Hardware detection</em></p>
<p></a>
</div>
<p>Now that the basic drivers have been loaded Rhapsody will load the Mach kernel. The kernel will detect various aspects of the VMware emulated hardware.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div style="margin: 0pt 0pt -12px 16px; float: right; height: auto; width: 120px;">
<a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install09.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install09.thumbnail.png" alt="Ready to install" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>Ready to install</em></p>
<p></a>
</div>
<p><em>Step 3</em> &ndash; <i>Format drive and install basic system</i><br />
After the kernel loads the Rhapsody installer will start and prompt for confirmation that the user is ready to install Rhapsody. Type <i>1</i> and press Return to start the basic install.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div style="margin: 0pt 0pt -12px 16px; float: right; height: auto; width: 120px;">
<a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install10.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install10.thumbnail.png" alt="Select install drive" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>Select install drive</em></p>
<p></a>
</div>
<p>Type <i>1</i> and press Return to install Rhapsody onto the first virtual drive.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div style="margin: 0pt 0pt -12px 16px; float: right; height: auto; width: 120px;">
<a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install11.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install11.thumbnail.png" alt="Partition drive and start install" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>Partition drive and start install</em></p>
<p></a>
</div>
<p>Type <i>1</i> and press Return use all of the virtual drive for Rhapsody. When the installer is ready to start the install type <i>1</i> and press Return to continue.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div style="margin: 0pt 0pt -12px 16px; float: right; height: auto; width: 120px;">
<a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install12.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install12.thumbnail.png" alt="Installing" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>Installing</em></p>
<p></a>
</div>
<p>Wait for the basic system install to complete. On my 2.0GHz MacBook with 2GB of RAM the basic install took about 6 minutes. </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div style="margin: 0pt 0pt -12px 16px; float: right; height: auto; width: 120px;">
<a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install13.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install13.thumbnail.png" alt="Reboot virtual machine" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>Reboot virtual machine</em></p>
<p></a>
</div>
<p><em>Step 4</em> &ndash; <i>Reboot and install additional drivers</i><br />
With the basic system install complete the installer prompts to reboot the system and load Rhapsody from the hard drive. To get a working installation it is necessary to intercept the reboot and use single user mode to manually install the additional third party drivers. After the manual driver installation the virtual machine can be rebooted again to allow the Rhapsody install to continue normally.</p>
<p>When the installer prompts you to remove the floppy disc and press Return. Keep the keyboard focus in the VMware window so that you can intercept the boot loader before it loads the kernel.</p>
<p>&nbsp;</p>
<div style="margin: 0pt 0pt -12px 16px; float: right; height: auto; width: 120px;">
<a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install14.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install14.thumbnail.png" alt="Boot to single user mode" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>Boot to single user mode</em></p>
<p></a>
</div>
<p>When the boot loader prompts for boot options type in <i>-s</i> and press Return. You have only 10 seconds at the boot loader prompt to enter this option.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div style="margin: 0pt 0pt -12px 16px; float: right; height: auto; width: 120px;">
<a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install15.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install15.thumbnail.png" alt="Rhapsody single user" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>Rhapsody single user</em></p>
<p></a>
</div>
<p>The boot loader will start the Rhapsody Mach kernel, register the detected basic hardware and drop into single user mode. </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div style="margin: 0pt 0pt -12px 16px; float: right; height: auto; width: 120px;">
<a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install16.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install16.thumbnail.png" alt="Manual driver install part 1" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>Manual driver install part 1</em></p>
<p></a></p>
<p><a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install17.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install17.thumbnail.png" alt="Manual driver install part 2" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>Manual driver install part 2</em></p>
<p></a></p>
<p><a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install18.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install18.thumbnail.png" alt="Manual driver install part 3" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>Manual driver install part 3</em></p>
<p></a>
</div>
<p>Open the virtual machine Settings window and attach the <tt style="font-size: larger;">driver.iso</tt> CD image to the virtual machine.</p>
<p>At the Rhapsody single user prompt enter the following commands:</p>
<blockquote><p>
<code>fsck<br />
mount -w /<br />
mkdir /mnt<br />
mount -t cd9660 /dev/sd0a /mnt<br />
cd /<br />
mkdir /drv<br />
cd /drv<br />
cp /mnt/*.tar<br />
cd /drv<br />
gnutar xf soundbla.tar<br />
gnutar xf vmmouse_.tar<br />
gnutar xf vmwarefb.tar<br />
gnutar xf vmxnet_1.tar<br />
find . -name \*.config<br />
mv SoundBlaster16PCI/Driver/SoundBlaster16PCI.config /private/Devices<br />
mv VMMouse/VMMouse.config /private/Devices<br />
mv VMWareFB.config /private/Devices<br />
mv VMXNet/VMXNet.config /private/Devices<br />
cd /<br />
\rm -rf /drv<br />
umount /mnt<br />
rmdir /mnt<br />
</code></p></blockquote>
<p>The text instructions are easier to edit and should take priority over the screenshots. Note that any errors resulting from the mount command are likely to be related to VMware not having the image file connected properly. Try disconnecting the CD image and reconnect it before repeating the mount command and continuing with the commands.</p>
<p>&nbsp;</p>
<div style="margin: 0pt 0pt -12px 16px; float: right; height: auto; width: 120px;">
<a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install19.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install19.thumbnail.png" alt="/private/Devices/System.config/Default.table after edits" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em><tt style="font-size: larger;">System.config/Default.table</tt> after edits</em></p>
<p></a>
</div>
<p>Edit the <tt style="font-size: larger;">/private/Devices/System.config/Default.table</tt> file to set Rhapsody to load the VMMouse and VMWareFB drivers. Open the file using <tt style="font-size: larger;">vi</tt> and edit the <tt style="font-size: larger;">"Active Drivers"</tt> line to equal <tt style="font-size: larger;">"VMMouse ParallelPort VMWareFB"</tt>. If the terminal controller gets lost you can force a screen redraw using Control-L.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div style="margin: 0pt 0pt -12px 16px; float: right; height: auto; width: 120px;">
<a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install20.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install20.thumbnail.png" alt="VMWareFB.config/Default.table after edits" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em><tt style="font-size: larger;">VMWareFB.config/Default.table</tt> after edits</em></p>
<p></a>
</div>
<p>Edit the <tt style="font-size: larger;">/private/Devices/VMWareFB.config/Default.table</tt> file to set the desired screen resolution and color depth. Open the file using <tt style="font-size: larger;">vi</tt> and edit the <tt style="font-size: larger;">"Display Mode"</tt> line to set the screen resolution to 768 high, 1024 wide.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div style="margin: 0pt 0pt -12px 16px; float: right; height: auto; width: 120px;">
<a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install21.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install21.thumbnail.png" alt="VMMouse.config/Default.table after edits" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em><tt style="font-size: larger;">VMMouse.config/Default.table</tt> after edits</em></p>
<p></a>
</div>
<p>Edit the <tt style="font-size: larger;">/private/Devices/VMMouse.config/Default.table</tt> file to set the <tt style="font-size: larger;">"X Size"</tt> and <tt style="font-size: larger;">"Y Size"</tt> of the screen to match the resolution selected in the VMWareFB configuration file. These settings control the scaling of the mouse operation. If the size is smaller than the actual resolution used then the mouse will be prevented from accessing the whole screen.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div style="margin: 0pt 0pt -12px 16px; float: right; height: auto; width: 120px;">
<a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install22.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install22.thumbnail.png" alt="Rhapsody booting 1" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>Rhapsody booting 1</em></p>
<p></a></p>
<p><a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install23.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install23.thumbnail.png" alt="Rhapsody booting 2" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>Rhapsody booting 2</em></p>
<p></a>
</div>
<p><em>Step 5</em> &ndash; <i>Reboot to configure drivers and continue the Rhapsody installer</i><br />
Before rebooting, use the <tt style="font-size: larger;">mount</tt> command to ensure that the driver CD image is no longer mounted. Disconnect the driver CD image and reconnect the Rhapsody DR2 CD to the virtual machine.</p>
<p>To reboot Rhapsody enter the <tt style="font-size: larger;">reboot</tt> command. Allow the boot loader to continue without adding any boot options.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div style="margin: 0pt 0pt -12px 16px; float: right; height: auto; width: 120px;">
<a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install24.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install24.thumbnail.png" alt="OpenStep driver config tool" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>OpenStep driver config tool</em></p>
<p></a></p>
<p><a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install25.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install25.thumbnail.png" alt="Display adapter settings" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>Display adapter settings</em></p>
<p></a></p>
<p><a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install26.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install26.thumbnail.png" alt="Mouse settings" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>Mouse settings</em></p>
<p></a>
</div>
<p>During the first full boot, Rhapsody drops into the OpenStep device driver configuration tool. Notice that the VMWare Display Adapter and VMWare mouse driver installed manually have been loaded. Check that the display adapter has the correct display mode set. Check that the mouse driver has the X size and Y size in the expert settings set to match the display display mode resolution.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div style="margin: 0pt 0pt -12px 16px; float: right; height: auto; width: 120px;">
<a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install27.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install27.thumbnail.png" alt="Install network driver" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>Install network driver</em></p>
<p></a>
</div>
<p>Install the network driver by clicking on the network icon (the globe) and click on the &#8220;Add&#8221; button to install the VMWare virtual network adapter.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div style="margin: 0pt 0pt -12px 16px; float: right; height: auto; width: 120px;">
<a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install28.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install28.thumbnail.png" alt="Install sound driver" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>Install sound driver</em></p>
<p></a>
</div>
<p>Install the sound driver in the same way.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div style="margin: 0pt 0pt -12px 16px; float: right; height: auto; width: 120px;">
<a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install29.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install29.thumbnail.png" alt="Save driver settings" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>Save driver settings</em></p>
<p></a>
</div>
<p>Verify the drivers are loaded then save the driver settings. It is possible to change these settings within Rhapsody but getting the display mouse and networking setup working now will ensure the remainder of the install goes smoothly. To continue the install click the &#8220;Quit&#8221; button in the driver configuration tool.</p>
<p>&nbsp;</p>
<div style="margin: 0pt 0pt -12px 16px; float: right; height: auto; width: 120px;">
<a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install30.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install30.thumbnail.png" alt="Select Rhapsody software packages" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>Select Rhapsody software packages</em></p>
<p></a></p>
<p><a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install31.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install31.thumbnail.png" alt="Package installation" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>Package installation</em></p>
<p></a>
</div>
<p>Select the software packages to install into Rhapsody. The safest option is to install all packages. Click on the &#8220;Install&#8221; button.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div style="margin: 0pt 0pt -12px 16px; float: right; height: auto; width: 120px;">
<a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install32.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install32.thumbnail.png" alt="Install finished" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>Install finished</em></p>
<p></a>
</div>
<p>Eject any floppy disks and click on the &#8220;Restart&#8221; button.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div style="margin: 0pt 0pt -12px 16px; float: right; height: auto; width: 120px;">
<a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install33.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install33.thumbnail.png" alt="Rhapsody Setup Assistant" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>Rhapsody Setup Assistant</em></p>
<p></a>
</div>
<p><em>Step 6</em> &ndash; <i>Rhapsody Setup Assistant</i><br />
Allow Rhapsody to boot to the Rhapsody Setup Assistant.</p>
<p>Step through the Setup Assistant. If you want to use OmniWeb set the system date to before Sept 1997.</p>
<p>Choose manual networking setup using the settings:</p>
<blockquote><p>
Host IP: 192.168.56.128<br />
Broadcast: 255.255.0.0<br />
Router: 192.168.56.2<br />
DNS server: 192.168.56.2
</p></blockquote>
<p>Add user to the wheel group. This can also be done later in Rhapsody using the Network Manager application.</p>
<p>&nbsp;</p>
<div style="margin: 0pt 0pt -12px 16px; float: right; height: auto; width: 120px;">
<a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install34.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install34.thumbnail.png" alt="Welcome to Rhapsody" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>Welcome to Rhapsody</em></p>
<p></a>
</div>
<p>When the Setup Assistant is finished the Rhapsody install is complete. </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div style="margin: 0pt 0pt -12px 16px; float: right; height: auto; width: 120px;">
<a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install35.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install35.thumbnail.png" alt="Installing Omni applications" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>Installing Omni applications</em></p>
<p></a></p>
<p><a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install36.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install36.thumbnail.png" alt="" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>Applications in place</em></p>
<p></a>
</div>
<p><em>Step 7 (Optional)</em> &ndash; <i>Applications in place</i><br />
With the Rhapsody CD connected to the virtual machine log in as root and unpack the Omni applications into the Local Applications folder. </p>
<p>I manually installed the Omni applications using the commands listed below. A commenter pointed out that the official install procedure is to use the <code>installer.sh</code> command to install each of the packages. The command for these installs follows the form: <code>installer.sh /RhapsodyDR2/Omni/OmniWeb.pkg</code>.</p>
<p><em>Manual Install Steps</em> &ndash; For reference only.</p>
<p>As root open a terminal window and issue the following commands:</p>
<blockquote><p>
<code>mkdir -p /Local/Applications/Network<br />
cd /Local/Applications/Network<br />
gnutar zxf /RhapsodyDR2/Omni/OmniWeb.pkg/OmniWeb.tar.gz<br />
mkdir -p /Local/Applications/Graphics<br />
cd /Local/Applications/Graphics<br />
gnutar zxf /RhapsodyDR2/Omni/OmniImage.pkg/OmniImage.tar.gz<br />
gnutar zxf /RhapsodyDR2/Omni/OmniPDF.pkg/OmniPDF.tar.gz<br />
cd /Local/Library<br />
mkdir Components<br />
mkdir Frameworks<br />
cd /Local/Library/Components<br />
gnutar zxf /RhapsodyDR2/Omni/OmniComponents.pkg<br />
cd /Local/Library/Frameworks<br />
gnutar zxf /RhapsodyDR2/Omni/OmniFrameworks.pkg<br />
</code></p></blockquote>
<p>&nbsp;</p>
<div style="margin: 0pt 0pt -12px 16px; float: right; height: auto; width: 120px;">
<a href="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install37.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com.nyud.net:8080/blogs/mar/wp-content/uploads/2007/06/rhapsody_dr2_install37.thumbnail.png" alt="OmniWeb" style="width: auto; float: right; margin-bottom: 6px;"/></p>
<p style="font-size: 0.8em; text-align: center; line-height: 1.4;"><em>OmniWeb</em></p>
<p></a>
</div>
<p>Reboot to ensure that the newly installed Frameworks and Components are indexed and ready for use. Start OmniWeb and surf.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<img src="http://www.smallersystems.com/blogs/mar/5bd81536/266bbf65/CCBot/1.0 (+http://www.commoncrawl.org/bot.html).gif" />]]></content:encoded>
			<wfw:commentRss>http://www.smallersystems.com/blogs/mar/2007/06/09/rhapsody-dr2/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Papers for OS X&#8230; tame those random .pdf piles</title>
		<link>http://www.smallersystems.com/blogs/mar/2007/05/31/papers-for-os-x-tame-those-random-piles-of-pdfs/</link>
		<comments>http://www.smallersystems.com/blogs/mar/2007/05/31/papers-for-os-x-tame-those-random-piles-of-pdfs/#comments</comments>
		<pubDate>Fri, 01 Jun 2007 00:24:43 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[OS X]]></category>
		<category><![CDATA[Research]]></category>

		<guid isPermaLink="false">http://www.smallersystems.com/people/mar/blog/2007/05/31/papers-for-os-x-tame-those-random-piles-of-pdfs/</guid>
		<description><![CDATA[During the course of my Masters and PhD work I accumulated a veritable mountain of papers&#8230; articles ordered from library research services, photocopied papers tossed on my desk by my advisor, and the occasional seminal paper that I stumbled across in an old journal that I knew that I&#8217;d never be able to find again. [...]]]></description>
			<content:encoded><![CDATA[<p>During the course of my Masters and PhD work I accumulated a veritable mountain of papers&#8230; articles ordered from library research services, photocopied papers tossed on my desk by my advisor, and the occasional seminal paper that I stumbled across in an old journal that I knew that I&#8217;d never be able to find again. A similar electronic mess was accumulated in the form of several archive folders of <tt>.PS.Z</tt> and <tt>.pdf</tt> files. The mountain of physical papers currently resides in a couple of filing boxes stored back in Australia but I can finally do something with the backups of the electronic papers that I&#8217;ve been religiously copying from one system to another since I finished my studies.</p>
<div style="margin: 0pt 0pt -12px 16px; float: right; height: auto; width: 120px;">
<a href="http://www.smallersystems.com/people/mar/blog/wp-content/uploads/2007/05/papers.png" style=" text-decoration: none;"><img src="http://www.smallersystems.com/people/mar/blog/wp-content/uploads/2007/05/papers.thumbnail.png" alt="Papers v1.0.2 screenshot." style="width: auto; float: right; "/></p>
<p style="font-size: 0.8em; text-align: center;"><em>Papers screenshot</em></p>
<p></a>
</div>
<p><a href="http://mekentosj.com/papers/">Papers</a> is an OS X application for managing archives of research papers. I toyed with Papers during the public preview and though the application had numerous bugs I was impressed with it enough to order a license before v1.0. As it turns out, my faith was well placed. Papers v1.0 resolved many of the obvious problems in the preview versions and the developers have quickly released a couple of updates to resolve some glaring bugs in subsequent versions.</p>
<p>Papers is currently at v1.0.2. The current version still has a few rough edges such as some odd quirks when updating Paper entries, off-by-one update issues when redisplaying the list of documents in the database after a delete, and phantom authors that persist in the authors list until the user triggers a clean-up of the database. But overall, this is a handy application for getting the typical mess of <tt>.pdf</tt> files under control.</p>
<p>In the same way that iTunes absolves the user from having to manage the storage of music files, Papers absolves the user from having to manage storage of your research papers. Documents stored in papers can be browsed by paper, author, or journal and the browse list can be constrained by a one-off keyword search. If that isn&#8217;t sufficient, then the user can build up <i>Smart Collections</i> of documents as required.</p>
<p>The current version of Papers is slanted to best manage papers from the area of biology and genetics. For example, the only online paper repository that Papers hooks into is <a href="http://www.ncbi.nlm.nih.gov/sites/entrez?db=pubmed">PubMed</a>, and there is currently no support for capturing author affiliations where a paper has multiple authors from different organizations. The developers of Papers have told me via email that they are aware of the slant toward the biomed space (due to the developer&#8217;s own background), but they hope to expand Papers to provide better coverage of metadata for other research fields. The developers also have defined an API that will eventually be made public to allow users to develop hooks into other online paper repositories.</p>
<img src="http://www.smallersystems.com/blogs/mar/5bd81536/266bbf65/CCBot/1.0 (+http://www.commoncrawl.org/bot.html).gif" />]]></content:encoded>
			<wfw:commentRss>http://www.smallersystems.com/blogs/mar/2007/05/31/papers-for-os-x-tame-those-random-piles-of-pdfs/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
