<?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; QML</title>
	<atom:link href="http://devblog.blackberry.com/tag/qml/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; QML</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>How to make Collapsible Items using Cascades and QML</title>
		<link>http://devblog.blackberry.com/2013/01/how-to-make-collapsible-items-using-cascades-and-qml/</link>
		<comments>http://devblog.blackberry.com/2013/01/how-to-make-collapsible-items-using-cascades-and-qml/#comments</comments>
		<pubDate>Thu, 03 Jan 2013 19:37:04 +0000</pubDate>
		<dc:creator>btafel</dc:creator>
				<category><![CDATA[Native SDK Development]]></category>
		<category><![CDATA[custom items]]></category>
		<category><![CDATA[QML]]></category>
		<category><![CDATA[sample]]></category>

		<guid isPermaLink="false">http://devblog.blackberry.com/?p=12884</guid>
		<description><![CDATA[Expandable Item on an Expandable Framework One of the great things about jQuery mobile and other web technologies is that you can find a lot of components and examples out there. Almost every single type of visual element can be found online and there is no need to build it yourself. This is kind of [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=12884&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><strong>Expandable Item on an Expandable Framework</strong></p>
<p>One of the great things about jQuery mobile and other web technologies is that you can find a lot of components and examples out there. Almost every single type of visual element can be found online and there is no need to build it yourself. This is kind of the opposite of the native environment, where most of the times you need to build your own components; this commonly ends with taking a different direction in order to avoid that path. But with Cascades and QML, that’s old news.</p>
<p>Today we were asked if we have a QML component that behaves like the <a href="http://jquerymobile.com/test/docs/content/content-collapsible.html" target="_new">Collapsible on jQuery</a>. And the answer is no &#8211; unless you wait for 10 minutes and you build it yourself. Yes, it only took me 10 minutes to have that component ready to be used by anybody within Cascades.</p>
<p>So, let’s see how that happened.</p>
<p>First of all I created a QML file called ExpandableItem.qml. I created on a separated file so we can then reuse the code on any screen within the application.</p>
<p>Second step was to include the visual components. In this case, I included a Button and a Label:</p>
<pre>    Button {
        id: btnHeader
        text: "default header"
    }
    Label {
        id: lblBody
        text: "default body"
    }</pre>
<p><span id="more-12884"></span></p>
<p>This will give us the two components we need to build our new expandable component. Then I added some styling:</p>
<pre>    Button {
        id: btnHeader
        text: "default header"
        preferredWidth: maxWidth
    }
    Label {
        id: lblBody
        text: "default body"
        textStyle.fontStyle: FontStyle.Italic
    }</pre>
<p>And this was the first result we got:</p>
<p><img class="aligncenter size-full wp-image-12886" alt="TITLE_IMAGE" src="http://rimdevblog.files.wordpress.com/2013/01/expandable-item-1.jpg?w=600&#038;h=305" width="600" height="305" /></p>
<p>After defining our components, it was then time to define our properties, which allows us to interact with the UI component. In this case, we needed at least these ones to control the basic behavior:</p>
<pre>    property alias headerText: btnHeader.text
    property alias bodyText: lblBody.text
    property alias bodyVisible: lblBody.visible
    property string collapseImage
    property string expandImage</pre>
<p>I said “at least” because you can include as many properties you want to tweak your inside components. These are the basics to control the behavior of the expandable component. You can set the default imageSource of your button by including this line on your Button element:</p>
<pre>        imageSource: collapseImage</pre>
<p>It was then time to include our user interaction scripts. This allowed the user to interact with the component, and it reflects the user’s will.</p>
<p>I included two pieces of code:</p>
<p>a) for handling the click event on the Button:</p>
<pre>        onClicked: {
            if (bodyVisible) {
                lblBody.visible = false;
                btnHeader.imageSource = expandImage;
            } else {
                lblBody.visible = true;
                btnHeader.imageSource = collapseImage;
            }
        }</pre>
<p>b) to handle the change of the visibility of the body text:</p>
<pre>    onBodyVisibleChanged: {
        if (bodyVisible) {
            btnHeader.imageSource = collapseImage;
        } else {
            btnHeader.imageSource = expandImage;
        }
    }</pre>
<p>And this is what our new UI component looks like:</p>
<p style="text-align:center;"><img alt="" src="http://rimdevblog.files.wordpress.com/2013/01/expandable-item-2.jpg?w=280" width="280" /> <img alt="" src="http://rimdevblog.files.wordpress.com/2013/01/expandable-item-3.jpg?w=280" width="280" /></p>
<p>Now it is time to use it! And it is as easy as this, for example:</p>
<pre>        ExpandableItem {
            headerText: "click to expand"
            bodyText: "this is my custom body text"
            expandImage: "asset:///images/expand.png";
            collapseImage: "asset:///images/collapse.png";
            bodyVisible: false
        }</pre>
<p>And you will see this:</p>
<p><img class="aligncenter size-full wp-image-12889" alt="" src="http://rimdevblog.files.wordpress.com/2013/01/expandable-item-4.jpg?w=411&#038;h=56" width="411" height="56" /></p>
<p>Or, you can have the body displayed by default:</p>
<pre>        ExpandableItem {
            headerText: "click to expand"
            bodyText: "this is my custom body text"
            expandImage: "asset:///images/expand.png";
            collapseImage: "asset:///images/collapse.png";
            bodyVisible: true
        }</pre>
<p>With this as a result:</p>
<p><img class="aligncenter size-full wp-image-12890" alt="" src="http://rimdevblog.files.wordpress.com/2013/01/expandable-item-5.jpg?w=411&#038;h=104" width="411" height="104" /></p>
<p>As you can see, it is easy to create your custom components and replicate some standard logic out there. Keeping in mind the fact that these UI components are Native components, I think this is a big deal!</p>
<p>This example can be found on <a href="https://github.com/blackberry/Cascades-Community-Samples/tree/master/ExpandableSample" target="_blank">our Github page</a>.</p>
<p>If you have Cascades questions, please don’t hesitate to ping me on Twitter at <a href="http://twitter.com/bryantafel" target="_new">@bryantafel</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rimdevblog.wordpress.com/12884/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rimdevblog.wordpress.com/12884/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=12884&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://devblog.blackberry.com/2013/01/how-to-make-collapsible-items-using-cascades-and-qml/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/01a58649dedc793ca2c840470f5af775?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">btafel</media:title>
		</media:content>

		<media:content url="http://rimdevblog.files.wordpress.com/2013/01/expandable-item-1.jpg" medium="image">
			<media:title type="html">TITLE_IMAGE</media:title>
		</media:content>

		<media:content url="http://rimdevblog.files.wordpress.com/2013/01/expandable-item-2.jpg" medium="image" />

		<media:content url="http://rimdevblog.files.wordpress.com/2013/01/expandable-item-3.jpg" medium="image" />

		<media:content url="http://rimdevblog.files.wordpress.com/2013/01/expandable-item-4.jpg" medium="image" />

		<media:content url="http://rimdevblog.files.wordpress.com/2013/01/expandable-item-5.jpg" medium="image" />
	</item>
		<item>
		<title>BlackBerry at Qt Developer Days – Santa Clara #QtDD12</title>
		<link>http://devblog.blackberry.com/2012/12/qt-developer-days/</link>
		<comments>http://devblog.blackberry.com/2012/12/qt-developer-days/#comments</comments>
		<pubDate>Mon, 17 Dec 2012 19:24:49 +0000</pubDate>
		<dc:creator>Ash Nazir</dc:creator>
				<category><![CDATA[Cascades]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[Native SDK Development]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[Developer Days]]></category>
		<category><![CDATA[QML]]></category>
		<category><![CDATA[qt]]></category>
		<category><![CDATA[Santa Clara]]></category>

		<guid isPermaLink="false">http://devblog.blackberry.com/?p=12722</guid>
		<description><![CDATA[Qt is an important part of our BlackBerry 10 Cascades framework. We were proud to be part of Qt Developer Days in Santa Clara, where we had our own booth set up to showcase the BlackBerry 10 OS and to speak to developers about the excitement surrounding the upcoming BlackBerry 10 launch event on January [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=12722&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-12723" alt="TITLE_IMAGE" src="http://rimdevblog.files.wordpress.com/2012/12/qt-santa-clara-1.jpg?w=550&#038;h=367" width="550" height="367" /></p>
<p>Qt is an important part of our BlackBerry 10 Cascades framework. We were proud to be part of <a href="http://qt.digia.com/qtdeveloperdays" target="_new">Qt Developer Days</a> in Santa Clara, where we had our own booth set up to showcase the BlackBerry 10 OS and to speak to developers about the excitement surrounding the upcoming BlackBerry 10 launch event on January 30th (not long to go now!). Some developers did not really know what BlackBerry 10 was but after seeing the platform for themselves, they shared our excitement. This was a user interface that they had not seen before, and something a lot of the MeeGo community liked with its simple but powerful gestures.</p>
<p><span id="more-12722"></span></p>
<p><img class="aligncenter size-full wp-image-12724" alt="qt-santa-clara-2" src="http://rimdevblog.files.wordpress.com/2012/12/qt-santa-clara-2.jpg?w=550&#038;h=211" width="550" height="211" /></p>
<p>Alec Saunders, VP Developer Relations at RIM, had a keynote speech where he presented our BlackBerry 10 ecosystem story. He also spoke to RIM’s involvement with Qt and how developers can be rewarded for porting their Qt applications to BlackBerry 10. BlackBerry World is a going to be a level playing ground for your applications to actually have a chance of being discovered and not lost in the crowd like on other platforms.</p>
<p>We seeded eager developers with BlackBerry 10 Dev Alpha testing devices for them to port over their existing MeeGo / Symbian Qt applications, and also provided technical support. For Qt Mobile Application Developers, BlackBerry 10 offers the ability to get a return on your existing development investments. Depending on the complexity of your application, the port over to BlackBerry 10 can really be a painless experience.</p>
<p>We do realize that not everyone can get to these events, and so we have the BlackBerry Qt Porting Program, an online offer so that eligible developers can get their hands on BlackBerry 10 Dev Alpha testing devices. For complete details, see the <a href="https://developer.blackberry.com/offers/qt#tc" target="_new">Official Program Terms and Conditions</a>.</p>
<p>What you need to do is:</p>
<ul>
<li>Become a <a href="https://appworld.blackberry.com/isvportal/login_input.do?pageId=0&amp;csrfToken=YKJD-Q0CN-5TL2-JW7B-K7LJ-Y4MP-MLU2-3RZL" target="_new">BlackBerry World Vendor</a>.</li>
<li>Submit your porting plan to bring your Qt app to BlackBerry 10 for approval at <a href="https://developer.blackberry.com/offers/qt" target="_new">https://developer.blackberry.com/offers/qt</a></li>
</ul>
<p>We also have an offer of a one-time donation of $10,000 USD to the Qt Project Hosting Foundation if 50 eligible Qt apps are ported to BlackBerry 10 by the Qt Community and then posted and available for sale in BlackBerry World by January 30, 2013 (1)</p>
<p>Criteria:</p>
<ul>
<li>Be a <a href="https://appworld.blackberry.com/isvportal/login_input.do?pageId=0&amp;csrfToken=YKJD-Q0CN-5TL2-JW7B-K7LJ-Y4MP-MLU2-3RZL" target="_new">BlackBerry World Vendor</a>.</li>
<li>Apps must be submitted to BlackBerry World by January 20, 2013 and be approved.</li>
<li>50 Qt apps must be up for sale in BlackBerry World by January 30, 2013.</li>
</ul>
<p>It was fantastic being part of Qt Developer Days in Santa Clara, but this is really just the start for us and by no means the end. We are actively working with Digia and the Qt foundation to further strengthen Qt and our relationship with it and also with you.</p>
<p>Below are some links of how we can help you develop for us:</p>
<p><strong>Qt Project Wiki:</strong></p>
<ul>
<li><a href="http://qt-project.org/wiki/blackberry" target="_new">http://qt-project.org/wiki/blackberry</a></li>
</ul>
<p><strong>Qt Project Group:</strong></p>
<ul>
<li><a href="http://qt-project.org/groups/qt-blackberry-and-qnx" target="_new">http://qt-project.org/groups/qt-blackberry-and-qnx</a></li>
</ul>
<p><strong>Open Jam Sessions for Qt developers to talk to RIM internal Qt experts about technical problems:</strong></p>
<ul>
<li>Qt Live Time with BlackBerry Developer Relations
<ul>
<li>Wednesday, December 12, 2012 @ 10:00 – 12:00 ET</li>
<li><a href="https://developer.blackberry.com/devzone/jamcommunity/supportjams/session_registration.html?id=307" target="_new">https://developer.blackberry.com/devzone/jamcommunity/supportjams/session_registration.html?id=307</a></li>
</ul>
</li>
<li>Qt Live Time with BlackBerry Developer Relations
<ul>
<li>Wednesday, December 19, 2012 @ 10:00 – 12:00 ET</li>
<li><a href="https://developer.blackberry.com/devzone/jamcommunity/supportjams/session_registration.html?id=308" target="_new">https://developer.blackberry.com/devzone/jamcommunity/supportjams/session_registration.html?id=308</a></li>
</ul>
</li>
</ul>
<p><strong>Porting Qt to BlackBerry 10:</strong></p>
<ul>
<li><a href="http://devblog.blackberry.com/2012/11/porting-qt-apps-to-blackberry-10/" target="_new">Porting Qt Applications to BlackBerry 10 is Easier than Ever!</a></li>
<li><a href="http://devblog.blackberry.com/2012/11/writing-qt-apps-blackberry-10/" target="_new">Writing Qt apps for the BlackBerry 10 platform</a></li>
</ul>
<p><strong>Built for BlackBerry and the 10k Developer Commitment:</strong></p>
<ul>
<li><a href="http://developer.blackberry.com/10k" target="_new">http://developer.blackberry.com/10k</a></li>
</ul>
<h6>1) To be eligible, fifty (50) Qt Apps (&#8220;Apps&#8221;) must be submitted to BBAW by the Qt Community by 11:59:59 PM Eastern Time (&#8220;ET&#8221;) on January 20, 2013. Apps will be accepted beginning at 8:00 AM ET on December 8, 2012. Allow a minimum of ten (10) days for BBAW approval. Approved apps must be posted on BBAW for sale on or before January 30, 2013. Apps are not eligible if they simply contain a web launcher or shortcut or a web browser (&#8220;Excluded App&#8221;). RIM will confirm if Qt Community is eligible for $10,000 USD donation to the Qt Project Hosting Foundation (&#8220;Donation&#8221;) by February 28, 2013. Allow 8-12 weeks for delivery of Donation. Void where prohibited or restricted by law.</h6>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rimdevblog.wordpress.com/12722/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rimdevblog.wordpress.com/12722/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=12722&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://devblog.blackberry.com/2012/12/qt-developer-days/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/614ed869a37d9bd0d2a45e3104c5531e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ashnazir</media:title>
		</media:content>

		<media:content url="http://rimdevblog.files.wordpress.com/2012/12/qt-santa-clara-1.jpg" medium="image">
			<media:title type="html">TITLE_IMAGE</media:title>
		</media:content>

		<media:content url="http://rimdevblog.files.wordpress.com/2012/12/qt-santa-clara-2.jpg" medium="image">
			<media:title type="html">qt-santa-clara-2</media:title>
		</media:content>
	</item>
		<item>
		<title>Click To Start Your BlackBerry 10 Cascades Apps In No Time Flat With Zygote</title>
		<link>http://devblog.blackberry.com/2012/12/cascades-project-zygote/</link>
		<comments>http://devblog.blackberry.com/2012/12/cascades-project-zygote/#comments</comments>
		<pubDate>Wed, 05 Dec 2012 14:52:11 +0000</pubDate>
		<dc:creator>Alex Kinsella</dc:creator>
				<category><![CDATA[Cascades]]></category>
		<category><![CDATA[Native SDK Development]]></category>
		<category><![CDATA[applications]]></category>
		<category><![CDATA[apps]]></category>
		<category><![CDATA[BlackBerry 10]]></category>
		<category><![CDATA[BlackBerry 10 apps]]></category>
		<category><![CDATA[fast startup]]></category>
		<category><![CDATA[QML]]></category>
		<category><![CDATA[qt]]></category>

		<guid isPermaLink="false">http://devblog.blackberry.com/?p=12482</guid>
		<description><![CDATA[Guest post from Roberto S. &#8211; Ed. Since the introduction of Cascades in May, developers have been asking us one question: Is there something I can do to make my app start faster? Cascades is a marvelous piece of technology, but like any new technology, it takes time to work out the kinks and optimize [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=12482&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p style="text-align:center;"><img class="aligncenter  wp-image-12539" alt="TITLE_IMAGE" src="http://rimdevblog.files.wordpress.com/2012/12/devblog-cascades-cookbook.png?w=612&#038;h=351" height="351" width="612" /></p>
<p><i>Guest post from Roberto S. &#8211; Ed.</i></p>
<p>Since the introduction of Cascades in May, developers have been asking us one question: Is there something I can do to make my app start faster? Cascades is a marvelous piece of technology, but like any new technology, it takes time to work out the kinks and optimize performance. It took a while, but the Cascades team figured out a way to make it faster. Let me introduce you to Project Zygote.</p>
<p>When a detailed performance analysis was conducted on a Cascades application while it was starting up, it was discovered that loading shared libraries was taking up the majority of time. Cascades uses a number of different Qt and platform-specific libraries, so this made sense. After some investigation, we learned that you can save a lot of time by pre-compiling these shared libraries into one library that could be pre-loaded. Thus, Project Zygote was born.</p>
<p>How do you get in on the party? With this latest beta release of BlackBerry 10, all new Cascades projects will have Zygote enabled by default. You get it for free!</p>
<p>For those with pre-existing projects, there are some minor changes you need to make to your existing projects to enable Zygote for your release target. A little bit of work that goes a long way!</p>
<p>Let’s start by looking at the original project file for the Cascades Cookbook sample app:</p>
<p><span id="more-12482"></span></p>
<pre>TEMPLATE = app
TARGET = cascadescookbookqml

CONFIG += qt warn_on debug_and_release cascades

INCLUDEPATH += ../src
SOURCES += ../src/*.cpp 
HEADERS += ../src/*.h 

device {
	CONFIG(release, debug|release) {		
		DESTDIR = o.le-v7		
	} 
	CONFIG(debug, debug|release) {
		DESTDIR = o.le-v7-g
	}
}

simulator {
	CONFIG(release, debug|release) {
		DESTDIR = o
	} 
	CONFIG(debug, debug|release) {
		DESTDIR = o-g
	}
}

OBJECTS_DIR = $${DESTDIR}/.obj
MOC_DIR = $${DESTDIR}/.moc
RCC_DIR = $${DESTDIR}/.rcc
UI_DIR = $${DESTDIR}/.ui</pre>
<p>As mentioned earlier, Zygote is configured primarily for release targets. The reason behind this is that the differences in packaging make it difficult for developers to debug applications built in this way. The first step to upgrading the project configuration is to add a template override from app to lib in the device-release configuration section:</p>
<pre>TEMPLATE = app
TARGET = cascadescookbookqml

CONFIG += qt warn_on debug_and_release cascades10

INCLUDEPATH += ../src
SOURCES += ../src/*.cpp 
HEADERS += ../src/*.h 

device {
	CONFIG(release, debug|release) {		
		DESTDIR = o.le-v7
TEMPLATE=lib
QMAKE_CXXFLAGS += -fvisibility=hidden
	} 
	CONFIG(debug, debug|release) {
		DESTDIR = o.le-v7-g
	}
}

simulator {
	CONFIG(release, debug|release) {
		DESTDIR = o
	} 
	CONFIG(debug, debug|release) {
		DESTDIR = o-g
	}
}

OBJECTS_DIR = $${DESTDIR}/.obj
MOC_DIR = $${DESTDIR}/.moc
RCC_DIR = $${DESTDIR}/.rcc
UI_DIR = $${DESTDIR}/.ui</pre>
<p>These changes switch the target from an executable to a library and hide the symbols to minimize the size.</p>
<p>The next thing that needs to change is the main.cpp file. Change the main() declaration as follows:</p>
<pre>Q_DECL_EXPORT int main(int argc, char **argv)</pre>
<p>The last step is to update the bar.descriptor.xml file as follows:</p>
<pre>    &lt;configuration id="com.qnx.qcc.toolChain.1485069140" name="Device-Debug"&gt;
       &lt;platformArchitecture&gt;armle-v7&lt;/platformArchitecture&gt;
       &lt;asset path="arm/o.le-v7-g/cascadescookbookqml" entry="true" type="Qnx/Elf"&gt;cascadescookbookqml&lt;/asset&gt;
    &lt;/configuration&gt;
    &lt;configuration id="com.qnx.qcc.toolChain.1120265426" name="Device-Release"&gt;
       &lt;platformArchitecture&gt;armle-v7&lt;/platformArchitecture&gt;
       &lt;asset path="arm/o.le-v7/cascadescookbookqml" entry="true" type="Qnx/Elf"&gt;cascadescookbookqml&lt;/asset&gt;
    &lt;/configuration&gt;</pre>
<p>Changes to:</p>
<pre>    &lt;configuration id="com.qnx.qcc.toolChain.1485069140" name="Device-Debug"&gt;
       &lt;platformArchitecture&gt;armle-v7&lt;/platformArchitecture&gt;
       &lt;asset path="arm/o.le-v7-g/cascadescookbookqml " entry="true" type="Qnx/Elf"&gt;HelloPhone&lt;/asset&gt;
    &lt;/configuration&gt;
    &lt;configuration id="com.qnx.qcc.toolChain.1120265426" name="Device-Release"&gt;
       &lt;entryPointType&gt;Qnx/Cascades&lt;/entryPointType&gt;
       &lt;platformArchitecture&gt;armle-v7&lt;/platformArchitecture&gt;
       &lt;asset path="arm/o.le-v7/cascadescookbookqml.so" entry="true" type="Qnx/Elf"&gt;libcascadescookbookqml.so&lt;/asset&gt;
    &lt;/configuration&gt;</pre>
<p>After making these changes, export your project to a zip file. If you haven’t already done so, create a new workspace. Import the project into the new workspace, change the active build to Device-Release, and clean and rebuild the project. You should have a Cascades Cookbook sample app that starts up faster! My testing showed a reduction in start time from 1.96 seconds to 0.68 seconds. Feel free to convert all of your Cascades apps and spread the word!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rimdevblog.wordpress.com/12482/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rimdevblog.wordpress.com/12482/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=12482&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://devblog.blackberry.com/2012/12/cascades-project-zygote/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7d0e94a7e96e80d5911732d43f31a39c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Alex K.</media:title>
		</media:content>

		<media:content url="http://rimdevblog.files.wordpress.com/2012/12/devblog-cascades-cookbook.png" medium="image">
			<media:title type="html">TITLE_IMAGE</media:title>
		</media:content>
	</item>
		<item>
		<title>Breaking Out of The Box – An Introduction to BlackBerry 10 Mobile Sensing</title>
		<link>http://devblog.blackberry.com/2012/11/blackberry-10-mobile-sensing/</link>
		<comments>http://devblog.blackberry.com/2012/11/blackberry-10-mobile-sensing/#comments</comments>
		<pubDate>Fri, 23 Nov 2012 16:08:02 +0000</pubDate>
		<dc:creator>RAN</dc:creator>
				<category><![CDATA[Native SDK Development]]></category>
		<category><![CDATA[BlackBerry 10]]></category>
		<category><![CDATA[Mobile Computing]]></category>
		<category><![CDATA[QML]]></category>
		<category><![CDATA[QtSensor]]></category>
		<category><![CDATA[rotation3D]]></category>
		<category><![CDATA[Sensor]]></category>

		<guid isPermaLink="false">http://devblog.blackberry.com/?p=12248</guid>
		<description><![CDATA[BlackBerry® 10 smartphones have a variety of built-in sensors to detect movement, orientation, rotation, proximity, and magnetic fields. As mobile devices have matured as a computing platform and acquired richer functionality, these advancements often have been paired with the introduction of new sensors. It is truly astonishing how many physiological senses are present on a [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=12248&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>BlackBerry® 10 smartphones have a variety of built-in sensors to detect movement, orientation, rotation, proximity, and magnetic fields. As mobile devices have matured as a computing platform and acquired richer functionality, these advancements often have been paired with the introduction of new sensors. It is truly astonishing how many physiological senses are present on a smartphone. The camera &#8211; the most widely used sensor on the device &#8211; allows it to “see” the outside world, while the microphone lets the device “hear”. In fact, BlackBerry 10 has dual cameras (front and back) and dual microphones for spatial resolution.</p>
<p>Other means to let a device “see” include the light and the proximity sensor. Considering BlackBerry 10 devices as sensors should naturally lead to methods of determining environmental contexts, and providing an unmatched user experience based on those. As a developer you can leverage the following types of sensors in your application: accelerometer, magnetometer, temperature, gyroscope, compass, proximity, holster, rotation sensor, GPS, microphone and camera.</p>
<p>For more information, please take a look at our <a href="https://developer.blackberry.com/cascades/documentation/device_comm/sensors/index.html" target="_new">sensor documentations</a> and start building today.</p>
<p><span id="more-12248"></span></p>
<p><img class="aligncenter size-full wp-image-12249" title="TITLE_IMAGE" alt="TITLE_IMAGE" src="http://rimdevblog.files.wordpress.com/2012/11/blackberry-10-mobile-sensing-1.jpg?w=500&#038;h=479" height="479" width="500" /></p>
<p><img class="aligncenter size-full wp-image-12250" title="" alt="" src="http://rimdevblog.files.wordpress.com/2012/11/blackberry-10-mobile-sensing-2.jpg?w=438&#038;h=528" height="528" width="438" /></p>
<p>Documentations are good but samples are readable (well, at least to developers). With that in mind, we also have a full <a href="https://github.com/blackberry/Cascades-Samples/tree/master/SensorDemo" target="_new">sample application</a> that is both useful and fun to use.</p>
<p>We are very excited about this and look forward to see how you incorporate sensors in your application. Let’s break the false perception that sensors are only meant for games and maps!</p>
<h3><strong>Sample Application Example &#8211; SensorDemo:</strong></h3>
<p>The SensorDemo example demonstrates how to use the QtSensor module to implement the Rotation 3D, Motion Alarm, Compass, Flashlight, Motion Alarm and Collision Detector. This sample made on native layer (Cascades/QML).</p>
<h3><strong>Requirements:</strong></h3>
<p><a href="https://developer.blackberry.com/develop/platform_choice/ndk.html" target="_new">BlackBerry 10 Native SDK Beta 3</a></p>
<h3><strong>Running the example:</strong></h3>
<p>1. Clone the Sample repository <a href="https://github.com/blackberry/Cascades-Samples/tree/master/SensorDemo" target="_new">sample application</a>.<br />
2. Launch BlackBerry 10 Native SDK Beta 3, and from the File menu, select Import.<br />
3. Expand General, and select Existing Projects into Workspace. Click Next.<br />
4. Browse to the location of your sample directory, and then click OK.<br />
5. The sample project should display in the Projects section. Click Finish to import the project into your workspace.<br />
6. In the Project Explorer pane, right-click the project (for example SensorDemo) and select Build Project.<br />
7. In the Project Explorer pane, right-click the project (for example SensorDemo and select Run As &gt; BlackBerry C/C++ Application.<br />
8. The application will now install and launch on your device; if not, you might have to <a href="http://developer.blackberry.com/cascades/documentation/getting_started/setting_up.html" target="_new">set up your environment</a>.</p>
<p style="text-align:center;"><img title="" alt="" src="http://rimdevblog.files.wordpress.com/2012/11/blackberry-10-mobile-sensing-3.jpg?w=280" width="280" /> <img title="" alt="" src="http://rimdevblog.files.wordpress.com/2012/11/blackberry-10-mobile-sensing-4.jpg?w=280" width="280" /></p>
<h3><strong>Sample Code:</strong></h3>
<pre>
main.qml:
import bb.cascades 1.0
import QtMobility.sensors 1.2
TabbedPane {
    id: tabPane
    showTabsOnActionBar: true
    onCreationCompleted: {
        OrientationSupport.supportedDisplayOrientation = SupportedDisplayOrientation.All;
        tabPane.activeTab = compassTab;
    }
/* Block of statements for other tabs such as Motion Alarm, Compass, Flashlight, Motion Alarm and Collision Detector.*/
Tab {
        id: rotation3DTab
        title: qsTr("Rotation 3D")
        imageSource: "images/rotation3d.png"

        Page {
            ControlDelegate {
                source: "rotation3D.qml"
                delegateActive: (tabPane.activeTab == rotation3DTab)
            }
        }
    }
}


rotation3D.qml:
import bb.cascades 1.0
import bb.multimedia 1.0
import QtMobility.sensors 1.2

Container {
//! [0]
    attachedObjects: [
        RotationSensor {
            id: rotation

            // Create variables to hold rotation reading values
            property real x: 0
            property real y: 0
            property real z: 0

            // Turn on the sensor
            active: true

            /* Keep the sensor active when the app isn't visible or the screen is off (requires app permission in bar-descriptor) */
            alwaysOn: true

            /* If the device isn't moving (x&amp;y&amp;z==0), don't send updates, saves power*/
            skipDuplicates: true

            onReadingChanged: { // Called when a new rotation reading is available
                x = reading.x
                y = reading.y
                z = reading.z
            }
        }
    ]
//! [0]

    layout: DockLayout {}

    ImageView {
        horizontalAlignment: HorizontalAlignment.Center
        verticalAlignment: VerticalAlignment.Center

        imageSource: "images/device.png"
    }

    Container {
        layout: AbsoluteLayout {}

//! [1]
        Label {
            layoutProperties: AbsoluteLayoutProperties {
                positionX: 480
                positionY: 685
            }

            text: qsTr("%1\u00B0").arg(rotation.x.toPrecision(4))
            textStyle {
                base: SystemDefaults.TextStyles.BodyText
                color: Color.Yellow
                fontWeight: FontWeight.Bold
            }
        }
//! [1]

        Label {
            layoutProperties: AbsoluteLayoutProperties {
                positionX: 480
                positionY: 460
            }

            text: qsTr("%1\u00B0").arg(rotation.y.toPrecision(4))
            textStyle {
                base: SystemDefaults.TextStyles.BodyText
                color: Color.Yellow
                fontWeight: FontWeight.Bold
            }
        }

        Label {
            layoutProperties: AbsoluteLayoutProperties {
                positionX: 335
                positionY: 390
            }

            text: qsTr("%1\u00B0").arg(rotation.z.toPrecision(4))
            textStyle {
                base: SystemDefaults.TextStyles.BodyText
                color: Color.Yellow
                fontWeight: FontWeight.Bold
            }
        }
    }
}
</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rimdevblog.wordpress.com/12248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rimdevblog.wordpress.com/12248/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=12248&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://devblog.blackberry.com/2012/11/blackberry-10-mobile-sensing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/57c9c41c61f6ae4d4861d58d9c09e5f1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ranbijaykumar</media:title>
		</media:content>

		<media:content url="http://rimdevblog.files.wordpress.com/2012/11/blackberry-10-mobile-sensing-1.jpg" medium="image">
			<media:title type="html">TITLE_IMAGE</media:title>
		</media:content>

		<media:content url="http://rimdevblog.files.wordpress.com/2012/11/blackberry-10-mobile-sensing-2.jpg" medium="image" />

		<media:content url="http://rimdevblog.files.wordpress.com/2012/11/blackberry-10-mobile-sensing-3.jpg" medium="image" />

		<media:content url="http://rimdevblog.files.wordpress.com/2012/11/blackberry-10-mobile-sensing-4.jpg" medium="image" />
	</item>
		<item>
		<title>Console Logging on the BlackBerry 10 Native SDK Beta 3</title>
		<link>http://devblog.blackberry.com/2012/10/blackberry-10-sdk-console-logging/</link>
		<comments>http://devblog.blackberry.com/2012/10/blackberry-10-sdk-console-logging/#comments</comments>
		<pubDate>Wed, 24 Oct 2012 13:59:00 +0000</pubDate>
		<dc:creator>garett</dc:creator>
				<category><![CDATA[How-to]]></category>
		<category><![CDATA[Native SDK Development]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Console]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[logging]]></category>
		<category><![CDATA[QML]]></category>
		<category><![CDATA[qt]]></category>

		<guid isPermaLink="false">http://devblog.blackberry.com/?p=11760</guid>
		<description><![CDATA[By Tehdog (Own work) [CC0], via Wikimedia Commons (Mute_Icon.svg, Speaker Icon.svg) Some of you may have noticed that the Beta 3 release of the BlackBerry® 10 Native SDK got a bit quieter in the console when creating Cascades™ applications. As of Qt 4.8.3, all output that used to code to the console (qDebug(), qWarning(), qCritical() [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=11760&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p style="text-align:center;"><img class="aligncenter size-full wp-image-11761" alt="TITLE_IMAGE" src="http://rimdevblog.files.wordpress.com/2012/10/console-logging.jpg?w=403&#038;h=187" height="187" width="403" /></p>
<p style="text-align:center;"><i>By Tehdog (Own work) [CC0], via Wikimedia Commons (<a href="http://upload.wikimedia.org/wikipedia/commons/3/3f/Mute_Icon.svg" target="_new">Mute_Icon.svg</a>, <a href="http://upload.wikimedia.org/wikipedia/commons/2/21/Speaker_Icon.svg" target="_new">Speaker Icon.svg</a>)</i></p>
<p>Some of you may have noticed that the Beta 3 release of the BlackBerry® 10 Native SDK got a bit quieter in the console when creating Cascades™ applications. As of Qt 4.8.3, all output that used to code to the console (qDebug(), qWarning(), qCritical() etc) is now output to slog2. This not only affects the logging from C++ but also any console.log() JavaScript logging done from within QML as well as error messages at runtime. No console output can make troubleshooting even simple issues very frustrating. Luckily there are a few workarounds detailed in the “Known limitations” section of the <a href="https://developer.blackberry.com/cascades/download/releasenotes/" target="_new">release notes</a> that can get you access to the logging information.</p>
<p><span id="more-11760"></span></p>
<p>1) This workaround gets you the logging information back to the console, but should be removed prior to publishing your application to the BlackBerry App World™ storefront. Either of the following can be done:</p>
<p>a. Use the fprintf() function with stdout or stderr as the output stream to receive output directly to the console. This is easy to do to add in-line console output from C++, but will not restore logging to the console from QML.<br />
ex fprintf(stdout, &#8220;I am a console message\n&#8221;);</p>
<p>b. Register your own message handler with the application to have all qDebug() (etc) and QML output handled however you wish (including using fprintf() as mentioned above). To do this, open your main.cpp file (the default main file for a Cascades application) and add a function similar to the following above the main method:</p>
<pre>void myMessageOutput(QtMsgType type, const char* msg){
               fprintf(stdout, "%s\n", msg);
               fflush(stdout);
}</pre>
<p>Then in the main method we need to register the above method as a message handler:</p>
<pre>int main(int argc, char **argv)
{
    Application app(argc, argv);
    qInstallMsgHandler(myMessageOutput);
    ...
}</pre>
<p>After this is done you will once again have console output!</p>
<p>2) To see debug information that is output from qDebug(), you can access the slogger2 logs as follows:</p>
<p>In the IDE, in the Target Navigator view, right-click the device target. Click Launch SSH Session.</p>
<p>In the terminal that appears, do one of the following:</p>
<ul>
<li>To view the current slogger2 logs, type slog2info.</li>
<li>To view real-time output for the processes that are being debugged (for applications that are running in development mode), type slog2info -w.</li>
<li>To view help information on slogger2, type slog2info -h.</li>
</ul>
<p>You can also access the log files directly in the /tmp/slogger22 on the device and run these logs through slog2info at a later time.</p>
<p>This works well to retrieve all logs, but has a bit more overhead than option 1b) and also does not allow you to see the logs in the console.</p>
<p>Now you have a few options to get access to the application logs, which can be used in the interim until a solution comes in a future NDK release and the above workarounds are no longer needed.</p>
<p>The workarounds mentioned above are also covered in the following places:</p>
<ul>
<li><a href="https://developer.blackberry.com/cascades/download/releasenotes/" target="_new">Cascades Beta 3 &#8211; Release Notes</a></li>
<li><a href="https://developer.blackberry.com/cascades/documentation/dev/upgrading/momenticschanges.html" target="_new">Upgrading to Beta 3 &#8211; QNX Momentics IDE changes</a></li>
<li><a href="https://developer.blackberry.com/cascades/documentation/getting_started/tools/debug_and_profile.html" target="_new">Getting Started &#8211; Debugging and profiling</a></li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rimdevblog.wordpress.com/11760/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rimdevblog.wordpress.com/11760/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=11760&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://devblog.blackberry.com/2012/10/blackberry-10-sdk-console-logging/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/75e7e69af37da351a3462a17576c2209?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gbeuk</media:title>
		</media:content>

		<media:content url="http://rimdevblog.files.wordpress.com/2012/10/console-logging.jpg" medium="image">
			<media:title type="html">TITLE_IMAGE</media:title>
		</media:content>
	</item>
		<item>
		<title>Calling all Qt ambassadors and Qt superstars!</title>
		<link>http://devblog.blackberry.com/2012/10/qt-project/</link>
		<comments>http://devblog.blackberry.com/2012/10/qt-project/#comments</comments>
		<pubDate>Thu, 18 Oct 2012 14:34:56 +0000</pubDate>
		<dc:creator>Alex Kinsella</dc:creator>
				<category><![CDATA[Cascades]]></category>
		<category><![CDATA[Native SDK Development]]></category>
		<category><![CDATA[BlackBerry 10]]></category>
		<category><![CDATA[BlackBerry 10 apps]]></category>
		<category><![CDATA[QML]]></category>
		<category><![CDATA[qt]]></category>

		<guid isPermaLink="false">http://devblog.blackberry.com/?p=11756</guid>
		<description><![CDATA[Guest post from Ash N. &#8211; Ed. BlackBerry® is serious about developers, serious about applications, and serious about Qt. With this in mind, we are asking for all you Qt ambassadors and Qt superstars to try porting your Qt applications over to the BlackBerry® PlayBook™ tablet and upcoming BlackBerry® 10 smartphones. With this in mind, [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=11756&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-11757" title="" alt="TITLE_IMAGE" src="http://rimdevblog.files.wordpress.com/2012/10/rim-qt.jpg?w=520&#038;h=259" height="259" width="520" /></p>
<p><i>Guest post from Ash N. &#8211; Ed.</i></p>
<p>BlackBerry® is serious about developers, serious about applications, and serious about Qt. With this in mind, we are asking for all you Qt ambassadors and Qt superstars to try porting your Qt applications over to the BlackBerry® PlayBook™ tablet and upcoming BlackBerry® 10 smartphones.</p>
<p>With this in mind, we have a post on the <a href="https://qt-project.org/forums/viewthread/20157/" target="_new">Qt Project Website</a>. What we need from you is:</p>
<ul>
<li>For you to be a member of the “Qt on BlackBerry and QNX” group (if you are not, then please register to become a member)</li>
<li>Send a proposal of the application(s) you will / are considering porting or have ported</li>
<li>Send us a link to where you will make your code available OR if you do not to make the code public, then please provide us evidence that you are developing using Qt</li>
</ul>
<p>In return, you will be automatically entered into our weekly draw for a free BlackBerry PlayBook tablet. We even have Mondays reserved for Qt porting at the <a href="https://developer.blackberry.com/devzone/jamcommunity/techcenters.html" target="_new">BlackBerry Tech Center</a> in Slough, UK if you need some in-person help.</p>
<p>Sounds good? Log on to the <a href="https://qt-project.org/forums/viewthread/20157/" target="_new">Qt Project</a> website for all the links and info!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rimdevblog.wordpress.com/11756/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rimdevblog.wordpress.com/11756/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=11756&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://devblog.blackberry.com/2012/10/qt-project/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7d0e94a7e96e80d5911732d43f31a39c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Alex K.</media:title>
		</media:content>

		<media:content url="http://rimdevblog.files.wordpress.com/2012/10/rim-qt.jpg" medium="image">
			<media:title type="html">TITLE_IMAGE</media:title>
		</media:content>
	</item>
		<item>
		<title>Qt and Cascades Training in October</title>
		<link>http://devblog.blackberry.com/2012/09/cascades-training/</link>
		<comments>http://devblog.blackberry.com/2012/09/cascades-training/#comments</comments>
		<pubDate>Thu, 20 Sep 2012 16:23:44 +0000</pubDate>
		<dc:creator>garett</dc:creator>
				<category><![CDATA[Cascades]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[How-to]]></category>
		<category><![CDATA[Native SDK Development]]></category>
		<category><![CDATA[Bay Area]]></category>
		<category><![CDATA[Berlin]]></category>
		<category><![CDATA[KDAB]]></category>
		<category><![CDATA[native]]></category>
		<category><![CDATA[QML]]></category>
		<category><![CDATA[qt]]></category>
		<category><![CDATA[Training C++]]></category>
		<category><![CDATA[Valley]]></category>

		<guid isPermaLink="false">http://devblog.blackberry.com/?p=11105</guid>
		<description><![CDATA[KDAB, a company with tons of experience providing Qt consultation services and delivering Qt training, has created a brand new course for Cascades™ application development:  Programming with Qt and Cascades for BlackBerry® 10. This is an intense five-day workshop in which Qt experts from KDAB will teach you how to develop apps using Cascades and [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=11105&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p style="text-align:center;"><img class="aligncenter size-full wp-image-11106" title="Qt_TAT" src="http://rimdevblog.files.wordpress.com/2012/09/qt_tat.jpg?w=383&#038;h=215" alt="TITLE_IMAGE" width="383" height="215" /></p>
<p>KDAB, a company with tons of experience providing Qt consultation services and delivering Qt training, has created a brand new course for Cascades™ application development:  <strong>Programming with Qt and Cascades for BlackBerry® 10</strong>.</p>
<p>This is an intense five-day workshop in which Qt experts from KDAB will teach you how to develop apps using Cascades and Qt in QML and C++.  You can check out the layout of KDAB’s course by going <a href="http://www.kdab.com/training/courses/programming-with-qt-and-cascades-for-bb10/">here</a>.</p>
<p>KDAB is offering this course in <strong>Berlin on October 8-12</strong> and in the <strong>Bay Area on October 22-26</strong>.  Visit <a href="http://www.kdab.com/schedule/">KDAB’s website</a> to register for either session.  Better hurry, though, because seating is limited!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rimdevblog.wordpress.com/11105/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rimdevblog.wordpress.com/11105/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=11105&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://devblog.blackberry.com/2012/09/cascades-training/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/75e7e69af37da351a3462a17576c2209?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gbeuk</media:title>
		</media:content>

		<media:content url="http://rimdevblog.files.wordpress.com/2012/09/qt_tat.jpg" medium="image">
			<media:title type="html">Qt_TAT</media:title>
		</media:content>
	</item>
		<item>
		<title>Dude, where’s my paint() function? &#8211; Custom UI in Cascades</title>
		<link>http://devblog.blackberry.com/2012/09/cascades-custom-ui/</link>
		<comments>http://devblog.blackberry.com/2012/09/cascades-custom-ui/#comments</comments>
		<pubDate>Thu, 13 Sep 2012 17:19:30 +0000</pubDate>
		<dc:creator>Alex Kinsella</dc:creator>
				<category><![CDATA[Cascades]]></category>
		<category><![CDATA[Native SDK Development]]></category>
		<category><![CDATA[BlackBerry 10]]></category>
		<category><![CDATA[custom UI]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[QML]]></category>
		<category><![CDATA[ui]]></category>

		<guid isPermaLink="false">http://devblog.blackberry.com/?p=10954</guid>
		<description><![CDATA[Guest post from Anders &#8211; Ed. Since the first release of the Cascades™ Beta, we have received a lot of feedback, suggestions and questions from developers trying it out. Thank you for all of this &#8212; we are very grateful! It really helps us get perspective on what we are doing, how it is perceived, [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=10954&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><em>Guest post from Anders &#8211; Ed.</em></p>
<p>Since the first release of the Cascades™ Beta, we have received a lot of feedback, suggestions and questions from developers trying it out. Thank you for all of this &#8212; we are very grateful! It really helps us get perspective on what we are doing, how it is perceived, and where we still have work to do.</p>
<p>Some of the most common questions are about custom UI: How do I create a custom UI component? How do I extend the existing components? How do I implement my own paint() method?</p>
<p>Custom UI works very differently in Cascades compared to how it used to work in the old BlackBerry® Java® platform, and in this blog post I want to try to bring some clarity to that &#8212; how it works and why it works in the way it does.</p>
<p>I’ll start off by briefly comparing how Cascades renders its UI compared to traditional widget toolkits such as the BlackBerry Java UI. Understanding the differences explains why custom UI has to be approached differently in the two architectures.</p>
<p><span id="more-10954"></span></p>
<h3><strong>Traditional UI rendering – Immediate mode rendering</strong></h3>
<p>In the BlackBerry Java platform and in many UI toolkits for desktop and mobile, UI is rendered using “widgets” drawn with “paint()” calls. The exact naming of the building blocks and functions differs between implementations, but the principle is the same and is often called immediate mode rendering. The application developer constructs a hierarchy of widgets, with each one representing a specific area on the screen. A more advanced widget can consist of a parent widget and a number of child widgets. For example, a list could consist of a widget drawing the background, widgets representing each item and a widget representing the scroll bar. Together they represent a List Widget. The position of each individual widget is decided by the system using a layout engine. The positions are based on where the application wants them to be, and often it is possible to add completely custom layout code as well. However, the actual content &#8211; what the widget is drawing on the screen &#8211; is completely up to the application to draw when the rendering engine asks it to.</p>
<p>The application uses low level drawing commands such as “DrawLine”, “DrawCircle”, “SetColor”, and so on to draw the widget on a pixel buffer. Finally, the system composites the whole screen by going through the set of widgets, making sure their position is updated (based on animations, scrolling, etc.) and asks the widgets to draw themselves on the piece of screen real estate which is theirs. The callback from the rendering thread, where the widget should issue their draw commands, is typically called the “paint()” method.</p>
<p>(As a side note, there are usually other steps in the rendering where the application gets callbacks, such as layout() to do custom layouts. The same reasoning can be applied for those cases as well.)</p>
<p>From a threading perspective it can be represented as the picture below.</p>
<p style="text-align:center;"><img class="aligncenter size-full wp-image-10956" src="http://rimdevblog.files.wordpress.com/2012/09/cascades-paint-1.jpg?w=480&#038;h=329" alt="TITLE_IMAGE" width="480" height="329" /></p>
<p>Often the UI Framework contains a predefined set of UI widgets for the application to use. If the developer wanted to customize a widget, it could selectively overload the paint() method and replace it with custom drawing commands, or call the old paint() method but decorate it with new custom code.<br />
Immediate mode rendering is easy to work with and works well in many cases, but it certainly has limitations and drawbacks:</p>
<ul>
<li><strong>The application can block the rendering thread.</strong> Since the rendering thread is calling app code in the paint() method, slow code in one widget could easily slow down the whole UI.</li>
<li><strong>Overdraw.</strong> It’s fairly easy for the rendering engine to understand which widgets are totally obscured by others (although transparency makes it a little complicated), but for partly obscured or clipped widgets, usually the drawing code can only draw a complete widget, hence many pixels gets drawn and then overdrawn several times.</li>
<li><strong>Hard to optimize for GPUs.</strong> Modern GPUs have been designed mainly for gaming, where most of the geometry, textures, and so on is known beforehand. As a result, GPUs like to have their work nicely organized for them in terms of drawing states and textures. “First let’s draw everything of this kind then let’s draw everything of that kind” – that’s how your GPU likes to roll! Optimizing the drawing commands in an immediate mode rendering is inherently difficult because there is no single place where the complete rendering work is known. The rendering is spread out in autonomous widgets. The result is that the GPU needs to change state constantly and shuffle textures in and out of graphics memory.</li>
<li><strong>Overloading overload.</strong> Overloading paint() methods and UI behavioral methods works for simpler widgets, but when widgets get complex with lots of features and lots of dynamics, it gets really hairy. You more or less have to expose every single behavior as an overloadable function, and it has to work no matter what combinations of function overloads the developer chooses to implement. This puts great pressure on the internal design of the widgets and a wide API to test and maintain. It also makes it cumbersome to add new features and behaviors without messing up something else. In the end, for complex controls, you just can’t make any assumptions about anything, because anything may be overloaded with unknown application code.</li>
</ul>
<p>Of course, there are ways of working around these problems, but immediate mode rendering has a hard time performing well on modern hardware, and more modern kinds of rendering engines are taking over using retained mode rendering.</p>
<h3><strong>Modern UI rendering – Retained mode rendering</strong></h3>
<p>Cascades uses a fundamentally different way of rendering known as retained mode rendering. Instead of letting the application be an active part of the rendering loop, the application only manages the ui tree. When the rendering engine needs to render, it takes the current state of the ui tree and renders it. To use a gaming analogy, in retained mode rendering the UI becomes a “scene” that’s being rendered by the rendering engine.</p>
<p>Since the application is not directly involved in the rendering, slow application code cannot block the rendering, which generally means better performance. There are ways to get a slow UI anyway, generally by making the scene big or complex. Also, if the application can’t feed the data of the scene fast enough &#8211; for example, not providing list items to a list &#8211; the UI can be perceived slow by the user, but the actual rendering is never delayed.</p>
<p>As an example, you can try to create a really slow ListItemManager in Cascades that sleeps for a second every time it provides an item. Even if the list populates slowly, you will be able to scroll the list smoothly.</p>
<p><img class="aligncenter size-full wp-image-10955" title="" src="http://rimdevblog.files.wordpress.com/2012/09/cascades-paint-2.jpg?w=466&#038;h=368" alt="" width="466" height="368" /></p>
<p>Another great advantage with retained mode rendering is that the UI engine can get a holistic view of the whole UI and optimize textures, states, and so on for the GPU.</p>
<p>Needless to say, using function overloading for customization does not work very well with retained mode rendering since it would introduce callbacks to the application from the rendering thread. It could be used for overloading behaviors that are completely disconnected from the rendering of the control, but not a lot for UI features that are completely disconnected from the rendering.</p>
<p>A retained mode renderer has one inherent quirk that is good to know about: Since the application cannot block the rendering thread, the application can never know exactly where things are on the screen. You can listen to layout updates, but once you get the updates in your app, you cannot be 100% sure that the position is up to date. A new frame could have been rendered and moved your object. That may sound like a huge limitation, but in real life it’s usually not a problem. Also, writing code that depends on where things are on the screen is often a recipe for bugs, especially when moving between different form factors and orientations.</p>
<p>This explains why the paint() method is gone in Cascades. There is also another aspect to consider: UI consistency.</p>
<h3><strong>UI Consistency</strong></h3>
<p>There is also a design consistency aspect to customization. With BlackBerry® 10, the RIM® designers have spent a lot of time designing, prototyping and testing out the core UI controls. They look and feel as they do because of deeply thought-through considerations and design decisions. They should be considered a unit together rather than individual classes spread out in the class hierarchy.</p>
<p>Hence, we are sensitive to letting developers change them too much. It would break the unity and cause inconsistencies, and BlackBerry device users would have a hard time finding their way in applications. They might start to wonder why a radio button behaves in one way in one app but another way in another app.</p>
<p>We definitely could have chosen a different path and focused on making the controls generic and easy to customize, making it simple for each individual developer to make their own drop down, picker or progress bar. However, we really wanted a consistent look and feel of the core UI. Does that mean every app has to look the same? Of course not. Firstly, some controls are more prone to being customized such as buttons. We chose to make them more generic and support greater customization options or generally more usable for compositions. The ImageButton and Container represent such cases.</p>
<p>Secondly, the core UI is designed to cover the most common need for an app developer, but it can never cover all cases. For some applications, unique and innovative UI is a big part of the application, and this is something we embrace and encourage with Cascades. For those cases, we believe the right strategy is to build a new custom control based on some basic generic building blocks, rather than a “Frankentrol” &#8212; a mix between a core component and something completely custom. The Cascades development paradigm with declarative QML and JavaScript is actually a very good fit for this.</p>
<h3><strong>Custom UI in Cascades</strong></h3>
<p>So if the pattern for Custom UI in an immediate mode renderer is overloading functions and overriding paint(), what’s the pattern in Cascades? In general, in Cascades &#8211; and for controls in specific &#8211; we greatly prefer composition over inheritance. You build custom UI in Cascades by compositing “interactive UI subscenes”. You composite simpler controls into a more complex control and add dynamics by implementing event handlers, adding animations and data connections. QML and JavaScript make this very easy. You get a quick preview in Momentix, quickly deploy the QML file and try out the behavior. Of course you can use C++ as well, but the quick turnaround times of QML and JavaScript usually become the preferred way of working with custom UI.</p>
<p>The toolbox features you should be looking for are:</p>
<ul>
<li>Generic, basic controls such as ImageView, Label, Containers, ScrollView, ImageButton</li>
<li>Animations and layouts</li>
<li>Event and gesture handling</li>
</ul>
<p>When you have reached the look and feel you want, you can package it up into something easily reusable in QML and C++ by exposing its features as QML properties and Q_INVOKABLEs.</p>
<p><em>So does that mean that you hardly can reuse anything in the existing controls?</em></p>
<p>No. In Cascades you reuse by using a control as part of your custom control composite; for example, by including a label or ImageButton as part of a more advanced custom list item. Usually you would use the more generic controls, but nothing is stopping you from including any control in your composite.</p>
<p>There are still some holes in Cascades where a generic control would make sense to avoid rewriting some boring code; for example, expanding the ImageButton with customizable text. With QML and JavaScript, rebuilding some of this functionality should be pretty fast. At the same time we are looking to add some more generic controls to save you from some not-so-exciting QML work.</p>
<p>We know there are some important layouts missing that would make some Custom UI easier to build &#8212; we are planning to add them soon.</p>
<p><em>Will I be able to implement any UI in Cascades?</em></p>
<p>Cascades has its limitations just like any other framework. We have been focusing on core UI for the first release of BlackBerry 10 because we believe that is what is most useful for most developers. We are aware of some limitations in certain areas of the framework that can make some custom UI tricky to implement. This is also why we created the <a href="http://devblog.blackberry.com/2012/08/stump-blackberry-devs/" target="_new">“Stump the Developers” challenge</a>. We want to know what is messy to do and we want to understand what kind of UI you are creating.</p>
<p>There is a classic rule of thumb for APIs: “If in doubt, leave it out.” Some APIs we have left out intentionally in the first release to make sure they are well thought-through before being published. That being said, Cascades in its first version is more than capable of handling most custom UI.</p>
<p><em>This is nice and all, but I really need a drawLine() to draw my graph.</em></p>
<p>There is nothing stopping a retained mode renderer from having lower level vector features such as drawLine. We don’t use vector graphics to draw our UI internally and we just didn’t have time to add a vector library in Cascades yet. For now you will have to use a ForeignWindowControl and draw into it using OpenGL (something along the lines of <a href="http://supportforums.blackberry.com/t5/Cascades-Development-Knowledge/Using-OpenGL-in-a-Cascades-ForeignWindow/ta-p/1785779" target="_new">this tutorial</a>) or perhaps an open source graph renderer. This would be useful for many developers, so it’s a great opportunity for a friendly developer to contribute this to one of our repositories on <a href="https://github.com/blackberry" target="_new">github</a> <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><em>Okay I got it, you don’t want us to change your core controls. But I just want to change color to make them match the color scheme of my app. Why can’t I do that?</em></p>
<p>The next release of Cascades will support two color themes &#8212; light theme and dark theme. Adding free colorization of controls is trickier than you would think. A control in Cascades is not just a couple of different colored texts and boxes, but instead composites of several layers of visuals with subtle patterns, shading and transitions. Translating that into simple parameters where random colors can be assigned is not easy. A simple color based themeing system is perhaps not the way forward. Again, we are in doubt, so we have left it out &#8212; at least for now.</p>
<h3><strong>Summary</strong></h3>
<p>Due to the different rendering architecture and UX consistency reasons, custom UI works differently than how it used to work in BlackBerry Java. Instead of relying on overloading paint() and other drawing methods, you build custom UI by combining existing UI controls and defining their behavior using animations and custom event handling. Using QML and JavaScript, this can be done in a quick and agile fashion. Compositing basic controls into more complex ones are the way to build Custom UI in Cascades.</p>
<p>We are still looking for feedback in this area and have already seen some areas of improvement. We love to see great custom UI so this is an area where you can expect more features coming in the future.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rimdevblog.wordpress.com/10954/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rimdevblog.wordpress.com/10954/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=10954&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://devblog.blackberry.com/2012/09/cascades-custom-ui/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7d0e94a7e96e80d5911732d43f31a39c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Alex K.</media:title>
		</media:content>

		<media:content url="http://rimdevblog.files.wordpress.com/2012/09/cascades-paint-1.jpg" medium="image">
			<media:title type="html">TITLE_IMAGE</media:title>
		</media:content>

		<media:content url="http://rimdevblog.files.wordpress.com/2012/09/cascades-paint-2.jpg" medium="image" />
	</item>
		<item>
		<title>QML/Cascades tip of the day – Property Aliases</title>
		<link>http://devblog.blackberry.com/2012/07/qml-tip-property-aliases/</link>
		<comments>http://devblog.blackberry.com/2012/07/qml-tip-property-aliases/#comments</comments>
		<pubDate>Wed, 18 Jul 2012 13:06:48 +0000</pubDate>
		<dc:creator>Alex Kinsella</dc:creator>
				<category><![CDATA[Cascades]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[property alias]]></category>
		<category><![CDATA[QML]]></category>
		<category><![CDATA[tip]]></category>

		<guid isPermaLink="false">http://devblog.blackberry.com/?p=10246</guid>
		<description><![CDATA[This week's QML/Cascades tip focuses on creating property aliases and why they'll be your friend when creating custom components in QML.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=10246&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><em>Here&#8217;s <a href="https://twitter.com/marioboikov">Mario</a> with another handy QML/Cascades tip &#8211; Ed.</em></p>
<p>In today&#8217;s post, I&#8217;ll talk about <em>property aliases</em> and why they&#8217;ll be your friend when creating custom components in QML. I&#8217;ll give you an introduction to the topic by creating a Header component, which consists of a Label and a Divider wrapped inside a Container.</p>
<p>I assume that you already know how to create custom components in QML. Basically you create a new file and name it to whatever the name of your component is, for example &#8216;Header.qml&#8217;. So say we have a file &#8216;Header.qml&#8217; with the following content:</p>
<pre>import bb.cascades 1.0

Container {

    Label {
        id: titleLabel
        text: "Sample Title"
        textStyle.base: SystemDefaults.TextStyles.TitleText
    }

    Divider {
    }
}</pre>
<p><span id="more-10246"></span></p>
<p>To create a Header instance from another QML file, we simply write the following lines:</p>
<pre>...

Header {
}

...</pre>
<p>Looks good, but I assume that we also want to set the title to something more appropriate for the context where the header is to be used. Because we don&#8217;t have direct access to the Label&#8217;s text property from outside the Header component (you can only access top level properties), we need to add a new property to the Container in the Header component:</p>
<pre>import bb.cascades 1.0

Container {
    property string titleText: “Sample Title”

    Label {
        id: titleLabel
        text: titleText
        textStyle.base: SystemDefaults.TextStyles.TitleText
    }

    Divider {
    }
}</pre>
<p>The Label&#8217;s text property binds to the newly added <em>titleText</em> property. Now we can specify a title by setting the titleText property:</p>
<pre>Header {
    titleText: “My Header”
}</pre>
<p>Looks nice and works great, but I&#8217;m still not satisfied. I had to introduce a new property just to be able to specify a title text. What I actually want is to expose the Label&#8217;s <em>text</em> property to users of the Header component. Fortunately there&#8217;s a solution for this, and the name is <em>property alias</em>:</p>
<pre>import bb.cascades 1.0

Container {
    property alias titleText: titleLabel.text

    Label {
        id: titleLabel
        text: “Sample Title”
        textStyle.base: SystemDefaults.TextStyles.TitleText
    }

    Divider {
    }
}</pre>
<p>Much better. We got rid of the <em>titleText</em> property by simply making it an alias to the titleLabel&#8217;s <em>text</em> property instead. Even the instance of the Label can be exposed as an alias, which gives you access to all of the Label&#8217;s properties, if that&#8217;s what you need:</p>
<pre>import bb.cascades 1.0

Container {
    property alias titleLabel: titleLabel

    Label {
        id: titleLabel
        text: “Sample Title”
        textStyle.base: SystemDefaults.TextStyles.TitleText
    }

    Divider {
    }
}</pre>
<p>Now that we have access to all of the Label&#8217;s properties, we can also change the text style:</p>
<pre>Header {
    titleLabel {
        text: “My Title”
        textStyle.base: SystemDefaults.TextStyles.TitleText
    }
}</pre>
<p>Handy, right?</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rimdevblog.wordpress.com/10246/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rimdevblog.wordpress.com/10246/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=10246&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://devblog.blackberry.com/2012/07/qml-tip-property-aliases/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7d0e94a7e96e80d5911732d43f31a39c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Alex K.</media:title>
		</media:content>
	</item>
		<item>
		<title>More Cascades Webcast Sessions!</title>
		<link>http://devblog.blackberry.com/2012/06/more-cascades-webcast-sessions/</link>
		<comments>http://devblog.blackberry.com/2012/06/more-cascades-webcast-sessions/#comments</comments>
		<pubDate>Mon, 25 Jun 2012 14:12:37 +0000</pubDate>
		<dc:creator>garett</dc:creator>
				<category><![CDATA[Cascades]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[animations]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[custom components]]></category>
		<category><![CDATA[native]]></category>
		<category><![CDATA[QML]]></category>
		<category><![CDATA[ui]]></category>
		<category><![CDATA[webcast]]></category>

		<guid isPermaLink="false">http://devblog.blackberry.com/?p=9890</guid>
		<description><![CDATA[A second Cascades webcast session will be taking place on Tuesday June 26th.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=9890&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p style="text-align:center;"><a href="http://rimdevblog.files.wordpress.com/2012/06/cascades2.jpg"><img class="aligncenter  wp-image-9979" title="cascades2" src="http://rimdevblog.files.wordpress.com/2012/06/cascades2.jpg?w=556&#038;h=167" alt="TITLE_IMAGE" width="556" height="167" /></a></p>
<p>After the phenomenal response to the <a href="http://devblog.blackberry.com/2012/06/your-second-chance-at-getting-started-with-cascades/" target="_new">first Cascades™ webcast</a>, I am pleased to let you know that we will be continuing with a second supplementary session Tuesday June 26th: <em>Astonishing UIs using the new BlackBerry® 10 framework continued</em>.</p>
<p>This session will use the knowledge gained in the first session and build upon some of the key concepts that make up Cascades, digging deeper into their functionality. The key features being discussed will be: animations, lists and custom UI components. We will be focusing mostly on the QML aspect of development but will begin to introduce some C++ concepts that will be required to perform some more advanced tasks in Cascades.</p>
<p>Registration is now open &#8212; hope to have you there! Come armed with your questions and knowledge gained from the first session.</p>
<p><strong>Get Registered Here:</strong><br />
<a href="http://www.blackberrydeveloperevents.com/events/webcast/registration/register.html?scoid=1047459465" target="_new">http://www.blackberrydeveloperevents.com/events/webcast/registration/register.html?scoid=1047459465</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rimdevblog.wordpress.com/9890/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rimdevblog.wordpress.com/9890/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=9890&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://devblog.blackberry.com/2012/06/more-cascades-webcast-sessions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/75e7e69af37da351a3462a17576c2209?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gbeuk</media:title>
		</media:content>

		<media:content url="http://rimdevblog.files.wordpress.com/2012/06/cascades2.jpg" medium="image">
			<media:title type="html">cascades2</media:title>
		</media:content>
	</item>
	</channel>
</rss>
