<?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:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4179119941609865452</id><updated>2024-09-08T05:50:48.080-07:00</updated><category term="iPhone"/><category term="macbookpro"/><category term="objective-c"/><category term="ABRecordRef"/><category term="Design"/><category term="Patterns"/><category term="Software"/><category term="UIButton"/><category term="UINavigatonBar"/><category term="UIToolbar"/><category term="XCode"/><category term="analytic"/><category term="builder"/><category term="cocoa"/><category term="decorator"/><category term="engineering"/><category term="iOS"/><category term="intel"/><category term="multiple buttons"/><category term="net insight"/><category term="optibay"/><category term="ssd"/><title type='text'>techrant</title><subtitle type='html'>Mobile Dev and Tech Stuff by Dave van Dugteren. Follow me on Twitter @ www.twitter.com/davenzdeveloper</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://techrantnz.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179119941609865452/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://techrantnz.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04854372329122768547</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>14</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4179119941609865452.post-7677965805136093963</id><published>2015-03-15T21:21:00.004-07:00</published><updated>2015-03-15T21:24:11.221-07:00</updated><title type='text'>Onboarding Notifications on iOS</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
I wanted to use a similar on-boarding popup notification user experience to that of Pinterests iOS app... I couldnt actually find a open source option so I built it myself... a clean and simple flat designed Notification Singleton used for good UX with respect to onboarding users to your iOS application or for your next version of your app. Now used for on boarding users throughout the Keynected.com app.&lt;/div&gt;
&lt;br /&gt;
Download&amp;nbsp;&lt;a href=&quot;https://github.com/mrdavenz/DVNotifications&quot; target=&quot;_blank&quot;&gt;DVNotifications&lt;/a&gt;&amp;nbsp;here.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://s3.postimg.org/nwxv74r03/IMG_1550.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://s3.postimg.org/nwxv74r03/IMG_1550.png&quot; height=&quot;320&quot; width=&quot;179&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://s13.postimg.org/v8gs4rt4n/IMG_1551.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://s13.postimg.org/v8gs4rt4n/IMG_1551.png&quot; height=&quot;320&quot; width=&quot;179&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h2 style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/h2&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://techrantnz.blogspot.com/feeds/7677965805136093963/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179119941609865452/7677965805136093963' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179119941609865452/posts/default/7677965805136093963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179119941609865452/posts/default/7677965805136093963'/><link rel='alternate' type='text/html' href='http://techrantnz.blogspot.com/2015/03/dvnotifications-i-wanted-to-use-similar.html' title='Onboarding Notifications on iOS'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04854372329122768547</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179119941609865452.post-4739063893955007825</id><published>2013-05-26T19:55:00.001-07:00</published><updated>2013-05-27T19:17:04.603-07:00</updated><title type='text'>The One More Thing iOS Dev/Design Conference - Melbourne.</title><content type='html'>So I recently flew to the chilli chilled out Melbourne for the One More Thing Conference ( &lt;a href=&quot;http://onemorething.com.au/&quot;&gt;http://onemorething.com.au&lt;/a&gt; ) @ Federation Square.&lt;br /&gt;
&lt;br /&gt;
It&#39;s like a mini version of WWDC but focused on tips and tricks for building truly successful iPhone and iPad applications.&lt;br /&gt;
&lt;br /&gt;
This event touched a lot on many aspects concerned with the promotion of ones app/app brand as well as processes and paradigms that extremely successful app creators have used. Given the huge amount of competition now on the app dev gold rush it was important advice.&lt;br /&gt;
&lt;br /&gt;
With talks from some very successful app developers, and people such as Lex Friedman (@lexfri) , a senior writer for macworld who pointed out the average number of apps released to the app store on average was something like~ &amp;gt;450 a day, meaning he receives a quote &#39;Shit-Ton&#39; of requests to write and review peoples apps on macworld, and gave us all some very good insight into how to request a review without pissing off Macworld and instead impressing them.&lt;br /&gt;
&lt;br /&gt;
I liked that each speaker was different than the last covering something new and unique each time.&lt;br /&gt;
I recall:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Karl von Randow&lt;/b&gt;&#39;s insights on his journey building Camera+ for example optimizing image processing  from 10 seconds to 5 seconds on the 3GS.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Maggie Steciuk&lt;/b&gt; from Terrible Labs in Boston presented some of the tools they use with regards to their process of rapid prototyping in order to pitch to investors/client, such as Flinto, Framer, Proto.IO, pbon.es/proto.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Li Xia&lt;/b&gt; gave an inspiring insight into a mobile app company he runs focused on &#39;Outdoor apps&#39; and encouraged developers and designers to work on things they enjoy and explained the inherent benefits.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Simon Saëns&lt;/b&gt; - Explained successes and failures of some of his games such as Crabitron (http://www.myigadget.com/?tag=crabitron-2), explained the value of having a story and &#39;targetting&#39; a smaller specific group. An example was they made a parody of Kickstarter which made for great viral news: http://twolivesleft.com/Crabstarter He went on to encourage the need to have as close of a link as possible between the users and the game at all times.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Emma Stabey&lt;/b&gt; - A product manager at Seek.com.au took us on the journey she had been through from the beginnings of the seek.com.au mobile and tablet apps and the huge successes they&#39;ve had from it.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Louise Duncan&lt;/b&gt; - Opened my eyes to the world of apps for education and possibilities to work with schools in primary/secondary and tertiary to aid educational processes. Also touched on the value of Augmented Reality apps with education.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Amanda Rösler - &lt;/b&gt;From the very successful Toca Boca gave insight into their process for creating &#39;Digital Toys&#39; for children.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Jaimee Newberry - &lt;/b&gt;A ux consultant spoke on some valuable topics such as App copy, from alerts to release notes. And gave the great idea to give all apps a persona when prototyping, designing and developing. e.g. OprahBjork.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Scott Brewer &lt;/b&gt;- Works for Art Processors and explained the location aware mobile app that enhances the M.O.N.A museum in Tasmania by means of iPod touches + RFID. Pointed out the value of running surveys frequently from users. The bit about &#39;Audio Theatro&#39; which they set up at Melbourne zoo was really cool too. http://artprocessors.net.&lt;br /&gt;
&lt;br /&gt;
I felt there was a lot of valuable info to be gained for myself and the team I work with, some big ones, we need to connect more directly with our users, put &#39;coming soon features&#39; in our release notes from follow up surveys, to using iRate, including an in app newsfeed to convey news to our users, to showing dev progress more transparently via usage of media such as video/images.&lt;br /&gt;
&lt;br /&gt;
The tools and approaches with prototyping are something we already agree with but the talks only reinforced the value of the &#39;agile iterative working alongside the client approach&#39;... the new tools suggested will be also checked out, as was pointed out with prototyping there is no silver bullet tool.&lt;br /&gt;
And one more thing... a recurring theme stressed from the devs, designers and strategists throughout the event:&lt;b&gt; FOCUS ON KEY FEATURES&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Also I&#39;ve now subscribed to the 2 app dev related podcasts unprofessional and &#39;Mobile Couch&#39; (@_mobilecouch) from Canberra.&lt;br /&gt;
https://itunes.apple.com/us/podcast/unprofessionial/id553063604?mt=2&lt;br /&gt;
https://itunes.apple.com/au/podcast/mobile-couch/id599454382&lt;br /&gt;
&lt;br /&gt;
Oh and I just found a somewhat more in depth analysis of the event here: http://jellystyle.com/notes/one-more-thing/2013 and _mobilecouch have just released their podcast about the event: http://jellystyle.com/podcasts/mobilecouch/9&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhT4-ZYdC2d7y4_Ku5AQc50aAlhEZ4lAIFpdkGhqBmC6wkUoUSy9qn7Z-t1p0QbwC9C7khqXKHqb8mILZHJZe3e5Yldqd83dDt2Je6gJkYVEVSwE1q-1t6OyFfWu92ULnnEfjy7a_A4/s1600/BLATbxzCcAECRsK.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhT4-ZYdC2d7y4_Ku5AQc50aAlhEZ4lAIFpdkGhqBmC6wkUoUSy9qn7Z-t1p0QbwC9C7khqXKHqb8mILZHJZe3e5Yldqd83dDt2Je6gJkYVEVSwE1q-1t6OyFfWu92ULnnEfjy7a_A4/s1600/BLATbxzCcAECRsK.jpg&quot; height=&quot;240&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUSekJn8eL7VDexftDRFzhpG4Kk_8vsr9KZO4NGHg2xl9IrDgNsPLi_7ZDtyfPft7-trgqksqb0lWj2fg15ghCzTq8x7TVbiRJ8gJHEq6oY9wRt8KIIvNABuhyphenhyphenuixEJIy3DoV2AyKy/s1600/IMG_3618.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUSekJn8eL7VDexftDRFzhpG4Kk_8vsr9KZO4NGHg2xl9IrDgNsPLi_7ZDtyfPft7-trgqksqb0lWj2fg15ghCzTq8x7TVbiRJ8gJHEq6oY9wRt8KIIvNABuhyphenhyphenuixEJIy3DoV2AyKy/s1600/IMG_3618.JPG&quot; height=&quot;320&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiU1I26LuI1F9aQsYjtz4sSGbaUbw90hAi1H3TxOxOpfnoepzcwyPyHQHMLDDXLBqZm4HTKUfOUSu_NMIbwD-JSFy86e2mORzW8JvE2sgS0I1bm9bP3fvsh1pQ35uA4yHobnBlZg5k5/s1600/IMG_3609.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiU1I26LuI1F9aQsYjtz4sSGbaUbw90hAi1H3TxOxOpfnoepzcwyPyHQHMLDDXLBqZm4HTKUfOUSu_NMIbwD-JSFy86e2mORzW8JvE2sgS0I1bm9bP3fvsh1pQ35uA4yHobnBlZg5k5/s1600/IMG_3609.JPG&quot; height=&quot;320&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaovXsB8WWkyCT258IfOpcTcL3JM2q69bf6a1SaZFLG3hHRov1bUIEvxyMHyNQJG6O30QgBrJQS_9AEkdE7ZXeE07vc1HZaC91LXMzBS-TVDkAOorBJjQyL-DzUPCsdyqlI32Iy7ip/s1600/IMG_3615.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaovXsB8WWkyCT258IfOpcTcL3JM2q69bf6a1SaZFLG3hHRov1bUIEvxyMHyNQJG6O30QgBrJQS_9AEkdE7ZXeE07vc1HZaC91LXMzBS-TVDkAOorBJjQyL-DzUPCsdyqlI32Iy7ip/s1600/IMG_3615.JPG&quot; height=&quot;320&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyIL3JgAY11B6Izy7KskFZqvwOD1iV6EIPqZ9KyGemCMN89hFBi-RsLsCT3wGeUTInItVUrjDVaQjSqlS7NfPwQnUCJQOEjUq1IXDoei7Rh1R12FkEVw06ISK0o31DYTInkGXFuFJV/s1600/IMG_3603.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyIL3JgAY11B6Izy7KskFZqvwOD1iV6EIPqZ9KyGemCMN89hFBi-RsLsCT3wGeUTInItVUrjDVaQjSqlS7NfPwQnUCJQOEjUq1IXDoei7Rh1R12FkEVw06ISK0o31DYTInkGXFuFJV/s1600/IMG_3603.JPG&quot; height=&quot;150&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://techrantnz.blogspot.com/feeds/4739063893955007825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179119941609865452/4739063893955007825' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179119941609865452/posts/default/4739063893955007825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179119941609865452/posts/default/4739063893955007825'/><link rel='alternate' type='text/html' href='http://techrantnz.blogspot.com/2013/05/the-one-more-thing-ios-devdesign.html' title='The One More Thing iOS Dev/Design Conference - Melbourne.'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04854372329122768547</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhT4-ZYdC2d7y4_Ku5AQc50aAlhEZ4lAIFpdkGhqBmC6wkUoUSy9qn7Z-t1p0QbwC9C7khqXKHqb8mILZHJZe3e5Yldqd83dDt2Je6gJkYVEVSwE1q-1t6OyFfWu92ULnnEfjy7a_A4/s72-c/BLATbxzCcAECRsK.jpg" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179119941609865452.post-8482334438985034795</id><published>2013-02-23T16:06:00.004-08:00</published><updated>2013-03-05T02:33:35.655-08:00</updated><title type='text'>From iOS to Xamarin for Android/Win Phone in Visual Studio</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;

&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
I&#39;ve operated as primarily an iPhone/iPad developer / UX guy for the past 3 years. This week I was tasked with the challenge to trial &lt;a href=&quot;http://xamarin.com/&quot; target=&quot;_blank&quot;&gt;Xamarin&lt;/a&gt; and port a small checklist app we built for a client to both Android and Windows Phone.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoYHCQdLoJSVWr3hv-C_WeFjbzx9RViQR45prPgM7XOy-MZecX7vsw9WixxyRsCzPqtUFGoEzEQzPi8XNrGOERbCa862qXP03UgTnlurd56yRuM3MOlyUHyOJEnu1a4liDSSO7Jxew/s1600/Screen+Shot+2013-02-24+at+11.43.40+AM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;142&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoYHCQdLoJSVWr3hv-C_WeFjbzx9RViQR45prPgM7XOy-MZecX7vsw9WixxyRsCzPqtUFGoEzEQzPi8XNrGOERbCa862qXP03UgTnlurd56yRuM3MOlyUHyOJEnu1a4liDSSO7Jxew/s400/Screen+Shot+2013-02-24+at+11.43.40+AM.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
I installed the latest version of VMWare fusion with a freshly installed Windows 7 64Bit image with Visual Studio 2012 Professional to my MBP 2011, 16 GB Ram, 2.2 GHz dual core i7.&lt;br /&gt;
&lt;br /&gt;
My first thoughts: It works, I like it, it can potentially save a significant amount of time( some back of napkin calculations at the end of this post) :)&lt;br /&gt;
&lt;br /&gt;
They have &lt;a href=&quot;https://github.com/xamarin/mobile-samples&quot; target=&quot;_blank&quot;&gt;sample apps&lt;/a&gt; that you can build and run and learn from &amp;nbsp;(After solving some errors and addressing some issues easily solved via stack overflow) to kick start your own development of an Android app in C-sharp.&lt;br /&gt;
&lt;br /&gt;
They have a cool 3rd party &lt;a href=&quot;http://components.xamarin.com/&quot; target=&quot;_blank&quot;&gt;component store&lt;/a&gt;, which is a great idea and may prove to be very handy in the future.&lt;br /&gt;
&lt;br /&gt;
It states on their site &quot;Easily create apps in C# for iOS, Android and Mac&quot;.&lt;br /&gt;
If you&#39;ve ever used XCode, you&#39;ll know that as of version 4.6, it&#39;s naturally extremely good for building iOS apps, and any other alternative just isn&#39;t able to compete.&lt;br /&gt;
&lt;br /&gt;
So in my personal humble opinion...ahem.. don&#39;t bother. Which leaves Android and Windows phone. Obviously Windows phone should be developed in Visual studio &amp;amp; C# anyway, hence you find the Xamarin website doesn&#39;t focus so much on Windows phone, however that&#39;s where Xamarin projects designed in a three tier architecture fits in so well, using the SQL data mapping, all of a sudden business logic and the data model (accessors, aggregation, algorithms and all of the other under the hood stuff) can be written once and used for all 3&amp;nbsp;&amp;nbsp;operating systems.&lt;br /&gt;
Also it means Webservice code can be written once, which for reasonably large apps could make it much more economical to develop for multiple devices.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Well 4 operating systems if you include mac OSX... but it should be pointed out to non developer stakeholders the time it takes to write the User Interface / User Experience code for each operating system can still be a significant amount of the development effort, and Xamarin cannot help in this department, where some apps could require 90% UI/UX code and 10% business logic/Data model code, only 10% is being reused. Also (obvious to the developer but seems to fall through the cracks for other stakeholders like BA&#39;s the User interface design should be designed for the operating system following the OS guidelines.&lt;br /&gt;
&lt;br /&gt;
So then the experience of the developer with native tools over C# should be considered. Whereas some apps could have a relatively large amount of business rules to develop for and it would suddenly be a very compelling option.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The general gist of the framework:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1Bj-cHoHYu4AQ5rzdjNIk3WX7SlN-fatsW2J-ZB0iBso1Qq6aTLdDSW_QfkRHSlcmskV55l_zaFHmjk17YFlGT4l-tAi28KKe0tWWQs2OUhRmX-Tfn3GMEycC9FfHmGk-41lNPi8M/s1600/framework.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;258&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1Bj-cHoHYu4AQ5rzdjNIk3WX7SlN-fatsW2J-ZB0iBso1Qq6aTLdDSW_QfkRHSlcmskV55l_zaFHmjk17YFlGT4l-tAi28KKe0tWWQs2OUhRmX-Tfn3GMEycC9FfHmGk-41lNPi8M/s320/framework.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
They have some case studies &lt;a href=&quot;http://xamarin.com/apps&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Some first experiences I found:&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxALCa98LEDHa8EFzxV7X5ndqqDbl6cX81FTEWuT2EkXJqo1uGfd8YFND7sop_D7zq67BAYWYPL28y49-jyZC6VE6pEmjQGQsb5e5deI2wgJIQobaggVlRSg2NfyPgmdkWj5MNdRT3/s1600/Xamarin.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;153&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxALCa98LEDHa8EFzxV7X5ndqqDbl6cX81FTEWuT2EkXJqo1uGfd8YFND7sop_D7zq67BAYWYPL28y49-jyZC6VE6pEmjQGQsb5e5deI2wgJIQobaggVlRSg2NfyPgmdkWj5MNdRT3/s200/Xamarin.png&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;- You must have Xamarin Business Edition or higher to use Xamarin.Android from Visual Studio. They have their own IDE (fork of Eclipse) that you can use as an altnerative to Visual studio, but that&#39;s not ideal if you wish to build for Windows Phone as well. And entry level &lt;a href=&quot;https://store.xamarin.com/&quot; target=&quot;_blank&quot;&gt;pricing&lt;/a&gt; ain&#39;t cheap, $999 gets you in the game as of writing this article.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxdbqHhpWxLr1iaAlYn6IUqnV49sSLVPFf4sedDOGeqMHNdRj0TCxoCGrdYsq3gwYOYiuiyE1QSzU8tHVS0MXqZjKQfo0PaBGyCfwRTsTrnQIY5RCpN1lQpKPMf6QG4xuSr7tWc2MY/s1600/Xamarin.sample.error.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;125&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxdbqHhpWxLr1iaAlYn6IUqnV49sSLVPFf4sedDOGeqMHNdRj0TCxoCGrdYsq3gwYOYiuiyE1QSzU8tHVS0MXqZjKQfo0PaBGyCfwRTsTrnQIY5RCpN1lQpKPMf6QG4xuSr7tWc2MY/s200/Xamarin.sample.error.png&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;- Installing some of their sample apps don&#39;t work out of the box without addressing error messages and bringing in third party libraries such as Google Maps.&lt;br /&gt;
&lt;br /&gt;
- I found the android emulators to be very slow, but that&#39;s Googles fault.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgK6we2JX9ABViI4b75-G1oRn2zDKSzSYmV9tFpI7f01v8Nr-hk-ZSyjnzeeofd51Ic7_CWIL6nCV31naiUmRqJMBsQc-cS-zx2aLJagoXBwzT5MyFMoDjXyL8-5LQELM_8PHuNLBAV/s1600/deploying.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;106&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgK6we2JX9ABViI4b75-G1oRn2zDKSzSYmV9tFpI7f01v8Nr-hk-ZSyjnzeeofd51Ic7_CWIL6nCV31naiUmRqJMBsQc-cS-zx2aLJagoXBwzT5MyFMoDjXyL8-5LQELM_8PHuNLBAV/s200/deploying.png&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
- Initially I pressed &#39;start with debugging&#39; in the Tasky 10 minute guide I got a &#39;Failed to create pbuf surface&#39; error, I restarted the machine and did a clean build without debugging which seemed to fix it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- The XAML editor for Android in Visual studio is pretty good. &lt;rant&gt;well it does the same job as in eclipse, however&amp;nbsp;Laying out XAML for Android User interfaces is like playing battleships. It&#39;s an educated guessing game and you have to wait to preview in emulator for each change to see if you got it right. But if it&#39;s right on one Android device it could be completely off on a different device. Design is built into Apple’s DNA...Google has just bolted it onto its search engine. Ain&#39;t no avoiding this unfortunately. &lt;/rant&gt;&lt;br /&gt;
&lt;br /&gt;
Me in the Xaml editor:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipjbwY0ZrZCQK_QvpAwwet1UFzzw3tm2mn0Y1A4r6AkFgPiIVXCstAu9_5aDDqNL3QTkBkOSH2T0QJJ7YPxxy0Qp08zckUzcmFpSc5krRRDBWRrgIhESteuwTYMIM095SIHMvobsQX/s1600/Screen+Shot+2013-02-24+at+11.19.05+AM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;297&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipjbwY0ZrZCQK_QvpAwwet1UFzzw3tm2mn0Y1A4r6AkFgPiIVXCstAu9_5aDDqNL3QTkBkOSH2T0QJJ7YPxxy0Qp08zckUzcmFpSc5krRRDBWRrgIhESteuwTYMIM095SIHMvobsQX/s320/Screen+Shot+2013-02-24+at+11.19.05+AM.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
- On first run of&lt;a href=&quot;http://xamarin.com/getting-started&quot; target=&quot;_blank&quot;&gt; the 10 Minute guide&lt;/a&gt; I encountered this error despite following the instructions (The application could not be started. Ensure that the application has been installed to the target device and has a launchable activity), which fixed itself after a restart after I checked stackoverflow for help:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0wn20VAKx3pU-b2tVXH0DJu1KkajP1IxX3KhDoHZY0cECViBIP4p3sS9ZXZUTTNdpFsOpH4K7wztlSyeJl80Cj-nZDdajbSV84vZDXt0Z3QdU6oXJOZ92Ryl4PlOD278VCTlqywFj/s1600/Screen+Shot+2013-02-24+at+11.16.55+AM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;118&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0wn20VAKx3pU-b2tVXH0DJu1KkajP1IxX3KhDoHZY0cECViBIP4p3sS9ZXZUTTNdpFsOpH4K7wztlSyeJl80Cj-nZDdajbSV84vZDXt0Z3QdU6oXJOZ92Ryl4PlOD278VCTlqywFj/s320/Screen+Shot+2013-02-24+at+11.16.55+AM.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
- I also found 5-10 minute loads causing VS to not respond (Microsoft Visual Studio is busy) on the emulator on first load then 1-2 minute loads from then on, no different to using eclipse of course:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8r94HcRoshtMhtX2mshNpIxEY9usqX28taZlcPOpJLWl5B8JMRICabNMt0IGqdpP6E1BoI0R_gvJ2zVHjSA6obsoLLWyYfekx-zYfW64tSNcF5T1DO6G-COW_kmi0j6TN6KewLLIs/s1600/Screen+Shot+2013-02-24+at+11.17.49+AM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;155&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8r94HcRoshtMhtX2mshNpIxEY9usqX28taZlcPOpJLWl5B8JMRICabNMt0IGqdpP6E1BoI0R_gvJ2zVHjSA6obsoLLWyYfekx-zYfW64tSNcF5T1DO6G-COW_kmi0j6TN6KewLLIs/s320/Screen+Shot+2013-02-24+at+11.17.49+AM.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
Conclusion:&lt;br /&gt;
As an iOS developer, Xamarin has been a fairly quick and easy tool to learn once it&#39;s running.&lt;br /&gt;
The sample apps help for getting going despite some errors preventing things from working straight out of the box. The UI for android is still XAML based, but the UI logic can be written in C-sharp well enough for any basic design. Given that I&#39;m not a huge Java or eclipse fan, this is really quite useful to me.&lt;br /&gt;
Running Android app builds on device instead of emulator is definitely a wise idea to save time given the huge time it takes to emulate.&lt;br /&gt;
The Tasky app serves as a great sample app to quickly get up to speed with how lists are handled compared with UITableViews in iOS.&lt;br /&gt;
Given that Android has many versions, with many devices with many resolutions, user interface design remains a time consuming task for the developer. So it should be clear to all stakeholders that Xamarin cannot address this. If you brake the dev time down (UI/UX, Business logic, Data Model). You can save time on the business logic and Data model, I would give generally speaking 50% of the time to UI/UX.&lt;br /&gt;
&lt;br /&gt;
So if you were to dev the 3 apps with one code base for business logic and the data model you&#39;re saving 1/3 of your development time. This is of course subjective to the app your developing, but in any case you&#39;re going to save time. Just not as much as you might think on first impression.&lt;br /&gt;
&lt;br /&gt;
Further Information and links:&lt;br /&gt;
&lt;br /&gt;
- Xamarin&#39;s Developer Home page&lt;br /&gt;
&lt;a href=&quot;http://docs.xamarin.com/&quot; target=&quot;_blank&quot;&gt;http://docs.xamarin.com&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
- Xamarin / Mono touch tagged Stackoverflow questions:&lt;br /&gt;
&lt;a href=&quot;http://stackoverflow.com/questions/tagged/monodroid+or+monotouch+or+xamarin?sort=active&quot; target=&quot;_blank&quot;&gt;http://stackoverflow.com/questions/tagged/monodroid+or+monotouch+or+xamarin?sort=active&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
- Xamarin for Android Docs&lt;br /&gt;
&lt;a href=&quot;http://androidapi.xamarin.com/&quot; target=&quot;_blank&quot;&gt;http://androidapi.xamarin.com&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
- Xamarin Components Store&lt;br /&gt;
&lt;a href=&quot;http://components.xamarin.com/&quot; target=&quot;_blank&quot;&gt;http://components.xamarin.com&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
- Xamarin Forums&lt;br /&gt;
&lt;a href=&quot;http://forums.xamarin.com/&quot; target=&quot;_blank&quot;&gt;http://forums.xamarin.com&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
- Windows Phone Developer Home&lt;br /&gt;
&lt;a href=&quot;https://dev.windowsphone.com/en-us&quot; target=&quot;_blank&quot;&gt;https://dev.windowsphone.com/en-us&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
~Dave van Dugteren&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://techrantnz.blogspot.com/feeds/8482334438985034795/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179119941609865452/8482334438985034795' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179119941609865452/posts/default/8482334438985034795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179119941609865452/posts/default/8482334438985034795'/><link rel='alternate' type='text/html' href='http://techrantnz.blogspot.com/2013/02/from-ios-to-xamarin-for-androidwin.html' title='From iOS to Xamarin for Android/Win Phone in Visual Studio'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04854372329122768547</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoYHCQdLoJSVWr3hv-C_WeFjbzx9RViQR45prPgM7XOy-MZecX7vsw9WixxyRsCzPqtUFGoEzEQzPi8XNrGOERbCa862qXP03UgTnlurd56yRuM3MOlyUHyOJEnu1a4liDSSO7Jxew/s72-c/Screen+Shot+2013-02-24+at+11.43.40+AM.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179119941609865452.post-6158856137392034668</id><published>2013-01-15T22:29:00.003-08:00</published><updated>2013-01-15T22:48:06.153-08:00</updated><title type='text'>Peoplebank iPhone App</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
As Declared on&amp;nbsp;&lt;a href=&quot;https://twitter.com/DaveNZDeveloper/status/291428336482258946&quot; target=&quot;_blank&quot;&gt;Twitter&lt;/a&gt;, we&amp;nbsp;at &lt;a href=&quot;http://www.alivemobile.com/&quot;&gt;www.alivemobile.com&lt;/a&gt; have designed and developed a Job Search tool for Peoplebank.&lt;br /&gt;
&lt;br /&gt;
A tool for folks in the IT industry allowing them to Save Job searches, receive Job Push Notifications, Email notifications, apply for jobs from the app, autofill their application via Linkedin, and a bunch of other cool features that other apps like Seek don&#39;t yet do.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;a href=&quot;https://itunes.apple.com/au/app/peoplebank/id574631759?mt=8&quot; target=&quot;_blank&quot;&gt;Download it here&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnP-3wY0YnW3dx-V5ELnzGsmHRlvilGZbjlnbfNzs3oeOPq0Y1zMshbzNqJOiC-rjO7W718x5exoVDJ2Ay3MqcRZGUUi43SUFoiKkviJUZIPcDas2_4TFHr2wHNRNWMfi1nRiwHq24/s1600/5.2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnP-3wY0YnW3dx-V5ELnzGsmHRlvilGZbjlnbfNzs3oeOPq0Y1zMshbzNqJOiC-rjO7W718x5exoVDJ2Ay3MqcRZGUUi43SUFoiKkviJUZIPcDas2_4TFHr2wHNRNWMfi1nRiwHq24/s1600/5.2.png&quot; width=&quot;180&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghFBkOWpbVXXIleyQgXmLBWkfL8IH_Q_BxM_szN_zuW0yYDCTnx3OZO3H5Jo8cKZ50SiolSm7VH5_2WvH6VAcib3e6DhYabhqE0Ukk-Pd_gUgc548NmHBk8FV646dVGQYWcnGk8ZBI/s1600/5.4.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghFBkOWpbVXXIleyQgXmLBWkfL8IH_Q_BxM_szN_zuW0yYDCTnx3OZO3H5Jo8cKZ50SiolSm7VH5_2WvH6VAcib3e6DhYabhqE0Ukk-Pd_gUgc548NmHBk8FV646dVGQYWcnGk8ZBI/s1600/5.4.png&quot; width=&quot;180&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLGG6_QA6d3cGj-o1rFnGnnu_aAPO2im2WvUOVoFm6HdqZOflDueNDVsqNmGGtyMcTuKR7s7aZLhkq6rN84Lw13_FnxnRTc2CnICNMh95rUplMmnsalSetD5lpF70jo7671jFbM_-X/s1600/5.3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLGG6_QA6d3cGj-o1rFnGnnu_aAPO2im2WvUOVoFm6HdqZOflDueNDVsqNmGGtyMcTuKR7s7aZLhkq6rN84Lw13_FnxnRTc2CnICNMh95rUplMmnsalSetD5lpF70jo7671jFbM_-X/s1600/5.3.png&quot; width=&quot;180&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzR_t9_K8hh6f8AWQDUwAhOKnAp6XdUfu5bxUbvj3FsbEzLbA-vWxV3JhXokvJkRYVoBf8eAh-iN2NkHGf3aDaIlc70lh1_mjw9f763D8gXNXc6VM446m6WA8RzE-bO7Cnwq3UwxKw/s1600/5.5.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzR_t9_K8hh6f8AWQDUwAhOKnAp6XdUfu5bxUbvj3FsbEzLbA-vWxV3JhXokvJkRYVoBf8eAh-iN2NkHGf3aDaIlc70lh1_mjw9f763D8gXNXc6VM446m6WA8RzE-bO7Cnwq3UwxKw/s1600/5.5.png&quot; width=&quot;180&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYh3pNx2TK3KWDa80OalHcWkFBJjItY7XkkLC57C_xqKSsxG1qwFVmYCijhNBoHVpimZ7Kbyquz-HjkdNmrvj5n52xsjF9YMg_dITz0oH2NN5iQwMEQUCSr43v6y_EhRwVs5gtCz-n/s1600/5.1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYh3pNx2TK3KWDa80OalHcWkFBJjItY7XkkLC57C_xqKSsxG1qwFVmYCijhNBoHVpimZ7Kbyquz-HjkdNmrvj5n52xsjF9YMg_dITz0oH2NN5iQwMEQUCSr43v6y_EhRwVs5gtCz-n/s1600/5.1.png&quot; width=&quot;180&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://techrantnz.blogspot.com/feeds/6158856137392034668/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179119941609865452/6158856137392034668' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179119941609865452/posts/default/6158856137392034668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179119941609865452/posts/default/6158856137392034668'/><link rel='alternate' type='text/html' href='http://techrantnz.blogspot.com/2013/01/peoplebank-iphone-app.html' title='Peoplebank iPhone App'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04854372329122768547</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnP-3wY0YnW3dx-V5ELnzGsmHRlvilGZbjlnbfNzs3oeOPq0Y1zMshbzNqJOiC-rjO7W718x5exoVDJ2Ay3MqcRZGUUi43SUFoiKkviJUZIPcDas2_4TFHr2wHNRNWMfi1nRiwHq24/s72-c/5.2.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179119941609865452.post-2351392378621744594</id><published>2012-11-20T04:27:00.000-08:00</published><updated>2012-11-20T04:31:52.540-08:00</updated><title type='text'>The White Party iPhone App</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Arial, Helvetica, sans-serif; line-height: 17px; text-align: left;&quot;&gt;F&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Arial, Helvetica, sans-serif; line-height: 17px; text-align: left;&quot;&gt;or anyone interested... Alive Mobile has released an impressive iPhone app for the Sydneys Digital industry annual White Party available on the App store here:&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; color: #333333; line-height: 17px; text-align: left;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #333333; line-height: 17px; text-align: left;&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; color: #333333; line-height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;https://itunes.apple.com/au/app/the-white-party/id576995647?mt=8&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; color: #333333; line-height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; color: #333333; line-height: 17px; text-align: left;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #333333; line-height: 17px; text-align: left;&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; color: #333333; line-height: 17px; text-align: left;&quot;&gt;&amp;nbsp;Party&#39;s in 9 days @ the Beresford hotel, Surry hills.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; color: #333333; line-height: 17px; text-align: left;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #333333; line-height: 17px; text-align: left;&quot;&gt;&lt;div style=&quot;text-align: center;&quot;&gt;
&amp;nbsp;Some of our team including myself are gonna rock along. Should be a good night.&lt;/div&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #333333; line-height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;iframe allowfullscreen=&#39;allowfullscreen&#39; webkitallowfullscreen=&#39;webkitallowfullscreen&#39; mozallowfullscreen=&#39;mozallowfullscreen&#39; width=&#39;320&#39; height=&#39;266&#39; src=&#39;https://www.blogger.com/video.g?token=AD6v5dyz9PJCtsuketwESHuaF3Gb9GkwwrbOlvvZthunWnplx0d5n8a49SF1bUvGwzltRNR7JNyHg0lYHoxAJg6mjg&#39; class=&#39;b-hbp-video b-uploaded&#39; frameborder=&#39;0&#39;&gt;&lt;/iframe&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; dir=&quot;rtl&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; dir=&quot;rtl&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;Some Screenshots:&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; dir=&quot;rtl&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; dir=&quot;rtl&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFzyj6Bi4OvQLUySAtGGN-Lvcq4fCxwB06V-ntPZiEQF9cd-S3Uoa6gTD1dtJxSON5zq8v3yQxvtoGxd06WcGZqXKtVVSYE_Xjh3QB5A9mIJ4SXA-De8Z4t14QEgzWyw0xJYij8GmC/s1600/mzl.fgcnbnjt.320x480-75.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFzyj6Bi4OvQLUySAtGGN-Lvcq4fCxwB06V-ntPZiEQF9cd-S3Uoa6gTD1dtJxSON5zq8v3yQxvtoGxd06WcGZqXKtVVSYE_Xjh3QB5A9mIJ4SXA-De8Z4t14QEgzWyw0xJYij8GmC/s1600/mzl.fgcnbnjt.320x480-75.jpg&quot; height=&quot;320&quot; width=&quot;180&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgy1pYoGLy848t9GmUqSnpz1CzzJgfRf64apC3Tsel6leLa-MMKOfk2jogqZBqeJriFCsojx3W_O_u52BK6VsqwzHA1mNDiHfTM6grCduLrBeO2v3ONCAvqHsj6-8Q4tfMCYIM6omAP/s1600/mzl.zyepwpqd.320x480-75.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgy1pYoGLy848t9GmUqSnpz1CzzJgfRf64apC3Tsel6leLa-MMKOfk2jogqZBqeJriFCsojx3W_O_u52BK6VsqwzHA1mNDiHfTM6grCduLrBeO2v3ONCAvqHsj6-8Q4tfMCYIM6omAP/s1600/mzl.zyepwpqd.320x480-75.jpg&quot; height=&quot;320&quot; width=&quot;180&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; dir=&quot;rtl&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;One of their promo vids:&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; dir=&quot;rtl&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;iframe allowfullscreen=&#39;allowfullscreen&#39; webkitallowfullscreen=&#39;webkitallowfullscreen&#39; mozallowfullscreen=&#39;mozallowfullscreen&#39; width=&#39;320&#39; height=&#39;266&#39; src=&#39;https://www.youtube.com/embed/CHWwnVmYIXA?feature=player_embedded&#39; frameborder=&#39;0&#39;&gt;&lt;/iframe&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; dir=&quot;rtl&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; dir=&quot;rtl&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; dir=&quot;rtl&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; dir=&quot;rtl&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; dir=&quot;rtl&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; dir=&quot;rtl&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://techrantnz.blogspot.com/feeds/2351392378621744594/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179119941609865452/2351392378621744594' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179119941609865452/posts/default/2351392378621744594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179119941609865452/posts/default/2351392378621744594'/><link rel='alternate' type='text/html' href='http://techrantnz.blogspot.com/2012/11/the-white-party-iphone-app.html' title='The White Party iPhone App'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04854372329122768547</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFzyj6Bi4OvQLUySAtGGN-Lvcq4fCxwB06V-ntPZiEQF9cd-S3Uoa6gTD1dtJxSON5zq8v3yQxvtoGxd06WcGZqXKtVVSYE_Xjh3QB5A9mIJ4SXA-De8Z4t14QEgzWyw0xJYij8GmC/s72-c/mzl.fgcnbnjt.320x480-75.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179119941609865452.post-925887746579465288</id><published>2012-09-05T04:29:00.001-07:00</published><updated>2012-09-05T04:58:43.337-07:00</updated><title type='text'>The Linkedin API with OAuthStarterKit</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
An iOS app I&#39;ve been working on at work, requires me to use OAuth with linkedin, to use the app users data for autofilling in a job application&lt;br /&gt;
&lt;br /&gt;
I started with git: &lt;a href=&quot;https://github.com/synedra/LinkedIn-OAuth-Sample-Client&quot;&gt;https://github.com/synedra/LinkedIn-OAuth-Sample-Client&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
And immediately got the error &quot;signature_invalid&quot; returned, when calling for any specific field selections. &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;I eventually sussed it and answered my own question in how to get it to give me the users authorized data including their email, telephone, address, job history etc etc.&lt;br /&gt;
&lt;br /&gt;
The raised question was here:&lt;br /&gt;
&lt;a href=&quot;http://stackoverflow.com/questions/12265035/linkedin-api-error-invalid-signature-in-iphone-starter-kit&quot; target=&quot;_blank&quot;&gt;linkedin-api-error-invalid-signature-in-iphone-starter-kit&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
The profile usage link here:&lt;br /&gt;
&lt;br /&gt;
https://developer.linkedin.com/documents/profile-api&lt;br /&gt;
&lt;br /&gt;
I&#39;m able to get the users email address which conflicts with official information from Linkedin&#39;s site (Depending on where you look) e.g. here a Linked in staff member explains that email is not given out to protect their users:&lt;br /&gt;
&lt;a href=&quot;https://developer.linkedin.com/forum/getting-started-linkedin-api-read-first&quot;&gt;https://developer.linkedin.com/forum/getting-started-linkedin-api-read-first&lt;/a&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://techrantnz.blogspot.com/feeds/925887746579465288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179119941609865452/925887746579465288' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179119941609865452/posts/default/925887746579465288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179119941609865452/posts/default/925887746579465288'/><link rel='alternate' type='text/html' href='http://techrantnz.blogspot.com/2012/09/the-linkedin-api-with-oauthstarterkit.html' title='The Linkedin API with OAuthStarterKit'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04854372329122768547</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179119941609865452.post-4016362053609427784</id><published>2012-08-18T22:05:00.001-07:00</published><updated>2012-08-19T04:21:53.669-07:00</updated><title type='text'>Come Get Me App - Submitted to the appstore</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;img align=&quot;left&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjq3XN1KHEqveToy7Foy4CfD5zA5TthoVLUmtvUYDNXzF33dKnWanf93___CHVF6wff4f6TD9fni-7MH9w-f7qKhxiR_X28foYGTi8uX9Tnp7eMSQCgEYMVAFmPxwuH7ckOfRcsbfd9/s400/comegetme.png&quot; /&gt;&lt;br /&gt;
So with Nick Flower on UI, Brad Hircock on marketing and myself coding we built an iPhone utility app called &#39;Come Get Me&#39;. A one click SMS builder for requesting pick up from your current location using CoreLocation (GPS/network triangulation).&lt;br /&gt;
&lt;br /&gt;
We got the domain name &lt;a href=&quot;http://comegetmeapp.com/&quot;&gt;comegetmeapp.com&lt;/a&gt; and thanks to Brad and Nick a nice splash page and twitter account set up.&lt;br /&gt;
&lt;br /&gt;
Potentially a useful SOS utility when needing a pick up in situations where it&#39;s difficult to make a phone call. E.G. a nightclub. Using Google reverse Geolocation it can fairly accurately autofill your location and provide a maps link in the SMS using the Google URL shortener API.&lt;br /&gt;
&lt;br /&gt;
We chucked some analytics into the app, as well as a feed back form, so we may change / add functionality and/or design depending on the popularity and demographics usage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Screenshots:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiU0-7U9rHFU9praUZCpoRl11SoJpCS9RbbmhiRt0ZqbwZyBWWXwI4ANJKcrsf0s9kaI56MMlL93TX7MosGEqwtNELlixGA-FWjZkhNnnSfvbXk7vrNrZappQeyjm9lvQ6sxOKWaW7H/s1600/IMG_2033.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img align=&quot;left&quot; border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiU0-7U9rHFU9praUZCpoRl11SoJpCS9RbbmhiRt0ZqbwZyBWWXwI4ANJKcrsf0s9kaI56MMlL93TX7MosGEqwtNELlixGA-FWjZkhNnnSfvbXk7vrNrZappQeyjm9lvQ6sxOKWaW7H/s320/IMG_2033.PNG&quot; width=&quot;213&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;img align=&quot;left&quot; border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5ieRTD1cNneRz_uQLTjJRnoneSU9WLGjaGOL8-Zkpm_n8CTx76C2-3XuyRZcdLs86Wj9gSgX5aiUk3hvW1FvIs9Tz5Pd2aFQu_IxHEbkdhdaKbYWnnwXGYemGKm9whbIsOEBqIHjV/s320/IMG_2033.PNG&quot; width=&quot;213&quot; /&gt;&lt;br /&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;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;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;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;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;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;br /&gt;&lt;/div&gt;
&lt;div&gt;
The copy to go on the app store description:&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: white; font-family: &#39;Lucida Grande&#39;, Geneva, Verdana, Arial; font-size: 12px; font-weight: bold;&quot;&gt;The app will help you to forget those awkward conversations where you have to explain where you are and how you got there, instead the app will do that for you. Come Get Me detects your location and remembers your favourites so all you have to do is tap a single button when you need to be picked up.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; font-family: &#39;Lucida Grande&#39;, Geneva, Verdana, Arial; font-size: 12px; font-weight: bold;&quot;&gt;If you find us a bug or have a suggestion for improvement let us know using the feedback button below.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; font-family: &#39;Lucida Grande&#39;, Geneva, Verdana, Arial; font-size: 12px; font-weight: bold;&quot;&gt;Click Come Get Me, sends a link to your location on Maps Instantly via SMS to your car owner (mate, Mum, Dad, girlfriend, office assistant) of choice.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; font-family: &#39;Lucida Grande&#39;, Geneva, Verdana, Arial; font-size: 12px; font-weight: bold;&quot;&gt;This is the first release, please give feedback on how we can improve this app!&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br style=&quot;background-color: white; font-family: &#39;Lucida Grande&#39;, Geneva, Verdana, Arial; font-size: 12px; font-weight: bold;&quot; /&gt;
&lt;span style=&quot;background-color: white; font-family: &#39;Lucida Grande&#39;, Geneva, Verdana, Arial; font-size: 12px; font-weight: bold;&quot;&gt;This app brought to you by Brad, Dave and Nick&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://techrantnz.blogspot.com/feeds/4016362053609427784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179119941609865452/4016362053609427784' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179119941609865452/posts/default/4016362053609427784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179119941609865452/posts/default/4016362053609427784'/><link rel='alternate' type='text/html' href='http://techrantnz.blogspot.com/2012/08/come-get-me-app-submitted-to-appstore.html' title='Come Get Me App - Submitted to the appstore'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04854372329122768547</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjq3XN1KHEqveToy7Foy4CfD5zA5TthoVLUmtvUYDNXzF33dKnWanf93___CHVF6wff4f6TD9fni-7MH9w-f7qKhxiR_X28foYGTi8uX9Tnp7eMSQCgEYMVAFmPxwuH7ckOfRcsbfd9/s72-c/comegetme.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179119941609865452.post-1345787550091162116</id><published>2012-08-18T01:54:00.004-07:00</published><updated>2012-08-18T20:41:56.550-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="macbookpro"/><title type='text'>Upgrading my Macbook Pro (Early 2011)</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Currently I run a Macbook Pro with 2 HD&#39;s (120 GB Intel 3GB/s SSD and a 700GB 7200 RPM with 4GB stock Apple RAM dual booted between OSX Mountain Lion and Windows 7.&lt;br /&gt;
&lt;br /&gt;
Today I ordered a few parts for my yearly upgrade.&lt;br /&gt;
&lt;br /&gt;
The Upgrade:&lt;br /&gt;
1. Chuck in 16 GB Ram - GSkill (1.5V) 2 x 8GB. $100 AUD - &lt;a href=&quot;http://www.amazon.com/gp/product/B007IWADX2/ref=as_li_qf_sp_asin_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B007IWADX2&amp;amp;linkCode=as2&amp;amp;tag=httptechrantn-20&quot;&gt;G.SKILL 16GB (2 x 8G) 204-Pin SO-DIMM DDR3 1333 (PC3 10600) Laptop Memory F3-10600CL9D-16GBSQ&lt;/a&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://www.assoc-amazon.com/e/ir?t=httptechrantn-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B007IWADX2&quot; style=&quot;border: none !important; margin: 0px !important;&quot; width=&quot;1&quot; /&gt;
&lt;br /&gt;
2. 512 GB Crucial M4 SSD in the main disk bay. $435 inc shipping &lt;a href=&quot;http://www.amazon.com/gp/product/B004W2JL3Y/ref=as_li_qf_sp_asin_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B004W2JL3Y&amp;amp;linkCode=as2&amp;amp;tag=httptechrantn-20&quot;&gt;Crucial 512 GB m4 2.5-Inch Solid State Drive SATA 6Gb/s CT512M4SSD2&lt;/a&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://www.assoc-amazon.com/e/ir?t=httptechrantn-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B004W2JL3Y&quot; style=&quot;border: none !important; margin: 0px !important;&quot; width=&quot;1&quot; /&gt;
 &lt;br /&gt;
3.&amp;nbsp;External case for 700GB $25&lt;br /&gt;
&lt;br /&gt;
The plan:&lt;br /&gt;
Move the 120GB to the opti-bay slot. As the CD Drive bay as a max through put of 3GBs on the 2011 mbp&#39;s.&lt;br /&gt;
Use Clonezilla to take a full image of the Bootcamp partition OSX and Win7 partitions on the 120GB&lt;br /&gt;
Chuck in the 512GB.&lt;br /&gt;
Restore the bootcamp osx/ntfs image to the 512GB. Create a partition for OSX and win7( Exfat), move all of the tools/apps/games that were installed on the 700GB to the respective drive.&lt;br /&gt;
Partition the 120 to 80GB HFS+ and 40 EXFat.&lt;br /&gt;
&lt;br /&gt;
As long as I can get the state logically the same as before I&#39;ll be in a good position, the 120GB is over a year old so I&#39;m happy to move my most critical work related tools to the new faster bigger SSD, demote the intel 120GB to a file storage device and use the 700 GB as my backup HD.&lt;br /&gt;
&lt;br /&gt;
OSX Will look like:&lt;br /&gt;
OS Drive - 128 GB - {XCode, Photoshop, Documents, Tools}&lt;br /&gt;
HFS Data - 128 GB - {iTunes, Downloads}&lt;br /&gt;
EXFat 80GB - {Media (TV Shows etc)}&lt;br /&gt;
&lt;br /&gt;
Windows 7 Will look like:&lt;br /&gt;
C:\ 128 GB NTFS {Visual Studio/Photoshop/ Anything that doesn&#39;t need registry key changes}&lt;br /&gt;
D:\ 128 GB EXFat {Steam games}&lt;br /&gt;
E:\ 40 GB ExFat {Downloads}&lt;/div&gt;
&lt;script src=&quot;http://wms.assoc-amazon.com/20070822/US/js/link-enhancer-common.js?tag=httptechrantn-20&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;
&lt;noscript&gt;
    &amp;amp;amp;lt;img src=&quot;http://wms.assoc-amazon.com/20070822/US/img/noscript.gif?tag=httptechrantn-20&quot; alt=&quot;&quot; /&amp;amp;amp;gt;
&lt;/noscript&gt;


&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://techrantnz.blogspot.com/feeds/1345787550091162116/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179119941609865452/1345787550091162116' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179119941609865452/posts/default/1345787550091162116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179119941609865452/posts/default/1345787550091162116'/><link rel='alternate' type='text/html' href='http://techrantnz.blogspot.com/2012/08/the-grand-macbook-pro-early-2011.html' title='Upgrading my Macbook Pro (Early 2011)'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04854372329122768547</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179119941609865452.post-920372933767705011</id><published>2011-08-24T17:40:00.000-07:00</published><updated>2015-02-19T17:30:12.061-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="builder"/><category scheme="http://www.blogger.com/atom/ns#" term="decorator"/><category scheme="http://www.blogger.com/atom/ns#" term="Design"/><category scheme="http://www.blogger.com/atom/ns#" term="engineering"/><category scheme="http://www.blogger.com/atom/ns#" term="objective-c"/><category scheme="http://www.blogger.com/atom/ns#" term="Patterns"/><category scheme="http://www.blogger.com/atom/ns#" term="Software"/><title type='text'>Decorator, Builder and Factory Design Patterns in Objective C</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Some people get confused with these 3 patterns (Like me), for you objective c programmers I&#39;ve rewritten the 3 patterns in example implementations and uploaded them to github, if you can do better, by all means tell me and I&#39;ll use your link instead.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://github.com/mrdavenz/DVDecorator&quot;&gt;Decorator&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/mrdavenz/DVBuilder&quot;&gt;Builder&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/mrdavenz/DVFactoryMethod&quot;&gt;Factory Method&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
All 3 patterns are similar in their achievement of decoupling code, but they have unique purposes and it&#39;s necessary to understand these differences, and for those with a visual brain, it&#39;s best to see the code alongside reading about them.&lt;br /&gt;
&lt;br /&gt;
If you&#39;re a learning cocoa/objective c programmer and you know the time savings incurred from good use of design patterns then you&#39;ll gain a lot of key notes from this book:&amp;nbsp;&lt;a href=&quot;http://www.amazon.com/gp/offer-listing/0321535022/ref=as_li_qf_sp_asin_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0321535022&amp;amp;linkCode=am2&amp;amp;tag=httptechrantn-20&quot;&gt;Cocoa Design Patterns&lt;/a&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://www.assoc-amazon.com/e/ir?t=httptechrantn-20&amp;amp;l=am2&amp;amp;o=1&amp;amp;a=0321535022&quot; height=&quot;1&quot; style=&quot;border: none !important; margin: 0px !important;&quot; width=&quot;1&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;iframe style=&quot;width:120px;height:240px;&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; scrolling=&quot;no&quot; frameborder=&quot;0&quot; src=&quot;//ws-na.amazon-adsystem.com/widgets/q?ServiceVersion=20070822&amp;OneJS=1&amp;Operation=GetAdHtml&amp;MarketPlace=US&amp;source=ac&amp;ref=qf_sp_asin_til&amp;ad_type=product_link&amp;tracking_id=httptechrantn-20&amp;marketplace=amazon&amp;region=US&amp;placement=0321535022&amp;asins=0321535022&amp;linkId=E27JSDARJEW4UMBM&amp;show_border=true&amp;link_opens_in_new_window=true&quot;&gt;
&lt;/iframe&gt;
&lt;br /&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/Decorator_pattern&quot;&gt;http://en.wikipedia.org/wiki/Decorator_pattern&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/Builder_pattern&quot;&gt;http://en.wikipedia.org/wiki/Builder_pattern&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/Factory_method_pattern&quot;&gt;http://en.wikipedia.org/wiki/Factory_method_pattern&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
But to see the value in these patterns, it&#39;s necessary to consider the alternatives and Anti-Patterns, and even make some real world mistakes...&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Decorator Pattern&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/mrdavenz/DVDecorator&quot;&gt;https://github.com/mrdavenz/DVDecorator&lt;/a&gt;&lt;br /&gt;
For those without git, the Decorator Pattern code is copy and paste-able at the bottom of this post.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Builder Pattern&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/mrdavenz/DVBuilder/tree/master/DVBuilderPattern&quot;&gt;https://github.com/mrdavenz/DVBuilder&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Here is a decent enough UML diagram of the Builder Pattern (Found here http://www.dofactory.com/Patterns/PatternBuilder.aspx)&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://www.dofactory.com/Patterns/Diagrams/builder.gif&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://www.dofactory.com/Patterns/Diagrams/builder.gif&quot; height=&quot;179&quot; width=&quot;424&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Also a pretty good description is found here: &lt;a href=&quot;http://www.codeproject.com/KB/architecture/Builder_Design_Pattern.aspx&quot;&gt;http://www.codeproject.com/KB/architecture/Builder_Design_Pattern.aspx&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
In the source example, you have a Shop (Director), which has a suite of Custom Builders available, they can be interchanged at run time. If the user asks for a Motorcycle, the Shop owner can simply tell the code to build one using the Builder, and the custom attributes for a motorbike are built. &lt;br /&gt;
&lt;br /&gt;
Without the builder pattern, a developer would simply have more code, and a higher dependence, which over time can reduce readability and discourage the reuse of the code. &lt;br /&gt;
&lt;br /&gt;
So depending on the context, the benefits of the Builder pattern are subtle, but worth using when applicable.&lt;br /&gt;
&lt;br /&gt;
Also don&#39;t confuse Builder with Factory:&lt;br /&gt;
http://en.wikipedia.org/wiki/Factory_method_pattern&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Factory Method&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/mrdavenz/DVFactoryMethod&quot; target=&quot;_blank&quot;&gt;https://github.com/mrdavenz/DVFactoryMethod&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
The Factory pattern can almost be seen as a simplified version of the Builder pattern.&lt;br /&gt;
&lt;br /&gt;
In the Factory pattern, the factory is in charge of creating various subtypes of an object depending on the needs.&lt;br /&gt;
&lt;br /&gt;
The user of a factory method doesn&#39;t need to know the exact subtype of that object. An example of a factory method createCar might return a Ford or a Honda typed object.&lt;br /&gt;
&lt;br /&gt;
In the Builder pattern, different subtypes are also created by a builder method, but the composition of the objects might differ within the same subclass.&lt;br /&gt;
&lt;br /&gt;
To continue the car example you might have a createCar builder method which creates a Honda-typed object with a 4 cylinder engine, or a Honda-typed object with 6 cylinders. The builder pattern allows for this finer granularity.&lt;br /&gt;
Often, designs start out using Factory Method (less complicated, more customizable, subclasses proliferate) and evolve toward Abstract Factory, Prototype, or Builder (more flexible, more complex) as the designer discovers where more flexibility is needed.&lt;br /&gt;
Sometimes creational patterns are complementary: Builder can use one of the other patterns to implement which components get built. Abstract Factory, Builder, and Prototype can use Singleton in their implementations.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
A great comparison on stackoverflow found here:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://stackoverflow.com/questions/757743/what-is-the-difference-between-builder-design-pattern-and-factory-design-pattern&quot; target=&quot;_blank&quot;&gt;what-is-the-difference-between-builder-design-pattern-and-factory-design-pattern&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
The Builder class is often used to build complex objects step by step, perhaps ordering matters. And is frequently used in conjunction with the Composite pattern, http://en.wikipedia.org/wiki/Composite_pattern, the common composite example in Cocoa UIKit is the use of UIView, where UIView has can have many subViews, that all have a common set of attributes, such as the Frame Size.&lt;br /&gt;
&lt;br /&gt;
In iOS this pattern is analogous to the&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://www.oodesign.com/images/stories/factory%20implementation.gif&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://www.oodesign.com/images/stories/factory%20implementation.gif&quot; height=&quot;281&quot; width=&quot;379&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Further reading:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://stackoverflow.com/questions/4768349/builder-vs-decorator-pattern&quot;&gt;builder-vs-decorator-pattern&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: csharp&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;#import &lt;foundation oundation.h=&quot;oundation.h&quot;&gt;

@interface Car : NSObject

- (NSString *) getDescription;
- (double) getPrice;

@end

&lt;/foundation&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=&quot;brush: csharp&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;#import &quot;Car.h&quot;

@implementation Car

- (id)init
{
    self = [super init];
    if (self) {
        // Initialization code here.
    }
    
    return self;
}

- (NSString *) getDescription{
    return @&quot;Car&quot;;
}

- (double) getPrice{
    return 99999.0;
}

@end

&lt;/span&gt;&lt;/pre&gt;
&lt;span style=&quot;font-size: xx-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: csharp&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;#import &quot;Car.h&quot;

@interface FamilyCar : Car{
    
@private
    Car *car;
}

- (id)initWithCar : (Car *) theCar;

@property (assign) Car *car;

@end

&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=&quot;brush: csharp&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;#import &quot;FamilyCar.h&quot;

@implementation FamilyCar

@synthesize car;

- (id)initWithCar : (Car *) theCar{
    self = [super init];
    if (self) {
        // Initialization code here.
        self.car = theCar;
    }
    
    return self;
}

- (NSString *) getDescription{

    return [NSString stringWithFormat: @&quot;%@::FamilyCar&quot;, self.car.getDescription];
}

- (double) getPrice{

    return  (self.car.getPrice + (self.car.getPrice * 0.1));
}

@end

&lt;/span&gt;&lt;/pre&gt;
&lt;span style=&quot;font-size: xx-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: csharp&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;#import &quot;Car.h&quot;

@interface Sunroof : Car{

@private
    Car *car;
}

- (id)initWithCar : (Car *) theCar;
- (NSString *) getDescription;
- (double) getPrice;

@property (assign) Car *car;

@end

&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=&quot;brush: csharp&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;#import &quot;Sunroof.h&quot;

#pragma mark -
#pragma mark Private Methods go here.

@interface Sunroof()

@end

#pragma mark -
#pragma mark Implementation

@implementation Sunroof

@synthesize car;

- (id)initWithCar : (Car *) theCar{
    self = [super init];
    if (self) {
        self.car = theCar;
    }
    
    return self;
}

- (NSString *) getDescription{
    
    return [NSString stringWithFormat: @&quot;%@::Sunroof&quot;, self.car.getDescription];
}

- (double) getPrice{
    
    return  (self.car.getPrice + (self.car.getPrice * 0.2));
}

@end

&lt;/span&gt;&lt;/pre&gt;
&lt;span style=&quot;font-size: xx-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: csharp&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;#import &quot;Car.h&quot;

@interface Airbag : Car{
    
@private
    Car *car;
}

@property (assign) Car *car;

- (id)initWithCar : (Car *) theCar;
- (NSString *) getDescription;
- (double) getPrice;

@end
&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=&quot;brush: csharp&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;#import &quot;Airbag.h&quot;

@implementation Airbag

@synthesize car;

- (id)initWithCar : (Car *) theCar{
    self = [super init];
    if (self) {

        self.car = theCar;
    }
    return self;
}

- (NSString *) getDescription{
    
    return [NSString stringWithFormat: @&quot;%@::Airbags&quot;, self.car.getDescription];
}

- (double) getPrice{

    return  (self.car.getPrice + 220.0);
}

@end
&lt;/span&gt;
&lt;/pre&gt;
&lt;br /&gt;
I chose to test the code in my App Delegate didFinishLaunchingWithOptions method:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: csharp&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    
    Car *standardCar = [[Car alloc] init];
    
    NSLog(@&quot;standardCar: %@ for $%.2f&quot;, standardCar.description, standardCar.getPrice);
    
    Car *carWithAirbags = [[Airbag alloc] initWithCar : standardCar];
    
    NSLog(@&quot;carWithAirbags: %@ for $%.2f&quot;, carWithAirbags.description, carWithAirbags.getPrice);
    
    Car *carWithEverythingElse = [[Sunroof alloc] initWithCar : [[FamilyCar alloc] initWithCar: carWithAirbags]];
    
    NSLog(@&quot;carWithEverythingElse: %@ for $%.2f&quot;, carWithEverythingElse.description, carWithEverythingElse.getPrice);
     
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    
    return YES;
}&lt;/span&gt;
&lt;/pre&gt;
&lt;br /&gt;
This example was inspired from the Java implementation here : http://java.dzone.com/articles/design-patterns-revisited-2-de&lt;br /&gt;
&lt;br /&gt;
For some further language agnostic discussion on the matter read here:&lt;br /&gt;
http://stackoverflow.com/questions/4768349/builder-vs-decorator-pattern&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;iframe frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://rcm.amazon.com/e/cm?t=httptechrantn-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as1&amp;amp;asins=0321535022&amp;amp;ref=qf_sp_asin_til&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr&quot; style=&quot;height: 240px; width: 120px;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techrantnz.blogspot.com/feeds/920372933767705011/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179119941609865452/920372933767705011' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179119941609865452/posts/default/920372933767705011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179119941609865452/posts/default/920372933767705011'/><link rel='alternate' type='text/html' href='http://techrantnz.blogspot.com/2011/08/decorator-builder-design-pattern-in.html' title='Decorator, Builder and Factory Design Patterns in Objective C'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04854372329122768547</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total><georss:featurename>Sydney NSW, Australia</georss:featurename><georss:point>-33.8689009 151.20709139999997</georss:point><georss:box>-34.2412264 150.78688789999995 -33.4965754 151.62729489999998</georss:box></entry><entry><id>tag:blogger.com,1999:blog-4179119941609865452.post-3068772362313944643</id><published>2011-08-07T21:48:00.000-07:00</published><updated>2012-08-18T20:00:19.463-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="analytic"/><category scheme="http://www.blogger.com/atom/ns#" term="cocoa"/><category scheme="http://www.blogger.com/atom/ns#" term="iPhone"/><category scheme="http://www.blogger.com/atom/ns#" term="net insight"/><category scheme="http://www.blogger.com/atom/ns#" term="objective-c"/><title type='text'>Net Insight Web Analytics on native iPhone</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
If anyone needs the code, to post to their web analytics data store, Its on github.&lt;br /&gt;
https://github.com/mrdavenz/DVDNetInsightTracking&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://techrantnz.blogspot.com/feeds/3068772362313944643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179119941609865452/3068772362313944643' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179119941609865452/posts/default/3068772362313944643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179119941609865452/posts/default/3068772362313944643'/><link rel='alternate' type='text/html' href='http://techrantnz.blogspot.com/2011/08/using-net-insight-web-analytics-in.html' title='Net Insight Web Analytics on native iPhone'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04854372329122768547</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179119941609865452.post-3443078058402115856</id><published>2011-06-21T22:50:00.000-07:00</published><updated>2011-06-21T23:45:05.529-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="iPhone"/><category scheme="http://www.blogger.com/atom/ns#" term="multiple buttons"/><category scheme="http://www.blogger.com/atom/ns#" term="UIButton"/><category scheme="http://www.blogger.com/atom/ns#" term="UINavigatonBar"/><category scheme="http://www.blogger.com/atom/ns#" term="UIToolbar"/><category scheme="http://www.blogger.com/atom/ns#" term="XCode"/><title type='text'>Multiple UIButtons on the UINavigationBar</title><content type='html'>I needed multiple buttons on the rightBarButtonItem in my navigation bar.&lt;br /&gt;
&lt;br /&gt;
Below is the code I used, notice that I use a subclass of UIToolbar, but using the UIToolbar directly will render the same result.&lt;br /&gt;
&lt;br /&gt;
I originally got the idea from &lt;a href=&quot;http://osmorphis.blogspot.com/2009/05/multiple-buttons-on-navigation-bar.html&quot;&gt;HERE&lt;/a&gt; but it wasn&#39;t exactly what I needed, so I modified it to fit my needs.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhj1uoQcwEmEeofe38-j4OAkdDoU-DvpmMkskKycIUau5jtzgmuxHyfSMFQE4c2iTjZjgQJQv7rP__49Sc_1x5-og3FcyLvnedydLtjV64zBVm9kB_zBivXe2XZ-aqX5LbDR_iF5HoD/s1600/Screen+shot+2011-06-22+at+3.47.04+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;clear:left; float:left;margin-right:1em; margin-bottom:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;80&quot; width=&quot;324&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhj1uoQcwEmEeofe38-j4OAkdDoU-DvpmMkskKycIUau5jtzgmuxHyfSMFQE4c2iTjZjgQJQv7rP__49Sc_1x5-og3FcyLvnedydLtjV64zBVm9kB_zBivXe2XZ-aqX5LbDR_iF5HoD/s400/Screen+shot+2011-06-22+at+3.47.04+PM.png&quot; /&gt;&lt;/a&gt;&lt;/div&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;pre class=&quot;brush: csharp&quot;&gt;// Comment
-(void)viewWillAppear:(BOOL)animated;
{
 [super viewWillAppear:animated];
    
    self.navigationController.navigationBar.topItem.title = @&quot;Contact&quot;;
    
    // create a toolbar to have two buttons in the right
    UICustomToolbar* tools = [[UICustomToolbar alloc] initWithFrame:CGRectMake(0.0, 0.0, 113.0, 44.01)]; 
    
    tools.alpha = 0.5;
    
    [tools setBarStyle: UIBarStyleBlackTranslucent];
    
    [tools setTranslucent: YES];
    
    [tools setTintColor: self.navigationController.navigationBar.tintColor];
    
    // create the array to hold the buttons, which then gets added to the toolbar
    NSMutableArray* buttons = [[NSMutableArray alloc] initWithCapacity:3];

    UIBarButtonItem *callUs =  [[UIBarButtonItem alloc] initWithTitle:@&quot;Call&quot;
                                                                style:UIBarButtonItemStylePlain
                                                               target:self
                                                               action:@selector(dial:)];
    
    callUs.style = UIBarButtonItemStyleBordered;
    
    [buttons addObject:callUs];
    [callUs release];
    
    // create a standard &quot;send&quot; button
    UIBarButtonItem *send =  [[UIBarButtonItem alloc] initWithTitle:@&quot;Send&quot;
                                                              style:UIBarButtonItemStylePlain
                                                             target:self
                                                             action:@selector(send:)];
    
    send.style = UIBarButtonItemStyleBordered;
    
    [buttons addObject: send];
    [send release];
    
    // stick the buttons in the toolbar
    [tools setItems:buttons animated:NO];
    
    [buttons release];
    
    // and put the toolbar in the nav bar
    self.navigationController.navigationBar.topItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:tools];
    [tools release];
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://techrantnz.blogspot.com/feeds/3443078058402115856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179119941609865452/3443078058402115856' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179119941609865452/posts/default/3443078058402115856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179119941609865452/posts/default/3443078058402115856'/><link rel='alternate' type='text/html' href='http://techrantnz.blogspot.com/2011/06/commentpublic-class-testing-public.html' title='Multiple UIButtons on the UINavigationBar'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04854372329122768547</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhj1uoQcwEmEeofe38-j4OAkdDoU-DvpmMkskKycIUau5jtzgmuxHyfSMFQE4c2iTjZjgQJQv7rP__49Sc_1x5-og3FcyLvnedydLtjV64zBVm9kB_zBivXe2XZ-aqX5LbDR_iF5HoD/s72-c/Screen+shot+2011-06-22+at+3.47.04+PM.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179119941609865452.post-8395648194635416955</id><published>2011-05-08T22:24:00.000-07:00</published><updated>2011-05-08T23:11:01.784-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="intel"/><category scheme="http://www.blogger.com/atom/ns#" term="macbookpro"/><category scheme="http://www.blogger.com/atom/ns#" term="optibay"/><category scheme="http://www.blogger.com/atom/ns#" term="ssd"/><title type='text'>Optibay for the Macbook pro (Early 2011) 15&quot; 2.2Ghz I7</title><content type='html'>Was bored on Sunday, so made this plan for a minor upgrade... which I seem to find myself doing every year around this time (When winter starts) a complete overhaul of my current setup, which is a Dual boot, Macosx 10.6.3/winxpsp3 set up, running a 2009 macbookpro 13&quot; for gaming (Portal 2, Alien Swarm, Company of Heroes, Crysis2, etc.) and personal development with iPhone using xCode/Photoshop CS5/Blender, which runs a Core 2 Duo 2.26Ghz with 4 Gigs of RAM, and a NVIDIA GeForce 9400M GPU with 256MB of dedicated video memory...&lt;br /&gt;&lt;br /&gt;Which is pretty good, but then again it&#39;s not good enough to play Crysis 2 on a decent resolution, and I needed this fixed...wanted this fixed. So what started out as a bit of a browse on the apple store, which in turn a browse on ebay/amazon/alternative mac reseller stores, which in turn an entire evening reading hardware reviews and watching unboxing videos on youtube, in turn a purchase of a 2011 Macbook Pro 15&quot; 2.2 ghz model New for $2169.99 from a reseller with a warehouse in Sydney to ship from.&lt;br /&gt;&lt;br /&gt;After a few beers, I successfully pushed the guilt and logical/rational thinking from my head that I don&#39;t need it and it&#39;s a waste of time and money, and pushed on, researching SSD&#39;s and further upgrades for the beast I&#39;d found myself buying.&lt;br /&gt;&lt;br /&gt;I learnt of a Optibay, a add on to use your redundant optical Bay in the MBP, for a second HD spot where my 750GB HD could reside, while the Intel 120GB SSD would take the main spot and be used for the booting of the operating system and running of mission critical applications like Call of Duty: MW 2 and xCode4. After reading the &#39;how-to guides&#39; for performing this addition, I set out the following layout for my new setup, to for perhaps at least 12 months provide me with an edge over my peers and friends, and allow me some bragging opportunity at LANs, of my grunty SSD and reasonably powerful macbook pro.&lt;br /&gt;&lt;br /&gt;Partitions&lt;br /&gt;&lt;br /&gt;HD (700GB) (Optibay, replaces the Optical Disc).&lt;br /&gt;NTFS    100GB&lt;br /&gt;FAT32    100GB&lt;br /&gt;MAC FS    500GB&lt;br /&gt;&lt;br /&gt;HD (100GB) (Replaces the 750GB from MBP 15&quot;) Intel 120&lt;br /&gt;FAT32    32GB    BOOTCAMP + WINDOWS XPSP3&lt;br /&gt;Mac FS     68GB    MACOSX 10.6.3&lt;br /&gt;&lt;br /&gt;Directory Structure of SSD:&lt;br /&gt;&lt;br /&gt;MAC FS&lt;br /&gt;- MACOSX&lt;br /&gt;- Portal 2&lt;br /&gt;- CS:S&lt;br /&gt;- XCODE 4&lt;br /&gt;- Development Folder (Includes Build Directories).&lt;br /&gt;- iTunes.&lt;br /&gt;- Blender&lt;br /&gt;- Firefox&lt;br /&gt;- Photoshop FAT32:&lt;br /&gt;- Windows&lt;br /&gt;- Crysis 2&lt;br /&gt;- Dark Space 2&lt;br /&gt;- Alien Swarm&lt;br /&gt;&lt;br /&gt;Directory Structure of HD&lt;br /&gt;&lt;br /&gt;NTFS&lt;br /&gt;- Windows Installs.&lt;br /&gt;&lt;br /&gt;FAT32&lt;br /&gt;- Files to r/w between OS&#39;&lt;br /&gt;&lt;br /&gt;MAC FS&lt;br /&gt;- Movies&lt;br /&gt;- Videos&lt;br /&gt;- Installers&lt;br /&gt;   - XCode Installs&lt;br /&gt;   - Game Installs&lt;br /&gt;- Downloads&lt;br /&gt;- Pictures&lt;br /&gt;- Documents&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Parts&lt;br /&gt;1. (Early 2011) Macbook Pro 15” I7 2.2 Quad Core, AMD Radeon Uber Card. New $2169.00 AUD Free Delivery. EBay (Sydney Supplier)&lt;br /&gt;2. Opti-bay (Fenzi Brand) $20.00 Free Delivery (Hong Kong).&lt;br /&gt;3. SSD (Intel 320) 120GB, $300.00, Free Delivery iibuy.com.au.&lt;br /&gt;&lt;br /&gt;Sites for reference to use the Optical Drive as a secondary 2.5” HD slot:&lt;br /&gt;&lt;a href=&quot;http://osxdaily.com/2010/05/19/install-an-ssd-into-the-optical-drive-slot-on-a-macbook-pro&quot;&gt;http://osxdaily.com/2010/05/19/install-an-ssd-into-the-optical-drive-slot-on-a-macbook-pro&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://lifehacker.com/5541774/how-to-install-a-solid+state-drive-in-your-macbook&quot;&gt;http://lifehacker.com/5541774/how-to-install-a-solid+state-drive-in-your-macbook&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.mactalk.com.au/24/98605-installing-ssd-optibay.html&quot;&gt;http://www.mactalk.com.au/24/98605-installing-ssd-optibay.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I now wait for the goods to arrive, and look forward to a successful custom set up of my new Macbook Pro. More posts to come</content><link rel='replies' type='application/atom+xml' href='http://techrantnz.blogspot.com/feeds/8395648194635416955/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179119941609865452/8395648194635416955' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179119941609865452/posts/default/8395648194635416955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179119941609865452/posts/default/8395648194635416955'/><link rel='alternate' type='text/html' href='http://techrantnz.blogspot.com/2011/05/optibay-for-macbook-pro-early-2011-15.html' title='Optibay for the Macbook pro (Early 2011) 15&quot; 2.2Ghz I7'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04854372329122768547</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179119941609865452.post-8075582292626172884</id><published>2011-04-28T06:32:00.000-07:00</published><updated>2011-04-28T06:37:54.687-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ABRecordRef"/><category scheme="http://www.blogger.com/atom/ns#" term="iOS"/><category scheme="http://www.blogger.com/atom/ns#" term="iPhone"/><title type='text'>iOS Contact Details in App</title><content type='html'>Made an update to a game I wrote ages ago, and added my contact details: Such that the user can add your details to their Contacts Address book, aswell as call and email, and URL links to my Twitter and mobile Linkedin... Some handy code examples in here, that took me a while to make sense of..That ABRecordRef stuff is weird.&lt;br /&gt;&lt;br /&gt;Just add #import &lt;AddressBook/AddressBook.h&gt;&lt;br /&gt;#import &lt;AddressBookUI/AddressBookUI.h&gt;&lt;br /&gt;&lt;br /&gt;Suss out the syntax for a ABRecordRef and then present the contact thing modally.. done.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;#import &quot;CreditsViewController.h&quot;&lt;br /&gt;#import &quot;WebViewController.h&quot;&lt;br /&gt;&lt;br /&gt;@interface CreditsViewController()&lt;br /&gt; &lt;br /&gt;- (void) sendMail;&lt;br /&gt;&lt;br /&gt;@end&lt;br /&gt;&lt;br /&gt;@implementation CreditsViewController&lt;br /&gt;&lt;br /&gt;// The designated initializer.  Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.&lt;br /&gt;&lt;br /&gt;- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {&lt;br /&gt;    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];&lt;br /&gt;    if (self) {&lt;br /&gt;        // Custom initialization.&lt;br /&gt;  self.navigationItem.title = @&quot;Credits&quot;;&lt;br /&gt;    }&lt;br /&gt;    return self;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.&lt;br /&gt;- (void)viewDidLoad {&lt;br /&gt;    [super viewDidLoad];&lt;br /&gt;}&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;// Override to allow orientations other than the default portrait orientation.&lt;br /&gt;- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {&lt;br /&gt;    // Return YES for supported orientations.&lt;br /&gt;    return (interfaceOrientation == UIInterfaceOrientationPortrait);&lt;br /&gt;}&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;- (void) viewWillAppear:(BOOL)animated{&lt;br /&gt; [super viewWillAppear:animated];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (void)didReceiveMemoryWarning {&lt;br /&gt;    // Releases the view if it doesn&#39;t have a superview.&lt;br /&gt;    [super didReceiveMemoryWarning];&lt;br /&gt;    &lt;br /&gt;    // Release any cached data, images, etc. that aren&#39;t in use.&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (void)viewDidUnload {&lt;br /&gt;    [super viewDidUnload];&lt;br /&gt;    // Release any retained subviews of the main view.&lt;br /&gt;    // e.g. self.myOutlet = nil;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;- (void)dealloc {&lt;br /&gt; [navigationPicker release];&lt;br /&gt;    [super dealloc];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#pragma mark -&lt;br /&gt;#pragma mark IBAction&lt;br /&gt;&lt;br /&gt;- (IBAction) btnClickContact : (id) sender{&lt;br /&gt; UIAlertView *alertBox = [[UIAlertView alloc] initWithTitle: @&quot;&quot;&lt;br /&gt;                message:@&quot;&quot; &lt;br /&gt;               delegate:self&lt;br /&gt;            cancelButtonTitle:@&quot;Cancel&quot;&lt;br /&gt;            otherButtonTitles:@&quot;Call&quot;, @&quot;Email&quot;, @&quot;Add to Contacts&quot;, @&quot;Linkedin&quot;, @&quot;Twitter&quot;, nil ];&lt;br /&gt; [alertBox show];&lt;br /&gt; [alertBox release];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#pragma mark -&lt;br /&gt;#pragma mark UIAlertViewDelegate&lt;br /&gt;&lt;br /&gt;- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{&lt;br /&gt; &lt;br /&gt; switch (buttonIndex) {&lt;br /&gt;  case 0:&lt;br /&gt;   &lt;br /&gt;   break;&lt;br /&gt;  case 1:&lt;br /&gt;   [[UIApplication sharedApplication] openURL:&lt;br /&gt;    [NSURL URLWithString:@&quot;tel:+61413393190&quot;]];&lt;br /&gt;   break;&lt;br /&gt;  case 2:&lt;br /&gt;   [self sendMail];&lt;br /&gt;   break;&lt;br /&gt;  case 3:&lt;br /&gt;   [self addNewContact];&lt;br /&gt;&lt;br /&gt;   break;&lt;br /&gt;  case 4:&lt;br /&gt;   NSLog(@&quot;&quot;);&lt;br /&gt;   WebViewController *aWebView = [[WebViewController alloc] initWithNibName: nil&lt;br /&gt;                     bundle: nil&lt;br /&gt;                     webURL: @&quot;http://m.linkedin.com/members/48410032/profile&quot;&lt;br /&gt;                   webTitle: @&quot;LinkedIn&quot;];&lt;br /&gt;   [self.navigationController pushViewController: aWebView animated:YES];&lt;br /&gt;   [aWebView release];&lt;br /&gt;   break;&lt;br /&gt;  case 5:&lt;br /&gt;   NSLog(@&quot;&quot;);&lt;br /&gt;   WebViewController *webViewTwitter = [[WebViewController alloc] initWithNibName: nil&lt;br /&gt;                     bundle: nil&lt;br /&gt;                     webURL: @&quot;http://www.twitter.com/daveNZdeveloper&quot;&lt;br /&gt;                      webTitle: @&quot;Twitter&quot;];&lt;br /&gt;   [self.navigationController pushViewController: webViewTwitter &lt;br /&gt;             animated: YES];&lt;br /&gt;   [webViewTwitter release];&lt;br /&gt;   break;&lt;br /&gt;  default:&lt;br /&gt;   break;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (void)alertViewCancel:(UIAlertView *)alertView{&lt;br /&gt; NSLog(@&quot;cancel&quot;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#pragma mark -&lt;br /&gt;#pragma mark Private Methods&lt;br /&gt;&lt;br /&gt;- (void) sendMail{&lt;br /&gt; &lt;br /&gt; NSString * to_s = @&quot;dvd.nzl@gmail.com&quot; ;&lt;br /&gt; NSString * subject_s = @&quot;Contact from using Green Block Game&quot; ;&lt;br /&gt; NSString * body_s = @&quot;&quot; ;&lt;br /&gt; &lt;br /&gt; NSString *mailString = [NSString stringWithFormat:@&quot;mailto:?to=%@&amp;subject=%@&amp;body=%@&quot;,&lt;br /&gt;       [to_s stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding],&lt;br /&gt;       [subject_s stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding],&lt;br /&gt;       [body_s stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]];&lt;br /&gt; &lt;br /&gt; [[UIApplication sharedApplication] openURL:[NSURL URLWithString:mailString]];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (void)newPersonViewController:(ABNewPersonViewController *)newPersonViewController &lt;br /&gt;    didCompleteWithNewPerson:(ABRecordRef)person{&lt;br /&gt; NSLog(@&quot;Complete&quot;);&lt;br /&gt; [navigationPicker dismissModalViewControllerAnimated: YES];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (void) addNewContact{&lt;br /&gt; &lt;br /&gt; ABRecordRef aRecord = ABPersonCreate(); &lt;br /&gt; &lt;br /&gt; CFErrorRef anError = NULL;&lt;br /&gt; &lt;br /&gt; ABRecordSetValue(aRecord, kABPersonFirstNameProperty, CFSTR(&quot;Dave&quot;), &amp;anError);&lt;br /&gt; ABRecordSetValue(aRecord, kABPersonLastNameProperty, CFSTR(&quot;van Dugteren&quot;), &amp;anError);&lt;br /&gt; ABRecordSetValue(aRecord, kABPersonOrganizationProperty, CFSTR(&quot;Senior iPhone Developer&quot;), &amp;anError);&lt;br /&gt;&lt;br /&gt; ABMutableMultiValueRef multiHome = ABMultiValueCreateMutable(kABMultiDictionaryPropertyType);&lt;br /&gt; &lt;br /&gt; NSMutableDictionary *addressDictionary = [[NSMutableDictionary alloc] init];&lt;br /&gt; &lt;br /&gt; [addressDictionary setObject:@&quot;Sydney&quot; forKey:(NSString *)kABPersonAddressCityKey];&lt;br /&gt; &lt;br /&gt; [addressDictionary setObject:@&quot;NSW&quot; forKey:(NSString *)kABPersonAddressStateKey];&lt;br /&gt; &lt;br /&gt; [addressDictionary setObject:@&quot;2007&quot; forKey:(NSString *)kABPersonAddressZIPKey];&lt;br /&gt; &lt;br /&gt; [addressDictionary setObject:@&quot;Australia&quot; forKey:(NSString *)kABPersonAddressCountryCodeKey];&lt;br /&gt; &lt;br /&gt; [addressDictionary setObject:@&quot;Australia&quot; forKey:(NSString *)kABPersonAddressCountryKey];&lt;br /&gt; &lt;br /&gt; ABMultiValueAddValueAndLabel(multiHome, addressDictionary, kABHomeLabel, NULL);&lt;br /&gt; &lt;br /&gt; ABRecordSetValue(aRecord, kABPersonAddressProperty, multiHome, &amp;anError);&lt;br /&gt; &lt;br /&gt; ABMutableMultiValueRef homePage = ABMultiValueCreateMutable(kABMultiStringPropertyType);&lt;br /&gt; ABMultiValueAddValueAndLabel(homePage, CFSTR(&quot;www.kiappsta.com&quot;), kABPersonHomePageLabel, NULL);&lt;br /&gt; ABMultiValueAddValueAndLabel(homePage, CFSTR(&quot;www.davevandugteren.net&quot;), kABPersonHomePageLabel, NULL);&lt;br /&gt; ABMultiValueAddValueAndLabel(homePage, CFSTR(&quot;http://www.linkedin.com/in/davidvandugteren&quot;), kABPersonHomePageLabel, NULL);&lt;br /&gt; ABRecordSetValue(aRecord, kABPersonURLProperty, homePage, NULL);&lt;br /&gt; CFRelease(homePage);&lt;br /&gt; &lt;br /&gt; ABMutableMultiValueRef phoneNumber = ABMultiValueCreateMutable(kABMultiStringPropertyType);&lt;br /&gt; ABMultiValueAddValueAndLabel(phoneNumber, CFSTR(&quot;+6104 133 93190&quot;), kABPersonPhoneMobileLabel, NULL);&lt;br /&gt; ABMultiValueAddValueAndLabel(phoneNumber, CFSTR(&quot;+6104 133 93190&quot;), kABPersonPhoneIPhoneLabel, NULL);&lt;br /&gt; ABRecordSetValue(aRecord, kABPersonPhoneProperty, phoneNumber, NULL);&lt;br /&gt; CFRelease(phoneNumber);&lt;br /&gt; &lt;br /&gt; ABMutableMultiValueRef multiEmail = ABMultiValueCreateMutable(kABMultiStringPropertyType);&lt;br /&gt; ABMultiValueAddValueAndLabel(multiEmail, CFSTR(&quot;dvd.nzl@gmail.com&quot;), kABWorkLabel, NULL);&lt;br /&gt; ABRecordSetValue(aRecord, kABPersonEmailProperty, multiEmail, &amp;anError);&lt;br /&gt; CFRelease(multiEmail);&lt;br /&gt; &lt;br /&gt; UIImageView *imageView = [[UIImageView alloc] initWithImage: [UIImage imageNamed: @&quot;me.png&quot;]];&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; ABPersonSetImageData(aRecord, (CFDataRef) (UIImageJPEGRepresentation([imageView image], 1.0f)), &amp;anError);&lt;br /&gt; &lt;br /&gt; if (anError != NULL) { &lt;br /&gt;  NSLog(@&quot;error while creating..&quot;);&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; ABNewPersonViewController *picker = [[ABNewPersonViewController alloc] init];&lt;br /&gt; picker.newPersonViewDelegate = self;&lt;br /&gt; &lt;br /&gt; picker.displayedPerson = aRecord;&lt;br /&gt; &lt;br /&gt; if (navigationPicker == nil)&lt;br /&gt;  navigationPicker = [[UINavigationController alloc] initWithRootViewController:picker];&lt;br /&gt; &lt;br /&gt; [self presentModalViewController:navigationPicker animated:YES];&lt;br /&gt; &lt;br /&gt; [picker release];&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;And the interface:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#import &lt;UIKit/UIKit.h&gt;&lt;br /&gt;#import &lt;AddressBook/AddressBook.h&gt;&lt;br /&gt;#import &lt;AddressBookUI/AddressBookUI.h&gt;&lt;br /&gt;&lt;br /&gt;@interface CreditsViewController : UIViewController &lt;UIAlertViewDelegate, UIWebViewDelegate, ABNewPersonViewControllerDelegate&gt; {&lt;br /&gt; UIWebView *webView;&lt;br /&gt; UINavigationController *navigationPicker;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (IBAction) btnClickContact : (id) sender;&lt;br /&gt;- (void) addNewContact;&lt;br /&gt;@end</content><link rel='replies' type='application/atom+xml' href='http://techrantnz.blogspot.com/feeds/8075582292626172884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179119941609865452/8075582292626172884' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179119941609865452/posts/default/8075582292626172884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179119941609865452/posts/default/8075582292626172884'/><link rel='alternate' type='text/html' href='http://techrantnz.blogspot.com/2011/04/ios-contact-details-in-app.html' title='iOS Contact Details in App'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04854372329122768547</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179119941609865452.post-7630256794655145904</id><published>2010-02-24T15:05:00.000-08:00</published><updated>2010-02-24T15:16:22.371-08:00</updated><title type='text'>So It made it to the app store.</title><content type='html'>Originally I submitted the app as a &#39;free&#39; game. But recieved the following reply not 24 hours later:&lt;br /&gt;&lt;br /&gt;&lt;pre wrap=&quot;&quot;&gt;&quot;Thank you for submitting Green Block Game to the App Store.  We&#39;ve reviewed Green Block Game and determined that we cannot post your application because it appears to contain features that bear a resemblance to a well-known third-party trademark, Tetris.&quot;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;font-family: times new roman;&quot;&gt;So after doing some whinging on the iphone dev sdk forums, I learnt that making it a paid app seems to move the resposibility of the legal mumbo jumbo to the developer, which I did. Meaning my app is now officially on the store. Potentially setting a precedence for other developers looking to make a quick buck to outdo my game, Pentix, iPentris and some of the other tetris inspired games. I dont really mind as the whole project was little more than a learning experience to see what it was like, not to mention a CV update, (I want to work overseas, so mobile software development is something I&#39;ve decided to get involved in).&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;font-family: times new roman;&quot;&gt;I mean you don&#39;t have to be a genius to look at the popularity of the 25 year old game Tetris and derive that sometimes taking an existing idea and improving it is better than starting from the ground u&lt;span style=&quot;font-family: times new roman;&quot;&gt;p&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;. &lt;br /&gt;&lt;/div&gt;&lt;pre wrap=&quot;&quot;&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://techrantnz.blogspot.com/feeds/7630256794655145904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179119941609865452/7630256794655145904' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179119941609865452/posts/default/7630256794655145904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179119941609865452/posts/default/7630256794655145904'/><link rel='alternate' type='text/html' href='http://techrantnz.blogspot.com/2010/02/so-it-made-it-to-app-store.html' title='So It made it to the app store.'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04854372329122768547</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>