<?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/"
	>

<channel>
	<title>Unbound DNA &#187; Training</title>
	<atom:link href="http://www.unbounddna.com/category/training/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.unbounddna.com</link>
	<description></description>
	<lastBuildDate>Fri, 05 Jun 2026 09:00:00 +0000</lastBuildDate>
	<language>en-US</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=3.9.40</generator>
	<item>
		<title>The Agile Learning Wall: dialing up the transparency</title>
		<link>http://agileforest.com/2015/05/11/the-agile-learning-wall-dialing-up-the-transparency/</link>
		<comments>http://agileforest.com/2015/05/11/the-agile-learning-wall-dialing-up-the-transparency/#comments</comments>
		<pubDate>Mon, 11 May 2015 05:23:50 +0000</pubDate>
		<dc:creator><![CDATA[Renee Troughton]]></dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Agile Elsewhere]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[teaching]]></category>
		<category><![CDATA[Training]]></category>
		<category><![CDATA[transparency]]></category>
		<category><![CDATA[visibility]]></category>

		<guid isPermaLink="false">http://agileforest.com/?p=961</guid>
		<description><![CDATA[The world of Agile training and mentoring is&#160;intriguing me at the moment. &#160;This is how most of us have done it in large organisations for a long while &#8211; We build in powerpoint or prezi these gorgeous training decks and train up people new to Agile We outsource our training to groups who do the &#8230; <br /><br /><a href="http://agileforest.com/2015/05/11/the-agile-learning-wall-dialing-up-the-transparency/">Continue reading</a><img alt="" border="0" src="http://pixel.wp.com/b.gif?host=agileforest.com&#38;blog=18989035&#38;post=961&#38;subd=agileforest&#38;ref=&#38;feed=1" width="1" height="1">]]></description>
				<content:encoded><![CDATA[<p>The world of Agile training and mentoring is intriguing me at the moment.  This is how most of us have done it in large organisations for a long while &#8211;</p>
<ul>
<li>We build in powerpoint or prezi these gorgeous training decks and train up people new to Agile</li>
<li>We outsource our training to groups who do the same as the above</li>
<li>We build intranets, wikis or documents worth of content on &#8220;how to do &lt;insert Agile activity here&gt;&#8221;</li>
<li>We teach the &#8220;Shu&#8221; rulebook without constantly re-enforcing the need to progress to &#8220;Ha&#8221;</li>
<li>We have embed games to re-enforce and experience learnings from training sessions</li>
<li>We mentor through SODOTO (See One, Do One, Teach One), but often never get to the TO bit</li>
</ul>
<p>We talk a lot about innovation and radicalizing the business and yet some of the training techniques we still use are from 1990s. How many Scrum Masters open up this content and use it? How many Scrum Masters experiment and adapt how they work? How transparent, engaging and interactive is this content? Playing games and implementing SODOTO is a great start to interactivity and real-time knowledge sharing, but can we do more?</p>
<p>Recently I have had an awesome opportunity at <a title="Charter Hall Sydney" href="https://www.charterhall.com.au/" >Charter Hall</a> innovate, experiment and enhance the experience of learning differently. Rather than build decks I have spent many hours building an interactive wall to people new to Agile. It is more an experience than a training session. It is one massive wall that flows a conversation about Agile quite naturally before the tour moves further into the working space.</p>
<p>The &#8220;basics&#8221; tour has the following elements:</p>
<ol>
<li>The background of Agile</li>
<li>The Agile Values</li>
<li>The Agile Principles</li>
<li>The Agile Process</li>
<li>The Agile Roles</li>
<li>The Portfolio Wall</li>
<li>The Pipeline Activities Wall</li>
<li>One of the Project Walls</li>
</ol>
<p>The principles behind the learning wall are quite simple:</p>
<ul>
<li>Create a natural flowing experience</li>
<li>Introduce concepts with visual drawings to enable better retention</li>
<li>Make the process introduction really simple, bare bones, but&#8230;</li>
<li>Have the ability to drill through into detail without it overloading the audience. This would help when having more detailed role training.</li>
<li>Make everything transparent, no content is hidden in a tool</li>
<li>Break up content so that as things change it is a simple matter of changing one small picture</li>
</ul>
<p>Now before I show you the pictures of what I have created I do want to highlight some intended future changes:</p>
<ul>
<li>Extend the values section to include the Scrum values and the company values</li>
<li>Make pictures for the Agile Principles</li>
<li>Add in Lean Principles</li>
<li>Add in an &#8220;other section at the tail end&#8221;</li>
<li>Maybe add in a visual around all the different Agile methods, edgy and support methods</li>
<li>In addition to the wall I am also building a series of agenda cards &#8211; these are re-usable packs for Scrum Masters and coaches to use for workshops and key Agile activities (eg Iteration Planning, Retrospective, etc). These cards have some spares so that facilitators can adapt away from the standard set of agenda ideas. On the back of the cards are tips of the purpose of agenda activity and how it could be facilitated.<br />
What does this mean for a new facilitator? Well they have the clear activities they need to do with how to do it without having to open up a tool (which they don&#8217;t ever do), but most importantly this is real time &#8211; exactly when they need it. It also provides great clarity to everyone else in the room around what is happening and what still needs to happen when it is utilised as a backlog against a simple wall of &#8220;To Do&#8221;, &#8220;Doing&#8221; and &#8220;Done&#8221;.</li>
</ul>
<p>Anyway, now for the pictures of the Learning Wall (it runs right to left due to the entrance point, but normally I would have preferred a left to right run). Taken from the right:</p>
<p><a href="https://agileforest.files.wordpress.com/2015/05/dsc2108.jpg"><img data-attachment-id="969" data-permalink="http://agileforest.com/2015/05/11/the-agile-learning-wall-dialing-up-the-transparency/_dsc2108/" data-orig-file="https://agileforest.files.wordpress.com/2015/05/dsc2108.jpg" data-orig-size="6016,4016" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;14&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;NIKON D750&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1430933079&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;46&quot;,&quot;iso&quot;:&quot;6400&quot;,&quot;shutter_speed&quot;:&quot;0.04&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="_DSC2108" data-image-description="" data-medium-file="https://agileforest.files.wordpress.com/2015/05/dsc2108.jpg?w=300" data-large-file="https://agileforest.files.wordpress.com/2015/05/dsc2108.jpg?w=1024&#038;h=684" class=" wp-image-969 size-large alignleft" src="https://agileforest.files.wordpress.com/2015/05/dsc2108.jpg?w=1024&#038;h=684" alt="_DSC2108" width="1024" height="684" srcset="https://agileforest.files.wordpress.com/2015/05/dsc2108.jpg?w=1024&amp;h=684 1024w, https://agileforest.files.wordpress.com/2015/05/dsc2108.jpg?w=2048&amp;h=1368 2048w, https://agileforest.files.wordpress.com/2015/05/dsc2108.jpg?w=150&amp;h=100 150w, https://agileforest.files.wordpress.com/2015/05/dsc2108.jpg?w=300&amp;h=200 300w, https://agileforest.files.wordpress.com/2015/05/dsc2108.jpg?w=768&amp;h=513 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></p>
<p>&nbsp;</p>
<p>Taken from the left:</p>
<p><a href="https://agileforest.files.wordpress.com/2015/05/dsc2098.jpg"><img data-attachment-id="968" data-permalink="http://agileforest.com/2015/05/11/the-agile-learning-wall-dialing-up-the-transparency/_dsc2098/" data-orig-file="https://agileforest.files.wordpress.com/2015/05/dsc2098.jpg" data-orig-size="5915,3615" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;3.5&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;NIKON D750&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1430932991&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;28&quot;,&quot;iso&quot;:&quot;6400&quot;,&quot;shutter_speed&quot;:&quot;0.003125&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="_DSC2098" data-image-description="" data-medium-file="https://agileforest.files.wordpress.com/2015/05/dsc2098.jpg?w=300" data-large-file="https://agileforest.files.wordpress.com/2015/05/dsc2098.jpg?w=1024&#038;h=626" class="alignleft size-large wp-image-968" src="https://agileforest.files.wordpress.com/2015/05/dsc2098.jpg?w=1024&#038;h=626" alt="_DSC2098" width="1024" height="626" srcset="https://agileforest.files.wordpress.com/2015/05/dsc2098.jpg?w=1024&amp;h=626 1024w, https://agileforest.files.wordpress.com/2015/05/dsc2098.jpg?w=2048&amp;h=1252 2048w, https://agileforest.files.wordpress.com/2015/05/dsc2098.jpg?w=150&amp;h=92 150w, https://agileforest.files.wordpress.com/2015/05/dsc2098.jpg?w=300&amp;h=183 300w, https://agileforest.files.wordpress.com/2015/05/dsc2098.jpg?w=768&amp;h=469 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></p>
<p>The Agile Values (some references taken from <a title="Rally Agile Values Poster" href="https://www.rallydev.com/sites/rallydev.com.blog/files/agileblog/2011/08/6021775747_ef56de884b_z.jpg" >Rally&#8217;s awesome values picture</a>):</p>
<p><a href="https://agileforest.files.wordpress.com/2015/05/dsc2071.jpg"><img data-attachment-id="971" data-permalink="http://agileforest.com/2015/05/11/the-agile-learning-wall-dialing-up-the-transparency/_dsc2071/" data-orig-file="https://agileforest.files.wordpress.com/2015/05/dsc2071.jpg" data-orig-size="3773,3711" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;3.8&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;NIKON D750&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1430932507&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;38&quot;,&quot;iso&quot;:&quot;5600&quot;,&quot;shutter_speed&quot;:&quot;0.003125&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="_DSC2071" data-image-description="" data-medium-file="https://agileforest.files.wordpress.com/2015/05/dsc2071.jpg?w=300" data-large-file="https://agileforest.files.wordpress.com/2015/05/dsc2071.jpg?w=1024&#038;h=1007" class=" wp-image-971 size-large alignleft" src="https://agileforest.files.wordpress.com/2015/05/dsc2071.jpg?w=1024&#038;h=1007" alt="_DSC2071" width="1024" height="1007" srcset="https://agileforest.files.wordpress.com/2015/05/dsc2071.jpg?w=1024&amp;h=1007 1024w, https://agileforest.files.wordpress.com/2015/05/dsc2071.jpg?w=2048&amp;h=2014 2048w, https://agileforest.files.wordpress.com/2015/05/dsc2071.jpg?w=150&amp;h=148 150w, https://agileforest.files.wordpress.com/2015/05/dsc2071.jpg?w=300&amp;h=295 300w, https://agileforest.files.wordpress.com/2015/05/dsc2071.jpg?w=768&amp;h=755 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></p>
<p>The Agile Principles:</p>
<p><a href="https://agileforest.files.wordpress.com/2015/05/dsc2074.jpg"><img data-attachment-id="972" data-permalink="http://agileforest.com/2015/05/11/the-agile-learning-wall-dialing-up-the-transparency/_dsc2074/" data-orig-file="https://agileforest.files.wordpress.com/2015/05/dsc2074.jpg" data-orig-size="4995,3555" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;4&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;NIKON D750&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1430932527&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;40&quot;,&quot;iso&quot;:&quot;6400&quot;,&quot;shutter_speed&quot;:&quot;0.003125&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="_DSC2074" data-image-description="" data-medium-file="https://agileforest.files.wordpress.com/2015/05/dsc2074.jpg?w=300" data-large-file="https://agileforest.files.wordpress.com/2015/05/dsc2074.jpg?w=1024&#038;h=729" class="alignleft size-large wp-image-972" src="https://agileforest.files.wordpress.com/2015/05/dsc2074.jpg?w=1024&#038;h=729" alt="_DSC2074" width="1024" height="729" srcset="https://agileforest.files.wordpress.com/2015/05/dsc2074.jpg?w=1024&amp;h=729 1024w, https://agileforest.files.wordpress.com/2015/05/dsc2074.jpg?w=2048&amp;h=1458 2048w, https://agileforest.files.wordpress.com/2015/05/dsc2074.jpg?w=150&amp;h=107 150w, https://agileforest.files.wordpress.com/2015/05/dsc2074.jpg?w=300&amp;h=214 300w, https://agileforest.files.wordpress.com/2015/05/dsc2074.jpg?w=768&amp;h=547 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></p>
<p>The Agile Process (note this is naturally a very specific organisational tailoring, I am by no means saying this is the one and only process for Agile). Specifically, this is the bare bones view. The number of iterations is just for an example.</p>
<p><a href="https://agileforest.files.wordpress.com/2015/05/dsc2079.jpg"><img data-attachment-id="975" data-permalink="http://agileforest.com/2015/05/11/the-agile-learning-wall-dialing-up-the-transparency/_dsc2079/" data-orig-file="https://agileforest.files.wordpress.com/2015/05/dsc2079.jpg" data-orig-size="4735,4016" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;3.5&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;NIKON D750&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1430932675&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;28&quot;,&quot;iso&quot;:&quot;4500&quot;,&quot;shutter_speed&quot;:&quot;0.003125&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="_DSC2079" data-image-description="" data-medium-file="https://agileforest.files.wordpress.com/2015/05/dsc2079.jpg?w=300" data-large-file="https://agileforest.files.wordpress.com/2015/05/dsc2079.jpg?w=1024&#038;h=869" class="alignleft size-large wp-image-975" src="https://agileforest.files.wordpress.com/2015/05/dsc2079.jpg?w=1024&#038;h=869" alt="_DSC2079" width="1024" height="869" srcset="https://agileforest.files.wordpress.com/2015/05/dsc2079.jpg?w=1024&amp;h=869 1024w, https://agileforest.files.wordpress.com/2015/05/dsc2079.jpg?w=2048&amp;h=1738 2048w, https://agileforest.files.wordpress.com/2015/05/dsc2079.jpg?w=150&amp;h=127 150w, https://agileforest.files.wordpress.com/2015/05/dsc2079.jpg?w=300&amp;h=254 300w, https://agileforest.files.wordpress.com/2015/05/dsc2079.jpg?w=768&amp;h=651 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></p>
<p>And now the interactive version (note how the interaction points line up with the number of iterations).</p>
<p><a href="https://agileforest.files.wordpress.com/2015/05/dsc2076.jpg"><img data-attachment-id="973" data-permalink="http://agileforest.com/2015/05/11/the-agile-learning-wall-dialing-up-the-transparency/_dsc2076/" data-orig-file="https://agileforest.files.wordpress.com/2015/05/dsc2076.jpg" data-orig-size="4795,4016" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;3.5&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;NIKON D750&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1430932556&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;28&quot;,&quot;iso&quot;:&quot;4500&quot;,&quot;shutter_speed&quot;:&quot;0.003125&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="_DSC2076" data-image-description="" data-medium-file="https://agileforest.files.wordpress.com/2015/05/dsc2076.jpg?w=300" data-large-file="https://agileforest.files.wordpress.com/2015/05/dsc2076.jpg?w=1024&#038;h=858" class="alignleft size-large wp-image-973" src="https://agileforest.files.wordpress.com/2015/05/dsc2076.jpg?w=1024&#038;h=858" alt="_DSC2076" width="1024" height="858" srcset="https://agileforest.files.wordpress.com/2015/05/dsc2076.jpg?w=1024&amp;h=858 1024w, https://agileforest.files.wordpress.com/2015/05/dsc2076.jpg?w=2048&amp;h=1716 2048w, https://agileforest.files.wordpress.com/2015/05/dsc2076.jpg?w=150&amp;h=126 150w, https://agileforest.files.wordpress.com/2015/05/dsc2076.jpg?w=300&amp;h=251 300w, https://agileforest.files.wordpress.com/2015/05/dsc2076.jpg?w=768&amp;h=643 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></p>
<p>With a detailed closeup on the iteration portion:</p>
<p><a href="https://agileforest.files.wordpress.com/2015/05/dsc2077.jpg"><img data-attachment-id="974" data-permalink="http://agileforest.com/2015/05/11/the-agile-learning-wall-dialing-up-the-transparency/_dsc2077/" data-orig-file="https://agileforest.files.wordpress.com/2015/05/dsc2077.jpg" data-orig-size="4835,4016" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;3.5&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;NIKON D750&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1430932594&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;28&quot;,&quot;iso&quot;:&quot;4500&quot;,&quot;shutter_speed&quot;:&quot;0.003125&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="_DSC2077" data-image-description="" data-medium-file="https://agileforest.files.wordpress.com/2015/05/dsc2077.jpg?w=300" data-large-file="https://agileforest.files.wordpress.com/2015/05/dsc2077.jpg?w=1024&#038;h=851" class="alignleft size-large wp-image-974" src="https://agileforest.files.wordpress.com/2015/05/dsc2077.jpg?w=1024&#038;h=851" alt="_DSC2077" width="1024" height="851" srcset="https://agileforest.files.wordpress.com/2015/05/dsc2077.jpg?w=1024&amp;h=851 1024w, https://agileforest.files.wordpress.com/2015/05/dsc2077.jpg?w=2048&amp;h=1702 2048w, https://agileforest.files.wordpress.com/2015/05/dsc2077.jpg?w=150&amp;h=125 150w, https://agileforest.files.wordpress.com/2015/05/dsc2077.jpg?w=300&amp;h=249 300w, https://agileforest.files.wordpress.com/2015/05/dsc2077.jpg?w=768&amp;h=638 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></p>
<p>A high level overview of the Agile Roles. The three key Scrum Roles are here &#8211; Scrum Master, Product Owner and the Team. In addition I have added in our organisational specific governance roles which includes a high level organisational wide steering group, a Business Scrum and the PMO. Again I would like to highlight that some changes have been made to normal roles to suit the specific culture and needs of the organisation.</p>
<p><a href="https://agileforest.files.wordpress.com/2015/05/dsc2081.jpg"><img data-attachment-id="976" data-permalink="http://agileforest.com/2015/05/11/the-agile-learning-wall-dialing-up-the-transparency/_dsc2081/" data-orig-file="https://agileforest.files.wordpress.com/2015/05/dsc2081.jpg" data-orig-size="5235,4016" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;3.5&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;NIKON D750&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1430932702&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;28&quot;,&quot;iso&quot;:&quot;4500&quot;,&quot;shutter_speed&quot;:&quot;0.003125&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="_DSC2081" data-image-description="" data-medium-file="https://agileforest.files.wordpress.com/2015/05/dsc2081.jpg?w=300" data-large-file="https://agileforest.files.wordpress.com/2015/05/dsc2081.jpg?w=1024&#038;h=786" class="alignleft size-large wp-image-976" src="https://agileforest.files.wordpress.com/2015/05/dsc2081.jpg?w=1024&#038;h=786" alt="_DSC2081" width="1024" height="786" srcset="https://agileforest.files.wordpress.com/2015/05/dsc2081.jpg?w=1024&amp;h=786 1024w, https://agileforest.files.wordpress.com/2015/05/dsc2081.jpg?w=2048&amp;h=1572 2048w, https://agileforest.files.wordpress.com/2015/05/dsc2081.jpg?w=150&amp;h=115 150w, https://agileforest.files.wordpress.com/2015/05/dsc2081.jpg?w=300&amp;h=230 300w, https://agileforest.files.wordpress.com/2015/05/dsc2081.jpg?w=768&amp;h=589 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></p>
<p>Detail on the Scrum Master role (interactive side showing):</p>
<p><a href="https://agileforest.files.wordpress.com/2015/05/dsc2093.jpg"><img data-attachment-id="966" data-permalink="http://agileforest.com/2015/05/11/the-agile-learning-wall-dialing-up-the-transparency/_dsc2093/" data-orig-file="https://agileforest.files.wordpress.com/2015/05/dsc2093.jpg" data-orig-size="5415,3916" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;3.8&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;NIKON D750&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1430932834&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;38&quot;,&quot;iso&quot;:&quot;6400&quot;,&quot;shutter_speed&quot;:&quot;0.00625&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="_DSC2093" data-image-description="" data-medium-file="https://agileforest.files.wordpress.com/2015/05/dsc2093.jpg?w=300" data-large-file="https://agileforest.files.wordpress.com/2015/05/dsc2093.jpg?w=1024&#038;h=741" class="alignleft size-large wp-image-966" src="https://agileforest.files.wordpress.com/2015/05/dsc2093.jpg?w=1024&#038;h=741" alt="_DSC2093" width="1024" height="741" srcset="https://agileforest.files.wordpress.com/2015/05/dsc2093.jpg?w=1024&amp;h=741 1024w, https://agileforest.files.wordpress.com/2015/05/dsc2093.jpg?w=2048&amp;h=1482 2048w, https://agileforest.files.wordpress.com/2015/05/dsc2093.jpg?w=150&amp;h=108 150w, https://agileforest.files.wordpress.com/2015/05/dsc2093.jpg?w=300&amp;h=217 300w, https://agileforest.files.wordpress.com/2015/05/dsc2093.jpg?w=768&amp;h=555 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></p>
<p>Detailed view on the Product Owner role (bare bones side):</p>
<p><a href="https://agileforest.files.wordpress.com/2015/05/dsc2089.jpg"><img data-attachment-id="964" data-permalink="http://agileforest.com/2015/05/11/the-agile-learning-wall-dialing-up-the-transparency/_dsc2089/" data-orig-file="https://agileforest.files.wordpress.com/2015/05/dsc2089.jpg" data-orig-size="4575,4016" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;3.5&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;NIKON D750&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1430932772&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;31&quot;,&quot;iso&quot;:&quot;6400&quot;,&quot;shutter_speed&quot;:&quot;0.004&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="_DSC2089" data-image-description="" data-medium-file="https://agileforest.files.wordpress.com/2015/05/dsc2089.jpg?w=300" data-large-file="https://agileforest.files.wordpress.com/2015/05/dsc2089.jpg?w=1024&#038;h=899" class="alignleft size-large wp-image-964" src="https://agileforest.files.wordpress.com/2015/05/dsc2089.jpg?w=1024&#038;h=899" alt="_DSC2089" width="1024" height="899" srcset="https://agileforest.files.wordpress.com/2015/05/dsc2089.jpg?w=1024&amp;h=899 1024w, https://agileforest.files.wordpress.com/2015/05/dsc2089.jpg?w=2048&amp;h=1798 2048w, https://agileforest.files.wordpress.com/2015/05/dsc2089.jpg?w=150&amp;h=132 150w, https://agileforest.files.wordpress.com/2015/05/dsc2089.jpg?w=300&amp;h=263 300w, https://agileforest.files.wordpress.com/2015/05/dsc2089.jpg?w=768&amp;h=674 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></p>
<p>Detailed view on the Product Owner role (interactive side):</p>
<p><a href="https://agileforest.files.wordpress.com/2015/05/dsc2094.jpg"><img data-attachment-id="967" data-permalink="http://agileforest.com/2015/05/11/the-agile-learning-wall-dialing-up-the-transparency/_dsc2094/" data-orig-file="https://agileforest.files.wordpress.com/2015/05/dsc2094.jpg" data-orig-size="4635,4016" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;3.5&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;NIKON D750&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1430932910&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;28&quot;,&quot;iso&quot;:&quot;6400&quot;,&quot;shutter_speed&quot;:&quot;0.003125&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="_DSC2094" data-image-description="" data-medium-file="https://agileforest.files.wordpress.com/2015/05/dsc2094.jpg?w=300" data-large-file="https://agileforest.files.wordpress.com/2015/05/dsc2094.jpg?w=1024&#038;h=887" class="alignleft size-large wp-image-967" src="https://agileforest.files.wordpress.com/2015/05/dsc2094.jpg?w=1024&#038;h=887" alt="_DSC2094" width="1024" height="887" srcset="https://agileforest.files.wordpress.com/2015/05/dsc2094.jpg?w=1024&amp;h=887 1024w, https://agileforest.files.wordpress.com/2015/05/dsc2094.jpg?w=2048&amp;h=1774 2048w, https://agileforest.files.wordpress.com/2015/05/dsc2094.jpg?w=150&amp;h=130 150w, https://agileforest.files.wordpress.com/2015/05/dsc2094.jpg?w=300&amp;h=260 300w, https://agileforest.files.wordpress.com/2015/05/dsc2094.jpg?w=768&amp;h=665 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></p>
<p>Detailed view on the Team role (bare bones side):</p>
<p><a href="https://agileforest.files.wordpress.com/2015/05/dsc2087.jpg"><img data-attachment-id="962" data-permalink="http://agileforest.com/2015/05/11/the-agile-learning-wall-dialing-up-the-transparency/_dsc2087/" data-orig-file="https://agileforest.files.wordpress.com/2015/05/dsc2087.jpg" data-orig-size="4493,3935" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;3.8&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;NIKON D750&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1430932747&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;34&quot;,&quot;iso&quot;:&quot;6400&quot;,&quot;shutter_speed&quot;:&quot;0.00625&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="_DSC2087" data-image-description="" data-medium-file="https://agileforest.files.wordpress.com/2015/05/dsc2087.jpg?w=300" data-large-file="https://agileforest.files.wordpress.com/2015/05/dsc2087.jpg?w=1024&#038;h=897" class="alignleft size-large wp-image-962" src="https://agileforest.files.wordpress.com/2015/05/dsc2087.jpg?w=1024&#038;h=897" alt="_DSC2087" width="1024" height="897" srcset="https://agileforest.files.wordpress.com/2015/05/dsc2087.jpg?w=1024&amp;h=897 1024w, https://agileforest.files.wordpress.com/2015/05/dsc2087.jpg?w=2048&amp;h=1794 2048w, https://agileforest.files.wordpress.com/2015/05/dsc2087.jpg?w=150&amp;h=131 150w, https://agileforest.files.wordpress.com/2015/05/dsc2087.jpg?w=300&amp;h=263 300w, https://agileforest.files.wordpress.com/2015/05/dsc2087.jpg?w=768&amp;h=673 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></p>
<p>The Business Scrum role:</p>
<p><a href="https://agileforest.files.wordpress.com/2015/05/dsc2086.jpg"><img data-attachment-id="978" data-permalink="http://agileforest.com/2015/05/11/the-agile-learning-wall-dialing-up-the-transparency/_dsc2086/" data-orig-file="https://agileforest.files.wordpress.com/2015/05/dsc2086.jpg" data-orig-size="3834,3696" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;4&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;NIKON D750&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1430932739&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;44&quot;,&quot;iso&quot;:&quot;6400&quot;,&quot;shutter_speed&quot;:&quot;0.004&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="_DSC2086" data-image-description="" data-medium-file="https://agileforest.files.wordpress.com/2015/05/dsc2086.jpg?w=300" data-large-file="https://agileforest.files.wordpress.com/2015/05/dsc2086.jpg?w=1024&#038;h=987" class="alignleft size-large wp-image-978" src="https://agileforest.files.wordpress.com/2015/05/dsc2086.jpg?w=1024&#038;h=987" alt="_DSC2086" width="1024" height="987" srcset="https://agileforest.files.wordpress.com/2015/05/dsc2086.jpg?w=1024&amp;h=987 1024w, https://agileforest.files.wordpress.com/2015/05/dsc2086.jpg?w=2048&amp;h=1974 2048w, https://agileforest.files.wordpress.com/2015/05/dsc2086.jpg?w=150&amp;h=145 150w, https://agileforest.files.wordpress.com/2015/05/dsc2086.jpg?w=300&amp;h=289 300w, https://agileforest.files.wordpress.com/2015/05/dsc2086.jpg?w=768&amp;h=740 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></p>
<p>The Steering Group role:</p>
<p><a href="https://agileforest.files.wordpress.com/2015/05/dsc2090.jpg"><img data-attachment-id="965" data-permalink="http://agileforest.com/2015/05/11/the-agile-learning-wall-dialing-up-the-transparency/_dsc2090/" data-orig-file="https://agileforest.files.wordpress.com/2015/05/dsc2090.jpg" data-orig-size="3613,2053" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;3.5&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;NIKON D750&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1430932778&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;31&quot;,&quot;iso&quot;:&quot;6400&quot;,&quot;shutter_speed&quot;:&quot;0.004&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="_DSC2090" data-image-description="" data-medium-file="https://agileforest.files.wordpress.com/2015/05/dsc2090.jpg?w=300" data-large-file="https://agileforest.files.wordpress.com/2015/05/dsc2090.jpg?w=1024&#038;h=582" class="alignleft size-large wp-image-965" src="https://agileforest.files.wordpress.com/2015/05/dsc2090.jpg?w=1024&#038;h=582" alt="_DSC2090" width="1024" height="582" srcset="https://agileforest.files.wordpress.com/2015/05/dsc2090.jpg?w=1024&amp;h=582 1024w, https://agileforest.files.wordpress.com/2015/05/dsc2090.jpg?w=2048&amp;h=1164 2048w, https://agileforest.files.wordpress.com/2015/05/dsc2090.jpg?w=150&amp;h=85 150w, https://agileforest.files.wordpress.com/2015/05/dsc2090.jpg?w=300&amp;h=170 300w, https://agileforest.files.wordpress.com/2015/05/dsc2090.jpg?w=768&amp;h=436 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></p>
<p>The PMO role:</p>
<p><a href="https://agileforest.files.wordpress.com/2015/05/dsc2085.jpg"><img data-attachment-id="977" data-permalink="http://agileforest.com/2015/05/11/the-agile-learning-wall-dialing-up-the-transparency/_dsc2085/" data-orig-file="https://agileforest.files.wordpress.com/2015/05/dsc2085.jpg" data-orig-size="3634,3355" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;3.8&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;NIKON D750&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1430932732&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;38&quot;,&quot;iso&quot;:&quot;6400&quot;,&quot;shutter_speed&quot;:&quot;0.003125&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="_DSC2085" data-image-description="" data-medium-file="https://agileforest.files.wordpress.com/2015/05/dsc2085.jpg?w=300" data-large-file="https://agileforest.files.wordpress.com/2015/05/dsc2085.jpg?w=1024&#038;h=945" class="alignleft size-large wp-image-977" src="https://agileforest.files.wordpress.com/2015/05/dsc2085.jpg?w=1024&#038;h=945" alt="_DSC2085" width="1024" height="945" srcset="https://agileforest.files.wordpress.com/2015/05/dsc2085.jpg?w=1024&amp;h=945 1024w, https://agileforest.files.wordpress.com/2015/05/dsc2085.jpg?w=2048&amp;h=1890 2048w, https://agileforest.files.wordpress.com/2015/05/dsc2085.jpg?w=150&amp;h=138 150w, https://agileforest.files.wordpress.com/2015/05/dsc2085.jpg?w=300&amp;h=277 300w, https://agileforest.files.wordpress.com/2015/05/dsc2085.jpg?w=768&amp;h=709 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></p>
<p>And that is the Agile Learning Wall! Please feel free to comment on any thoughts and suggestions to enhance the route of complete transparency and no tools that I am on.</p>
<p>I would like to thank both Nicki Doble and James Doust from Charter Hall who gave their support for my experimentation and for their willingness to expose to the world what we are doing.</p>
<p>&nbsp;</p><br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/agileforest.wordpress.com/961/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/agileforest.wordpress.com/961/" /></a> <img alt="" border="0" src="http://pixel.wp.com/b.gif?host=agileforest.com&#038;blog=18989035&%23038;post=961&%23038;subd=agileforest&%23038;ref=&%23038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://agileforest.com/2015/05/11/the-agile-learning-wall-dialing-up-the-transparency/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="https://agileforest.files.wordpress.com/2015/05/dsc2093.jpg?w=1024" length="0" type="" />
<enclosure url="http://0.gravatar.com/avatar/035e0749e7963c84320b255067ae9e9a?s=96&#038;d=monsterid&#038;r=G" length="0" type="" />
<enclosure url="https://agileforest.files.wordpress.com/2015/05/dsc2089.jpg?w=1024" length="0" type="" />
<enclosure url="https://agileforest.files.wordpress.com/2015/05/dsc2108.jpg?w=1024" length="0" type="" />
<enclosure url="https://agileforest.files.wordpress.com/2015/05/dsc2094.jpg?w=1024" length="0" type="" />
<enclosure url="https://agileforest.files.wordpress.com/2015/05/dsc2098.jpg?w=1024" length="0" type="" />
<enclosure url="https://agileforest.files.wordpress.com/2015/05/dsc2087.jpg?w=1024" length="0" type="" />
<enclosure url="https://agileforest.files.wordpress.com/2015/05/dsc2071.jpg?w=1024" length="0" type="" />
<enclosure url="https://agileforest.files.wordpress.com/2015/05/dsc2086.jpg?w=1024" length="0" type="" />
<enclosure url="https://agileforest.files.wordpress.com/2015/05/dsc2090.jpg?w=1024" length="0" type="" />
<enclosure url="https://agileforest.files.wordpress.com/2015/05/dsc2074.jpg?w=1024" length="0" type="" />
<enclosure url="https://agileforest.files.wordpress.com/2015/05/dsc2085.jpg?w=1024" length="0" type="" />
<enclosure url="https://agileforest.files.wordpress.com/2015/05/dsc2079.jpg?w=1024" length="0" type="" />
<enclosure url="https://agileforest.files.wordpress.com/2015/05/dsc2076.jpg?w=1024" length="0" type="" />
<enclosure url="https://agileforest.files.wordpress.com/2015/05/dsc2077.jpg?w=1024" length="0" type="" />
<enclosure url="https://agileforest.files.wordpress.com/2015/05/dsc2081.jpg?w=1024" length="0" type="" />
<enclosure url="https://agileforest.files.wordpress.com/2015/05/dsc2093.jpg?w=1024" length="0" type="" />
<enclosure url="https://agileforest.files.wordpress.com/2015/05/dsc2089.jpg?w=1024" length="0" type="" />
<enclosure url="https://agileforest.files.wordpress.com/2015/05/dsc2094.jpg?w=1024" length="0" type="" />
<enclosure url="https://agileforest.files.wordpress.com/2015/05/dsc2087.jpg?w=1024" length="0" type="" />
<enclosure url="https://agileforest.files.wordpress.com/2015/05/dsc2086.jpg?w=1024" length="0" type="" />
<enclosure url="https://agileforest.files.wordpress.com/2015/05/dsc2090.jpg?w=1024" length="0" type="" />
<enclosure url="https://agileforest.files.wordpress.com/2015/05/dsc2085.jpg?w=1024" length="0" type="" />
		</item>
		<item>
		<title>An Introduction to Clojure</title>
		<link>http://craigsmith.id.au/2013/05/12/an-introduction-to-clojure/</link>
		<comments>http://craigsmith.id.au/2013/05/12/an-introduction-to-clojure/#comments</comments>
		<pubDate>Sun, 12 May 2013 13:40:45 +0000</pubDate>
		<dc:creator><![CDATA[Craig Smith]]></dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Training]]></category>
		<category><![CDATA[YOW!]]></category>

		<guid isPermaLink="false">http://craigsmith.id.au/?p=1442</guid>
		<description><![CDATA[I had the pleasure this week to sit in on a 2 day Introduction to Clojure workshop being run by one of Clojure&#8217;s core developers, Stuart Sierra. YOW! and Relevance, Inc. are running these workshops on the east coast of Australia throughout May 2013 and for someone still very new to functional concepts it was [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=craigsmith.id.au&#38;blog=1253279&#38;post=1442&#38;subd=cds43&#38;ref=&#38;feed=1" width="1" height="1">]]></description>
				<content:encoded><![CDATA[<p><a href="http://cds43.files.wordpress.com/2013/05/clojure.png"><img class="alignright  wp-image-1443" alt="Clojure" src="http://cds43.files.wordpress.com/2013/05/clojure.png?w=200&#038;h=151" width="200" height="151" /></a>I had the pleasure this week to sit in on a 2 day <a href="http://clojurecore-sydney.eventbrite.com/">Introduction to Clojure</a> workshop being run by one of Clojure&#8217;s core developers, <a href="http://stuartsierra.com/">Stuart Sierra</a>. <a href="http://www.yowconference.com.au/">YOW!</a> and <a href="http://thinkrelevance.com/">Relevance, Inc.</a> are running these workshops on the east coast of Australia throughout May 2013 and for someone still very new to functional concepts it was a great introduction to functional programming as well as the <a href="http://clojure.com/">Clojure</a> language itself.</p>
<p>The key to a workshop like this is the slides with the code examples and the labs to practice the learnings, Nonetheless, here are my notes from the course on some of the concepts that I picked up.</p>
<h3>Introduction to Clojure</h3>
<ul>
<li>designed to fix shared state concurrency, designed to run on the host platform</li>
<li>ClojureScript designed to target devices that cannot run a full JVM like mobile platforms, browsers, etc..</li>
<li>most of this course is applicable to ClojureScript, just the interrops to the host environment are different</li>
<li>BigInt (trailing N), BigDecimal (trailing M)</li>
<li>Strings in double quotes, characters in &#8220;&#8221;, reg ex are started with a #</li>
<li>literal true and false, nil is the same as Java null</li>
<li>symbols are words in your program you want to reference from somewhere else, always resolve to something else</li>
<li>keywords are a special type of symbol, start with a colon :, fixed labels that have no meaning, used for names of fields often, close to enum in Java</li>
<li>REPL &#8211; read, eval, print, loop &#8211; from LISP, all the steps are separate which is different to interactive terminal</li>
<li>every expression starts with an expression, everything returns an expression which is why you get nil when doing a println</li>
<li>REPL *1 will get you most recently used expression</li>
<li>print and println will give you human readable, prn and pr will give you the machine readable output</li>
<li>list are written in parens, usually represent function calls</li>
<li>vectors usually reflect collections, in []</li>
<li>maps are key value collections, in {}</li>
<li>set starts with a hash and curly brackets</li>
<li>commas are whitespace in Clojure</li>
<li>first is the function position, usually starts wuth a function or an expression that returns a function</li>
<li>quote (&#8216;) is syntactic sugar for quote, prevents evaluation, common issue when starting Clojure when dealing with lists</li>
<li>doc &#8211; built in documentation</li>
<li><a href="http://leiningen.org/">Leiningen</a> &#8211; built on Maven, hides complexity but gives you its goodness</li>
<li>project.clj &#8211; dependency file</li>
</ul>
<h3>Functions</h3>
<ul>
<li>functions are first class and values, most of the core code are pure functions (no side effects)</li>
<li>defn defines a named function (defn greet [name] &lt;body&gt;) is a definition called greet, passes a name and runs some functions, then call as (greet )</li>
<li>can have multiple aritys, [] is no arguments, others are the named arguments, useful way to provide defaults</li>
<li>&amp; in argument vector says next arguments gets all the remaining arguments in a list (0 or more)</li>
<li>fn is anonymous function with no name (fn [parms] body), to call it you can stick it at the head of a list, use this if you need to do something one time</li>
<li>shorter synatx is #(), and use % sign for the arguments, syntactic convenience</li>
<li>usually invoke a function by putting it at the head of the list</li>
<li>apply takes a function and list or collection or arguments, same as invoking a function on those arguments</li>
<li>let used for local variables, uilt into the compiler, takes a pair set of bindings (symbol and an evaluated expression) and then a body of any number of expressions</li>
<li>fn creates a closure, locals are stored and kept with the function</li>
<li>invoking Java &#8211; instantiation (Class. argument)</li>
<li>read Clojure inside out, read the inner most function and then read out</li>
</ul>
<h3>Expressions and Loops</h3>
<ul>
<li>in Clojure everything is an expression, always return a value even if that is nil, multiple expressions always return the last value</li>
<li>flow controls always return a value as well</li>
<li>logical false is false or nil, everything else is true, similar to the semantics in Ruby and Python</li>
<li>when is a macro &#8211; check and do a buch of things if evaluates true</li>
<li>cond &#8211; tree of if then else without lots of nesting, test &#8211; expression pair, stops when it hits the first true test, can end with an :else default by convention only</li>
<li>case &#8211; occasionally useful, like switch in Java, takes constants and returns value, if you don&#8217;t define a default you get an error, odd number of expressions, the last one is the default</li>
<li>dotimes &#8211; basic loop (dotimes [i 3]), only useful for side effects as it never returns a value</li>
<li>doseq &#8211; iterates over a collection, like for-each</li>
<li>for &#8211; not for looping, generates data, returns a sequence</li>
<li>recur &#8211; for recursion, rarely used, loop defines bindings which you recur</li>
<li>exceptions &#8211; don&#8217;t use them much in Clojure, no checked exceptions, try-catch-finally as per Java, throw to throw an exception</li>
<li>ex-info and ex-data that allows you to pass back a map</li>
<li>with-open &#8211; convenience wrapper, works with any method that needs to be closed</li>
</ul>
<h3>Namespaces</h3>
<ul>
<li>Clojure runtime is a singleton within the JVM</li>
<li>namespaces allow you thave the same name mean different things in different places</li>
<li>ns &#8211; use macro at the top of the source file to create a namespace, :require keyword to load the dependent libraries</li>
<li>implicit mapping between namespaces and files, dots into slashes and hypens into underscores</li>
<li>ns :use : only is deprecated form of :require from 1.4 up</li>
<li>ns :import for importing Java classes, every namespace imports java.lang</li>
<li>in-ns to change namespaces</li>
<li>equivalent macros for when using the REPL instead of a file</li>
<li>a bunch of functions for returning namespace information, but would rarely use these</li>
<li>private vars are just a metdata symbol, use ^:private, not truly private or hidden</li>
</ul>
<h3>Collections</h3>
<ul>
<li>a class or a struct becomes a map in Clojure</li>
<li>clojure.set &#8211; mathematical set operations</li>
<li>vectors are functions, can call using the indices</li>
<li>mostly use vectors, lists are useful when you want to work at the head of the list as it is more efficient, like simulating a stack</li>
<li>seq &#8211; returns a sequential view of something, like an iterator but it is not an iterator, can get first or rest</li>
<li>range &#8211; infinite lazy sequence of integers</li>
<li>into &#8211; puts a sequence into a collection</li>
<li>take / drop &#8211; take the first n in the sequence, drop the first n in the sequence, also filter and remove</li>
<li>map &#8211; the essence of functional programming &#8211; calls a function on a sequence and returns a sequence, the functional equivalent of for/each</li>
<li>reduce &#8211; powerful, uses first element if not initiated</li>
<li>some &#8211; to return the first logical true in the sequence</li>
</ul>
<h3>Concurrency</h3>
<ul>
<li>concurrency &#8211; multiple things happening concurrently that are sharing the same state</li>
<li>deref &#8211; returns current state, shortcut is @&lt;ref&gt;</li>
<li>atom &#8211; basic container with mutable state, changes are atomic, synchronous</li>
<li>ref &#8211; coordinate and share identities, synchronous, must be iolated in a transaction, uses locking under the hood</li>
<li>ensure &#8211; ensure the state is the same when the transaction is completed</li>
<li>alter &#8211; change the value of a reference in a transaction, if another transaction tries to change it gets aborted</li>
<li>commute &#8211; same behaviour as alter but allows concurent updates in a transaction, use for counters, adding elements to a map, if you are not sure use alter</li>
<li>agent &#8211; asynchronous communication, atomic updates, ensure only one thing done at a time, every agent has its own queue</li>
<li>send &#8211; send an action (function) to an agent, execute in the order that you send them, can&#8217;t guarantee that other threads are not sending action, fixed size thread pool</li>
<li>send-off &#8211; variable size thread pool</li>
<li>vars &#8211; thread safe, global identity, alter-var-root to modify global state created by a def, by convention dynamic var is surrounded by * (called earmuffs)</li>
<li>swap! and reset!, convention to put a bang at the end of functions that have side effects or shouldn&#8217;t be put inside a transation</li>
<li>watches &#8211; experimental, takes 4 arguments &#8211; key, reference, old state and new state, you can then add-watch</li>
<li>future &#8211; background process, if you de-reference the future it will block (@&lt;ref&gt;)</li>
<li>promise &#8211; like a future but no running process, like a container, can wait for it to deliver that promise to another thread, can only be delivered once</li>
<li>realized? &#8211; to ask if a promise has been delivered</li>
</ul>
<h3>Polymorphism</h3>
<ul>
<li>polymorphism &#8211; two types protocols and multi-methods</li>
<li>type &#8211; what is the type of class using class or type</li>
<li>maps do not have a notion of type, record allow you to give a type to a map, defrecord creates a record, by convention the name has a capital, records are maps so we can call all the map functions</li>
<li>record automatically creates the constructor function called -&gt;&lt;function&gt;, map-&gt;&lt;function&gt; takes a map</li>
<li> when you create a record you are generating a Java class, useful when creating a lot of maps with the same structure or to implement protocols</li>
<li>protocol &#8211; like a Java interface, group of functions that do not provide an implementation, called based on the first argument, defprotocol to create the functions</li>
<li>convention _ is an argument I don&#8217;t care about</li>
<li>reify &#8211; creates anonymous types</li>
<li>extend-type and extend-protocol &#8211; allows you to create new interfaces to existing types, solves the monkey patching issue</li>
<li>multimethods &#8211; generic methods, much more flexible than protocols, uses defmulti and defmethod, an extensible switch</li>
</ul>
<h3>Macros</h3>
<ul>
<li>macro &#8211; pure functions &#8211; defmacro &#8211; code is input and output, define the symbols to reflect the code that we want, macroexpand-1 is used for testing and debugging to see what that macro does</li>
<li>syntax quote `</li>
<li>unquote ~ and unquote splicing ~@</li>
<li>most of the core language where not functions are macros, write macros for syntactic convenience</li>
</ul>
<h3>Clojure and the JVM</h3>
<ul>
<li>Clojure is tightly integrated to the JVM, is unlikely to be the bottleneck performance wise</li>
<li>arrays can use aset and aget to access, use Clojure Collections but maybe needed for interoperability, can use to-array and into-array</li>
<li>types and collections are all mapped over to Clojure</li>
<li>built in benchmarking in Clojure using time function, time a loop to get a better indication rather than just time on its own</li>
<li>by default everything is boxed in Clojure, but Clojure has limited support for long and double primitives</li>
<li>compile &#8211; pass your namespace, will give you ahead of time compile which gives a modest (30% &#8211; 40%) speed increase amongst other benefits, usually will us leinengen or another tool (lein compile)</li>
</ul>
<h3>ClojureScript</h3>
<ul>
<li>ClojureScript is designed to deliver optimised JavaScript</li>
<li>two pieces &#8211; ClojureScrpt compiler written in Clojure on the JVM, compiles Clojure to JavaScript, then the Google Closure compiler optimises for space for performance</li>
<li>lein-cljsbuild makes ClojureScript tolerable</li>
<li><a href="http://clojurescriptone.com/">ClojureScript One</a> but is superceded by <a href="http://pedestal.io/">Pedestal</a> now</li>
<li>testing frameworks &#8211; <a href="http://richhickey.github.io/clojure/clojure.test-api.html">Clojure.test</a>, <a href="https://github.com/marick/Midje">Midje</a> testing framework written by Brian Marick and <a href="https://github.com/Datomic/simulant">Simulant</a></li>
</ul><br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cds43.wordpress.com/1442/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cds43.wordpress.com/1442/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=craigsmith.id.au&#038;blog=1253279&%23038;post=1442&%23038;subd=cds43&%23038;ref=&%23038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://craigsmith.id.au/2013/05/12/an-introduction-to-clojure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://1.gravatar.com/avatar/150a07a737ff3ff0109cd13bcd008dd8?s=96&#038;d=identicon&#038;r=G" length="0" type="" />
<enclosure url="http://cds43.files.wordpress.com/2013/05/clojure.png" length="0" type="" />
		</item>
	</channel>
</rss>
