<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>@kaler</title>
	
	<link>http://parveenkaler.com</link>
	<description>Parveen Kaler | Director of Development | Tingle.com</description>
	<lastBuildDate>Mon, 09 Apr 2012 03:31:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/ParveenKaler" /><feedburner:info uri="parveenkaler" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>PolyglotConf Vancouver 2012</title>
		<link>http://feedproxy.google.com/~r/ParveenKaler/~3/CAd-aWSVnJo/</link>
		<comments>http://parveenkaler.com/2012/04/08/polyglotconf-vancouver-2012/#comments</comments>
		<pubDate>Mon, 09 Apr 2012 03:31:57 +0000</pubDate>
		<dc:creator>Parveen Kaler</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://parveenkaler.com/?p=432</guid>
		<description><![CDATA[The problem with most technology conferences is that they devolve into cliques. 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. PolyglotConf is a one day unconference designed to get 200 of the smartest developers around in [...]]]></description>
			<content:encoded><![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/" title="PolyglotConf">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/" title="Git Version Control System">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" title="Github">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/" title="PolyglotConf Tutorials">Tutorial List</a></p>
<h3>Session Suggestion Forums</h3>
<p>There is a <a href="http://polyglotconf.uservoice.com/forums/156120-session-suggestions" title="PolyglotConf Session Suggestion&quot;].  I would like to see sessions on [concurrency](http://polyglotconf.uservoice.com/forums/156120-session-suggestions/suggestions/2752312-modern-concurrency &quot;Modern Concurrency">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>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=CAd-aWSVnJo:ZcVvRXcccWI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=CAd-aWSVnJo:ZcVvRXcccWI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=CAd-aWSVnJo:ZcVvRXcccWI:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=CAd-aWSVnJo:ZcVvRXcccWI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=CAd-aWSVnJo:ZcVvRXcccWI:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=CAd-aWSVnJo:ZcVvRXcccWI:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=CAd-aWSVnJo:ZcVvRXcccWI:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=CAd-aWSVnJo:ZcVvRXcccWI:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=CAd-aWSVnJo:ZcVvRXcccWI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=CAd-aWSVnJo:ZcVvRXcccWI:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://parveenkaler.com/2012/04/08/polyglotconf-vancouver-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://parveenkaler.com/2012/04/08/polyglotconf-vancouver-2012/</feedburner:origLink></item>
		<item>
		<title>Continuous Deployment for iOS Apps</title>
		<link>http://feedproxy.google.com/~r/ParveenKaler/~3/IvtTBc9Ylps/</link>
		<comments>http://parveenkaler.com/2012/02/04/continuous-deployment-for-ios-apps/#comments</comments>
		<pubDate>Sun, 05 Feb 2012 02:26:26 +0000</pubDate>
		<dc:creator>Parveen Kaler</dc:creator>
				<category><![CDATA[iphone]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[continuous deployment]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[lean development]]></category>

		<guid isPermaLink="false">http://parveenkaler.com/?p=424</guid>
		<description><![CDATA[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. 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. [...]]]></description>
			<content:encoded><![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 title="Wikipedia: Continuous Integration" 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>
<h2>Integration Tests</h2>
<p>Square has a great integration testing framework called <a title="Github: Keep It Functional Integration Testing Library" href="https://github.com/square/KIF">KIF</a>: Keep It Functional.  The source code is available on Github.  There is also a great <a title="Google Groups: KIF" 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 title="Apple Developer: Accessibility Programming" 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>
<h2>Github</h2>
<p>You should be using <a title="Git Source Code Versioning" 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 title="Github" href="https://github.com/">Github</a>.  Github has a number of <a title="Github Web Hooks" 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>
<h2>Jenkins</h2>
<p><a title="Jenkins Continuous Integration Server" 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 title="Homebrew: Mac OS X package management" href="http://mxcl.github.com/homebrew/">Homebrew</a>.</p>
<pre>$ brew install jenkins
$ java -jar /usr/local/Cellar/jenkins/1.447/lib/jenkins.war</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>
<script src="https://gist.github.com/1741924.js"></script><noscript><p>View the code on <a href="https://gist.github.com/1741924">Gist</a>.</p></noscript>
<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>$ man xcodebuild
$ man xcrun</pre>
<h2>TestFlight</h2>
<p>The last piece of the puzzle is <a title="TestFlight: iOS App Build Management" 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 title="TestFlight Upload API" 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 title="TestFlight SDK" href="https://testflightapp.com/sdk/download/">TestFlight SDK</a> to take advantage of this functionality.</p>
<h2>Conclusion</h2>
<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>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=IvtTBc9Ylps:1Xhh7dsDBts:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=IvtTBc9Ylps:1Xhh7dsDBts:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=IvtTBc9Ylps:1Xhh7dsDBts:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=IvtTBc9Ylps:1Xhh7dsDBts:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=IvtTBc9Ylps:1Xhh7dsDBts:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=IvtTBc9Ylps:1Xhh7dsDBts:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=IvtTBc9Ylps:1Xhh7dsDBts:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=IvtTBc9Ylps:1Xhh7dsDBts:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=IvtTBc9Ylps:1Xhh7dsDBts:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=IvtTBc9Ylps:1Xhh7dsDBts:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://parveenkaler.com/2012/02/04/continuous-deployment-for-ios-apps/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://parveenkaler.com/2012/02/04/continuous-deployment-for-ios-apps/</feedburner:origLink></item>
		<item>
		<title>AI Distribution: Siri versus Google Search</title>
		<link>http://feedproxy.google.com/~r/ParveenKaler/~3/Yi9KA1CFhbY/</link>
		<comments>http://parveenkaler.com/2011/10/16/ai-distribution-siri-versus-google-search/#comments</comments>
		<pubDate>Sun, 16 Oct 2011 22:10:27 +0000</pubDate>
		<dc:creator>Parveen Kaler</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[disruption]]></category>
		<category><![CDATA[distribution]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[jeremy stoppelman]]></category>
		<category><![CDATA[siri]]></category>
		<category><![CDATA[yelp]]></category>

		<guid isPermaLink="false">http://parveenkaler.com/?p=418</guid>
		<description><![CDATA[There is an excellent article in this week&#8217;s Sunday New York Times: The Default Choice, So Hard to Resist.  Thinking about defaults is an important exercise in design.  However, the interesting underlying story here is about distribution. In a Senate hearing last month about Google, Jeremy Stoppelman, the chief executive of Yelp, pointed to that [...]]]></description>
			<content:encoded><![CDATA[<p>There is an excellent article in this week&#8217;s Sunday New York Times: <a title="The Default Choice, So Hard to Resist" 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 title="Transcript of Mr. Stoppelman’s testimony." 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 title="Wikipedia: Search Engine Optimization" href="http://en.wikipedia.org/wiki/SEO">SEO</a>) or they end up their because Yelp purchased placement (<a title="Wikipedia: SEM" href="http://en.wikipedia.org/wiki/Search_engine_marketing">SEM</a>).</p>
<h2>Distribution Arbitrage</h2>
<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>
<h2>Channel Conflict</h2>
<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 title="Google Places" 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 title="Wikipedia: Channel Conflict" href="http://en.wikipedia.org/wiki/Channel_conflict">channel conflict</a>.</p>
<h2>Going Vertical</h2>
<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>
<h2>Get Distribution or Die Tryin&#8217;</h2>
<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>
<h2>Beating Search</h2>
<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 title="Wikipedia: Disruptive Innovation" href="http://en.wikipedia.org/wiki/Disruptive_technology">disruptive innovation</a>.</p>
<blockquote><p>For sustaining innovations, incumbents nearly always win.</p>
<p>For disruptive innovations, new entrants nearly always win.</p></blockquote>
<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>
<h2>AI Distribution</h2>
<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 title="Wikipedia: Natural Language Processing" href="http://en.wikipedia.org/wiki/Natural_language_processing">Natural Language Processing</a>, <a title="Wikipedia: Speech Tagging" href="http://en.wikipedia.org/wiki/Part-of-speech_tagging">speech tagging</a>, and <a title="Wikipedia:  Parse Trees" 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>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=Yi9KA1CFhbY:_440ZaLs334:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=Yi9KA1CFhbY:_440ZaLs334:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=Yi9KA1CFhbY:_440ZaLs334:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=Yi9KA1CFhbY:_440ZaLs334:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=Yi9KA1CFhbY:_440ZaLs334:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=Yi9KA1CFhbY:_440ZaLs334:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=Yi9KA1CFhbY:_440ZaLs334:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=Yi9KA1CFhbY:_440ZaLs334:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=Yi9KA1CFhbY:_440ZaLs334:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=Yi9KA1CFhbY:_440ZaLs334:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://parveenkaler.com/2011/10/16/ai-distribution-siri-versus-google-search/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<category domain="http://rss.financialcontent.com/stocksymbol">SEO</category><category domain="http://rss.financialcontent.com/stocksymbol">SEM</category><feedburner:origLink>http://parveenkaler.com/2011/10/16/ai-distribution-siri-versus-google-search/</feedburner:origLink></item>
		<item>
		<title>Tingle – A Great Reason To Be Single</title>
		<link>http://feedproxy.google.com/~r/ParveenKaler/~3/cwb5I0QlK3I/</link>
		<comments>http://parveenkaler.com/2011/02/09/tingle-a-great-reason-to-be-single/#comments</comments>
		<pubDate>Wed, 09 Feb 2011 18:25:43 +0000</pubDate>
		<dc:creator>Parveen Kaler</dc:creator>
				<category><![CDATA[iphone]]></category>
		<category><![CDATA[Vancouver]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://parveenkaler.com/?p=403</guid>
		<description><![CDATA[Tingle helps you find singles at places in your neighbourhood. It is available today for iPhone in the App Store today! Tingle has all of the great messaging features that you have come to expect from your phone. Texts are a fun way to send a short message to people on your contact list. Texts [...]]]></description>
			<content:encoded><![CDATA[<p><center><div id="attachment_404" class="wp-caption aligncenter" style="width: 330px"><a href="http://parveenkaler.com/wp-content/uploads/2011/02/banner.png"><img class="size-full wp-image-404" title="Tingle" src="http://parveenkaler.com/wp-content/uploads/2011/02/banner.png" alt="Tingle - A Great Reason To Be Single" width="320" height="147" /></a><p class="wp-caption-text">A Great Reason To Be Single</p></div></center></p>
<p><a title="Tingle - A Great Reason To Be Single" 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 title="Tingle: iPhone App" href="http://itunes.apple.com/ca/app/tingle/id366787447" target="_self">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.<br />
<center>
<div><a href="http://parveenkaler.com/wp-content/uploads/2011/02/profile.jpg"><img class="size-full wp-image-405 aligncenter" title="Profile" src="http://parveenkaler.com/wp-content/uploads/2011/02/profile.jpg" alt="Profile view" width="320" height="480" /></a></div>
<div><a href="http://parveenkaler.com/wp-content/uploads/2011/02/places.jpg"><img class="size-full wp-image-406 aligncenter" title="Places" src="http://parveenkaler.com/wp-content/uploads/2011/02/places.jpg" alt="Places in your neighbourhood" width="320" height="480" /></a></div>
<p></center></p>
<p>Download it from the <a title="Tingle - iPhone App" href="http://itunes.apple.com/ca/app/tingle/id366787447">App Store now</a>!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=cwb5I0QlK3I:vOcMkQPpL_A:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=cwb5I0QlK3I:vOcMkQPpL_A:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=cwb5I0QlK3I:vOcMkQPpL_A:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=cwb5I0QlK3I:vOcMkQPpL_A:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=cwb5I0QlK3I:vOcMkQPpL_A:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=cwb5I0QlK3I:vOcMkQPpL_A:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=cwb5I0QlK3I:vOcMkQPpL_A:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=cwb5I0QlK3I:vOcMkQPpL_A:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=cwb5I0QlK3I:vOcMkQPpL_A:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=cwb5I0QlK3I:vOcMkQPpL_A:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://parveenkaler.com/2011/02/09/tingle-a-great-reason-to-be-single/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://parveenkaler.com/2011/02/09/tingle-a-great-reason-to-be-single/</feedburner:origLink></item>
		<item>
		<title>Joining App Social as Director of Development</title>
		<link>http://feedproxy.google.com/~r/ParveenKaler/~3/Ia7xc5DfSQI/</link>
		<comments>http://parveenkaler.com/2010/11/26/joining-app-social-as-director-of-development/#comments</comments>
		<pubDate>Sat, 27 Nov 2010 00:07:20 +0000</pubDate>
		<dc:creator>Parveen Kaler</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[Vancouver]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[app social]]></category>
		<category><![CDATA[dating]]></category>
		<category><![CDATA[ian andrew bell]]></category>
		<category><![CDATA[patrick chin]]></category>
		<category><![CDATA[startups]]></category>
		<category><![CDATA[tingle]]></category>

		<guid isPermaLink="false">http://parveenkaler.com/?p=399</guid>
		<description><![CDATA[I&#8217;ve been quiet for the last little while, but I can finally announce that I am joining App Social as Director of Development. Our main product, currently in private BETA, is Tingle.  Tingle is a mobile dating application that helps users find local singles.  We are heads down building an awesome product supported by a [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been quiet for the last little while, but I can finally announce that I am joining <a title="AppSocial" href="http://appsocial.ca/" target="_self">App Social</a> as Director of Development.</p>
<p>Our main product, currently in private BETA, is <a title="Tingle: Mobile Dating" href="http://www.tingle.com/" target="_self">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 title="LinkedIn: Patrick Chin" href="http://ca.linkedin.com/in/patrickchin">Patrick Chin</a> is building our platform features and scalability.  As CEO, <a title="LinkedIn: Ian Andrew Bell" 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 title="Tingle: Sign Up" 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>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=Ia7xc5DfSQI:Jzc-mfxUrY4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=Ia7xc5DfSQI:Jzc-mfxUrY4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=Ia7xc5DfSQI:Jzc-mfxUrY4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=Ia7xc5DfSQI:Jzc-mfxUrY4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=Ia7xc5DfSQI:Jzc-mfxUrY4:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=Ia7xc5DfSQI:Jzc-mfxUrY4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=Ia7xc5DfSQI:Jzc-mfxUrY4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=Ia7xc5DfSQI:Jzc-mfxUrY4:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=Ia7xc5DfSQI:Jzc-mfxUrY4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=Ia7xc5DfSQI:Jzc-mfxUrY4:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://parveenkaler.com/2010/11/26/joining-app-social-as-director-of-development/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://parveenkaler.com/2010/11/26/joining-app-social-as-director-of-development/</feedburner:origLink></item>
		<item>
		<title>DemoCamp Vancouver 12</title>
		<link>http://feedproxy.google.com/~r/ParveenKaler/~3/bJtYEGhLDl0/</link>
		<comments>http://parveenkaler.com/2010/10/05/democamp-vancouver-12/#comments</comments>
		<pubDate>Tue, 05 Oct 2010 21:04:35 +0000</pubDate>
		<dc:creator>Parveen Kaler</dc:creator>
				<category><![CDATA[Vancouver]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[#dcv12]]></category>
		<category><![CDATA[Caprice Lounge]]></category>
		<category><![CDATA[DemoCamp]]></category>
		<category><![CDATA[democampvancouver]]></category>
		<category><![CDATA[eventbrite]]></category>
		<category><![CDATA[sonia ryan]]></category>
		<category><![CDATA[startups]]></category>
		<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://parveenkaler.com/?p=390</guid>
		<description><![CDATA[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. And we are listening.  The previous venue was great for mingling and networking.  The [...]]]></description>
			<content:encoded><![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 style="padding-left: 30px;">DemoCamp Vancouver 12<br />
The Lounge at The Caprice<br />
Wednesday, November 3<br />
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 title="EventBrite: DemoCamp Vancouver 12" 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>Post your idea on the big board</li>
<li>30 minutes for everyone to mingle and get to know others at the event</li>
<li>The 30 second pitches begin</li>
<li>Voting!</li>
<li>The top 4 presenters do a 6 minute talk</li>
</ul>
<p>The hashtag on Twitter for the event is <a title="Twitter: #DCV12" href="http://search.twitter.com/search?q=%23DCV12">#DCV12</a>.</p>
<p>Thanks to <a title="Twitter: Sonia Ryan" href="http://www.twitter.com/sonsryan">Sonia Ryan</a> for chasing down the new venue.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=bJtYEGhLDl0:n1Ux8WrBmgY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=bJtYEGhLDl0:n1Ux8WrBmgY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=bJtYEGhLDl0:n1Ux8WrBmgY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=bJtYEGhLDl0:n1Ux8WrBmgY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=bJtYEGhLDl0:n1Ux8WrBmgY:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=bJtYEGhLDl0:n1Ux8WrBmgY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=bJtYEGhLDl0:n1Ux8WrBmgY:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=bJtYEGhLDl0:n1Ux8WrBmgY:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=bJtYEGhLDl0:n1Ux8WrBmgY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=bJtYEGhLDl0:n1Ux8WrBmgY:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://parveenkaler.com/2010/10/05/democamp-vancouver-12/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://parveenkaler.com/2010/10/05/democamp-vancouver-12/</feedburner:origLink></item>
		<item>
		<title>People who are really serious about software</title>
		<link>http://feedproxy.google.com/~r/ParveenKaler/~3/hXPbqCW0CHo/</link>
		<comments>http://parveenkaler.com/2010/09/24/people-who-are-really-serious-about-software/#comments</comments>
		<pubDate>Fri, 24 Sep 2010 21:54:11 +0000</pubDate>
		<dc:creator>Parveen Kaler</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[larry ellison]]></category>
		<category><![CDATA[mark zuckerberg]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[steve jobs]]></category>

		<guid isPermaLink="false">http://parveenkaler.com/?p=379</guid>
		<description><![CDATA[People who are really serious about software should make their own hardware. &#8211; Alan Kay Apple Steve Jobs quoted Alan Kay when the original iPhone was introduced. http://www.youtube.com/watch?v=9FsuOIH14Qs (Forward to the 6:00 mark) This is why Apple acquired PA Semiconductor.  This is why Apple owns a chunk of Imagination Technologies. Apple gets it. Oracle Larry [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>People who are really serious about software should make their own hardware.<br />
&#8211; Alan Kay</p></blockquote>
<h3>Apple</h3>
<p>Steve Jobs quoted Alan Kay when the original iPhone was introduced.</p>
<p><a href="http://www.youtube.com/watch?v=9FsuOIH14Qs">http://www.youtube.com/watch?v=9FsuOIH14Qs</a></p>
<p><em>(Forward to the 6:00 mark)</em></p>
<p>This is why Apple acquired <a title="Wikipedia: P.A. Semiconductor" href="http://en.wikipedia.org/wiki/P.A._Semi" target="_self">PA Semiconductor</a>.  This is why Apple owns a chunk of <a title="Apple buys shares in Imagination Technologies" href="http://www.imgtec.com/corporate/newsdetail.asp?NewsID=424" target="_self">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>
<p>&#8211; Larry Ellison</p></blockquote>
<p>This is why Oracle purchased Sun Microsystems.</p>
<p><a href="http://www.youtube.com/watch?v=rmrxN3GWHpM">http://www.youtube.com/watch?v=rmrxN3GWHpM</a></p>
<p><em>(Forward to the 26:50 mark)</em></p>
<p>And today it looks like Oracle will take a run at <a title="ARM Rises as Oracle’s Ellison Targets a Chipmaker" href="http://www.bloomberg.com/news/2010-09-24/arm-rises-as-oracle-s-ellison-says-company-may-buy-a-chipmaker.html" target="_self">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 title="TechCrunch Interview with Mark Zuckerberg" href="http://techcrunch.com/2010/09/22/zuckerberg-interview-facebook-phone/" target="_self">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>
<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></blockquote>
<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>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=hXPbqCW0CHo:r-v3l7NdDQc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=hXPbqCW0CHo:r-v3l7NdDQc:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=hXPbqCW0CHo:r-v3l7NdDQc:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=hXPbqCW0CHo:r-v3l7NdDQc:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=hXPbqCW0CHo:r-v3l7NdDQc:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=hXPbqCW0CHo:r-v3l7NdDQc:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=hXPbqCW0CHo:r-v3l7NdDQc:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=hXPbqCW0CHo:r-v3l7NdDQc:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=hXPbqCW0CHo:r-v3l7NdDQc:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=hXPbqCW0CHo:r-v3l7NdDQc:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://parveenkaler.com/2010/09/24/people-who-are-really-serious-about-software/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://parveenkaler.com/2010/09/24/people-who-are-really-serious-about-software/</feedburner:origLink></item>
		<item>
		<title>CrashKit: Helping Your iOS/iPhone Apps Suck Less</title>
		<link>http://feedproxy.google.com/~r/ParveenKaler/~3/tVw8EbyU5Vw/</link>
		<comments>http://parveenkaler.com/2010/08/11/crashkit-helping-your-iphone-apps-suck-less/#comments</comments>
		<pubDate>Wed, 11 Aug 2010 03:38:46 +0000</pubDate>
		<dc:creator>Parveen Kaler</dc:creator>
				<category><![CDATA[iphone]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://parveenkaler.com/?p=369</guid>
		<description><![CDATA[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 4&#215;3 versus 3&#215;2 aspect ratio to worry about.  And then 480&#215;320 versus 1024&#215;768 versus 960&#215;640.  The Media Player framework changes [...]]]></description>
			<content:encoded><![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 4&#215;3 versus 3&#215;2 aspect ratio to worry about.  And then 480&#215;320 versus 1024&#215;768 versus 960&#215;640.  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><a href="http://parveenkaler.com/wp-content/uploads/2010/08/IMG_0429.png"><img class="aligncenter size-full wp-image-371" title="Foursquare Crash" src="http://parveenkaler.com/wp-content/uploads/2010/08/IMG_0429.png" alt="Foursquare Crash" width="320" height="480" /></a></p>
<p style="text-align: center;"><strong>We can do better than this.</strong></p>
<h3>What CrashKit Does</h3>
<p>CrashKit catches uncaught NSExceptions.<br />
<code>NSSetUncaughtExceptionHandler(&amp;uncaughtExceptionHandler);</code><br />
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>
<pre class="brush: objc; title: ; notranslate">
signal(SIGABRT, sighandler);
signal(SIGBUS, sighandler);
signal(SIGFPE, sighandler);
signal(SIGILL, sighandler);
signal(SIGPIPE, sighandler);
signal(SIGSEGV, sighandler);
</pre>
<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 title="FogBugz API" 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>
<pre class="brush: objc; title: ; notranslate">
- (void)pumpRunLoop
{
self.finishPump = NO;
CFRunLoopRef runLoop = CFRunLoopGetCurrent();
CFArrayRef runLoopModesRef = CFRunLoopCopyAllModes(runLoop);
NSArray * runLoopModes = (NSArray*)runLoopModesRef;
while (self.finishPump == NO)
{
for (NSString *mode in runLoopModes)
{
CFStringRef modeRef = (CFStringRef)mode;
CFRunLoopRunInMode(modeRef, 1.0f/120.0f, false);  // Pump the loop at 120 FPS
}
}
CFRelease(runLoopModesRef);
}
</pre>
<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 title="GitHub: CrashKit" href="http://github.com/kaler/CrashKit">GitHub page</a>.  Go put a fork in it.  Crash reporting is hard so patches welcome.</p>
<p></code></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=tVw8EbyU5Vw:gbGKpQjbqEs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=tVw8EbyU5Vw:gbGKpQjbqEs:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=tVw8EbyU5Vw:gbGKpQjbqEs:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=tVw8EbyU5Vw:gbGKpQjbqEs:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=tVw8EbyU5Vw:gbGKpQjbqEs:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=tVw8EbyU5Vw:gbGKpQjbqEs:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=tVw8EbyU5Vw:gbGKpQjbqEs:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=tVw8EbyU5Vw:gbGKpQjbqEs:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=tVw8EbyU5Vw:gbGKpQjbqEs:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=tVw8EbyU5Vw:gbGKpQjbqEs:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://parveenkaler.com/2010/08/11/crashkit-helping-your-iphone-apps-suck-less/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://parveenkaler.com/2010/08/11/crashkit-helping-your-iphone-apps-suck-less/</feedburner:origLink></item>
		<item>
		<title>Designing a Better iPhone Sign Up Screen</title>
		<link>http://feedproxy.google.com/~r/ParveenKaler/~3/jza_OZDs_ps/</link>
		<comments>http://parveenkaler.com/2010/07/26/designing-a-better-iphone-signin-screen/#comments</comments>
		<pubDate>Mon, 26 Jul 2010 21:14:00 +0000</pubDate>
		<dc:creator>Parveen Kaler</dc:creator>
				<category><![CDATA[iphone]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[iphone development]]></category>
		<category><![CDATA[objective-c]]></category>

		<guid isPermaLink="false">http://parveenkaler.com/?p=356</guid>
		<description><![CDATA[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. I&#8217;ve also implemented Sign Up screens many times.  Here are a few things to considering when [...]]]></description>
			<content:encoded><![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>
<h2>The Best Sign Up is no Sign Up</h2>
<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 title="Instapaper" href="http://www.instapaper.com/" target="_self">Instapaper</a> and <a title="Posterous" href="http://posterous.com/" target="_self">Posterous</a>.</p>
<pre style="padding-left: 30px;">[UIDevice currentDevice].uniqueIdentifier</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>
<h2>Sign In and Sign Up</h2>
<p>Leah Culver has a great post on why <a title="Leah Culver: Log in or sign up?" href="http://blog.leahculver.com/2009/11/log-in-or-sign-up.html" target="_self">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>
<h2>Embed a Table View</h2>
<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>
<div id="attachment_359" class="wp-caption aligncenter" style="width: 330px"><a href="http://parveenkaler.com/wp-content/uploads/2010/07/SkypeSignIn.png"><img class="size-full wp-image-359" title="Skype Sign In" src="http://parveenkaler.com/wp-content/uploads/2010/07/SkypeSignIn.png" alt="Screenshot of Skype Sign In screen" width="320" height="480" /></a><p class="wp-caption-text">Skype Sign In</p></div>
<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 style="padding-left: 30px;">@interface SignupViewController : UIViewController &lt;UITableViewDelegate, UITableViewDataSource&gt;</pre>
<pre style="padding-left: 30px;">{</pre>
<pre style="padding-left: 60px;">IBOutlet UITableView *tableView;</pre>
<pre style="padding-left: 30px;">}</pre>
<p>Instead of inheriting your view controller from UITableViewController, inherit from a regular UIViewController and then implement the UITableViewDelegate and UITableViewDataSource protocols.</p>
<h2>Embed a Text Field into a Table Cell</h2>
<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>
<div id="attachment_362" class="wp-caption aligncenter" style="width: 330px"><a href="http://parveenkaler.com/wp-content/uploads/2010/07/SkypePassword.png"><img class="size-full wp-image-362" title="SkypePassword" src="http://parveenkaler.com/wp-content/uploads/2010/07/SkypePassword.png" alt="Skype Password field" width="320" height="480" /></a><p class="wp-caption-text">Password trailing off in Skype text edit field</p></div>
<h2>Source Code</h2>
<p>This article isn&#8217;t very useful without real code that implements this functionality.  I&#8217;ve uploaded code for a <a title="Github: SignUp sample code" href="http://github.com/kaler/SignUp" target="_self">TextEditCell and SignupViewController at GitHub</a>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=jza_OZDs_ps:Jhn4Qs78Nco:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=jza_OZDs_ps:Jhn4Qs78Nco:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=jza_OZDs_ps:Jhn4Qs78Nco:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=jza_OZDs_ps:Jhn4Qs78Nco:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=jza_OZDs_ps:Jhn4Qs78Nco:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=jza_OZDs_ps:Jhn4Qs78Nco:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=jza_OZDs_ps:Jhn4Qs78Nco:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=jza_OZDs_ps:Jhn4Qs78Nco:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=jza_OZDs_ps:Jhn4Qs78Nco:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=jza_OZDs_ps:Jhn4Qs78Nco:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://parveenkaler.com/2010/07/26/designing-a-better-iphone-signin-screen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://parveenkaler.com/2010/07/26/designing-a-better-iphone-signin-screen/</feedburner:origLink></item>
		<item>
		<title>DemoCamp Vancouver 11</title>
		<link>http://feedproxy.google.com/~r/ParveenKaler/~3/qBjWDnjzsf8/</link>
		<comments>http://parveenkaler.com/2010/07/02/democamp-vancouver-11/#comments</comments>
		<pubDate>Fri, 02 Jul 2010 21:15:17 +0000</pubDate>
		<dc:creator>Parveen Kaler</dc:creator>
				<category><![CDATA[Vancouver]]></category>
		<category><![CDATA[DemoCamp]]></category>

		<guid isPermaLink="false">http://parveenkaler.com/2010/07/02/democamp-vancouver-11/</guid>
		<description><![CDATA[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. DemoCamp Vancouver 11 Thursday, July 22nd 2010 [...]]]></description>
			<content:encoded><![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>DemoCamp Vancouver 11
Thursday, July 22nd 2010
5:30 PM
Ceili's Irish Pub &amp; Restaurant
670 Smithe Street
Vancouver, BC
</code></pre>
<p>You should register on the <a href="http://democampvan11.eventbrite.com/" title="EventBrite: DemoCamp Vancouver 11">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>
<h2 id="pr">PR</h2>
<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" title="TechVibes: DemoCamp Vancouver 11">TechVibes</a> and a number of bloggers are always hanging out looking for new, interesting stories to write.</p>
<h2 id="cofounders">Cofounders</h2>
<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>
<h2 id="friendly_first_contact">Friendly First Contact</h2>
<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>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=qBjWDnjzsf8:EUZVS7YMgjo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=qBjWDnjzsf8:EUZVS7YMgjo:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=qBjWDnjzsf8:EUZVS7YMgjo:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=qBjWDnjzsf8:EUZVS7YMgjo:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=qBjWDnjzsf8:EUZVS7YMgjo:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=qBjWDnjzsf8:EUZVS7YMgjo:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=qBjWDnjzsf8:EUZVS7YMgjo:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=qBjWDnjzsf8:EUZVS7YMgjo:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ParveenKaler?a=qBjWDnjzsf8:EUZVS7YMgjo:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ParveenKaler?i=qBjWDnjzsf8:EUZVS7YMgjo:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://parveenkaler.com/2010/07/02/democamp-vancouver-11/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://parveenkaler.com/2010/07/02/democamp-vancouver-11/</feedburner:origLink></item>
	</channel>
</rss>

