<?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-5271952289926261386</id><updated>2009-12-02T11:54:30.674-08:00</updated><title type='text'>Millicomputing - Open Hardware by the milliWatt</title><subtitle type='html'>CPUs that consume less than one Watt are millicomputers. This site is dedicated to defining and building applications and open hardware designs for general purpose millicomputer systems, for personal and enterprise applications.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://millicomputing.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default'/><link rel='alternate' type='text/html' href='http://millicomputing.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default?start-index=26&amp;max-results=25'/><author><name>Adrian Cockcroft</name><uri>http://www.blogger.com/profile/14695336135416848505</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>80</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5271952289926261386.post-4547953671477563491</id><published>2009-11-24T10:24:00.000-08:00</published><updated>2009-11-24T10:27:07.663-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='skype'/><category scheme='http://www.blogger.com/atom/ns#' term='phone'/><title type='text'>Mobile Skype Video Calls via Fring on Nokia</title><content type='html'>It was just a matter of time, now it will spread to other platforms...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.engadget.com/2009/11/24/fring-adds-skype-video-support-on-s60-threatens-to-make-front-c/&lt;br /&gt;"&gt;http://www.engadget.com/2009/11/24/fring-adds-skype-video-support-on-s60-threatens-to-make-front-c/&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/5271952289926261386-4547953671477563491?l=millicomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://millicomputing.blogspot.com/feeds/4547953671477563491/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5271952289926261386&amp;postID=4547953671477563491' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/4547953671477563491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/4547953671477563491'/><link rel='alternate' type='text/html' href='http://millicomputing.blogspot.com/2009/11/mobile-skype-video-calls-via-fring-on.html' title='Mobile Skype Video Calls via Fring on Nokia'/><author><name>Adrian Cockcroft</name><uri>http://www.blogger.com/profile/14695336135416848505</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='10582762967662651464'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5271952289926261386.post-6606745920724060404</id><published>2009-09-07T01:46:00.000-07:00</published><updated>2009-09-07T01:50:42.948-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='atom'/><category scheme='http://www.blogger.com/atom/ns#' term='arm'/><category scheme='http://www.blogger.com/atom/ns#' term='james_hamilton'/><category scheme='http://www.blogger.com/atom/ns#' term='millicomputer'/><title type='text'>ARM CPUs for power efficient Web Servers - James agrees...</title><content type='html'>&lt;a href="http://perspectives.mvdirona.com/2009/09/07/LinuxApacheOnARMProcessors.aspx"&gt;James Hamilton highlights the power efficiency of ARM for general purpose web servers.&lt;/a&gt; It's almost two years since I gave the first talk on &lt;a href="http://www.slideshare.net/adrianco/millicomputing-usenix-2008"&gt;Millicomputing&lt;/a&gt; at the &lt;a href="http://hpts.ws"&gt;HPTS Workshop&lt;/a&gt; (which is where I met James for the first time) so its great to see him talking up the principles. He also makes the important point that ARM uses error correcting (ECC) memory, while the Intel Atom doesn't, and thus the Atom is actually less suitable for configuring large numbers in low power enterprise server applications.&lt;br /&gt;&lt;br /&gt;The systems at &lt;a href="http://perspectives.mvdirona.com/2009/09/07/LinuxApacheOnARMProcessors.aspx"&gt;http://www.linux-arm.org/Main/LinuxArmOrg&lt;/a&gt; are relatively inefficient blades, they have archaic spinning rust storage attached which must dominate the power consumption. A flash based storage subsystem would make much more sense to me. Web content delivery workloads are very well suited to low cost read-mostly flash storage. They do have a 1.2GHz ARM CPU and 1.5GB of RAM per blade, which is the biggest and fastest ARM configuration I've seen so far.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5271952289926261386-6606745920724060404?l=millicomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://perspectives.mvdirona.com/2009/09/07/LinuxApacheOnARMProcessors.aspx' title='ARM CPUs for power efficient Web Servers - James agrees...'/><link rel='replies' type='application/atom+xml' href='http://millicomputing.blogspot.com/feeds/6606745920724060404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5271952289926261386&amp;postID=6606745920724060404' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/6606745920724060404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/6606745920724060404'/><link rel='alternate' type='text/html' href='http://millicomputing.blogspot.com/2009/09/arm-cpus-for-power-efficient-web.html' title='ARM CPUs for power efficient Web Servers - James agrees...'/><author><name>Adrian Cockcroft</name><uri>http://www.blogger.com/profile/14695336135416848505</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='10582762967662651464'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5271952289926261386.post-3321049653096313035</id><published>2009-09-03T22:54:00.000-07:00</published><updated>2009-09-03T22:56:29.017-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='UWB'/><title type='text'>Wireless HD Video at 60GHz</title><content type='html'>&lt;a href="http://gigaom.com/2009/09/03/europes-approval-of-60-ghz-makes-wireless-hd-video-global/"&gt;GiGaOM has an update on wireless HD video&lt;/a&gt; It seems that the UWB standard stalled, but alternatives are on the way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5271952289926261386-3321049653096313035?l=millicomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://millicomputing.blogspot.com/feeds/3321049653096313035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5271952289926261386&amp;postID=3321049653096313035' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/3321049653096313035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/3321049653096313035'/><link rel='alternate' type='text/html' href='http://millicomputing.blogspot.com/2009/09/wireless-hd-video-at-60ghz.html' title='Wireless HD Video at 60GHz'/><author><name>Adrian Cockcroft</name><uri>http://www.blogger.com/profile/14695336135416848505</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='10582762967662651464'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5271952289926261386.post-3955000332235165307</id><published>2009-08-19T10:00:00.000-07:00</published><updated>2009-08-19T10:01:58.378-07:00</updated><title type='text'>Windows Mobile fades to irrelevance...</title><content type='html'>&lt;a href="http://gigaom.com/2009/08/19/microsoft-mobile-strategy-fail/"&gt;see this comment on GigaOM&lt;/a&gt; like I said almost two years ago....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5271952289926261386-3955000332235165307?l=millicomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://millicomputing.blogspot.com/feeds/3955000332235165307/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5271952289926261386&amp;postID=3955000332235165307' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/3955000332235165307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/3955000332235165307'/><link rel='alternate' type='text/html' href='http://millicomputing.blogspot.com/2009/08/windows-mobile-fades-to-irrelevance.html' title='Windows Mobile fades to irrelevance...'/><author><name>Adrian Cockcroft</name><uri>http://www.blogger.com/profile/14695336135416848505</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='10582762967662651464'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5271952289926261386.post-3552846408951725714</id><published>2009-08-06T07:19:00.000-07:00</published><updated>2009-08-06T07:21:07.893-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='telepathy'/><category scheme='http://www.blogger.com/atom/ns#' term='millicomputing'/><title type='text'>Augmented reality for the iPhone</title><content type='html'>&lt;a href="http://www.tuaw.com/2009/08/06/metaio-brings-more-augmented-reality-promises-to-the-iphone/"&gt;from Metaio&lt;/a&gt; just a demo, but heading in an interesting direction...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5271952289926261386-3552846408951725714?l=millicomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://millicomputing.blogspot.com/feeds/3552846408951725714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5271952289926261386&amp;postID=3552846408951725714' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/3552846408951725714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/3552846408951725714'/><link rel='alternate' type='text/html' href='http://millicomputing.blogspot.com/2009/08/augmented-reality-for-iphone.html' title='Augmented reality for the iPhone'/><author><name>Adrian Cockcroft</name><uri>http://www.blogger.com/profile/14695336135416848505</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='10582762967662651464'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5271952289926261386.post-1883230362090597075</id><published>2009-06-23T20:21:00.000-07:00</published><updated>2009-06-23T20:23:41.323-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='arm'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><title type='text'>TI Sees multi-core phones in 2011</title><content type='html'>Like I said at Ignite #velocityconf yesterday - see ARM Cortex A9 - which is 4x the iPhone 3GS &lt;a href="http://gigaom.com/2009/06/23/ti-sees-multicore-phones-coming-in-2011/"&gt;http://gigaom.com/2009/06/23/ti-sees-multicore-phones-coming-in-2011/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5271952289926261386-1883230362090597075?l=millicomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://millicomputing.blogspot.com/feeds/1883230362090597075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5271952289926261386&amp;postID=1883230362090597075' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/1883230362090597075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/1883230362090597075'/><link rel='alternate' type='text/html' href='http://millicomputing.blogspot.com/2009/06/ti-sees-multi-core-phones-in-2011.html' title='TI Sees multi-core phones in 2011'/><author><name>Adrian Cockcroft</name><uri>http://www.blogger.com/profile/14695336135416848505</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='10582762967662651464'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5271952289926261386.post-3196140671762324378</id><published>2009-06-19T16:16:00.000-07:00</published><updated>2009-06-19T16:38:02.960-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><title type='text'>iPhone 3GS Graphics</title><content type='html'>The new hardware is a huge leap forward, the 3GS is in Xbox territory according to Noel - details: http://www.mobileorchard.com/a-huge-leap-forward-graphics-on-the-iphone-3gs/ and RoughlyDrafted http://www.roughlydrafted.com/2009/06/10/a-closer-look-at-iphone-3g-s-cortex-a8-arm-and-powervr-chips/&lt;br /&gt;My order is in :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5271952289926261386-3196140671762324378?l=millicomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://millicomputing.blogspot.com/feeds/3196140671762324378/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5271952289926261386&amp;postID=3196140671762324378' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/3196140671762324378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/3196140671762324378'/><link rel='alternate' type='text/html' href='http://millicomputing.blogspot.com/2009/06/iphone-3gs-graphics.html' title='iPhone 3GS Graphics'/><author><name>Adrian Cockcroft</name><uri>http://www.blogger.com/profile/14695336135416848505</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='10582762967662651464'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5271952289926261386.post-8830369580070336220</id><published>2009-06-17T16:37:00.000-07:00</published><updated>2009-06-17T16:41:12.072-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ignite'/><category scheme='http://www.blogger.com/atom/ns#' term='velocity conference'/><title type='text'>Ignite talk at Velocity Conference</title><content type='html'>I'm at the Velocity Conference next week in San Jose, Mon-Wed. On Monday evening there is an Ignite session where we get 5 minutes to talk about something using 20 slides that auto-advance every 15sec. I've been accepted to do an update on Millicomputing, so I have to figure out how to get a slide deck together. I'm going to look back at what I predicted in 2007 and 2008, see how accurate I was, and look forward a couple of years for what low power devices we should expect to have in our pockets and our datacenters in 2010 and 2011.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5271952289926261386-8830369580070336220?l=millicomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://millicomputing.blogspot.com/feeds/8830369580070336220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5271952289926261386&amp;postID=8830369580070336220' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/8830369580070336220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/8830369580070336220'/><link rel='alternate' type='text/html' href='http://millicomputing.blogspot.com/2009/06/ignite-talk-at-velocity-conference.html' title='Ignite talk at Velocity Conference'/><author><name>Adrian Cockcroft</name><uri>http://www.blogger.com/profile/14695336135416848505</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='10582762967662651464'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5271952289926261386.post-8127180336994230429</id><published>2009-06-01T07:14:00.000-07:00</published><updated>2009-06-01T07:19:05.791-07:00</updated><title type='text'>Qualcomm Snapdragon - 1.3GHz Arm Cortex A8</title><content type='html'>The performance of ARM architecture chips continues to increase, &lt;a href="http://www.engadgetmobile.com/2009/06/01/qualcomms-1-3ghz-qsd8650a-snapdragon-chipset-is-30-stronger/"&gt;this announcement&lt;/a&gt; bumps the clock rate up to 1.3GHz and has a long list of integrated features.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;The new chipset supports multi-mode UMTS and CDMA 3G connectivity in the same 15 x 15-mm package as well as featuring enhanced 2D acceleration and 3D graphics core, integrated GPS, high-def video recording and playback, Bluetooth 2.1, WiFi, and support for WXGA (1280x800 pixels) displays pumping out your choice of MediaFLO, DVBH, or ISDB-T digital mobile television.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5271952289926261386-8127180336994230429?l=millicomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.engadgetmobile.com/2009/06/01/qualcomms-1-3ghz-qsd8650a-snapdragon-chipset-is-30-stronger/' title='Qualcomm Snapdragon - 1.3GHz Arm Cortex A8'/><link rel='replies' type='application/atom+xml' href='http://millicomputing.blogspot.com/feeds/8127180336994230429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5271952289926261386&amp;postID=8127180336994230429' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/8127180336994230429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/8127180336994230429'/><link rel='alternate' type='text/html' href='http://millicomputing.blogspot.com/2009/06/qualcomm-snapdragon-13ghz-arm-cortex-a8.html' title='Qualcomm Snapdragon - 1.3GHz Arm Cortex A8'/><author><name>Adrian Cockcroft</name><uri>http://www.blogger.com/profile/14695336135416848505</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='10582762967662651464'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5271952289926261386.post-7605940668631926718</id><published>2009-05-26T11:35:00.000-07:00</published><updated>2009-05-26T11:36:18.431-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LTE'/><category scheme='http://www.blogger.com/atom/ns#' term='HSPDA'/><category scheme='http://www.blogger.com/atom/ns#' term='3G'/><title type='text'>Wireless broadband speeds in practice</title><content type='html'>&lt;a href="http://gigaom.com/2009/05/26/everythings-relative-especially-wireless-broadband-speeds/"&gt;Useful table of standards and speeds via GigaOM&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5271952289926261386-7605940668631926718?l=millicomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://gigaom.com/2009/05/26/everythings-relative-especially-wireless-broadband-speeds/' title='Wireless broadband speeds in practice'/><link rel='replies' type='application/atom+xml' href='http://millicomputing.blogspot.com/feeds/7605940668631926718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5271952289926261386&amp;postID=7605940668631926718' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/7605940668631926718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/7605940668631926718'/><link rel='alternate' type='text/html' href='http://millicomputing.blogspot.com/2009/05/wireless-broadband-speeds-in-practice.html' title='Wireless broadband speeds in practice'/><author><name>Adrian Cockcroft</name><uri>http://www.blogger.com/profile/14695336135416848505</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='10582762967662651464'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5271952289926261386.post-1319625297202592160</id><published>2009-05-11T07:05:00.000-07:00</published><updated>2009-05-11T07:13:24.124-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='myvue'/><category scheme='http://www.blogger.com/atom/ns#' term='telepathy'/><title type='text'>Spacial audio</title><content type='html'>Another example of an idea I mentioned in my &lt;a href="http://www.engadgetmobile.com/2009/05/11/ntt-docomos-spatial-audio-tech-provides-superhuman-hearing/"&gt;Millicomputing talk turning up at NTT&lt;/a&gt;. This is something that could be programmed on an iPhone using OpenAL I think. It's really the idea of using stereo sound to carry conversations, which depends upon people using stereo headsets. I think there needs to be additional value in the headset such as video capture of what I'm looking at, and into-eye video display like the MyVue, then spacial audio is an add-on not the main feature.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5271952289926261386-1319625297202592160?l=millicomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.engadgetmobile.com/2009/05/11/ntt-docomos-spatial-audio-tech-provides-superhuman-hearing/' title='Spacial audio'/><link rel='replies' type='application/atom+xml' href='http://millicomputing.blogspot.com/feeds/1319625297202592160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5271952289926261386&amp;postID=1319625297202592160' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/1319625297202592160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/1319625297202592160'/><link rel='alternate' type='text/html' href='http://millicomputing.blogspot.com/2009/05/spacial-audio.html' title='Spacial audio'/><author><name>Adrian Cockcroft</name><uri>http://www.blogger.com/profile/14695336135416848505</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='10582762967662651464'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5271952289926261386.post-7747390382143114084</id><published>2009-05-06T06:51:00.000-07:00</published><updated>2009-05-06T06:54:09.400-07:00</updated><title type='text'>Renesas Low power HD Video processor</title><content type='html'>&lt;a href="http://www.engadgetmobile.com/2009/05/05/renesass-1080p-decoding-processor-coming-soon-to-a-cell-phone-n/"&gt;Sighted at engadget mobile&lt;/a&gt;, where they think it could turn up in mobile devices that do both input and output of HD video at 1080p, 30fps&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5271952289926261386-7747390382143114084?l=millicomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.engadgetmobile.com/2009/05/05/renesass-1080p-decoding-processor-coming-soon-to-a-cell-phone-n/' title='Renesas Low power HD Video processor'/><link rel='replies' type='application/atom+xml' href='http://millicomputing.blogspot.com/feeds/7747390382143114084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5271952289926261386&amp;postID=7747390382143114084' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/7747390382143114084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/7747390382143114084'/><link rel='alternate' type='text/html' href='http://millicomputing.blogspot.com/2009/05/renesas-low-power-hd-video-processor.html' title='Renesas Low power HD Video processor'/><author><name>Adrian Cockcroft</name><uri>http://www.blogger.com/profile/14695336135416848505</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='10582762967662651464'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5271952289926261386.post-7030409768346849147</id><published>2009-05-05T22:35:00.000-07:00</published><updated>2009-05-05T22:51:51.204-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ssd'/><title type='text'>Andy Bechtolsheim on the Solid State Storage Revolution</title><content type='html'>At the MySQL conference &lt;a href="http://www.youtube.com/watch?v=QPagpPQTaQY"&gt;Andy gives a talk that is up on YouTube&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;object width="560" height="340"&gt;&lt;param name="movie" value="http://www.youtube.com/v/QPagpPQTaQY&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/QPagpPQTaQY&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;He gives a good overview of the hardware changes, but doesn't talk about the software challenges, where many of the assumptions and algorithms that are built into all the common operating systems, filesystems and databases are simply wrong. There is a lot of work to be done here. My own work at Sun involved several attempts to point this problem out over the years, and if I had done a better job of getting traction for my ideas, there would be a lot more preparation and research in this area by now. The specific examples include trying to explain the benefits of embedding NVRAM products into servers during the 1990's, and doing extensive testing with solid state disks around 2002. The current size and cost benefits that we see were very predictable, and so are the problems. The SSD's at the time were very expensive, but they were perfectly capable of supporting research and development of new algorithms, and an opportunity was missed.&lt;br /&gt;&lt;br /&gt;The next thing that is coming is non-volatile RAM (all the RAM in the system), in case anyone is listening. There need to be fundamental changes in operating systems (user level memory protection models etc.) and we then have the ability to build truly diskless database servers, with safely persistent in-memory databases, in user space, no device drivers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5271952289926261386-7030409768346849147?l=millicomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.youtube.com/watch?v=QPagpPQTaQY' title='Andy Bechtolsheim on the Solid State Storage Revolution'/><link rel='replies' type='application/atom+xml' href='http://millicomputing.blogspot.com/feeds/7030409768346849147/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5271952289926261386&amp;postID=7030409768346849147' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/7030409768346849147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/7030409768346849147'/><link rel='alternate' type='text/html' href='http://millicomputing.blogspot.com/2009/05/andy-bechtolsheim-on-solid-state.html' title='Andy Bechtolsheim on the Solid State Storage Revolution'/><author><name>Adrian Cockcroft</name><uri>http://www.blogger.com/profile/14695336135416848505</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='10582762967662651464'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5271952289926261386.post-174959122396337526</id><published>2009-04-29T07:56:00.000-07:00</published><updated>2009-04-29T08:03:34.032-07:00</updated><title type='text'>Wireless Video standards war</title><content type='html'>A bunch of references from GigaOM - it looks as if UltraWideBand 480Mbit USB is in trouble, and the alternatives are a dedicated Wireless HD video standard and Wifi based video streaming. UWB has some nice characteristics, but perhaps the ubiquity of WiFi wins again.... (There have been many cases over the years of technologies losing to Ethernet and IP based networks in the end).&lt;br /&gt;&lt;br /&gt;http://gigaom.com/2008/10/31/ultra-wideband-near-death-as-wiquest-shuts-down/&lt;br /&gt;&lt;br /&gt;http://gigaom.com/2008/04/09/wireless-hd-is-the-new-front-in-a-standards-war/&lt;br /&gt;&lt;br /&gt;http://gigaom.com/2008/08/15/vcs-hope-to-see-wi-fi-everywhere/&lt;br /&gt;&lt;br /&gt;I just want to be able to stream video from my iPhone to my TV set without any wires, don't care what the technology is, and I'm thinking of getting a WiFi enabled TV with Netflix embedded in it around the end of this year.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5271952289926261386-174959122396337526?l=millicomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://millicomputing.blogspot.com/feeds/174959122396337526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5271952289926261386&amp;postID=174959122396337526' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/174959122396337526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/174959122396337526'/><link rel='alternate' type='text/html' href='http://millicomputing.blogspot.com/2009/04/wireless-video-standards-war.html' title='Wireless Video standards war'/><author><name>Adrian Cockcroft</name><uri>http://www.blogger.com/profile/14695336135416848505</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='10582762967662651464'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5271952289926261386.post-5347345534580546905</id><published>2009-04-20T22:54:00.000-07:00</published><updated>2009-04-20T22:58:29.338-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MIT'/><category scheme='http://www.blogger.com/atom/ns#' term='medialab'/><category scheme='http://www.blogger.com/atom/ns#' term='millicomputing'/><title type='text'>MIT Medialab's Sixth Sense</title><content type='html'>&lt;a href="http://www.cio.com/article/489089/MIT_Wearable_Gadget_Gives_You_Sixth_Sense_a_la_Minority_Report_"&gt;This is exactly the kind of user interface developmen&lt;/a&gt;t that &lt;a href="http://millicomputing.blogspot.com/2008/06/slides-usenix-08-invited-paper-on.html"&gt;I've been looking forward to as part of my Millicomputing meme&lt;/a&gt;. I hope it inspires some products soon...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5271952289926261386-5347345534580546905?l=millicomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://millicomputing.blogspot.com/feeds/5347345534580546905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5271952289926261386&amp;postID=5347345534580546905' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/5347345534580546905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/5347345534580546905'/><link rel='alternate' type='text/html' href='http://millicomputing.blogspot.com/2009/04/mit-medialabs-sixth-sense.html' title='MIT Medialab&apos;s Sixth Sense'/><author><name>Adrian Cockcroft</name><uri>http://www.blogger.com/profile/14695336135416848505</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='10582762967662651464'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5271952289926261386.post-2302040697141631439</id><published>2009-03-26T22:41:00.000-07:00</published><updated>2009-03-26T22:45:45.301-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><title type='text'>iPhone 3.0 hardware interface implications</title><content type='html'>&lt;a href="http://www.roughlydrafted.com/2009/03/20/the-big-30-how-iphone-will-shift-peripheral-devices/"&gt;An insightful posting by Daniel Eran on the iPhone 3.0 hardware interface controller, and its significance&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;All I would like to add is that I really hope wideband/wireless USB is a feature of the next iPhone hardware. 480Mbits/s without any wires, and with wireless video output, so your pocket can drive your projector sunglasses, TV, meeting room projector or computer screen without even leaving your pocket.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5271952289926261386-2302040697141631439?l=millicomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.roughlydrafted.com/2009/03/20/the-big-30-how-iphone-will-shift-peripheral-devices/' title='iPhone 3.0 hardware interface implications'/><link rel='replies' type='application/atom+xml' href='http://millicomputing.blogspot.com/feeds/2302040697141631439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5271952289926261386&amp;postID=2302040697141631439' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/2302040697141631439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/2302040697141631439'/><link rel='alternate' type='text/html' href='http://millicomputing.blogspot.com/2009/03/iphone-30-hardware-interface.html' title='iPhone 3.0 hardware interface implications'/><author><name>Adrian Cockcroft</name><uri>http://www.blogger.com/profile/14695336135416848505</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='10582762967662651464'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5271952289926261386.post-2991330824631679436</id><published>2009-03-02T21:20:00.000-08:00</published><updated>2009-03-02T21:22:08.619-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='atom'/><category scheme='http://www.blogger.com/atom/ns#' term='Intel'/><title type='text'>Intel licenses Atom to TSMC</title><content type='html'>&lt;a href="http://www.infoworld.com/article/09/03/02/Intel_opens_up_the_Atom_processor_to_TSMC_1.html"&gt;Intel licenses low power Atom CPU design to TSMC&lt;/a&gt;. This is another step along the road of bringing the Intel x64 architecture down into low power embedded devices to compete with ARM.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5271952289926261386-2991330824631679436?l=millicomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.infoworld.com/article/09/03/02/Intel_opens_up_the_Atom_processor_to_TSMC_1.html' title='Intel licenses Atom to TSMC'/><link rel='replies' type='application/atom+xml' href='http://millicomputing.blogspot.com/feeds/2991330824631679436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5271952289926261386&amp;postID=2991330824631679436' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/2991330824631679436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/2991330824631679436'/><link rel='alternate' type='text/html' href='http://millicomputing.blogspot.com/2009/03/intel-licenses-atom-to-tsmc.html' title='Intel licenses Atom to TSMC'/><author><name>Adrian Cockcroft</name><uri>http://www.blogger.com/profile/14695336135416848505</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='10582762967662651464'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5271952289926261386.post-4823785683300890008</id><published>2009-02-16T10:19:00.000-08:00</published><updated>2009-02-16T10:22:54.989-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OMAP'/><category scheme='http://www.blogger.com/atom/ns#' term='arm'/><category scheme='http://www.blogger.com/atom/ns#' term='cortex'/><title type='text'>TI OMAP4 is based on ARM Cortex A9</title><content type='html'>Nice summary on &lt;a href="http://gigaom.com/2009/02/16/texas-instruments-to-offer-a-champion-chipset-for-mobile/"&gt;GigaOM about the new chip just launched by TI&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This continues along the direction I outlined two years ago, high def video and graphics processing, very long battery life, high speed networking and lots of CPU capacity in a multicore chip, sampling soon, and in products in 2010.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5271952289926261386-4823785683300890008?l=millicomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://millicomputing.blogspot.com/feeds/4823785683300890008/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5271952289926261386&amp;postID=4823785683300890008' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/4823785683300890008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/4823785683300890008'/><link rel='alternate' type='text/html' href='http://millicomputing.blogspot.com/2009/02/ti-omap4-is-based-on-arm-cortex-a9.html' title='TI OMAP4 is based on ARM Cortex A9'/><author><name>Adrian Cockcroft</name><uri>http://www.blogger.com/profile/14695336135416848505</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='10582762967662651464'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5271952289926261386.post-3515191378572460502</id><published>2009-01-04T23:59:00.000-08:00</published><updated>2009-01-05T00:05:33.438-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><title type='text'>Extended iPhone cookbook XML parser</title><content type='html'>Erica Sadun published a tree based XML parser for the iPhone that works quite well. I needed to extend it to parse attributes and I &lt;a href="http://code.google.com/p/cookbooksamples/issues/detail?id=15"&gt;posted my code back to Erica's google code forum&lt;/a&gt;. This works quite efficiently, my app parses complex XML for 100 movies in less than a second as it picks out the instant format ones.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5271952289926261386-3515191378572460502?l=millicomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://millicomputing.blogspot.com/feeds/3515191378572460502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5271952289926261386&amp;postID=3515191378572460502' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/3515191378572460502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/3515191378572460502'/><link rel='alternate' type='text/html' href='http://millicomputing.blogspot.com/2009/01/extended-iphone-cookbook-xml-parser.html' title='Extended iPhone cookbook XML parser'/><author><name>Adrian Cockcroft</name><uri>http://www.blogger.com/profile/14695336135416848505</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='10582762967662651464'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5271952289926261386.post-5158284832489230257</id><published>2008-10-29T08:56:00.000-07:00</published><updated>2008-10-29T09:01:53.425-07:00</updated><title type='text'>Parsing API Results - XML vs. JSON</title><content type='html'>There is an option to get JSON format or XML format back from the API. I'm investigating ways to parse JSON to see if its easier than XML (simply add output=json to the URL call).&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My open source google code efforts are on hold for now since I have much more demand for new features in my app than people asking for source code. Let me know if you want code and I will assist on a case by case basis. Later on I will post cleaned up code to the google code project.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5271952289926261386-5158284832489230257?l=millicomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://millicomputing.blogspot.com/feeds/5158284832489230257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5271952289926261386&amp;postID=5158284832489230257' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/5158284832489230257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/5158284832489230257'/><link rel='alternate' type='text/html' href='http://millicomputing.blogspot.com/2008/10/parsing-api-results-xml-vs-json.html' title='Parsing API Results - XML vs. JSON'/><author><name>Adrian Cockcroft</name><uri>http://www.blogger.com/profile/14695336135416848505</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='10582762967662651464'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5271952289926261386.post-1708566374089962659</id><published>2008-10-10T22:52:00.000-07:00</published><updated>2008-10-10T23:07:26.764-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='InstantQAdd'/><category scheme='http://www.blogger.com/atom/ns#' term='API'/><category scheme='http://www.blogger.com/atom/ns#' term='Netflix'/><title type='text'>Netflix API - Parsing the results of an API call - Part 5</title><content type='html'>One of the first API calls I needed to call gets the user's name and other information. In my case all I need is the first and last names, and the flag that says whether the user can use instant watching. This flag is set true for main accounts, and false for account profiles that don't have an instant queue.&lt;br /&gt;&lt;br /&gt;The return data from the API call is in XML format, so this code shows how to use the XML parser to pick information out of the data returned from an API call. I provide a convenience method that combines the first and last names, and I didn't need the other link information, so it is ignored, but the code could easily be extended to pick it out as needed.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Some of the code below doesn't display properly. I'm going to set it up in google code soon to make it easier to manage.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div style="width: 390px; height: 300px; background-color: a0ffff; color: 000000; font-family: courier; font-size: 12px; border: 0px solid 000000; overflow: auto; padding: 4px;"&gt;&lt;pre&gt;&lt;br /&gt;//&lt;br /&gt;//  NetflixUser.h&lt;br /&gt;//  Instant Flix&lt;br /&gt;//&lt;br /&gt;//  Created by Adrian Cockcroft on 10/8/08.&lt;br /&gt;//  Copyright 2008 millicomputing.com&lt;br /&gt;// Licenced using Creative Commons Attribution Share-Alike&lt;br /&gt;//  http://creativecommons.org/licenses/by-sa/3.0/&lt;br /&gt;&lt;br /&gt;#import &lt;uikit/uikit.h&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@interface NetflixUser : NSObject {&lt;br /&gt;NSData  *rawData;&lt;br /&gt;NSString *first_name;&lt;br /&gt;NSString *last_name;&lt;br /&gt;bool  can_instant_watch;&lt;br /&gt;NSXMLParser *userParser;&lt;br /&gt;NSString *currentElement;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@property(readonly) bool can_instant_watch;&lt;br /&gt;&lt;br /&gt;- (NetflixUser *)initWithAPIResponse:(NSData *)response;&lt;br /&gt;- (NSString *)name;&lt;br /&gt;&lt;br /&gt;@end&lt;br /&gt;&lt;br /&gt;&lt;/uikit/uikit.h&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 390px; height: 300px; background-color: a0ffff; color: 000000; font-family: courier; font-size: 12px; border: 0px solid 000000; overflow: auto; padding: 4px;"&gt;&lt;pre&gt;&lt;br /&gt;//&lt;br /&gt;//  NetflixUser.m&lt;br /&gt;//  Instant Flix&lt;br /&gt;//&lt;br /&gt;//  Created by Adrian Cockcroft on 10/8/08.&lt;br /&gt;//  Copyright 2008 millicomputing.com&lt;br /&gt;// Licenced using Creative Commons Attribution Share-Alike&lt;br /&gt;//  http://creativecommons.org/licenses/by-sa/3.0/&lt;br /&gt;&lt;br /&gt;#import "NetflixUser.h"&lt;br /&gt;&lt;br /&gt;/* Sample returned raw data&lt;br /&gt;&lt;user&gt;&lt;br /&gt;&lt;user_id&gt;[userid]&lt;/user_id&gt;&lt;br /&gt;&lt;first_name&gt;Adrian&lt;/first_name&gt;&lt;br /&gt;&lt;last_name&gt;Cockcroft&lt;/last_name&gt;&lt;br /&gt;&lt;can_instant_watch&gt;true&lt;/can_instant_watch&gt;&lt;br /&gt;&lt;preferred_formats&gt;&lt;br /&gt;&lt;category scheme="http://api.netflix.com/categories/title_formats" label="DVD" term="DVD"&gt;&lt;/category&gt;&lt;br /&gt;&lt;category scheme="http://api.netflix.com/categories/title_formats" label="Blu-ray" term="Blu-ray"&gt;&lt;/category&gt;&lt;br /&gt;&lt;/preferred_formats&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;/user&gt;&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;@implementation NetflixUser&lt;br /&gt;&lt;br /&gt;@synthesize can_instant_watch;&lt;br /&gt;&lt;br /&gt;- (NetflixUser *)initWithAPIResponse:(NSData *)response {&lt;br /&gt;rawData = response;&lt;br /&gt;[rawData retain];&lt;br /&gt;first_name = nil;&lt;br /&gt;last_name = nil;&lt;br /&gt;can_instant_watch = NO;&lt;br /&gt;&lt;br /&gt;//NSString *responseBody = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];&lt;br /&gt;//NSLog(@"NetflixUser: %@", responseBody);&lt;br /&gt;&lt;br /&gt;userParser = [[NSXMLParser alloc] initWithData:rawData];&lt;br /&gt;&lt;br /&gt;  // Set self as the delegate of the parser so that it will receive the parser delegate methods callbacks.&lt;br /&gt;  [userParser setDelegate:self];&lt;br /&gt;  [userParser setShouldProcessNamespaces:NO];&lt;br /&gt;  [userParser setShouldReportNamespacePrefixes:NO];&lt;br /&gt;  [userParser setShouldResolveExternalEntities:NO];&lt;br /&gt;  [userParser parse];&lt;br /&gt;&lt;br /&gt;return self;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (NSString *)name {&lt;br /&gt;return [first_name stringByAppendingFormat:@" %@", last_name];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (void)parserDidStartDocument:(NSXMLParser *)parser{&lt;br /&gt;//NSLog(@"started parsing");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {&lt;br /&gt;NSString * errorString = [NSString stringWithFormat:@"Unable to parse XML (Error code %i)", [parseError code]];&lt;br /&gt;NSLog(@"error: %@", errorString);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{  &lt;br /&gt;  //NSLog(@"found this element: %@", elementName);&lt;br /&gt;currentElement = [elementName copy];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{   &lt;br /&gt;//NSLog(@"ended element: %@", elementName);&lt;br /&gt;currentElement = nil;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{&lt;br /&gt;//NSLog(@"found characters: %@", string);&lt;br /&gt;// save the characters for the current item...&lt;br /&gt;if ([currentElement isEqualToString:@"first_name"]) {&lt;br /&gt; first_name = [string copy];&lt;br /&gt;} else if ([currentElement isEqualToString:@"last_name"]) {&lt;br /&gt; last_name = [string copy];&lt;br /&gt;} else if ([currentElement isEqualToString:@"can_instant_watch"]) {&lt;br /&gt; if ([string isEqualToString:@"true"]) {&lt;br /&gt;  can_instant_watch = YES;&lt;br /&gt; } else {&lt;br /&gt;  can_instant_watch = NO;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (void)parserDidEndDocument:(NSXMLParser *)parser {&lt;br /&gt;//NSLog(@"found %@ who %@ instant watch", self.name, (can_instant_watch? @"can": @"cannot"));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@end&lt;br /&gt;&lt;/pre&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/5271952289926261386-1708566374089962659?l=millicomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://millicomputing.blogspot.com/feeds/1708566374089962659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5271952289926261386&amp;postID=1708566374089962659' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/1708566374089962659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/1708566374089962659'/><link rel='alternate' type='text/html' href='http://millicomputing.blogspot.com/2008/10/netflix-api-parsing-results-of-api-call.html' title='Netflix API - Parsing the results of an API call - Part 5'/><author><name>Adrian Cockcroft</name><uri>http://www.blogger.com/profile/14695336135416848505</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='10582762967662651464'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5271952289926261386.post-4060217711096227799</id><published>2008-10-01T00:09:00.000-07:00</published><updated>2008-10-03T23:42:50.706-07:00</updated><title type='text'>Netflix API - Netflix Specific OAuth iPhone Code - Part 4</title><content type='html'>I have already discussed how to get OAuth to build for an iPhone in Part 2. To use OAuth to call Netflix there are two small changes needed. The first one is that the way that characters are escaped in URLs needs to be tightened up a bit, otherwise the signature strings will work some of the time and fail when they happen to contain the wrong character sequence. This took a while to figure out...&lt;br /&gt;&lt;br /&gt;The file NSString+URLEncoding.m needs to have a few characters (space, plus and asterisk) added as shown below:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Note, I'm having a hard time getting code to look good here, its hard to find a way to render code in a narrow column that doesn't mess up the formatting and works in more than one browser using blogger.com tools and templates&lt;/span&gt;.&lt;br /&gt;&lt;div style="width: 390px; height: 300px; background-color: a0ffff; color: 000000; font-family: courier; font-size: 12px; border: 0px solid 000000; overflow: auto; padding: 4px;"&gt;&lt;pre&gt;&lt;br /&gt;- (NSString *)encodedURLString {&lt;br /&gt;NSString *result = (NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,&lt;br /&gt;                                             (CFStringRef)self,&lt;br /&gt;                                             NULL,&lt;br /&gt;                                             CFSTR("?=&amp;amp; +*"),     // legal URL characters to be escaped&lt;br /&gt;                                             kCFStringEncodingUTF8); // encoding&lt;br /&gt;return result;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (NSString *)encodedURLParameterString {&lt;br /&gt;   NSString *result = (NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,&lt;br /&gt;                                             (CFStringRef)self,&lt;br /&gt;                                             NULL,&lt;br /&gt;                                             CFSTR(":/= +*"),&lt;br /&gt;                                             kCFStringEncodingUTF8);&lt;br /&gt;return result;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The second thing is that when the authentication is complete, Netflix returns a token that contains an encoded user identifier, as well as a secret and a key. The standard OAuth code only expects the secret and key, so a new NetflixToken class was created to hold the extra information, and to persist it in the iPhone's defaults store along with the secret and key. This means that once the user has signed into OAuth once, this information is saved and they never have to sign in again unless either Netflix or the User revokes the token. One more method was added to remove an entry from the defaults store, for use during logout.&lt;br /&gt;&lt;br /&gt;First the NetflixToken.h header file:&lt;br /&gt;&lt;div style="width: 390px; height: 400px; background-color: a0ffff; color: 000000; font-family: courier; font-size: 12px; border: 0px solid 00000; overflow: auto; padding: 4px;"&gt;&lt;pre&gt;&lt;br /&gt;//&lt;br /&gt;//  NetflixToken.h&lt;br /&gt;//  Instant Test&lt;br /&gt;//&lt;br /&gt;//  Created by Adrian Cockcroft on 9/11/08.&lt;br /&gt;//&lt;br /&gt;&lt;br /&gt;#import &lt;Foundation/Foundation.h&gt;&lt;br /&gt;#import "OAToken.h"&lt;br /&gt;&lt;br /&gt;@interface NetflixToken : NSObject {&lt;br /&gt;@protected&lt;br /&gt; NSString *key;&lt;br /&gt; NSString *secret;&lt;br /&gt; NSString *user;&lt;br /&gt;}&lt;br /&gt;@property(copy, readwrite) NSString *key;&lt;br /&gt;@property(copy, readwrite) NSString *secret;&lt;br /&gt;@property(copy, readwrite) NSString *user;&lt;br /&gt;&lt;br /&gt;- (id)initWithKey:(NSString *)aKey secret:(NSString *)aSecret user:(NSString *)aUser;&lt;br /&gt;- (id)initWithUserDefaultsUsingServiceProviderName:(NSString *)provider prefix:(NSString *)prefix;&lt;br /&gt;- (id)initWithHTTPResponseBody:(NSString *)body;&lt;br /&gt;- (int)storeInUserDefaultsWithServiceProviderName:(NSString *)provider prefix:(NSString *)prefix;&lt;br /&gt;- (int)removeFromUserDefaultsWithServiceProviderName:(NSString *)provider prefix:(NSString *)prefix;&lt;br /&gt;- (OAToken *)oaToken;&lt;br /&gt;&lt;br /&gt;@end&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Then the code itself, this is all based on a simple extension of OAToken, which is part of the OAuth code base mentioned in part 2.&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 390px; height: 400px; background-color: a0ffff; color: 000000; font-family: courier; font-size: 12px; border: 0px solid 00000; overflow: auto; padding: 4px;"&gt;&lt;pre&gt;&lt;br /&gt;//&lt;br /&gt;//  NetflixToken.m&lt;br /&gt;//  Instant Test&lt;br /&gt;//&lt;br /&gt;//  Created by Adrian Cockcroft on 9/11/08.&lt;br /&gt;//&lt;br /&gt;&lt;br /&gt;#import "NetflixToken.h"&lt;br /&gt;&lt;br /&gt;@implementation NetflixToken&lt;br /&gt;&lt;br /&gt;@synthesize key, secret, user;&lt;br /&gt;&lt;br /&gt;#pragma mark init&lt;br /&gt;&lt;br /&gt;- (id)init {&lt;br /&gt;    [super init];&lt;br /&gt;    self.key = @"";&lt;br /&gt;    self.secret = @"";&lt;br /&gt; self.user = @"";&lt;br /&gt;    return self;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (id)initWithKey:(NSString *)aKey secret:(NSString *)aSecret user:(NSString *)aUser {&lt;br /&gt; [super init];&lt;br /&gt; self.key = aKey;&lt;br /&gt; self.secret = aSecret;&lt;br /&gt; self.user = aUser;&lt;br /&gt; return self;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (OAToken *)oaToken {&lt;br /&gt; return [[OAToken alloc] initWithKey:self.key secret:self.secret];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (id)initWithHTTPResponseBody:(NSString *)body {&lt;br /&gt;    [super init];&lt;br /&gt;    NSArray *pairs = [body componentsSeparatedByString:@"&amp;"];&lt;br /&gt;    &lt;br /&gt;    for (NSString *pair in pairs) {&lt;br /&gt;        NSArray *elements = [pair componentsSeparatedByString:@"="];&lt;br /&gt;        if ([[elements objectAtIndex:0] isEqualToString:@"oauth_token"]) {&lt;br /&gt;            self.key = [elements objectAtIndex:1];&lt;br /&gt;        } else if ([[elements objectAtIndex:0] isEqualToString:@"oauth_token_secret"]) {&lt;br /&gt;            self.secret = [elements objectAtIndex:1];&lt;br /&gt;        } else if ([[elements objectAtIndex:0] isEqualToString:@"user_id"]) {&lt;br /&gt;   self.user = [elements objectAtIndex:1];&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;    &lt;br /&gt;    return self;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;- (id)initWithUserDefaultsUsingServiceProviderName:(NSString *)provider prefix:(NSString *)prefix&lt;br /&gt;{&lt;br /&gt; [super init];&lt;br /&gt; NSString *theKey = [[NSUserDefaults standardUserDefaults] stringForKey:[NSString stringWithFormat:@"OAUTH_%@_%@_KEY", prefix, provider]];&lt;br /&gt; NSString *theSecret = [[NSUserDefaults standardUserDefaults] stringForKey:[NSString stringWithFormat:@"OAUTH_%@_%@_SECRET", prefix, provider]];&lt;br /&gt; NSString *theUser = [[NSUserDefaults standardUserDefaults] stringForKey:[NSString stringWithFormat:@"NETFLIX_%@_%@_USER", prefix, provider]];&lt;br /&gt; if (theKey == NULL || theSecret == NULL)&lt;br /&gt;  return(nil);&lt;br /&gt; self.key = theKey;&lt;br /&gt; self.secret = theSecret;&lt;br /&gt; self.user = theUser;&lt;br /&gt; return(self);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;- (int)storeInUserDefaultsWithServiceProviderName:(NSString *)provider prefix:(NSString *)prefix&lt;br /&gt;{&lt;br /&gt; [[NSUserDefaults standardUserDefaults] setObject:self.key forKey:[NSString stringWithFormat:@"OAUTH_%@_%@_KEY", prefix, provider]];&lt;br /&gt; [[NSUserDefaults standardUserDefaults] setObject:self.secret forKey:[NSString stringWithFormat:@"OAUTH_%@_%@_SECRET", prefix, provider]];&lt;br /&gt; [[NSUserDefaults standardUserDefaults] setObject:self.user forKey:[NSString stringWithFormat:@"NETFLIX_%@_%@_USER", prefix, provider]];&lt;br /&gt; [[NSUserDefaults standardUserDefaults] synchronize];&lt;br /&gt; return(0);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (int)removeFromUserDefaultsWithServiceProviderName:(NSString *)provider prefix:(NSString *)prefix&lt;br /&gt;{&lt;br /&gt; [[NSUserDefaults standardUserDefaults] removeObjectForKey:[NSString stringWithFormat:@"OAUTH_%@_%@_KEY", prefix, provider]];&lt;br /&gt; [[NSUserDefaults standardUserDefaults] removeObjectForKey:[NSString stringWithFormat:@"OAUTH_%@_%@_SECRET", prefix, provider]];&lt;br /&gt; [[NSUserDefaults standardUserDefaults] removeObjectForKey:[NSString stringWithFormat:@"NETFLIX_%@_%@_USER", prefix, provider]];&lt;br /&gt; [[NSUserDefaults standardUserDefaults] synchronize];&lt;br /&gt; return(0);&lt;br /&gt;}&lt;br /&gt;@end&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5271952289926261386-4060217711096227799?l=millicomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://millicomputing.blogspot.com/feeds/4060217711096227799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5271952289926261386&amp;postID=4060217711096227799' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/4060217711096227799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/4060217711096227799'/><link rel='alternate' type='text/html' href='http://millicomputing.blogspot.com/2008/10/netflix-api-netflix-specific-oauth.html' title='Netflix API - Netflix Specific OAuth iPhone Code - Part 4'/><author><name>Adrian Cockcroft</name><uri>http://www.blogger.com/profile/14695336135416848505</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='10582762967662651464'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5271952289926261386.post-943527575687544755</id><published>2008-10-01T00:03:00.000-07:00</published><updated>2008-10-01T00:07:21.605-07:00</updated><title type='text'>Netflix API - Announcement - Part 3</title><content type='html'>&lt;div&gt;Here is the official announcement of the API and how to get access to it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Starting Wednesday, Oct. 1 the Netflix API is open to all:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The Netflix API:&lt;br /&gt;&lt;br /&gt;- Allows access to data for 100,000 movie and TV episode titles on DVD as well as Netflix account access on a user’s behalf&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Netflix has more than 2 billion ratings in its database&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Netflix members rate more than 2 million movies a day&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Netflix ships more than 2 million DVDs on a typical day&lt;br /&gt;&lt;br /&gt;- Is free&lt;br /&gt;&lt;br /&gt;- Allows commercial use&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;E.g. if a developer creates an iPhone app and wants to sell it for $0.99, that’s ok&lt;br /&gt;&lt;br /&gt;Technically, the Netflix API:&lt;br /&gt;&lt;br /&gt;- Includes a REST API, a Javascript API, and ATOM feeds&lt;br /&gt;&lt;br /&gt;- Uses OAuth standard security to allow the subscriber to control which applications can access the service on his or her behalf&lt;br /&gt;&lt;br /&gt;Developers can get access:&lt;br /&gt;&lt;br /&gt;- Starting 10/1&lt;br /&gt;&lt;br /&gt;- By self sign up at http://developer.netflix.com&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5271952289926261386-943527575687544755?l=millicomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://millicomputing.blogspot.com/feeds/943527575687544755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5271952289926261386&amp;postID=943527575687544755' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/943527575687544755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/943527575687544755'/><link rel='alternate' type='text/html' href='http://millicomputing.blogspot.com/2008/10/netflix-api-announcement-part-3.html' title='Netflix API - Announcement - Part 3'/><author><name>Adrian Cockcroft</name><uri>http://www.blogger.com/profile/14695336135416848505</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='10582762967662651464'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5271952289926261386.post-5594813106727174006</id><published>2008-09-17T23:23:00.000-07:00</published><updated>2008-10-10T22:47:29.047-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OAuth'/><category scheme='http://www.blogger.com/atom/ns#' term='InstantQAdd'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='API'/><category scheme='http://www.blogger.com/atom/ns#' term='Netflix'/><title type='text'>Netflix API - Getting OAuth to work on iPhone - part 2: Adding the OAuth Code</title><content type='html'>&lt;div&gt;To start with I found some &lt;a href="http://iphoneincubator.com/blog/tag/uiwebview"&gt;examples by Nick Dalton that helped me build a simple application that included a Web View&lt;/a&gt;, a screen that acts like a web browser but with my custom Objective-C code embedded in it. This is important, because the OAuth sign-in process uses a web page, but on the iPhone, if you spawn a copy of Safari to visit a web page, your application quits first.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next the Source Code Manager in Xcode was configured to load the OAuthconsumer Objective-C framework via subversion. This was easy and obvious, enter the URL &lt;a href="http://oauth.googlecode.com/svn/code/obj-c/"&gt;http://oauth.googlecode.com/svn/code/obj-c/&lt;/a&gt; and checkout the code.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When trying to import the framework I discovered that Apple does not allow user specified binary frameworks to be added to iPhone applications. To work around this the source code was copied from the Xcode project for the framework, to the Xcode project for my Instant Test application. I renamed the  framework &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Classes&lt;/span&gt; folder as &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;OAuth&lt;/span&gt; and copied to my project via drag and drop, choosing to copy the underlying files. The &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Cocoa Categories&lt;/span&gt;, &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Protocols&lt;/span&gt; and &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Other Sources&gt;Crypto&lt;/span&gt; folder were also copied. The &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Tests&lt;/span&gt; folder did not compile for iPhone so don't bother to copy it over.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The standard system &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Security.Framework&lt;/span&gt; doesn't need to be added to the &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Frameworks&lt;/span&gt; folder. I initially thought it did, but its probably only needed for the KeyChain code.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The iPhone doesn't support the KeyChain functionality, so if you try to build for iPhone it will fail. It does however build for the iPhone Simulator, which is confusing. Open up the OAuth source code, and delete the last two files &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;OAToken_KeychainExtensions.h&lt;/span&gt; and &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;OAToken_KeychainExtensions.m&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Since the code is no longer a framework, the header file references need to be changed from &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;#include &lt;file&gt;&lt;/file&gt;&lt;/span&gt; to &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;#include "file"&lt;/span&gt; for all the includes in &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;OAuthConsumer.h&lt;/span&gt; apart from the first Foundation one.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;At this point, before you try and call anything, try a build, it should compile with no errors. If it doesn't, look for missing files.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;At this point, you should have all you need to connect to an OAuth service&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5271952289926261386-5594813106727174006?l=millicomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://millicomputing.blogspot.com/feeds/5594813106727174006/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5271952289926261386&amp;postID=5594813106727174006' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/5594813106727174006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/5594813106727174006'/><link rel='alternate' type='text/html' href='http://millicomputing.blogspot.com/2008/09/netflix-api-and-getting-oauth-to-work_05.html' title='Netflix API - Getting OAuth to work on iPhone - part 2: Adding the OAuth Code'/><author><name>Adrian Cockcroft</name><uri>http://www.blogger.com/profile/14695336135416848505</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='10582762967662651464'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5271952289926261386.post-7553423447672541256</id><published>2008-09-16T22:23:00.000-07:00</published><updated>2008-10-10T22:45:42.144-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OAuth'/><category scheme='http://www.blogger.com/atom/ns#' term='InstantQAdd'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Netflix'/><title type='text'>Netflix API Getting OAuth to work on iPhone - Instant Queue Add part 1: why?</title><content type='html'>Why develop an iPhone app? Its "the future", a useful skill, and I can carry whatever I develop in my pocket and make it do whatever I want.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I work at Netflix, and I have instant watching on my TV, I built an application "Instant Queue Add" that lets me add a title to my instant queue using my iPhone in a couple of touches. It takes the Top20 and New Choices RSS feeds to find content, and it spawns a copy of Safari to add to instant queue for each pick. The first time it starts, you have to login, then it remembers the Netflix cookie. However I really want to add more features and avoid spawning a copy of Safari with a screen scraped URL.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The Netflix API uses a new standard called &lt;a href="http://blog.unitedheroes.net/archives/p/3075/simplified-oauth/"&gt;OAuth for Open Authentication&lt;/a&gt;. There are lots of features, but its complex, and there is no standard off the shelf library for OAuth on the iPhone. However it is a useful building block for more advanced applications.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;In this series of posts, I will document the steps I'm making to get OAuth to work on the iPhone using Objective-C and Xcode. My starting point is this&lt;a href="http://code.google.com/p/oauthconsumer/wiki/UsingOAuthConsumer"&gt; code base and tutorial by Jon R. Crosby&lt;/a&gt;, which is based on desktop MacOS X, and doesn't directly support the iPhone.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5271952289926261386-7553423447672541256?l=millicomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://millicomputing.blogspot.com/feeds/7553423447672541256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5271952289926261386&amp;postID=7553423447672541256' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/7553423447672541256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5271952289926261386/posts/default/7553423447672541256'/><link rel='alternate' type='text/html' href='http://millicomputing.blogspot.com/2008/09/netflix-api-and-getting-oauth-to-work.html' title='Netflix API Getting OAuth to work on iPhone - Instant Queue Add part 1: why?'/><author><name>Adrian Cockcroft</name><uri>http://www.blogger.com/profile/14695336135416848505</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='10582762967662651464'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>