<?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>Let the Games Begin</title>
	<atom:link href="http://blog.standalonecode.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://blog.standalonecode.com</link>
	<description>Rails, iOS, Android, and Mac OS X development, and occasionally old BMWs</description>
	<lastBuildDate>Mon, 07 Jan 2013 19:00:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Android class &#8220;already added&#8221; when building</title>
		<link>http://blog.standalonecode.com/?p=294</link>
		<comments>http://blog.standalonecode.com/?p=294#comments</comments>
		<pubDate>Thu, 22 Mar 2012 21:39:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.standalonecode.com/?p=294</guid>
		<description><![CDATA[I am working on an Android project constructed of:

The main app (very lightweight wrapper + AndroidManifest.xml)
The main library (where all the real work gets done)
Facebook-android-sdk
HockeySDK-Android

Recently, I started seeing the following error when building the app using ant:

[dx] UNEXPECTED TOP-LEVEL EXCEPTION:
[dx] java.lang.IllegalArgumentException: already added: Lcom/facebook/android/R$anim;
[dx] 	at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123)
[dx] 	at com.android.dx.dex.file.DexFile.add(DexFile.java:163)
[dx] 	at com.android.dx.command.dexer.Main.processClass(Main.java:486)
[dx] 	at com.android.dx.command.dexer.Main.processFileBytes(Main.java:455)
[dx] 	at com.android.dx.command.dexer.Main.access$400(Main.java:67)
[dx] 	at [...]]]></description>
			<content:encoded><![CDATA[<p>I am working on an Android project constructed of:</p>
<ul>
<li>The main app (very lightweight wrapper + AndroidManifest.xml)</li>
<li>The main library (where all the real work gets done)</li>
<li>Facebook-android-sdk</li>
<li>HockeySDK-Android</li>
</ul>
<p>Recently, I started seeing the following error when building the app using ant:</p>
<blockquote>
<div id="_mcePaste">[dx] UNEXPECTED TOP-LEVEL EXCEPTION:</div>
<div id="_mcePaste">[dx] java.lang.IllegalArgumentException: already added: Lcom/facebook/android/R$anim;</div>
<div id="_mcePaste">[dx] 	at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123)</div>
<div id="_mcePaste">[dx] 	at com.android.dx.dex.file.DexFile.add(DexFile.java:163)</div>
<div id="_mcePaste">[dx] 	at com.android.dx.command.dexer.Main.processClass(Main.java:486)</div>
<div id="_mcePaste">[dx] 	at com.android.dx.command.dexer.Main.processFileBytes(Main.java:455)</div>
<div id="_mcePaste">[dx] 	at com.android.dx.command.dexer.Main.access$400(Main.java:67)</div>
<div id="_mcePaste">[dx] 	at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:394)</div>
<div id="_mcePaste">[dx] 	at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:245)</div>
<div id="_mcePaste">[dx] 	at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:131)</div>
<div id="_mcePaste">[dx] 	at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:109)</div>
<div id="_mcePaste">[dx] 	at com.android.dx.command.dexer.Main.processOne(Main.java:418)</div>
<div id="_mcePaste">[dx] 	at com.android.dx.command.dexer.Main.processAllFiles(Main.java:329)</div>
<div id="_mcePaste">[dx] 	at com.android.dx.command.dexer.Main.run(Main.java:206)</div>
<div id="_mcePaste">[dx] 	at com.android.dx.command.dexer.Main.main(Main.java:174)</div>
<div id="_mcePaste">[dx] 	at com.android.dx.command.Main.main(Main.java:95)</div>
<div id="_mcePaste">[dx] 1 error; aborting</div>
</blockquote>
<div></div>
<div>Upon inspection, it appeared that there were multiple R.java files per module with different package names but the same content. Removing all the &#8220;gen&#8221; directories in the entire project resulted in a successful from the command line.</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.standalonecode.com/?feed=rss2&amp;p=294</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building an Android app from the command line</title>
		<link>http://blog.standalonecode.com/?p=269</link>
		<comments>http://blog.standalonecode.com/?p=269#comments</comments>
		<pubDate>Sat, 27 Aug 2011 00:40:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://blog.standalonecode.com/?p=269</guid>
		<description><![CDATA[Why build an Android App from the command line?
For the purpose of creating a continuous integration build of an Android app, I needed to be able to build the app and its dependent modules from the command line.  This is done using ant.
Prerequisites
Of course, you must have the appropriate Android SDK installed for your development [...]]]></description>
			<content:encoded><![CDATA[<h2>Why build an Android App from the command line?</h2>
<p>For the purpose of creating a continuous integration build of an Android app, I needed to be able to build the app and its dependent modules from the command line.  This is done using <a href="http://ant.apache.org" target="_blank">ant</a>.</p>
<h2>Prerequisites</h2>
<p>Of course, you must have the appropriate <a href="http://developer.android.com/sdk/index.html" target="_blank">Android SDK</a> installed for your development platform.  Make sure the <code>tools</code> directory of the Android SDK is in your <code>PATH</code>.</p>
<p>You&#8217;ll also want to install <a href="http://ant.apache.org" target="_blank">ant</a>.</p>
<p>If you don&#8217;t already have Java installed, then <em>maybe</em> you should go visit the <a href="http://developer.android.com/index.html">Android Developer site</a> for some important background information.</p>
<h2>Your Project</h2>
<p>If you created your project using IntelliJ, then the build files mentioned below should be created for you automatically. If you created your project using Eclipse, then you&#8217;ll have to take an extra step to create the build files. Simply cd into the root directory of your project and execute the <code>android</code> command to generate the build files:</p>
<pre style="font: normal normal normal 12px/18px Consolas, Monaco, 'Courier New', Courier, monospace;">$ cd <em>android-project-directory</em>
$ android update project --path .</pre>
<p>This creates build.xml, default.properties, and local.properties for your project.</p>
<h2>Important Files</h2>
<p>There are four build files of critical importance which you can find in the root directory of your project:</p>
<p><strong><code>build.xml</code></strong> &#8212; this is the main ant build script.  Check this file into your version control system.</p>
<p><strong><code>default.properties</code></strong> &#8212; has a huge warning that says it&#8217;s generated by the Android tools and should not be modified. Check this file into your version control system.</p>
<p><strong><code>ant.properties</code></strong> (optional) &#8212; allows you to add application-build-specific entries used by the build script. Typically empty for a straightforward Android app build but can be customized for non-standard directory structure or build dependencies.  Check this file into your version control system or omit it entirely from the project if you have no customizations or build dependencies.</p>
<p><strong><code>local.properties</code></strong> &#8212; also generated by Android tools but should <em>not</em> be checked into your version control system. This is where the local path to your Android SDK directory root is specified, and this typically varies from one machine or build environment to the next.</p>
<h2>Build Command</h2>
<p>In order to build the app from the command line, cd to the root directory of your Android project (where the above files live and typically also where your <code>src</code> directory and your <code>AndroidManifest.xml</code> file live) and execute the ant command:</p>
<pre>$ cd <em>android-project-directory</em>
$ ant clean debug</pre>
<p>This command removes any leftover binaries or other artifacts from a previous build and rebuilds the app from scratch. If that is successful, then it packages and signs a debug version of the app. The console output from the command tells you where you can find the resulting .apk file for the app.  Here&#8217;s an example of the console output from a successful build showing the location of the resulting .apk file:</p>
<pre style="overflow: auto;">$ ant clean debug
Buildfile: /Users/mharper/Development/Android/Demo/HelloCI/build.xml
[setup] Android SDK Tools Revision 10
[setup] Project Target: Android 2.2
[setup] API level: 8
[setup]
[setup] ------------------
[setup] Resolving library dependencies:
[setup] No library dependencies.
[setup]
[setup] ------------------
[setup]
[setup] WARNING: No minSdkVersion value set. Application will install on all Android versions.
[setup]
[setup] Importing rules file: tools/ant/main_rules.xml
clean:
[delete] Deleting directory /Users/mharper/Development/Android/Demo/HelloCI/bin
[delete] Deleting directory /Users/mharper/Development/Android/Demo/HelloCI/gen
...
compile:
[javac] Compiling 2 source files to /Users/mharper/Development/Android/Demo/HelloCI/bin/classes
...
debug:
[echo] Running zip align on final apk...
<span style="color: #0000ff;">[echo] Debug Package: /Users/mharper/Development/Android/Demo/HelloCI/bin/HelloCI-debug.apk
</span>BUILD SUCCESSFUL
Total time: 4 seconds</pre>
<h2>Building an App with Dependencies</h2>
<p>It is common for an app to depend on one or more libraries that are built with a separate project. Thankfully, the Android build files make this easy to deal with.</p>
<p>Let&#8217;s say my HelloCI app depends on a HelloCILib that is a separate project built as an Android library.  Let&#8217;s also say that the HelloCI and HelloCILib root directories are in the same directory:</p>
<pre>$ ls
HelloCI		HelloCILib</pre>
<p>In order for the HelloCILib to be built before HelloCI, all you have to do is to reference its root directory path in the <code>build.properties</code> file of the main project (HelloCI, in this case) thusly:</p>
<pre>android.library.reference.1=../HelloCILib</pre>
<p>You can add more dependent projects simply by bumping the number at the end of the property, e. g. android.library.reference.2 etc. I understand that you should <em>not</em> leave any gaps in the numbering, however.</p>
<p>Notice how the build looks slightly different now that the dependent library is included:</p>
<div id="_mcePaste">
<pre style="overflow: auto;">$ ant clean debug
Buildfile: /Users/mharper/Development/Android/Demo/HelloCI/build.xml
    [setup] Android SDK Tools Revision 10
    [setup] Project Target: Android 2.2
    [setup] API level: 8
    [setup]
    [setup] ------------------
<span style="color: #0000ff;">    [setup] Resolving library dependencies:
    [setup] /Users/mharper/Development/Android/Demo/HelloCI: ../HelloCILib =&gt; /Users/mharper/Development/Android/Demo/HelloCILib
</span>    [setup] ------------------
    [setup] Ordered libraries:
    [setup] /Users/mharper/Development/Android/Demo/HelloCILib
    [setup] ------------------
    [setup]
    [setup] WARNING: No minSdkVersion value set. Application will install on all Android versions.
    [setup]
    [setup] Importing rules file: tools/ant/main_rules.xml
clean:
   [delete] Deleting directory /Users/mharper/Development/Android/Demo/HelloCI/bin
   [delete] Deleting directory /Users/mharper/Development/Android/Demo/HelloCI/gen
...
compile:
    [javac] Compiling 4 source files to /Users/mharper/Development/Android/Demo/HelloCI/bin/classes
...
debug:
     [echo] Running zip align on final apk...
     [echo] Debug Package: /Users/mharper/Development/Android/Demo/HelloCI/bin/com.standalonecode.HelloCI-debug.apk
BUILD SUCCESSFUL
Total time: 4 seconds</pre>
</div>
<h2>Summary</h2>
<p>Building an Android app from the command line is very straightforward, especially if you have a standard Android app directory structure. All of this work is leading up to creating a continuous integration build under Jenkins at <a href="http://www.cloudbees.com">cloudbees.com</a> which is the subject of another blog post.</p>
<p>The source for this example can be found on <a href="https://github.com/mharper/AndroidBuildDemo">GitHub</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.standalonecode.com/?feed=rss2&amp;p=269</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>It&#8217;s the mistakes that crack me up</title>
		<link>http://blog.standalonecode.com/?p=265</link>
		<comments>http://blog.standalonecode.com/?p=265#comments</comments>
		<pubDate>Wed, 13 Jul 2011 03:11:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.standalonecode.com/?p=265</guid>
		<description><![CDATA[When I was working on ResEdit for Apple back in the mid-90s, I made a mathematical mistake that caused resizing to be geometric instead of linear. Man, you could resize a control very quickly that way! Anyway, today&#8217;s mathematical mistake wasn&#8217;t quite as serious, but still brought me a good chuckle.
]]></description>
			<content:encoded><![CDATA[<p>When I was working on ResEdit for Apple back in the mid-90s, I made a mathematical mistake that caused resizing to be geometric instead of linear. Man, you could resize a control <em>very</em> quickly that way! Anyway, today&#8217;s mathematical mistake wasn&#8217;t quite as serious, but still brought me a good chuckle.</p>
<div id="attachment_267" class="wp-caption alignnone" style="width: 169px"><a href="http://blog.standalonecode.com/wp-content/uploads/2011/07/Screen-shot-2011-07-12-at-4.35.05-PM.png"><img class="size-medium wp-image-267" title="The Closer Screenshot" src="http://blog.standalonecode.com/wp-content/uploads/2011/07/Screen-shot-2011-07-12-at-4.35.05-PM-159x300.png" alt="" width="159" height="300" /></a><p class="wp-caption-text">Maybe I should make the circle fit *inside* the rectangle</p></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.standalonecode.com/?feed=rss2&amp;p=265</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android Emulator Seeks Network Connection</title>
		<link>http://blog.standalonecode.com/?p=263</link>
		<comments>http://blog.standalonecode.com/?p=263#comments</comments>
		<pubDate>Wed, 13 Apr 2011 15:43:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://blog.standalonecode.com/?p=263</guid>
		<description><![CDATA[I wasted a good amount of time this morning due to the Android Emulator&#8217;s inability to be moved from one network to another.
Because it takes so damn long to startup, I typically keep the Android Emulator running when I am working on Circle 8 for Android (as I have been lately).  In a typical [...]]]></description>
			<content:encoded><![CDATA[<p>I wasted a good amount of time this morning due to the Android Emulator&#8217;s inability to be moved from one network to another.</p>
<p>Because it takes so damn long to startup, I typically keep the Android Emulator running when I am working on <a href="http://www.circle8.net">Circle 8</a> for Android (as I have been lately).  In a typical day, I encounter at least three wifi networks: home, office, and the coffee shop.</p>
<p>Apparently, the Emulator prefers a monogamous relationship with networks and thus doesn&#8217;t switch over to a new wifi connection.  I was trying to setup the Email app in the Emulator to connect to my email account and it failed over and over again.  I finally decided to restart the Emulator, thinking that maybe it was lost with respect to the network.  Sure enough, restarting the Emulator resulted in being able to browse to a web page as well as setup the Email app no problem.</p>
<p><em>Edit (August 2011):</p>
<p>I have since abandoned the Emulator in favor of developing directly to an Android device. Significantly snappier and less prone to bizarre errors.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.standalonecode.com/?feed=rss2&amp;p=263</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wait for it&#8230;</title>
		<link>http://blog.standalonecode.com/?p=258</link>
		<comments>http://blog.standalonecode.com/?p=258#comments</comments>
		<pubDate>Wed, 19 Jan 2011 18:35:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Cucumber]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://blog.standalonecode.com/?p=258</guid>
		<description><![CDATA[On my current Rails project, I have been working on constraining &#8220;check-ins&#8221; to once daily or once weekly.  From a Cucumber scenario perspective, this means using Timecop to travel to a specific time/date, popping a jQuery dialog, entering some data, and pressing the Submit button.  This procedure is then immediately repeated, traveling to [...]]]></description>
			<content:encoded><![CDATA[<p>On my current Rails project, I have been working on constraining &#8220;check-ins&#8221; to once daily or once weekly.  From a Cucumber scenario perspective, this means using Timecop to travel to a specific time/date, popping a jQuery dialog, entering some data, and pressing the Submit button.  This procedure is then immediately repeated, traveling to a different point in time.  Upon completion of the successful path, I was asserting that both &#8220;check-ins&#8221; took place by looking at the model/database.  Unfortunately, this would fail quite randomly.  It was as if the second time travel was taking place <em>before</em> the first check-in was being written to the database.  If so, this would cause the second check-in to fail the daily or weekly constraint during validation.</p>
<p>What I needed to do was WAIT &#8212; wait for the check-in dialog to close before the second time travel.</p>
<p>It took some poking around, but I finally settled on the following step definition:</p>
<pre>
When /^I wait for (.*)to finish$/ do |sugar|
  page.wait_until do
    done = page.evaluate_script("window.jQuery.active == 0")
    putc done ? '*' : '+'
    done
  end
end
</pre>
<p>This allows me to write a step such as:</p>
<p><code>And I wait for the check-in to finish</code></p>
<p>This step prints a + every time through the loop while the page is still active, and then a * when it&#8217;s done. (Obviously, this is window dressing and not integral to the success of the step.)  Not only did this fix the scenario failures I had due to the race condition, it also got rid of the random &#8220;connection reset&#8221; errors I was seeing.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.standalonecode.com/?feed=rss2&amp;p=258</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title></title>
		<link>http://blog.standalonecode.com/?p=255</link>
		<comments>http://blog.standalonecode.com/?p=255#comments</comments>
		<pubDate>Thu, 02 Sep 2010 22:03:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[iPod / iPhone]]></category>

		<guid isPermaLink="false">http://blog.standalonecode.com/?p=255</guid>
		<description><![CDATA[In an iPhone app I&#8217;m working on which uses an MKOverlayView subclass, I found that the lines I was drawing were thinner on iPhone 4 than on iPhone.  Simple math to the rescue so the line has the same thickness on both platforms (e. g. I want a uniform lineWidth of 3.0):
   [...]]]></description>
			<content:encoded><![CDATA[<p>In an iPhone app I&#8217;m working on which uses an MKOverlayView subclass, I found that the lines I was drawing were thinner on iPhone 4 than on iPhone.  Simple math to the rescue so the line has the same thickness on both platforms (e. g. I want a uniform lineWidth of 3.0):</p>
<p><code>    overlayView.lineWidth = 3.0 * [[UIScreen mainScreen] scale];<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.standalonecode.com/?feed=rss2&amp;p=255</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rails 3: Validation error display using HAML</title>
		<link>http://blog.standalonecode.com/?p=233</link>
		<comments>http://blog.standalonecode.com/?p=233#comments</comments>
		<pubDate>Thu, 15 Jul 2010 22:22:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.standalonecode.com/?p=233</guid>
		<description><![CDATA[Here&#8217;s what I am using at the top of the view I just converted to HAML in a Rails 3 app to display any validation errors. Adjust for your own model and preferences as desired.
%h2 New Form in HAML
= form_for(@new_model) do &#124;f&#124;
  - if @new_model.errors.any?
    %div#errorExplanation
      [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s what I am using at the top of the view I just converted to HAML in a Rails 3 app to display any validation errors. Adjust for your own model and preferences as desired.</p>
<pre class="brush:plain">%h2 New Form in HAML
= form_for(@new_model) do |f|
  - if @new_model.errors.any?
    %div#errorExplanation
      %h2= "#{pluralize(@new_model.errors.count, "error")} prohibited this new_model from being saved:"
      %ul
        - @new_model.errors.full_messages.each do |msg|
          %li= msg</pre>
<p><em>Edit 16-July-2010: It turns out that Rails 3 has a template engine that you can use to generate the views for you using HAML when you scaffold up a resource. Watch Ryan Bates&#8217; excellent <a href="http://railscasts.com/episodes/216-generators-in-rails-3">Railscast Episode 216</a> for more information.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.standalonecode.com/?feed=rss2&amp;p=233</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rails (3?): Skip Test</title>
		<link>http://blog.standalonecode.com/?p=226</link>
		<comments>http://blog.standalonecode.com/?p=226#comments</comments>
		<pubDate>Mon, 14 Jun 2010 23:37:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://blog.standalonecode.com/?p=226</guid>
		<description><![CDATA[In updating an existing Rails app to run under Rails 3 (beta 4), I realized you could indicate that a certain test case should be skipped.  Literally, just add &#8220;skip&#8221; inside of the test (I added it to the top of one of mine as it was actually a work in progress) followed by an [...]]]></description>
			<content:encoded><![CDATA[<p>In updating an existing Rails app to run under Rails 3 (beta 4), I realized you could indicate that a certain test case should be skipped.  Literally, just add &#8220;skip&#8221; inside of the test (I added it to the top of one of mine as it was actually a work in progress) followed by an optional message.  For example:</p>
<pre class="brush:ruby">test "should take the warp core offline" do
  skip
  warp_core.dismount
end</pre>
<p>Very useful.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.standalonecode.com/?feed=rss2&amp;p=226</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I just saw something thought-provoking</title>
		<link>http://blog.standalonecode.com/?p=224</link>
		<comments>http://blog.standalonecode.com/?p=224#comments</comments>
		<pubDate>Tue, 18 May 2010 19:31:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Business]]></category>

		<guid isPermaLink="false">http://blog.standalonecode.com/?p=224</guid>
		<description><![CDATA[My office is in what I refer to as &#8220;the penthouse suite&#8221; in a medium-aged building in the core old business area of Sunriver, OR.  As such, I overlook one of the main two-lane roads that traverses the length of Sunriver north-south, the main part of the mall, a morsel of Mt Bachelor, and a [...]]]></description>
			<content:encoded><![CDATA[<p>My office is in what I refer to as &#8220;the penthouse suite&#8221; in a medium-aged building in the core old business area of Sunriver, OR.  As such, I overlook one of the main two-lane roads that traverses the length of Sunriver north-south, the main part of the mall, a morsel of Mt Bachelor, and a TON of trees.</p>
<p>Just a moment ago, a bird lit on the extreme tippy-top of a fir tree whose peak is only a few feet higher than my office, making the tree about 9 meters tall.  He landed on a treetop that is only about 1 square cm.  I immediately thought to myself, &#8220;I wonder why he landed on that spot? It&#8217;s difficult to land on and difficult to hold onto.  His bird feet can just barely hang on because there&#8217;s so little to hold onto.  He easily could&#8217;ve landed and rested in some comfort on a lower branch.&#8221;  To which I immediately responded to myself, &#8220;It obviously isn&#8217;t how comfortable he is that matters; it&#8217;s what he can see and do from there.&#8221;</p>
<p>My bird friend surveyed the area from there for about 60 seconds, and then he flew off &#8212; doubtless to somewhere he&#8217;d just seen from his recent perch.</p>
<p>I have an idea for a new logo for Standalone Code.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.standalonecode.com/?feed=rss2&amp;p=224</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Those pesky Xcode windows</title>
		<link>http://blog.standalonecode.com/?p=222</link>
		<comments>http://blog.standalonecode.com/?p=222#comments</comments>
		<pubDate>Sat, 15 May 2010 13:21:18 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Xcode]]></category>

		<guid isPermaLink="false">http://blog.standalonecode.com/?p=222</guid>
		<description><![CDATA[When working on an Xcode project, it&#8217;s really easy to end up with a dozen windows open.  You did know that you can close all of them and leave just the main project window open, right?
Just option-click in the close &#8220;box&#8221; (that&#8217;s what we used to call it when it was square, is it the [...]]]></description>
			<content:encoded><![CDATA[<p>When working on an Xcode project, it&#8217;s really easy to end up with a dozen windows open.  You did know that you can close all of them and leave just the main project window open, right?</p>
<p>Just option-click in the close &#8220;box&#8221; (that&#8217;s what we used to call it when it was square, is it the &#8220;close circle&#8221; now?) of any editor window, just not the main project window.  Et voilà &#8212; all windows closed.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.standalonecode.com/?feed=rss2&amp;p=222</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
