<?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>Corporation Unknown</title>
	<atom:link href="http://corporationunknown.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://corporationunknown.com/blog</link>
	<description></description>
	<lastBuildDate>Thu, 08 Jul 2010 18:51:17 +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>iPad and the Digital Hub</title>
		<link>http://corporationunknown.com/blog/2010/07/08/ipad-and-the-digital-hub/</link>
		<comments>http://corporationunknown.com/blog/2010/07/08/ipad-and-the-digital-hub/#comments</comments>
		<pubDate>Thu, 08 Jul 2010 18:46:50 +0000</pubDate>
		<dc:creator>paul</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[iPad]]></category>

		<guid isPermaLink="false">http://corporationunknown.com/blog/?p=239</guid>
		<description><![CDATA[Yesterday I tweeted about a feature I would like:
Want: iPod on iPad able to browse desktop iTunes à la Home Sharing. Watching WWDC videos on iPad w/o having to sync first&#8211;yum.
I received a few recommendations for Air Video and StreamToMe. I&#8217;d forgotten that I&#8217;d downloaded Air Video but hadn&#8217;t set up the server; I&#8217;d also [...]]]></description>
			<content:encoded><![CDATA[<p><a href="https://twitter.com/pgor/status/17982503054">Yesterday I tweeted</a> about a feature I would like:</p>
<blockquote><p>Want: iPod on iPad able to browse desktop iTunes à la Home Sharing. Watching WWDC videos on iPad w/o having to sync first&#8211;yum.</p></blockquote>
<p>I received a few recommendations for <a href="http://www.inmethod.com/">Air Video</a> and <a href="http://projectswithlove.com/streamtome/">StreamToMe</a>. I&#8217;d forgotten that I&#8217;d downloaded Air Video but hadn&#8217;t set up the server; I&#8217;d also forgotten about StreamToMe even though I subscribe to Matt Gallagher&#8217;s blog. </p>
<p>I fired up the Air Video Server and started it serving the iTunes U playlist. Connecting and browsing from the iPad client was simple and straightforward. Trying to stream a WWDC video paused to buffer annoyingly often&#8211;which I blame less on the software than the 2GHz Mini it was running on, which probably also had the misfortune to have Time Machine kick in at the same time. But it doesn&#8217;t seem to have a functionality I implied by the &#8220;Home Sharing&#8221; reference: Copy the video to the iPad to watch elsewhere later. StreamToMe looks to have similar features (and lack thereof) to Air Video, so I didn&#8217;t test it.</p>
<p>I appreciate the recommendations, I really do. But neither of these can get past the one requirement I didn&#8217;t specify: I don&#8217;t <em>want</em> a third-party solution. My tweet was really a passive-aggressive desire to have Apple implement this.</p>
<p><span id="more-239"></span>I have fully committed to iTunes being my central media repository. It serves 157GB of my music, 148GB of movies, 100GB of TV shows, 144GB of iTunes U videos (primarily WWDC videos) and a variable amount of audio and video podcasts. As a result, I don&#8217;t have many files in formats foreign to iTunes, which both these applications seem focused on solving and I expect they handle admirably.</p>
<p>Both of my AppleTVs can access any file in the desktop&#8217;s iTunes library, even though with 40GB and 160GB drives they obviously can&#8217;t hold copies of everything. (True, I can&#8217;t instruct an AppleTV to copy files to itself, but I don&#8217;t feel the desire to pick it up and take it elsewhere, either.)</p>
<p>My iPad cannot access all the files.</p>
<p>My laptop can browse any file on the desktop&#8217;s iTunes library; thanks to Home Sharing it can copy any file just by dragging it to the local library. It can even browse other libraries that are shared on the network.</p>
<p>My iPad cannot copy files to its local library, or browse other shared libraries.</p>
<p>The &#8220;digital plumbing&#8221; is there in DAAP and Home Sharing to make this happen, but third party developers are left to write their own servers to support their clients. I have no reason to distrust InMethod or Matt Gallagher&#8211;and I&#8217;m pretty sure that either of them can write a better server than I ever could&#8211;but each additional server increases the likelihood of conflicts and security problems, so I don&#8217;t <em>want</em> to install and maintain additional, practically redundant servers.</p>
<p>I <em>want</em> a digital hub; one machine serving the same media in different ways is not a hub.</p>
<p>During the iPad announcement, Steve Jobs positioned the iPad as a third type of device &#8220;between a laptop and a smartphone.&#8221; In my experience, that&#8217;s an astute description. In regards to media handling, though, I feel the iPad still behaves much more like my iPhone than my MacBook Pro.</p>
]]></content:encoded>
			<wfw:commentRss>http://corporationunknown.com/blog/2010/07/08/ipad-and-the-digital-hub/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My Accessorizer Configuration</title>
		<link>http://corporationunknown.com/blog/2010/06/27/my-accessorizer-configuration/</link>
		<comments>http://corporationunknown.com/blog/2010/06/27/my-accessorizer-configuration/#comments</comments>
		<pubDate>Sun, 27 Jun 2010 19:52:28 +0000</pubDate>
		<dc:creator>paul</dc:creator>
				<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://corporationunknown.com/blog/?p=216</guid>
		<description><![CDATA[Due to &#8220;overwhelming demand,&#8221; I am sharing my configuration set for Accessorizer here. I think there needs to be some explanation to many of the decisions, though, so here you go. This is not intended to be an interminable discussion of coding style and practices, though&#8211;if you disagree, go ahead and make your own configuration [...]]]></description>
			<content:encoded><![CDATA[<p>Due to &#8220;overwhelming demand,&#8221; I am sharing my configuration set for Accessorizer here. I think there needs to be some explanation to many of the decisions, though, so here you go. This is not intended to be an interminable discussion of coding style and practices, though&#8211;if you disagree, go ahead and make your own configuration based on mine. This is also not intended as comprehensive documentation for Accessorizer&#8211;read its included documentation, explore tooltips, and experiment freely.</p>
<p><span id="more-216"></span><br />
<blockquote>
<p>Download the <a title="CorporationUnknown.azcf.zip" href="http://corporationunknown.com/blog/wp-content/uploads/2010/06/CorporationUnknown.azcf_.zip">Corporation Unknown configuration</a> for Accessorizer.</p>
</blockquote>
<p>At a previous employer, we ran into issues where newcomers were confused by Objective-C&#8217;s memory management, especially the differences between using properties (and dot notation) and directly accessing the ivar. As you might expect, this led to many memory-related problems. I&#8217;ve long been a proponent of only using accessors to access a member unless you have a darn good reason. (And Cocoa&#8217;s ? automatic key-value observing makes it even more difficult to have a good reason not to.) In order to visibly identify accessor-vs-direct access, we instituted a naming convention to make <a href="http://www.joelonsoftware.com/articles/Wrong.html">direct access look wrong</a>: ivars are named with an underscore prefix (&#8220;_ivar&#8221;) and properties are not. To make this even more obvious that ivars are implementation details, we declared them @private.</p>
<p>You may disagree with this methodology; that&#8217;s fine. But without this context, you might have a hard time understanding my configuration decisions&#8211;and why Accessorizer especially rocks in this setup.</p>
<p>When I first started using Accessorizer, I thought of it as a code generator, and it&#8217;s hard not to chafe at your disagreements with how code generators generate code. I&#8217;ve found that thinking of it as a code <em>template</em> generator makes it easier: Generate the majority of stuff you use, omit the stuff you don&#8217;t normally use, and be comfortable with the knowledge that you will regularly have to tweak its output&#8211;it&#8217;s still better than writing it from scratch every time.</p>
<h1>Accessor Style</h1>
<p><img style="display: block; margin-left: auto; margin-right: auto;" src="http://corporationunknown.com/blog/wp-content/uploads/2010/06/Accessorizer-Properties.png" border="0" alt="Accessorizer Properties" width="316" height="116" /></p>
<ul>
<li>&#8220;ObjC 2.0 Properties&#8221; is always turned on. Period.</li>
<li>I always use the Defaults Table (more about that later).</li>
<li>&#8220;Detect IBOutlets&#8221; automatically inserts the &#8220;IBOutlet&#8221; declaration into recognized subclasses. Sometimes it doesn&#8217;t identify a class I want to be an IBOutlet, but I find this to be right much more often than it is wrong.</li>
<li>&#8220;Append self.view=nil&#8221; is a somewhat strangely worded option. Checking it will generate code to nil those properties identified as IBOutlets. Combined with the &#8220;-(void)viewDidUnload&#8221; checkbox to its right, it will generate a full viewDidUnload method to release your IBOutlets.</li>
<li>&#8220;Assign delegates&#8221; automatically overrides your assign/retain/copy property generation setting to be &#8220;assign&#8221; for any &#8220;id&#8221; property (or others identified as a delegate form; again, I find more often right than wrong).</li>
<li>I uncheck &#8220;Omit assign for scalars&#8221;. True, the &#8220;assign&#8221; is not necessary, but I find it easier to scan for &#8220;assign&#8221; when I&#8217;m code reviewing than have to think about each type and whether it is handled appropriately. (According to Apple&#8217;s documentation, &#8220;assign&#8221; is also required for garbage collection but I haven&#8217;t written any GC code yet.)</li>
<li>&#8220;Assign IBOutlets&#8221; is unchecked. I guess I&#8217;m still in the &#8220;retain outlets&#8221; camp, until I bother to change my mind.</li>
<li>&#8220;BOOL getter=isValue&#8221; automatically identifies a &#8220;BOOL running&#8221; property and defines the getter as &#8220;isRunning&#8221;, just as Apple recommends.</li>
</ul>
<p><img style="display: block; margin-left: auto; margin-right: auto;" src="http://corporationunknown.com/blog/wp-content/uploads/2010/06/AccessorizerProps2.png" border="0" alt="Accessorizer Properties 2" width="498" height="111" /></p>
<ul>
<li>Since I&#8217;ve primarily been coding for iOS lately, I declare my properties &#8220;nonatomic&#8221;. If/when you&#8217;re working on the desktop, you probably want &#8220;omit this&#8221;&#8211;change it or create a &#8220;desktop&#8221; configuration.</li>
<li>I omit readonly/readwrite. Most of the readonly properties I create are not backed by ivars, so I find I don&#8217;t need to override this behavior often.</li>
<li>I haven&#8217;t been much concerned about __weak or __strong, so I omit it. You may decide otherwise.</li>
<li>&#8220;@synthesize&#8221; will create appropriate @synthesize statements when generation the Implementation. (Be sure to check &#8220;generate getter/setter&#8221;, even though it applies to @dynamic&#8211;I&#8217;ll explain later when talking about Defaults Table.)</li>
</ul>
<h2>Getter/Setter settings</h2>
<p><img style="display: block; margin-left: auto; margin-right: auto;" src="http://corporationunknown.com/blog/wp-content/uploads/2010/06/AccessorizerGetterSetter.png" border="0" alt="Accessorizer Getters and Setters" width="417" height="121" /></p>
<p>Not much to say about these settings other than &#8220;Use Defaults Table&#8221;. They don&#8217;t come into play very often, since I mainly use @synthesized properties but these settings work for me when I don&#8217;t. To see the effects on generated code, temporarily switch your properties generation to @dynamic with &#8220;generate getter/setter&#8221; checked and Implementation being generated&#8211;changes will be reflected as you make them.</p>
<h2>Dealloc</h2>
<p><img style="display: block; margin-left: auto; margin-right: auto;" src="http://corporationunknown.com/blog/wp-content/uploads/2010/06/AccessorizerDealloc.png" border="0" alt="Accessorizer Dealloc" width="378" height="123" /></p>
<ul>
<li>I default to &#8220;self.property = nil&#8221; behavior; I know others disagree. If you&#8217;re one of them, simply change the option to &#8220;release&#8221; in your configuration. If you do agree, or simply want to give this way a try, make a point of removing any related KVO or NSNotification observers before these generated lines or you will receive notifications of the nil settings and you most likely don&#8217;t want that.</li>
<li>&#8220;dealloc full block&#8221; is the primary reason I am not just making my configuration available without comment. If you were to just take my configuration and copy the generated code, it would break your build because I leave this deselected so it&#8217;s not in a code block. As I develop my classes, I add ivars and use Accessorizer to generate the related code. Most of the code is pretty easy to wholesale copy-n-paste, but I tend to have more logic in dealloc than Accessorizer can know about (KVO and NSNotification removal, setting delegates to nil, etc.) and I find it easier to copy this generated dealloc code into an existing method than to use this as a dealloc method and move existing behaviors into it. If you want a full dealloc method, just check the box.</li>
</ul>
<h2>Init and Undo</h2>
<p>I&#8217;m not sure why, but I still tend to write my own init methods. Someday I&#8217;ll explore using Accessorizer for this and Undo registration more fully; until then, you&#8217;re on your own.</p>
<h1>Defaults Table</h1>
<p>The defaults table is used to override the &#8220;one size fits all&#8221; property generation based on the ivar&#8217;s type. I have configured every superclass of &#8220;NSMutable&lt;Something&gt;&#8221; to default to &#8220;copy&#8221; instead of the default &#8220;retain&#8221; in order to avoid holding reference to a mutable object when I&#8217;m expecting immutable. (This is explained in <a href="http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW27">Apple&#8217;s documentation</a>.) I don&#8217;t even use some of these classes, but when I do I don&#8217;t want to be surprised. I&#8217;m always free to edit the declaration on a case-by-case basis, but this is the behavior I want ninety-some percent of the time.</p>
<p>Another fun feature of the Defaults Table is the &#8220;generation&#8221; setting. If you have a class type whose behavior you tend to override often, define its generation as &#8220;dynamic&#8221;. Every time you use that class type, Accessorizer will generate an @dynamic declaration&#8211;and the accessor methods for you to use as a starting template. (This is why I check the &#8220;generate getter/setter&#8221; in the Accessor tab even though it normally won&#8217;t do anything.)</p>
<h1>Custom Table</h1>
<p>I don&#8217;t really use this tab, and I don&#8217;t believe any of it gets saved into a configuration set since it&#8217;s primarily for point-and-click tweaking of behavior on an ivar-by-ivar basis.</p>
<h1>Coding Style</h1>
<p><img style="display: block; margin-left: auto; margin-right: auto;" src="http://corporationunknown.com/blog/wp-content/uploads/2010/06/AccessorizerCodingStyle.png" border="0" alt="Accessorizer ivar Prefix and Suffix" width="195" height="217" /></p>
<p>As I mentioned, I prefix my ivars with an underscore, so here is where I define that. By defining my ivar Prefix as &#8220;_&#8221; and Suffix as &#8220;none&#8221;, Accessorizer automatically recognizes that underscore and strips it when declaring the property. It also properly declares the backing ivar in the @synthesize directive.</p>
<ul>
<li>The Argument Prefix is used when generating methods like -initWith{&#8230;}. I vacillate between &#8220;a&#8221; and &#8220;none&#8221;.</li>
<li>Formatting Properties: new to 2.0 is the ability to tweak whitespace in declarations more than you could in previous versions. I&#8217;m happy because now I can use my preferred &#8220;NSString* title&#8221; form; I know many others still hew to the &#8220;asterisk must bind the the variable, not type&#8221; but you&#8217;re free to change it for yourself.</li>
<li>Formatting Methods: Configure the display to generate some accessor methods and experiment with these settings to see which layout you prefer. The &#8220;Tight&#8221; spacing option is actually more compressed than I like, but I find the &#8220;Spaced&#8221; option way too spread out (and I&#8217;m someone who loves whitespace). Therefore, I default to &#8220;Tight&#8221; because it&#8217;s easier to insert the few spaces I prefer than delete all the ones I don&#8217;t.</li>
<li>Formatting Pragma Marks: I love me some pragma marks, but try not to go overboard with them. Feel free to experiment.</li>
<li>Init Style: Apparently, &#8220;self = [super init]&#8221; is the current Apple-approved format. I&#8217;m ambivalent.</li>
</ul>
<h1>Collection Accessors, Keyed Archiving, KVO, Locking, Singleton, General and Sort</h1>
<p>Most of these tabs are more hands-on generation of code. You need to enter a class name, and it will generate code right there&#8211;I don&#8217;t use these as frequently as accessor generation, and you can tweak the layout more directly when you do need it. At some point, I may have changed my settings from the defaults you would encounter in a new install, but I don&#8217;t really have strong suggestions for you here.</p>
<p> </p>
]]></content:encoded>
			<wfw:commentRss>http://corporationunknown.com/blog/2010/06/27/my-accessorizer-configuration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Accessorizer 2.0 Configuration Sets</title>
		<link>http://corporationunknown.com/blog/2010/05/31/accessorizer-2-0-configuration-sets/</link>
		<comments>http://corporationunknown.com/blog/2010/05/31/accessorizer-2-0-configuration-sets/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 02:26:00 +0000</pubDate>
		<dc:creator>paul</dc:creator>
				<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://corporationunknown.com/blog/?p=212</guid>
		<description><![CDATA[The new version of Accessorizer is out! I&#8217;m still amazed at how many Cocoa (including iPhoneOS) developers I encounter who don&#8217;t know of this awesome utility. Here are just a few things this app does:

As its name suggests, it will generate the getters and setters for ivars you point it at. It will do this [...]]]></description>
			<content:encoded><![CDATA[<p>The new version of <a href="http://www.kevincallahan.org/software/accessorizer.html">Accessorizer</a> is out! I&#8217;m still amazed at how many Cocoa (including iPhoneOS) developers I encounter who don&#8217;t know of this awesome utility. Here are just a few things this app does:</p>
<ol>
<li>As its name suggests, it will generate the getters and setters for ivars you point it at. It will do this using Objective-C 2.0 @property syntax if you specify it. (I use the 2.0 syntax and revert when I want to customize a getter or setter so i can start with a &#8220;standard&#8221; usage style.)</li>
<li>Automatically recognize UIKit and AppKit classes and mark the properties as IBOutlets.</li>
<li>Recognize non-object ivars and set their properties as &#8220;assign&#8221; instead of &#8220;retain&#8221;.</li>
<li>You can configure defaults for ivar classes (all my NSString and NSData properties default to &#8220;copy&#8221; instead of &#8220;retain&#8221;).</li>
<li>Generate all the methods for collections to be nicely Key-Value Observing compliant.</li>
<li>Generate Keyed Archiving and Unarchiving methods for your ivars.</li>
<li>Generate template code for a Singleton class.</li>
</ol>
<p>That&#8217;s really just scratching the surface, but it&#8217;s the main functionality I use. As a Cocoa developer, you truly do owe it to yourself to check it out.</p>
<p>What makes me (rather selfishly) consider 2.0 an awesome update, though, is a feature I requested: Configuration Sets. The request grew partly out of encountering co-workers at contracting gigs who didn&#8217;t use Accessorizer. There are so many items to customize in the application, a first use could be daunting. If I can say, &#8220;Here&#8217;s my configuration to get you started,&#8221; and pass along my exported Configuration, they&#8217;re more likely to use it. (It also helps that they can now feel confident that they can revert after experimenting with settings.)</p>
<p>If I&#8217;m working on multiple projects with multiple clients, I can save their specific formatting requirements and switch between Configuration Sets when I change between projects.</p>
<p>If your company has defined formatting standards for the aspects Accessorizer can generate, standardizing with a Configuration Set allows you to quickly bring a new team member up to speed and into compliance.</p>
<p>There are more aspects to Configuration Sets I&#8217;d like to see, but they fall on the &#8220;magical&#8221; end of the spectrum; Kevin has done a great job of implementing the (more than) 80% part of it.</p>
<p>Seriously: Why aren&#8217;t you using Accessorizer?</p>
<p> </p>
]]></content:encoded>
			<wfw:commentRss>http://corporationunknown.com/blog/2010/05/31/accessorizer-2-0-configuration-sets/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WWDC: Eat the Lunch</title>
		<link>http://corporationunknown.com/blog/2010/05/20/wwdc-eat-the-lunch/</link>
		<comments>http://corporationunknown.com/blog/2010/05/20/wwdc-eat-the-lunch/#comments</comments>
		<pubDate>Thu, 20 May 2010 16:33:15 +0000</pubDate>
		<dc:creator>paul</dc:creator>
				<category><![CDATA[Mac Community]]></category>
		<category><![CDATA[WWDC]]></category>

		<guid isPermaLink="false">http://corporationunknown.com/blog/?p=210</guid>
		<description><![CDATA[&#8216;Tis the season for WWDC Survival Guides. I don&#8217;t really have anything to add from my post last year, but I want to state an opinion contrary to the prevailing common wisdom: Don&#8217;t be afraid to eat the lunches.
Digression: C4 is/was known for its excellent sit-down meals between sessions. At first, it seemed horribly inefficient [...]]]></description>
			<content:encoded><![CDATA[<p>&#8216;Tis the season for WWDC Survival Guides. I don&#8217;t really have anything to add from <a href="http://corporationunknown.com/blog/2009/06/04/prepping-for-wwdc/">my post last year</a>, but I want to state an opinion contrary to the prevailing common wisdom: Don&#8217;t be afraid to eat the lunches.</p>
<p>Digression: C4 is/was known for its excellent sit-down meals between sessions. At first, it seemed horribly inefficient to an engineer brain to get up after a session, move &#8220;all the way&#8221; to the banquet room next door, have to pick out a seat again, only to return to the session hall and have to find a new seat&#8211;why not just leave my stuff camped in the same seat all day?</p>
<p>But I quickly heeded Wolf&#8217;s advice-slash-admonition to find a different group of people to sit with at each change&#8211;and the world opened up. If you went to C4 just for the tech sessions, it was worth the cost but you only got the tip of the iceberg. I met well-knowns and unknowns and learned about their products, their consulting and business development experience, and got to know them without pressure. I may not even remember their names right now (I&#8217;m terrible with names) but every one of those conversations built community.</p>
<p>I&#8217;m not going to claim WWDC lunches will ever approach C4&#8217;s, but you can incorporate a bit of the C4 experience into WWDC: Instead of getting together with the same group for lunch every day, take at least two lunches in the cafeteria area. Find a seat at a table with other people you don&#8217;t know, and strike up a conversation to find out who they are, what they do, where they&#8217;re from. I somewhat unintentionally did this last year, and I promise you: It will open your eyes.</p>
<p>If you&#8217;re stuck for icebreakers, here are some old reliables: </p>
<ul>
<li>&#8220;What did you think of the Keynote/&#8217;State of&#8217; addresses?&#8221; </li>
<li>&#8220;Did you catch yesterday&#8217;s Brown Bag session?&#8221;</li>
<li>&#8220;What sessions are you looking forward to?&#8221; (earlier in the week)</li>
<li>&#8220;What was the best session you attended?&#8221; (I love this one later in the week)</li>
</ul>
<p>Asking where someone&#8217;s from or how many WWDCs they&#8217;ve attended tend to be short answers that don&#8217;t lead to conversations. Asking about shipping software can be great&#8211;people love talking about their products&#8211;but make the interest genuine so it doesn&#8217;t feel like an interview or &#8220;I&#8217;m only asking about yours so I can tell you about mine.&#8221;</p>
<p>Bring your business cards. After or during an interesting discussion, ask for one of theirs and offer one of yours. Periodically review the cards you&#8217;ve received during the week to refresh your memory of names and topics&#8211;you&#8217;ll be surprised how often you&#8217;ll run into those same people later.</p>
<p>Keep your own badge visible as much as possible to make it easy to approach you and ask about your company or just say &#8220;your name sounds familiar, did you&#8230;?&#8221;</p>
<p>For more advice on networking, check out <a href="http://inessential.com/2010/02/10/advice_to_new_developers_on_networking">Brent Simmon&#8217;s &#8220;Advice to new developers on networking&#8221;</a>.</p>
<p>For more tips on WWDC, <a href="http://iphonedevelopment.blogspot.com/2010/04/wwdc-first-time-guide-2010-edition.html">Jeff LaMarche&#8217;s &#8220;First Time Guide&#8221;</a> contains nothing but tips I completely agree with. (Except my serious personal aversion to sleeping in public, including on planes.) Wait, I have one extra note: Plan to stow your gear before attending the Thursday Bash. I had my laptop backpack one year, and was miserable.</p>
]]></content:encoded>
			<wfw:commentRss>http://corporationunknown.com/blog/2010/05/20/wwdc-eat-the-lunch/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[C4 dealloc]</title>
		<link>http://corporationunknown.com/blog/2010/05/12/c4-dealloc/</link>
		<comments>http://corporationunknown.com/blog/2010/05/12/c4-dealloc/#comments</comments>
		<pubDate>Wed, 12 May 2010 19:45:06 +0000</pubDate>
		<dc:creator>paul</dc:creator>
				<category><![CDATA[Mac Community]]></category>

		<guid isPermaLink="false">http://corporationunknown.com/blog/?p=204</guid>
		<description><![CDATA[There&#8217;s no way I&#8217;m going to fit into a tweet my feelings of Wolf Rentzsch&#8217;s announcement of the end of the C4 conference.
Last year was the first I&#8217;d managed to go to C4. I was glad I was attuned enough to the community to get into the short registration window; I was overloaded and overwhelmed [...]]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s no way I&#8217;m going to fit into a tweet my feelings of Wolf Rentzsch&#8217;s announcement of the <a href="http://rentzsch.tumblr.com/post/592949476/c4-release">end of the C4 conference</a>.</p>
<p>Last year was the first I&#8217;d managed to go to C4. I was glad I was attuned enough to the community to get into the short registration window; I was overloaded and overwhelmed by the conference itself and the people I met; I was desperately hoping to go again this year. </p>
<p>I guess I&#8217;m one of the silent apologists in regards to Section 3.3.1. I understand Apple not wanting to support backward compatibility going forward for a third-party dev environment, but I think it&#8217;s foolish of them to have called out something virtually unenforceable, and any claim of &#8220;crap apps&#8221; inherently generated from a Flash source only makes the current existence of crap apps on the App Store that much more ugly.</p>
<p>The speakers he brought in, the way he reacted to disrespect of a speaker, the statements he&#8217;s made in public and in person&#8211;Wolf&#8217;s decision seems perfectly self-consistent. He obviously feels Apple&#8217;s decision here affects him and the community more than I do. Even though our opinions differ, I respect his opinions and admire the strengths of his convictions.</p>
<p>Those same opinions and convictions gave C4 a unique character. In a time when there is a surfeit of excellent conferences to choose from, C4&#8217;s absence will leave a void.</p>
<p>I encourage all those who feel as strongly about Section 3.3.1 as Wolf does to start (or continue) to speak out about it. I may not be with you, but I&#8217;m not against you.</p>
<p>[super dealloc];</p>
]]></content:encoded>
			<wfw:commentRss>http://corporationunknown.com/blog/2010/05/12/c4-dealloc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On the Zeroth Day of iPad…</title>
		<link>http://corporationunknown.com/blog/2010/04/02/on-the-zeroth-day-of-ipad%e2%80%a6/</link>
		<comments>http://corporationunknown.com/blog/2010/04/02/on-the-zeroth-day-of-ipad%e2%80%a6/#comments</comments>
		<pubDate>Sat, 03 Apr 2010 01:34:30 +0000</pubDate>
		<dc:creator>paul</dc:creator>
				<category><![CDATA[iPad]]></category>

		<guid isPermaLink="false">http://corporationunknown.com/blog/?p=184</guid>
		<description><![CDATA[I realize I&#8217;m not the typical iPhone and iPad consumer; I&#8217;m perfectly happy to pay a nominal amount for a piece of software. Being a developer, I guess that&#8217;s kind of the Golden Rule. But it&#8217;s something I&#8217;ve felt for a long time: Pay the band a decent price for the music you enjoy and [...]]]></description>
			<content:encoded><![CDATA[<p>I realize I&#8217;m not the typical iPhone and iPad consumer; I&#8217;m perfectly happy to pay a nominal amount for a piece of software. Being a developer, I guess that&#8217;s kind of the Golden Rule. But it&#8217;s something I&#8217;ve felt for a long time: Pay the band a decent price for the music you enjoy and they can make more; pay a developer a decent price and they can afford the time to keep improving it. (That said, I&#8217;m perfectly happy to accept promo codes for your apps, even though I don&#8217;t have an app of my own right now to return in kind.)</p>
<p>I attended WWDC08 (the First iPhone WWDC) with the intent of avoiding iPhone topics because I have desktop ideas. I still have those desktop ideas, but since then the iPhone work has been more available, and I&#8217;ve become more intrigued by the possibilities. I worked as a (small) part of a team on an iPad app that&#8217;s on the store today&#8211;if you aren&#8217;t averse to paying money for an app, there&#8217;s a good chance I may have a bit of code on your iPad. (The app is intentionally <em>not</em> in the list of apps that follow.) I am currently working on another contract for an updated iPhone version and and iPad adaptation. It&#8217;s been fascinating to watch what Apple has done with the software, as well as how others are interpreting the platform without having hardware to test. For me, apps aren&#8217;t just about whether they&#8217;re functional; they&#8217;re a way to see what the popular interface designs are, as well as how developers took things in a different direction.</p>
<p>I just bought a bunch of applications for my iPad, and I haven&#8217;t even touched the device yet. I held off a whole day after the iPad App Store opened&#8211;yesterday I only downloaded free apps (in case they started charging for them later) and added items to my Want List while browsing through the list. Then I realized I&#8217;m going to want to dive right into syncing and running them when I rip apart the packaging tomorrow. <em>Then</em> I thought it might be worthwhile to make note of <em>why</em> I bought them before even trying them out.</p>
<p><span id="more-184"></span>First, credit to apps I already have (paid and free) that now have Universal versions:</p>
<hr />
<h1>Updated Apps</h1>
<h2><a href="http://itunes.apple.com/us/app/now-playing/id284939567?mt=8">Now Playing</a></h2>
<p>One of the first apps I had on my iPhone, and it&#8217;s still my go-to for finding movie times and reviews. The Netflix integration was nice, although I felt it added a lot of data download time to it (perhaps the new official Netflix app will convince me to use only it). I don&#8217;t anticipate my iPad will replace the iPhone as my &#8220;out and about&#8221; device, so we&#8217;ll see how much I use this.</p>
<h2><a href="http://itunes.apple.com/us/app/imdb-movies-tv/id342792525?mt=8">IMDb</a></h2>
<p>I&#8217;m a movie info dork; finally having the IMDb app on the iPhone was a welcome relief from using the site in Mobile Safari. We&#8217;ll see how much the iPad space adds.</p>
<h2><a href="http://itunes.apple.com/us/app/instapaper-pro/id288545208?mt=8">Instapaper Pro</a></h2>
<p>The latest <a href="http://itunes.apple.com/us/app/netnewswire-premium/id331598976?mt=8">NetNewsWire for iPhone</a> finally switched me from reading everything right at the moment to using <a href="http://www.instapaper.com/">Instapaper</a> as my &#8220;tab equivalent&#8221; (my desktop NetNewsWire constantly has plenty of tabs I &#8220;need&#8221; to get around to reading). Being an app developer without many graphics editor skills, <a href="http://www.marco.org/">Marco Arment&#8217;s</a> designs are an inspiration for seemingly minimal standard interfaces with lots of thought behind them, and the iPad screenshots look so much more engrossing than the iPhone version does. I would have paid again for an iPad version, but will happily accept that Marco decided against that.</p>
<h2><a href="http://itunes.apple.com/us/app/wordpress/id335703880?mt=8">WordPress</a></h2>
<p>With the iPad&#8217;s screen, I may actually be enticed to write with it instead of <em>MarsEdit</em> on the desktop. Maybe.</p>
<h2><a href="http://itunes.apple.com/us/app/reiner-knizias-money/id349220571?mt=8">Reiner Knizia&#8217;s Money</a></h2>
<p>I&#8217;m a big fan of boardgames, but while I love complex boardgames, I don&#8217;t get into big involved videogames (a fact that confounds many of my friends, especially those <em>in</em> the videogame industry). I&#8217;m really excited about some of the possibilities the iPad brings to boardgaming.</p>
<p><a href="http://www.boardgamegeek.com/boardgame/125/money">Money</a> is a card game I played once then hunted down a German copy of before it was reprinted recently. Unfortunately, it&#8217;s a bit quirky to get your head around on first play, so I haven&#8217;t found a willing group to play. Luckily, Shannon Appelcline has done an excellent job of fitting it into the iPhone, and I&#8217;m looking forward to it having breathing room on the iPad.</p>
<h2><a href="http://itunes.apple.com/us/app/mu/id351448383?mt=8">Mü</a></h2>
<p><a href="http://www.boardgamegeek.com/boardgame/152/mu-more">Mü</a> is an intriguing trick-taking card game that I haven&#8217;t quite been able to figure out the rules from the insert, so I downloaded the app primarily as a tutor. I haven&#8217;t had time to actually play it yet, but I&#8217;m looking forward to it still.</p>
<hr />
<h1>Paid Apps</h1>
<h2>iWork</h2>
<p>Duh. I don&#8217;t really use the iWork desktop apps much (in order, probably <a href="http://itunes.apple.com/us/app/keynote/id361285480?mt=8">Keynote</a>, <a href="http://itunes.apple.com/us/app/pages/id361309726?mt=8">Pages</a>, then <a href="http://itunes.apple.com/us/app/numbers/id361304891?mt=8">Numbers</a>) but these are obviously the standard bearers of iPad apps. As a developer of iPad and iPhone apps, it would be criminal to not pick these over for ideas and <em>de facto</em> standards.</p>
<h2><a href="http://itunes.apple.com/us/app/netnewswire-for-ipad/id363704172?mt=8">NetNewsWire</a></h2>
<p>I expect there will be some grumbling over this app&#8217;s somewhat erratic pricing history, having released a free (ad supported) and premium ($4.99 to remove ads) iPhone version, and now $9.99 to have it on the iPad. Doesn&#8217;t matter to me; NetNewsWire has been my RSS reader of choice since before NewsGator acquired them, and this is probably the most beautiful version yet without being cute and clever.</p>
<h2><a href="http://itunes.apple.com/us/app/1password-for-ipad/id364747489?mt=8">1Password</a></h2>
<p>Another app I can&#8217;t live without. Autogenerating strong unique passwords so I don&#8217;t have to remember them, syncing them to all my devices and computers, all while being stylish. There was no hesitation in paying for this on a new platform. </p>
<p>[Update: Just after I post this, I <a href="http://blog.agile.ws/post/487037159/1password-ipad-3-price-development-update">read</a> that I would have gotten 1Password Pro as a free Universal update. Oh well, such is the price of trying to do things sight unseen. I believe in learning from other people's mistakes--learn from mine and go grab <a href="http://itunes.apple.com/us/app/1password-pro/id319898689?mt=8">1Password Pro</a> now if you want to run it on iPhone and iPad.]</p>
<h2><a href="http://itunes.apple.com/us/app/things-for-ipad/id364365411?mt=8">Things</a></h2>
<p>$49.95 for the desktop app; $9.99 for the iPhone version; now another $19.99 to have it on the iPad? Yup, not a moment&#8217;s hesitation there. In my opinion, the whole point of a task list is to have it with you everywhere. Things does that with Apple Design Award-winning style and the iPad version looks like even more design inspiration. I know I don&#8217;t use this nearly as hard as others do, but I still feel it&#8217;s been worth every penny.</p>
<h2><a href="http://itunes.apple.com/us/app/articles-for-ipad/id364881979?mt=8">Articles</a></h2>
<p>I thought the recently released iPhone version of this was indeed very elegant, but i didn&#8217;t see that I needed that elegance on my iPhone the few times I need it for Wikipedia. I&#8217;m perfectly happy with <a href="http://itunes.apple.com/us/app/wikipanion/id288349436?mt=8">Wikipanion</a> for that. But with the space of an iPad, Articles looks like <em>exactly</em> the kind of elegance I would welcome when losing myself down the Wikipedia hole.</p>
<h2><a href="http://itunes.apple.com/us/app/souschef-for-ipad/id364906619?mt=8">SousChef</a></h2>
<p><a href="http://acaciatreesoftware.com/">Acacia Tree&#8217;s desktop app</a> has been sitting back in my subconscious since it was released. I love the idea of a recipes (and more!) app, but didn&#8217;t see it fitting into our household flow. (It doesn&#8217;t hurt that my wife has a handful of recipes we love enough to cycle through each week.) But somehow, I can see the iPad changing that with its portability. At $8, it&#8217;s pretty easy to take a shot at it.</p>
<h2><a href="http://itunes.apple.com/us/app/bento-for-ipad/id363230518?mt=8">Bento</a></h2>
<p>Another app that&#8217;s been sitting in the &#8220;possible&#8221; column for quite a while. I was going to hold off again&#8211;there&#8217;s just too much SQL geek in me to not resist the &#8220;return to FileMaker&#8221; stigma. I <em>know</em> there are things Bento could knock out quicker than I could without it, but I ended up rationalizing the &#8220;whopping&#8221; $5 price tag by thinking its presence might be beneficial for things my wife might want to do&#8211;and will probably end up teaching me a thing or two about it.</p>
<h2><a href="http://itunes.apple.com/us/app/flight-control-hd/id363727129?mt=8">Flight Control HD</a></h2>
<p>I came very late to the Flight Control party, but that didn&#8217;t stop it from hooking me for a while. I&#8217;m willing to become engrossed in it again.</p>
<h2><a href="http://itunes.apple.com/us/app/orbital-hd/id364600320?mt=8">Orbital HD</a></h2>
<p>This game completely hooked me with its beautiful retro simplicity. I was going to have to have the iPhone app on the iPad anyway, so $3 is dirt cheap to not have it resolution doubled.</p>
<h2><a href="http://itunes.apple.com/us/app/plants-vs-zombies-hd/id363282253?mt=8">Plants vs Zombies</a></h2>
<p>Oh, I tried to resist. I had downloaded the Mac trial and lost an afternoon to it. Somehow I managed to look away from the light, and count myself thankful. But at $3, I am weak.</p>
<h2><a href="http://itunes.apple.com/us/app/civilization-revolution-for/id364150646?mt=8">Civilization Revolution</a></h2>
<p>This one is for my wife; she loves civilization building games. When <a href="http://itunes.apple.com/us/app/simcity/id300255603?mt=8">SimCity</a> comes out for iPad, mine will probably &#8220;disappear&#8221; for a few weeks. I know very little about this game, but it looks right up her alley and she typed &#8220;drool&#8221; when I pointed it out to her in chat, so I&#8217;m crossing my fingers.</p>
<h2><a href="http://itunes.apple.com/us/app/my-first-tangrams-hd/id363843653?mt=8">My First Tangrams HD</a></h2>
<p>For my 4-(&#8220;and a half!&#8221;)-year-old daughter. This may be a bit young for her, but she loves these kinds of puzzle activities and it&#8217;s just a buck.</p>
<h2><a href="http://itunes.apple.com/us/app/wooly-willy/id284944951?mt=8">Wooly Willy</a></h2>
<p>Every time my daughter rediscovers the physical version of this, I think &#8220;I&#8217;m going to buy that iPhone app,&#8221; and then forget the name and can&#8217;t find it. It came up while perusing the list, so I&#8217;m dropping the big dollar on it finally.</p>
<h2><a href="http://itunes.apple.com/us/app/ichalkboard/id322491414?mt=8">iChalkboard</a></h2>
<p>Yeah, I heard about this from <a href="http://daringfireball.net/2010/04/kids_are_all_right">Daring Fireball</a>. But I was wanting a free-form drawing app for my daughter. I had been thinking <a href="http://itunes.apple.com/us/app/id363590649?mt=8">Brushes</a> might be over her head and this looks like a perfect fit.</p>
<hr />
<h1>Free Apps</h1>
<h2><a href="http://itunes.apple.com/us/app/ibooks/id364709193?mt=8">iBooks</a></h2>
<p>I&#8217;m really excited about this. I&#8217;ve been mulling over an e-reader for a long time. I surprisingly liked my <a href="http://kb.palm.com/wps/portal/kb/na/tungsten/t3/unlocked/learn/page_en.html">Palm Tungsten T3</a> for e-reading, and have read a number of EPUB books (primarily from <a href="http://www.pragprog.com/">Pragmatic Programmers</a>) on my iPhone using <a href="http://itunes.apple.com/us/app/stanza/id284956128?mt=8">Stanza</a>. But the size of the iPad screen will make that so much more comfortable&#8211;I may even be able to read text while looking at an illustration! </p>
<p>I had hoped that it would also integrate PDF documents and books, but that does not seem to be. I have some password-protected PDF books from <a href="http://www.apress.com/">Apress</a> that are not near as comfortable to read on the iPhone, so I will be exploring PDF reading apps in the near future.</p>
<p>I also plan to pick up design inspiration from iBooks for any document viewing applications I may be working on.</p>
<h2><a href="http://itunes.apple.com/us/app/harbor-master-hd/id363658120?mt=8">Harbor Master HD</a></h2>
<p>In the depth of my Flight Control addiction, I tried Harbor Master. It took Flight Control and added more complexity and stress points&#8211;instant addiction. I&#8217;m a bit nervous that this (currently) a free app and I find no mention of whether In-App Purchasing is expected to make it full-featured. But for free, I guess I&#8217;ll be able to get my money&#8217;s worth anyway.</p>
<h2><a href="http://itunes.apple.com/us/app/ap-news/id364677107?mt=8">AP News</a></h2>
<p>I&#8217;m not really a headline news junkie. I knew someone who worked on the early versions of <a href="http://itunes.apple.com/us/app/ap-mobile/id284901416?mt=8">AP Mobile</a>, so it was one of the first apps I put on my phone. It started out nice, then got overloaded and shrunk the important content away and I took it off my phone. This new AP app looks much more useful thanks to more screen space to fit in so much functionality&#8211;it also benefits from almost two years of iPhone design expertise that AP Mobile did not have at the time. I don&#8217;t know that it will make me into a news junkie, but it&#8217;s worth checking out.</p>
<h2><a href="http://itunes.apple.com/us/app/gotomeeting/id363452804?mt=8">GoToMeeting</a></h2>
<p>Thankfully, I don&#8217;t have to use GoToMeeting that often. But I was shocked to see this app available, and it kind of split my head right open to think of &#8220;videoconferencing&#8221; like this on my iPad. I may have to find a meeting just to try it out.</p>
<h2><a href="http://itunes.apple.com/us/app/netflix/id363590051?mt=8">Netflix</a></h2>
<p>As stated before, I am a bit of a movie junkie, and a Netflix member since November 1999. I didn&#8217;t really expect something like this to come out&#8211;especially the streaming aspect. I made the mistake of telling my wife about this, and now she&#8217;s lobbying hard to take our sole pre-ordered iPad out of town for 3 to 4 weeks of training she&#8217;s going to be attending.</p>
<h2><a href="http://itunes.apple.com/us/app/abc-player/id364191819?mt=8">ABC Player</a></h2>
<p>We&#8217;re still a TiVo family, not a Hulu or other online video family. (Our Netflix streaming is via TiVo.) I expect this will be less used than the Netflix app, but worth giving a try&#8211;who knows, it may be another tipping point for us.</p>
<h2><a href="http://itunes.apple.com/us/app/twitterrific-for-ipad/id359914600?mt=8">Twitterrific</a></h2>
<p>I like Twitterrific; I own paid versions on the iPhone and desktop. But <a href="http://itunes.apple.com/us/app/tweetie-2/id333903271?mt=8">Tweetie</a> rapidly became the Twitter app I use&#8211;the best I can describe it is that it just &#8220;fits&#8221; me better. I actually don&#8217;t foresee myself tweeting much from the iPad&#8211;there&#8217;s something about the idea of a full-screen Twitter client that makes it seem so much &#8220;heavier&#8221; than an iPhone or small window on the desktop. Just from a developer&#8217;s point of view, though, every version of Twitterrific is worth looking at for design cues.</p>
<hr />
<h1>Apps I&#8217;m Keeping an Eye On</h1>
<h2><a href="http://itunes.apple.com/us/app/omnigraffle/id363225984?mt=8">OmniGraffle</a></h2>
<p>Oh, I&#8217;ll bet this one will raise a stink with its price. Meanwhile, <a href="http://www.omnigroup.com/">Omni Group</a> will remain one of the top-grossing sellers as they gather users who don&#8217;t complain about quality&#8211;they pay for it.</p>
<p>I love <a href="http://www.omnigroup.com/products/omnigraffle/">OmniGraffle</a>; I have it on my desktop. I just don&#8217;t use it frequently there, and don&#8217;t imagine that frequency increasing on my iPad. When I reach the conclusion that I want to draw on my iPad and transfer the documents to my desktop, I&#8217;m definitely paying the $50.</p>
<h2><a href="http://itunes.apple.com/us/app/omnigraphsketcher/id363234160?mt=8">OmniGraphSketcher</a></h2>
<p>This app is so cool, but just like OmniGraffle I don&#8217;t foresee it getting much use. On the other hand, it&#8217;s not completely out of the price range of buying to show off cool technology (every time I look at it, I think of the <a href="http://www.PacificT.com/Story/">Graphing Calculator</a>, Next Generation). I will also rationalize it as a great place for design inspiration.</p>
<h2><a href="http://itunes.apple.com/us/app/small-world-for-ipad/id364165557?mt=8">Small World</a></h2>
<p>And we&#8217;ll end it on a boardgame. Small World is one of my least favorite games from <a href="http://www.daysofwonder.com/en/">Days of Wonder</a>, but as I said before there seems to be lots of potential in the iPad/boardgame intersection; in this case, you can get a $50 MSRP boardgame for $5 in digital form. Days of Wonder makes great games; if they start to release more of their games for the iPad&#8211;especially if those games are integrated with their existing <a href="http://www.daysofwonder.com/en/play/">online play system</a>&#8211;my productivity is doomed, and my wife might just disappear after she gets an iPad of her own.</p>
]]></content:encoded>
			<wfw:commentRss>http://corporationunknown.com/blog/2010/04/02/on-the-zeroth-day-of-ipad%e2%80%a6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Voices That Matter</title>
		<link>http://corporationunknown.com/blog/2010/02/23/voices-that-matter/</link>
		<comments>http://corporationunknown.com/blog/2010/02/23/voices-that-matter/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 06:55:56 +0000</pubDate>
		<dc:creator>paul</dc:creator>
				<category><![CDATA[Mac Community]]></category>

		<guid isPermaLink="false">http://corporationunknown.com/blog/?p=175</guid>
		<description><![CDATA[I will be attending the Voices That Matter iPhone Developers Conference (attending, not speaking) here in Seattle on April 24th and 25th. If Gus Mueller and Brent Simmons can&#8217;t convince you to attend, I can&#8217;t imagine I&#8217;ll tip the balance by listing the reasons again, so I won&#8217;t try.
If for some reason you know who [...]]]></description>
			<content:encoded><![CDATA[<p>I will be attending the <a href="http://www.voicesthatmatter.com/iphone2010/">Voices That Matter iPhone Developers Conference</a> (attending, <em>not</em> speaking) here in Seattle on April 24th and 25th. If <a href="http://shapeof.com/archives/2010/02/seattle_iphone_conf-_voices_that_matter.html">Gus Mueller</a> and <a href="http://inessential.com/2010/02/22/voices_that_matter_iphone_conference_s">Brent Simmons</a> can&#8217;t convince you to attend, I can&#8217;t imagine I&#8217;ll tip the balance by listing the reasons again, so I won&#8217;t try.</p>
<p>If for some reason you know who I am but we haven&#8217;t actually met yet, introduce yourself and let me buy you a drink. You should be able to stalk me best that weekend by following my personal <a href="http://twitter.com/pgor">Twitter account</a>.</p>
<div style="text-align:center;"><a href="http://www.voicesthatmatter.com/iphone2010/"><img src="http://corporationunknown.com/blog/wp-content/uploads/2010/02/B9561B40-CAE0-4042-BE19-0EF8B3DCEB1B.jpg" alt="B9561B40-CAE0-4042-BE19-0EF8B3DCEB1B.jpg" border="0" width="150" height="150" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://corporationunknown.com/blog/2010/02/23/voices-that-matter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Clean Up Your Actions</title>
		<link>http://corporationunknown.com/blog/2010/01/21/clean-up-your-actions/</link>
		<comments>http://corporationunknown.com/blog/2010/01/21/clean-up-your-actions/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 16:33:54 +0000</pubDate>
		<dc:creator>paul</dc:creator>
				<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://corporationunknown.com/blog/?p=162</guid>
		<description><![CDATA[We all know how to define an IBAction:

- (IBAction) sliderChanged:(id)sender;

For the iPhone, you can even define it without the sender if the method won&#8217;t use it:

- (IBAction) sliderChanged;

The annoyance comes when implementing the method&#8211;that generic id parameter needs to be cast to the class you usually already know it to be, resulting in either casts [...]]]></description>
			<content:encoded><![CDATA[<p>We all know how to define an IBAction:</p>
<pre class="code">
- (IBAction) sliderChanged:(id)sender;
</pre>
<p>For the iPhone, you can even define it without the <code>sender</code> if the method won&#8217;t use it:</p>
<pre class="code">
- (IBAction) sliderChanged;
</pre>
<p>The annoyance comes when implementing the method&#8211;that generic <code>id</code> parameter needs to be cast to the class you usually already <em>know</em> it to be, resulting in either casts all over:</p>
<pre class="code">
- (IBAction) sliderChanged:(id)sender {
   int progressAsInt = (int)([(UISlider*)sender value] + 0.5f);
   float minValue = [(UISlider*)sender minimumValue];
   float maxValue = [(UISlider*)sender maximumValue];
}
</pre>
<p>or the use of a local variable whose sole purpose is to hold the pre-cast parameter:</p>
<pre class="code">
- (IBAction) sliderChanged:(id)sender {
   UISlider* slider = (UISlider*)sender;
   int progressAsInt = (int)([slider value] + 0.5f);
   float minValue = [slider minimumValue];
   float maxValue = [slider maximumValue];
}
</pre>
<h2>Clean it up</h2>
<p>The key to cleaning up your IBActions lies in Objective-C&#8217;s behavior of treating all objects as <code>id</code> at heart: Declaring a type for an object is really only beneficial to you at compilation time, warning you of possible mistyping. (It also enables autocompletion.) But that&#8217;s not a limitation, it&#8217;s something to leverage!</p>
<p>When you know the single class (or superclass of the family of classes), declare it in the method signature:</p>
<pre class="code">
- (IBAction) sliderChanged:(UISlider*)slider {
   int progressAsInt = (int)([slider value] + 0.5f);
   float minValue = [slider minimumValue];
   float maxValue = [slider maximumValue];
}
</pre>
<p>If you&#8217;re one of those (crazy) people who call the action method in code, you will now be warned when trying to pass an unexpected control (e.g. a <code>UISwitch</code> instead of <code>UISlider</code>).</p>
<p>Added bonus: By declaring the action with a specific parameter type in the header, Interface Builder will use that information to filter available connections. Not only will you have a shorter list of actions to choose from when connecting, you won&#8217;t even be <em>allowed</em> to accidentally connect a <code>UISwitch</code> to an action expecting a <code>UISlider</code>.</p>
<blockquote><p><strong>Note:</strong> If you do clean up actions in this way for existing projects, verify your nibs afterward. Interface Builder will display a warning icon in the lower right corner of the nib window, but the CompileXIB build phase is not configured to generate these warnings by default.
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://corporationunknown.com/blog/2010/01/21/clean-up-your-actions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Practical XML Parsing</title>
		<link>http://corporationunknown.com/blog/2009/09/17/practical-xml-parsing/</link>
		<comments>http://corporationunknown.com/blog/2009/09/17/practical-xml-parsing/#comments</comments>
		<pubDate>Thu, 17 Sep 2009 16:48:36 +0000</pubDate>
		<dc:creator>paul</dc:creator>
				<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Mac Community]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://corporationunknown.com/blog/?p=147</guid>
		<description><![CDATA[I presented &#8220;Practical XML Parsing&#8221; at the September 10, 2009 meeting of Seattle Xcoders. While there is still a touch of the initially intended distaste for parsing XML with DOM, it evolved into more of an overview and brief introduction of NSXMLDocument and NSXMLParser.
After cleaning out large copyrighted material (part of a Justin Timberlake song [...]]]></description>
			<content:encoded><![CDATA[<p>I presented &#8220;Practical XML Parsing&#8221; at the September 10, 2009 meeting of <a href="http://www.seattlexcoders.org/">Seattle Xcoders</a>. While there is still a touch of the initially intended distaste for parsing XML with DOM, it evolved into more of an overview and brief introduction of NSXMLDocument and NSXMLParser.</p>
<p>After cleaning out large copyrighted material (part of a Justin Timberlake song on the title screen and a Star Wars snippet on the XQuery screen) and removing many of the Keynote build animations I like to use but which translate poorly to static images, I have made the presentation available. I didn&#8217;t record the audio, so the text may seem more terse than it really was.</p>
<ul>
<li><a href="http://corporationunknown.com/presentations/practical_xml_parsing.html">HTML export</a> with most of the animations still intact</li>
<li><a href="http://seattlexcoders.org/shared/Practical%20XML%20Parsing.zip">Zipped archive</a> containing:
<ul>
<li>Keynote 09 file</li>
<li>PDF export</li>
<li>XMLDemo source serving as the examples I showed</li>
</ul>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://corporationunknown.com/blog/2009/09/17/practical-xml-parsing/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Software Illusionist</title>
		<link>http://corporationunknown.com/blog/2009/08/25/software-illusionist/</link>
		<comments>http://corporationunknown.com/blog/2009/08/25/software-illusionist/#comments</comments>
		<pubDate>Tue, 25 Aug 2009 15:56:54 +0000</pubDate>
		<dc:creator>paul</dc:creator>
				<category><![CDATA[Mac Community]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://corporationunknown.com/blog/?p=145</guid>
		<description><![CDATA[The only time I ever attended MacWorld Expo, I was working behind the booth for a Mac retailer in the Bay Area. It was a long and tiresome time, without the opportunity to explore the other booths. (I believe RAMDoubler might have been the show hit, to give you a Dark Ages reference point.)
Even behind [...]]]></description>
			<content:encoded><![CDATA[<p>The only time I ever attended MacWorld Expo, I was working behind the booth for a Mac retailer in the Bay Area. It was a long and tiresome time, without the opportunity to explore the other booths. (I believe RAMDoubler might have been the show hit, to give you a Dark Ages reference point.)</p>
<p>Even behind the booth, I got to meet a lot of interesting people. There were plenty of independent developers even then, and many of them had whimsical titles on their business cards; I seem to recall a &#8220;Grand Poobah,&#8221; but the one title that made the biggest impression on me was &#8220;Software Illusionist.&#8221;</p>
<p>I remarked on the title and the gentlemen replied to the effect of, &#8220;really, that&#8217;s all it is I do&#8211;present an illusion that people find useful.&#8221; That simple statement (probably mutated somewhat through the years in my memory) was revelatory for me. </p>
<p>It may seem trite to say &#8220;it&#8217;s all ones and zeroes&#8221; but at some level that <em>is</em> all we do as developers: Find ways to organize and present data patterns to users in a manner which doesn&#8217;t require a Beautiful Mind to interpret, or make it look like a ball bouncing around an artificial rectangular constraint on screen, or make it sound like music, or convert physical stimuli to a data pattern to present later. When the user buys into the illusion and doesn&#8217;t have to hear the creaking of the mechanism, the Software Illusionist has succeeded.</p>
<p>To that Software Illusionist, whoever you were (or hopefully still <em>are</em>): Because of you, to this day I am still compelled to make my software feel like magic. Sometimes it feels like a curse, but I still consider it a blessing.</p>
<p>Thank you.</p>
]]></content:encoded>
			<wfw:commentRss>http://corporationunknown.com/blog/2009/08/25/software-illusionist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
