Posted by Shane Becker on
<p>
<a href="http://wilshipley.com">Wil Shipley</a> wrote <a href="http://wilshipley.com/blog/2007/07/iphones-ajax-sdk-no-thank-you.html" title="Call Me Fishmeal.: iPhone's AJAX SDK: No, thank you.">a little blog post about the iPhone, lack of real SDK and a thing called AJAX</a>. this started out as a comment, then grew up past an email, finally settling into a blog post rebuttal thing. that's why it's written largely in the second person. i was writing it directly to wil.
</p>
<p>
first things first, i hate javascript just as much as you. it's ugly. it's unpleasant to write. more unpleasant to read. ( code is read more than it is written, remember ). and it's ugly. i've avoided it for just as long as i could. i don't want to ever write a single bit of it if i can get away with it. but objective-c is no looker either. i mean, slow down with the square brackets already. and the semi-colons, too. that's not necessary.
</p>
<p>
i also agree that it makes sense why they haven't released a real public api yet. i also believe that they will in time. i also think its gonna do away with a lot of cruft when they do. it's gonna be <a href="http://en.wikipedia.org/wiki/Dominique_Dawes#2000_Olympics" title="Dominique Dawes">awesome dawesome</a>. i'm saying i agree with a lot of what you're saying, but i couldn't disagree with you more ( in some places ).
</p>
<blockquote cite="http://wilshipley.com/blog/2007/07/iphones-ajax-sdk-no-thank-you.html">
<p>
Not very many companies on any platform are successful at selling web applications
</p>
</blockquote>
<p>
1. That is kind of like saying "not very many companies are successful at selling mac applications". it's just demonstrably false. <a href="http://www.37signals.com/" title="37signals">37 signals</a> knows a thing or two about making some scriller from web apps. <a href="http://www.flickr.com/" title="Welcome to Flickr - Photo Sharing">flickr</a> seems to be doing ok. <a href="http://wordpress.com/" title="WordPress.com » Get a Free Blog Here">wordpress.com</a> makes money money. <a href="http://www.shopify.com/" title="Shopify — A shop in minutes, a business for life.">shopify</a> is a web-app that makes money by enabling it's users to build web-apps that make money ( it's sooo postmodern ). <a href="http://www.fluxiom.com/" title="fluxiom - capture, manage, access and deliver content across your enterprise">fluxiom</a> is pretty sweet. <a href="http://www.blinksale.com/" title="Blinksale | The easiest way to send invoices online">blinksale</a>, <a href="http://www.newsgator.com" title="NewsGator - The RSS Company">the newsgator rss platform</a>, <a href="http://dabbledb.com/" title="A better web database to share, manage and explore your information">dabbledb</a> and on and on.
</p>
<p>
i'm not playing "nuh-uh, i've got these two or three exceptions so you're wrong" game for the sake of playing it. there are <em>plenty</em> of people are building web apps and selling them just fine. it's really no different than windows developers saying that "no one really makes any money selling mac apps, save for 3 exceptions." malarky.
</p>
<blockquote cite="http://wilshipley.com/blog/2007/07/iphones-ajax-sdk-no-thank-you.html">
<p>
I can't customize what controls the user sees from inside Safari.
</p>
</blockquote>
<p>
2. is that really a deal breaker? you can't really control the window widgets in an os x app either. well, you can't but you don't. i imagine that you don't ( i mean, actually you wil, not the royal you, but actually wil shipley when you wrote DL ) because users expect those things to be there and that you actually like them there.
</p>
<p>
in fact, you expect them to be there because parts of your app depend on them. when i double click on a library item, a new window pops up that i can close by clicking that little red thingy in the corner and drag around by grabbing onto the metal stuff. same for the main DL window. as a user, i expect that to work that way. and you, as a developer, had to do nothing to get that behaviour. dope.
</p>
<p>
same is true of certain browser interface widgets. users hate having to figure out the custom back/forward mechanism in sites that are entirely flash. developers don't like making them either. i think its pretty swell that we get those for free. i do not want to keep track of your page views and there order while you're on my site.
</p>
<p>...</p>
<p>
wil, i know you like obj-c and cocoa. i know that you've said there is a recurring trend of people saying higher level languages are going to do away with C, but C just keeps on keeping on and there will always be a place for compiled languages. sure, sure. that's fine. something interesting is happening now though, that makes some of what seem less and less relevant.
</p>
<p>
metaprogramming and domain specific languages ( DSLs ) in higher level languages are becoming increasingly popular. for example, <a href="http://weblog.rubyonrails.org/2006/03/28/rails-1-1-rjs-active-record-respond_to-integration-tests-and-500-other-things/" title="Rails 1.1: RJS, Active Record++, respond_to, integration tests, and 500 other things!">rjs</a>. with rjs templates in rails i can write javascript in a very ruby-like way. i keep my hands clean and i still get what i need to get to make the things i want to happen happen. ( or for that matter, <a href="http://haml.hamptoncatlin.com/docs/haml" title="#haml.Documentation.Haml">haml</a> and <a href="http://haml.hamptoncatlin.com/docs/sass" title="#haml.Documentation.Sass">sass</a> for those that hate writing angle brackets )
</p>
<code>
<pre> page.delay(4) do page.select("td span.company").each do |column|
column.set_style :fontStyle => "normal" end end
</pre>
</code>
<p>
i'd write that over the javascript it generates any day.
</p>
<p>
cocoa is essentially in bed with objective-c. they've definitely grown up together. but some new people are coming to the party. more languages are getting official backing from apple with cocoa bridges baked into leopard ( ruby, python ). <a href="http://www.rubycocoa.com/" title="RubyCocoa Resources">rubycocoa</a> and <a href="http://developer.apple.com/cocoa/pyobjc.html" title="Using PyObjC for Developing Cocoa Applications with Python">pyobjc</a>.
</p>
<p>
this is the way that i ( and lots of others ) see application development going. higher level / interpreted languages. the more the expressive, the better. DSLs for languages that machines require of us, but we don't want to actually have to write. ( the <a href="http://rubini.us/" title="Rubinius">rubinius</a> folks have something called <a href="http://on-ruby.blogspot.com/search?q=cuby" title="On Ruby">cuby</a> that's a ruby looking DSL for generating C code. pretty awesome. ) a greater invasion of web technologies into desktop / hybrid apps. ( there will be desktop apps for a long long time. the line will just get blurred more and more. )
</p>
<p>
for my parting shot, imagine this equation. html interfaces using <a href="http://en.wikipedia.org/wiki/WebKit" title="WebKit - Wikipedia, the free encyclopedia">WebKit</a> views. the bulk of your app written in <a href="http://en.wikipedia.org/wiki/Ruby_%28programming_language%29" title="Ruby (programming language) - Wikipedia, the free encyclopedia">ruby</a> using <a href="http://www.rubycocoa.com/" title="RubyCocoa Resources">rubycocoa</a> to hook into that html interface. <a href="http://api.rubyonrails.com/classes/ActiveRecord/Base.html" title="Base">ActiveRecord</a> talking to a <a href="http://en.wikipedia.org/wiki/SQLite" title="SQLite - Wikipedia, the free encyclopedia">SQLite</a> db from the desktop app. a DSL (like cuby) for stubbing out C/obj-c code for areas that need to be optimized for speed. to me that sounds a lot like making a web app. in fact, it just might deliver a lot more of the write once promise that we've heard before. or at least some of it.
</p>
<p>
the web app version of the above is not too far off. ActiveRecord is still on the back end. this time maybe its talking to <a href="http://mysql.com/" title="The world's most popular open source database">mysql</a> or <a href="http://www.postgresql.org/" title="The world's most advanced open source database">postgresql</a> or <a href="http://en.wikipedia.org/wiki/Oracle_database" title="Oracle database - Wikipedia, the free encyclopedia">oracle</a> or even still <a href="http://www.sqlite.org/" title="SQLite home page">SQLite</a>. so that code doesn't need to change much, if at all. ruby code that handles the business logic specific to your app's domain. an html interface. maybe something like rjs sprinkled in there to replace some of what cocoa gives you ( which i fully admit that cocoa gives you lots and lots of cool things, like <a href="http://www.apple.com/macosx/leopard/technology/coreanimation.html" title="Apple - Mac OS X Leopard - Technology - Core Animation">Core Animation</a> ). then finally, instead of rubycocoa tying it all together on the web end, you use <a href="http://rubyonrails.com/" title="Ruby on Rails">rails</a> or <a href="http://brainspl.at/articles/tag/merb" title="Brainspl.at">merb</a>.
</p>
<p>
that last part, switching out frameworks, i know is highly non-trivial, but doable. some very smart people will figure this out faster than you'd think. expect to see cool development happening in this space after leopard rolls out.
</p>