<?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>Zen and the Art of Programming &#187; Cocoa and Objective-C</title>
	<atom:link href="http://programmingzen.com/category/apple/cocoa-and-objective-c/feed/" rel="self" type="application/rss+xml" />
	<link>http://programmingzen.com</link>
	<description>Meditations on programming, startups, and technology</description>
	<lastBuildDate>Mon, 16 Jan 2012 17:09:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Programming in Objective-C, 3rd Edition is out</title>
		<link>http://programmingzen.com/2011/06/23/programming-in-objective-c-3rd-edition-is-out/</link>
		<comments>http://programmingzen.com/2011/06/23/programming-in-objective-c-3rd-edition-is-out/#comments</comments>
		<pubDate>Thu, 23 Jun 2011 19:50:09 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[Cocoa and Objective-C]]></category>
		<category><![CDATA[iPhone OS Development]]></category>
		<category><![CDATA[Mac]]></category>

		<guid isPermaLink="false">http://programmingzen.com/?p=1391</guid>
		<description><![CDATA[Addison-Wesley quietly released the third edition of their Programming in Objective-C book (USA &#124; UK &#124; Canada). I own the first edition of the book and it&#8217;s stellar, so I&#8217;m really looking forward to reading this upgraded version which includes the latest changes to the language, the main IDE (XCode), and the Foundation framework for [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p>Addison-Wesley quietly released the third edition of their <a href="/recommended/?0321711394">Programming in Objective-C</a> book (<a href="/recommended/?0321711394">USA</a> | <a href="/uk/?0321711394">UK</a> | <a href="/canada/?0321711394">Canada</a>). I own the first edition of the book and it&#8217;s stellar, so I&#8217;m really looking forward to reading this upgraded version which includes the latest changes to the language, the main IDE (XCode), and the Foundation framework for developing Mac, iPad, and iPhone applications.</p>
<p align="center"><img src="http://programmingzen.com/wp-content/uploads/2011/06/programming-in-objective-c-2.0-3rd-edition.jpg" alt="Programming in Objective-C 2.0 (3rd Edition)" title="Programming in Objective-C 2.0 (3rd Edition)" width="389" height="500" class="aligncenter size-full wp-image-1393" /></p>
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2011/06/23/programming-in-objective-c-3rd-edition-is-out/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Would you use a Mac mini as your development machine?</title>
		<link>http://programmingzen.com/2010/06/17/would-you-use-a-mac-mini-as-your-development-machine/</link>
		<comments>http://programmingzen.com/2010/06/17/would-you-use-a-mac-mini-as-your-development-machine/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 11:23:53 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[Cocoa and Objective-C]]></category>
		<category><![CDATA[Industry News]]></category>
		<category><![CDATA[iPhone OS Development]]></category>
		<category><![CDATA[Mac]]></category>

		<guid isPermaLink="false">http://antoniocangiano.com/?p=1196</guid>
		<description><![CDATA[Apple just released a brand new, gorgeous looking Mac mini. This major upgrade brings us two different models: a desktop one and a server version (priced at $699 and $999, respectively). Equipped with a HDMI port, the desktop edition of the Mac mini makes for a perfect Home Theater PC. It&#8217;s small and stylish, and [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p align="center"><img src="http://antoniocangiano.com/wp-content/uploads/2010/06/macmini.png" alt="MacMini Image" /></p>
<p>Apple just released a brand new, gorgeous looking <a href="http://www.apple.com/macmini/">Mac mini</a>. This major upgrade brings us two different models: a desktop one and a server version (priced at $699 and $999, respectively).
</p>
<p>Equipped with a HDMI port, the desktop edition of the Mac mini makes for a perfect Home Theater PC. It&#8217;s small and stylish, and as such is a great fit in your living room. Most of the reviews I&#8217;ve read focus on its use as a highly capable HTPC (despite its lack of a Blu-Ray drive).
</p>
<p>However, I see the new Mac Mini in a different light. At $700 it is far too expensive for a HTPC, yet it&#8217;s ideal as an entry-level machine for web, Mac, and iOS development (it&#8217;s almost as cheap as a Hackintosh, minus the headache).</p>
<p>Mac Minis will do the job and be more than capable thanks to their adequate, albeit not spectacular, hardware specs. If my MacBook Pro were to die today, I would definitely consider purchasing one for development purposes. Would you?</p>
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2010/06/17/would-you-use-a-mac-mini-as-your-development-machine/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Why MacRuby Matters (Present &amp; Future)</title>
		<link>http://programmingzen.com/2009/03/29/why-macruby-matters/</link>
		<comments>http://programmingzen.com/2009/03/29/why-macruby-matters/#comments</comments>
		<pubDate>Sun, 29 Mar 2009 05:33:09 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[Cocoa and Objective-C]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://antoniocangiano.com/?p=694</guid>
		<description><![CDATA[Over the years the inadequacy of Ruby&#8217;s main implementation has led to the creation of several alternatives. The greatest common divisor between these is an attempt to improve the performance of Ruby, both in terms of time and space. But every Ruby implementation has another, deeper reason for being. For example, Ruby 1.9.1 is a [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p><img src="http://antoniocangiano.com/images/hotcocoa-graphics.gif" alt="HotCocoa::Graphics example" align="right" hspace="5" title="HotCocoa::Graphics at work" />Over the years the inadequacy of Ruby&#8217;s main implementation has led to the creation of several alternatives. The greatest common divisor between these is an attempt to improve the performance of Ruby, both in terms of time and space. But every Ruby implementation has another, deeper reason for being. For example, Ruby 1.9.1 is a refactoring of the language that provides the chance to incorporate several much needed features into a relatively fast virtual machine, whereas JRuby&#8217;s truest value lies in its ability to interact with the Java ecosystem. Likewise IronRuby (which is admittedly at an earlier stage in its development) is attempting to plug a dynamic language like Ruby into the .NET world (as per its predecessor IronPython).</p>
<p>While MacRuby is a younger, lesser known implementation, it has the potential to become a game changer &#8211; at least for Mac developers. Based on Ruby 1.9, MacRuby&#8217;s main aim is to provide programmers with the ability to write Mac OS X applications in Ruby, making Ruby a first class Cocoa programming language. In what may sound like an utopistic effort, MacRuby strives to provide the high level abstractions, power and syntax sugar of Ruby, without the characteristic performance hit of its main implementation.</p>
<p>Rather than relying on a mix of Objective-C and Ruby (through a bridge like RubyCocoa), developers can use MacRuby which integrates with Mac OS X core technologies and acts as an alternative language to Objective-C. To be exact, Objective-C&#8217;s runtime and generational garbage collector are at the heart of MacRuby, but from an API standpoint, programmers can write code in Ruby, instead of in the more verbose and low level Objective-C. MacRuby maintains the ability to integrate with Objective-C code, but doing so is often unnecessary thanks to a framework known as HotCocoa, which is a Ruby wrapper around the Cocoa API.</p>
<p>MacRuby applications end up being succinct, easy to write and straightforward to maintain. Their look and feel is exactly the same as those of applications written in Objective-C, because they are actually native Cocoa applications. In fact, MacRuby objects are Objective-C objects which use Core Foundation data types and services. The current version, MacRuby 0.4, even allows you to package applications as self-contained .app, without having to redistribute MacRuby itself.</p>
<p>Sponsored and developed by Apple, MacRuby 0.4 is a stable release that can be &#8211; and already is &#8211; used to write desktop applications. But MacRuby&#8217;s real promise lies in its experimental branch. This rewrite will become MacRuby 0.5, <a href="http://www.macruby.org/blog/2009/03/28/experimental-branch.html">as announced by the MacRuby team</a> earlier today (along with a new, nice looking site). This future version of MacRuby is freakishly fast and uses the LLVM to generate code for the Objective-C runtime. The layer composed of LLVM, ObjC Runtime, Generational Garbage Collector and Core Foundation make this specific Mac OS X release possible. To this layer, add in Ruby 1.9&#8242;s AST parser and Standard Library, and you get MacRuby 0.5 as it stands today. In the future it&#8217;s likely that applications built with MacRuby will be compiled into binary code, like Objective-C ones, thus removing the issue of protecting one&#8217;s source code in commercial applications.</p>
<p>To really understand the value of MacRuby, consider the following Hello World program that uses RubyCocoa:</p>
<div class="highlight">
<pre><span class="nb">require</span> <span class="s1">'osx/cocoa'</span><span class="p">;</span> <span class="kp">include</span> <span class="no">OSX</span>

<span class="n">app</span> <span class="o">=</span> <span class="no">NSApplication</span><span class="o">.</span><span class="n">sharedApplication</span>

<span class="n">win</span> <span class="o">=</span> <span class="no">NSWindow</span><span class="o">.</span><span class="n">alloc</span><span class="o">.</span><span class="n">initWithContentRect_styleMask_backing_defer</span><span class="p">(</span>
    <span class="o">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">200</span><span class="p">,</span> <span class="mi">60</span><span class="o">]</span><span class="p">,</span>
    <span class="no">NSTitledWindowMask</span><span class="o">|</span><span class="no">NSClosableWindowMask</span><span class="o">|</span><span class="no">NSMiniaturizableWindowMask</span><span class="o">|</span><span class="no">NSResizableWindowMask</span><span class="p">,</span>
    <span class="no">NSBackingStoreBuffered</span><span class="p">,</span> <span class="kp">false</span><span class="p">)</span>
<span class="n">win</span><span class="o">.</span><span class="n">title</span> <span class="o">=</span> <span class="s1">'Hello World'</span>

<span class="n">button</span> <span class="o">=</span> <span class="no">NSButton</span><span class="o">.</span><span class="n">alloc</span><span class="o">.</span><span class="n">initWithFrame</span><span class="p">(</span><span class="no">NSZeroRect</span><span class="p">)</span>
<span class="n">win</span><span class="o">.</span><span class="n">contentView</span><span class="o">.</span><span class="n">addSubview</span><span class="p">(</span><span class="n">button</span><span class="p">)</span>
<span class="n">button</span><span class="o">.</span><span class="n">bezelStyle</span> <span class="o">=</span> <span class="no">NSRoundedBezelStyle</span>
<span class="n">button</span><span class="o">.</span><span class="n">title</span> <span class="o">=</span> <span class="s1">'Hello!'</span>
<span class="n">button</span><span class="o">.</span><span class="n">sizeToFit</span>
<span class="n">button</span><span class="o">.</span><span class="n">frameOrigin</span> <span class="o">=</span> <span class="no">NSMakePoint</span><span class="p">((</span><span class="n">win</span><span class="o">.</span><span class="n">contentView</span><span class="o">.</span><span class="n">frameSize</span><span class="o">.</span><span class="n">width</span> <span class="o">/</span> <span class="mi">2</span><span class="o">.</span><span class="mi">0</span><span class="p">)</span> <span class="o">-</span> <span class="p">(</span><span class="n">button</span><span class="o">.</span><span class="n">frameSize</span><span class="o">.</span><span class="n">width</span> <span class="o">/</span> <span class="mi">2</span><span class="o">.</span><span class="mi">0</span><span class="p">),</span>
                                 <span class="p">(</span><span class="n">win</span><span class="o">.</span><span class="n">contentView</span><span class="o">.</span><span class="n">frameSize</span><span class="o">.</span><span class="n">height</span> <span class="o">/</span> <span class="mi">2</span><span class="o">.</span><span class="mi">0</span><span class="p">)</span> <span class="o">-</span> <span class="p">(</span><span class="n">button</span><span class="o">.</span><span class="n">frameSize</span><span class="o">.</span><span class="n">height</span> <span class="o">/</span> <span class="mi">2</span><span class="o">.</span><span class="mi">0</span><span class="p">))</span>

<span class="n">button_controller</span> <span class="o">=</span> <span class="no">Object</span><span class="o">.</span><span class="n">new</span>

<span class="k">def</span> <span class="nc">button_controller</span><span class="o">.</span><span class="nf">sayHello</span><span class="p">(</span><span class="n">sender</span><span class="p">)</span>
 <span class="nb">puts</span> <span class="s2">&quot;Hello World!&quot;</span>
<span class="k">end</span>

<span class="n">button</span><span class="o">.</span><span class="n">target</span> <span class="o">=</span> <span class="n">button_controller</span>
<span class="n">button</span><span class="o">.</span><span class="n">action</span> <span class="o">=</span> <span class="s1">'sayHello:'</span>

<span class="n">win</span><span class="o">.</span><span class="n">display</span>
<span class="n">win</span><span class="o">.</span><span class="n">orderFrontRegardless</span>

<span class="n">app</span><span class="o">.</span><span class="n">run</span>
</pre>
</div>
<p>And compared to the equivalent MacRuby and HotCocoa program:</p>
<div class="highlight">
<pre><span class="nb">require</span> <span class="s1">'hotcocoa'</span>
<span class="kp">include</span> <span class="no">HotCocoa</span>

<span class="n">application</span> <span class="k">do</span> <span class="o">|</span><span class="n">app</span><span class="o">|</span>
 <span class="n">win</span> <span class="o">=</span> <span class="n">window</span> <span class="ss">:size</span> <span class="o">=&gt;</span> <span class="o">[</span><span class="mi">100</span><span class="p">,</span><span class="mi">50</span><span class="o">]</span>
 <span class="n">b</span> <span class="o">=</span> <span class="n">button</span> <span class="ss">:title</span> <span class="o">=&gt;</span> <span class="s1">'Hello'</span>
 <span class="n">b</span><span class="o">.</span><span class="n">on_action</span> <span class="p">{</span> <span class="nb">puts</span> <span class="s1">'World!'</span> <span class="p">}</span>
 <span class="n">win</span> <span class="o">&lt;&lt;</span> <span class="n">b</span>
<span class="k">end</span>
</pre>
</div>
<p>The first approach reminds me of Objective-C, the second is a pure Ruby DSL.</p>
<h3>Benchmarking the experimental branch</h3>
<p>The question on many readers minds is probably, how fast is it? To begin with, the start-up time is negligible which is a good quality for desktop applications to have. Using the YARV tests that ship with the experimental branch, let me show you the numbers I obtained on a Mac Pro with two Quad-core Intel Xeon 2.8 GhZ and 18 GB of RAM. The tests were also run on much less &#8220;beefier&#8221; hardware with analogous results.</p>
<p>All the usual disclaimers apply here. These are just a few very basic micro-benchmarks that should give you a &#8220;feel&#8221; for how two VMs stack up against each other; but don&#8217;t read too much into this and don&#8217;t expect it to be a scientific report on the performance of the implementations that were tested. Also keep in mind that MacRuby 0.5 is currently an experimental release, and while it&#8217;s able to pass RubySpec&#8217;s language specifications, it is not a complete implementation so far. The team is taking incompatibility issues seriously though and will make sure MacRuby will be able to run any Ruby code.</p>
<p>The following table summarizes the results of these benchmarks for Ruby 1.8.6, Ruby 1.9.1 and MacRuby 0.5:</p>
<div align="center"><img src="http://antoniocangiano.com/images/macruby-table1.png" alt="MacRuby table1" /></div>
<p>This table shows the ratios between Ruby 1.9.1 and MacRuby 0.5, respectively, against the Ruby 1.8.6 baseline. When you see a number 4, for example, that means that the given implementation was four times faster than Ruby 1.8.6.</p>
<div align="center"><img src="http://antoniocangiano.com/images/macruby-table2.png" alt="MacRuby table2" /></div>
<p>And here is a direct comparison between Ruby 1.9.1 and MacRuby 0.5. In this case, a number 4 (for example) would mean that MacRuby was four times faster than Ruby 1.9.1 for the given test:</p>
<div align="center"><img src="http://antoniocangiano.com/images/macruby-table3.png" alt="MacRuby table3" /></div>
<p>The following chart should help you better visualize the results shown in the first table (click on it to enlarge the picture):</p>
<div align="center"><a href="http://antoniocangiano.com/images/macruby-large-chart.png" target="_blank"><img src="http://antoniocangiano.com/images/macruby-chart.png" alt="MacRuby chart" title="Click on this to enlarge the chart" /></a></div>
<p>Even when you consider the disclaimer above and the trivial nature of the benchmarks themselves, it&#8217;s clear that at this stage of the game, MacRuby 0.5 is built for speed. <del datetime="2009-04-05T04:07:52+00:00">the fastest Ruby implementation around</del>. MacRuby literally dominates Ruby 1.9.1. On &#8220;average&#8221;, according to these limited tests the experimental branch of MacRuby appears to be roughly 3 times faster than Ruby 1.9.1 (YARV), and in some cases even faster than that. You should definitely find this impressive.</p>
<p>For full disclosure, I&#8217;d like to explain the most likely reasons behind the four tests in which MacRuby is slower than Ruby 1.9.1:</p>
<ul>
<li>bm_app_raise: MacRuby opts for cost free IA64 exceptions. What this means is that begin/rescue clauses don&#8217;t require a setjmp() like YARV does, but in case of exceptions at runtime, raising an error is more expensive. Of course, exceptions are&#8230; well, exceptional, so this has a trivial impact on real world programs.</li>
<li>bm_app_mergesort: Array operations are currently suboptimal. Slight improvements are expected.</li>
<li>bm_so_object: MacRuby&#8217;s object allocation tends to be relatively expensive. If you are allocating a zillion objects in a test, MacRuby will pay a hefty price for it.</li>
<li>bm_so_random: The performance of Fixnum has been optimized in this early release, but both Bignum and floating point operations are still suboptimal. Work is in progress and major improvements are expected to occur in future versions. In the case of Bignum, vectorization will do the trick.</li>
</ul>
<h3>The take home lesson</h3>
<p>MacRuby is a serious project that fits in, and serves the flourishing market of Cocoa applications well. Its experimental branch is a major rewrite that, <del datetime="2009-04-05T03:17:14+00:00">grants this implementation the title of fastest Ruby in the West</del> that, much like <a href="http://code.google.com/p/unladen-swallow/">Unladen Swallow</a> for CPython, could become a very fast alternative to Ruby 1.9.x and JRuby. It&#8217;s mainly aimed at the desktop world, and as such the question of when it will work with Rails, is less pressing than it was in other early Ruby implementations. What&#8217;s certain is that Ruby is going to become a first class &#8220;scripting&#8221; language and a common choice for desktop applications on Mac. And should the difference in performance still remain in future, stable versions, it&#8217;s not hard to imagine that Apple&#8217;s server segment could also benefit from this, when Rails support becomes available.</p>
<p><strong>Update (2009-04-04)</strong>: I&#8217;ve modified a controversial statement since, technically speaking, while it is true that a very fast, incomplete implementation is promising and worth getting excited about, it cannot be considered the fastest Ruby implementation until a great degree of compatibility has been reached. This doesn&#8217;t diminish the value of MacRuby in any way, but rather draws a more accurate conclusion about the data that&#8217;s available today. It&#8217;s also worth noting that the few benchmarks that have been mentioned here are only part of the story. Speed aside, MacRuby&#8217;s aim and potential for Mac development still stand.</p>
<p><em>The image at the top of the post was generated by James Reynolds with <a href="http://hcg.drtoast.com/particlesflowers/">HotCocoa::Graphics</a>, a Processing-like library that uses Mac OS X&#8217;s graphics capabilities and makes them available to MacRuby.</em></p>
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2009/03/29/why-macruby-matters/feed/</wfw:commentRss>
		<slash:comments>36</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t alienate developers</title>
		<link>http://programmingzen.com/2008/09/25/dont-alienate-developers/</link>
		<comments>http://programmingzen.com/2008/09/25/dont-alienate-developers/#comments</comments>
		<pubDate>Thu, 25 Sep 2008 21:49:14 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[Cocoa and Objective-C]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Mac]]></category>

		<guid isPermaLink="false">http://antoniocangiano.com/?p=247</guid>
		<description><![CDATA[Remember Ballmer shouting ad nauseam &#8220;Developers, developers, developers&#8221;? I&#8217;m sure you&#8217;ve seen the original video and even a few techno remixes. Whether he truly meant it or not, his message was correct: it&#8217;s all about developers. Any platform that doesn&#8217;t attract developers is bound to fail. Microsoft is trying to make an effort to please [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p>Remember Ballmer shouting ad nauseam &#8220;Developers, developers, developers&#8221;? I&#8217;m sure you&#8217;ve seen <a href="http://video.google.com/videoplay?docid=6304687408656696643">the original video</a> and even a few <a href="http://video.google.com/videoplay?docid=-1668365808879026423">techno remixes</a>. Whether he truly meant it or not, his message was correct: it&#8217;s all about developers. Any platform that doesn&#8217;t attract developers is bound to fail.</p>
<p>Microsoft is trying to make an effort to please developers by shifting to a more open attitude towards the development community. Their record is far from pristine, but at least they are making a concrete attempt not to piss off programmers who chose to develop for any of their platforms &#8211; efforts which are rarely acknowledged.</p>
<p>Apple, a company that is generally considered far from &#8220;sinister&#8221; or &#8220;evil&#8221;, on the other hand, is trying their best to alienate developers. This is a crucial and costly mistake, even if they are a hardware company whose interest is mostly centered around their phones at this stage.</p>
<p>Their first idiotic move was to place an <span class="caps">NDA</span> on a finished product like the iPhone <span class="caps">SDK</span> (including the final version). For the ecosystem surrounding a platform to flourish, it&#8217;s fundamental that developers are able to freely share their knowledge. This move has many repercussions including <a href="http://www.pragprog.com/news/ubuntu-kung-fu-shippingpodcast-iphone-news">the inability to publish books</a> on the subject, something that is clearly a stepping-stone when it comes to being able to reach a broad audience of programmers.</p>
<p>Apple then decided that it was a good idea to charge people for the privilege to develop for the iPhone: $99 (that&#8217;s a hundred bucks, we are not idiots and this is not a grocery store). Thousands of other developers would have likely given it a shot and tried to tap into this new platform (and market opportunity), or simply experimented with it to satisfy their intellectual curiosity. But putting a $99 price tag on the Standard Program will push away the silent majority of potential developers and surely most freeware authors. Why would Apple do this? For a few extra bucks? That is nothing short of nearsighted thinking which only benefits a company in the short term and does serious harm in the long run.</p>
<p>These were two blatant mistakes, but, if you can believe it, Apple managed to alienate developers further still. A few thousand people put up with the <span class="caps">NDA</span> on the <span class="caps">SDK</span>, with the cost of the Standard Program, and with the lengthy and bureaucratic process it takes to access the only viable distribution channel, the iPhone App Store. Some of them spent months trying to create excellent, innovative applications for the iPhone, only to see their work rejected for no good reason other than that it competed with Apple&#8217;s own products (e.g. Podcaster) or was inconvenient for their business partner AT&#38;T (e.g. NetShare). How shortsighted is that? It&#8217;s almost as stupid as the <span class="caps">RIAA</span>, which has a habit of suing its own customers.</p>
<p>Following the uproar of complaints about this, Apple decided that the best way to deal with developers&#8217; malcontent was to legally bind them to shut up. So now the rejection letters many developers are receiving are covered by an <span class="caps">NDA</span> as well.</p>
<p>How low will Apple go? I understand that a few developers are making a good deal of money from some popular applications, and that the iPhone is a hot product which may change the mobile world. I can even grasp that programming in Objective-C is fun. But how many developers is Apple alienating, how many great applications will never be written because programmers object in principle to developing for Apple&#8217;s platform?</p>
<p>I fail to see Apple&#8217;s usual business insight and only see blind greed, the kind that acts as a highly effective cautionary tale against developing for Apple&#8217;s platforms. This all comes at a time when Google is promoting a truly open platform, Android, which poses a few challenges due to the heterogeneous nature of the devices it will be deployed on, but is equally interesting from a technical standpoint. Google even went so far as to award ten million dollars in prize money through a contest that they held, to attract new developers and applications. Android is definitely welcoming new developers and it&#8217;s doing so free from glaring restrictions and limitations.</p>
<p>I suspect that many will put up with Java, to get a cup of freedom.</p>
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2008/09/25/dont-alienate-developers/feed/</wfw:commentRss>
		<slash:comments>33</slash:comments>
		</item>
		<item>
		<title>Ruby, Python, Haskell and Objective-C Feed Survey</title>
		<link>http://programmingzen.com/2007/11/27/ruby-python-haskell-and-objective-c-feed-survey/</link>
		<comments>http://programmingzen.com/2007/11/27/ruby-python-haskell-and-objective-c-feed-survey/#comments</comments>
		<pubDate>Tue, 27 Nov 2007 10:30:33 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[Cocoa and Objective-C]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[Haskell]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://antoniocangiano.com/2007/11/27/ruby-python-haskell-and-objective-c-feed-survey/</guid>
		<description><![CDATA[Having little time to follow the blogosphere and its crazy rhythms of publication is not a good enough excuse for not being up to date. This rings particularly true for me as a technical evangelist at IBM, and as someone who is deeply passionate about the development and the information technology world. The biggest challenge [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p>Having little time to follow the blogosphere and its crazy rhythms of publication is not a good enough excuse for not being up to date. This rings particularly true for me as a technical evangelist at IBM, and as someone who is deeply passionate about the development and the information technology world. The biggest challenge is to quickly and efficiently divide the wheat from the chaff or, in other words, filter out the noise from the overload of signals put out there. For me, feed readers are life savers, I couldn&#8217;t cope without them.</p>
<p>I recently adopted a setup that seems to be working particularly well. I purchased <a href="http://www.newsgator.com/Individuals/NetNewsWire/Default.aspx" title="NetNewsWire">NetNewsWire</a> for my Mac and <a href="http://www.newsgator.com/Individuals/FeedDemon/Default.aspx" title="FeedDemon">FeedDemon</a> for Windows, and automatically got a one-year subscription to the online premium service from the fine folks at <a href="http://www.newsgator.com/" title="newsgator">newsgator</a>. The two programs are a joy to use, especially for handling very large group of feeds in a short amount of time, as I often need to do. Each program automatically synchronizes with the newsgator service, therefore no matter which computer I&#8217;m using, I&#8217;m always dealing with the same folders, subscripted feeds and saved clipping. Sure, there are free services out there like Google Reader or Bloglines, but to me there is no comparison between the experience that I have when using a sluggish web interface and a rock solid, well designed desktop application. If I have the option, I&#8217;ll always choose the latter, especially since newsgator allows me to take advantage of a centralized repository of feeds from my desktop programs, just like as if I were using their online service through Firefox. For a few dollars, I got a setup that is working awesomely well for me and it&#8217;s saving me huge amounts of time. It also helped me to identify non-updated blogs, and those that I was no longer paying attention to, therein allowing me to reduce my over-all amount of feeds (granted with a conscious effort on my part) to a more manageable total of 160.</p>
<p>As mentioned above, my subscribed feeds are important to me, with a list that changes dynamically over time, as I add and remove entries. That said, I was looking at my Ruby and Rails folder when I decided to share my feeds with you. The list is understandably incomplete (after all, there are thousands of Ruby related blogs) and the presence of planets, aggregators and tags in bookmark services like del.icio.us, generate a few unavoidable duplicates. These are the Ruby/Rails blogs and sites that I currently subscribe to:</p>
<ol>
<li><a href="http://alternateidea.com/">alternateidea.com</a></li>
<li><a href="http://antoniocangiano.com">antoniocangiano.com</a></li>
<li><a href="http://blog.codahale.com">blog.codahale.com</a></li>
<li><a href="http://blog.fallingsnow.net">blog.fallingsnow.net</a></li>
<li><a href="http://blog.grayproductions.net/">blog.grayproductions.net</a></li>
<li><a href="http://blog.innerewut.de">blog.innerewut.de</a></li>
<li><a href="http://blog.jayfields.com/">blog.jayfields.com</a></li>
<li><a href="http://blog.leetsoft.com/">blog.leetsoft.com</a></li>
<li><a href="http://blog.segment7.net">blog.segment7.net</a></li>
<li><a href="http://blog.talbott.ws/">blog.talbott.ws</a></li>
<li><a href="http://blog.zenspider.com/">blog.zenspider.com</a></li>
<li><a href="http://blogs.thoughtworks.com/">blogs.thoughtworks.com</a></li>
<li><a href="http://brainspl.at">brainspl.at</a></li>
<li><a href="http://chneukirchen.org/blog">chneukirchen.org/blog</a></li>
<li><a href="http://dablog.rubypal.com/">dablog.rubypal.com</a></li>
<li><a href="http://db2onrails.com">db2onrails.com</a></li>
<li><a href="http://del.icio.us/popular/rails">del.icio.us/popular/rails</a></li>
<li><a href="http://del.icio.us/popular/ruby">del.icio.us/popular/ruby</a></li>
<li><a href="http://demo.mephistoblog.com/">demo.mephistoblog.com</a></li>
<li><a href="http://drnicwilliams.com">drnicwilliams.com</a></li>
<li><a href="http://eigenclass.org//hiki.rb">eigenclass.org</a></li>
<li><a href="http://eli.thegreenplace.net">eli.thegreenplace.net</a></li>
<li><a href="http://errtheblog.com/">errtheblog.com</a></li>
<li><a href="http://glu.ttono.us">glu.ttono.us</a></li>
<li><a href="http://groups.google.ca/group/comp.lang.ruby/">groups.google.ca/group/comp.lang.ruby</a></li>
<li><a href="http://groups.google.ca/group/rubyonrails-talk/">groups.google.ca/group/rubyonrails-talk</a></li>
<li><a href="http://headius.blogspot.com">headius.blogspot.com</a></li>
<li><a href="http://hivelogic.com">hivelogic.com</a></li>
<li><a href="http://intertwingly.net/blog/">intertwingly.net/blog</a></li>
<li><a href="http://memeagora.blogspot.com">memeagora.blogspot.com</a></li>
<li><a href="http://metaatem.net">metaatem.ne</a></li>
<li><a href="http://mir.aculo.us/">mir.aculo.us</a></li>
<li><a href="http://ntschutta.com/jat">ntschutta.com/jat</a></li>
<li><a href="http://nubyonrails.com">nubyonrails.com</a></li>
<li><a href="http://ola-bini.blogspot.com/">ola-bini.blogspot.com</a></li>
<li><a href="http://on-ruby.blogspot.com/">on-ruby.blogspot.com</a></li>
<li><a href="http://onestepback.org/index.cgi">onestepback.org/index.cgi</a></li>
<li><a href="http://peepcode.com/products">peepcode.com/products</a></li>
<li><a href="http://planetruby.0x42.net/">planetruby.0&#215;42.net</a></li>
<li><a href="http://pragdave.blogs.pragprog.com/pragdave/">pragdave.blogs.pragprog.com/pragdave</a></li>
<li><a href="http://rubyblogs.org/">rubyblogs.org</a></li>
<li><a href="http://rubyforge.org">rubyforge.org</a></li>
<li><a href="http://ryandaigle.com/">ryandaigle.com</a></li>
<li><a href="http://tomcopeland.blogs.com/juniordeveloper">tomcopeland.blogs.com/juniordeveloper</a></li>
<li><a href="http://twsummary.blogspot.com">twsummary.blogspot.com</a></li>
<li><a href="http://weblog.jamisbuck.org/">weblog.jamisbuck.org</a></li>
<li><a href="http://weblog.rubyonrails.com/">weblog.rubyonrails.com</a></li>
<li><a href="http://www.adaruby.com">www.adaruby.com</a></li>
<li><a href="http://www.artima.com/buzz/community.jsp?forum=123">artima.com/buzz/community.jsp?forum=123</a></li>
<li><a href="http://www.chadfowler.com/">chadfowler.com</a></li>
<li><a href="http://www.clarkware.com/cgi/blosxom">clarkware.com/cgi/blosxom</a></li>
<li><a href="http://www.cornetdesign.com/">cornetdesign.com</a></li>
<li><a href="http://www.danwebb.net/">danwebb.net</a></li>
<li><a href="http://www.igvita.com/blog">igvita.com/blog</a></li>
<li><a href="http://www.jroller.com/obie/">jroller.com/obie</a></li>
<li><a href="http://www.juixe.com/techknow">juixe.com/techknow</a></li>
<li><a href="http://www.loudthinking.com">loudthinking.com</a></li>
<li><a href="http://www.oreillynet.com/ruby/blog/">oreillynet.com/ruby/blog</a></li>
<li><a href="http://www.pjhyett.com/">pjhyett.com</a></li>
<li><a href="http://www.quotedprintable.com/">quotedprintable.com</a></li>
<li><a href="http://www.railscasts.com">railscasts.com</a></li>
<li><a href="http://www.railsenvy.com">railsenvy.com</a></li>
<li><a href="http://www.robbyonrails.com">robbyonrails.com</a></li>
<li><a href="http://www.rubyinside.com">rubyinside.com</a></li>
<li><a href="http://www.rubyonrailsblog.com">rubyonrailsblog.com</a></li>
<li><a href="http://www.rubyquiz.com/">rubyquiz.com</a></li>
<li><a href="http://www.slash7.com/">slash7.com</a></li>
<li><a href="http://www.softiesonrails.com">softiesonrails.com</a></li>
<li><a href="http://technorati.com/tag/ruby">technorati.com/tag/ruby</a></li>
<li><a href="http://technorati.com/tag/rails">technorati.com/tag/rails</a></li>
<li><a href="http://www.therailsway.com/">therailsway.com</a></li>
<li><a href="http://www.urbanhonking.com/ideasfordozens">urbanhonking.com/ideasfordozens</a></li>
</ol>
<p>You can download the file <a href="/files/Ruby-Rails.opml">Ruby-Rails.opml</a> to easily import all of the above feeds into your own reader.</p>
<p>Since I&#8217;m sure there are plenty of other &#8220;must have&#8221; Ruby feeds and blogs that are not currently on my radar (no word of a lie, I&#8217;ve already added more since I put the list together), I openly invite you to write a small entry in your blog as well, and show us what feeds you subscribe to. Please link back to this original post, or I won&#8217;t be able to easily find your answer. Consider it a sort of Ruby and Rails feed survey.</p>
<p>And since we&#8217;re on the topic, and the amount of feeds that I follow is dramatically reduced now, I&#8217;d like to extend an invite for you to do the same thing with Python/Django, Haskell, and Objective-C, assuming you are into any of these communities respectively. Those are the languages that interest me the most and I&#8217;d like to start following a good selection of feeds on these topics. If you don&#8217;t wish to blog about it, or use the comment section below, you can always write me privately at acangianoATgmail.com, specifying if you are okay with me crediting your list to you. I&#8217;d like to collect and organize the most interesting ones in a &#8220;results&#8221; type of post.</p>
<p>I thank you in advance, as I think it&#8217;s an interesting &#8220;experiment&#8221; that can be quite useful, especially for those who are just starting to learn any of the languages above.</p>
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2007/11/27/ruby-python-haskell-and-objective-c-feed-survey/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>DB2 on Mac</title>
		<link>http://programmingzen.com/2007/09/19/db2-on-mac/</link>
		<comments>http://programmingzen.com/2007/09/19/db2-on-mac/#comments</comments>
		<pubDate>Wed, 19 Sep 2007 20:00:25 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[Cocoa and Objective-C]]></category>
		<category><![CDATA[DB2]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[Mac]]></category>

		<guid isPermaLink="false">http://antoniocangiano.com/2007/09/19/db2-on-mac/</guid>
		<description><![CDATA[Python and DB2 We now have a working Python driver for DB2 which is currently undergoing internal testing. The driver is similar to the Ruby and PHP ones, which means that you get an advanced and very easy to use API. It also means that if you are confident with the Ruby driver, you will [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p><b>Python and DB2</b></p>
<p>We now have a working Python driver for DB2 which is currently undergoing internal testing. The driver is similar to the Ruby and PHP ones, which means that you get an advanced and very easy to use API. It also means that if you are confident with the Ruby driver, you will be able to use the Python one in no time.</p>
<p><span style="color: red;">Ruby:</span></p>
<div style="font-size:14px; border: 1px dotted red; padding: 5px;">
<code>
<pre>require 'ibm_db'

conn = IBM_DB::connect(database, user, password)

if conn
  puts "Connection succeded."
  IBM_DB::close(conn)
else
  puts "Connection failed."
  puts IBM_DB::conn_errormsg
end</pre>
<p></code>
</div>
<p><br/><br />
<span style="color: green;">Python:</span></p>
<div style="font-size:14px; border: 1px dotted green; padding: 5px;">
<code>
<pre>import ibm_db

conn = ibm_db.connect(database, user, password)

if conn:
    print "Connection succeeded."
    ibm_db.close(conn)
else:
    print "Connection failed."
    print ibm_db.conn_errormsg</pre>
<p></code>
</div>
<p><br/></p>
<p>We made it so that if you know one, you already know the other. These drivers are CLI wrappers that provide you with performance and stability.  Also they don&#8217;t limit you to user data and are able to retrieve a good deal of metadata about your database. We&#8217;ll also provide a thin wrapper for those of you who intend to use a <a href="http://www.python.org/dev/peps/pep-0249/">PEP 249 API</a>. The next step, working on SQLAlchemy, has already started.</p>
<p><b>DB2 on Mac (no, really!)</b></p>
<p><img src='http://antoniocangiano.com/wp-content/uploads/2007/09/macpro.png' alt='macpro.png' style="border: 0;" align="right" />When <a href="http://antoniocangiano.com/2007/03/15/python-django-and-db2-we-need-your-input/">I first posted</a> about our interest in Python/Django and DB2, the comment thread got hijacked by many people who asked for a Mac client in order to develop on Mac and deploy on Linux. Ask and you shall receive. I&#8217;ve promoted the idea of Django/SQLAlchemy/Python in IBM for a while now, and we are finally close to delivering the driver (with the adapter progressing at the same time too). Well, don&#8217;t take this as an official announcement, but Python wasn&#8217;t the only thing that I&#8217;ve been promoting for months within IBM. With the ever growing community of Ruby/Python hackers adopting Mac as their development platform of choice, I strongly believe that an investment in porting the great free version of DB2 to Mac is a very valid one.</p>
<p>I couldn&#8217;t talk about this for weeks, and it must be viewed as a rumor until IBM makes an official announcement, but we have been working on porting DB2 to Intel Mac. Not just the client, the whole package. This makes me a happy panda, no longer will a virtual machine be required to develop with DB2 on Rails on my Mac Book Pro. It&#8217;s a joy to see DB2 Express-C run on a Mac Pro (shown in picture) next to the other black boxes in the lab. Work is still in progress, but we should have a beta out there relatively soon (before winter kicks in). DB2 Express-C on Mac is intended for development purposes rather than production, this means that we expect you to develop on your shiny Mac but deploy on Linux or Windows. DB2 on Mac will be a beta product, but again it won&#8217;t just be a client runtime, it will be the full product and there is no reason why it shouldn&#8217;t be just as stable and efficient as the Linux and Windows versions.</p>
<p>Time to employee some of the newly acquired Cocoa-fu. I&#8217;m starting to feel that I could even learn Wasabi and IBM would still be able to let me use that skill in my day job. Awesome.</p>
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2007/09/19/db2-on-mac/feed/</wfw:commentRss>
		<slash:comments>39</slash:comments>
		</item>
		<item>
		<title>A preliminary review of three Cocoa and Objective-C related books</title>
		<link>http://programmingzen.com/2007/08/21/a-preliminary-review-of-three-cocoa-and-objective-c-related-books/</link>
		<comments>http://programmingzen.com/2007/08/21/a-preliminary-review-of-three-cocoa-and-objective-c-related-books/#comments</comments>
		<pubDate>Wed, 22 Aug 2007 01:03:58 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Cocoa and Objective-C]]></category>
		<category><![CDATA[Mac]]></category>

		<guid isPermaLink="false">http://antoniocangiano.com/2007/08/21/a-preliminary-review-of-three-cocoa-and-objective-c-related-books/</guid>
		<description><![CDATA[As announced before, I got interested in Mac development, bought a bunch of books and spent a few nights reading and coding. Here are my first impressions on those books which thus far I&#8217;ve picked up. I only had time to read 3 chapters from Stephen Kochan&#8217;s book and I must say that I&#8217;m not [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p style="font-style: italic;">As announced <a href="http://antoniocangiano.com/2007/08/10/cocoa-is-my-cup-of-tea/ ">before</a>, I got interested in Mac development, bought a bunch of books and spent a few nights reading and coding. Here are my first impressions on those books which thus far I&#8217;ve picked up.</p>
<p><a href=" http://www.amazon.com/gp/product/0672325861?ie=UTF8&amp;tag=zenruby-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0672325861 "><img style="margin: 10px;" src="/wp-content/uploads/2007/08/21axr3scuyl_aa_sl160_.jpg" align="left" border="0"></a><img src=" http://www.assoc-amazon.com/e/ir?t=zenruby-20&amp;l=as2&amp;o=1&amp;a=0672325861 " alt="" style="border: medium none  ! important; margin: 0px ! important;" border="0" height="1" width="1">I only had time to read 3 chapters from Stephen Kochan&#8217;s book and I must say that I&#8217;m not impressed! The pace is extremely slow and experienced programmers who read it will be bored to tears. An example of this, is the fact that he spends 15 pages on teaching how to use if/else statements. I&#8217;m afraid it&#8217;s not working for me; by nature it&#8217;s far too basic, and slow paced books are irritating. I don&#8217;t blame the author, I&#8217;m just not the right target for such a book &#8211; and I find the title to be inappropriate, or rather, inaccurate. It should be renamed &#8216;Learn to Program with Objective-C&#8217; or &#8216;Introduction to Objective-C&#8217; not &#8216;Programming in Objective-C&#8217;. Readers who don&#8217;t know how to program in C or any other programming language, will find this book to be a very good explanation and thorough introduction to programming though. The book &#8220;<a href=" http://www.spiderworks.com/books/learnobjc.php">Learn Objective-C on the Macintosh</a>&#8221; is basic too, but it&#8217;s often recommended as an alternative to Kochan&#8217;s book. According to what I&#8217;ve seen from the <a href="http://www.spiderworks.com/samples/LearnObjectiveC_Preview.pdf">sample chapter</a>, this is still a very gentle introduction to the language, but it carries more insight and it&#8217;s not a boring read. Plus one of the authors is Mark Dalrymple who is very active in the online community as well.
<p>
<a href="http://www.amazon.com/gp/product/0321213149?ie=UTF8&amp;tag=zenruby-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321213149 "><img style="margin: 10px;" src="/wp-content/uploads/2007/08/21tjzh2cgrl_aa_sl160_.jpg" align="right" border="0"></a><img src="http://www.assoc-amazon.com/e/ir?t=zenruby-20&amp;l=as2&amp;o=1&amp;a=0321213149" alt="" style="border: medium none  ! important; margin: 0px ! important;" border="0" height="1" width="1">Hillegass&#8217; book is a whole different story. He is clearly a great teacher and, while I&#8217;ve read only half of this book so far, I can already conclude that this book rocks. Most of what I&#8217;m learning is coming straight from this book. Cocoa is not that easy but I feel that this tutorial sufficiently covers  the subject matter at hand in-depth and gives a good deal of clarity to the fundamental concepts of this topic. I won&#8217;t be an expert by the time I&#8217;ve finished this book, no (this is never the case with any one book), though I will have a far better grasp of Cocoa. I&#8217;d say that at this time, it&#8217;s most likely the best book I could be reading on the subject. I highly recommend it to those of you out there who&#8217;d like to follow similar steps (if you buy only one book to get started with Cocoa, this is definitely the one I&#8217;d go for).</p>
<p><a href="http://www.amazon.com/gp/product/0974078514?ie=UTF8&amp;tag=zenruby-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0974078514"><img style="margin: 10px;"  src="/wp-content/uploads/2007/08/21ybfxyf3yl_aa_sl160_.jpg" align="left" border="0"></a><img src="http://www.assoc-amazon.com/e/ir?t=zenruby-20&amp;l=as2&amp;o=1&amp;a=0974078514 " alt="" style="border: medium none  ! important; margin: 0px ! important;" border="0" height="1" width="1">I read three chapters from <a href="http://www.amazon.com/gp/product/0974078514?ie=UTF8&amp;tag=zenruby-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0974078514">Advanced Mac OS X Programming</a><img  src="http://www.assoc-amazon.com/e/ir?t=zenruby-20&amp;l=as2&amp;o=1&amp;a=0974078514"  alt="" style="border: medium none  ! important; margin: 0px ! important;" border="0" height="1" width="1">so far, and I&#8217;m really glad I bought this book. If <a href="http://www.amazon.com/gp/product/0321213149?ie=UTF8&amp;tag=zenruby-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321213149 ">Cocoa Programming for Mac OS X (2nd Edition)</a><img src="http://www.assoc-amazon.com/e/ir?t=zenruby-20&amp;l=as2&amp;o=1&amp;a=0321213149 " alt="" style="border: medium none  ! important; margin: 0px ! important;" border="0" height="1" width="1"> is the the best tutorial to learn the basics and get started with, this advanced book appears to be what I&#8217;m really aiming for eventually and there is no doubt in my mind that it&#8217;s going to become my reference of choice along with the official Apple documentation. It covers difficult topics in detail and gives you insights that I&#8217;ve not found elsewhere on the Web. If I&#8217;m aiming to get serious about Mac development, I have to study this tome as best I can. I&#8217;m holding off on reading it for the moment, as I believe this book is the perfect continuation of the one I&#8217;m currently reading. From the chapters that I&#8217;ve read up until now, I&#8217;m wowed by this book. Mac OS X is a Unix OS, and this book covers that aspect by not leaving many details out. So far it looks like the perfect match up between theory (you will get a lot of college flashbacks when they talk about multi-threading and networking) and practice (the chapters on Memory management and Subversion are worth the price alone). Mark Dalrymple and Aaron Hillegass nail it again with a must-have book for serious developers.</p>
<p>Not bad, I bought three books and it turns out that two of them are great. I&#8217;m tempted to return the Objective-C one, but ultimately I don&#8217;t think that I&#8217;ll end up doing so.</p>
<p>I&#8217;ll suggest a fourth book, in case you are approaching Objective-C without any knowledge of C (but with at least some knowledge of other programming languages). I&#8217;m using it myself to brush up my C skills, which are certainly there, but in need of a quick refresher course.</p>
<p align="center"><a href="http://www.amazon.com/gp/product/0131103628?ie=UTF8&amp;tag=zenruby-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0131103628"><img src="/wp-content/uploads/2007/08/21pawh8txbl_aa_sl160_.jpg"  border="0"></a><img src="http://www.assoc-amazon.com/e/ir?t=zenruby-20&amp;l=as2&amp;o=1&amp;a=0131103628" alt="" style="border: medium none  ! important; margin: 0px ! important;" border="0" height="1" width="1"></p>
<p>Objective-C (aka ObjC) is a superset of ANSI C in fact. As such, any C program is also a valid Objective-C program. It provides you with a relatively easy and straightforward way of doing Object Oriented programming, while simplifying memory management. From what I&#8217;ve seen though, unless you are willing to become well versed in C, you won&#8217;t become an overly advanced Objective-C developer. Knowing C already (albeit I&#8217;m not a Guru), I must say that Objective-C is very easy and can be picked up in a matter of days. The real power and learning curve comes from the Cocoa framework itself, and that&#8217;s where I&#8217;m going to focus my efforts.</p>
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2007/08/21/a-preliminary-review-of-three-cocoa-and-objective-c-related-books/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Cocoa is my Cup of Tea</title>
		<link>http://programmingzen.com/2007/08/10/cocoa-is-my-cup-of-tea/</link>
		<comments>http://programmingzen.com/2007/08/10/cocoa-is-my-cup-of-tea/#comments</comments>
		<pubDate>Fri, 10 Aug 2007 22:10:29 +0000</pubDate>
		<dc:creator>Antonio Cangiano</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Cocoa and Objective-C]]></category>
		<category><![CDATA[Mac]]></category>

		<guid isPermaLink="false">http://antoniocangiano.com/2007/08/10/cocoa-is-my-cup-of-tea/</guid>
		<description><![CDATA[Writing the article &#8220;Desktop Applications are not dead!&#8221; was an interesting experience that led to vivid discussions about the business of software for desktop applications, including the current limits and options available in this field. In the last comment by Eugueny Kontsevoy (the person I was responding to with my article in the first place), [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p>Writing the article <a href="http://antoniocangiano.com/2007/08/05/desktop-applications-are-not-dead/">&#8220;Desktop Applications are not dead!&#8221;</a> was an interesting experience that led to vivid discussions about the business of software for desktop applications, including the current limits and options available in this field. In the last comment by <a href="http://kontsevoy.blogspot.com/">Eugueny Kontsevoy</a> (the person I was responding to with my article in the first place), he expressed once again his frustration regarding Windows development: </p>
<blockquote><p>&#8220;Seriously: I am an engineer for the sake of it: I love what I do and spending 20% of my time planning the deployment and dealing with failing Microsoft OS components is NOT something I want to do anymore. Period.&#8221; &#8212; Eugueny Kontsevoy</p></blockquote>
<p>Before you dismiss his comment as an over exaggeration or peg him as having too picky an attitude, I would suggest thinking twice. The guy has a point, and if you’ve done Windows desktop application development before, you know this is often the case. My article proposed possible (partial) solutions for making Windows a more enjoyable and viable deployment platform for software startups. Of course, the easy way out is to leave the desktop market and move exclusively to the Web application arena. Hey, that&#8217;s what everyone else is doing, that&#8217;s the future, it&#8217;s buzz compliant, etc&#8230; But I want to take my own advice, and put my money where my mouth is.</p>
<p><b>Taking the <span style="color:red;">red pill</span></b></p>
<p>I felt more at ease with my Mac after 5 weeks of using it, than I had with Windows after a dozen years. We feel like old friends, like Hemingway’s old man and the sea. I absolutely love Mac. I love its culture, the quest and appreciation for beauty. Quality over quantity, simplicity over complexity, beautiful design over crowded ugly interfaces. Mac is productive; Mac is zen-like, inspiring, and enlightening. Mac makes me happy to be a computer geek, and in my mind, Mac OS X is simply the best operating system available today.</p>
<p>I&#8217;m taking the red pill: I’ve decided to get serious about developing applications for Mac OS X. I can&#8217;t refrain from programming with this beauty.</p>
<p><b>Oh boy, where do I start?</b></p>
<p>I&#8217;m writing this as a quick guide for whoever decides to follow a similar path as mine. Consider that I&#8217;m just starting out, so I don&#8217;t know anything beyond what I&#8217;ve researched from reading other peoples’ opinions. I think it&#8217;s a sensible plan though. There is a wealth of good information on Apple&#8217;s site and many guides all over the web. Here is a list of resources that I am using or which I plan to use. They refer to Objective-C and Cocoa, which are respectively the favored language and framework for developing Mac applications.</p>
<p><b>First Step: Let&#8217;s get excited</b></p>
<ul>
<li>Let&#8217;s get motivated with <a href="http://wilshipley.com/blog/WWDC_Student_Talk.pdf">these slides</a> from one of the most successful Mac developers out there and his <a href="http://wilshipley.com/blog/wwdc_podcast.m4a">associated podcast</a> (whose genre is ‘religious’, according to iTunes, hahaha);</li>
<li><a href="http://maczealots.com/articles/development/">Beginning Mac Development</a>: A good guide on how to get started by MacZealots.com;</li>
<li><a href="http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=73799534">Subscribe to CocoaRadio</a>, an awesome podcast including interviews with the most popular and successful Mac developers around.</li>
</ul>
<p><b>Second Step: Let&#8217;s read some documents</b></p>
<ul>
<li>Get a quick, very basic intro to the C language. C is a subset of Objective-C, so it will make things easier if you already know the language or if you can at least understand the basics. This <a href="http://cocoadevcentral.com/articles/000081.php">C Language Tutorial for Cocoa</a> should get you started. (I&#8217;ll be skipping this step, and you can safely do so also if you know C, too).</li>
<li><a href="http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/index.html?http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/Introduction/chapter_1_section_1.html">The Objective-C Programming Language</a> by Apple;</li>
<li><a href="http://developer.apple.com/documentation/Cocoa/Conceptual/CocoaFundamentals/index.html?http://developer.apple.com/documentation/Cocoa/Conceptual/CocoaFundamentals/Introduction/chapter_1_section_1.html">Cocoa Fundamentals Guide</a> by Apple.</li>
</ul>
<p><b>Third Step: Let&#8217;s get serious, with some books</b></p>
<p>I actually ordered the three books below yesterday night. The second one is already here, while the other two should arrive soon enough.  All three of them have stellar reviews. </p>
<ul>
<li><a href="http://www.amazon.com/gp/product/0672325861?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0672325861"><img border="0" align="middle" style="margin: 10px;" src="/wp-content/uploads/2007/08/21axr3scuyl_aa_sl160_.jpg"></a><img src="http://www.assoc-amazon.com/e/ir?t=zenruby-20&#038;l=as2&#038;o=1&#038;a=0672325861" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> This should teach the language in depth and serve as a decent reference to have on hand.</li>
<li><a href="http://www.amazon.com/gp/product/0321213149?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0321213149"><img border="0" align="middle" style="margin: 10px;" src="/wp-content/uploads/2007/08/21tjzh2cgrl_aa_sl160_.jpg"></a><img src="http://www.assoc-amazon.com/e/ir?t=zenruby-20&#038;l=as2&#038;o=1&#038;a=0321213149" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />This is, I believe, *the* crucial book. I plan to read this cover to cover and work through it.</li>
<li><a href="http://www.amazon.com/gp/product/0974078514?ie=UTF8&#038;tag=zenruby-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0974078514"><img border="0" align="middle" style="margin: 10px;" src="/wp-content/uploads/2007/08/21ybfxyf3yl_aa_sl160_.jpg"></a><img src="http://www.assoc-amazon.com/e/ir?t=zenruby-20&#038;l=as2&#038;o=1&#038;a=0974078514" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />This book should provide some advanced techniques.</li>
</ul>
<p><b>Fourth Step: Join the discussion</b></p>
<ul>
<li>Join the irc.freenode.net channels <strong>#macdev</strong> and <strong>#macsb</strong>, respectively about Mac development and the business side of Mac programming;</li>
<li>Subscribe to the <a href="http://lists.apple.com/mailman/listinfo/cocoa-dev">Cocoa-Dev</a> and the <a href="http://tech.groups.yahoo.com/group/macsb/">MacSB</a> mailing lists.</li>
</ul>
<p><b>Fifth Step: Keep Reading</b></p>
<p>Apple Developer Connection (ADC) has a huge amount of information about developing applications and guidelines for delivering high quality products. Bookmark http://developer.apple.com/ and come back to it often. I know I will.</p>
<p><b>What about Ruby and Python? </b></p>
<p><a href="http://www.rubycocoa.com/">RubyCocoa</a> is a nice bridge that allows you to develop in Ruby and Cocoa. Yes, I&#8217;m super interested in this project, but I want to learn first the traditional way of using Objective-C and only then consider when and if Ruby and <a href="http://pyobjc.sourceforge.net/">Python</a> can be beneficial for my Mac development needs.</p>
<p><b>And what about DB2?</b></p>
<p>Do I miss <a href="http://www-306.ibm.com/software/data/db2/express/download.html">DB2</a> when I am on my Mac? Hell yes. <a href="http://db2express.com/">DB2 Express-C is just plain awesome</a> and it&#8217;s the only software that I really miss on my Mac. It runs fine in a virtual machine, but wouldn&#8217;t it be great to see it run natively in Mac OS X? Well, this won&#8217;t happen tomorrow, but I&#8217;ll tell you something&#8230; sooner or later, we&#8217;ll get there!</p>
<p>I already know that the biggest challenge is going to be finding the time to study all this stuff, and above all, finding time to code (the only way to really learn). But it&#8217;s going to be awesome. What are your thoughts about this strategy for learning Mac development? I especially welcome comments from experienced Mac developers and people who, like me, have decided to give Cocoa a serious go.</p>
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://programmingzen.com/2007/08/10/cocoa-is-my-cup-of-tea/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

