<?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>Secret Lab</title>
	<atom:link href="http://blog.secretlab.com.au/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.secretlab.com.au</link>
	<description>We convert coffee into games.</description>
	<lastBuildDate>Tue, 21 May 2013 10:15:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='blog.secretlab.com.au' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://1.gravatar.com/blavatar/bb65d171b850163072c1598522ede485?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Secret Lab</title>
		<link>http://blog.secretlab.com.au</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://blog.secretlab.com.au/osd.xml" title="Secret Lab" />
	<atom:link rel='hub' href='http://blog.secretlab.com.au/?pushpress=hub'/>
		<item>
		<title>OSCON 2013</title>
		<link>http://blog.secretlab.com.au/2013/05/21/oscon-2013/</link>
		<comments>http://blog.secretlab.com.au/2013/05/21/oscon-2013/#comments</comments>
		<pubDate>Tue, 21 May 2013 10:08:12 +0000</pubDate>
		<dc:creator>Doctor Science</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Training]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[oscon]]></category>
		<category><![CDATA[oscon2013]]></category>
		<category><![CDATA[portland]]></category>
		<category><![CDATA[speaking]]></category>
		<category><![CDATA[trainings]]></category>
		<category><![CDATA[usa]]></category>

		<guid isPermaLink="false">http://blog.secretlab.com.au/?p=475</guid>
		<description><![CDATA[We&#8217;re very pleased to be presenting at O&#8217;Reilly&#8217;s OSCON conference in Portland once again this year. We&#8217;re involved in two tutorials this time around! For the first time at OSCON, Jon Manning and Paris Buttfield-Addison will be presenting a half-day tutorial on game design where they&#8217;ll discuss what makes games fun, how they work, and [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.secretlab.com.au&#038;blog=36546876&#038;post=475&#038;subd=tothesecretlab&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-437" alt="OSCON 2013" src="http://parisba.files.wordpress.com/2013/04/oscon2013_logo.png?w=640"   />We&#8217;re very pleased to be presenting at O&#8217;Reilly&#8217;s OSCON conference in Portland once again this year. We&#8217;re involved in two tutorials this time around!</p>
<p>For the first time at OSCON, <a href="http://twitter.com/desplesda">Jon Manning</a> and <a href="http://twitter.com/parisba">Paris Buttfield-Addison</a> will be presenting a half-day tutorial on game design where they&#8217;ll discuss what makes games fun, how they work, and how you can apply game design techniques to your daily non-game related work. This tutorial is hands-on, very practical, lots of fun, and is called <a title="Learn how to game design at OSCON 2013" href="http://www.oscon.com/oscon2013/public/schedule/detail/29004">How Do I Game Design?</a></p>
<p>For the third year in a row <a href="http://twitter.com/chrisjrn">Chris Neugebauer</a>, along with Jon and Paris, will be presenting a half-day tutorial on mobile application development with a focus on user-experience. As with the last two years, we&#8217;ll be using Android as the platform we discuss the most – but everything will be applicable to all mobile platforms. The tutorial is called <a title="Level Up Your Apps at OSCON 2013" href="http://www.oscon.com/oscon2013/public/schedule/detail/29002">Level Up Your Apps: Mobile UX Design and Development</a>.</p>
<p>We hope to see you at OSCON!</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.secretlab.com.au&#038;blog=36546876&#038;post=475&#038;subd=tothesecretlab&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.secretlab.com.au/2013/05/21/oscon-2013/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6ed02dec32058508c6feb43b2fbc94f7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">secretlabcomau</media:title>
		</media:content>

		<media:content url="http://parisba.files.wordpress.com/2013/04/oscon2013_logo.png" medium="image">
			<media:title type="html">OSCON 2013</media:title>
		</media:content>
	</item>
		<item>
		<title>Book on Sale</title>
		<link>http://blog.secretlab.com.au/2013/04/11/book-on-sale/</link>
		<comments>http://blog.secretlab.com.au/2013/04/11/book-on-sale/#comments</comments>
		<pubDate>Thu, 11 Apr 2013 19:55:57 +0000</pubDate>
		<dc:creator>Paris Buttfield-Addison</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Book]]></category>
		<category><![CDATA[sale]]></category>

		<guid isPermaLink="false">https://tothesecretlab.wordpress.com/?p=470</guid>
		<description><![CDATA[This promotion has now ended! You can still grab our book at O&#8217;Reilly&#8217;s site. The newest book (released December 2012) by Jon Manning and Paris Buttfield-Addison, co-founders of Secret Lab, is currently on sale from O&#8217;Reilly! Our book, along with a collection of other great iOS-development books, is available in the Build Successful iOS Apps [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.secretlab.com.au&#038;blog=36546876&#038;post=470&#038;subd=tothesecretlab&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><em>This promotion has now ended! You can still grab our book at <a href="http://shop.oreilly.com/product/0636920023203.do" title="Secret Lab's book Learning Cocoa with Objective-C">O&#8217;Reilly&#8217;s site</a>.</em></p>
<p><a href="http://parisba.files.wordpress.com/2013/04/20130411-155328.jpg"><img src="http://parisba.files.wordpress.com/2013/04/20130411-155328.jpg?w=640" alt="20130411-155328.jpg" class="aligncenter size-full" /></a></p>
<p>The newest book (released December 2012) by Jon Manning and Paris Buttfield-Addison, co-founders of Secret Lab, is currently on sale from O&#8217;Reilly! Our book, along with a collection of other great iOS-development books, is available in the <em>Build Successful iOS Apps</em> sale. </p>
<p>You can use the discount code <strong>WKPRGS6</strong> or visit <a href="http://go.secretlab.co/OELh" rel="nofollow">http://go.secretlab.co/OELh</a> to get 50% off.</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.secretlab.com.au&#038;blog=36546876&#038;post=470&#038;subd=tothesecretlab&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.secretlab.com.au/2013/04/11/book-on-sale/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/b51d6fa042e820ae461f101240131d52?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">parisba</media:title>
		</media:content>

		<media:content url="http://parisba.files.wordpress.com/2013/04/20130411-155328.jpg" medium="image">
			<media:title type="html">20130411-155328.jpg</media:title>
		</media:content>
	</item>
		<item>
		<title>Letterpress Business Cards</title>
		<link>http://blog.secretlab.com.au/2013/03/26/letterpress-business-cards/</link>
		<comments>http://blog.secretlab.com.au/2013/03/26/letterpress-business-cards/#comments</comments>
		<pubDate>Tue, 26 Mar 2013 17:52:35 +0000</pubDate>
		<dc:creator>Paris Buttfield-Addison</dc:creator>
				<category><![CDATA[Stuff]]></category>
		<category><![CDATA[hipster]]></category>
		<category><![CDATA[hobart]]></category>
		<category><![CDATA[letterpress]]></category>
		<category><![CDATA[printing]]></category>

		<guid isPermaLink="false">https://tothesecretlab.wordpress.com/?p=464</guid>
		<description><![CDATA[onetonnegraphic made us some fabulous letterpress business cards on 300gsm cotton cream paper. Beautiful stuff! Check out the video for a behind the scenes look at the process.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.secretlab.com.au&#038;blog=36546876&#038;post=464&#038;subd=tothesecretlab&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<span class='embed-youtube' style='text-align:center; display: block;'><iframe class='youtube-player' type='text/html' width='500' height='312' src='http://www.youtube.com/embed/ObXo7WROqgI?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><a href="http://www.onetonnegraphic.com/">onetonnegraphic</a> made us some fabulous letterpress business cards on 300gsm cotton cream paper. Beautiful stuff! Check out the video for a behind the scenes look at the process.</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.secretlab.com.au&#038;blog=36546876&#038;post=464&#038;subd=tothesecretlab&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.secretlab.com.au/2013/03/26/letterpress-business-cards/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/b51d6fa042e820ae461f101240131d52?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">parisba</media:title>
		</media:content>
	</item>
		<item>
		<title>GDC 2013</title>
		<link>http://blog.secretlab.com.au/2013/03/25/gdc-2013/</link>
		<comments>http://blog.secretlab.com.au/2013/03/25/gdc-2013/#comments</comments>
		<pubDate>Mon, 25 Mar 2013 23:18:06 +0000</pubDate>
		<dc:creator>Doctor Science</dc:creator>
				<category><![CDATA[Stuff]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[Gdc]]></category>

		<guid isPermaLink="false">https://tothesecretlab.wordpress.com/?p=461</guid>
		<description><![CDATA[Secret Lab is at GDC 2013 in San Francisco this week. If you&#8217;re in town, let us know or say hello!<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.secretlab.com.au&#038;blog=36546876&#038;post=461&#038;subd=tothesecretlab&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a href="http://tothesecretlab.files.wordpress.com/2013/03/20130325-161731.jpg"><img src="http://tothesecretlab.files.wordpress.com/2013/03/20130325-161731.jpg?w=640" alt="20130325-161731.jpg" class="alignnone size-full" /></a></p>
<p>Secret Lab is at GDC 2013 in San Francisco this week. If you&#8217;re in town, let us know or say hello!</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.secretlab.com.au&#038;blog=36546876&#038;post=461&#038;subd=tothesecretlab&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.secretlab.com.au/2013/03/25/gdc-2013/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6ed02dec32058508c6feb43b2fbc94f7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">secretlabcomau</media:title>
		</media:content>

		<media:content url="http://tothesecretlab.files.wordpress.com/2013/03/20130325-161731.jpg" medium="image">
			<media:title type="html">20130325-161731.jpg</media:title>
		</media:content>
	</item>
		<item>
		<title>Using Gesture Recognizers with Cocos2D and CCNode + SFGestureRecognizer</title>
		<link>http://blog.secretlab.com.au/2012/12/21/using-gesture-recognizers-with-cocos2d-and-ccnode-sfgesturerecognizer/</link>
		<comments>http://blog.secretlab.com.au/2012/12/21/using-gesture-recognizers-with-cocos2d-and-ccnode-sfgesturerecognizer/#comments</comments>
		<pubDate>Fri, 21 Dec 2012 03:10:13 +0000</pubDate>
		<dc:creator>Jon Manning</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[cocos]]></category>
		<category><![CDATA[cocos2d]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[gesture]]></category>
		<category><![CDATA[gestures]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[leonardo]]></category>
		<category><![CDATA[moon ship]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[recogniser]]></category>
		<category><![CDATA[recognizers]]></category>

		<guid isPermaLink="false">http://blog.secretlab.com.au/?p=444</guid>
		<description><![CDATA[One of the most interesting and useful features that iOS includes is the gesture recogniser. Gesture recognisers are objects that are attached to views, and look for specific patterns of touches. When a gesture recogniser notices that the user has interacted in the way that it&#8217;s looking for, it notifies a delegate. Prior to gesture [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.secretlab.com.au&#038;blog=36546876&#038;post=444&#038;subd=tothesecretlab&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>One of the most interesting and useful features that iOS includes is the gesture recogniser. Gesture recognisers are objects that are attached to views, and look for specific patterns of touches. When a gesture recogniser notices that the user has interacted in the way that it&#8217;s looking for, it notifies a delegate.</p>
<p>Prior to gesture recognisers, handling complex gestures like pinching or rotation was a lot harder than it had to be. Time was, developers had to manually track the touches involved in a gesture, and measure how they were moving over time; nowadays, we just do this:</p>
<pre class="brush: objc; title: ; notranslate">
UIRotationGestureRecognizer* rotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotated:)];
[self addGestureRecognizer:rotation];
</pre>
<p>And then have a method that gets run when the user interacts with the view with a rotation gesture:</p>
<pre class="brush: objc; title: ; notranslate">
- (void) rotated:(UIRotationGestureRecognizer*)rotation {
  if (rotated.state == UIGestureRecognizerStateChanged) {
       // the rotation gesture has changed, do something about it
  }
}
</pre>
<p>Gesture recognisers are one of those APIs that are completely obvious once you think about them, and solve a potentially tricky problem very cleanly. However, gesture recognisers have to work within the bounds of how views in iOS work, which can have some interesting consequences for using them in games.</p>
<p>To put it briefly: how can we use gesture recognisers in OpenGL-based games?</p>
<p>Here&#8217;s the problem: gesture recognisers work by being attached to views; when a touch lands on the screen, UIKit determines which view the finger belongs to, and this information is used for tracking gestures.</p>
<p>However, all OpenGL games do their main work using a single view &#8211; the OpenGL view in which all rendering takes place. This is true regardless of whether you&#8217;re drawing complex 3D graphics or simple 2D sprites. And this can mean that gesture recognisers are trickier to do, because when the finger lands on the screen, UIKit will say, &#8220;hey, the view that was touched was the OpenGL view! Job done, you&#8217;re welcome, see you later!&#8221;</p>
<p>So, if we want gesture recognisers, and we&#8217;re drawing using a single OpenGL view, what needs to happen is this that gesture recognisers need to be added to the OpenGL view, but are limit the areas in which they&#8217;ll look for touches to areas that depend on what&#8217;s happening in the game.</p>
<p>This is possible through the use of the <code>gestureRecognizer:shouldReceiveTouch:</code> method in the <code>UIGestureRecognizerDelegate</code> protocol. If a delegate implements this method, it&#8217;s possible to make a recogniser only track touches in certain areas.</p>
<p>This is the approach taken by <a href="https://github.com/krzysztofzablocki">Krzysztof Zabłocki&#8217;s</a> <a href="https://github.com/krzysztofzablocki/CCNode-SFGestureRecognizers">CCNode+SFGestureRecognizers</a>, which is a zlib-licensed extension to Cocos2D. CCNode+SFGestureRecognizers performs some very clever hacks, including dynamically creating classes that operate as delegates and using the Objective-C runtime&#8217;s new associated object support, that allow you to add gesture recognisers directly to CCNodes.</p>
<p>We&#8217;re using CCNode+SFGestureRecognizers in <em>Leonardo&#8217;s Moon Ship</em>, an adventure game that we&#8217;re looking forward to talking about further in the coming weeks and months, to support dragging items from the player&#8217;s inventory onto items in the game world.</p>
<p><img src="http://tothesecretlab.files.wordpress.com/2012/12/leo-dragging.jpg?w=300&#038;h=195" alt="leo-dragging" width="300" height="195" class="aligncenter size-medium wp-image-447" /></p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.secretlab.com.au&#038;blog=36546876&#038;post=444&#038;subd=tothesecretlab&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.secretlab.com.au/2012/12/21/using-gesture-recognizers-with-cocos2d-and-ccnode-sfgesturerecognizer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/93cd8098ec3d2bbfcc8bf4f95abf0b95?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">desplesda</media:title>
		</media:content>

		<media:content url="http://tothesecretlab.files.wordpress.com/2012/12/leo-dragging.jpg?w=300" medium="image">
			<media:title type="html">leo-dragging</media:title>
		</media:content>
	</item>
		<item>
		<title>iOS Developer Lab: February 2013</title>
		<link>http://blog.secretlab.com.au/2012/12/19/ios-developer-lab-sydney/</link>
		<comments>http://blog.secretlab.com.au/2012/12/19/ios-developer-lab-sydney/#comments</comments>
		<pubDate>Wed, 19 Dec 2012 23:46:09 +0000</pubDate>
		<dc:creator>Doctor Science</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Training]]></category>
		<category><![CDATA[cocoa]]></category>
		<category><![CDATA[cocoatouch]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[lab]]></category>
		<category><![CDATA[sydney]]></category>
		<category><![CDATA[training]]></category>

		<guid isPermaLink="false">http://blog.secretlab.com.au/?p=432</guid>
		<description><![CDATA[This event has now passed! Stay tuned for our next training workshop! For more information, or to register, visit the event page.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.secretlab.com.au&#038;blog=36546876&#038;post=432&#038;subd=tothesecretlab&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><em>This event has now passed! Stay tuned for our next training workshop!</em></p>
<p><a href="http://lab.to/feb2013ios"><img src="http://tothesecretlab.files.wordpress.com/2012/12/sl_training2_blog.png?w=300&#038;h=212" alt="Secret Lab iOS Developer Lab in Sydney –– 22, 23, 24 February 2013" width="300" height="212" class="aligncenter size-medium wp-image-433" /></a></p>
<div class="aligncenter">For more information, or to register, visit the <a href="http://lab.to/feb2013ios" title="Secret Lab iOS Developer Lab in Sydney –– 22, 23, 24 February 2013">event page</a>.</div>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.secretlab.com.au&#038;blog=36546876&#038;post=432&#038;subd=tothesecretlab&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.secretlab.com.au/2012/12/19/ios-developer-lab-sydney/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6ed02dec32058508c6feb43b2fbc94f7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">secretlabcomau</media:title>
		</media:content>

		<media:content url="http://tothesecretlab.files.wordpress.com/2012/12/sl_training2_blog.png?w=300" medium="image">
			<media:title type="html">Secret Lab iOS Developer Lab in Sydney –– 22, 23, 24 February 2013</media:title>
		</media:content>
	</item>
		<item>
		<title>December Developer Training in Melbourne</title>
		<link>http://blog.secretlab.com.au/2012/11/18/december-training-in-melbourne/</link>
		<comments>http://blog.secretlab.com.au/2012/11/18/december-training-in-melbourne/#comments</comments>
		<pubDate>Sun, 18 Nov 2012 05:42:18 +0000</pubDate>
		<dc:creator>Jon Manning</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Training]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[december]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[melbourne]]></category>
		<category><![CDATA[training]]></category>

		<guid isPermaLink="false">http://blog.secretlab.com.au/?p=423</guid>
		<description><![CDATA[This event has now passed! Our next training is in Sydney, February 2013! We&#8217;re exceptionally pleased to announce another training course! Join us for three days of intense iOS training in Melbourne, where you&#8217;ll learn Objective-C and iOS development from the ground up. We&#8217;ll be running the course from December 14 to 16, in the [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.secretlab.com.au&#038;blog=36546876&#038;post=423&#038;subd=tothesecretlab&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><em>This event has now passed! Our next training is <a href="http://lab.to/feb2013ios" title="iOS Developer Training by Secret Lab in Sydney, February 2013">in Sydney, February 2013</a>!</em></p>
<p><a href="http://lab.to/dec2012ios"><img class="aligncenter size-medium wp-image-424" title="Secret Lab December iOS Training" alt="" src="http://tothesecretlab.files.wordpress.com/2012/11/secret_lab_ios_evenbrite_training-december-screen.png?w=240&#038;h=300" height="300" width="240" /></a></p>
<p>We&#8217;re exceptionally pleased to announce another training course! Join us for three days of intense iOS training in Melbourne, where you&#8217;ll learn Objective-C and iOS development from the ground up. We&#8217;ll be running the course from December 14 to 16, in the heart of Melbourne&#8217;s CBD.</p>
<p>For more information, look no further than this here <a title="Melbourne iOS 6 Developer Training" href="http://lab.to/dec2012ios">internet web page site link</a>!</p>
<p style="text-align:center;">
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.secretlab.com.au&#038;blog=36546876&#038;post=423&#038;subd=tothesecretlab&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.secretlab.com.au/2012/11/18/december-training-in-melbourne/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/93cd8098ec3d2bbfcc8bf4f95abf0b95?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">desplesda</media:title>
		</media:content>

		<media:content url="http://tothesecretlab.files.wordpress.com/2012/11/secret_lab_ios_evenbrite_training-december-screen.png?w=240" medium="image">
			<media:title type="html">Secret Lab December iOS Training</media:title>
		</media:content>
	</item>
		<item>
		<title>Captain: Add Hooks to Your Code</title>
		<link>http://blog.secretlab.com.au/2012/10/31/captain-add-hooks-to-your-code/</link>
		<comments>http://blog.secretlab.com.au/2012/10/31/captain-add-hooks-to-your-code/#comments</comments>
		<pubDate>Wed, 31 Oct 2012 02:58:06 +0000</pubDate>
		<dc:creator>Jon Manning</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[foss]]></category>

		<guid isPermaLink="false">http://blog.secretlab.com.au/?p=398</guid>
		<description><![CDATA[So, here&#8217;s another something that we&#8217;ve been working on. Captain is a lightweight library that lets you add hooks to your code, using JavaScript. We designed it for two reasons: If you&#8217;ve got a bunch of objects, each needing a small amount of custom objects, creating a subclass for each variation is cumbersome, and devising [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.secretlab.com.au&#038;blog=36546876&#038;post=398&#038;subd=tothesecretlab&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><img src="http://tothesecretlab.files.wordpress.com/2012/10/captain-hook-halloween-costume.jpg?w=150&#038;h=132" alt="" title="captain-hook-halloween-costume" width="150" height="132" class="alignright size-thumbnail wp-image-404" /></p>
<p>So, here&#8217;s another something that we&#8217;ve been working on.</p>
<p><em><a href="http://github.com/thesecretlab/Captain" title="Captain by Secret Lab">Captain</a></em> is a lightweight library that lets you add hooks to your code, using JavaScript. We designed it for two reasons:</p>
<ul>
<li>If you&#8217;ve got a bunch of objects, each needing a small amount of custom objects, creating a subclass for each variation is cumbersome, and devising a sophisticated data-driven architecture is often overkill and sometimes impossible for your use case.</li>
<li>Extremely rapid iteration, <em>skipping the compile/install phase</em>, is awesome.</li>
</ul>
<p>Many of the games we make involve a lot of special-cased behaviour. Like all halfway decent developers, we try to minimise this, but sometimes you really just need a sprite that walks two feet left, three right, and does a twirl, and there&#8217;s nothing else in the game that you can generalise into a nice, reusable system.</p>
<p>We&#8217;ve already found some great results in allowing field-testers and non-programmers to make modifications to iOS applications by exposing certain resources to iTunes File Sharing. For example, if you&#8217;re writing an app that has a lot of sound effects, it makes your sound designer&#8217;s life a heck of a lot easier if they can open up iTunes and drop in a replacement sound file, and see how it sounds in your app without having to get another build.</p>
<p>What we ended up doing was using JavaScriptCore, which is the built-in JavaScript runtime on iOS, to create a very loose binding to Objective-C, and then allow Objective-C objects to delegate parts of their behaviour out to JavaScript.</p>
<p>Captain isn&#8217;t a scripting bridge. This means that it&#8217;s a slightly different thing to libraries like the excellent <a href="https://github.com/parmanoir/jscocoa">jscocoa</a>. Most scripting bridges allow you to write <em>entire apps</em> in other languages, which is super cool. However, we really like Objective-C, and find that using the native language for the iOS platform is the best way to approach most things.</p>
<p>Captain, therefore, lets you expose very specific parts of your application&#8217;s behaviour to scripts, effectively creating a <a href="http://en.wikipedia.org/wiki/Domain-specific_language">domain-specific language</a> for your app. Plus, it&#8217;s all designed to be <em>super</em> lightweight.</p>
<p><strong>An important note:</strong> Apple&#8217;s rules say your app isn&#8217;t allowed to get scripts from the outside world and run them. This means that you can&#8217;t use Captain to build a plugin architecture for your app, but you <em>can</em> use it during development to make your edit-build-compile cycles faster and more flexible.</p>
<h2 id="how_to_use_it">How to use it</h2>
<p>The most basic use case for Captain is when you want to run a JavaScript function, and get back whatever the function returned.</p>
<p>When you work with Captain, you first create a <code>JSContext</code> object, which serves as the execution environment for all of your scripts. You can create as many contexts as you like, but each one is kept separate from each other, and variables won&#8217;t be shared between them.</p>
<p>Creating a <code>JSContext</code> looks like this:</p>
<pre class="brush: objc; title: ; notranslate">
JSContext* context = [[JSContext alloc] init];
</pre>
<p>Once a context has been set up, you can give it JavaScript code to execute. You do this using the <code>evaluateScript:error:</code> method:</p>
<pre class="brush: objc; title: ; notranslate">
NSError* error = nil;
[context evaluateScript:@&quot;1+1&quot; error:&amp;error];
</pre>
<p>This method returns whatever the result of the script you passed in was. If the JavaScript code threw an exception for any reason, the <code>error</code> variable will contain information about it.</p>
<p>Any values returned by the <code>evaluateScript:</code> method are returned as Objective-C objects, and are automatically converted from their JavaScript type into the most appropriate Objective-C type. Strings are turned into <code>NSString</code>s, numbers become <code>NSNumber</code>s, and JavaScript objects get turned into <code>NSDictionary</code> objects.</p>
<pre class="brush: objc; title: ; notranslate">
NSNumber* returnedNumber = [context evaluateScript:@&#8221;31337&#8221; error:nil];
   // returnedNumber == @(31337)
</pre>
<h2 id="calling_native_functions_from_javascript">Calling native functions from JavaScript</h2>
<p>Basic stuff, right? However, the fun stuff happens when you give the JavaScript code some native functions that it can call.</p>
<p>You can add register functions in the JavaScript context that scripts can call, by creating a block object and giving it to the <code>JSContext</code>. These block objects take one parameter, an <code>NSArray</code> that contains the parameters that were passed in from JavaScript, and return an <code>id</code>, which will be automatically converted back to a JavaScript value.</p>
<p>Example time!</p>
<pre class="brush: objc; title: ; notranslate">
JSFunction addTwoNumbers = ^(NSArray* parameters) {
        if (parameters.count &amp;lt; 2)
            return 0;
        NSNumber* firstNumber = parameters[0];
        NSNumber* secondNumber = parameters[1];
        return @(firstNumber.intValue + secondNumber.intValue);
    };

[context addFunction:doSomethingFunction withName:@&quot;doSomething&quot;];
</pre>
<p>Once you&#8217;ve added a function, you can call it from JavaScript.</p>
<pre class="brush: objc; title: ; notranslate">
NSString* code = @&quot;doSomething(1,2)&quot;;
NSNumber* returnedNumber = [context evaluateScript:code error:nil];
// returnedNumber == @(3)
</pre>
<h2 id="calling_javascript_functions_from_native_code">Calling JavaScript functions from native code</h2>
<p>Things get really interesting when your native code can call JavaScript code. Because you can load the new code at run-time, or even replace code without having to re-launch your app, you get a crazy amount of flexibility.</p>
<p>If you run some JavaScript code that returns a function, it will be returned to as a <code>JSFunction</code> block, which can be called just like a function.</p>
<pre class="brush: objc; title: ; notranslate">
NSString* code = @&quot;(function(personName) { return \&quot;hello, \&quot; + personName; })&quot;;
JSFunction returnedFunction = [context evaluateScript:code error:nil];

NSString* string = returnedFunction(@[&quot;world&quot;]);
// string == @&quot;hello, world!&quot;
</pre>
<h2 id="working_with_native_objects_in_javascript">Working with native objects in JavaScript</h2>
<p>Working in only numbers and strings is boring. What would be really awesome is if Captain could let JavaScript work with Objective-C objects in a clean, simple way that had zero programmer overhead, and let the developer write clean code in both languages.</p>
<p>Wait, you can? BONUS.</p>
<pre class="brush: objc; title: ; notranslate">
TestObject* myObject = [TestObject new];
myObject.name = @&quot;Bob&quot;;

[context setProperty:@&quot;testObject&quot; toObject:testObject];

[context evaluateScript:@&quot;testObject.name = \&quot;Alice\&quot;&quot; error:nil];

// myObject.name == @&quot;Alice&quot;
</pre>
<p>Any property that uses the standard compiler-generated setter and getter methods can be modified by JavaScript code.</p>
<p>In addition to working with data, you can also call methods on Objective-C objects from JavaScript.</p>
<p><em>But doesn&#8217;t Objective-C have crazy weird method names that look ugly in other langauges?</em></p>
<p>That&#8217;s right, it does. That&#8217;s part of the reason why Captain only exposes certain methods to JavaScript.</p>
<p>If your Objective-C object has a method named <code>handleFoo:</code>, which takes one parameter, it will be exposed through JavaScript as &#8220;foo&#8221;. Only methods that meet these requirements are callable from JavaScript.</p>
<p>The reasoning behind this is that Captain is intended to be a simple way to expose limited amounts of domain-specific functionality to a scripting environment, rather than a comprehensive scripting bridge. By only having to support a limited amount of interaction between native code and the script, life is made easier for both worlds.</p>
<p>Example! Here&#8217;s an Objective-C object:</p>
<pre class="brush: objc; title: ; notranslate">@interface MyObject : NSObject

- (id) handleDoSomethingUseful:(NSDictionary*)parameters;

@end

@implementation MyObject

- (id) handleDoSomethingUseful:(NSDictionary*)parameters {
    // Assume parameters[0] is a string

    return [parameters[0] stringByAppendingString:@&quot;, yes!&quot;];
}    

@end
</pre>
<p>And here&#8217;s code that interacts with it:</p>
<pre class="brush: objc; title: ; notranslate">
MyObject* foo = [MyObject new];

[context setProperty:@&quot;foo&quot; toObject:foo];

NSString* code = @&quot;foo.doSomethingUseful(\&quot;Bruces\&quot;)&quot;

NSString* returnedString = [context evaluateScript:code error:nil];

// returnedString == @&quot;Bruces, yes!&quot;
</pre>
<h2 id="loading_scripts">Loading scripts</h2>
<p>The final piece to this is in loading a large number of JavaScript functions, which native objects can use.</p>
<p>Let&#8217;s say you&#8217;ve got a JavaScript file named &#8220;UsefulFunctions.js&#8221;, and it contains this:</p>
<pre class="brush: objc; title: ; notranslate">
this.doSomething = function () {
    log(&quot;Hello from inside JavaScript!&quot;);
    return 123;
}

this.frobnicate = function(a) {
    return a + &quot; &quot; + a;
}
</pre>
<p>You can register the entire set of functions contained in the script using the <code>loadScriptNamed:error:</code> method.</p>
<pre class="brush: objc; title: ; notranslate">
[context loadScriptNamed:@&quot;UsefulFunctions&quot; error:nil];
</pre>
<p>Doing this causes the <code>JSContext</code> to look for the file &#8220;UsefulFunctions.js&#8221;, first in the Documents folder, and then in the built-in bundle resources. Because it looks in this order, you can modify the app&#8217;s functionality by simply dropping in a replacement file with the same name in iTunes File Sharing, and re-launching the app.</p>
<h2 id="delegating_behaviour_to_javascript">Delegating behaviour to JavaScript</h2>
<p>The functions that you load in can also be used by Objective-C objects to delegate some of their behaviour to.</p>
<p>For example, say you have a JavaScript file &#8216;Foo.js&#8217;, containing the following code:</p>
<pre class="brush: objc; title: ; notranslate">this.doSomething = function() {
    this.name = &quot;Bob&quot;;
}
</pre>
<p>Once Foo.js is loaded in, you can call the function, and additionally provide it with an object to use for the <code>this</code> variable.</p>
<pre class="brush: objc; title: ; notranslate">MyObject* foo = [MyObject new];
[context callFunction:&quot;Foo.doSomething&quot; withParameters:nil thisObject:foo error:nil];

// foo.name == @&quot;Bob&quot;
</pre>
<p>With this method, your classes can easily call out to JavaScript when they need some work done.</p>
<h2 id="conclusion">Conclusion</h2>
<p>We hope you enjoy using Captain, and we&#8217;d love to see what else you do with it. <a href="http://github.com/thesecretlab/Captain" title="Captain by Secret Lab">Captain is on GitHub</a>! We welcome pull requests, and if you&#8217;ve got any questions, shoot us an email at <a href="mailto:lab@secretlab.com.au">lab@secretlab.com.au</a></p>
<p>Enjoy!</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.secretlab.com.au&#038;blog=36546876&#038;post=398&#038;subd=tothesecretlab&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.secretlab.com.au/2012/10/31/captain-add-hooks-to-your-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/93cd8098ec3d2bbfcc8bf4f95abf0b95?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">desplesda</media:title>
		</media:content>

		<media:content url="http://tothesecretlab.files.wordpress.com/2012/10/captain-hook-halloween-costume.jpg?w=150" medium="image">
			<media:title type="html">captain-hook-halloween-costume</media:title>
		</media:content>
	</item>
		<item>
		<title>Swipe Conference 2012</title>
		<link>http://blog.secretlab.com.au/2012/09/09/swipe-conference-2012/</link>
		<comments>http://blog.secretlab.com.au/2012/09/09/swipe-conference-2012/#comments</comments>
		<pubDate>Sun, 09 Sep 2012 08:47:11 +0000</pubDate>
		<dc:creator>Doctor Science</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Training]]></category>
		<category><![CDATA[cocos]]></category>
		<category><![CDATA[cocos 2d]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[jon manning]]></category>
		<category><![CDATA[presentation]]></category>
		<category><![CDATA[secret lab]]></category>
		<category><![CDATA[swipe]]></category>
		<category><![CDATA[swipe conference]]></category>
		<category><![CDATA[sydney]]></category>
		<category><![CDATA[training]]></category>

		<guid isPermaLink="false">http://blog.secretlab.com.au/?p=387</guid>
		<description><![CDATA[Last week in Sydney was the second ever Swipe Conference –– an Australian iOS and OS X developer event. Secret Lab was again in attendance and, as always, the Apple developer community was great fun to hang out with and learn from –– and the organisers, Jake MacMullin, Mark Aufflick and Sean Woodhouse really put [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.secretlab.com.au&#038;blog=36546876&#038;post=387&#038;subd=tothesecretlab&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/parisba/7946892802/in/set-72157631428361590"><img src="http://tothesecretlab.files.wordpress.com/2012/09/7946892802_b548f80573.jpg?w=225&#038;h=300" alt="Jon from Secret Lab presenting at Swipe Conference 2012" title="Jon from Secret Lab presenting at Swipe Conference 2012" width="225" height="300" class="alignright size-medium wp-image-390" /></a>Last week in Sydney was the second ever <a href="http://swipeconference.com.au" title="Swipe Conference">Swipe Conference</a> –– an Australian iOS and OS X developer event. Secret Lab was again in attendance and, as always, the Apple developer community was great fun to hang out with and learn from –– and the organisers, Jake MacMullin, Mark Aufflick and Sean Woodhouse really put on a fantastic event.</p>
<p>We were also again fortunate enough to have a chance to contribute to the conference (Paris spoke at the <a href="http://2011.swipeconference.com.au" title="Swipe Conference 2011">first ever Swipe Conference, in Melbourne last year</a>), with Jon presenting <em>Cocos2D for Fun and Profit</em>, a quick guide to the <a href="https://github.com/cocos2d/cocos2d-iphone" title="Cocos 2D">Cocos2D graphics library</a>. Designed as a fast introduction to this time-saving library, this talk leads the audience from a minimal starting point to a full game.</p>
<p><a href="https://speakerdeck.com/u/thesecretlab/p/cocos2d-for-fun-and-profit"><img src="http://tothesecretlab.files.wordpress.com/2012/09/cocos_slides.png?w=640" alt="Slides from Secret Lab&#039;s presentation on Cocos 2D at Swipe Conference 2012" title="Slides from Secret Lab&#039;s presentation on Cocos 2D at Swipe Conference 2012"   class="aligncenter size-full wp-image-389" /></a></p>
<p>We&#8217;re incredibly fond of Cocos2D, as it provides a very nice middle option for people who want more power than what UIKit can provide, but don&#8217;t want to deal with the.. <em>joy</em> that is OpenGL. With Cocos2D, it&#8217;s straightforward to create a scene comprising a number of quads, and even more trivial to animate these quads in useful ways.</p>
<p>We&#8217;ve uploaded the code and slides to <a href="https://github.com/thesecretlab/swipeconf2012" title="Code from Secret Lab's Swipe Conference 2012 presentation">GitHub</a> and <a href="https://speakerdeck.com/u/thesecretlab/p/cocos2d-for-fun-and-profit" title="Slides from Secret Lab's Swipe Conference 2012 presentation on Cocos 2D">Speakerdeck</a>, and encourage you to take a look! We had a number of people approach us after the talk and mention that they were now interested in making games with this library, so hooray, we&#8217;re sharing the love!</p>
<p>We also took a lot of photos at Swipe Conference –– you can <a href="http://www.flickr.com/photos/parisba/sets/72157631428361590/" title="Secret Lab's photos from Swipe Conference 2012">find them on Flickr</a>.</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.secretlab.com.au&#038;blog=36546876&#038;post=387&#038;subd=tothesecretlab&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.secretlab.com.au/2012/09/09/swipe-conference-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6ed02dec32058508c6feb43b2fbc94f7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">secretlabcomau</media:title>
		</media:content>

		<media:content url="http://tothesecretlab.files.wordpress.com/2012/09/7946892802_b548f80573.jpg?w=225" medium="image">
			<media:title type="html">Jon from Secret Lab presenting at Swipe Conference 2012</media:title>
		</media:content>

		<media:content url="http://tothesecretlab.files.wordpress.com/2012/09/cocos_slides.png" medium="image">
			<media:title type="html">Slides from Secret Lab&#039;s presentation on Cocos 2D at Swipe Conference 2012</media:title>
		</media:content>
	</item>
		<item>
		<title>PyCon Australia 2012</title>
		<link>http://blog.secretlab.com.au/2012/08/28/pycon-australia-2012/</link>
		<comments>http://blog.secretlab.com.au/2012/08/28/pycon-australia-2012/#comments</comments>
		<pubDate>Tue, 28 Aug 2012 10:30:29 +0000</pubDate>
		<dc:creator>Paris Buttfield-Addison</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Training]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[australia]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[hobart]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[sponsorship]]></category>
		<category><![CDATA[tasmania]]></category>

		<guid isPermaLink="false">http://blog.secretlab.com.au/?p=362</guid>
		<description><![CDATA[This month we were lucky enough to sponsor and attend PyCon Australia, hosted (for the first time) in our hometown of Hobart! PyCon Australia is the national conference for users of the Python programming language. This was the third year that PyCon Australia has run since being founded in Sydney. We greatly enjoyed meeting members [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.secretlab.com.au&#038;blog=36546876&#038;post=362&#038;subd=tothesecretlab&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/parisba/7807861378/in/set-72157631110188076"><img src="http://tothesecretlab.files.wordpress.com/2012/08/7807861378_7b921e93e9_m.jpg?w=640" alt="PyCon Australia" title="PyCon Australia"   class="alignright size-full wp-image-368" /></a>This month we were lucky enough to sponsor and attend <a href="http://pycon-au.org">PyCon Australia</a>, hosted (for the first time) in our hometown of Hobart! PyCon Australia is the national conference for users of the Python programming language. This was the third year that PyCon Australia has run since being founded in Sydney. </p>
<p>We greatly enjoyed meeting members of the Australian and international Python communities, hearing their stories, tips and interests. All the sessions we attended were fabulous, but amongst the many highlights were:</p>
<ul>
<li><a href="http://2012.pycon-au.org/programme/codewars">CodeWars</a> – entertaining programming-as-a-spectator-sport problem solving to kick the conference off. Hosted and designed by our talented friends <a href="http://www.flickr.com/photos/parisba/7801319942/in/set-72157631110188076">Tony</a> and <a href="http://www.flickr.com/photos/parisba/7821115958/in/set-72157631110188076">Josh</a>, respectively. A great place to spot some amazing <a href="http://www.flickr.com/photos/parisba/7801196088/in/set-72157631110188076">nerd gear</a>!</li>
<li><a href="http://www.youtube.com/watch?v=tzXWTrpCyCM&amp;list=UUS9sdEyduD9K83K3GkvQlOA&amp;index=27&amp;feature=plcp">What to build. How to build it.</a> – the first keynote, presented by Mark Ramm, took us on an entertaining romp through the idea of applying experimental methodologies to product design. Great stuff!</li>
<li><a href="http://www.youtube.com/watch?v=BGOtqXA_y1E&amp;list=UUS9sdEyduD9K83K3GkvQlOA&amp;index=20&amp;feature=plcp">Virtual robotic car racing with Python and TORCS</a> – Python and virtual robot cars! What&#8217;s not to like?</li>
<li><a href="http://www.youtube.com/watch?v=Y97D8j6CAog&amp;list=UUS9sdEyduD9K83K3GkvQlOA&amp;index=16&amp;feature=plcp">Python for Humans</a> – the second keynote, presented by Kenneth Reitz, was a thorough and useful discussion of making Python more user (programmer) friendly. Exactly the sort of stuff that should be a keynote!</li>
<li>Lightning Talks – we always love lightning talks, and these were no exception. Lots of quick talks, mostly useful, and highly entertaining!</li>
</ul>
<p><a href="http://www.flickr.com/photos/parisba/7805702476/in/set-72157631110188076"><img src="http://tothesecretlab.files.wordpress.com/2012/08/7805702476_2d4ec5c732_m.jpg?w=640" alt="PyCon Australia Coffee –– blended and served by Ritual Coffee Tasmania, sponsored by Secret Lab" title="PyCon Australia Coffee –– blended and served by Ritual Coffee Tasmania, sponsored by Secret Lab"   class="alignleft size-full wp-image-372" /></a>We also thoroughly enjoyed the dinner (a cruise to Peppermint Bay, followed by a <a href="http://www.flickr.com/photos/parisba/7807708810/in/set-72157631110188076">fabulous</a> meal and cruise back to Hobart!) as well as the coffee (which was a tasty blend called &#8220;<a href="http://shop.ritualcoffee.com.au/products/african-swallow">African Swallow</a>&#8220;, designed specifically for PyCon Australia by Ritual Coffee).  The coffee for all attendees was sponsored by Secret Lab, and we were proud to have <a href="http://www.flickr.com/photos/parisba/7805696612/in/set-72157631110188076" title="Secret Lab Coffee at PyCon Australia">our logo</a> on <a href="http://www.flickr.com/photos/parisba/7805694420/in/set-72157631110188076" title="Secret Lab Coffee at PyCon Australia">every cup</a>. The attendees all really seemed to enjoy the coffee, and we&#8217;re very proud to have been involved in a small way in the running of such an excellent conference in Tasmania. PyCon Australia returns to Hobart next year as part of their 2-year cycle. We can&#8217;t wait!</p>
<p><a href="http://www.flickr.com/photos/parisba/7805780772/in/set-72157631110188076"><img src="http://tothesecretlab.files.wordpress.com/2012/08/7805780772_2553e859fb.jpg?w=300&#038;h=300" alt="Secret Lab&#039;s coffee sponsorship of PyCon Australia 2012" title="Secret Lab&#039;s coffee sponsorship of PyCon Australia 2012" width="300" height="300" class="aligncenter size-medium wp-image-363" /></a></p>
<p>You can find the <a href="http://www.flickr.com/photos/parisba/sets/72157631110188076/" title="Secret Lab's PyCon Australia photos">rest of our photos from PyCon Australia 2012 on Flickr</a> and the <a href="http://www.youtube.com/pyconau">videos from PyCon on YouTube</a>. Congratulations to our friend, and frequent collaborator, <a href="http://chris.neugebauer.id.au">Chris</a> on the meticulous organisation he and his team undertook to bring us PyCon Australia!</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.secretlab.com.au&#038;blog=36546876&#038;post=362&#038;subd=tothesecretlab&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.secretlab.com.au/2012/08/28/pycon-australia-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/b51d6fa042e820ae461f101240131d52?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">parisba</media:title>
		</media:content>

		<media:content url="http://tothesecretlab.files.wordpress.com/2012/08/7807861378_7b921e93e9_m.jpg" medium="image">
			<media:title type="html">PyCon Australia</media:title>
		</media:content>

		<media:content url="http://tothesecretlab.files.wordpress.com/2012/08/7805702476_2d4ec5c732_m.jpg" medium="image">
			<media:title type="html">PyCon Australia Coffee –– blended and served by Ritual Coffee Tasmania, sponsored by Secret Lab</media:title>
		</media:content>

		<media:content url="http://tothesecretlab.files.wordpress.com/2012/08/7805780772_2553e859fb.jpg?w=300" medium="image">
			<media:title type="html">Secret Lab&#039;s coffee sponsorship of PyCon Australia 2012</media:title>
		</media:content>
	</item>
	</channel>
</rss>
