<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3828680</id><updated>2011-11-27T15:24:49.459-08:00</updated><category term='linux'/><category term='iphone'/><category term='blogging'/><category term='Blogger'/><category term='sync'/><category term='SDK'/><category term='Objective-C'/><category term='mac'/><category term='palm'/><title type='text'>edweirdo's tech blog</title><subtitle type='html'>thoughts on software development and technology</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://edweirdo.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3828680/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://edweirdo.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>edweirdo</name><uri>http://www.blogger.com/profile/00498440929138208308</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>3</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3828680.post-5630261120267364242</id><published>2009-05-11T22:34:00.001-07:00</published><updated>2009-05-12T23:58:54.189-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Objective-C'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='SDK'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><title type='text'>Impressions of iPhone Application Development</title><content type='html'>&lt;span style=";font-family:trebuchet ms;font-size:100%;"  &gt;This article provides a summary of my impressions of writing software for an iPhone, after spending a couple days playing around with the SDK and doing online tutorials to build sample apps. This article is intended for&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt; folks who have not done development using Apple's iPhone SDK (Xcode, Interface Builder) but are curious about it.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:trebuchet ms;"&gt;Let me provide some context on my background, so you know where I'm coming from:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:trebuchet ms;"&gt;Prior to purchasing an iMac just over a week ago, I had never done any coding on a Mac platform&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:trebuchet ms;"&gt; This was the first time I had written code in Objective-C&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:trebuchet ms;"&gt;I am a software architect who has worked primarily on systems running on Linux/Unix platforms. I have been doing OO Design and Development for 13 years&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;div&gt;I will use the term "iPhone" throughout this article, but that implicitly includes iTouch devices.&lt;/div&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;Development Platform&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;You have to use Apple's SDK on a Mac platform to do the coding. There is no SDK for Windows. Also, the only apps that you can distribute on Apple's App Store are ones that have been built on a Mac platform.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;While you can "jailbreak" your iPhone so that you can write code for it on Windows, you won't be able to distribute / sell your apps on the Apple App Store. That's a significant business concern. You can sell / distribute your jailbroken apps on a site called Cydia, but I don't know many iPhone users would "jailbreak" their phones and buy apps from a 3rd party other than Apple.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;So, on the one hand, developers benefit from the iPhone platform, which provides:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:trebuchet ms;"&gt;a soup-to-nuts platform for distributing and selling their apps through the Apple Store&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:trebuchet ms;"&gt;a growing customer base (iPhone = mass market)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:trebuchet ms;"&gt;On the other hand, here are the downsides:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:trebuchet ms;"&gt;you have to develop Apple's Way: their platform + their SDK&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:trebuchet ms;"&gt;Apple takes a 30% cut of sales from iPhone apps&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:trebuchet ms;"&gt;to register as an app developer costs $99+&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:trebuchet ms;"&gt;If I were to write and sell an iPhone app, I would consider a "fremium" implementation and figure out how to charge customers for upgrades outside of the App Store, so I could limit Apple's cut on my product. But that is a whole different topic.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;From a business perspective, I decided to go with the "standard" way of write iPhone app code, which meant I had to buy a Mac. That was fine with me, it was a good reason for me to learn the Mac platform (where stuff lives, keyboard shortcuts, etc). So far, I've enjoyed using my iMac, but that is another topic for another day.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;So I bought my iMac and registered on the Apple Developer site. I submitted an application for my company 6 days ago, and I am still waiting to hear from Apple if it's been approved. In the meanwhile, I downloaded and installed the SDK. &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;You don't actually need an iPhone device to write apps; there is an iPhone Simulator for running and testing your code.&lt;/span&gt;&lt;div&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;Impressions of the SDK&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;I'm not going to go into detail about how to use Xcode and Interface Builder, as online tutorials cover that.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;I do recommend the tutorials on icodeblog.com; you can start with the &lt;a href="http://icodeblog.com/2008/07/26/iphone-programming-tutorial-hello-world/"&gt;Hello World tutorial&lt;/a&gt;. While Apple's site has good reference and architecture documentation, I recommend using online tutorials on blogs, because you can read the comments and questions from other folks using those tutorials. That's not a ding on Apple, it's typical of a lot of development languages, frameworks, and toolkits. It's the power of Web 2.0.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;In terms of ramping up on iPhone app development, there are really 2 separate topics:&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;learning the programming language Objective-C&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;learning the Xcode and Interface Builder SDK apps&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;span style="font-family:trebuchet ms;"&gt;Impressions of Objective-C&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;I programmed C and C++ middleware back in the 1990s for several years, and I did some complex makefile writing. But since 1997, the OO language I've used the most is Java.&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt; So it was interesting to see header files again; I've gotten used to having one file for the interface and implementation, as is the case with languages such as Java and Ruby.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;A big part of the learning curve for Objective-C is learning the API libraries. That's the case with any language.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Several things stand out about Objective-C:&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;you have to manage memory&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;the syntax for invoking methods on an object&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;it supports dynamic typing&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-family:trebuchet ms;"&gt;A lot of developers think memory management isn't difficult, but people are forgetful and make mistakes, which lead to memory leaks. A lot of the tutorials I saw actually neglected to free up memory in the dealloc method, e.g. for the IBOutlet variables used in Controller classes:&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span style="font-size:100%;"&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;/span&gt;&lt;p   style="margin: 0px; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal;font-family:Monaco;font-size:10px;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;- (&lt;/span&gt;&lt;span style="color: rgb(170, 13, 145);"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;void&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;)dealloc {&lt;/span&gt;&lt;/p&gt; &lt;p   style="margin: 0px; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal; color: rgb(63, 110, 116);font-family:Monaco;font-size:10px;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;    [&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;txtFirstName&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(46, 13, 110);"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;release&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p   style="margin: 0px; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal; color: rgb(63, 110, 116);font-family:Monaco;font-size:10px;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;    [&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;txtLastName&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(46, 13, 110);"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;release&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p   style="margin: 0px; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal; color: rgb(63, 110, 116);font-family:Monaco;font-size:10px;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;    [&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;lblMessage&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(46, 13, 110);"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;release&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p   style="margin: 0px; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal;font-family:Monaco;font-size:10px;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;    [&lt;/span&gt;&lt;span style="color: rgb(170, 13, 145);"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;super&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 13, 110);"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;dealloc&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;];&lt;/span&gt;&lt;/p&gt; &lt;p   style="margin: 0px; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal;font-family:Monaco;font-size:10px;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;div&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;The other interesting thing is the syntax for invoking methods (messages) on objects. E.g.:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;p   style="margin: 0px; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal; color: rgb(196, 26, 22);font-family:Monaco;font-size:10px;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 110, 116);"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;Fruit&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt; *orange = [[&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 110, 116);"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;Fruit&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(46, 13, 110);"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;alloc&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;] &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(38, 71, 75);"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;initWithName&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;@"Orange"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(38, 71, 75);"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;description&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;@"Citrus rocks for juicing"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;];&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p color="#c41a16" style="margin: 0px; font-family: Monaco; font-style: normal; font-variant: normal; font-weight: normal; font-size: 10px; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;That statement says to allocate memory for a fruit object, then initialize it with 2 hardcoded string parameters.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;Objective-C supports dynamic typing (as do other popular framework languages such as Ruby), here's an &lt;a href="http://en.wikipedia.org/wiki/Objective-C#Dynamic_typing"&gt;excerpt from Wikipedia&lt;/a&gt;:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;span class="Apple-style-span" style="line-height: 19px;"&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Objective-C, like Smalltalk, can use &lt;/span&gt;&lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Dynamic_typing" title="Dynamic typing" class="mw-redirect" style="text-decoration: none; color: rgb(0, 43, 184); background-image: none;"&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;dynamic typing&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;: an object can be sent a message that is not specified in its interface. This can allow for increased flexibility — in Objective-C an object can "capture" this message, and depending on the object, can send the message off again to a different object (who can respond to the message correctly and appropriately, or likewise send the message on again). This behavior is known as &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;message forwarding&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; or &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;delegation&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; (see below)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;You can read more about Objective-C elsewhere. There has been really &lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;a href="http://www.psynixis.com/blog/2008/04/25/did-apple-make-a-mistake-choosing-objective-c-for-iphone-sdk/"&gt;intense debate&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt; on the choice of Objective-C as the language for iPhone development.&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;span style="font-family:trebuchet ms;"&gt;Impressions of the &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;Xcode and Interface Builder SDK apps&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Xcode is the "main" IDE for organizing files and resource in projects and writing Objective-C code. Interface Builder (IB) is the tool for UI elements: specifying UI elements on the canvas, setting their properties, and tying them back to Controllers in XCode.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;The Xcode and IB IDEs have the typical Apple high-quality "polish" in terms of elegant UI design, and they are very stable.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Here are some criticisms:&lt;/span&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:trebuchet ms;"&gt;There isn't a built-in unit testing framework for iPhone app development&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:trebuchet ms;"&gt;The console/log error messages and stack trace can be quite cryptic&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:trebuchet ms;"&gt;Xcode and IB are separate apps. You need to be conscious about saving files in one IDE if you are working with the other IDE&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:trebuchet ms;"&gt;I was disappointed to find no built-in unit testing framework in Xcode for iPhone app development. One powerful trend in software development has been the rise of unit testing as an critical step in the process. Unit tests improve the quality of code, enable you to re-factor with confidence, etc. Google has written a unit-testing toolkit for iPhone app development, and Luis de la Rosa has written &lt;a href="http://www.luisdelarosa.com/2009/02/17/is-iphone-unit-testing-possible/"&gt;excellent articles on his blog about using it&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;The console error messages can be quite cryptic, and the stack trace is not &lt;span class="Apple-style-span" style=""&gt;human-readable&lt;/span&gt;. E.g. here are the console error messages caused by an unrecognized method ("selector") call on an object:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:100%;"&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;p   style="margin: 0px; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal;font-family:Courier;font-size:12px;"&gt;&lt;span class="Apple-style-span"  style="font-size:85%;"&gt;2009-05-12 09:04:47.870 HelloUniverse[1098:20b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSCFString fooCall]: unrecognized selector sent to instance 0x55c690'&lt;/span&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin: 0px; font-family: courier new; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;2009-05-12 09:04:47.871 HelloUniverse[1098:20b] Stack: (&lt;/p&gt; &lt;p style="margin: 0px; font-family: courier new; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    2459910411,&lt;/p&gt; &lt;p style="margin: 0px; font-family: courier new; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    2473467451,&lt;/p&gt; &lt;p style="margin: 0px; font-family: courier new; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    2459939594,&lt;/p&gt; &lt;p style="margin: 0px; font-family: courier new; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    2459932940,&lt;/p&gt; &lt;p style="margin: 0px; font-family: courier new; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    2459933138,&lt;/p&gt; &lt;p style="margin: 0px; font-family: courier new; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    10465,&lt;/p&gt; &lt;p style="margin: 0px; font-family: courier new; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    816115430,&lt;/p&gt; &lt;p style="margin: 0px; font-family: courier new; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    816516406,&lt;/p&gt; &lt;p style="margin: 0px; font-family: courier new; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    816517630,&lt;/p&gt; &lt;p style="margin: 0px; font-family: courier new; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    816514372,&lt;/p&gt; &lt;p style="margin: 0px; font-family: courier new; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    816216343,&lt;/p&gt; &lt;p style="margin: 0px; font-family: courier new; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    816148479,&lt;/p&gt; &lt;p style="margin: 0px; font-family: courier new; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    816144864,&lt;/p&gt; &lt;p style="margin: 0px; font-family: courier new; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    827743722,&lt;/p&gt; &lt;p style="margin: 0px; font-family: courier new; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    827753484,&lt;/p&gt; &lt;p style="margin: 0px; font-family: courier new; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    2459411957,&lt;/p&gt; &lt;p style="margin: 0px; font-family: courier new; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    2459413720,&lt;/p&gt; &lt;p style="margin: 0px; font-family: courier new; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    827745792,&lt;/p&gt; &lt;p style="margin: 0px; font-family: courier new; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    827745989,&lt;/p&gt; &lt;p style="margin: 0px; font-family: courier new; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    816114848,&lt;/p&gt; &lt;p style="margin: 0px; font-family: courier new; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    816160924,&lt;/p&gt; &lt;p style="margin: 0px; font-family: courier new; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    9156,&lt;/p&gt; &lt;p style="margin: 0px; font-family: courier new; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    9010&lt;/p&gt; &lt;p style="margin: 0px; font-family: courier new; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;)&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;The 3rd point is a minor one, but still worthy of note. I was expecting 1 IDE not 2. When you write code in Xcode, you should make sure to save the file(s) before toggling over to IB, and vice versa.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;Summary&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;Apple has provided a feature-rich app development environment, albeit limited to their own Mac platform and SDK. Apple could improve their SDK for iPhone apps to support unit testing and make tracking down bugs easier.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;I'd love to hear your opinions, so please post them!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3828680-5630261120267364242?l=edweirdo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edweirdo.blogspot.com/feeds/5630261120267364242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://edweirdo.blogspot.com/2009/05/impressions-of-iphone-app-development.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3828680/posts/default/5630261120267364242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3828680/posts/default/5630261120267364242'/><link rel='alternate' type='text/html' href='http://edweirdo.blogspot.com/2009/05/impressions-of-iphone-app-development.html' title='Impressions of iPhone Application Development'/><author><name>edweirdo</name><uri>http://www.blogger.com/profile/00498440929138208308</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3828680.post-1836105969413012966</id><published>2009-05-05T21:52:00.000-07:00</published><updated>2009-05-11T22:42:07.167-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='blogging'/><title type='text'>Why I Started This Blog</title><content type='html'>&lt;span class="Apple-style-span"  style=" ;font-family:Times;"&gt;&lt;div style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 3px; padding-right: 3px; padding-bottom: 3px; padding-left: 3px; width: auto; font: normal normal normal 100%/normal Georgia, serif; text-align: left; "&gt;&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms';"&gt;Back in 2002, I wanted to write about my experience in getting Linux to run on a Windows laptop, because I was sure other folks had the same questions and issues that I did.&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms';"&gt;The question back then: &lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic; "&gt;&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms';"&gt;should I roll my own site or use a blogging tool&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms';"&gt;?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms';"&gt;I checked out some blogging tools, including Blogger, and decided to roll my own site (&lt;/span&gt;&lt;a href="http://geocities.com/epark/linux/"&gt;&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms';"&gt;Ed's Software Guide on Linux&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms';"&gt;), because&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms';"&gt;blog software back then wasn't as evolved as it is now&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms';"&gt;I wanted to set up multiple sites on different topics (e.g. linux, online gaming, and Raiders football) and manage them with 1 account&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms';"&gt;I wanted control, partly because I was learning and experimenting with CSS&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms';"&gt;In retrospect, I made a mistake: my sites didn't support user comments. So I missed out on a huge value-add of Web 2.0: input and interaction between users.&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms';"&gt;I got a lot of emails, thousands actually, regarding stuff I wrote on my Linux site. E.g. &lt;/span&gt;&lt;a href="http://geocities.com/epark/linux/grub-w2k-HOWTO.html"&gt;&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms';"&gt;one page&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms';"&gt; in particular has been listed top 2-3 &lt;/span&gt;&lt;a href="http://www.google.com/search?hl=en&amp;amp;q=dual+boot+linux+windows&amp;amp;btnG=Google+Search&amp;amp;aq=f&amp;amp;oq="&gt;&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms';"&gt;on Google&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms';"&gt; for almost 7 years, and it's been viewed millions of times and translated into 6 languages. That was really cool.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms';"&gt;While it was worthwhile building that site, both in terms of what I learned in doing so, as well as sharing knowledge that was helpful to people, I didn't publish that content in a Web 2.0 way.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms';"&gt;So here I am, 7 years later, trying a blogging service. I've read multiple articles on choosing a blogging platform (best and current &lt;/span&gt;&lt;a href="http://www.blogher.com/choosing-blogging-platform"&gt;&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms';"&gt;article by Melanie Nelson&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms';"&gt;). For simplicity I'm going with Blogger, because it's easy-to-use and I am more concerned with cranking out content than having complete control. Down the road I may switch to another blogging platform (or run my own on a framework like Rails), and if I switch, I'll state why on this blog.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms';"&gt;I'll use this blog to write about technical challenges I run into, especially when I can't find clear documentation on the Internet, because I won't be the only person wrestling with any given issue. And my hope is that people will Google and find an article from my site that enables them to solve their problem.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms';"&gt;Cheers,&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms';"&gt;Ed&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3828680-1836105969413012966?l=edweirdo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edweirdo.blogspot.com/feeds/1836105969413012966/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://edweirdo.blogspot.com/2009/05/why-i-started-this-blog.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3828680/posts/default/1836105969413012966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3828680/posts/default/1836105969413012966'/><link rel='alternate' type='text/html' href='http://edweirdo.blogspot.com/2009/05/why-i-started-this-blog.html' title='Why I Started This Blog'/><author><name>edweirdo</name><uri>http://www.blogger.com/profile/00498440929138208308</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3828680.post-4380156215952606608</id><published>2009-05-03T23:27:00.000-07:00</published><updated>2009-05-14T00:50:16.731-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sync'/><category scheme='http://www.blogger.com/atom/ns#' term='palm'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><title type='text'>Palm to iPhone Data Migration Guide (for Mac Users)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_QbdTeuDLhUg/Sf-T8dwK2cI/AAAAAAAAABM/W9h-hr9JHZ0/s1600-h/palm-hotsync-to-palm-desktop.png"&gt;&lt;/a&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'trebuchet ms';"&gt;This guide describes how to migrate (transfer/convert) the data from your Palm device to your iPhone, if you are using a Mac. &lt;span class="Apple-style-span" style="font-style: italic;"&gt;If you are using a Windows computer, look elsewhere for help&lt;/span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;There are many different ways to migrate data from Palm to iPhone. Here are the benefits for following the approach in this guide:&lt;br /&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;you won't have to buy any software. Just use the default software for both devices&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;you won't have to import/export any data manually&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;you won't have to upload any of your data to a 3rd party site (e.g. Google). If you're concerned about privacy, I'm right there with you&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;you won't have to "jailbreak" your iPhone&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;the process I describe is logical and repeatable&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;Are there any gotchas with my approach? Yes, but they are issues with how Apple implemented the iPhone:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'trebuchet ms';"&gt;iPhone doesn't support Palm Memos or Palm To Do's. iPhone has a Notes app, but there is no mapping from Memos to Notes&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'trebuchet ms';"&gt;iPhone Contacts does not support custom user fields. Palm supports up to 4 custom user fields for addresses&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;Step 1: sync your Palm device using HotSync Manager to Palm Desktop&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=""&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;span class="Apple-style-span"  style="font-family:Georgia;"&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;Think of this as your final sync, after which your Palm device is no longer where you manage your address book or calendar. By doing this, you'll have the data on your Mac, accessible via the Palm Desktop app, that doesn't get copied over to your iPhone.&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238);"&gt;&lt;img src="http://1.bp.blogspot.com/_QbdTeuDLhUg/Sf-T8dwK2cI/AAAAAAAAABM/W9h-hr9JHZ0/s320/palm-hotsync-to-palm-desktop.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5332143150818056642" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 320px; height: 266px; " /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;span class="Apple-style-span"  style="font-family:Georgia;"&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;If you were already using HotSync on your Mac for your Palm device, HotSync, then skip to &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Step 2 iSync your Palm device&lt;/span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;If you weren't using HotSync on your Mac (this was my situation, I had a brand-new iMac), you need to get HotSync working:&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;install your Palm Desktop software from CD, or if you don't have it anymore, download the Palm Desktop software that closest matches your device from &lt;/span&gt;&lt;a href="http://kb.palm.com/wps/portal/kb/common/article/33529_en.html"&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;palm.com&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;. It's OK if you don't see an exact match, just download the latest Palm Desktop software. It should work, with some possible tweaks below&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;during the installation process, when prompted for a user, create a fake one (e.g. "Fake User")&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;launch Palm Desktop from your Apps directory. You should see 2 user profiles, one for your Mac account and the fake one. Delete the fake one&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;connect your Palm device via a USB cable to your Mac, and hit the HotSync button on your Palm cradle. This may take a while, depending how much data you have. If your Palm device reports an error "&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;SystemMgr.c, Line 185, Unimplemented&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;", your Palm Desktop may be trying to sync conduits (aka apps or modules) that your Palm device doesn't support. That is, HotSync is asking your Palm device for data it doesn't have. This happened to me because my Palm device didn't support a "Media" Conduit. To fix this, in Palm Desktop, go to: HotSync -&gt; Conduit Settings, and set any unsupported conduits to "Do Nothing" using the "Make Default" button:&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238);"&gt;&lt;img src="http://4.bp.blogspot.com/_QbdTeuDLhUg/Sf6XxwNonBI/AAAAAAAAAAM/vVL05WcCMYM/s320/disabling-unsupported-conduits.png" alt="" id="BLOGGER_PHOTO_ID_5331865889864719378" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 226px;" border="0" /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;You now have all of your Palm device data available in Palm Desktop app, in case you ever need to go back to it.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=""&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;Step 2: &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;iSync your Palm device to Mac's Address Book and iCal apps&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;Now that you have a backup of your Palm device data in Palm Desktop, it's time to move the data that Mac supports into Mac applications. The flow of data looks like this:&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238);"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0); "&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_QbdTeuDLhUg/Sf-T8JOJGlI/AAAAAAAAABE/O4HWbCpB-Uw/s1600-h/palm-isync.png"&gt;&lt;img src="http://3.bp.blogspot.com/_QbdTeuDLhUg/Sf-T8JOJGlI/AAAAAAAAABE/O4HWbCpB-Uw/s320/palm-isync.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5332143145306626642" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 320px; height: 266px; " /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;launch the iSync app&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;select Devices -&gt; Enable Palm OS Syncing&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;launch Palm Desktop&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;select HotSync -&gt; Conduit Settings, then for iSync Conduit, click the checkbox for "Enable iSync for this Palm device"&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;make sure your Palm device is connected, then hit the HotSync button. The data in your Palm device will get copied over to the Mac Address Book and iCal apps, per the diagram above. This may take a few minutes, esp if you have a lot of records in your Palm device&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;The most complicated steps of the process are now behind you :)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;Step 3: sync your iPhone to the Mac to pick up the Address Book and iCal data&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;You're now ready to hook up your iPhone to your Mac. Your iPhone syncs to the Mac using iTunes, and under the covers (from what I've read) iTunes uses iSync to synchronize the Address Book and iCal app data:&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238); "&gt;&lt;img src="http://1.bp.blogspot.com/_QbdTeuDLhUg/Sf-T8JWX9xI/AAAAAAAAAA8/TxVFTpBdRjw/s320/iphone-isync.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5332143145341155090" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 320px; height: 266px; " /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;You can now follow the really brief instructions in the "Finger Tips" guide that came with your iPhone:&lt;br /&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;Download/install iTunes&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;Connect your iPhone to your Mac&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;Sync, following the instructions in iTunes&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;You're done!&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;I hope this guide was helpful, please post any feedback / corrections.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;Cheers,&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;Ed&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-weight: bold;font-family:'trebuchet ms';"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;FAQs&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic; "&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;Q: Is it possible to sync data back to my Palm device?&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;A: Yep. Just configure your Mac, per the diagrams above. I've been able to add a calendar event to my iPhone, sync that event through iTunes to iCal, then use the iSync Conduit to HotSync that event back to my Palm device's Date Book app. I would recommend, though, that you pick either your iPhone/iCal or Palm/Palm Desktop as your primary place for editing data.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" font-style: italic;font-family:'trebuchet ms';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;Q: I was an avid user of Memos, what the heck am I supposed to do?&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;A: I wish there was a good answer. If you did Step 1 above, at least you have your Memo data accessible via Palm Desktop. As far as how to store memo-like information in an iPhone, check out &lt;/span&gt;&lt;a href="http://www.immotion.net/blog/post/iPhone-Notes-Review-Part-III---Workarounds-and-Final-Recommendation.aspx"&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;this article&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;Q: Some of my Palm address fields didn't get transferred, in particular my custom user-defined ones.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;A: Unfortunately, those fields are not transferred. Palm allows a user to define up to 4 custom fields, but Apple does not support custom fields (the list of possible fields is pre-defined and fixed). I had 4 custom fields defined in my Palm: account #, cross street, rating, and price. I used the rating, price, and cross street fields when adding a new restaurant. I may have to move those custom fields manually (ugh) into the Notes field in Mac Address Book.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Q: Where do I access my iPhone data on the Mac?&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;A: iPhone doesn't have a corresponding desktop app, like Palm Desktop, for managing your address, calendar, memos, and to do's. On a Mac, you manage your media files (music, video, etc) with iTunes, your calendar with iCal, and your addresses with Address Book. And not all the data in the iPhone (e.g. your Notes data) is sync'd to your Mac.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;Appendix: our switch from Palm to iPhone&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;My wife and I both switched from Palm devices to iPhone 3G devices the weekend that I wrote up this guide:&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;my wife had a Treo 700p, which she sync'd to her Mac laptop&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;I had a Samsung i500, which I sync'd to a Windows laptop. I also migrated to using a Mac workstation (iMac)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;Obviously my case was more complex, as I switched not just the phone but the computer too. But once I figured out how iSync and HotSync on a Mac worked, I was able to use the same approach for migration.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;I started using Palm devices in 1997, and I bought a lot of the original wireless-enabled Palm devices:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;1999: &lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;Palm VII&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;: this device used the same network that the RIM Blackberry devices used, but it wasn't a phone&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;2001: &lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;Kyocera QCP-6035&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;: this was one of the 1st PDA/phone Palm devices on the market. It was a brick in terms of size (about 2 inches taller than today's iPhone, and much heavier), the device was painfully slow, and the display didn't have colour&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;2001: &lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;Samsung i300&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;: I re-sold my Kyocera on eBay and upgraded to the i300. It was the 1st successful Palm PDA/phone device in terms of usability, size, and performance. My main complaint was that there was no tactile keypad; the keypad was digital&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;2004: &lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;Samsung i500&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;: this 1st Palm phone that had great form factor and size. I loved having a tactile keypad for dialing, and that the screen was flip-up, so I could close it to protect it and stow in my pocket. I used this phone for years, as most of the PDAs that came out after were too bulky for my taste. Did I happen to mention this device had a killer form factor? I will miss it!&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238);"&gt;&lt;img src="http://2.bp.blogspot.com/_QbdTeuDLhUg/Sf6hMPBNJvI/AAAAAAAAAAs/w9DL2DcqddM/s320/samsung-i500.jpg" alt="" id="BLOGGER_PHOTO_ID_5331876240415336178" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 124px; height: 166px;" border="0" /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=""&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;In my short time using my iPhone, I've come to realize it's a wireless media device + phone, whereas my i500 was a phone + PDA with strong support for data entry. I'll write up the differences in another article.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3828680-4380156215952606608?l=edweirdo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edweirdo.blogspot.com/feeds/4380156215952606608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://edweirdo.blogspot.com/2009/05/palm-to-iphone-migration-guide.html#comment-form' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3828680/posts/default/4380156215952606608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3828680/posts/default/4380156215952606608'/><link rel='alternate' type='text/html' href='http://edweirdo.blogspot.com/2009/05/palm-to-iphone-migration-guide.html' title='Palm to iPhone Data Migration Guide (for Mac Users)'/><author><name>edweirdo</name><uri>http://www.blogger.com/profile/00498440929138208308</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_QbdTeuDLhUg/Sf-T8dwK2cI/AAAAAAAAABM/W9h-hr9JHZ0/s72-c/palm-hotsync-to-palm-desktop.png' height='72' width='72'/><thr:total>9</thr:total></entry></feed>
