<?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>Tewha &#187; Software Development</title>
	<atom:link href="http://tewha.net/tag/software-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://tewha.net</link>
	<description>Links and writings on software development, mostly for iPhone and Mac OS X.</description>
	<lastBuildDate>Sun, 07 Mar 2010 22:57:50 +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>A one day project</title>
		<link>http://tewha.net/2010/02/a-one-day-project/</link>
		<comments>http://tewha.net/2010/02/a-one-day-project/#comments</comments>
		<pubDate>Sun, 07 Feb 2010 07:39:35 +0000</pubDate>
		<dc:creator>Steven Fisher</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[App Store]]></category>
		<category><![CDATA[do it]]></category>
		<category><![CDATA[iPhone Development]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://tewha.net/?p=1097</guid>
		<description><![CDATA[I started work today on an iPhone project with a friend. I figured it would take only a day to get to a reasonable 1.0. I've only put in about a half day on it so far, but at this point I'm pretty sure it's actually a two day project.
Looked at one way, that's a [...]]]></description>
			<content:encoded><![CDATA[<p>I started work today on an iPhone project with a friend. I figured it would take only a day to get to a reasonable 1.0. I've only put in about a half day on it so far, but at this point I'm pretty sure it's actually a two day project.</p>
<p>Looked at one way, that's a 200% estimation overflow. But more realistically, it means it was pretty small and I tackled it in the wrong way. I had to refactor some code early that I left alone for too long. I should've written in the right way to begin with, and I should have realized it was wrong sooner, and I should have stopped trying to make it work.</p>
<p>More pragmatically, maybe I should have known better. But, of course, I didn't. And that's okay! I know better now.</p>
<p>What's my point in posting this?</p>
<p>Mostly, it's this: <strong>iPhone development isn't nearly as hard as I've made it out to be</strong>. Useful applications can actually be quite small and still be useful. Simple things are simple. When they're not simple, it's time to fix something.</p>
<p>I'll post a link here when I finish the project. It'll be a bit before I can devote another day to it. But I'm excited by its usefulness, its simplicity, and the idea of having an app in the App Store of my own.</p>
]]></content:encoded>
			<wfw:commentRss>http://tewha.net/2010/02/a-one-day-project/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apple&#039;s Mistake</title>
		<link>http://tewha.net/2009/11/apples-mistake/</link>
		<comments>http://tewha.net/2009/11/apples-mistake/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 21:22:58 +0000</pubDate>
		<dc:creator>Steven Fisher</dc:creator>
				<category><![CDATA[Link]]></category>
		<category><![CDATA[App Store]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://tewha.net/?p=1092</guid>
		<description><![CDATA[Paul Graham (Wikipedia article) on Apple&#039;s Mistake, with a great comparison: What would happen if every update to Mac OS X had to go through an opaque, fickle intermediary?
]]></description>
			<content:encoded><![CDATA[<p>Paul Graham (<a href="http://en.wikipedia.org/wiki/Paul_Graham">Wikipedia article</a><a>) on </a><a href="http://paulgraham.com/apple.html">Apple&#039;s Mistake</a>, with a great comparison: What would happen if every update to Mac OS X had to go through an opaque, fickle intermediary?</p>
]]></content:encoded>
			<wfw:commentRss>http://tewha.net/2009/11/apples-mistake/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Joe Hewitt</title>
		<link>http://tewha.net/2009/11/joe-hewitt/</link>
		<comments>http://tewha.net/2009/11/joe-hewitt/#comments</comments>
		<pubDate>Sun, 15 Nov 2009 05:03:55 +0000</pubDate>
		<dc:creator>Steven Fisher</dc:creator>
				<category><![CDATA[Link]]></category>
		<category><![CDATA[App Store]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://tewha.net/?p=1087</guid>
		<description><![CDATA[Joe Hewitt, creator of the iPhone Facebook application and Three20 framework, has moved back to web development. A blog post explains, placing on Apple's App Store process without using so many words. But he makes an observation on how little it means on his way out.
]]></description>
			<content:encoded><![CDATA[<p>Joe Hewitt, creator of the iPhone Facebook application and Three20 framework, has moved back to web development. A blog post <a href="http://joehewitt.com/post/on-middle-men/">explains</a>, placing on Apple's App Store process without using so many words. But he makes an observation <a href="http://twitter.com/joehewitt/status/5645649654">on how little it means</a> on his way out.</p>
]]></content:encoded>
			<wfw:commentRss>http://tewha.net/2009/11/joe-hewitt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Loren Brichter on Tweetie reload</title>
		<link>http://tewha.net/2009/11/loren-brichter-on-tweetie-reload/</link>
		<comments>http://tewha.net/2009/11/loren-brichter-on-tweetie-reload/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 22:56:28 +0000</pubDate>
		<dc:creator>Steven Fisher</dc:creator>
				<category><![CDATA[Link]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iPhone Development]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[User interface]]></category>

		<guid isPermaLink="false">http://tewha.net/?p=1081</guid>
		<description><![CDATA[Joshua Kaufman interviews Loren Brichter on Tweetie's reload gesture. A good, non-technical read on finding the right way to present a feature, adding a custom gesture, and providing feedback.
]]></description>
			<content:encoded><![CDATA[<p>Joshua Kaufman interviews Loren Brichter on <a href="http://unraveled.com/archives/2009/11/tweetie-interview-loren-brichter">Tweetie's reload gesture</a>. A good, non-technical read on finding the right way to present a feature, adding a custom gesture, and providing feedback.</p>
]]></content:encoded>
			<wfw:commentRss>http://tewha.net/2009/11/loren-brichter-on-tweetie-reload/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Learning a new programming language</title>
		<link>http://tewha.net/2009/10/learning-a-new-programming-language/</link>
		<comments>http://tewha.net/2009/10/learning-a-new-programming-language/#comments</comments>
		<pubDate>Sat, 24 Oct 2009 17:05:21 +0000</pubDate>
		<dc:creator>Steven Fisher</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://tewha.net/?p=1077</guid>
		<description><![CDATA[It took me a while to learn Objective-C.
I started at the most basic level, wondering at the language. What are these brackets? What's with the @ signs? What's the difference between a - and a +? These aren't hard things to learn, but understanding the reasoning behind them helps. And then there's a point where [...]]]></description>
			<content:encoded><![CDATA[<p>It took me a while to learn Objective-C.</p>
<p>I started at the most basic level, wondering at the language. What are these brackets? What's with the @ signs? What's the difference between a - and a +? These aren't hard things to learn, but understanding the reasoning behind them helps. And then there's a point where it suddenly makes sense.</p>
<p>But the framework was confusing. How do I do this? Though I was less confused, this one isn't solved directly. I became competent. And I started to ask the best question: "Why?"</p>
<p>The patterns were still confusing. Why does this work this way? What's the purpose of this? Why is this done, but not this other thing?</p>
<p>And then there was a point where the patterns became obvious. More, the pattern in the patterns became obvious to me. And now, I look to find more examples of patterns, and patterns of patterns, to better build my knowledge.</p>
<p>It took me a while to get here, and it's the same for every language. I'm feeling pretty confident about Objective-C now.</p>
<p>Back on the first day, I was confused and lost.</p>
]]></content:encoded>
			<wfw:commentRss>http://tewha.net/2009/10/learning-a-new-programming-language/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The secret to enjoying Xcode</title>
		<link>http://tewha.net/2009/10/the-secret-to-enjoying-xcode/</link>
		<comments>http://tewha.net/2009/10/the-secret-to-enjoying-xcode/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 16:22:09 +0000</pubDate>
		<dc:creator>Steven Fisher</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Customization]]></category>
		<category><![CDATA[Pain reduction]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Xcode]]></category>

		<guid isPermaLink="false">http://tewha.net/?p=1071</guid>
		<description><![CDATA[One of the things that made me like Xcode more and become more efficient with it is realizing that while all coders are insane, me and Xcode's designers are insane in different ways.
By that, I mean that aside from the standard keyboard shortcuts (Save, Copy... that sort of thing), none of the keyboard shortcuts made [...]]]></description>
			<content:encoded><![CDATA[<p>One of the things that made me like Xcode more and become more efficient with it is realizing that while all coders are insane, me and Xcode's designers are <em>insane in different ways</em>.</p>
<p>By that, I mean that aside from the standard keyboard shortcuts (Save, Copy... that sort of thing), none of the keyboard shortcuts made sense to me.</p>
<p>So I duplicated one of the keyboard shortcut profiles and deleted most of the keyboard bindings. I was brutal with it — if the combination didn't make sense to me OR it was something I'd rarely use it was removed. Then I added keyboard shortcuts that I needed. By using about an hour to customize these settings, I ended up having keyboard shortcuts that I fully understood and rolled off my fingertips.</p>
<p>At this point — and this is where it became a useful exercise — I added my <code>~/Library/Application Support/Xcode</code> to version control so I could easily sync it between computers.  So when I find something that isn't quite working out for me, I make a change and propagate it to my other system.</p>
<p>Am I going to share what I ended up with? No, because that's not the point of this. Rather, I want to point out a simple fact of Xcode: <strong>Xcode will adapt to how you want to use it, and if you feel like you're suffering at all with it you should spend the time it to takes to make it enjoyable to use.</strong></p>
<p>And when someone tells me I can do something with a particular keyboard shortcut, I switch back to the defaults and see what it's bound to.</p>
]]></content:encoded>
			<wfw:commentRss>http://tewha.net/2009/10/the-secret-to-enjoying-xcode/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On skins and plugins</title>
		<link>http://tewha.net/2009/08/on-skins-and-plugins/</link>
		<comments>http://tewha.net/2009/08/on-skins-and-plugins/#comments</comments>
		<pubDate>Sun, 16 Aug 2009 07:38:10 +0000</pubDate>
		<dc:creator>Steven Fisher</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[rant]]></category>
		<category><![CDATA[skins]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[themes]]></category>

		<guid isPermaLink="false">http://tewha.net/?p=820</guid>
		<description><![CDATA[I started this post over six months ago, but never quite got around to finishing it. It might never be finished. But this is a thorn to me, so I'm just going to post it as is.
Should your new application support skins?
Probably not. Skins are often a programmer's way of saying "Oh, I don't do [...]]]></description>
			<content:encoded><![CDATA[<p>I started this post over six months ago, but never quite got around to finishing it. It might never be finished. But this is a thorn to me, so I'm just going to post it as is.</p>
<p>Should your new application support skins?</p>
<p>Probably not. Skins are often a programmer's way of saying "Oh, I don't do UI. We'll let someone else get it right." Only nobody ever does, at least not in your product. Your UI just isn't as compelling <a href="http://www.codinghorror.com/blog/archives/000789.html">as the one it's replacing</a>.</p>
<p>The corollary to this is that if lots of people are demanding skins, it means your UI sucks. Once you add skins, you'll never be rid of those skins, and you won't have fixed your application either.</p>
<p><em>You'd probably do better to fix your application's appearance and behavior.</em></p>
<p>Now, should you do a custom appearance?</p>
<p>If you're planning a completely custom appearance for your applications, odds are it will suck. Unless you have artists that are beyond simply competent, but brilliant, you'll probably fail.</p>
<p>First, you need a UI that looks and feels good. Secondly, it probably needs to fit in with the native platform. If you're planning a full screen game, it's fine to not fit in. But if you're building a Windows-based BIOS updater, that custom UI that you think looks so amazing? The truth is, it <a href="http://support.asus.com/technicaldocuments/technicaldocuments_content.aspx?no=714">looks like complete shit</a>.</p>
<p><em>You're better off fitting custom UI into the OS rather than changing your whole application to fit them.</em></p>
<p>Now, finally: What about plugins?</p>
<p>This one is a little less clear. There's great reasons to do plugins. Integration with another system (whether technical such as a web site or social such as particular requirements for reporting) is a good one.</p>
<p>But you know what isn't a great reason? Making your product a <em>platform</em>. Do you want to be a product people use, or a platform people struggle with?</p>
<p>Firefox's plugins make me flinch. They're usually poor quality, craptacular tools that lunge for a particular nugget of a good idea and fall flat on their faces a few yards away from it. There are a few that are interesting, but they'd <a href="https://addons.mozilla.org/en-US/firefox/addon/1843">benefit from being rolled in</a>, or being a <a href="https://addons.mozilla.org/en-US/firefox/addon/5817">separate stand-along product</a> on their own.</p>
<p>Pick your features carefully. 37signals didn't become popular by picking an extensive list of features or allowing people to write their own features. Instead, they built something they wanted to use. And they're not alone. There are a few things I'd love to see (<a href="http://daringfireball.net/projects/markdown/">MarkDown</a> instead of <a href="http://textile.thresholdstate.com/">Textile</a>, for instance), but even if a hypothetical plugin system could add these things, they'd be overwhelmed by the layer of suck.</p>
<p><em>Before you build a plugin architecture, put the effort into your application.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://tewha.net/2009/08/on-skins-and-plugins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Xcode and iPhone OS 3.0.1</title>
		<link>http://tewha.net/2009/07/xcode-and-iphone-os-3-0-1/</link>
		<comments>http://tewha.net/2009/07/xcode-and-iphone-os-3-0-1/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 18:52:18 +0000</pubDate>
		<dc:creator>Steven Fisher</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[iPhone OS]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Xcode]]></category>

		<guid isPermaLink="false">http://tewha.net/?p=1009</guid>
		<description><![CDATA[To get Xcode 3.1.3 working with iPhone OS 3.0.1, you'll need to teach Xcode how to target iPhone OS 3.0.1.
Xcode will automatically recognize iPhone OS 3.0.1 and look for a new SDK at a set path. The problem is that SDK doesn't exist. The good part is that the iPhone OS 3.0 SDK works perfectly [...]]]></description>
			<content:encoded><![CDATA[<p>To get Xcode 3.1.3 working with iPhone OS 3.0.1, you'll need to teach Xcode how to target iPhone OS 3.0.1.</p>
<p>Xcode will automatically recognize iPhone OS 3.0.1 and look for a new SDK at a set path. The problem is that SDK doesn't exist. The good part is that the iPhone OS 3.0 SDK works perfectly for developing 3.0.1. The only apparent change is the SMS fix.</p>
<p>Assuming you've installed to /Developer, the iPhone OS 3.0 SDK is here:</p>
<p><code>/Developer/Platforms/iPhoneOS.platform/DeviceSupport/3.0 (7A341)</code></p>
<p>When using Xcode with iPhone OS 3.0.1, Xcode looks for the iPhone OS 3.0.1 SDK here:</p>
<p><code>/Developer/Platforms/iPhoneOS.platform/DeviceSupport/3.0.1</code></p>
<p>The trick, then, is to build a symbolic link that connects what Xcode is looking for with what it needs to find.</p>
<p>So what do you do? Assuming you've installed Xcode in the standard location, this is a Terminal command to fix the problem:</p>
<p><code>ln -s /Developer/Platforms/iPhoneOS.platform/DeviceSupport\</p>
<p>/3.0\ \(7A341\) /Developer/Platforms/iPhoneOS.platform/\</p>
<p>DeviceSupport/3.0.1</code></p>
<p>(I've split this into three lines to make it easier to copy and paste with the \ line continuation character.)</p>
<p>This will not add a SDK to Xcode's list, it will just teach Xcode to map your device to the 3.0 SDK.</p>
<p>A few other tips:</p>
<ul>
<li>If you still can't debug restarting your iPhone may help. Most of the iPhones I've tried to debug on, I've had to restart first.</li>
<li>If you get an error regarding code signing, try downloading your provisioning profile again and re-installing it. Also, select it again in your build settings.</li>
</ul>
<p>Based on information from <a href="http://developer.apple.com/iphone/download.action?path=/iphone/iphone_sdk_3.0__final/iphone_os_3.0.1_advisory.pdf">iPhone OS 3.0.1 Advisory</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://tewha.net/2009/07/xcode-and-iphone-os-3-0-1/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>Anatomy of a feature</title>
		<link>http://tewha.net/2009/07/anatomy-of-a-feature/</link>
		<comments>http://tewha.net/2009/07/anatomy-of-a-feature/#comments</comments>
		<pubDate>Thu, 30 Jul 2009 19:16:04 +0000</pubDate>
		<dc:creator>Steven Fisher</dc:creator>
				<category><![CDATA[Link]]></category>
		<category><![CDATA[adding features]]></category>
		<category><![CDATA[feature requests]]></category>
		<category><![CDATA[feature set]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://tewha.net/?p=989</guid>
		<description><![CDATA[Brent Simmons (NetNewsWire): Anatomy of a feature. How a simple feature grows.  (via incanus77.)
]]></description>
			<content:encoded><![CDATA[<p>Brent Simmons (NetNewsWire): <a href="http://inessential.com/2009/07/30/anatomy_of_a_feature">Anatomy of a feature</a>. How a simple feature grows.  (via <a href="http://twitter.com/incanus77/status/2935841416">incanus77</a>.)</p>
]]></content:encoded>
			<wfw:commentRss>http://tewha.net/2009/07/anatomy-of-a-feature/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rules to avoid retain cycles</title>
		<link>http://tewha.net/2009/07/rules-to-avoid-retain-cycles/</link>
		<comments>http://tewha.net/2009/07/rules-to-avoid-retain-cycles/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 01:16:56 +0000</pubDate>
		<dc:creator>Steven Fisher</dc:creator>
				<category><![CDATA[Link]]></category>
		<category><![CDATA[cocoa]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[memory management]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[release retain]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://tewha.net/?p=967</guid>
		<description><![CDATA[Matt Gallagher: Rules to avoid retain cycles
]]></description>
			<content:encoded><![CDATA[<p>Matt Gallagher: <a href="http://cocoawithlove.com/2009/07/rules-to-avoid-retain-cycles.html">Rules to avoid retain cycles</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tewha.net/2009/07/rules-to-avoid-retain-cycles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
