<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>BlackBerry Developer Blog &#187; Taylor J.</title>
	<atom:link href="http://devblog.blackberry.com/author/taylorjon1/feed/" rel="self" type="application/rss+xml" />
	<link>http://devblog.blackberry.com</link>
	<description></description>
	<lastBuildDate>Fri, 17 May 2013 17:47:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='devblog.blackberry.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://1.gravatar.com/blavatar/9ef0a66c09615fa946c4179662398878?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>BlackBerry Developer Blog &#187; Taylor J.</title>
		<link>http://devblog.blackberry.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://devblog.blackberry.com/osd.xml" title="BlackBerry Developer Blog" />
	<atom:link rel='hub' href='http://devblog.blackberry.com/?pushpress=hub'/>
		<item>
		<title>BBM Apps Hackathon: A Celebration of Collaboration</title>
		<link>http://devblog.blackberry.com/2011/09/bbm-apps-hackathon-recap/</link>
		<comments>http://devblog.blackberry.com/2011/09/bbm-apps-hackathon-recap/#comments</comments>
		<pubDate>Tue, 06 Sep 2011 13:25:20 +0000</pubDate>
		<dc:creator>Taylor J.</dc:creator>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[bbm]]></category>
		<category><![CDATA[blackberry developer challenge]]></category>
		<category><![CDATA[developers]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[hackathon]]></category>
		<category><![CDATA[super apps]]></category>

		<guid isPermaLink="false">http://devblog.blackberry.com/?p=6974</guid>
		<description><![CDATA[A recap of the BBM Apps Hackathon event that took place in NYC in August.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=6974&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-6944" title="BBM" src="http://rimdevblog.files.wordpress.com/2011/08/bbm-icon.jpg?w=294&#038;h=277" alt="BBM" width="294" height="277" /></p>
<p>Picture the scene: 30 enthusiastic developers, Wi-Fi® and BBM™ experts, press and video crews on hand to capture the very process of turning ideas into <a href="http://devblog.blackberry.com/2011/07/bbm-sdk-viral-apps/">BlackBerry® Messenger (BBM) connected apps</a>. Early this August, developers spent two full days entrenched with their cohorts, hacking away at completely new applications that incorporate BBM and adding BBM into existing applications.</p>
<p>Organized into five groups, developers had the chance to work together and discuss their apps with direct access to members of the BBM development and product teams. It was evident to those in attendance that this new event format – open, collaborative – was working out well. Problems that could take hours for a developer to fix on his or her own suddenly took minutes, and a helping hand was always within reach.</p>
<p>Day one consisted of short presentations about the platform and tools, followed by intensive coding sessions – the perfect balance. Day two gave developers the chance to work out more kinks and eventually show off their apps. We were impressed: completion ranged from just the framework of an app to fully-functioning examples. Here’s just a sample of what we saw:</p>
<ul>
<li>Sharing tasks and status over BBM</li>
<li>Finding friends based on tags or your location</li>
<li>Challenging other BBM contacts through a game</li>
</ul>
<p>I am excited to see these developers complete their apps and eventually submit them to <a href="http://www.blackberry.com/appworld" target="_new">the BlackBerry App World™ storefront</a> and the <a href="http://www.blackberrypartnersfund.com/challenge" target="_new">2011 BlackBerry Developer Challenge</a>. The format of this event allowed us to collect feedback and ideas directly from developers, which are of immense value to us as we evolve the BlackBerry development platform, SDKs and tools. We’ll certainly be hosting similar events in the future.</p>
<p>To see some of the action that took place, take a look at <a href="http://www.facebook.com/media/set/?set=a.10150301933849054.360613.103837544053&amp;type=1" target="_new">our photo album on Facebook®</a>. To get in on the action and build a BBM-integrated app, <a href="http://us.blackberry.com/developers/blackberrymessenger" target="_new">download the BBM Social Platform SDK</a> and get started. And don’t forget to <a href="http://www.blackberrypartnersfund.com/submission" target="_new">submit your app</a> as the ‘Most Addictive Social App Using the BBM Social Platform’ in the 2011 BlackBerry Developer Challenge (see the <a href="http://www.blackberrypartnersfund.com/bbmrules" target="_new">terms and conditions</a>). We look forward to seeing your creative ideas come to life through your apps!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rimdevblog.wordpress.com/6974/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rimdevblog.wordpress.com/6974/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=6974&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://devblog.blackberry.com/2011/09/bbm-apps-hackathon-recap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/235cb361a377ea888779c2c1cf35f245?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">taylorjon1</media:title>
		</media:content>

		<media:content url="http://rimdevblog.files.wordpress.com/2011/08/bbm-icon.jpg" medium="image">
			<media:title type="html">BBM</media:title>
		</media:content>
	</item>
		<item>
		<title>“Virtual” Functions in JavaScript</title>
		<link>http://devblog.blackberry.com/2011/08/virtual-functions-in-javascript/</link>
		<comments>http://devblog.blackberry.com/2011/08/virtual-functions-in-javascript/#comments</comments>
		<pubDate>Wed, 31 Aug 2011 13:08:44 +0000</pubDate>
		<dc:creator>Taylor J.</dc:creator>
				<category><![CDATA[How-to]]></category>
		<category><![CDATA[Java Development]]></category>
		<category><![CDATA[alice]]></category>
		<category><![CDATA[divs]]></category>
		<category><![CDATA[functions]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[sample code]]></category>

		<guid isPermaLink="false">http://devblog.blackberry.com/?p=6961</guid>
		<description><![CDATA[Find out how to implement “virtual” functions in a simple fashion using JavaScript.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=6961&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><img src="http://rimdevblog.files.wordpress.com/2011/08/alice-banner.jpg?w=600&#038;h=133" alt="Alice" title="Alice" width="600" height="133" class="aligncenter size-full wp-image-6970" /></p>
<p><em>Hey BlackBerry® platform devs! Please welcome a guest blogger today &#8211; <a href="http://twitter.com/ldhasson" target="_new">Laurent</a>, who&#8217;s pumped to discuss JavaScript® and its myriad functions in developing your latest and greatest BlackBerry app. Take it away, Laurent! &#8211; Ed.</em></p>
<p>I love JavaScript. Yeah, you heard me right. I remember being part of a groundbreaking project back in 2002 where I was thrown into the world of JavaScript and was given the mission to go crazy with it. Several hundred thousand lines and a fully functional in-memory SQL engine later, I gained huge respect for the language that many of my co-workers saw only as a toy language for browsers. Oh, how far we have gone since then. To me, JavaScript is kind of like SmallTalk with a C syntax, and the expressiveness and power of the language is impressive.</p>
<p>One of my favorite patterns I use all the time is how to implement “virtual” functions in a simple fashion. There are heavier patterns such as mix-ins and frameworks to do all of it, but honestly, when you are building a quick app that maxes out at only a few thousand lines of code, sometimes I think that it’s just simpler to go for hand-to-hand combat.</p>
<p>We have used this technique heavily in <a href="http://www.github.com/blackberry/Alice" target="_new">Alice</a>, a new micro-library focusing on fancy visual effects using CSS3 2D and 3D facilities. We created reusable parts in a “base class”, and implemented virtual functions in a “derived class,” where logic that is specific to a particular effect is implemented. I use quotes everywhere here because as you’ll see, the traditional Object Oriented notions of Classes, Base and Derived are somewhat fuzzy with JavaScript.</p>
<p><span id="more-6961"></span></p>
<p>So what am I talking about? Let’s say for example that you implement a piece of logic where you need to collect DIVs nested in a given DIV. You may write very simple code such as:</p>
<div class="sample">
<pre>function getSubDIVs(nodeId) {
    var node = document.getElementById(nodeId);
    var DIVs = [];
    for (var i = 0; i &lt; node.childNodes.length; i++) {
        var e = node.childNodes[i];
        if (e.nodeName.toLowerCase() == "div")
           DIVs.push(e);
    }
   return DIVs;
 }</pre>
</div>
<p>For those unfamiliar with JavaScript, DIVs is declared as an array, and “push” is a method to add a new element at the end of that array. The rest should be pretty self-explanatory. Overall, this code is simple and straightforward. But what if tomorrow, you need to do other things with the sub-DIVs? You need to abstract some of the logic. For example:</p>
<div class="sample">
<pre>function getSubDIVs(nodeId) {
    var node = document.getElementById(nodeId);
    var DIVs = [];
    for (var i = 0; i &lt; node.childNodes.length; i++) {
        var e = node.childNodes[i];
        if (doSomething(e) == true)
         DIVs.push(e);
    }
   return DIVs;
 }</pre>
</div>
<p>JavaScript is a wonderful language, and there are two aspects in particular that makes it extra special:</p>
<ul>
<li>Every value is an Object.</li>
<li>Functions are like any other values.</li>
<li>Functions run within a dynamic context (what <strong>this</strong> refers to).</li>
</ul>
<p>The second property provides us with one solution already. Functions in JavaScript are like any other object, so you can just pass one in as any other parameter.</p>
<div class="sample">
<pre>function getSubDIVs(nodeId, doSomething) {
    var node = document.getElementById(nodeId);
    var DIVs = [];
    for (var i = 0; i &lt; node.childNodes.length; i++) {
        var e = node.childNodes[i];
        if (doSomething(e) == true)
         DIVs.push(e);
    }
   return DIVs;
 }</pre>
</div>
<p>Note that doSomething is now a parameter, so I can pass in any function I want in there, dynamically:</p>
<div class="sample">
<pre>function filterOnlyDIVs(e) {
    return (e.nodeName.toLowerCase() == "div");
 }
getSubDIVs("myNodeId", filterOnlyDIVs);</pre>
</div>
<p>JavaScript even support anonymous inline functions, which allows you to write even simpler code:</p>
<div class="sample">
<pre>getSubDIVs("myNodeId",
           function(e) { return e.nodeName.toLowerCase() == "div"); }
          );</pre>
</div>
<p>You can inline the function definition itself, and pass it in as a parameter. Neat, right? That is cool, but there is something missing. What if you are dealing with objects? What if your function needs to have access to some state or information? For example, let’s assume the following JavaScript object definition:</p>
<div class="sample">
<pre>function MyObject {
    this.count=0;
    this.filterOnlyDIVs = function(e) {
       if (e.nodeName.toLowerCase() == "div") {
    	   ++this.count;
    	   return true;
    	 }
       return false;
    }
 }</pre>
</div>
<p>Now you have a problem. A function is a value in and of itself, but there are tricks in terms of defining which context it actually runs in, that is, what does <strong>this</strong> mean? If I repeat my previous code, then I’ll have quite a surprise.</p>
<div class="sample">
<pre>var Obj = new MyObject();
getSubDIVs("myNodeId", MyObject.filterOnlyDIVs);
alert(Obj.count);</pre>
</div>
<p>Trick question: what will be printed out? No matter what, you’ll get 0 because several pernicious things are happening under the covers:</p>
<ul>
<li>We are passing in a pointer to the function, in and of itself, without any context of any object.</li>
<li>When the code <strong>++this.count;</strong> runs, it runs out of the function itself; remember, functions are objects too.</li>
<li>When you print the value of <strong>count</strong>, you are then using your object instance, and the value is 0 no matter what. You implicitly defined dynamically a variable called <strong>count</strong> for the function itself, so if you did <strong>alert(getSubDIVs.count)</strong>, that’s where you’d see the value&#8230; Or would you? Maybe it’s <strong>MyObject.filterOnlyDIVs.count</strong>? Play around, and see for yourself. Hint: functions are Objects too.</li>
</ul>
<p>JavaScript can be tricky that way, and that’s the way it works. But we can use it to our advantage with an interesting pattern. We only have to do one very simple, but major, thing:</p>
<div class="sample">
<pre>function getSubDIVs(nodeId) {
    var node = document.getElementById(nodeId);
    var DIVs = [];
    for (var i = 0; i &lt; node.childNodes.length; i++) {
        var e = node.childNodes[i];
        if (this.doSomething(e) == true)
         DIVs.push(e);
    }
   return DIVs;
 }</pre>
</div>
<p>All we have done now is to say that <strong>doSomething</strong> is no longer passed in as a parameter. Instead, it will be executed in the context of <strong>this</strong>. So, the more astute amongst you will ask “But what is <strong>this</strong>? I thought the function was itself an Object, and that’s what <strong>this</strong> referred to?” Beautiful question! If you just call the method, you will get an error, because there is no <strong>doSomething</strong> function out of <strong>this</strong>.</p>
<div class="sample">
<pre>getSubDIVs(nodeId);</pre>
</div>
<p>So this is the time I am asking you to think about virtual functions in traditional Object Oriented languages. What would you do here? You’d define <strong>doSomething</strong> as a method, and override it in a child class. You can’t do that per se in JavaScript, but you can do something very cool: you can attach that function dynamically to any object you have.</p>
<div class="sample">
<pre>function MyObject {
    this.count=0;
    this.doSomething = function(e) {
       if (e.nodeName.toLowerCase() == "div") {
    	   ++this.count;
    	   return true;
    	 }
       return false;
    }
   this.getSubDIVs = getSubDIVs;
 }</pre>
</div>
<p>This is so beautiful and elegant &#8211; you are effectively assembling your object on the fly out of parts. You declare a new method for <strong>MyObject</strong> (they can have the same name, but it’s not necessary) and assign to it the “base method” <strong>getSubDIVs</strong> (which is really a global function). Now, when you make your call, and when <strong>getSubDIVs</strong> executes, it now does so in the context of your object (where <strong>this.count</strong> is meaningful), and everything in the world is good.</p>
<div class="sample">
<pre>var Obj = new MyObject();
Obj.getSubDIVs("myNodeId");
alert(Obj.count);</pre>
</div>
<p>This is what goes on:</p>
<ul>
<li>You create an instance of <strong>MyObject</strong> called <strong>Obj</strong>.</li>
<li>You call the <strong>MyObject.getSubDIVs</strong> method on <strong>Obj</strong>.</li>
<li>This in fact calls the global function <strong>getSubDIVs</strong>.</li>
<li>This happens without any level of indirection or performance penalty since the <strong>MyObject.getSubDIVs</strong> “variable” is in effect the global function <strong>getSubDIVs</strong>.</li>
<li>In the global function <strong>getSubDIVs</strong>, <strong>this</strong> is actually <strong>Obj</strong>, so <strong>++this.count;</strong> works your <strong>Obj</strong>.</li>
<li>When you then print out <strong>Obj.count</strong>, you get the right count.</li>
</ul>
<p>And voila! You have pieced together, manually, the core tenets of Object Oriented development and encapsulated reusable code, which you customize with “derived” functionality. You have encapsulated a piece of logic somewhere (here, in a global function). Then in that function, you make a call to a “virtual function,” which you then implement separately in a class. You tie it all together by attaching the base method to that class.</p>
<p>You can use frameworks to do this, but honestly, I think that it’s so simple that, unless you work on very large projects, you are better off with direct hand-to-hand combat. JavaScript allows you to write well encapsulated code, so go ahead and do it!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rimdevblog.wordpress.com/6961/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rimdevblog.wordpress.com/6961/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=6961&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://devblog.blackberry.com/2011/08/virtual-functions-in-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/235cb361a377ea888779c2c1cf35f245?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">taylorjon1</media:title>
		</media:content>

		<media:content url="http://rimdevblog.files.wordpress.com/2011/08/alice-banner.jpg" medium="image">
			<media:title type="html">Alice</media:title>
		</media:content>
	</item>
		<item>
		<title>BlackBerry Developer Stories: Damian Keeghan, Australia (VIDEO)</title>
		<link>http://devblog.blackberry.com/2011/08/blackberry-developer-stories-damian-keeghan/</link>
		<comments>http://devblog.blackberry.com/2011/08/blackberry-developer-stories-damian-keeghan/#comments</comments>
		<pubDate>Wed, 17 Aug 2011 20:02:53 +0000</pubDate>
		<dc:creator>Taylor J.</dc:creator>
				<category><![CDATA[Case Studies & Success Stories]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[australia]]></category>
		<category><![CDATA[blackberry apps]]></category>
		<category><![CDATA[blackberry playbook]]></category>
		<category><![CDATA[blackberry webworks]]></category>
		<category><![CDATA[developer stories]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[tablet]]></category>

		<guid isPermaLink="false">http://devblog.blackberry.com/?p=6877</guid>
		<description><![CDATA[The second post in our series of BlackBerry® developer stories features an interview with Damian Keeghan, another Australian developer.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=6877&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p style="text-align:center;"><span class='embed-youtube' style='text-align:center; display: block;'><iframe class='youtube-player' type='text/html' width='560' height='349' src='http://www.youtube.com/embed/pOy3P1RO-Dw?version=3&#038;rel=1&#038;fs=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;wmode=transparent' frameborder='0'></iframe></span></p>
<p style="text-align:center;">[ <a href="http://www.youtube.com/watch?v=pOy3P1RO-Dw" target="_new">YouTube link for mobile viewing</a> ]</p>
<p>In this second post in our series of BlackBerry® developer stories (see our previous interview with <a href="http://devblog.blackberry.com/2011/08/blackberry-developer-stories-paul-haenel/" title="BlackBerry Developer Stories: Paul Haenel" target="_blank">Paul Haenel</a>), we’re pleased to present an interview with Damian Keeghan, a front end developer for Deloitte in Australia who also builds apps in his spare time.  His latest app for the BlackBerry platform is <a href="http://appworld.blackberry.com/webstore/content/36558?lang=en" title="Hivemind for BlackBerry PlayBook" target="_blank">Hivemind</a>, a tracking tool measuring sentiment of events/TV shows/speakers and so on, developed for the BlackBerry® PlayBook™ tablet.</p>
<p>In the above video, Damian talks about using the <a href="http://devblog.blackberry.com/2011/06/porting-your-blackberry-webworks-app/" title="BlackBerry WebWorks" target="_blank">BlackBerry® WebWorks™ API</a>, which allows his skills to translate to the BlackBerry platform easily and smoothly. This is the same for most programming languages, including HTML, CSS and Adobe® Flash®, which means that any web developer can bring their skills to the BlackBerry platform without having to learn an entirely new code. </p>
<p>“Developing for the BlackBerry PlayBook tablet is easy and gives you an opportunity to expand your skills by developing for a new device,” says Damian.</p>
<p>For more news from Australia, follow <a href="http://twitter.com/BlackBerry_AU" target="_new">@BlackBerry_AU</a> on Twitter.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rimdevblog.wordpress.com/6877/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rimdevblog.wordpress.com/6877/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=6877&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://devblog.blackberry.com/2011/08/blackberry-developer-stories-damian-keeghan/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/235cb361a377ea888779c2c1cf35f245?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">taylorjon1</media:title>
		</media:content>
	</item>
		<item>
		<title>BlackBerry Developer Stories: Paul Haenel, Australia (VIDEO)</title>
		<link>http://devblog.blackberry.com/2011/08/blackberry-developer-stories-paul-haenel/</link>
		<comments>http://devblog.blackberry.com/2011/08/blackberry-developer-stories-paul-haenel/#comments</comments>
		<pubDate>Fri, 12 Aug 2011 20:28:19 +0000</pubDate>
		<dc:creator>Taylor J.</dc:creator>
				<category><![CDATA[Case Studies & Success Stories]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[app world]]></category>
		<category><![CDATA[augmented reality]]></category>
		<category><![CDATA[australia]]></category>
		<category><![CDATA[developer stories]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[nfc]]></category>
		<category><![CDATA[super apps]]></category>

		<guid isPermaLink="false">http://devblog.blackberry.com/?p=6873</guid>
		<description><![CDATA[Check out a video post featuring Paul Haenel, an Australia BlackBerry developer who discusses how he creates apps for the BlackBerry platform.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=6873&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p style="text-align:center;"><span class='embed-youtube' style='text-align:center; display: block;'><iframe class='youtube-player' type='text/html' width='560' height='349' src='http://www.youtube.com/embed/bQmEsJfIek4?version=3&#038;rel=1&#038;fs=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;wmode=transparent' frameborder='0'></iframe></span></p>
<p style="text-align:center;">[ <a href="http://www.youtube.com/watch?v=bQmEsJfIek4" target="_new">YouTube link for mobile viewing</a> ]</p>
<p>We sat down with Sydney developer Paul Haenel to chat about his experience developing for the BlackBerry® platform. Paul has developed a number of apps for the Australian market, including the Australian Weather Channel, Channel V and Manly Fast Ferry, all available from the <a href="http://appworld.blackberry.com/" target="_new">BlackBerry App World™ storefront</a>.</p>
<p>In the video above, Paul shares his recipe for creating apps for the BlackBerry platform, and discusses developing for the new BlackBerry® 7 operating system Near Field Communication, Augmented Reality, <a href="http://us.blackberry.com/apps-software/super-apps" target="_new">Super Apps</a> and distributing through BlackBerry App World. </p>
<p>For more news from Australia, follow <a href="http://twitter.com/BlackBerry_AU" target="_new">@BlackBerry_AU</a> on Twitter®. </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rimdevblog.wordpress.com/6873/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rimdevblog.wordpress.com/6873/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=6873&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://devblog.blackberry.com/2011/08/blackberry-developer-stories-paul-haenel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/235cb361a377ea888779c2c1cf35f245?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">taylorjon1</media:title>
		</media:content>
	</item>
	</channel>
</rss>
