<?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'><id>tag:blogger.com,1999:blog-506409777947312150</id><updated>2010-03-09T11:27:52.597-08:00</updated><title type='text'>Andrew Paul Simmons: Blog</title><subtitle type='html'></subtitle><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default?start-index=26&amp;max-results=25'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.andrewpaulsimmons.com/atom.xml'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/01617931119449964839</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>45</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-5616818728805941029</id><published>2010-03-08T23:41:00.000-08:00</published><updated>2010-03-09T00:25:37.101-08:00</updated><title type='text'>HP Slate: An "Open" Competitor to Apple's iPad?</title><content type='html'>&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/-p-RZAwQq0E&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en_US&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/-p-RZAwQq0E&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en_US&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;This video shows that the Windows 7 on HP Slate can offer similar features to the Apple iPad.  Further, this device is a full computer running all of the Windows 7 applications you use everyday without restrictions.   (And if it runs Windows it will probably run Linux without a hitch too.)&lt;br /&gt;&lt;br /&gt;Flash content is fully enabled.  Putting all of the video on the web into the palm of your hand.  This is a major distinguishing factor for the Slate.   It is true that HTML 5 is already running and &lt;a href="http://www.youtube.com/html5"&gt;available&lt;/a&gt; to YouTube users.  I might add that I have used the HTML5 version of YouTube on my iPad simulator and it runs quite nicely.    Still, Microsoft is yet to release an HTML 5 compliant browser.  This means that developers will continue to be dependent on Flash (or other browser plug-ins) to provide in-page video content for browsers as old as IE 8, at least. &lt;br /&gt;&lt;br /&gt;By the way, IE 6, which was released in August of 2001, just had a &lt;a href="http://www.gizmodo.com.au/2010/03/microsoft-dev-team-sends-flowers-to-ie6s-funeral/"&gt;funeral&lt;/a&gt; and most web content providers would still gasp at the idea of not offering a suitable video option for that browser.  If history is an indicator, it will be 2020 before we can actually deliver video content over the web without relying on a plugin.  (Also, Steve Jobs doesn't just hate Flash he hates all plug-ins, just read the iPhone SDK TOU)&lt;br /&gt;&lt;br /&gt;It is good that this device offers so many options because there is no question that the HP slate will need to differentiate itself from the iPad.  &lt;a href="http://www.macrumors.com/2010/02/08/apple-open-to-ipad-price-cuts-if-demand-lags/"&gt;Apple is open to reducing the price of the iPad if demand lags&lt;/a&gt;, so undercutting the iPad is not an option for HP.&lt;br /&gt;&lt;br /&gt;Finally, while on paper, or even in a video, this tablet may look like more than a match for the iPad,   I recently had a chance try out the Windows multi-touch experience.   It was slow, awkward, and frustrating. &lt;br /&gt;&lt;br /&gt;In the end the key factor may be usability.   If this Windows 7 tablet frustrates users back onto their laptops, the product could have a short life.&lt;br /&gt;&lt;br /&gt;The real competitor to the Apple iPad  could just be Google's coming &lt;a href="http://googleblog.blogspot.com/2009/07/introducing-google-chrome-os.html"&gt;Chrome OS&lt;/a&gt;...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/506409777947312150-5616818728805941029?l=blog.andrewpaulsimmons.com%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/5616818728805941029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.andrewpaulsimmons.com/2010/03/hp-slate-open-alternative-to-apples.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/5616818728805941029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/5616818728805941029'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2010/03/hp-slate-open-alternative-to-apples.html' title='HP Slate: An &quot;Open&quot; Competitor to Apple&apos;s iPad?'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/01617931119449964839</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06896423076613279281'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-6054352791516232746</id><published>2010-03-05T21:30:00.001-08:00</published><updated>2010-03-08T17:46:36.253-08:00</updated><title type='text'>How To Be The First To Receive An iPad?</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.andrewpaulsimmons.com/uploaded_images/hero_title_20100127-787536.png"&gt;&lt;img style="cursor: pointer; width: 118px; height: 54px;" src="http://blog.andrewpaulsimmons.com/uploaded_images/hero_title_20100127-787535.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.andrewpaulsimmons.com/uploaded_images/hero_dates_20100305-799438.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 60px;" src="http://blog.andrewpaulsimmons.com/uploaded_images/hero_dates_20100305-799436.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;If there turns out to be shortage due to any unforeseen manufacturing issues, the iPad could be quite scarce for some time.&lt;br /&gt;&lt;br /&gt;I want to begin development on the device right away.  So, my question today is how shall I actaully get my hands on this iPad.  Apple says they will be offering it for pre-order on the 12th.&lt;br /&gt;&lt;br /&gt;I definitely want to pick mine up from the store.   The question is, can I register on line for &lt;span style="font-style: italic;"&gt;in-store &lt;/span&gt;pre-orders?  If I can only place orders for in-store pick-up at the store, should I arrive early on the 12th?  Will there be a line?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;I'll post any details I find here.&lt;/span&gt;&lt;div&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Update: Apple rep says reserve &lt;/span&gt;&lt;u&gt;online&lt;/u&gt;&lt;span&gt; for &lt;/span&gt;&lt;u&gt;in-store&lt;/u&gt;&lt;span&gt; pickup.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/506409777947312150-6054352791516232746?l=blog.andrewpaulsimmons.com%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/6054352791516232746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.andrewpaulsimmons.com/2010/03/how-to-be-first-to-receive-ipad.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/6054352791516232746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/6054352791516232746'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2010/03/how-to-be-first-to-receive-ipad.html' title='How To Be The First To Receive An iPad?'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/01617931119449964839</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06896423076613279281'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-515936671208688812</id><published>2010-03-05T19:37:00.000-08:00</published><updated>2010-03-05T19:53:09.356-08:00</updated><title type='text'>Objective-C Error: *nil description*</title><content type='html'>One of the easiest mind boggling errors to run into when developing for the iPhone is the accidental override of NSObject's &lt;span style="font-style: italic;"&gt;description &lt;/span&gt;method.  For those who are new to iPhone Development or Objective-C, the &lt;span style="font-style: italic;"&gt;description&lt;/span&gt; method is equivalent to the more common &lt;span style="font-style: italic;"&gt;toString &lt;/span&gt;method found in other languages.  This is the method that is invoked when an object is printed to a string with &lt;span style="font-style: italic; font-weight: bold;"&gt;%@&lt;/span&gt; string formatting token.&lt;br /&gt;&lt;br /&gt;You will encounter the &lt;span style="font-style: italic; color: rgb(102, 102, 102);"&gt;*nil description*&lt;/span&gt; output if your &lt;span style="font-style: italic;"&gt;description &lt;/span&gt;override returns a nil string.   While overriding the &lt;span style="font-style: italic;"&gt;description&lt;/span&gt; method can be useful in allowing developers to describe their object's contents, it also can cause confusing and unexpected output if the override was unintentional.&lt;br /&gt;&lt;br /&gt;...now wouldn't it be nice if obj-c required developers to mark methods as &lt;span style="font-style: italic;"&gt;override&lt;/span&gt; to ensure that all overrides were intentional?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/506409777947312150-515936671208688812?l=blog.andrewpaulsimmons.com%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/515936671208688812/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.andrewpaulsimmons.com/2010/03/objectgive-c-error-nil-description.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/515936671208688812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/515936671208688812'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2010/03/objectgive-c-error-nil-description.html' title='Objective-C Error: *nil description*'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/01617931119449964839</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06896423076613279281'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-2757283194045657080</id><published>2010-03-01T15:19:00.000-08:00</published><updated>2010-03-01T15:41:51.769-08:00</updated><title type='text'>Creating Apps for iPhone 3.x with / iPad OS 3.2 Beta SDK</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.andrewpaulsimmons.com/uploaded_images/Screen-shot-2010-03-01-at-3.23.33-PM-790811.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 283px; height: 308px;" src="http://blog.andrewpaulsimmons.com/uploaded_images/Screen-shot-2010-03-01-at-3.23.33-PM-790809.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After installing the iPhone / iPad OS 3.2 Beta SDK you may notice that the drop down in the upper left no longer allows you to build your new projects to pre 3.2 versions of iPhone OS.  That means that you currently can't install your apps on your iPhone.&lt;br /&gt;&lt;br /&gt;The good news is that you can build your app to run on any previous 3.x iPhone OS devce.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Simply go into &lt;i&gt;Targets&lt;/i&gt; in the "Groups &amp;amp; Files" panel on the left.  Then right click on the target with your application name. (There is usually only one target.)   Next Choose get info.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A dialog will appear.  Under the build tab choose a "Base SDK" of iPhone 3.x.&lt;br /&gt;&lt;div&gt;&lt;img src="http://blog.andrewpaulsimmons.com/uploaded_images/Screen-shot-2010-03-01-at-3.24.58-PM-787488.png" border="0" alt="" style="cursor: pointer; width: 320px; height: 220px; " /&gt;&lt;/div&gt;&lt;div&gt;Now you should be ready to develop iPhone apps for devices running versions of iPhone OS prior to version 3.2.&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/506409777947312150-2757283194045657080?l=blog.andrewpaulsimmons.com%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/2757283194045657080/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.andrewpaulsimmons.com/2010/03/creating-apps-for-iphone-3x-with-ipad.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/2757283194045657080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/2757283194045657080'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2010/03/creating-apps-for-iphone-3x-with-ipad.html' title='Creating Apps for iPhone 3.x with / iPad OS 3.2 Beta SDK'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/01617931119449964839</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06896423076613279281'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-7628692334105880135</id><published>2010-02-28T13:34:00.000-08:00</published><updated>2010-03-01T06:35:31.347-08:00</updated><title type='text'>Windows 7 Tablet with Multi-Touch, Forget About It!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.andrewpaulsimmons.com/uploaded_images/CIMG0076-776873.jpg"&gt;&lt;img style="cursor: pointer; width: 359px; height: 480px;" src="http://blog.andrewpaulsimmons.com/uploaded_images/CIMG0076-776460.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I recently got a chance to use some of the latest multi-touch features in Microsoft Windows.  I had hoped for good things from Microsoft but found their product to be frustratingly unresponsive!  It took multiple attempts to register multi-touch actions or even single-touch button presses.  When touches were being tracked the UI was so far behind the input that even simple actions like zooming in and out of a map became virtually impossible. Worse than the disappointing Microsoft Surface experience, the Windows multi-touch tablet UX would probably be a joke!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/506409777947312150-7628692334105880135?l=blog.andrewpaulsimmons.com%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/7628692334105880135/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.andrewpaulsimmons.com/2010/02/windows-7-tablet-with-multi-touch.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/7628692334105880135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/7628692334105880135'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2010/02/windows-7-tablet-with-multi-touch.html' title='Windows 7 Tablet with Multi-Touch, Forget About It!'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/01617931119449964839</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06896423076613279281'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-4296464225381820459</id><published>2010-02-28T13:15:00.000-08:00</published><updated>2010-03-01T06:40:15.545-08:00</updated><title type='text'>Microsoft Surface: Not Yet a Polished Product</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.andrewpaulsimmons.com/uploaded_images/CIMG0056-776042.jpg"&gt;&lt;img style="cursor: pointer; width: 376px; height: 280px;" src="http://blog.andrewpaulsimmons.com/uploaded_images/CIMG0056-775359.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I finally got my hands on Microsoft surface at the Samsung pavilion in Vancouver this weekend.   The Responsiveness was less than quick.  After using multi-touch on my MacBook Pro and iPhone, I expected a physical and seamless feeling experience on the Surface.  What I discovered was nothing less than a very delayed response time on this device.  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The Palm Pre, which I used to shoot this picture, running WebOS, well out performed this surface.   The most interesting part of the experience were the glass blocks, which when placed on the screen, would bring up various windows that allowed sharing content and other arbitrary activities.&lt;br /&gt;&lt;br /&gt;More pictures follow:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.andrewpaulsimmons.com/uploaded_images/CIMG0058-782366.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 239px;" src="http://blog.andrewpaulsimmons.com/uploaded_images/CIMG0058-781889.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.andrewpaulsimmons.com/uploaded_images/CIMG0066-706909.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 239px;" src="http://blog.andrewpaulsimmons.com/uploaded_images/CIMG0066-706211.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.andrewpaulsimmons.com/uploaded_images/CIMG0070-714516.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 428px;" src="http://blog.andrewpaulsimmons.com/uploaded_images/CIMG0070-714163.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/506409777947312150-4296464225381820459?l=blog.andrewpaulsimmons.com%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/4296464225381820459/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.andrewpaulsimmons.com/2010/02/micorosoft-surface-not-yet-polished.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/4296464225381820459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/4296464225381820459'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2010/02/micorosoft-surface-not-yet-polished.html' title='Microsoft Surface: Not Yet a Polished Product'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/01617931119449964839</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06896423076613279281'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-9027125377401047724</id><published>2010-02-28T12:40:00.001-08:00</published><updated>2010-03-01T06:51:09.225-08:00</updated><title type='text'>Selling the Experience | A CBC Web/Radio Show On How We Think About Advertisements</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.andrewpaulsimmons.com/uploaded_images/TerryOReilly-252x170-762461.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 252px; height: 170px;" src="http://blog.andrewpaulsimmons.com/uploaded_images/TerryOReilly-252x170-762459.jpg" alt="" border="0" /&gt;&lt;/a&gt;While in Vancouver for the Olympics, I had the good fortune of discovering a fantastic radio show on advertising on CBC Radio called &lt;span style="font-style: italic;"&gt;The Age of Persuasion, &lt;/span&gt;hosted by Terry O'Reilly (left).   For any one designing user experience products are working to create other consumer software products, this show offers a captivating look at how we think about new products.   There are many great historical examples from the early days of advertising as well as a look into current trends.  I can't recommend the show highly enough.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You can find recent episodes here: &lt;a href="http://bit.ly/bWNO2U"&gt;http://www.cbc.ca/ageofpersuasion/&lt;/a&gt;   Give the episode "Season 4: “Being There: Selling Experiences" a listen and tell me if you are not hooked.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"   style="border-collapse: separate; color: rgb(0, 0, 0); font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;font-family:Times;font-size:medium;"&gt;&lt;span class="Apple-style-span"   style="line-height: 15px;font-family:Arial,Verdana,Geneva,Helvetica,sans-serif;font-size:11px;"&gt;&lt;a href="http://www.cbc.ca/ageofpersuasion/2010/02/season_4_being_there_selling_e.html" style="color: rgb(0, 1, 254); text-decoration: underline;"&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"   style="border-collapse: separate; color: rgb(0, 0, 0); font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;font-family:Times;font-size:medium;"&gt;&lt;span class="Apple-style-span"   style="line-height: 16px;font-family:Arial,Verdana,Geneva,Helvetica,sans-serif;font-size:12px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/506409777947312150-9027125377401047724?l=blog.andrewpaulsimmons.com%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/9027125377401047724/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.andrewpaulsimmons.com/2010/02/selling-experience-cbc-podcastshow-on.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/9027125377401047724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/9027125377401047724'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2010/02/selling-experience-cbc-podcastshow-on.html' title='Selling the Experience | A CBC Web/Radio Show On How We Think About Advertisements'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/01617931119449964839</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06896423076613279281'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-2029469462895092244</id><published>2010-02-23T13:10:00.000-08:00</published><updated>2010-02-23T23:18:03.873-08:00</updated><title type='text'>iPad OS 3.2 beta 3 is out?</title><content type='html'>Whenever a new iPhone/iPad SDK comes out there is always a huge rush and slow connection speeds follow. Today, I discovered that the &lt;a href="http://www.9to5mac.com/iPhone-3-2-beta-3-450983647"&gt;3rd iPad beta simulator/SDK&lt;/a&gt; had just been released; however, when I went to the dev center I was only offered the beta 2 version.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.andrewpaulsimmons.com/uploaded_images/Screen-shot-2010-02-23-at-1.13.47-PM-761227.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 409px; height: 297px;" src="http://blog.andrewpaulsimmons.com/uploaded_images/Screen-shot-2010-02-23-at-1.13.47-PM-761221.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Is Apple now offering there SDK updates in waves to avoid the bandwidth crunch, or was the SDK pulled?&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Update 1 (1:30pm) &lt;/b&gt;The SDK has a &lt;a href="http://www.9to5mac.com/iPad-photos-3546093245"&gt;photos app (with mysterious camera button)&lt;/a&gt; .   ...I still can't download it. :(&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Update 2 &lt;/b&gt;&lt;b&gt;(3:30pm)&lt;/b&gt;&lt;b&gt;:&lt;/b&gt; It turns out that Apple &lt;a href="http://www.appleinsider.com/articles/10/02/23/iphone_sdk_3_2_beta_3_simplifies_app_conversion_for_ipads.html"&gt;pulled&lt;/a&gt; the iPhone/iPad Beta 3 SDK only moments after its release. So, there is no telling when we will be able to legitimately download this SDK.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Update 3&lt;/b&gt;&lt;b&gt; (11:15pm)&lt;/b&gt;&lt;b&gt;:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;iPad simulator finally available.  Download in progress :)&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/506409777947312150-2029469462895092244?l=blog.andrewpaulsimmons.com%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/2029469462895092244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.andrewpaulsimmons.com/2010/02/ipad-os-23-beta-3-is-out.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/2029469462895092244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/2029469462895092244'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2010/02/ipad-os-23-beta-3-is-out.html' title='iPad OS 3.2 beta 3 is out?'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/01617931119449964839</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06896423076613279281'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-4897709490113925977</id><published>2010-02-22T18:39:00.000-08:00</published><updated>2010-02-22T19:25:53.906-08:00</updated><title type='text'>Controlling the UIScrollView in a UIWebview: Removing the Bounce, Shadows, and More</title><content type='html'>To control the scrolling behavior of a webview ,we simply grab a reference to its inner scrollview and then control that scrollview as we would any other.&lt;br /&gt;&lt;br /&gt;The first and only subview of the UIWebView is a UIScrollView.  Unfortunately, Apple has provided no direct access to this scrollview; however, the Apple engineers also do not yet have any notion of private methods on objects. ;)  (You may have heard stories from other developers about private APIs.  However, an API is only private if its methods cannot be found in Apple's published APIs.&lt;u&gt;  All of the methods that we are going to use here are included in the documented APIs.&lt;/u&gt;) &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;First we will pull the UIScrollView out from the UIWebView:&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;i&gt;NSArray *sv = [NSArray arrayWithArray:[myWebivew subviews]];&lt;br /&gt;UIScrollView *webScroller = (UIScrollView *)[sv objectAtIndex:0];&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style=" ;font-size:16px;"&gt;That's it, now you have full control over the webviews inner scrollview and we have only used documented API's.  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:16px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:16px;"&gt;(The sv array provides a pleasant level of indirection as it allows us to access the scrollview without directly pulling it from the webview.) If you are looking to prevent scrolling, control scroll offset or effect any other scrolling behavior you will be able to do it with this &lt;span class="Apple-style-span"  style=" ;font-size:small;"&gt;&lt;i&gt;webScroller &lt;/i&gt;&lt;/span&gt; object. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:16px;"&gt;Next if you want to remove those shadows from the top and bottom of the webview, you can simply hide them.  They are inserted in the &lt;i&gt;webScroller (the &lt;/i&gt;webview's scrollview).  Use the following lines to hide the shadows.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt; NSArray *wsv = [NSArray arrayWithArray:[webScroller subviews]];&lt;br /&gt;&lt;br /&gt; [[wsv objectAtIndex:6] setHidden:YES];&lt;br /&gt; [[wsv objectAtIndex:7] setHidden:YES];&lt;br /&gt; [[wsv objectAtIndex:8] setHidden:YES];&lt;br /&gt; [[wsv objectAtIndex:9] setHidden:YES];&lt;/span&gt;         &lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;There you have it! &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Remember, as sdk version change there may be some issues with this code, so watch your apps to make sure they continue to function properly when new OS version are released. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&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/506409777947312150-4897709490113925977?l=blog.andrewpaulsimmons.com%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/4897709490113925977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.andrewpaulsimmons.com/2010/02/controlling-uiscrollview-in-uiwebview.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/4897709490113925977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/4897709490113925977'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2010/02/controlling-uiscrollview-in-uiwebview.html' title='Controlling the UIScrollView in a UIWebview: Removing the Bounce, Shadows, and More'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/01617931119449964839</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06896423076613279281'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-2430405602863198301</id><published>2010-02-22T16:28:00.000-08:00</published><updated>2010-02-22T16:57:32.340-08:00</updated><title type='text'>UIWebView sizeToFit broken?</title><content type='html'>&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;UIWebView sizeToFit does not work unless the webView starts with a non zero frame.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;In the following code the webView will not be sized to fit.  To correct the issue choose a non-zero size for the webview frame.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;myWebView = [[UIWebView alloc] initWithFrame:CGRectZero] // wrong&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[myWebView loadHTMLString:@"...lots of html here resulting in a very large webview..." baseURL:nil];&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;- (void)webViewDidFinishLoad:(UIWebView *)webView {&lt;/span&gt;&lt;/div&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;// if webview frame is zero size to fit   will not work.   &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[webView sizeToFit]; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;     NSLog(@"webView height: %f", webView.frame.size.height);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;To correct the issue change: &lt;span class="Apple-style-span" style="font-size: small;"&gt;myWebView = [[UIWebView alloc] initWithFrame:CGRectZero] // wrong&lt;/span&gt;  to &lt;span class="Apple-style-span" style="font-size: small;"&gt;myWebView = [[UIWebView alloc] initWithFrame:CGRectMake(0,0,320,100)] // right&lt;/span&gt;&lt;/div&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/506409777947312150-2430405602863198301?l=blog.andrewpaulsimmons.com%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/2430405602863198301/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.andrewpaulsimmons.com/2010/02/uiwebview-sizetofit-broken.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/2430405602863198301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/2430405602863198301'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2010/02/uiwebview-sizetofit-broken.html' title='UIWebView sizeToFit broken?'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/01617931119449964839</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06896423076613279281'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-5636208784697146411</id><published>2010-02-21T23:14:00.000-08:00</published><updated>2010-02-21T23:23:56.182-08:00</updated><title type='text'>How to specify a port for scp file transfers</title><content type='html'>I found the scp syntax to be a bit non conventional here, so I am making a quick note to serve as reminder to anyone who finds this syntax less than intuitive.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;To scp over a specified port use scp -P [port] ./myfile myuser@example.com:/mydir/&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Whether you want to use scp to copy up to the remote host or down from the remote host, the port goes at the beginning of the command.  Also, a capital -P is required.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/506409777947312150-5636208784697146411?l=blog.andrewpaulsimmons.com%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/5636208784697146411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.andrewpaulsimmons.com/2010/02/how-to-specify-port-for-scp-file.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/5636208784697146411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/5636208784697146411'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2010/02/how-to-specify-port-for-scp-file.html' title='How to specify a port for scp file transfers'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/01617931119449964839</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06896423076613279281'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-3835383675424135176</id><published>2010-02-20T00:33:00.000-08:00</published><updated>2010-02-20T00:39:47.682-08:00</updated><title type='text'>With Only 140 Characters Per Post Twitter is Just Not Enough!</title><content type='html'>Sometimes, after 140 characters, I am just getting started, so after a year and a half without a single post to this blog, I am at it again.  I don't expect to generate many lengthy entries, but am looking forward to blogging without limits.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/506409777947312150-3835383675424135176?l=blog.andrewpaulsimmons.com%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/3835383675424135176/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.andrewpaulsimmons.com/2010/02/140-characters-is-not-enough.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/3835383675424135176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/3835383675424135176'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2010/02/140-characters-is-not-enough.html' title='With Only 140 Characters Per Post Twitter is Just Not Enough!'/><author><name>Andrew Paul Simmons</name><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-5557219341014698539</id><published>2010-02-19T23:59:00.000-08:00</published><updated>2010-02-20T00:18:18.690-08:00</updated><title type='text'>YouTube offers HTML5 beta site and it works on the iPad Simulator, is Hulu Next?</title><content type='html'>YouTube is now offering an HTML 5 beta to all users http://www.youtube.com/html5.&lt;br /&gt;The videos play very well on the iPad Simulator and I would expect even better performance on the h.264 optimized device hardware.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.andrewpaulsimmons.com/uploaded_images/Screen-shot-2010-02-20-at-12.05.31-AM-771549.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 371px; height: 286px;" src="http://blog.andrewpaulsimmons.com/uploaded_images/Screen-shot-2010-02-20-at-12.05.31-AM-771533.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Will hulu also offer an HTML alternative or will they leverage the lack of Flash on iPad forcing users to pay for their service?  &lt;span class="status-body"&gt;&lt;span class="entry-content"&gt;&lt;a href="http://bit.ly/aMGdQP" class="tweet-url web" rel="nofollow" target="_blank"&gt;http://bit.ly/aMGdQP&lt;/a&gt; &lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/506409777947312150-5557219341014698539?l=blog.andrewpaulsimmons.com%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/5557219341014698539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.andrewpaulsimmons.com/2010/02/youtube-offers-html5-beta-works-on-ipad.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/5557219341014698539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/5557219341014698539'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2010/02/youtube-offers-html5-beta-works-on-ipad.html' title='YouTube offers HTML5 beta site and it works on the iPad Simulator, is Hulu Next?'/><author><name>Andrew Paul Simmons</name><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-1525119464602427390</id><published>2008-10-28T22:22:00.000-07:00</published><updated>2008-10-29T22:38:09.498-07:00</updated><title type='text'>Writing Requirements from a UX Perspective</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Here is Alan Cooper's five step cycle for requirements refinement and solidification.  With some products one iteration may be enough often refinements will need to be made several times to maintain a comprehensive focus.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Create problem and vision statements&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Brainstorm&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Identifying persona expectations&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Constructing context scenarios &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Identifying requirements&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=";font-family:arial;font-size:13;"  &gt;&lt;span class="Apple-style-span" style="font-weight: bold;font-size:100%;" &gt;One: Creating &lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:arial;" class="Apple-style-span" &gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Problem and Vision Statements&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style=";font-family:arial;font-size:13;"  &gt;&lt;span class="Apple-style-span" style="font-weight: bold;font-size:100%;" &gt; (an argument of purpose) &lt;/span&gt;&lt;span style="font-size:85%;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=";font-family:arial;font-size:85%;"  &gt;&lt;span style="font-size:100%;"&gt;In every product there must be a central thesis or argument of purpose behind which all stake holders unite. This statement will then be used to assign value to each proposed feature during the following brainstorming sessions.   It also provides a cohesive focus for the product.  It is vital that the feature set be as concise and focused as possible.  This statement will help reduce features which may be appealing to specific stake holders, but do not facility the user in efficiently realizing his primary goals.   &lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-size:100%;"&gt;Finally, it is vital that usability issues, which are always critical to the success of the application, be illustrated in terms of business goals!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;Two: Brainstorming&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size:130%;"&gt;During brainstorming it is important to focus on how users will use the product.  Spend more time talking about use cases and little on features and layout.   Let go of preconceived ideas about how the product will look and allow new UI concepts to form around the specific needs of the user.  Do not lock down UI here.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:180%;"&gt;Three: Identifying User Expectations&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family: arial;font-size:130%;" &gt;Understand the features the users will expect to find in the product.  Focus on making expected functionality as apparent as possible.  Also, realize that different users will expect to accomplish the same task in different ways. Attempt to outline areas where the application needs to be permissive.    (An application is said to be permissive when a user has many ways and orders in which he can accomplish the same task.) This is usually expensive so identifying key areas here will save time.  Remember as these are issues of usability it is vital to tie them directly to business objectives.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;span style="font-size:180%;"&gt;Four: Constructing Context Scenarios&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;Context Scenarios focus on how the users will interactive with the product in their typical usage environments.   Here we focus on how the user lives with the product throughout his day.   From our context scenarios we will form requirements designed around how the user will accomplish his goals while driving, multitasking in a busy office, or in whatever  environment he typically finds himself.   It is important to focus on overall user-objectives first and then iteratively fill  in the details.  Context Scenarios should not describe specific UI design, but will be used as a source for discovering the priority of user's needs.  Context Scenarios allow us to create novel solution. It is important to never mention specific UI interactions at this stage! &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style=";font-family:arial;font-size:85%;"  &gt;&lt;span class="Apple-style-span"&gt;&lt;span&gt;An example Context Scenario can be found in &lt;/span&gt;&lt;span style="font-style: italic;"&gt;The Essentials of Interaction Design 3&lt;/span&gt;  on pg 120.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:arial;font-size:85%;"  &gt;Five: Identifying Requirements&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;Accept that Requirements are not to be comprised of features and tasks. It is recommended to think of requirements as consisting of the following three primary components:&lt;br /&gt;&lt;/span&gt;&lt;ol  style="font-family:arial;"&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Objects: The information that the user will need in order to accomplish his goals, these would be messages, comments, images, blog entries, as well as associated information publish date, file size etc.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Actions: The operations the user will need to perform on the objects.  Later UI controls will be created to conduct these operations.  Hence, actions will also help determine where information should appear in the UI.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Contexts:  Development timelines, business models, technical limitiations, customer based limitations.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;From here it should be possible to begin drawing UI diagrams and defining interactions.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style=";font-family:arial;font-size:85%;"  &gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span style="font-size:78%;"&gt;(For more information on this topic view the text: &lt;span style="font-style: italic;"&gt;The Essentials of Interaction Design 3&lt;/span&gt; pg 115.)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/506409777947312150-1525119464602427390?l=blog.andrewpaulsimmons.com%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/1525119464602427390/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/10/writing-requirements-from-ux.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/1525119464602427390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/1525119464602427390'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/10/writing-requirements-from-ux.html' title='Writing Requirements from a UX Perspective'/><author><name>Andrew Paul Simmons</name><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-4023651889529286595</id><published>2008-08-31T22:42:00.000-07:00</published><updated>2008-09-01T01:03:03.617-07:00</updated><title type='text'>What Robert Penner Never Told You About His 'Easing Equations'</title><content type='html'>In his epic work &lt;a href="http://www.robertpenner.com/profmx/"&gt;"Programming Macromedia Flash MX" &lt;/a&gt;Robert Penner introduced &lt;a href="http://www.robertpenner.com/easing/"&gt;his easing equations &lt;/a&gt;to the world.  Of course, the equations were standard curves used in interpolation throughout animation programming.  However, these curves had never before been available in Flash.  (Later, Macromedia would add them to the standard Flash libraries.)&lt;br /&gt;&lt;br /&gt;Interestingly, it turns out that these curves with the names NSAnimationEaseInOut, NSAnimationEaseIn, NSAnimationEaseOut  had existed on OS X/NeXTStep computers for nearly 15 years before Penner would bring them to Flash. Of course, the developers of Flash must have used NSAnimations before they brought the term 'easing' to the mainstream through the Flash UI.   (Outside of Flash/COCOA the term 'easing'  is never used in formal academic circles and is always refered to as interpolation.)&lt;br /&gt;&lt;br /&gt;It infact appears that many  ActionScript classes have Object-C/COCOA ancestors such as hitTest, NSURLRequest, NSURL, and many more.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/506409777947312150-4023651889529286595?l=blog.andrewpaulsimmons.com%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/4023651889529286595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/08/what-robert-penner-never-told-you-about.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/4023651889529286595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/4023651889529286595'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/08/what-robert-penner-never-told-you-about.html' title='What Robert Penner Never Told You About His &apos;Easing Equations&apos;'/><author><name>Andrew Paul Simmons</name><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-4622570301855020151</id><published>2008-08-27T19:41:00.000-07:00</published><updated>2008-08-27T19:48:49.945-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Objective-C'/><category scheme='http://www.blogger.com/atom/ns#' term='UIKit'/><category scheme='http://www.blogger.com/atom/ns#' term='Cocoa'/><title type='text'>Add, Set, and Delete Cookies in UIWebView with NSHTTPCookieStorage</title><content type='html'>NSHTTPCookieStorage allows you to update the cookies for every request made from your application.  UIWebViews will respond to this changes in cookies at run time and NSHTTPCookieStorage allows you to listen for changes in cookies as the are normaly set in the browser.&lt;br /&gt;&lt;br /&gt;To get the cookies for any url use:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;    NSHTTPCookieStorage* cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    NSArray* theCookies = [cookieStorage cookiesForURL:[NSURL URLWithString:@"http://example.com"]];&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This makes it possible to easily login or logout a user from a website presented in your UIWebView.&lt;br /&gt;&lt;br /&gt;Checkout NSHTTPCookieStorage* for all the details.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/506409777947312150-4622570301855020151?l=blog.andrewpaulsimmons.com%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/4622570301855020151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/08/add-set-and-delete-cookies-in-uiwebview.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/4622570301855020151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/4622570301855020151'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/08/add-set-and-delete-cookies-in-uiwebview.html' title='Add, Set, and Delete Cookies in UIWebView with NSHTTPCookieStorage'/><author><name>Andrew Paul Simmons</name><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-6075502550392192021</id><published>2008-08-25T16:08:00.000-07:00</published><updated>2008-08-27T10:04:59.586-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Objective-C'/><category scheme='http://www.blogger.com/atom/ns#' term='UIKit'/><category scheme='http://www.blogger.com/atom/ns#' term='Cocoa'/><title type='text'>AdMob Ads break in UIWebView</title><content type='html'>AdMob ads are broken in UIWebViews  (a UIWebView is an iPhone native browser control) for two reasons.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;AdMob requires a user agent and when you tell AdMob    you are on an iPhone AdMob will provide ads with direct links to the App Store.  This would be great, but Apple servers respond with "Internal Server Error" when AdMob ads link to the appstore through UIWebView.  The same links work great in iPhone Safari.&lt;/li&gt;&lt;li&gt;When a page containing a UIWebView loads with an AdMob ad, the page is instantly redirected to about:blank.  Canceling this redirect in&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt; shouldStartLoadWithRequest&lt;/span&gt;&lt;/span&gt; causes other links on the page to become unresponsive!&lt;/li&gt;&lt;li&gt;If you know how to get this working please comment.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update:&lt;/span&gt; after some badgering AdMob has responded &lt;a href="http://developer.admob.com/wiki/IPhone#UIWebView_integration_instructions"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/506409777947312150-6075502550392192021?l=blog.andrewpaulsimmons.com%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/6075502550392192021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/08/admob-ads-break-in-uiwebview.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/6075502550392192021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/6075502550392192021'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/08/admob-ads-break-in-uiwebview.html' title='AdMob Ads break in UIWebView'/><author><name>Andrew Paul Simmons</name><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-808342063942559378</id><published>2008-08-24T00:16:00.000-07:00</published><updated>2008-08-24T01:12:52.239-07:00</updated><title type='text'>Simple iPhone  image loader class uses NSThread and NSData dataWithContentsOfURL.</title><content type='html'>This class, APSSimpleWebImageView, extends the UIImageView  class with the method&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;- (void) loadStringURL:(NSString*)url.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;loadStringURL&lt;/span&gt; takes the URL of the image you wish to load and loads that image asynchronously.&lt;br /&gt;&lt;a href="http://blog.andrewpaulsimmons.com/examplecode/objc/APSSimpleWebImageView.zip"&gt;Download Example Code Here &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Create an APSSimpleWebImageView as you would a normal UIImageView and then&lt;br /&gt;invoke loadStringURL with the NSString url of the image you wish to load as follows:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;APSSimpleWebImageView* myImageView&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt; = [[APSSimpleWebImageView alloc] initWithFrame:CGRectMake(0,0,100,100)];&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;myImageView&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt; loadStringURL:@"http://example.com/image.jpg"];&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;(For the complete code listing download the example code.)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Following are a few points of interest from the sample code:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;(&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;onLoadSuccess&lt;/span&gt;&lt;/span&gt; and&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;onLoadFailure&lt;/span&gt;&lt;/span&gt; are optional call backs that can be used to receive notification that the image has appeared.)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;To load asyncrounsly we invoke &lt;span style=";font-family:courier new;font-size:85%;"  &gt;NSData dataWithContentsOfURL &lt;/span&gt; on a new thread, using &lt;span style=";font-family:courier new;font-size:85%;"  &gt;NSThread detachNewThreadSelector&lt;/span&gt;.&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;br /&gt;&lt;br /&gt;[NSThread detachNewThreadSelector:@selector(performAsyncLoadWithURL:)&lt;br /&gt;toTarget:self withObject:[NSURL URLWithString:urlString]]&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;We must create an autrelease pool in &lt;span style=";font-family:courier new;font-size:85%;"  &gt;performAsyncLoadWithURL: &lt;/span&gt;to prevent the new thread from leaking. (Each thread must have an autorelease pool.)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;performAsyncLoadWithURL:&lt;/span&gt; will then block its thread as it performs the image load&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;:&lt;br /&gt;NSData* imageData = [NSData dataWithContentsOfURL:url options:NSMappedRead error:&amp;amp;loadError];&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;Finally after the image has loaded, we will invoke our load complete call back on the main thread&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;[self performSelectorOnMainThread:@selector(loadDidFinishWithError:)&lt;br /&gt;withObject:loadError waitUntilDone:YES];&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Notice &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;waitUntilDone:YES &lt;/span&gt;&lt;/span&gt;causes our loading thread to block while the approprate loadDidFinish method is invoked on the main thread.  This prevents our imageData object from getting released by the autorelease pool that will be drained in the last line of performAsyncLoadWithURL.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;a href="http://blog.andrewpaulsimmons.com/examplecode/objc/APSSimpleWebImageView.zip"&gt;Download Example Code Here &lt;/a&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://blog.andrewpaulsimmons.com/examplecode/objc/APSSimpleWebImageView.zip"&gt;&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/506409777947312150-808342063942559378?l=blog.andrewpaulsimmons.com%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/808342063942559378/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/08/simple-iphone-image-loader-class-uses.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/808342063942559378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/808342063942559378'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/08/simple-iphone-image-loader-class-uses.html' title='Simple iPhone  image loader class uses NSThread and NSData dataWithContentsOfURL.'/><author><name>Andrew Paul Simmons</name><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-5669081773817655385</id><published>2008-08-23T21:09:00.000-07:00</published><updated>2008-08-23T21:21:47.296-07:00</updated><title type='text'>Asynchronous image loading on the iPhone NSURLConnection or NSThread and NSData dataWithContentsOfURL</title><content type='html'>&lt;span style="font-size:100%;"&gt;In order to &lt;/span&gt;&lt;span style="font-size:100%;"&gt;load images asyncornisly on the iPhone you must choose to use NSURLConnection or NSData dataWithContentsOfURL along with NSThread.  I have decided to use threads to do my asynchronous image loading in spite of the following and rather hilarious warning from the Apple &lt;a href="http://developer.apple.com/documentation/Cocoa/Conceptual/Multithreading/AboutThreads/chapter_2_section_5.html#//apple_ref/doc/uid/10000057i-CH6-SW8"&gt;&lt;span style="font-style: italic;"&gt;Threading Programming Guide&lt;/span&gt;&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;"If you do not fully understand the implications of your design choices, you might encounter synchronization or timing issues, &lt;span style="font-weight: bold;"&gt;the severity of which can range from subtle behavioral changes to your application imploding gloriously and destroying user data.&lt;/span&gt; (Granted, it takes a lot of effort for you to cause your application to implode gloriously, but the fact that it is possible should serve as a warning not to skimp on your planning efforts.)"&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;When I am done, I shall publish my asynchronous web image loader in hopes that it may be helpful.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/506409777947312150-5669081773817655385?l=blog.andrewpaulsimmons.com%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/5669081773817655385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/08/asynchronous-image-loading-on-iphone.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/5669081773817655385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/5669081773817655385'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/08/asynchronous-image-loading-on-iphone.html' title='Asynchronous image loading on the iPhone NSURLConnection or NSThread and NSData dataWithContentsOfURL'/><author><name>Andrew Paul Simmons</name><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-2317515348272561448</id><published>2008-08-23T18:13:00.000-07:00</published><updated>2008-08-23T19:46:10.042-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Objective-C'/><category scheme='http://www.blogger.com/atom/ns#' term='UIKit'/><category scheme='http://www.blogger.com/atom/ns#' term='Cocoa'/><title type='text'>Load web image  into iphone native applicaiton UIImage with no NSURLConnection code required</title><content type='html'>It turns out it is trivial to load images into iPhone native applications.&lt;br /&gt;This simple function will do all of the work. No UIWebView required no NSURLConnection required. Just dataWithContentsOfURL.&lt;br /&gt;&lt;br /&gt;-(UIImage*) newUIImageWithURLString:(NSString*)urlString&lt;br /&gt;{&lt;br /&gt;return [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:urlString]]];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Usage:&lt;br /&gt;&lt;br /&gt;UIImage* myUIImage = [self newUIImageWithURLString:@"http://example.com/images/myimage.jpg"];&lt;br /&gt;&lt;br /&gt;That's it!&lt;br /&gt;&lt;br /&gt;It is important to note that  +(NSData*) dataWithContentsOfURL:(NSURL*)url blocks.  This will not do an asynchronous load. :(  I am looking into another more involved solution that will load images on a separate thread.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/506409777947312150-2317515348272561448?l=blog.andrewpaulsimmons.com%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/2317515348272561448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/08/load-web-image-into-iphone-native.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/2317515348272561448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/2317515348272561448'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/08/load-web-image-into-iphone-native.html' title='Load web image  into iphone native applicaiton UIImage with no NSURLConnection code required'/><author><name>Andrew Paul Simmons</name><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-2609523060277259002</id><published>2008-08-23T15:41:00.000-07:00</published><updated>2008-08-23T15:45:25.296-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Objective-C'/><category scheme='http://www.blogger.com/atom/ns#' term='UIKit'/><category scheme='http://www.blogger.com/atom/ns#' term='Cocoa'/><title type='text'>@property and assign, retain, copy</title><content type='html'>From &lt;span style="font-style: italic;"&gt;The Objective-C 2.0 Programming Language&lt;/span&gt; here is how assign retain and copy will be effectively implemented  by @synthesize and how they should be functionally implemented by you if not synthesized.&lt;br /&gt;&lt;br /&gt;property = newValue;&lt;br /&gt;// retain&lt;br /&gt;if (property != newValue)&lt;br /&gt;{&lt;br /&gt;[property release];&lt;br /&gt;property = [newValue retain];&lt;br /&gt;}&lt;br /&gt;// copy&lt;br /&gt;if (property != newValue)&lt;br /&gt;{&lt;br /&gt;[property release];&lt;br /&gt;property = [newValue copy];&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/506409777947312150-2609523060277259002?l=blog.andrewpaulsimmons.com%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/2609523060277259002/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/08/property-and-assign-retain-copy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/2609523060277259002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/2609523060277259002'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/08/property-and-assign-retain-copy.html' title='@property and assign, retain, copy'/><author><name>Andrew Paul Simmons</name><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-1638886005821512507</id><published>2008-07-25T21:05:00.000-07:00</published><updated>2008-07-27T13:51:42.245-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone Cocoa UIKit Objective-C'/><title type='text'>warning: initialization from distinct Objective-c type (iPhone Development)</title><content type='html'>This warning is raised by Xcode whenever an implicit or INCORRECT type cast is occurring.&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;(The AS3 equivilant is the error: &lt;/span&gt;&lt;strong style="font-style: italic; font-weight: normal;"&gt;Error # 1067: Implicit coercion of a value of type * to an unrelated type *.&lt;/strong&gt;&lt;span style="font-style: italic;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;"Distinct Objective-C type" is the type &lt;span style="font-style: italic;"&gt;id&lt;/span&gt;.  Apple docs say, "In Objective-C, object identifiers are a distinct data type: &lt;span style="font-style: italic;"&gt;id&lt;/span&gt;. This type is defined as a pointer to an object..."&lt;br /&gt;&lt;br /&gt;Example Causes:&lt;br /&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;NSMutableArray* myArraySorted = [myArray sortedArrayUsingSelector:@selector(compare:)];&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;The above will raise "warning: initialization from distinct Objective-c type" because &lt;span style="font-style: italic;"&gt;sortedArrayUsingSelector&lt;/span&gt; returns an object of type &lt;span style="font-style: italic;"&gt;id&lt;/span&gt;.  We can correct this by simply casting the return value to the type NSMutableArray* as follows.&lt;br /&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;br /&gt;NSMutableArray* myArraySorted = (&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;NSMutableArray*)&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;[myArray sortedArrayUsingSelector:@selector(compare:)];&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Finally notice that the incorrect cast that follows will also raise this warning:&lt;br /&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;NSMutableArray* myArraySorted = (NSString&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;*)&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;[myArray sortedArrayUsingSelector:@selector(compare:)];&lt;/span&gt;&lt;br /&gt;Hence, whenever you see: "warning: initialization from distinct Objective-c type" you are performing an implicit cast.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/506409777947312150-1638886005821512507?l=blog.andrewpaulsimmons.com%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/1638886005821512507/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/07/warning-initialization-from-distinct.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/1638886005821512507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/1638886005821512507'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/07/warning-initialization-from-distinct.html' title='warning: initialization from distinct Objective-c type (iPhone Development)'/><author><name>Andrew Paul Simmons</name><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-8985221046126469086</id><published>2008-07-22T23:51:00.000-07:00</published><updated>2008-07-23T00:36:28.743-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><title type='text'>MD5 hash on iPhone with cocoa and Objective-C</title><content type='html'>In beta 7 OpenSSL has been removed from the iPhone SDK.  However, MD5 is still available.&lt;br /&gt;&lt;br /&gt;Simply import CommonCrypto as follows:&lt;br /&gt;&lt;span style="font-size:78%;"&gt;#import  &amp;lt; CommonCrypto/CommonDigest.h  &amp;gt;&lt;br /&gt;&lt;br /&gt;Then add this C function to your objective-c class between the @implementation and @end statements (if you like).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;NSString* md5( NSString *str )&lt;br /&gt;{&lt;br /&gt;const char *cStr = [str UTF8String];&lt;br /&gt;unsigned char result[CC_MD5_DIGEST_LENGTH];&lt;br /&gt;CC_MD5( cStr, strlen(cStr), result );&lt;br /&gt;return [NSString  stringWithFormat:&lt;br /&gt;@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",&lt;br /&gt;      result[0], result[1], result[2], result[3], result[4], result[5],  result[6], result[7],&lt;br /&gt;      result[8], result[9], result[10], result[11], result[12], result[13],  result[14], result[15]&lt;br /&gt;      ];&lt;br /&gt;}&lt;/span&gt;                                                                                                                    &lt;br /&gt;&lt;br /&gt;I am sure you can just use NSData for this but this is the way an example was posted on apple forums.  Please feel free to add an NSData based solution.&lt;br /&gt;&lt;br /&gt;Read the post here "http://discussions.apple.com/thread.jspa?threadID=1509152&amp;amp;tstart=96"&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/506409777947312150-8985221046126469086?l=blog.andrewpaulsimmons.com%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/8985221046126469086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/07/md5-hash-on-iphone.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/8985221046126469086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/8985221046126469086'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/07/md5-hash-on-iphone.html' title='MD5 hash on iPhone with cocoa and Objective-C'/><author><name>Andrew Paul Simmons</name><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-2043824849711617819</id><published>2008-05-25T22:04:00.000-07:00</published><updated>2008-07-25T22:06:41.043-07:00</updated><title type='text'>Maximum AS3 (FileReference) file upload size 100MB or more?</title><content type='html'>  From the adobe docs we can can not be sure that flash supports file uploads larger than 100MB.  In my testing I have found no limit.  I would be very interested in hearing about the client os/flash version, and server used by anyone who has found a file so large that it would not upload.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here is what  Adobe docs say:&lt;br /&gt;"Although Flash Player has no restriction on the size of files you can upload or download, the player officially supports uploads or downloads of up to 100 MB.  You must call the FileReference.browse() or FileReferenceList.browse()  method before you call this method. "&lt;br /&gt;&lt;br /&gt;However, in another area on the same page adobe points out the following:&lt;br /&gt;&lt;br /&gt;"Note: In the initial version of ActionScript 3.0, the [file] size property was defined as a uint object, which supported files with sizes up to about 4 GB. It is now implimented as a Number object to support larger files. "&lt;br /&gt;&lt;br /&gt;So it appears that Adobe also believes uploads larger than 4GB are possible but will not stand behind it.&lt;br /&gt;&lt;br /&gt;Both quotes are from this page: http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/net/FileReference.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/506409777947312150-2043824849711617819?l=blog.andrewpaulsimmons.com%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/2043824849711617819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/07/maximum-as3-filereference-file-upload.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/2043824849711617819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/2043824849711617819'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/07/maximum-as3-filereference-file-upload.html' title='Maximum AS3 (FileReference) file upload size 100MB or more?'/><author><name>Andrew Paul Simmons</name><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-7766761359618877880</id><published>2008-04-13T18:15:00.000-07:00</published><updated>2008-04-13T18:26:27.643-07:00</updated><title type='text'>Killing Flash CS3 / AIR Processes and avoiding the "debugger launch failed" message</title><content type='html'>To kill an AIR application launched for testing from Flash CS3 open the task manager and kill the process  idl.exe.&lt;br /&gt;&lt;br /&gt;When working within the Flash CS3 development environment, lightweight or utility windows spawned from an AIR application are not killed when the primary AIR application window is exited. In fact, they are not even killed when Flash CS3 is closed.  &lt;br /&gt;&lt;br /&gt;Further, as long as these lightweight/utility windows are open you will not be able to to test your application. There simply will be no result from pressing ctrl+enter.   Launching the debugger will only offer the message, "debugger launch failed!"  If any part of the AIR application is still running you simply will not be able to test your application.  Hence, you must go to the task manager and kill idl.exe!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/506409777947312150-7766761359618877880?l=blog.andrewpaulsimmons.com%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/7766761359618877880/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/04/killing-flash-cs3-air-processes-and.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/7766761359618877880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/7766761359618877880'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/04/killing-flash-cs3-air-processes-and.html' title='Killing Flash CS3 / AIR Processes and avoiding the &quot;debugger launch failed&quot; message'/><author><name>Andrew Paul Simmons</name><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry></feed>