<?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>Transentia</title>
	<atom:link href="http://wordpress.transentia.com.au/wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>http://wordpress.transentia.com.au/wordpress</link>
	<description>transentia pty. ltd.; development, consulting, training at the leading-edge of technology</description>
	<lastBuildDate>Thu, 03 May 2012 10:18:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>January 2012 GroovyMag</title>
		<link>http://wordpress.transentia.com.au/wordpress/2012/05/03/january-2012-groovymag/</link>
		<comments>http://wordpress.transentia.com.au/wordpress/2012/05/03/january-2012-groovymag/#comments</comments>
		<pubDate>Thu, 03 May 2012 10:18:50 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[GroovyMag]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://wordpress.transentia.com.au/wordpress/?p=1635</guid>
		<description><![CDATA[I completely forgot to publicise my January 2012 GroovyMag article! The topic &#8220;Testing and Evaluating a Simple Set of Classes&#8221; covers testing using Spock, CodeNarc and Cobertura.]]></description>
			<content:encoded><![CDATA[<p>I completely forgot to publicise my <a href="http://www.groovymag.com/main.issues.description/id=44/">January 2012 GroovyMag article</a>! The topic &#8220;Testing and Evaluating a Simple Set of Classes&#8221; covers testing using Spock, CodeNarc and Cobertura.</p>
<p><img src="http://wordpress.transentia.com.au/wordpress/wp-content/uploads/2012/05/gm-ed44_400.jpg" alt="" title="gm-ed44_400" width="400" height="518" class="alignnone size-full wp-image-1636" /></p>
]]></content:encoded>
			<wfw:commentRss>http://wordpress.transentia.com.au/wordpress/2012/05/03/january-2012-groovymag/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>More Scribbling</title>
		<link>http://wordpress.transentia.com.au/wordpress/2012/05/01/more-scribbling/</link>
		<comments>http://wordpress.transentia.com.au/wordpress/2012/05/01/more-scribbling/#comments</comments>
		<pubDate>Tue, 01 May 2012 11:01:37 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://wordpress.transentia.com.au/wordpress/?p=1619</guid>
		<description><![CDATA[This time with HTML5&#8242;s &#60;canvas&#62; tag, jquery-1.7.2 and coffeescript-1.3.1. &#60;!DOCTYPE html&#62; &#60;head&#62; &#60;meta charset="utf-8" /&#62; &#60;title&#62;CoffeeCanvasScribble&#60;/title&#62; &#60;script src="js/jquery-1.7.2.js"&#62;&#60;/script&#62; &#60;script src="js/coffee-script.js"&#62;&#60;/script&#62; &#60;link rel="stylesheet" href="css/cs_scribble.css" /&#62; &#60;/head&#62; &#60;body&#62; &#60;canvas id="canvas" width="800" height="500" style="width: 800px; height: 500px; border: 1px solid gray"&#62;&#60;/canvas&#62; &#60;div id="buttons"&#62; &#60;div&#62; &#60;/div&#62; &#60;input type="button" id="clear" value="Clear" /&#62;  &#60;input type="button" id="red" value="Red" /&#62;  &#60;input type="button" id="green" value="Green" [...]]]></description>
			<content:encoded><![CDATA[<p>This time with HTML5&#8242;s &lt;canvas&gt; tag, jquery-1.7.2 and coffeescript-1.3.1.</p>
<pre>&lt;!DOCTYPE html&gt;
    &lt;head&gt;
        &lt;meta charset="utf-8" /&gt;
        &lt;title&gt;CoffeeCanvasScribble&lt;/title&gt;
        &lt;script src="js/jquery-1.7.2.js"&gt;&lt;/script&gt;
        &lt;script src="js/coffee-script.js"&gt;&lt;/script&gt;
        &lt;link rel="stylesheet" href="css/cs_scribble.css" /&gt;
    &lt;/head&gt; 

    &lt;body&gt;
        &lt;canvas id="canvas" width="800" height="500"
                style="width: 800px; height: 500px; border: 1px solid gray"&gt;&lt;/canvas&gt;
        &lt;div id="buttons"&gt;
          &lt;div&gt; &lt;/div&gt;
          &lt;input type="button" id="clear" value="Clear" /&gt; 
          &lt;input type="button" id="red" value="Red" /&gt; 
          &lt;input type="button" id="green" value="Green" /&gt; 
          &lt;input type="button" id="blue" value="Blue" /&gt; 
          &lt;input type="button" id="black" value="Black" /&gt; 
          &lt;input type="button" id="snapshot" value="Snapshot" /&gt;
          &lt;div&gt; &lt;/div&gt;
          &lt;div class="filler"&gt;&lt;/div&gt;
        &lt;/div&gt;

        &lt;div id="snapshotDiv"&gt; &lt;/div&gt;

        &lt;script type="text/coffeescript"&gt;
          canvas = $('#canvas')
          offset = canvas.offset()
          # this is the 'real/non-jquery' document.getElementByID:
          canvasDoc = canvas[0]
          context = canvasDoc.getContext '2d'

          #
          # canvas handling
          #
          button = null

          # useful for debugging...
          #
          # usage: console.log dump(o)
          # dump = (obj) -&gt;
          #   str = ""
          #   for own key, value of obj
          #     str += "#{key} = #{obj[key]}\n"
          #   str

          $('#canvas').mousedown (e) -&gt;
            button = e.button
            x = e.pageX
            y = e.pageY
            x -= offset.left
            y -= offset.top
            context.beginPath()
            context.moveTo x, y

          $('#canvas').mouseup (e) -&gt;
            button = null
            context.closePath()

          $('#canvas').mousemove (e) -&gt;
            return unless (button?)
            x = e.pageX
            y = e.pageY
            x -= offset.left
            y -= offset.top
            context.lineTo x, y
            context.stroke()

          #
          # HTML button handling
          #

          # usage: logToMessage "((#{x}, #{y}))"
          #
          # needs &lt;div id="message"&gt; &lt;/div&gt; somewhere
          #
          # logToMessage = (message) -&gt;
          #   $('#message').show().html message

          $('#red').mousedown (e) -&gt;
            context.strokeStyle = 'red'

          $('#green').mousedown (e) -&gt;
            context.strokeStyle = 'green'

          $('#blue').mousedown (e) -&gt;
            context.strokeStyle = 'blue'

          $('#black').mousedown (e) -&gt;
            context.strokeStyle = 'black'

          $('#snapshot').mousedown (e) -&gt;
            img = canvasDoc.toDataURL()
            $('#snapshotDiv').show().html "&lt;img id='snapshotImg' src='#{img}'/&gt;"

          $('#clear').mousedown (e) -&gt;
            context.save()
            # Use the identity matrix while clearing the canvas
            context.setTransform 1, 0, 0, 1, 0, 0
            context.clearRect 0, 0, context.canvas.width, context.canvas.height
            # restore transform matrix
            context.restore()
            # clear any snapshot
            $('#snapshotDiv').show().html '&amp;nbsp;'
         &lt;/script&gt;
    &lt;/body&gt;
&lt;/html&gt;
</pre>
<p>And the &#8216;beautiful&#8217; results, as shown in IE9:</p>
<p><img class="alignnone size-half wp-image-1622" title="canvas" src="/wordpress/wp-content/uploads/2012/05/canvas.png" alt="" width="421" height="361" /></p>
<p>It&#8217;s actually slightly more beautiful in Safari, but one screenshot is quite enough.</p>
<p>Note the use of the <a href="/wordpress/2009/08/31/another-factoid-for-the-memory-box-inline-images-in-html/">data: URL</a>.</p>
<p>I guess that this doesn&#8217;t really show the power of coffeescript but it was fun to make, and adds another Scribble implementation to the <a href="/wordpress/2009/04/26/java-groovy-javafx/">Java, Groovy, JavaFX</a> and <a href="/wordpress/2009/04/27/mustresistjrubyscribble/">JRuby</a> versions already here.</p>
]]></content:encoded>
			<wfw:commentRss>http://wordpress.transentia.com.au/wordpress/2012/05/01/more-scribbling/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Tool For The WiFi Itinerants Among Us</title>
		<link>http://wordpress.transentia.com.au/wordpress/2012/03/23/a-tool-for-the-wifi-itinerants-among-us/</link>
		<comments>http://wordpress.transentia.com.au/wordpress/2012/03/23/a-tool-for-the-wifi-itinerants-among-us/#comments</comments>
		<pubDate>Fri, 23 Mar 2012 09:20:09 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://wordpress.transentia.com.au/wordpress/?p=1601</guid>
		<description><![CDATA[If you&#8217;re the kind of person that travells the WiFi universe a fair bit, you&#8217;ll probably appreciate Autoroute SMTP as much as I do. Autoroute SMTP (ARS) is designed for automatic switching between SMTP servers depending on what network you are currently working in. The tool is tiny, unobtrusive and free, which are nice attributes. [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re the kind of person that travells the WiFi universe a fair bit, you&#8217;ll probably appreciate <a href="http://www.mailutilities.com/ars/">Autoroute SMTP</a> as much as I do.</p>
<blockquote><p>
Autoroute SMTP (ARS) is designed for automatic switching between SMTP servers depending on what network you are currently working in.
</p></blockquote>
<p>The tool is tiny, unobtrusive and free, which are nice attributes.</p>
<p>Given that the maker, Emma Labs, seems to be all about &#8220;e-mail marketing professionals&#8230;our products allows you to create targeted mailing lists using essential data from communities and services required [sic] a membership.&#8221; I can but hope that it isn&#8217;t siphoning all my sent mail off to somewhere undesirable!</p>
<p>I have never found any bad comments floating around out there&#8230;or any good ones, to be honest. <a href="http://www.nirsoft.net/utils/cports.html">CurrPorts</a> doesn&#8217;t show any badness so for now, I&#8217;m keeping my head firmly stuck in the sand&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://wordpress.transentia.com.au/wordpress/2012/03/23/a-tool-for-the-wifi-itinerants-among-us/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What The Flip Is Happening On My Network?</title>
		<link>http://wordpress.transentia.com.au/wordpress/2012/03/21/what-the-flip-is-happening-on-my-network/</link>
		<comments>http://wordpress.transentia.com.au/wordpress/2012/03/21/what-the-flip-is-happening-on-my-network/#comments</comments>
		<pubDate>Wed, 21 Mar 2012 11:57:11 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://wordpress.transentia.com.au/wordpress/?p=1594</guid>
		<description><![CDATA[A question I often find myself asking&#8230;and attempting to answer. For Linux/OSX I use iftop. I just can never remember the name! Whenever anyone asks me the above question, I am always reduced to stammering and delaying while groping around in my murky-at-the-best-of-times memory. For Windows I use CurrPorts. One of the many components comprising [...]]]></description>
			<content:encoded><![CDATA[<p>A question I often find myself asking&#8230;and attempting to answer.</p>
<p>For Linux/OSX I use <a href="http://freecode.com/projects/iftop">iftop</a>. I just can <em>never</em> remember the name! Whenever anyone asks me the above question, I am always reduced to stammering and delaying while groping around in my murky-at-the-best-of-times memory.</p>
<p>For Windows I use <a href="http://www.nirsoft.net/utils/cports.html">CurrPorts</a>. One of the many components comprising the excellent <a href="http://www.nirsoft.net/">Nirsoft Tools</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://wordpress.transentia.com.au/wordpress/2012/03/21/what-the-flip-is-happening-on-my-network/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>History</title>
		<link>http://wordpress.transentia.com.au/wordpress/2012/03/18/history/</link>
		<comments>http://wordpress.transentia.com.au/wordpress/2012/03/18/history/#comments</comments>
		<pubDate>Sun, 18 Mar 2012 01:15:51 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Retrospectives]]></category>

		<guid isPermaLink="false">http://wordpress.transentia.com.au/wordpress/?p=1579</guid>
		<description><![CDATA[Here is three generations of my family in one photo. Left-right&#8230;my father: Charles Brown, my Grandfather: Robert Simmons and me: Robert Charles Brown. The dog&#8217;s name was &#8216;Patch.&#8217; For the life of me, I can&#8217;t remember what we called The Rabbit (somehow sums up the futility of life!). The photo would have been taken around [...]]]></description>
			<content:encoded><![CDATA[<p>Here is three generations of my family in one photo. </p>
<p><img src="http://wordpress.transentia.com.au/wordpress/wp-content/uploads/2012/03/Grandad.jpg" alt="" title="Grandad" width="568" height="514" class="alignnone size-full wp-image-1581" /></p>
<p>Left-right&#8230;my father: Charles Brown, my Grandfather: Robert Simmons and me: Robert Charles Brown. The dog&#8217;s name was &#8216;Patch.&#8217; For the life of me, I can&#8217;t remember what we called The Rabbit (somehow sums up <a href="http://www.btinternet.com/~snapps/">the futility of life</a>!). The photo would have been taken around 1970 at the back of our house in <a href="http://en.wikipedia.org/wiki/Duston">Duston, Northampton, England</a>.</p>
<p>Which is just here:</p>
<p><iframe width="640" height="480" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com.au/maps?gl=au&amp;ie=UTF8&amp;t=h&amp;ll=52.249853,-0.955605&amp;spn=0.000394,0.000858&amp;z=20&amp;output=embed"></iframe><br /><small><a href="http://maps.google.com.au/maps?gl=au&amp;ie=UTF8&amp;t=h&amp;ll=52.249853,-0.955605&amp;spn=0.000394,0.000858&amp;z=20&amp;source=embed" style="color:#0000FF;text-align:left">View Larger Map</a></small></p>
<p>Not sure there is any other similar picture in existence, so I thought I&#8217;d give <a href="http://www.archive.org/web/web.php">The Wayback Machine</a> a chance to eventually preserve it for posterity.</p>
]]></content:encoded>
			<wfw:commentRss>http://wordpress.transentia.com.au/wordpress/2012/03/18/history/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>More GroovyMag Verbosity</title>
		<link>http://wordpress.transentia.com.au/wordpress/2012/03/07/more-groovymag-verbosity/</link>
		<comments>http://wordpress.transentia.com.au/wordpress/2012/03/07/more-groovymag-verbosity/#comments</comments>
		<pubDate>Wed, 07 Mar 2012 10:48:35 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[GroovyMag]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://wordpress.transentia.com.au/wordpress/?p=1569</guid>
		<description><![CDATA[Another article in this month&#8217;s (March 2012) GroovyMag: &#8220;To Kill a Mocking Problem &#8211; Using Betamax to mock HTTP-based interactions.&#8221; Wherein I take Rob Fletcher&#8217;s very nice &#8216;Betamax&#8217; tool out for a spin along with friends Gradle, Spock and Geb.]]></description>
			<content:encoded><![CDATA[<p>Another article in <a href="http://www.groovymag.com/main.issues.description/id=42/">this month&#8217;s (March 2012) GroovyMag</a>: &#8220;To Kill a Mocking Problem &#8211; Using Betamax to mock HTTP-based interactions.&#8221;</p>
<p><img src="http://wordpress.transentia.com.au/wordpress/wp-content/uploads/2012/03/gm41_400.jpg" alt="" title="gm41_400" width="400" height="518" class="alignnone size-full wp-image-1570" /></p>
<p>Wherein I take <a href="http://freeside.co/betamax/">Rob Fletcher&#8217;s very nice &#8216;Betamax&#8217; tool</a> out for a spin along with friends <a href="http://gradle.org/">Gradle</a>, <a href="http://code.google.com/p/spock/">Spock</a> and <a href="http://www.gebish.org/">Geb</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://wordpress.transentia.com.au/wordpress/2012/03/07/more-groovymag-verbosity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JDBM</title>
		<link>http://wordpress.transentia.com.au/wordpress/2012/03/06/jdbm/</link>
		<comments>http://wordpress.transentia.com.au/wordpress/2012/03/06/jdbm/#comments</comments>
		<pubDate>Tue, 06 Mar 2012 10:31:02 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://wordpress.transentia.com.au/wordpress/?p=1558</guid>
		<description><![CDATA[A colleague recently came up to me with a problem: he had a trace file representing the history of several years&#8217; worth of CRUD operations on many records. Something resembling: 1:create:hello 123:create:xxx 12345:create:hello 123:update:uuu 999:update:42 123:delete 1:update:xxx 1:update:iuu 12345:update:hello world 1:delete The task at hand was to work out which records were active at the [...]]]></description>
			<content:encoded><![CDATA[<p>A colleague recently came up to me with a problem: he had a trace file representing the history of several years&#8217; worth of <a href="http://en.wikipedia.org/wiki/Create,_read,_update_and_delete">CRUD</a> operations on many records. Something resembling:</p>
<pre>
1:create:hello
123:create:xxx
12345:create:hello
123:update:uuu
999:update:42
123:delete
1:update:xxx
1:update:iuu
12345:update:hello world
1:delete
</pre>
<p>The task at hand was to work out which records were active at the end of the trace and to determine the most up-to-date value each active record.</p>
<p>The expected result here is:</p>
<pre>
Didn't find 999 to update. Creating new entry.
Results:
	12345 => hello world
	999 => 42
</pre>
<p>This instantly reminded me of a <a href="http://en.wikipedia.org/wiki/Concordancer">concordancing problem</a>. </p>
<p>The natural data structure for this is a Map. Thus we have the first potential solution for the problem:</p>
<pre>
def m = [:]
new File(/..\data.dat/).splitEachLine(':') { line ->
    def (id, op, data) = line
    switch (op) {
        case 'update':
            if (!m.containsKey(id))
                println "Didn't find ${id} to update. Creating new entry."
        case 'create':
            m.put(id, data)
            break

        case 'delete':
            m.remove(id)
            break
    }
}

println "Results:"
m.each { k,v ->
    println "\t${k} => ${v}"
}
</pre>
<p>This works nicely: it&#8217;s clear and concise&#8230;all the things I like! Groovy makes it even nicer :-)</p>
<p>But (there&#8217;s <em>always</em> a but&#8230;sadly) my colleague had <em>lots</em> of data to process. Too much to be realistically held in memory. </p>
<p>The tool I would normally reach for in this circumstance is a plain old database, but hey! this is the age of <a href="http://en.wikipedia.org/wiki/NoSQL">noSQL</a>.</p>
<p>Enter <a href="https://github.com/jankotek/JDBM3">JDBM3</a>:</p>
<blockquote><p>
JDBM provides HashMap, TreeMap, HashSet, TreeSet and LinkedList backed up by disk storage. Now you can insert more than a billion records into collection without running out of memory. JDBM is probably the fastest pure Java database.
</p></blockquote>
<p>Ten minutes of hacking and version one had transformed into version two:</p>
<pre>
import net.kotek.jdbm.*

// uses JDBM3-alpha-2 from https://github.com/jankotek/JDBM3

final path = /..\data/

// start with non-existent database
new File(path).eachFile { it.delete() }

new DBMaker(path + /\ids/).build().with {  db ->

    db.createHashMap("ids").with { m ->

        new File(/..\data.dat/).splitEachLine(':') { line ->
            def (id, op, data) = line
            switch (op) {
                case 'update':
                    if (!m.containsKey(id))
                        println "Didn't find ${id} to update. Creating new entry."
                case 'create':
                    m.put(id, data)
                    break

                case 'delete':
                    m.remove(id)
                    break
            }
            db.commit()
        }

        m.each { k,v ->
            println "\t${k} => ${v}"
        }
    }

    db.close()
}
</pre>
<p>Still nice, clear and concise&#8230;but now capable of dealing with a (few) billion records.</p>
<p>Even more to like!</p>
<p><em>Update</em>:<br />
It is now possible to simplify this further. After mentioning to the developer that:</p>
<blockquote><p>
If there is one small thing I would like tidied up in the example code, it is this:</p>
<p>> // start with non-existent database<br />
> new File(path).eachFile { it.delete() }</p>
<p>Having to delete the database/files by hand, rather than just specifying a create-truncate mode of some sort &#8216;feels&#8217; wrong.
</p></blockquote>
<p>He responded within hours:</p>
<blockquote><p>
&#8230;it is done now, check DBMaker.
</p></blockquote>
<p>This means that one can now do:</p>
<pre>
new DBMaker(path + /\ids/).build().deleteFilesAfterClose().with {  db ->
</pre>
<p>Open source <a href="http://www.urbandictionary.com/define.php?term=FTW">FTW</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://wordpress.transentia.com.au/wordpress/2012/03/06/jdbm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nokia with Windows Phone Training</title>
		<link>http://wordpress.transentia.com.au/wordpress/2012/03/04/nokia-with-windows-phone-training/</link>
		<comments>http://wordpress.transentia.com.au/wordpress/2012/03/04/nokia-with-windows-phone-training/#comments</comments>
		<pubDate>Sat, 03 Mar 2012 23:04:24 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[windows phone]]></category>
		<category><![CDATA[wp7]]></category>

		<guid isPermaLink="false">http://wordpress.transentia.com.au/wordpress/?p=1533</guid>
		<description><![CDATA[Just attended the Brisbane &#8220;Nokia with Windows Phone Training&#8221; event. Thanks to Microsoft and Nokia for setting up this free two-day talkfest! I got a good overview of the various new features and APIs comprising Windows Phone. Thanks especially to the presenters Andy Wigley (http://appamundi.com/about/) and Nick Randolph (http://nicksnettravels.builttoroam.com/). They did a good job of [...]]]></description>
			<content:encoded><![CDATA[<p>Just attended the Brisbane &#8220;Nokia with Windows Phone Training&#8221; event.</p>
<p>Thanks to Microsoft and Nokia for setting up this free two-day talkfest!</p>
<p>I got a good overview of the various new features and APIs comprising <a href="http://www.microsoft.com/windowsphone/en-au/default.aspx">Windows Phone</a>.</p>
<p>Thanks especially to the presenters Andy Wigley (<a href="http://appamundi.com/about/">http://appamundi.com/about/</a>) and Nick Randolph (<a href="http://nicksnettravels.builttoroam.com/">http://nicksnettravels.builttoroam.com/</a>). They did a good job of showing the tools and APIs: got the right balance between diving deep and splashing around in the shallows.</p>
<p>I came away feeling quite upbeat.<br />
(&#8230;this could just be a reflection on how <a href="http://www.google.com.au/url?sa=t&amp;rct=j&amp;q=low%20down%20dirty %20mean&amp;source=web&amp;cd=3&amp;ved=0CDcQFjAC&amp;url=http%3A%2F%2Fwww.last.fm%2Fmusic%2FThe%2BAllman%2BBrothers%2BBand%2F_%2FLow%2BDown%2BDirty%2BMean&amp;ei=2vJRT_C1F8KSiAeGzfnXCw&amp;usg=AFQjCNEZxEc4QI6uJUy0jOizbaocB5obdg">low-down dirty and mean</a> my current project is making me feel, but still&#8230;)</p>
<p>As Andy and Nick were speaking I was hacking (I think I was the <em>only</em> attendee nerdy enough to do so); keeping one ear/eye on the presentation and the other ranging between the program and the internet.</p>
<p>As a result, I would like to give you The Finger.</p>
<p><img class="alignnone size-full wp-image-1535" title="TheFingerMontage" src="http://wordpress.transentia.com.au/wordpress/wp-content/uploads/2012/03/TheFingerMontage.jpg" alt="" width="702" height="643" /></p>
<p>There&#8217;s absolutely nothing special here, but it pleased me to be able to knock something together so easily (little things please little minds :-))</p>
<p>Starting from scratch, I worked/hacked out a fair bit:<br />
* the basic framework<br />
* standard pages, pivot pages<br />
* basic event handling<br />
* buttons and menus<br />
* animation with Expression Blend<br />
* icons, tiles<br />
* isolated storage<br />
* tombstoning<br />
* etc., etc.</p>
<p>Not too shabby!</p>
<p>Thanks to the wonders of the Internet and <a href="nuget.codeplex.com/">NuGet</a>, I was able to pick up the <a href="http://coding4fun.codeplex.com/"> Coding4Fun</a> colour picker component. I also adopted the <a href="http://blog.spoongraphics.co.uk/freebies/free-cute-furry-monster-icons-for-mac-pc-and-web">Orange Monster</a> (a personal favourite) for the logo.</p>
<p>You can <a href='http://wordpress.transentia.com.au/wordpress/wp-content/uploads/2012/03/Finger.zip'>grab the VS solution</a> in all its raw, un-prettified glory!</p>
<p>The Finger follows an enduring Transentia tradition: I typically try to create a (David Flanagan) <a href="http://www.java2s.com/Code/Java/2D-Graphics-GUI/Scribble.htm">scribble</a>-style application in any new environment I come across. On this site I already have <a href="wordpress/2009/04/26/java-groovy-javafx/">Java, Groovy, JavaFX</a> and <a href="/wordpress/2009/04/27/mustresistjrubyscribble/">JRuby</a> versions. I have a mental image of a huntin&#8217; &#8216;n fishin&#8217;-style trophy room with walls lined by scribble programs mounted on shields&#8230;</p>
<p>I found WP7 substantially easier to program than the iPhone. Give me C# over Objective-C, Expression over Interface Builder and Visual Studio over XCode any day (it <a href="/wordpress/2010/08/13/im-an-apple-fanboi/">hurts me to say that</a> but it&#8217;s true, nevertheless). Microsoft have always done good development environments/kits&#8230;</p>
<p>Now that the <a href="http://www.google.com.au/url?sa=t&amp;rct=j&amp;q=windws%208%20consumer%20release&amp;source=web&amp;cd=6&amp;ved=0CFkQFjAF&amp;url=http%3A%2F%2Fwindows.microsoft.com%2Fen-US%2Fwindows-8%2Fdownload&amp;ei=EvpRT_CHGoSYiAfMoezgCw&amp;usg=AFQjCNHQCTJpkiViq9cVVc9_ZEpENNZfhg">Windows 8 Consumer Preview</a> has been released it is easy to see how Microsoft is trying to link the two platforms together. Both feature big bright tiles/buttons, a swipe-oriented interaction &#8216;language&#8217; and a set of shared, cloudy services, etc&#8230;. <a href="http://en.wikipedia.org/wiki/Welcome_Back_My_Friends_to_the_Show_That_Never_Ends..._Ladies_and_Gentlemen">Welcome back, my friends</a> to the Microsoft walled community.</p>
<p>Regardless of the technical or other merits of WP7, I predict a bright future: people are always looking for the Next New Thing and WP7 is different enough to be that Next New Thing. It may&#8211;just may&#8211;even become A Better Thing.</p>
<p>PS:<br />
Just came across <a href="http://electroblast.blogspot.com.au/">this blow-by-blow writeup</a> from a sister event in Melbourne.</p>
]]></content:encoded>
			<wfw:commentRss>http://wordpress.transentia.com.au/wordpress/2012/03/04/nokia-with-windows-phone-training/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Wheel Is Turning</title>
		<link>http://wordpress.transentia.com.au/wordpress/2011/12/13/the-wheel-is-turning/</link>
		<comments>http://wordpress.transentia.com.au/wordpress/2011/12/13/the-wheel-is-turning/#comments</comments>
		<pubDate>Tue, 13 Dec 2011 03:01:15 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Rant]]></category>

		<guid isPermaLink="false">http://wordpress.transentia.com.au/wordpress/?p=1527</guid>
		<description><![CDATA[Perhaps? Here&#8217;s a great post that states the obvious: Homegrown solutions: The good and the bad. Gotta love an article that includes stuff like: &#8220;&#8230;nontechnical management gets the heebie-jeebies when presented with a plan that includes homegrown, self-supported solutions. Many executives would rather have a passel of slightly technical folks and vendor support than highly [...]]]></description>
			<content:encoded><![CDATA[<p>Perhaps?</p>
<p>Here&#8217;s a great post that states the obvious: <a href="http://www.infoworld.com/d/data-center/homegrown-solutions-the-good-and-the-bad-181268">Homegrown solutions: The good and the bad</a>.</p>
<p>Gotta love an article that includes stuff like:</p>
<blockquote><p>&#8220;&#8230;nontechnical management gets the heebie-jeebies when presented with a plan that includes homegrown, self-supported solutions. Many executives would rather have a passel of slightly technical folks and vendor support than highly skilled and highly paid technologists to keep the trains running on time. &#8230; you may be able to measure your savings in terms of the electrical bills and IT payroll, but the hidden costs can make those savings disappear. &#8230; When you need to &#8220;make things happen,&#8221; you simply can&#8217;t &#8212; you get stuck in months of apathetic meetings and general buffoonery from every angle. That&#8217;s not even touching the problems inherent with outsourcing help desk and general computing tasks.&#8221;</p></blockquote>
<p>I <em>wish</em> this didn&#8217;t match my experiences so exactly, I really do!</p>
]]></content:encoded>
			<wfw:commentRss>http://wordpress.transentia.com.au/wordpress/2011/12/13/the-wheel-is-turning/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Gr8 Technologies, Macau 2011</title>
		<link>http://wordpress.transentia.com.au/wordpress/2011/12/01/the-gr8-technologies-macau-2011/</link>
		<comments>http://wordpress.transentia.com.au/wordpress/2011/12/01/the-gr8-technologies-macau-2011/#comments</comments>
		<pubDate>Thu, 01 Dec 2011 06:57:24 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Groovy]]></category>

		<guid isPermaLink="false">http://wordpress.transentia.com.au/wordpress/?p=1517</guid>
		<description><![CDATA[Thanks to all at The University of Macau that came to listen to me rabbit on about Groovy and the Gr8 Technologies a few days ago. I hope it was interesting (and understandable!). The slide deck for &#8220;The Gr8 Technologies&#8221; (PDF) is now available. Feel free to take a look around the rest of the [...]]]></description>
			<content:encoded><![CDATA[<p>Thanks to all at <a href="http://www.umac.mo/">The University of Macau</a> that came to listen to me rabbit on about Groovy and the Gr8 Technologies a few days ago.</p>
<p>I hope it was interesting (and understandable!).</p>
<p>The slide deck for &#8220;<a href='http://wordpress.transentia.com.au/wordpress/wp-content/uploads/2011/12/The-Gr8-Technologies.pdf'>The Gr8 Technologies</a>&#8221; (PDF) is now available.</p>
<p>Feel free to take a look around the rest of the G*-related content on this site. The tag cloud on the right of this page will help you navigate. I&#8217;d suggest you take a look at the <a href="http://groovymag.com/">GroovyMag</a> articles on this site first: they are the most fully worked and carefully worded of all my materials.</p>
<p>May you never type another unnecessary semicolon!</p>
]]></content:encoded>
			<wfw:commentRss>http://wordpress.transentia.com.au/wordpress/2011/12/01/the-gr8-technologies-macau-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

