<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[Parveen Kaler]]></title>
  <link href="http://kaler.github.com/atom.xml" rel="self"/>
  <link href="http://kaler.github.com/"/>
  <updated>2013-01-22T00:28:50-08:00</updated>
  <id>http://kaler.github.com/</id>
  <author>
    <name><![CDATA[Parveen Kaler]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[PolyglotConf Vancouver 2012]]></title>
    <link href="http://kaler.github.com/blog/2012/04/08/polyglotconf-vancouver-2012/"/>
    <updated>2012-04-08T20:31:57-07:00</updated>
    <id>http://kaler.github.com/blog/2012/04/08/polyglotconf-vancouver-2012</id>
    <content type="html"><![CDATA[<p>The problem with most technology conferences is that they devolve into cliques.</p>

<p>Game developers don&#8217;t interact with mobile developers.  Mobile developers don&#8217;t interact with web developers.  Web developers don&#8217;t interact with systems developers.  And on and on it goes.</p>

<p><a href="http://www.polyglotconf.com/">PolyglotConf</a> is a one day unconference designed to get 200 of the smartest developers around in the same room.  An uncoference is a participant-driven, self-organizing meeting.  The people that show the day of the conference are the ones that get drive the agenda.  The job of the organizers is to facilitate.</p>

<h3>PolyglotConf Vancouver 2012</h3>

<pre><code>SFU Harbour Centre
555 West Hastings
Vancouver, BC
Saturday, May 26, 2012
</code></pre>

<h3>Conference Day</h3>

<pre><code> 8:30AM - 9:00AM : Registration
 9:00AM - 9:15AM : Introduction
 9:15 - 9:45AM : Final Session Selection
 9:45AM  - 12:30PM   : Morning Sessions
 12:30PM - 2:00PM : Lunch (out on the town)
 2:00 - 5:15PM : Afternoon Sessions
 5:15pm - 5:30PM : Closing Session
 7:30 - Until You Drop   : PARTY!
</code></pre>

<h3>Tutorials</h3>

<p>One of the sponsors for PolyglotConf is Github.  <a href="http://git-scm.com/">Git</a> is a distributed version control system.  It makes it easy to branch and then merge projects across many members of a team that may be distributed throughout the world.  <a href="https://github.com/about">Github</a> is thee place to put your central git hub.</p>

<p>Github will be putting on a full day git tutorial on that Friday.  You will want to attend if you have used Subversion or Perforce in the past and git kind of confuses you.  It will also be a great tutorial if you haven&#8217;t used source control at all.</p>

<p>There are a couple other tuturials on Erlang and HTTP servers that are also scheduled.</p>

<p><a href="http://www.polyglotconf.com/tutorials/">Tutorial List</a></p>

<h3>Session Suggestion Forums</h3>

<p>There is a <a href="http://polyglotconf.uservoice.com/forums/156120-session-suggestions">session suggestion forum</a>.  I can speak about Grand Central Dispath oniOS.  However, I&#8217;d like to see someone from the game development community talk about concurrency on the Sony PS3.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Continuous Deployment for iOS Apps]]></title>
    <link href="http://kaler.github.com/blog/2012/02/04/continuous-deployment-for-ios-apps/"/>
    <updated>2012-02-04T18:26:26-08:00</updated>
    <id>http://kaler.github.com/blog/2012/02/04/continuous-deployment-for-ios-apps</id>
    <content type="html"><![CDATA[<p>In Lean Manufacturing, inventory is waste.  Inventory is product that you have built but have to store because you can&#8217;t get it into the hands of customers.</p>

<p>There is a similar concept in Lean Development.  Any code that has been written but is not in the hands of users is inventory.  And inventory is waste.</p>

<p>Continuous Deployment is the process of getting code that is written in to the hands of users as quickly as possible.  It is one layer of discipline on top of <a href="http://en.wikipedia.org/wiki/Continuous_integration">Continuous Integration</a>.</p>

<p>Continuous Deployment is difficult for iPhone Apps because of the App Store approval process.  It is also difficult to automatically test and code sign Apps.  There are a number of tools to help with this process: KIF, Github, Jenkins, xcodebuild, and TestFlight.</p>

<h3>Integration Tests</h3>

<p>Square has a great integration testing framework called <a href="https://github.com/square/KIF">KIF</a>: Keep It Functional.  The source code is available on Github.  There is also a great <a href="http://groups.google.com/group/kif-framework">Google Group</a>.  The README file should have enough information to get KIF up and going with your Xcode project.</p>

<p>KIF uses the <a href="https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/iPhoneAccessibility/Accessibility_on_iPhone/Accessibility_on_iPhone.html">accessibility functionality</a> of iOS to to automatically test the UI.  You do make your App accessible, right?  Right.</p>

<p>Once you have accessibility labels for your controls you can write test cases that automatically exercises the UI.</p>

<h3>Github</h3>

<p>You should be using <a href="http://git-scm.com/">git</a> for source code revision control.  And if you are using git then you should be storing your code at <a href="https://github.com/">Github</a>.  Github has a number of <a href="http://help.github.com/post-receive-hooks/">web hooks</a> that will POST to a URL when code is pushed to a repository.</p>

<p>This web hook can be pointed at Jenkins.</p>

<h3>Jenkins</h3>

<p><a href="http://jenkins-ci.org/">Jenkins</a> (formerly Hudson) is a continuous integration server.  My favourite way to install Jenkins on a Mac is to use <a href="http://mxcl.github.com/homebrew/">Homebrew</a>.</p>

<pre><code>$ brew install jenkins
$ java -jar /usr/local/Cellar/jenkins/1.447/lib/jenkins.war
</code></pre>

<p>Yeah, I know, Java.  Bear with it.</p>

<p>Now you need to tell Jenkins to execute a bash script for every build.</p>

<div><script src='https://gist.github.com/1741924.js'></script>
<noscript><pre><code>#!/bin/sh

WORKSPACE=&quot;$(pwd)/XXXXX.xcodeproj/project.xcworkspace&quot;
CONFIG=&quot;Ad Hoc&quot;
SCHEME=&quot;XXXXX&quot;
SDK=&quot;iphoneos5.0&quot;
TARGET=&quot;XXXX&quot;
BUILDDIR=&quot;$(pwd)/build/Ad Hoc-iphoneos&quot;
APPNAME=&quot;XXXX&quot;
DEVELOPER_NAME=&quot;iPhone Distribution: XXXXXXXX&quot;
PROVISIONING_PROFILE=&quot;$(pwd)/Provisioning/XXXXX.mobileprovision&quot;

xcodebuild -alltargets clean
xcodebuild -sdk &quot;$SDK&quot; -configuration &quot;$CONFIG&quot;
xcrun -sdk iphoneos PackageApplication -v &quot;$BUILDDIR/$APPNAME.app&quot; -o &quot;$(pwd)/$APPNAME.ipa&quot; -sign &quot;$DEVELOPER_NAME&quot; -embed &quot;$PROVISIONING_PROFILE&quot;

API_TOKEN=&quot;XXXXXXXXX&quot;
TEAM_TOKEN=&quot;XXXXXXXX&quot;
RELEASE_NOTES=&quot;$(git show -s --format=%s)&quot;

rm -rf &quot;$BUILDDIR/$APPNAME.app.dSYM.zip&quot;
zip -r -9 &quot;$BUILDDIR/$APPNAME.app.dSYM.zip&quot; &quot;$BUILDDIR/$APPNAME.app.dSYM&quot;

curl http://testflightapp.com/api/builds.json \
  -F file=&quot;@$(pwd)/$APPNAME.ipa&quot; \
  -F dsym=&quot;@$BUILDDIR/$APPNAME.app.dSYM.zip&quot; \
  -F api_token=&quot;$API_TOKEN&quot; \
  -F team_token=&quot;$TEAM_TOKEN&quot; \
  -F notes=&quot;$RELEASE_NOTES&quot; -v</code></pre></noscript></div>


<p>I&#8217;ve XXXX&#8217;d out some variables.  You should fill those in with correct App name, Scheme, Target, etc.  Also, you will want to keep your .mobileprovision file in your git repository.</p>

<p>The build script relies on xcodebuild and xcrun to build and sign the App.</p>

<pre><code>$ man xcodebuild
$ man xcrun
</code></pre>

<h3>TestFlight</h3>

<p>The last piece of the puzzle is <a href="https://testflightapp.com/">TestFlight</a>.  TestFlight is an App management dashboard.  It manages a list of your Apps and your testers.  It sends out emails to testers whenever a new build is available.</p>

<p>Testers are able to install Ad Hoc builds directly from their iPhone.</p>

<p>It lets you creep on your testers.  You know exactly when a tester last installed a build.  This allows you to yell at your testers when they have been slacking off.</p>

<p>The build script uploads the .IPA file up to TestFlight.  TestFlight has fairly good documentation for their <a href="https://testflightapp.com/api/doc/">Upload API</a>.</p>

<p>It also uploads the .dSYM symbol file. TestFlight will symbolicate crashes that are uploaded to their servers.  You need to integrate the <a href="https://testflightapp.com/sdk/download/">TestFlight SDK</a> to take advantage of this functionality.</p>

<h3>Conclusion</h3>

<p>Continuous Deployment is key for eliminating waste in your development process.  It is key if you want to keep moving fast as you scale up the size of your code base and the size of your team.  It is best to implement it sooner rather than later.  Frankly, you should implement Continuous Deployment before you write a line of code.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[AI Distribution: Siri versus Google Search]]></title>
    <link href="http://kaler.github.com/blog/2011/10/16/ai-distribution-siri-versus-google-search/"/>
    <updated>2011-10-16T15:10:27-07:00</updated>
    <id>http://kaler.github.com/blog/2011/10/16/ai-distribution-siri-versus-google-search</id>
    <content type="html"><![CDATA[<p>There is an excellent article in this week&#8217;s Sunday New York Times: <a href="http://www.nytimes.com/2011/10/16/technology/default-choices-are-hard-to-resist-online-or-not.html">The Default Choice, So Hard to Resist</a>.  Thinking about defaults is an important exercise in design.  However, the interesting underlying story here is about distribution.</p>

<blockquote><p>In a Senate hearing last month about Google, Jeremy Stoppelman, the chief executive of Yelp, pointed to that reality <a href="http://judiciary.senate.gov/hearings/hearing.cfm?id=3d9031b47812de2592c3baeba64d93cb">in his testimony</a>. “If competition really were just ‘one click away,’ as Google suggests,” he said, “why have they invested so heavily to be the default choice on Web browsers and mobile phones?”</p></blockquote>

<p>Yelp depends upon Google for distribution.  The classic way that a user ends up on Yelp&#8217;s site is through a Google search.  Either the user ends up at Yelp organically (<a href="http://en.wikipedia.org/wiki/SEO">SEO</a>) or they end up their because Yelp purchased placement (<a href="http://en.wikipedia.org/wiki/Search_engine_marketing">SEM</a>).</p>

<h3>Distribution Arbitrage</h3>

<p>The second key point to note is that Google themselves purchase distribution from AOL, Mozilla, and others.</p>

<blockquote><p>Today, Google pays an estimated $100 million a year to Mozilla, coming from shared ad revenue, to be the default search engine on Mozilla’s popular Firefox Web browser in the United States and other countries. Google has many such arrangements with Web sites.</p></blockquote>

<p>Google purchases distribution for a dollar and then sells this distribution for more than a dollar.  That is essentially Google&#8217;s business model.</p>

<h3>Channel Conflict</h3>

<p>Google attempted to purchase Yelp and failed.  The two parties could not come to an agreement and as a result Google has &#8220;gone gangster&#8221; on Yelp.  Yelp&#8217;s review pages were pushed further down the search results page.  Google started creating their own <a href="http://www.google.com/places/">Google Places</a> pages.  Then Google went and bought Zagat.</p>

<p>This is a classic example of <a href="http://en.wikipedia.org/wiki/Channel_conflict">channel conflict</a>.</p>

<h3>Going Vertical</h3>

<p>Google has gone increasingly vertical the last few years.  They have released the Chrome web browser in an effort to be less reliant on their search deals with Mozilla and Safari.</p>

<p>But that is only the top part of Google&#8217;s sales funnel.  In the past, Google pushed everyone through their sales pipe and generated revenue whenever someone clicked an ad.  Google is no longer happy being just in this business.</p>

<p>They have chosen to find other sources of revenue.  This puts Google in direct conflict with partners like Yelp.</p>

<h3>Get Distribution or Die Tryin&#8217;</h3>

<p>Good products that can&#8217;t get in front of users will end up dying.  It is important for a business to have multiple sources of customers.  Yelp is beholden to Google for customers and Google has decided that they themselves want to keep these customers.  Yelp needs to diversify its distribution.</p>

<p>Enter: Siri.</p>

<h3>Beating Search</h3>

<p>The way to beat a product is not to compete with the product.  (I&#8217;m looking at you Bing.)  The way to beat a product is through <a href="http://en.wikipedia.org/wiki/Disruptive_technology">disruptive innovation</a>.</p>

<blockquote><p>For sustaining innovations, incumbents nearly always win.</p></blockquote>

<p>For disruptive innovations, new entrants nearly always win.</p>

<p>If you ask Siri to make a restaurant reservation for you, it looks this request up using Yelp.  This is the type of task that users currently do a Google search for.</p>

<h3>AI Distribution</h3>

<p>I&#8217;ve been digging through the private frameworks that come with iOS 5.0.  Unfortunately, I haven&#8217;t found an API yet to hook into Siri.  But I&#8217;m going to guess that there eventually will be an API.</p>

<p>In the meantime, brush up on <a href="http://en.wikipedia.org/wiki/Natural_language_processing">Natural Language Processing</a>, <a href="http://en.wikipedia.org/wiki/Part-of-speech_tagging">speech tagging</a>, and <a href="http://en.wikipedia.org/wiki/Parse_tree">parse trees</a>.  Think about the nouns and verbs in your Apps that would be good for hooking into an NLP framework.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Tingle - A Great Reason To Be Single]]></title>
    <link href="http://kaler.github.com/blog/2011/02/09/tingle-a-great-reason-to-be-single/"/>
    <updated>2011-02-09T10:25:43-08:00</updated>
    <id>http://kaler.github.com/blog/2011/02/09/tingle-a-great-reason-to-be-single</id>
    <content type="html"><![CDATA[<p><img src="http://kaler.github.com/upload/2011/02/banner.png" title="&#34;Tingle - A Great Reason To Be Single&#34;" alt="&#34;Tingle - A Great Reason To Be Single&#34;"></p>

<p><a href="http://tingle.com">Tingle</a> helps you find singles at places in your neighbourhood.</p>

<p>It is available today for iPhone in the <a href="http://itunes.apple.com/ca/app/tingle/id366787447">App Store</a> today!</p>

<p>Tingle has all of the great messaging features that you have come to expect from your phone.</p>

<p>Texts are a fun way to send a short message to people on your contact list. Texts are received instantaneously.</p>

<p>Mail allows you to send longer messages to any one on Tingle.</p>

<p>Calls allow you to speak live with a person on your contact list while maintaining your privacy.</p>

<p><img src="http://kaler.github.com/upload/2011/02/profile.jpg" title="&#34;Tingle - Profile&#34;" alt="&#34;Tingle - Profile&#34;"></p>

<p><img src="http://kaler.github.com/upload/2011/02/places.jpg" title="&#34;Tingle - Places&#34;" alt="&#34;Tingle - Places&#34;"></p>

<p>Download it from the <a href="http://itunes.apple.com/ca/app/tingle/id366787447">App Store now</a>!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Joining App Social as Director of Development]]></title>
    <link href="http://kaler.github.com/blog/2010/11/26/joining-app-social-as-director-of-development/"/>
    <updated>2010-11-26T16:07:20-08:00</updated>
    <id>http://kaler.github.com/blog/2010/11/26/joining-app-social-as-director-of-development</id>
    <content type="html"><![CDATA[<p>I&#8217;ve been quiet for the last little while, but I can finally announce that I am joining <a href="http://appsocial.ca/">App Social</a> as Director of Development.</p>

<p>Our main product, currently in private BETA, is <a href="http://www.tingle.com/">Tingle</a>.  Tingle is a mobile dating application that helps users find local singles.  We are heads down building an awesome product supported by a fantastic team of developers, management, and investors.</p>

<p>As Director of Development, I am heading up mobile App development, building and managing a team, and guiding the product.  As Director of Technology, <a href="http://ca.linkedin.com/in/patrickchin">Patrick Chin</a> is building our platform features and scalability.  As CEO, <a href="http://www.linkedin.com/in/ianbell">Ian Andrew Bell</a> is building a great team of investors, managing marketing and spearheading business development.</p>

<p>Please do me a favour.  <a href="http://www.tingle.com/">Sign up</a> to be notified when Tingle is released.  We will be releasing very, very soon.</p>

<p>We are also looking for developers.  Email me (PK AT APPSOCIAL DOT CA) if you have iPhone, Android, Blackberry development experience or if you have development or developer ops experience.  (Our backend is written in Rails.)</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[DemoCamp Vancouver 12]]></title>
    <link href="http://kaler.github.com/blog/2010/10/05/democamp-vancouver-12/"/>
    <updated>2010-10-05T14:04:35-07:00</updated>
    <id>http://kaler.github.com/blog/2010/10/05/democamp-vancouver-12</id>
    <content type="html"><![CDATA[<p>It&#8217;s once again time for DemoCamp.  DemoCamp 11 was a huge success and we are hoping to build on that momentum.  We had almost 20 presenters put together a 30 second pitch.  The final 6 minute presentations were quite good, too.</p>

<p>And we are listening.  The previous venue was great for mingling and networking.  The one issue that we have been consistently hearing is that it can be difficult to see the presenter&#8217;s screen and hear the presentation.  So, we&#8217;ve found a new venue that has a better layout and equipment for the presentations while the crowd can still mingle and network.</p>

<p>Here are the details:</p>

<p>DemoCamp Vancouver 12
The Lounge at The Caprice
Wednesday, November 3
5:30 PM</p>

<p>The event starts at 5:30pm with 30 second pitches starting at about 6:00pm.</p>

<p>Sign up for the event at <a href="http://democampvan12.eventbrite.com/">EventBrite</a>.</p>

<p>For those that have not been to a DemoCamp before, here is the format:</p>

<ul>
<li><p>Post your idea on the big board</p></li>
<li><p>30 minutes for everyone to mingle and get to know others at the event</p></li>
<li><p>The 30 second pitches begin</p></li>
<li><p>Voting!</p></li>
<li><p>The top 4 presenters do a 6 minute talk</p></li>
</ul>


<p>The hashtag on Twitter for the event is <a href="http://search.twitter.com/search?q=%23DCV12">#DCV12</a>.</p>

<p>Thanks to <a href="http://www.twitter.com/sonsryan">Sonia Ryan</a> for chasing down the new venue.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[People who are really serious about software]]></title>
    <link href="http://kaler.github.com/blog/2010/09/24/people-who-are-really-serious-about-software/"/>
    <updated>2010-09-24T14:54:11-07:00</updated>
    <id>http://kaler.github.com/blog/2010/09/24/people-who-are-really-serious-about-software</id>
    <content type="html"><![CDATA[<blockquote><p>People who are really serious about software should make their own hardware.
&#8211; Alan Kay</p></blockquote>

<h3>Apple</h3>

<p>Steve Jobs quoted Alan Kay when the original iPhone was introduced.</p>

<p>httpv://www.youtube.com/watch?v=9FsuOIH14Qs#t=6m00s</p>

<p><em>(Forward to the 6:00 mark)</em></p>

<p>This is why Apple acquired <a href="http://en.wikipedia.org/wiki/P.A._Semi">PA Semiconductor</a>.  This is why Apple owns a chunk of <a href="http://www.imgtec.com/corporate/newsdetail.asp?NewsID=424">Imagination Technologies</a>.</p>

<p>Apple gets it.</p>

<h3>Oracle</h3>

<p>Larry Ellison gets this, too.</p>

<blockquote><p>We want to be TJ Watson Jr&#8217;s IBM. &#8230; We are not going in the hardware business.  We have no interest in the hardware business.  We have a deep interest in the systems business.</p></blockquote>

<p>&#8211; Larry Ellison</p>

<p>This is why Oracle purchased Sun Microsystems.</p>

<p>httpv://www.youtube.com/watch?v=rmrxN3GWHpM</p>

<p><em>(Forward to the 26:50 mark)</em></p>

<p>And today it looks like Oracle will take a run at <a href="http://www.bloomberg.com/news/2010-09-24/arm-rises-as-oracle-s-ellison-says-company-may-buy-a-chipmaker.html">ARM</a>.</p>

<p>Oracle gets it.</p>

<h3>Facebook</h3>

<p>There have been rumours this week that Facebook may be building a phone.  Mark Zuckerberg did an <a href="http://techcrunch.com/2010/09/22/zuckerberg-interview-facebook-phone/">interview with TechCrunch</a> this week.</p>

<blockquote><p>There’s the Apple approach of really designing all the hardware – I don’t think that they manufacture it themselves, but they probably work very closely with Foxconn – but they do have chip design and all of that in-house, I’ll bet we’ll never do anything like that. That is different from what we do.</p></blockquote>

<p>&#8230;</p>

<p>I mean, who knows, 10 years down the road, maybe we’ll build our own operating system or something, but who knows. That is more history than we’ve had so far with the company, so it is really hard to predict that far out. But for now, I think, everything is going to be shades of integration, rather than starting from the ground up and building a whole system.</p>

<p>&#8211; Mark Zuckerberg</p>

<p>I don&#8217;t know if Facebook gets it.  Let&#8217;s see what happens when both Google and Apple get more social.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[CrashKit: Helping Your iOS/iPhone Apps Suck Less]]></title>
    <link href="http://kaler.github.com/blog/2010/08/11/crashkit-helping-your-iphone-apps-suck-less/"/>
    <updated>2010-08-11T03:38:46-07:00</updated>
    <id>http://kaler.github.com/blog/2010/08/11/crashkit-helping-your-iphone-apps-suck-less</id>
    <content type="html"><![CDATA[<p>First there was the iPhone and iPod Touch.  Then the iPad.  Then iOS 3.0.  Then 3.2 but iPad only.  Then 4.0 but some of the features aren&#8217;t available on older models.  Then there is the 4x3 versus 3x2 aspect ratio to worry about.  And then 480x320 versus 1024x768 versus 960x640.  The Media Player framework changes at every single point release.</p>

<p>All of this fragmentation means that iOS Apps crash.  CrashKit catches uncaught exceptions, traps signals, and sends them to developers by email or straight to your bug database.</p>

<h3>Foursquare</h3>

<p>Foursquare dumps a stack trace whenever it crashes.  It then asks the user to email the crash report to the developers the next time they launch the App.</p>

<p>The problem is that the user may not ever launch your App ever again.</p>

<p><img src="http://kaler.github.com/upload/2010/08/IMG_0429.png" title="'Foursquare Crash'" ></p>

<p><strong>We can do better than this.</strong></p>

<h3>What CrashKit Does</h3>

<p>CrashKit catches uncaught NSExceptions.
<code>NSSetUncaughtExceptionHandler(&amp;uncaughtExceptionHandler);</code>
It also traps signals that the operating system sends when the App touches memory that doesn&#8217;t belong to it or executes illegal operations.</p>

<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class='objc'><span class='line'><span class="n">signal</span><span class="p">(</span><span class="n">SIGABRT</span><span class="p">,</span> <span class="n">sighandler</span><span class="p">);</span>
</span><span class='line'><span class="n">signal</span><span class="p">(</span><span class="n">SIGBUS</span><span class="p">,</span> <span class="n">sighandler</span><span class="p">);</span>
</span><span class='line'><span class="n">signal</span><span class="p">(</span><span class="n">SIGFPE</span><span class="p">,</span> <span class="n">sighandler</span><span class="p">);</span>
</span><span class='line'><span class="n">signal</span><span class="p">(</span><span class="n">SIGILL</span><span class="p">,</span> <span class="n">sighandler</span><span class="p">);</span>
</span><span class='line'><span class="n">signal</span><span class="p">(</span><span class="n">SIGPIPE</span><span class="p">,</span> <span class="n">sighandler</span><span class="p">);</span>
</span><span class='line'><span class="n">signal</span><span class="p">(</span><span class="n">SIGSEGV</span><span class="p">,</span> <span class="n">sighandler</span><span class="p">);</span>
</span></code></pre></td></tr></table></div></figure>


<p>The signal handlers unwind the stack frame and try to find out exactly where the crash happened.  This bug report can then be emailed or sent to FogBugz.</p>

<h3>FogBugz</h3>

<p>FogBugz exposes a <a href="http://www.fogcreek.com/FogBugz/docs/70/topics/advanced/API.html">BugzScout API</a> that accepts bug reports using HTTP GET/POST methods.  It buckets similar bugs together and appends them to existing bug reports.</p>

<h3>Pump That Run Loop</h3>

<p>There are a number of subtle issues with catching and reporting crashes.  In general, UIKit is not re-entrant.  Also, UIKit methods should only be called on the main thread.  Exceptions and signals are usually trapped on a thread that is not the main thread.  And the main thread usually gets evicted once something catastrophic happens to the App.</p>

<p>CrashKit jumps back to the main thread after catching a crash and grabbing the stack frame.  It then pumps the main run loop until an email message can be sent or a HTTP method can be completed.</p>

<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
</pre></td><td class='code'><pre><code class='objc'><span class='line'><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">pumpRunLoop</span>
</span><span class='line'><span class="p">{</span>
</span><span class='line'><span class="n">self</span><span class="p">.</span><span class="n">finishPump</span> <span class="o">=</span> <span class="n">NO</span><span class="p">;</span>
</span><span class='line'><span class="n">CFRunLoopRef</span> <span class="n">runLoop</span> <span class="o">=</span> <span class="n">CFRunLoopGetCurrent</span><span class="p">();</span>
</span><span class='line'><span class="n">CFArrayRef</span> <span class="n">runLoopModesRef</span> <span class="o">=</span> <span class="n">CFRunLoopCopyAllModes</span><span class="p">(</span><span class="n">runLoop</span><span class="p">);</span>
</span><span class='line'><span class="n">NSArray</span> <span class="o">*</span> <span class="n">runLoopModes</span> <span class="o">=</span> <span class="p">(</span><span class="n">NSArray</span><span class="o">*</span><span class="p">)</span><span class="n">runLoopModesRef</span><span class="p">;</span>
</span><span class='line'><span class="k">while</span> <span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">finishPump</span> <span class="o">==</span> <span class="n">NO</span><span class="p">)</span>
</span><span class='line'><span class="p">{</span>
</span><span class='line'><span class="k">for</span> <span class="p">(</span><span class="n">NSString</span> <span class="o">*</span><span class="n">mode</span> <span class="k">in</span> <span class="n">runLoopModes</span><span class="p">)</span>
</span><span class='line'><span class="p">{</span>
</span><span class='line'><span class="n">CFStringRef</span> <span class="n">modeRef</span> <span class="o">=</span> <span class="p">(</span><span class="n">CFStringRef</span><span class="p">)</span><span class="n">mode</span><span class="p">;</span>
</span><span class='line'><span class="n">CFRunLoopRunInMode</span><span class="p">(</span><span class="n">modeRef</span><span class="p">,</span> <span class="mf">1.0f</span><span class="o">/</span><span class="mf">120.0f</span><span class="p">,</span> <span class="n">false</span><span class="p">);</span><span class="err"> </span> <span class="c1">// Pump the loop at 120 FPS</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'><span class="n">CFRelease</span><span class="p">(</span><span class="n">runLoopModesRef</span><span class="p">);</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<h3>LLVM and LLDB</h3>

<p>LLVM and LLDB are the future.  I&#8217;ve only tested CrashKit with LLVM.  There are some LLDB features I would like to add in the future.  CrashKit probably works with GCC but I haven&#8217;t really tested it.</p>

<h3>GitHub</h3>

<p>The best way to download CrashKit is to check out the <a href="http://github.com/kaler/CrashKit">GitHub page</a>.  Go put a fork in it.  Crash reporting is hard so patches welcome.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Designing a Better iPhone Sign Up Screen]]></title>
    <link href="http://kaler.github.com/blog/2010/07/26/designing-a-better-iphone-signin-screen/"/>
    <updated>2010-07-26T21:14:00-07:00</updated>
    <id>http://kaler.github.com/blog/2010/07/26/designing-a-better-iphone-signin-screen</id>
    <content type="html"><![CDATA[<p>I install and try a lot of iPhone Apps.  That means I have to Sign In or create a new account for a new service quite often.  I create a unique password for each web service for extra security.</p>

<p>I&#8217;ve also implemented Sign Up screens many times.  Here are a few things to considering when designing an iPhone Sign Up screen.</p>

<h3>The Best Sign Up is no Sign Up</h3>

<p>Does your services really need a Sign Up screen?  A perfectly reasonable strategy is to identify a user by the device identifier and then allow the user to create a full account later.  Two examples are <a href="http://www.instapaper.com/">Instapaper</a> and <a href="http://posterous.com/">Posterous</a>.</p>

<pre><code>[UIDevice currentDevice].uniqueIdentifier
</code></pre>

<p>Both Instapaper and Posterous use your email address on the web to automatically create an account.  On the iPhone, Instapaper uses the device identifier.</p>

<h3>Sign In and Sign Up</h3>

<p>Leah Culver has a great post on why <a href="http://blog.leahculver.com/2009/11/log-in-or-sign-up.html">Sign In and Sign Up</a> should be the same.  Typing on the iPhone and managing passwords is more difficult than on a desktop machine.  It is important to minimize the amount of user error by design.</p>

<p>How the UI flow will be designed has be specific to how your service works.  One way to do this one screen is to use a Segmented Control and toggle between a Sign In and Sign Up state.</p>

<h3>Embed a Table View</h3>

<p>The best way to create a form in an iPhone App is to use a Table View.  Here is a screenshot of the Skype iPhone App.  It uses a table view to display the Skype Name and Password fields.</p>

<p><img src="http://kaler.github.com/upload/2010/07/SkypeSignIn.png" title="Skype Sign In Screen" alt="Skype Sign In Screen"></p>

<p>The key insight to the design of this page is that a table view does not have to take up the entire view.  This is how you can setup your view controller to handle this:</p>

<pre><code>@interface SignupViewController : UIViewController &lt;UITableViewDelegate, UITableViewDataSource&gt;
{
IBOutlet UITableView *tableView;
}
</code></pre>

<p>Instead of inheriting your view controller from UITableViewController, inherit from a regular UIViewController and then implement the UITableViewDelegate and UITableViewDataSource protocols.</p>

<h3>Embed a Text Field into a Table Cell</h3>

<p>The next task is to embed a text field into a table view cell.  Most designs embed a descriptive label and a text field.  This is not required.  A text field has both a text and placeholder property.  The placeholder property can be used to describe the field.  This is especially important for the password field.  I tend to use very long passwords that tend to trail off the edge of a text field.</p>

<p><img src="http://kaler.github.com/upload/2010/07/SkypePassword.png" title="'Skype Password Field'" ></p>

<h3>Source Code</h3>

<p>This article isn&#8217;t very useful without real code that implements this functionality.  I&#8217;ve uploaded code for a <a href="http://github.com/kaler/SignUp">TextEditCell and SignupViewController at GitHub</a>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[DemoCamp Vancouver 11]]></title>
    <link href="http://kaler.github.com/blog/2010/07/02/democamp-vancouver-11/"/>
    <updated>2010-07-02T21:15:17-07:00</updated>
    <id>http://kaler.github.com/blog/2010/07/02/democamp-vancouver-11</id>
    <content type="html"><![CDATA[<p>I am helping host the next DemoCamp Vancouver.  DemoCamp is an opportunity for designers, developers, and marketers to get together and show off the projects that they have been working on.  It is an unconference style event that allows people to gather and meet in an informal manner.</p>

<pre><code>&lt;code&gt;DemoCamp Vancouver 11
Thursday, July 22nd 2010
5:30 PM
Ceili's Irish Pub &amp; Restaurant
670 Smithe Street
Vancouver, BC
&lt;/code&gt;
</code></pre>

<p>You should register on the <a href="http://democampvan11.eventbrite.com/">EventBrite</a> page.</p>

<p>This is a great opportunity to meet other people in the technology industry in Vancouver.  What are the benefits for presenting?</p>

<h3>PR</h3>

<p>This is a great place to build some buzz around your project.  <a href="http://www.techvibes.com/event/democamp-vancouver-11-back-to-basics-edition">TechVibes</a> and a number of bloggers are always hanging out looking for new, interesting stories to write.</p>

<h3>Cofounders</h3>

<p>Mingle with likeminded entrepreneurs.  Maybe you are a technical person that is looking for the business person to help you build the demo into a business.  Maybe you are a business person and your demo is held together with duct tape and chicken wire and your looking for that technical person to take the idea to the next level.</p>

<h3>Friendly First Contact</h3>

<p>Find that group of friendly first contacts to test out your demo.  Good BETA testers are hard to find.  This is a great event to find those people that will try your service.</p>

<p>The hashtag on Twitter for the event is #DCV11.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Could Ruby be Apple's language and API Future?]]></title>
    <link href="http://kaler.github.com/blog/2010/06/30/could-ruby-be-apples-language-and-api-future-3/"/>
    <updated>2010-06-30T00:42:44-07:00</updated>
    <id>http://kaler.github.com/blog/2010/06/30/could-ruby-be-apples-language-and-api-future-3</id>
    <content type="html"><![CDATA[<p>There has been a shift in development landscape over at Apple.  John Siracusa of Ars Technica recently published an article about <a href="http://arstechnica.com/apple/news/2010/06/copland-2010-revisited.ars">Apple&#8217;s language and API future</a>.  I believe Apple is preparing to transition to Ruby as their next default language.</p>

<h3>Today</h3>

<p>Today, the Apple development stack sits on top of the GCC compiler.  GCC compiles Objective-C, C++, and C code down into native machine code for devices that run Mac OS X and iOS.  Core Foundation is a set of C libraries that provide low level operating system services and fundamental data types.  On the Macintosh, Cocoa is the set of frameworks that sit on top of Core Foundation.  Cocoa Touch is the set of frameworks that sits on top of Core Foundation on iOS devices.</p>

<p>Generally, developers build applications using the XCode IDE.  XCode is the GUI layer that drives the compiler, debugger, and build system.</p>

<h3>LLVM &amp; LLDB</h3>

<p>XCode also ships with <a href="http://llvm.org/">LLVM</a>.  LLVM is an open source compiler infrastructure that is meant to eventually replace the GCC tool chain.</p>

<p>LLVM allows the system to <a href="http://en.wikipedia.org/wiki/Low_Level_Virtual_Machine">compile and optimize code</a> at compile-time, link-time, and run-time.  The compilers from Microsoft have been able to do <a href="http://msdn.microsoft.com/en-us/magazine/cc301698.aspx">link-time code generation</a> for a number of years now.  This allows the system an extra phase in which it can both optimize code and provide other types of diagnostics.</p>

<p>The LLVM project originally started at the University of Illinois.  Apple has a team of developers that work on the project full time.</p>

<p>XCode currently ships with GDB as the debugger.  The LLDB project was recently announced with the goal to replace GDB as the debugger that sits on top of LLVM.  Currently, Mac OS X is the only supported platform.  Browsing the list of <a href="http://lists.cs.uiuc.edu/pipermail/lldb-commits/">committers</a> shows email addressees from Apple.  The project also has a very Apple-esque description:</p>

<blockquote><p><a href="http://lldb.llvm.org/goals.html">The goal of LLDB is to provide an amazing debugging experience that &#8220;just works&#8221;.</a></p></blockquote>

<p>Complete transition to the LLVM/LLDB stack will finally put Apple on par with the .NET stack that Microsoft ships.  This stack contains a language agnostic runtime with multiple code optimization points that runs native code.</p>

<p>The <a href="http://en.wikipedia.org/wiki/Dalvik_(software">Dalvik</a>) virtual machine that ships with Android interprets byte code.  A byte code interpreter has a few advantages over a stack that runs native code.  Performance is not one of those advantages.</p>

<h3>MacRuby &amp; Rubinius</h3>

<p>Where does Ruby fit into all of this?  Both <a href="http://www.macruby.org/">MacRuby</a> and Rubinius use the LLVM compiler infrastructure to compile Ruby into native code.  The MacRuby project is driven by Apple and it sits on top o Core Foundation and uses the Objective-C runtime to execute.</p>

<p>Apple has implemented <a href="http://developer.apple.com/mac/articles/cocoa/introblocksgcd.html">Blocks and Grand Central Dispatch</a> in their latest release of the Objective-C runtime.  They are available on iPhone as of the iOS 4.0 update.  This is one of the features that the runtime would be required to implement to support Ruby blocks and lambda functions.  Objective-C is a dynamic language as is Ruby, however this was one of the missing features between the two languages.</p>

<h3>The Transition</h3>

<p>A number of features still need to be implemented for a full transition to the Ruby language.  However, all of the fundamental building block for this transition are there.</p>

<p><em>A hat tip goes out to <a href="http://bmannconsulting.com/">Boris Mann</a>.  We had a great jam session early last week that led to a lot of clarification of my thoughts.</em></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Farmville is the future.  Farmville is filler.]]></title>
    <link href="http://kaler.github.com/blog/2010/04/06/farmville-is-the-future-farmville-is-filler/"/>
    <updated>2010-04-06T08:26:04-07:00</updated>
    <id>http://kaler.github.com/blog/2010/04/06/farmville-is-the-future-farmville-is-filler</id>
    <content type="html"><![CDATA[<p>Farmville is the future.</p>

<p>Okay, Farmville is not the future.  Farmville is filler.    But entertainment that is mobile, social, augmented and can be consumed on the user&#8217;s schedule is the future.</p>

<p>Most people just can&#8217;t justify sitting for X number of hours on their couch to play a game.  The game has to fit the user and not the other way around.  It has to be there when the user has a few minutes in line at a coffee shop and it has to be there when the user has an hour on a rainy Sunday afternoon.</p>

<p>Games like Final Fantasy are the past.  There is way too much content to consume, even for a bored 12 year old, in an 80 hour game.  60 hours of Final Fantasy games are filler anyway.</p>

<p>Farmville is filler in 3 minute increments.  Final Fantasy is filler in 30 minute increments.</p>

<p>Right now 3 minute increments are winning.  But, eventually filler is going to lose because we live in a world where good content <a href="http://en.wikipedia.org/wiki/PageRank">PageRanks</a> its way to the top.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[DemoCamp Vancouver 10: Geo Edition]]></title>
    <link href="http://kaler.github.com/blog/2010/02/20/democamp-vancouver-10-geo-edition/"/>
    <updated>2010-02-20T22:44:43-08:00</updated>
    <id>http://kaler.github.com/blog/2010/02/20/democamp-vancouver-10-geo-edition</id>
    <content type="html"><![CDATA[<p>I will be speaking at the next DemoCamp Vancouver in March.  DemoCamp is usually an event where speakers show off a product that they have been working on.  I have been consulting with a few companies over the last year or so about how to integrate Geo Location and Location Based Services into their existing applications and services.  Boris Mann from over at Bootup asked me to do a talk and I just couldn&#8217;t refuse.</p>

<p>The last time I spoke at a DemoCamp was about 2 years ago.  I was just getting out of the video game industry and had started working on iPhone Development.  Here are 2 slides from that talk:</p>

<p><img src="http://kaler.github.com/upload/democampvancouver10/slide5.jpg">
<img src="http://kaler.github.com/upload/democampvancouver10/slide6.jpg"></p>

<p>I proposed that the magic of the iPhone was going to be the shift towards digital distribution.  The video game industry was (and still largley is) beholden to WalMart and BestBuy.  Everyone is trying to copy the iTunes distribution model these days.  In early 2008, 6 months before the iTunes App Store launched, it wasn&#8217;t actually clear if this new distribution model would actually be successful.</p>

<p>Hopefully, I can point out something as insightful this time around, too.</p>

<p>But really, you shouldn&#8217;t come to hear me speak.  You should come to hear <a href="http://twitter.com/mg">Matt Galligan</a>.  He will be flying up from Boulder, Colorado to talk about <a href="http://simplegeo.com/">SimpleGeo</a>.  SimpleGeo is building infrastructure for the next generation of location based applications.  It looks like they are up to some very cool stuff.</p>

<p>For my part, I will try not to duplicate what others have said elsewhere.  I am always all about the dollar.  So, I will talk about how to build a viable business in the space.  It&#8217;s early in the game, so we will look at revenue models that seem to be working today.  I&#8217;ll also point out gaps in the Geo technology stacks.  These gaps are opportunities for companies to build out good products.</p>

<p>Signup and More Information:</p>

<blockquote><p><a href="http://democamp10yvr.eventbrite.com/">DemoCamp Vancouver 10: Geo Edition</a></p></blockquote>

<p>When: Thursday March 4th, 2010</p>

<p>Where: Ceili&#8217;s Irish Pub. 670 Smithe Street. Vancouver, BC.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Vancouver 2010 Olympics]]></title>
    <link href="http://kaler.github.com/blog/2010/02/03/vancouver-2010-olympics/"/>
    <updated>2010-02-03T09:33:05-08:00</updated>
    <id>http://kaler.github.com/blog/2010/02/03/vancouver-2010-olympics</id>
    <content type="html"><![CDATA[<p>Vancouverites suck. There. I said it. If we are not busy complaining about the Olympics we are busy complaining about the rain. If we are not busy complaining about the rain, we are busy complaining about the Canucks.</p>

<p>We are our own worst enemies.</p>

<p>The only thing we are good at is being hospitable. In our home, we should treat guests like family.</p>

<p>In my home or in my city I will treat guests like family.</p>

<p>PERIOD.</p>

<p>I am ashamed of Vancouverites that don&#8217;t go out of their way to help guests in our city.</p>

<p>It is OUR city. We either make it BETTER or we make it worse.</p>

<p>The Olympics are our stage. We can be a bunch of dickheads and treat our guests with disrespect.</p>

<p>Or we can rise to the occasion and treat every single person that we meet with honour, respect, and kindness.</p>

<p>Being angry and disrespectful and dishonourable does not prove anything worthwhile. It proves we are angry, disrespectful, and dishonourable.</p>

<p>Be BETTER. Be way BETTER. Be magnitudes BETTER.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Measuring Obsession: How I lost 37 Lbs]]></title>
    <link href="http://kaler.github.com/blog/2009/12/21/measuring-obsession-how-i-lost-37-lbs/"/>
    <updated>2009-12-21T12:32:11-08:00</updated>
    <id>http://kaler.github.com/blog/2009/12/21/measuring-obsession-how-i-lost-37-lbs</id>
    <content type="html"><![CDATA[<blockquote><p>The following is a list, in no particular order, of those activities that most commonly elicit    Resistance:</p>

<p>&#8230;</p>

<p>3) Any diet or health regimen.</p>

<p>&#8230;</p>

<p>5) Any activity whose aim is tighter abdominals.</p>

<p>&#8211; Steven Pressfield. The War of Art.</p></blockquote>

<p>Losing weight is easy.</p>

<p>Do 40 minutes of anaerobic activity like lifting weights three times each week.  Do 20 minutes of aerobic activity three times each week. Have egg whites and oatmeal for breakfast, tuna salad for lunch, and a chicken breast with rice for dinner.</p>

<p>3 hours of effort a week for a few weeks and you will have achieved your goal.</p>

<p>Simple, right?</p>

<h3>Physiology versus Psychology</h3>

<blockquote><ul>
<li>If you correct your mind, the rest of your life will fall into place.</li>
</ul>


<p>Lao Tzu</p></blockquote>

<p>I&#8217;ve been thinking a lot about problem solving lately and the effect our own brain has on that activity.  I am a technical person.  I tend to break down all challenges into engineering problems and start applying the scientific method.</p>

<p>Losing weight should be easy.  Expend more energy than you consume and you will have achieved your goal.  It is that simple from a physiological perspective.</p>

<p>It&#8217;s much more complex from a psychological perspective.  There are a lot of moving parts that you have to manage to achieve your goals.  The brain deals with many concerns over the course of a day.  We use words like focus, motivation, tenacity, determination, and persistence to describe all of this management.  I like to use another word:</p>

<blockquote><p>obsession |əbˈse sh ən|</p>

<p>noun</p>

<p>• an idea or thought that continually preoccupies or intrudes on a person&#8217;s mind : he was in the grip of an obsession he was powerless to resist.</p></blockquote>

<p>Generally, the term obsession has a negative connotation.  The usual implication is that you don&#8217;t have control over your thoughts.</p>

<p>The plan is to tweak our brain just like we would tweak our diet or workout plan.</p>

<h3>Before &amp; After Pictures</h3>

<p>I will spare you the shirtless pictures.  The first picture is my big, fat head from December 2008.  I peaked at about 197lbs.  The second picture is this morning.  I&#8217;m hovering at about 160lbs now.</p>

<p><img src="http://kaler.github.com/upload/2009/12/before.png" title="Before" alt="Before"></p>

<p><img src="http://kaler.github.com/upload/2009/12/after.png" title="After" alt="After"></p>

<h3>Measure</h3>

<p>I have one cup of coffee exactly at 6AM and another one at 3PM.  These are the perfect times for me to drink coffee and the perfect amount.  I know this because I kept a spreadsheet with every coffee I drank for 3 months.</p>

<p>I then correlated it with my timesheets in Harvest.  I track all of my billable and non-billable hours.  I started by tracking just working hours.  It has now expanded into tracking almost every activity.</p>

<p>I also did this with the amount of water I drink and how much I sleep.</p>

<p>You can automate a lot of this tracking.  I use an App on the iPhone called <a href="http://loseit.com">LoseIt</a> to track every calorie I eat.  There is now also a companion website.</p>

<p>I also use <a href="https://www.trackyourhappiness.org/">Track Your Happiness</a>.  This service sends me an SMS three times a day.  A follow a link on my phone and fill out a survey.  I get a set pretty graphs at the end of the month that correlate how happy I am with what activities I was doing at the time.</p>

<h3>Automate</h3>

<p>The easiest way to make sure your brain doesn&#8217;t get in the way is to not think at all.</p>

<p>The spreadsheet with with your budget probably has a macro that automatically adds up your expenses for the month.  You probably have an email filter setup for that friend that happens to send three emails a day with the subject: &#8220;FUNNIEST JOKE IN THE WORLD. LOL&#8221;</p>

<p>The same principle applies to your brain.  Do the thinking once, up front and then don&#8217;t allow yourself to stray the next time.  If you&#8217;ve been to my apartment, you&#8217;ve probably seen all of the checklists that I have taped up everywhere.  I scribble on all the windows with dry erase markers.</p>

<p>These are the exact 6 things that I do in the morning.  Every morning.</p>

<p><img src="http://kaler.github.com/upload/2009/12/checklist-225x300.jpg" title="Checklist" alt="Checklist"></p>

<h3><strong>The Future</strong></h3>

<p>You probably are not as obsessive as I am.  So, how does this help you?  Well, it probably won&#8217;t.</p>

<p>You can start by measuring calorie intake and your happiness.  LoseIt and TrackYourHappines only take a few minutes each day if you carry around an iPhone.</p>

<p>However, the future is little devices that help you automatically measure all of this data.  You may have used a pedometer like the Nike+ system to count the number of steps that you take in a day.  The <a href="http://www.fitbit.com/">Fitbit</a>, <a href="http://www.wakemate.com/">WakeMate</a>, and <a href="http://www.myzeo.com/">Zeo</a> are devices that measure how many calories you expend and how much you sleep amongst other things.</p>

<p>The onus is on you to realize that you are trying to exercise your brain and not just your body.</p>

<h3><strong>Conclusion</strong></h3>

<p>I did some ridiculous things to drop 37lbs.  I did hot yoga for 90 minutes a day for 30 days straight.  I did two a day workoutf for a month.  I wear 4 layers of clothing when I&#8217;m on the elliptical.</p>

<p>But really, that stuff doesn&#8217;t matter as much as keeping your head in the game.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Vancouver iPhone Forum: Touch Interface Design]]></title>
    <link href="http://kaler.github.com/blog/2009/11/19/vancouver-iphone-forum-touch-interface-design/"/>
    <updated>2009-11-19T14:36:16-08:00</updated>
    <id>http://kaler.github.com/blog/2009/11/19/vancouver-iphone-forum-touch-interface-design</id>
    <content type="html"><![CDATA[<p>The CBC, BCIT, and New Media BC will be hosting the <a href="http://vancouveriphoneforum.com/">Vancouver iPhone Forum</a> next Tuesday.</p>

<blockquote><p>Vancouver iPhone Forum</p></blockquote>

<p>November 24, 2009. 8:00 AM</p>

<p>BCIT Downtown Campus</p>

<p>2nd Floor, 555 Seymour Street</p>

<p>Vancouver, BC</p>

<p>I will be presenting, along with <a href="http://kevinkimmett.com/">Kevin Kimmett</a>, a session on Touch Interface Design.  Kevin is fantastic designer that works at the CBC.  He has lead the design efforts at the CBC on their iPhone Apps.  He has designed the Hockey Night In Canada App, the CBC Radio App, as well as well as their mobile websites.</p>

<p>Kevin will focus on how the tools and techniques that a designer can employ to create great mobile experiences for touch devices.</p>

<p>I will be focusing on the technical aspects of interface design.  I will go over the mechanics of using the <a href="http://developer.apple.com/tools/interfacebuilder.html">Interface Builder</a> tool.  I will cover Apple&#8217;s <a href="http://developer.apple.com/iphone/library/documentation/userexperience/conceptual/mobilehig/Introduction/Introduction.html">Human Interface Guidelines</a>.  I will also cover how technical programmers can collaborate effectively with designers.</p>

<p>You can follow the conversation on Twitter.  The hashtag for the event will be <a href="http://search.twitter.com/search?q=%23vaniphone">#vaniphone</a>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[In App Purchases and Mobile Services]]></title>
    <link href="http://kaler.github.com/blog/2009/10/16/in-app-purchases-and-mobile-services/"/>
    <updated>2009-10-16T12:40:42-07:00</updated>
    <id>http://kaler.github.com/blog/2009/10/16/in-app-purchases-and-mobile-services</id>
    <content type="html"><![CDATA[<p>Yesterday, Apple announced that they would allow <a href="http://developer.apple.com/iphone/program/sdk/inapppurchase.html">In App Purchases</a> for free applications in the iTunes App Store.  Previously, In App Purchases were only available in paid applications.</p>

<h3>Software As A Service</h3>

<p>This will allow developers to shift away from the Software As A Product model to the Software As A Service model.  We have seen this shift on the Internet over the last decade with the rise of Web services.</p>

<p>Microsoft Office is a product but Google Docs is a service.  iWork is a product but iWork.com is a service.  iPhoto is a product but Flickr.com  and MobileMe is a service.</p>

<p>Going forward, we will see mobile applications integrate much more tightly with web and location services.</p>

<h3>Freemium / Free-To-Play</h3>

<p><a href="http://www.avc.com/a_vc/2006/03/my_favorite_bus.html">Freemium</a> is a business model that we have seen in the web services world.  Flickr is free for the most part.  A Flickr Pro account is $25/year and buys unlimited storage and analytics.</p>

<p>We will start seeing this model in the mobile application business.</p>

<p>This model is called <a href="http://freetoplay.biz/2007/08/02/top-10-revenue-models-for-free-to-play-games/">Free To Play</a> in the video game business.  Zynga allows you to play games like <a href="http://en.wikipedia.org/wiki/FarmVille">FarmVille</a> for free.  However, you can purchase in-game currency such as coins and experience points.</p>

<h3>Subscription</h3>

<p>The big rumour is that Apple will release a tablet that will compete with the Amazon Kindle.  In App Purchases will allow magazines and newspapers to charge a subscription for content.  It makes sense that Apple would want to unify the way e-commerce works across all platforms and devices.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[YellowPages vs Foursquare. Print Media vs Digital Media in Mobile.]]></title>
    <link href="http://kaler.github.com/blog/2009/10/15/yellowpages-vs-foursquare-print-media-vs-digital-media-in-mobile/"/>
    <updated>2009-10-15T11:13:42-07:00</updated>
    <id>http://kaler.github.com/blog/2009/10/15/yellowpages-vs-foursquare-print-media-vs-digital-media-in-mobile</id>
    <content type="html"><![CDATA[<h3>The Hidden Asset: Salesforce</h3>

<p>Last week Fred Wilson blogged about <a href="http://www.avc.com/a_vc/2009/10/local-medias-hiddent-asset-their-salesforces.html">the hidden asset that local media</a> has.  He used the example of the Village Voice having a large sales team that can go out to businesses to sell advertising around their content.</p>

<p>The New York Times also mentioned how <a href="http://bits.blogs.nytimes.com/2009/10/02/a-partnership-between-old-and-new-media/?scp=2&amp;sq=village%20voice%20sales&amp;st=cse">Old and New Media are finding partnerships</a> that work well.  They also use the Village Voice as an example.</p>

<p>Fred Wilson is a managing partner at Union Square Ventures.  Union Square Ventures led the last round of financing of Foursquare.</p>

<h3>Mobile and the Salesforce</h3>

<p>Foursquare is a location-based, social network with a few game mechanics sprinkled on top.  It&#8217;s intended to be accessed from a smartphone.  There is an iPhone App along with a mobile website that can be accessed from other smartphones.</p>

<p>Fred mentions how Targetspot and Clickable are attempting to fill a gap by competing with the sales teams that local media companies have built.</p>

<p>He does not mention how this is also relevant in the world of location-based services.</p>

<p>The competitive advantage that YellowPages and other incumbent directory services have are their large sales teams, too.  YellowPages can assign a sales person to every single business in a neighbourhood.  The second competitive advantage is the large database of listings that YellowPages has accumulated.</p>

<p>The competitive advantage that Foursquare and other location-based services have is that they can target listings much more precisely than a generic directory service.</p>

<h3>Digital Media&#8217;s Competitive Advantage: Crowd-sourcing</h3>

<p>Foursquare has been using crowd-sourcing to populate their database in Vancouver.  6S Marketing has also been promoting Foursquare here in Vancouver.  You can read up about it in this <a href="http://www.vancouversun.com/news/Visit+your+favourite+spot+tell+everyone+become+mayor/2057884/story.html">Vancouver Sun story</a>.</p>

<p><em>Aside: Ignore the term social media. Calling Foursquare social media is like calling World of Warcraft social media.  The term has been so diluted that it is basically meaningless now.</em></p>

<p>My understanding is that 6S Marketing is not getting paid for the promotion.  They charge local businesses for Mayor Offers and Special Offers Nearby inside of the application.  <strong>They have become the sales team.</strong></p>

<p>However, this is a stop-gap solution.  In the future the sales of ads will be crowd-sourced too.  Buying advertisement in location-based services will be self-serve and sales teams will no longer be required.</p>

<h3>Reading Tea Leaves</h3>

<p>The location-based services market will be huge in the upcoming years.  We will see the decline of traditional directory services like the YellowPages.  YellowPages just can not target advertising like newer services can.  They also can not provide analytics as to how well the ads are working.</p>

<p>In the short term, advertising for these location-based services will require a middle man.  The big $1 Billion exit in the mobile/local space will be a company that can acquire ad inventory that can be locally targeted.</p>

<p>Think: The DoubleClick of mobile/local.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[CBC Interview - iPhone App Store Economics]]></title>
    <link href="http://kaler.github.com/blog/2009/10/14/cbc-interview-iphone-app-store-economics/"/>
    <updated>2009-10-14T11:40:09-07:00</updated>
    <id>http://kaler.github.com/blog/2009/10/14/cbc-interview-iphone-app-store-economics</id>
    <content type="html"><![CDATA[<p>I was interviewed Tuesday morning for <a href="http://www.cbc.ca/earlyedition/">The Early Edition</a> on the CBC.  The interview was about the Gold Rush nature of the iTunes Application Store.</p>

<p>The interview was later edited for the web.  <a href="http://www.cbc.ca/canada/british-columbia/story/2009/10/13/bc-iphone-apps-designers-vancouver.html?ref=rss">Apps golden for Vancouver iPhone programmer</a>.</p>

<h3>Land Grab</h3>

<p>The top 100 or so Apps in each category generate sustainable revenue for developers.  However, there are 80,000 or so Apps in the store currently.  The previous 18 months have been a land grab.  Developers have tried to generate as many downloads as possible in the space.</p>

<p>This strategy has led to price pressures.  The price of Apps has tended toward $0.99.  This is not sustainable for most developers.  The number of downloads at that price point have to be large to recoup the cost of development.</p>

<p>The other issue is that successful applications at the $0.99 price point will be quickly cloned.  There is no room for differentiation at that price point.  And differentiating based on price point is not differentiation.</p>

<h3>Optimize For Other Metrics</h3>

<p>Most developers have been looking at the number of downloads as the sole metric to optimize.  This is no longer the case for Apps that have shifted away from the Software-As-A-Product model to the Software-As-A-Service model.</p>

<p>The future of Apps is to smooth out the revenue generated from users.  Currently, the lifetime value of a customer is the $0.99 that they spent when they first downloaded the application.</p>

<p>As the model shifts to SaaS other metrics will become much more important.</p>

<p>How many times is the App launched?  100 downloads of an App with the App being launched 10 times is much more sustainable than an App that is downloaded 1000 times, launched once, and then deleted.</p>

<p>How long is the App launched for?  This is the attention metric.  As the amount of content becomes abundant the scarcity becomes attention.</p>

<p>Monetize this scarcity.  The first step to monetization is measurement.</p>

<p><strong>
</strong></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Apple Acquires Placebase: The Big Picture]]></title>
    <link href="http://kaler.github.com/blog/2009/10/01/apple-acquires-placebase-the-big-picture/"/>
    <updated>2009-10-01T17:53:38-07:00</updated>
    <id>http://kaler.github.com/blog/2009/10/01/apple-acquires-placebase-the-big-picture</id>
    <content type="html"><![CDATA[<p>It&#8217;s been widely reported that Apple has acquired Placebase. (<a href="http://www.techcrunch.com/2009/09/30/apple-gets-a-mapmaker-where-does-that-leave-google/">TechCrunch</a>, <a href="http://www.tuaw.com/2009/10/01/apple-bought-mapping-service-company-placebase/">TUAW</a>).  Placebase is a mapping company that adds a layer of intelligence on top of map data.</p>

<p>Currently, Apple uses Google Maps for Maps.App on the iPhone.  A native Google Latitude client is not available for the iPhone.  There is some fuzziness as to whether Apple rejected the App or if Google decided to only support Google Latitude in the browser.</p>

<p>Let&#8217;s place this deal in context and take a look at the big picture.  We do know that Apple is building an internal Geo Team.  This team is most likely responsible for the UIMapKit framework, the Maps.App for the iPhone, and the Find My iPhone feature in MobileMe.</p>

<p>Let&#8217;s follow the money trail.  The big players in the space are Google Maps, Yahoo Maps, Microsoft/Bing Maps, and MapQuest.</p>

<p>The first important piece of insight is that all of these big players get their mapping data from either NavTeq or from Tele Atlas.  The big players in the space don&#8217;t own the mapping data.  They provide a layer of intelligence on top of the data.</p>

<p>The second important piece of insight is that <a href="http://seekingalpha.com/article/48661-nokia-s-navteq-buyout-what-will-competitors-do-now">Navteq was acquired by Nokia</a>.</p>

<p>This means that money travels from Apple&#8217;s coffers all the way to Nokia&#8217;s coffers each time an iPhone is sold.</p>

<p>There is no reason Apple couldn&#8217;t get map data directly from Navteq (or more likely Tele Atlas) and provide their own level of intelligence on top of this data.  I believe this deal is more about hedging against Nokia/Navteq than it is about Google.</p>

<p>Apple needs to differentiate against Nokia and Google Android devices as well as protect themselves from the rug being pulled out from under them.</p>

<p>I believe Apple is going to be aggressively adding features to MobileMe with Geo/Maps being one key facet.</p>
]]></content>
  </entry>
  
</feed>
