<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>technology @ www.talios.com</title><link>http://www.talios.com/</link><description>(technology) </description><copyright>Copyright 2008 www.talios.com</copyright><generator>Mark Derricutt</generator><lastBuildDate>Sun, 17 Aug 2008 10:05:00 GMT</lastBuildDate><image><title>technology @ www.talios.com</title><url>http://server1.blog-city.com/images/bc_v5_logo_small.gif</url><link>http://www.talios.com/</link></image><ttl>360</ttl><docs>http://backend.userland.com/rss</docs><item><title>Olympic Streaming</title><guid isPermaLink="true">http://www.talios.com/olympic_streaming.htm</guid><link>http://www.talios.com/olympic_streaming.htm</link><pubDate>Sun, 10 Aug 2008 08:04:00 GMT</pubDate><comments>http://www.talios.com/console/comments/popup/?f=olympic%5Fstreaming</comments><dc:creator>Mark Derricutt</dc:creator><description><![CDATA[<p>Watching four channels of the olympics at once thanks to a list of <a href="http://halfpie.net/article/819/tvnzs-streaming-urls-for-the-olympic-games">TV NZ streams</a>:</p>

<p><a href="http://www.flickr.com/photos/64583309@N00/2749231134" title="View 'Olympic Streaming' on Flickr.com"><div style="text-align:center;"><img src="http://farm4.static.flickr.com/3071/2749231134_9d650079a6.jpg" alt="Olympic Streaming" border="0" width="500" height="313" /></div></a></p>

<p>I'd love a TV specific application that handled these streams for me with a bit more ease than simply having multiple Quick Time players open.</p>

<p>As I've not yet found any compelling reasons to get Freeview, and my normal TV reception is nothing more than snow this is the best way to see the coverage.</p><p><a href='http://www.talios.com/console/comments/popup/?f=olympic%5Fstreaming'>Leave Comment</a></p><p>Related Entries:</p><ul><li><a href='http://www.talios.com/cold_as_ice__new_music_video_from_edwin_derricutt.htm'>Cold As Ice - New Music Video from Edwin Derricutt</a></li><li><a href='http://www.talios.com/mercenary__isolation.htm'>Mercenary - Isolation</a></li><li><a href='http://www.talios.com/edwin_derricutt__live_videos_from_the_hallertau_2008.htm'>Edwin Derricutt - Live Videos from the Hallertau 2008</a></li><li><a href='http://www.talios.com/king_diamond__give_me_your_soul_please.htm'>King Diamond - Give Me Your Soul Please</a></li><li><a href='http://www.talios.com/evergrey__torn_trailer_1.htm'>Evergrey - TORN trailer</a></li><li><a href='http://www.talios.com/children_of_bodom__blooddrunk.htm'>Children of Bodom - Blooddrunk</a></li><li><a href='http://www.talios.com/in_flames__the_mirrors_truth.htm'>In Flames - The Mirrors Truth</a></li><li><a href='http://www.talios.com/eluveitie__inis_mona.htm'>Eluveitie - Inis Mona</a></li><li><a href='http://www.talios.com/dream_theater__forsaken_video.htm'>Dream Theater - Forsaken Video</a></li><li><a href='http://www.talios.com/set_the_world_on_fire.htm'>Set the world on fire</a></li></ul>]]></description><category>olympic</category><category>video</category></item><item><title>Google XML Pages</title><guid isPermaLink="true">http://www.talios.com/google_xml_pages.htm</guid><link>http://www.talios.com/google_xml_pages.htm</link><pubDate>Sun, 03 Aug 2008 12:14:00 GMT</pubDate><comments>http://www.talios.com/console/comments/popup/?f=google%5Fxml%5Fpages</comments><dc:creator>Mark Derricutt</dc:creator><description><![CDATA[<p>In the original incarnation of my <a href="http://github.com/talios/timetrackr/tree/master">simple time tracker</a> application I had used freemarker as a template engine for the email report.  For this new incarnation I thought I'd take the newly open sourced <a href="http://code.google.com/p/gxp/">Google XML Pages</a> (GXP) for a spin.</p>

<p>Unlike JSP pages which generate and compile .java files on the fly, GXP generates .java files up front as part of your build process and forms a type safe API to the rest of your application to use.  Just as <a href="http://wicket.apache.org">Apache Wicket</a> brings type safety to your web applications Session and Pages, GXP brings it the same power to your templates.</p>

<p>A short example is the <a href="http://github.com/talios/timetrackr/tree/master/src/main/gxp/com/theoryinpractice/timetrackr/gxp/WorkItemSummary.gxp">Work Item Summary</a> template:
<pre>
&lt;gxp:template name='com.theoryinpractice.timetrackr.gxp.WorkItemSummary'
              xmlns='http://www.w3.org/1999/xhtml'
              xmlns:gxp='http://google.com/2001/gxp'&gt;
  &lt;gxp:import package="java.util"/&gt;
  &lt;gxp:import package="com.theoryinpractice.timetrackr.vo"/&gt;
  &lt;gxp:import package="com.theoryinpractice.timetrackr.pages"/&gt;
  &lt;gxp:param name="reportForDate" type='String'/&gt;
  &lt;gxp:param name="formattedTimeFor" type='String'/&gt;
  &lt;gxp:param name="activities" type='List{ActivityReport}'/&gt;
  ...
</pre>

<p>Once generated and compiled, this is called in java with:</p>

<pre>
List&lt;ActivityReport&gt; activities = new ArrayList&lt;ActivityReport&gt;();
...
StringBuilder buffer = new StringBuilder();
WorkItemSummary.write(
  buffer, new GxpContext(Locale.getDefault()),
  reportForDate,
  TimeFormat.format(userManager.calculateTimeForUser(user, Boolean.FALSE)),
  activities
);
</pre>

<p>The generated API is clean and simple to use, a single method to call with the required parameters and you're away laughing.  Comparing this with how I've used velocity and freemarker in the past, I can already see several benefits:</p>

<ul>
<li>You break your template, you break your build.</li>
<li>If you add/remove parameters to a template without changing the code, you break your build (I'd rather have a build broken in 5 places, than have a deployment break in the 1 that was used by QA guy #3)</li>
<li>Templates are now first-class citizens in your application</li>
<li>Templates can easily be bundled/modularized (and safely used across class loaders - OSGi I'm thinking of you!)</li>
</ul>

<p>The GXP template may be a little bit more wordy than the original freemarker version, but the safety it brings to the build is well worthy the XML.</p><p><a href='http://www.talios.com/console/comments/popup/?f=google%5Fxml%5Fpages'>Leave Comment</a></p><p>Related Entries:</p><ul><li><a href='http://www.talios.com/osgi_based_integration_testing_with_testng_and_apache_felix.htm'>OSGi based Integration testing with TestNG and Apache Felix</a></li><li><a href='http://www.talios.com/osgi_is_shiny.htm'>OSGi is Shiny</a></li><li><a href='http://www.talios.com/java_6_now_available_for_apple_macs.htm'>Java 6 now available for Apple Mac's</a></li><li><a href='http://www.talios.com/wanted_more_control_over_jdk_annotation_targets.htm'>WANTED: More control over JDK Annotation Targets</a></li><li><a href='http://www.talios.com/envy_code_r_pr7_vs_pr6__preview_thoughts.htm'>Envy Code R PR7 vs PR6 - Preview thoughts</a></li><li><a href='http://www.talios.com/job_search_20.htm'>Job Search 2.0</a></li><li><a href='http://www.talios.com/java_se_6_developer_preview_9_release_notes.htm'>Java SE 6 Developer Preview 9 Release Notes</a></li><li><a href='http://www.talios.com/embedded_resin_for_testing.htm'>Embedded Resin for Testing</a></li><li><a href='http://www.talios.com/integrating_facebook_with_wicket.htm'>Integrating Facebook with Wicket</a></li><li><a href='http://www.talios.com/maven_based_deployments.htm'>Maven Based Deployments</a></li></ul>]]></description><category>google</category><category>template</category><category>java</category></item><item><title>Simple time tracker code published</title><guid isPermaLink="true">http://www.talios.com/simple_time_tracker_code_published.htm</guid><link>http://www.talios.com/simple_time_tracker_code_published.htm</link><pubDate>Sun, 03 Aug 2008 10:23:00 GMT</pubDate><comments>http://www.talios.com/console/comments/popup/?f=simple%5Ftime%5Ftracker%5Fcode%5Fpublished</comments><dc:creator>Mark Derricutt</dc:creator><description><![CDATA[<p>Following on from <a href="http://www.talios.com/simple_time_tracker_redux.htm">last weeks</a> post about my simple wicket based <a href="http://www.talios.com/simple_time_tracking_application.htm">time tracker</a>, the code has been published to <a href="http://github.com/talios/timetrackr/tree/master">github</a>.
</p>
<p>The more I revisit the projects code the more semi-broken pieces I find which will be patched up and improved over the coming weeks.</p><p><a href='http://www.talios.com/console/comments/popup/?f=simple%5Ftime%5Ftracker%5Fcode%5Fpublished'>Leave Comment</a></p><p>Related Entries:</p><ul><li><a href='http://www.talios.com/simple_time_tracker_redux.htm'>Simple Time Tracker redux</a></li><li><a href='http://www.talios.com/integrating_facebook_with_wicket.htm'>Integrating Facebook with Wicket</a></li><li><a href='http://www.talios.com/wicket_forge_screencast.htm'>Wicket Forge Screencast</a></li><li><a href='http://www.talios.com/simple_time_tracking_application.htm'>Simple Time Tracking Application</a></li></ul>]]></description><category>wicket</category><category>git</category><category>github</category></item><item><title>Simple Time Tracker redux</title><guid isPermaLink="true">http://www.talios.com/simple_time_tracker_redux.htm</guid><link>http://www.talios.com/simple_time_tracker_redux.htm</link><pubDate>Sun, 27 Jul 2008 11:28:00 GMT</pubDate><comments>http://www.talios.com/console/comments/popup/?f=simple%5Ftime%5Ftracker%5Fredux</comments><dc:creator>Mark Derricutt</dc:creator><description><![CDATA[Since originally writing my <a href="http://www.talios.com/simple_time_tracking_application.htm">Simple Time Tracking</a> application I've been meaning to migrate the project away from version 2.0 of the wicket framework (which was ultimately scrapped) to the current 1.4 milestone releases and publically release the code.

On a cold and wet evening I spent a few hours pulling the code out of storage and updating it, as it's been ages since I've used wicket I thought it'd also be good to document what changes I'm making.

<ul>
<li>Change imports from wicket.* to org.apache.wicket.*</li>
<li>Replace <span class="code">ISessionFactory getSessionFactory()</span> with <span class="code">Session newSession()</span> on the <span class="code">Application class.</li>
<li>Revert component constructor changes - Wicket 2.0 took the parent in the constructor where as 1.4 uses the original scheme.</li>
<li>Add generics to <span class="code">Model</span> instances.
</ul>

Outside of changing the imports and constructors used in the project there was little to change really - to me this is a huge win in Wickets' favour (I don't think Tapestry users can say such a thing), however I did run into one problem with generic models.

The Model interface expects its generic argument to extend Serializable which is quite understandable - however it did mean I had to change my API to start using <span class="code">ArrayList<User> instead of <span class="code">List<User>, a minor inconvenience but one I can live with for now.

<div><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="561" height="517"> <param name="movie" value="http://content.screencast.com/users/Talios/folders/Jing/media/d0bf9a70-d4e2-4019-9d73-2300556f2e8e/bootstrap.swf"></param> <param name="quality" value="high"></param> <param name="bgcolor" value="#FFFFFF"></param> <param name="flashVars" value="thumb=http://content.screencast.com/users/Talios/folders/Jing/media/d0bf9a70-d4e2-4019-9d73-2300556f2e8e/FirstFrame.jpg&content=http://content.screencast.com/users/Talios/folders/Jing/media/d0bf9a70-d4e2-4019-9d73-2300556f2e8e/00000030.swf&width=561&height=517"></param> <param name="allowFullScreen" value="true"></param> <param name="scale" value="showall"></param> <param name="allowScriptAccess" value="always"></param> <embed src="http://content.screencast.com/users/Talios/folders/Jing/media/d0bf9a70-d4e2-4019-9d73-2300556f2e8e/bootstrap.swf" quality="high" bgcolor="#FFFFFF" width="561" height="517" type="application/x-shockwave-flash" allowScriptAccess="always" flashVars="thumb=http://content.screencast.com/users/Talios/folders/Jing/media/d0bf9a70-d4e2-4019-9d73-2300556f2e8e/FirstFrame.jpg&content=http://content.screencast.com/users/Talios/folders/Jing/media/d0bf9a70-d4e2-4019-9d73-2300556f2e8e/00000030.swf&width=561&height=517" allowFullScreen="true" scale="showall"></embed> </object></div>

<p><em>For some reason the <a href="http://screencast.com/t/0vW8EHNtg">screen cast above</a> only plays in Safari for me and not in Firefox, hopefully it works for other people.</em></p>

I should have the initial code-drop up on google code or somewhere else in the next few days after a few more regression bugs have been sorted.

<!-- Technorati Tags Start -->
<p>Technorati Tags:
<a href="http://technorati.com/tag/development" rel="tag">development</a>
</p>
<!-- Technorati Tags End --><p><a href='http://www.talios.com/console/comments/popup/?f=simple%5Ftime%5Ftracker%5Fredux'>Leave Comment</a></p><p>Related Entries:</p><ul><li><a href='http://www.talios.com/simple_time_tracker_code_published.htm'>Simple time tracker code published</a></li><li><a href='http://www.talios.com/osgi_based_integration_testing_with_testng_and_apache_felix.htm'>OSGi based Integration testing with TestNG and Apache Felix</a></li><li><a href='http://www.talios.com/integrating_facebook_with_wicket.htm'>Integrating Facebook with Wicket</a></li><li><a href='http://www.talios.com/wicket_forge_screencast.htm'>Wicket Forge Screencast</a></li><li><a href='http://www.talios.com/simple_time_tracking_application.htm'>Simple Time Tracking Application</a></li><li><a href='http://www.talios.com/mod_proxy.htm'>mod_proxy considered harmfull</a></li></ul>]]></description><category>apache</category><category>wicket</category></item><item><title>Pascal gets closures before java - why hasn&apos;t the world ended?</title><guid isPermaLink="true">http://www.talios.com/pascal_gets_closures_before_java__why_hasnt_the_world_ende.htm</guid><link>http://www.talios.com/pascal_gets_closures_before_java__why_hasnt_the_world_ende.htm</link><pubDate>Fri, 25 Jul 2008 11:09:00 GMT</pubDate><comments>http://www.talios.com/console/comments/popup/?f=pascal%5Fgets%5Fclosures%5Fbefore%5Fjava%5F%5Fwhy%5Fhasnt%5Fthe%5Fworld%5Fende</comments><dc:creator>Mark Derricutt</dc:creator><description><![CDATA[<p>So I see Delphi now has <a href="http://blogs.codegear.com/davidi/2008/07/23/38915/">generics and closures</a> in its upcoming "Tiburon" release:</p>

<pre>type
  // method reference
  TProc = reference to procedure(x: Integer);               

procedure Call(const proc: TProc);
begin
  proc(42);
end;
</pre>

<p>Use:</p>

<pre>var
  proc: TProc;
begin
  // anonymous method
  proc := procedure(a: Integer)
  begin
    Writeln(a);
  end;               

  Call(proc);
  readln
end.
</pre>

<p>I'd have loved have had both of these features back in the day when I was still doing Delphi.  As much as I no longer like the Pascal syntax, I love how cleanly the anonymous method declaration sits within the natural flow of things (although I'm not sure an inline method directly on the call to Call() would sit well).</p>

<p>My only question is, if Pascal can evolve why can't java?</p>

<p>Sure the Tiburon release can do this because the underlying .NET VM now supports the functionality, but thats not the point. Ok?</p>

<div class="posttagsblock"><a href="http://technorati.com/tag/development" rel="tag">development</a></div><p><a href='http://www.talios.com/console/comments/popup/?f=pascal%5Fgets%5Fclosures%5Fbefore%5Fjava%5F%5Fwhy%5Fhasnt%5Fthe%5Fworld%5Fende'>Leave Comment</a></p><p>Related Entries:</p><ul><li><a href='http://www.talios.com/units_conversion_with_delphis_data_aware_components.htm'>Units Conversion with Delphi's Data Aware Components</a></li></ul>]]></description><category>delphi</category><category>pascal</category><category>codegear</category></item><item><title>How I Got Started in Software Development</title><guid isPermaLink="true">http://www.talios.com/how_i_got_started_in_software_development.htm</guid><link>http://www.talios.com/how_i_got_started_in_software_development.htm</link><pubDate>Sun, 20 Jul 2008 11:11:00 GMT</pubDate><comments>http://www.talios.com/console/comments/popup/?f=how%5Fi%5Fgot%5Fstarted%5Fin%5Fsoftware%5Fdevelopment</comments><dc:creator>Mark Derricutt</dc:creator><description><![CDATA[<p>Earlier in the week <a href="http://www.fastchicken.co.nz/" title="Nic Wise">Nic Wise</a> pinged me on the <a href="http://www.fastchicken.co.nz/index.php/2008/07/11/how-i-got-started-in-software-development/">How I got started in software development</a> meme, I'd been meaning to post my entry sooner but ended up getting sidetracked.</p>

<p>
<strong>How old were you when you started programming?</strong></p>
<p>Way way way back in the day my parents purchased me and my brother a Fountain Video Games unit when I was around 11-12, later we got a Commodore Vic 20 and the discovery of BASIC soon followed, later that year I won a Commodore C=16 at the opening of Smith and Smiths in Napier simply by standing in the right spot and the right time.</P>

<p><strong>How did you get started in programming?</strong></P>
<p>By now I was well and truly the outcast as all my friends now had C64's, still - I continued to mess with BASIC and making my own games and programs and eventually began to hit the limits of the machine, eventually we upgraded to the Plus/4 (the C64 was considered, but given we already had a wealth of games for the C16 the +4 was a better option at the time) and I started dabbling with 6502 assembler after my 3rd form computer studies teacher gave me a photocopied assembly language guide.</P>
<p>A few years later my friends and I all upgraded to Amigas and thats where the fun began - AMOS game creator, Devpac Macro Assembler, the DEMO scene, and the best text editor ever written: Cygnus Ed.</P>

<p>Rolling on a few more years and I "upgraded" to a PC-XT when I went 'tech and started learning about databases and the "real" world of computing.</p>

<p><strong>What was your first language?</strong></p>
<p>As mentioned above, my first language was BASIC on the Commodore Vic 20, followed by 6502 assembler.</p>

<p><strong>What was the first real program you wrote?</strong></p>
<p>What defines a "real" program? If I discount the various programs and databases I wrote as part of school or tech projects, the first "programs" would have been a simple games I wrote on the C16/Plus4 (simple sprite based shoot'em'up games) and the Amiga (scrolling text demos/intro's for our local warez group, and later simple database apps with Superbase).</p>

<p><strong>What was your first professional programming gig?</strong></p>
<p>Discounting the programs I worked on at my first job, the first commercial program "I" wrote would have been the Food Bank database system for the local community food bank; a Delphi 1 application which tracked food parcel requests and the phone number/address of the requestees - the applications main purpose was to match reused phone numbers and/or addresses for potential 'food request fraud'. The project was fun, but as a voluntary community service they could only pay in petrol and food vouchers.</p>

<p><strong>What languages have you used since you started programming?</strong></p>
<p>BASIC, 6502 assembler, 68000 assembler, Superbase, Turbo C, Turbo Pascal, Quick Basic 7 (woo compiled BASIC!), Visual Basic, Delphi, Python, Java, Dolphin Smalltalk, Javascript, HTML, CSS, XML, XSL.</p>


<p><strong>If you knew then what you know now, would you have started programming?</strong></p>
<p>Most definitely, but I would taken more of an interest in non-code areas of development such as project management, requirements gathering and people mongering.</p>

<p><strong>If there is one thing you learned along the way that you would tell new developers, what would it be?</strong></p>
<p>Experiment, and don't be afraid to break shit along the way - learning to fix things is often the best way to learn.</p>

<p><strong>What&#8217;s the most fun you&#8217;ve ever had&#8230; programming?</strong></p>
<p>There's three distinct "fun" moments stuck in my memory, the first was spending time with dad and my brother typing in line after line of HEX code from magazines to get new games on the machine. I remember dad spending night after night typing in a new game for me for my birthday, only to find that the game didn't work and that the next months magazine had a "FIX" for the typo's in the previous issue (my first patch - I remember it well).</p>

<p>The next chapter in "fun" was back in the days of the Amiga scene, all night coding sessions messing with graphics and sound - Paula, Agnus, Denise, and The Copper - the fact that Agnus was replaced by the Fat Agnus was prophetic of a lot of <a href="http://www.talios.com/the_downside_of_a_career_in_computing.htm">'people' in computing</a>'.</p>
<p>Most recently that fun returned with the discovery <a href="http://www.talios.com/index.cfm?search=smalltalk">Smalltalk</a> - not so much the language itself, but the environment as a whole - the ability to change code on the fly and re-run live code opened my eyes to an entirely new way of coding. Sadly, it's now spoilt me in my day job :(</p>

<p><strong>Now, let&#8217;s tag someone else:</strong></p>

<p>So lets tag some folk: <a href="http://phirate.com/">Richard Clark</a>, <a href="http://www.cincomsmalltalk.com/userblogs/mls/blogView">Michael Lucas-Smith</a>, <a href="http://beust.com/weblog/">Cedric Beust</a></p>

<div class="posttagsblock"><a href="http://technorati.com/tag/development" rel="tag">development</a>, <a href="http://technorati.com/tag/smalltalk" rel="tag">smalltalk</a></div><p><a href='http://www.talios.com/console/comments/popup/?f=how%5Fi%5Fgot%5Fstarted%5Fin%5Fsoftware%5Fdevelopment'>Leave Comment</a></p>]]></description></item><item><title>Automated acceptance testing in plain english</title><guid isPermaLink="true">http://www.talios.com/automated_acceptance_testing_in_plain_english.htm</guid><link>http://www.talios.com/automated_acceptance_testing_in_plain_english.htm</link><pubDate>Sat, 12 Jul 2008 11:20:00 GMT</pubDate><comments>http://www.talios.com/console/comments/popup/?f=automated%5Facceptance%5Ftesting%5Fin%5Fplain%5Fenglish</comments><dc:creator>Mark Derricutt</dc:creator><description><![CDATA[<p>Earlier in the day I led a session on using <a href="http://www.concordion.org">Concordion</a> for Automated Acceptance Testing at <a href="http://bca.geek.nz">BarCamp Auckland 2</a>:</p>
<div style="width:425px;text-align:left" id="__ss_509883">
  <object style="margin:0px" width="425" height="355">
    <param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=baacamp-concordion-1215816579303580-9" />
    <param name="allowFullScreen" value="true" />
    <param name="allowScriptAccess" value="always" />
    <embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=baacamp-concordion-1215816579303580-9" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355" />
  </object>

  <div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">
    <a href="http://www.slideshare.net/?src=embed"><img src="http://static.slideshare.net/swf/logo_embd.png" style="border:0px none;margin-bottom:-5px" alt="SlideShare" /></a> | <a href="http://www.slideshare.net/talios/automated-acceptance-testing-in-plain-english?src=embed" title="View Automated Acceptance Testing In Plain English on SlideShare">View</a> | <a href="http://www.slideshare.net/upload?src=embed">Upload your own</a>
  </div>
</div>
<p>The session was well received and generated some interesting discussions, thanks for attending ;-)</p>

<div class="posttagsblock"><a href="http://technorati.com/tag/auckland" rel="tag">auckland</a>, <a href="http://technorati.com/tag/barcamp" rel="tag">barcamp</a>, <a href="http://technorati.com/tag/bca2" rel="tag">bca2</a>, <a href="http://technorati.com/tag/development" rel="tag">development</a>, <a href="http://technorati.com/tag/java" rel="tag">java</a>, <a href="http://technorati.com/tag/testing" rel="tag">testing</a></div><p><a href='http://www.talios.com/console/comments/popup/?f=automated%5Facceptance%5Ftesting%5Fin%5Fplain%5Fenglish'>Leave Comment</a></p><p>Related Entries:</p><ul><li><a href='http://www.talios.com/citconf_2008.htm'>CITCONF 2008</a></li><li><a href='http://www.talios.com/osgi_based_integration_testing_with_testng_and_apache_felix.htm'>OSGi based Integration testing with TestNG and Apache Felix</a></li><li><a href='http://www.talios.com/computerworld__half_a_million_dollars_spent_on_scrapped_it_.htm'>Computerworld - Half a million dollars spent on scrapped IT project</a></li><li><a href='http://www.talios.com/combining_test_regression_failure_reports.htm'>Combining Test Regression Failure Reports</a></li><li><a href='http://www.talios.com/writing_fine_grained_test_requirements_with_expressions.htm'>Writing fine grained test requirements with expressions</a></li><li><a href='http://www.talios.com/writing_your_last_forloop__beautiful_code.htm'>Writing Your Last For-Loop - Beautiful Code</a></li><li><a href='http://www.talios.com/leopard_and_pair_programming_for_the_win.htm'>Leopard and Pair Programming for the win...</a></li><li><a href='http://www.talios.com/intellij_idea_7_with_testng_support_released.htm'>IntelliJ IDEA 7 with TestNG Support Released</a></li><li><a href='http://www.talios.com/otaku_cedrics_weblog_next_generation_testing_book_now_a.htm'>Otaku, Cedric's weblog: "Next Generation Testing" book now available for preorder</a></li><li><a href='http://www.talios.com/citcon_2007_sydney.htm'>CITCON 2007 Sydney</a></li></ul>]]></description><category>agile</category><category>testing</category><category>bca2</category></item><item><title>The downside of a career in computing</title><guid isPermaLink="true">http://www.talios.com/the_downside_of_a_career_in_computing.htm</guid><link>http://www.talios.com/the_downside_of_a_career_in_computing.htm</link><pubDate>Mon, 07 Jul 2008 12:00:00 GMT</pubDate><comments>http://www.talios.com/console/comments/popup/?f=the%5Fdownside%5Fof%5Fa%5Fcareer%5Fin%5Fcomputing</comments><dc:creator>Mark Derricutt</dc:creator><description><![CDATA[<p>From this (~15 years ago):</p>
<p><a href="http://www.flickr.com/photos/talios/292621507/" title="0003 by talios, on Flickr"><img src="http://farm1.static.flickr.com/106/292621507_0500b294ef_m.jpg" width="240" height="180" alt="0003" /></a></p>
<p>to this:</p>
<p><a href="http://www.flickr.com/photos/pauljulius/2643188484/" title="0003 by talios, on Flickr"><img src="http://farm4.static.flickr.com/3045/2643188484_216f741723_m.jpg" width="240" height="180" alt="0003" /></a></p>
<p>Less hair, more me.</p>

<div class="posttagsblock"><a href="http://technorati.com/tag/derricutt" rel="tag">derricutt</a></div><p><a href='http://www.talios.com/console/comments/popup/?f=the%5Fdownside%5Fof%5Fa%5Fcareer%5Fin%5Fcomputing'>Leave Comment</a></p><p>Related Entries:</p><ul><li><a href='http://www.talios.com/lakes_of_new_zealand.htm'>Lakes of New Zealand</a></li><li><a href='http://www.talios.com/online_photo_piracy_ok.htm'>Online Photo Piracy ok?</a></li><li><a href='http://www.talios.com/whangarei_roadtrip.htm'>Whangarei Roadtrip</a></li><li><a href='http://www.talios.com/weekend_trip_to_paihia.htm'>Weekend Trip to Paihia</a></li></ul>]]></description><category>flickr</category></item><item><title>CITCON 2008 - Open Spaces Conference Planning</title><guid isPermaLink="true">http://www.talios.com/citcon_2008__open_spaces_conference_planning.htm</guid><link>http://www.talios.com/citcon_2008__open_spaces_conference_planning.htm</link><pubDate>Mon, 30 Jun 2008 20:44:00 GMT</pubDate><comments>http://www.talios.com/console/comments/popup/?f=citcon%5F2008%5F%5Fopen%5Fspaces%5Fconference%5Fplanning</comments><dc:creator>Mark Derricutt</dc:creator><description><![CDATA[<p>Once again I'm continually amazed at how well the whole "open spaces" conference concept works, on Friday night we all gathered at the Jasper Hotel and pitched our topic ideas and questions and spent the next two hours beavering away with refactoring the timetable:</p>
<p style="text-align: center;"><a href="http://www.flickr.com/photos/talios/2623497679/" title="CITCON Asia/Pacific 2008 by talios, on Flickr"><img src="http://farm4.static.flickr.com/3175/2623497679_61be6ff7eb_m.jpg" width="240" height="180" alt="CITCON Asia/Pacific 2008" /></a>&nbsp;
<a href="http://www.flickr.com/photos/talios/2623603249/" title="CITCON Asia/Pacific 2008 by talios, on Flickr"><img src="http://farm4.static.flickr.com/3107/2623603249_47ce4af624_m.jpg" width="240" height="180" alt="CITCON Asia/Pacific 2008" /></a></p>
<p>In true continuous integration form, not even starting the conference Saturday morning kept the timetable from being changed and reworked during the day - with sessions continually being bumped, combined, or moved around based on peoples feedback of the just completed sessions:</p>
<p>Having been through four Open Space style conferences/events (two CITCON's, Kiwifoo, and Baacamp) and the upcoming <a href="http://bca.geek.nz/">Baacamp 2</a> I'm firmly in love with this style of event over the more traditional conference.</p>

<div class="posttagsblock"><a href="http://technorati.com/tag/citcon" rel="tag">citcon</a>, <a href="http://technorati.com/tag/conference" rel="tag">conference</a>, <a href="http://technorati.com/tag/development" rel="tag">development</a></div><p><a href='http://www.talios.com/console/comments/popup/?f=citcon%5F2008%5F%5Fopen%5Fspaces%5Fconference%5Fplanning'>Leave Comment</a></p><p>Related Entries:</p><ul><li><a href='http://www.talios.com/citcon_2008__somerset_on_elizabeth.htm'>CITCON 2008 - Somerset on Elizabeth</a></li><li><a href='http://www.talios.com/citcon_asiapacific_2008_announced.htm'>CITCON Asia-Pacific 2008 Announced</a></li><li><a href='http://www.talios.com/the_quest.htm'>The Quest</a></li><li><a href='http://www.talios.com/home_from_citcon2007.htm'>Home from CITCON2007</a></li><li><a href='http://www.talios.com/developer_testing_citcon_sydney_registration_at_100.htm'>Developer Testing: CITCON Sydney Registration At 100!</a></li><li><a href='http://www.talios.com/citcon_2007_sydney.htm'>CITCON 2007 Sydney</a></li><li><a href='http://www.talios.com/withdrawn_and_disconnected.htm'>Withdrawn and disconnected</a></li></ul>]]></description><category>citcon</category><category>conference</category></item><item><title>If Smalltalk is dead - why is it my most read post?</title><guid isPermaLink="true">http://www.talios.com/if_smalltalk_is_dead__why_is_it_my_most_read_post.htm</guid><link>http://www.talios.com/if_smalltalk_is_dead__why_is_it_my_most_read_post.htm</link><pubDate>Mon, 30 Jun 2008 12:38:00 GMT</pubDate><comments>http://www.talios.com/console/comments/popup/?f=if%5Fsmalltalk%5Fis%5Fdead%5F%5Fwhy%5Fis%5Fit%5Fmy%5Fmost%5Fread%5Fpost</comments><dc:creator>Mark Derricutt</dc:creator><description><![CDATA[<p>Somehow I topped 2gb of traffic on the blog this month so I went in search of my stats, unfortunately I found nothing which highlighted any untoward usage, but I did find that my most read blog post is for that <a href="http://www.talios.com/small_sockets__posting_to_usenet_in_dolphin_smalltalk.htm">dead language Smalltalk</a>:</p>
<p style="text-align: center;"><a href="http://www.flickr.com/photos/talios/2624724320/" title="Small talk - big stats by talios, on Flickr"><img src="http://farm4.static.flickr.com/3273/2624724320_80dffe96ff_o.png" width="399" height="411" alt="Small talk - big stats" /></a></p>
<p>If Smalltalk is dead, why is it so popular?</p>

<div class="posttagsblock"><a href="http://technorati.com/tag/development" rel="tag">development</a>, <a href="http://technorati.com/tag/smalltalk" rel="tag">smalltalk</a></div><p><a href='http://www.talios.com/console/comments/popup/?f=if%5Fsmalltalk%5Fis%5Fdead%5F%5Fwhy%5Fis%5Fit%5Fmy%5Fmost%5Fread%5Fpost'>Leave Comment</a></p><p>Related Entries:</p><ul><li><a href='http://www.talios.com/a_little_head_trauma_returning_none_is_evil.htm'>A Little Head Trauma...: Returning None is Evil</a></li><li><a href='http://www.talios.com/xml_withstyle_is_no_more.htm'>XML WithStyle is no more...</a></li><li><a href='http://www.talios.com/java_can_be_agile_but.htm'>Java can be agile, but...</a></li><li><a href='http://www.talios.com/the_power_of_smalltalk_ides.htm'>The Power of Smalltalk IDE's</a></li><li><a href='http://www.talios.com/dolphin_smalltalk_6_now_available.htm'>Dolphin Smalltalk 6 now available!</a></li><li><a href='http://www.talios.com/dynamicjava.htm'>Sick of the caught/uncaught exception arguments?  Try caught/uncauch casting with RuntimeObject's for a change...</a></li><li><a href='http://www.talios.com/a_ruby_rule_engine.htm'>A Ruby rule engine</a></li><li><a href='http://www.talios.com/a_squeaky_rule_engine.htm'>A squeaky rule engine</a></li></ul>]]></description><category>smalltalk</category></item><item><title>CITCON 2008 - Somerset on Elizabeth</title><guid isPermaLink="true">http://www.talios.com/citcon_2008__somerset_on_elizabeth.htm</guid><link>http://www.talios.com/citcon_2008__somerset_on_elizabeth.htm</link><pubDate>Mon, 30 Jun 2008 10:43:00 GMT</pubDate><comments>http://www.talios.com/console/comments/popup/?f=citcon%5F2008%5F%5Fsomerset%5Fon%5Felizabeth</comments><dc:creator>Mark Derricutt</dc:creator><description><![CDATA[<p style="text-align: center;"><a href="http://www.flickr.com/photos/talios/2612502705/" title="Children of Bodom by talios, on Flickr"><img src="http://farm4.static.flickr.com/3134/2612502705_1538f9d5db.jpg" width="500" height="281" alt="Children of Bodom" /></a></p>
<p>Following a kick arse show from Finland's <a href="http://www.cobhc.com/">Children of Bodom</a> I headed off over the ditch for this years <a href="http://www.citconf.com/melbourne2008/">Continuous Integration and Testing (CITCON)</a> conference in Melbourne. I ended up staying at the <a href="http://www.somerset.com/en/australia/melbourne/somerset_on_elizabeth.html">Somerset on Elizabeth St</a>, a short 4-5 block walk to the conference location ( which ended up being the <a href="http://www.jasperhotel.com.au/">Jasper Hotel</a> ). Both venues easily exceeded my expectations:</p>
<p style="text-align: center;"><a href="http://www.flickr.com/photos/talios/2624300280/" title="CITCON Asia/Pacific 2008 by talios, on Flickr"><img src="http://farm4.static.flickr.com/3089/2624300280_2a52e1c546.jpg" width="500" height="281" alt="CITCON Asia/Pacific 2008" /></a></p>
<p style="text-align: center;"><a href="http://www.flickr.com/photos/talios/2623478087/" title="CITCON Asia/Pacific 2008 by talios, on Flickr"><img src="http://farm4.static.flickr.com/3066/2623478087_8d3e9cdf2c.jpg" width="500" height="281" alt="CITCON Asia/Pacific 2008" /></a></p>
<p><a href="http://www.flickr.com/photos/talios/2624304592/" title="CITCON Asia/Pacific 2008 by talios, on Flickr"></a></p>
<p>Whilst I never used either of the flat panel TVs in the lounge/bedroom, this was the perfect place to crash at 2am after the continuous drinking sessions after the conference.</p>

<div class="posttagsblock"><a href="http://technorati.com/tag/australia" rel="tag">australia</a>, <a href="http://technorati.com/tag/citcon" rel="tag">citcon</a>, <a href="http://technorati.com/tag/development" rel="tag">development</a></div><p><a href='http://www.talios.com/console/comments/popup/?f=citcon%5F2008%5F%5Fsomerset%5Fon%5Felizabeth'>Leave Comment</a></p><p>Related Entries:</p><ul><li><a href='http://www.talios.com/citcon_2008__open_spaces_conference_planning.htm'>CITCON 2008 - Open Spaces Conference Planning</a></li><li><a href='http://www.talios.com/citcon_asiapacific_2008_announced.htm'>CITCON Asia-Pacific 2008 Announced</a></li><li><a href='http://www.talios.com/the_quest.htm'>The Quest</a></li><li><a href='http://www.talios.com/home_from_citcon2007.htm'>Home from CITCON2007</a></li><li><a href='http://www.talios.com/developer_testing_citcon_sydney_registration_at_100.htm'>Developer Testing: CITCON Sydney Registration At 100!</a></li><li><a href='http://www.talios.com/citcon_2007_sydney.htm'>CITCON 2007 Sydney</a></li></ul>]]></description><category>citcon</category></item><item><title>Tech only feed?</title><guid isPermaLink="true">http://www.talios.com/tech_only_feed.htm</guid><link>http://www.talios.com/tech_only_feed.htm</link><pubDate>Mon, 30 Jun 2008 05:27:00 GMT</pubDate><comments>http://www.talios.com/console/comments/popup/?f=tech%5Fonly%5Ffeed</comments><dc:creator>Mark Derricutt</dc:creator><description><![CDATA[<p>A few people at CITCON asked me about a tech only feed for the blog which filtered out all the non-tech posts (i.e. my endless iTunes playlists <g>), well - there is such a feed:</p>

<ul>
<li>RSS 2.0 - <a href="http://www.talios.com/read/technology.rss">http://www.talios.com/read/technology.rss</a>
<li>ATOM 1.0 - <a href="http://www.talios.com/read/technology.rss?format=atom">http://www.talios.com/read/technology.rss?format=atom</a>
</ul>

<p>Enjoy.</p><p><a href='http://www.talios.com/console/comments/popup/?f=tech%5Fonly%5Ffeed'>Leave Comment</a></p>]]></description></item><item><title>Is this why Twitter-IM doesnt scale?</title><guid isPermaLink="true">http://www.talios.com/is_this_why_twitterim_doesnt_scale.htm</guid><link>http://www.talios.com/is_this_why_twitterim_doesnt_scale.htm</link><pubDate>Thu, 12 Jun 2008 11:37:00 GMT</pubDate><comments>http://www.talios.com/console/comments/popup/?f=is%5Fthis%5Fwhy%5Ftwitterim%5Fdoesnt%5Fscale</comments><dc:creator>Mark Derricutt</dc:creator><description><![CDATA[<p>It's been said that twitters IM gateway has been one of the causes for their scale issues, and I just logged into one my older gmail accounts I only use for IM (and twitter-im in particular):</p>
<p style="text-align: center"><img src="http://files.blog-city.com/files/aa/16275/p/f/twitterimstupid.png" /></p>
<p>What I found greeting me was 3-4 messages with "off line IM messages" from twitter - 795 lines in one, 1675 in another, and a few other.</p>
<p>Could it be that a simple scaling technique twitter could use is to follow a users jabber presence and NOT send them thousands of off line messages? I had actually thought they already did, but I guess not. Surely only sending IM messages when the user is online would lower their resource consumption tremendously.</p>

<div class="posttagsblock"><a href="http://technorati.com/tag/web2.0" rel="tag">web2.0</a></div><p><a href='http://www.talios.com/console/comments/popup/?f=is%5Fthis%5Fwhy%5Ftwitterim%5Fdoesnt%5Fscale'>Leave Comment</a></p><p>Related Entries:</p><ul><li><a href='http://www.talios.com/messenger_9_gtalk_integration_messenger_api_new_client_fo.htm'>Messenger 9, GTalk integration, Messenger API, new client for Mac OS X - news unveiled at Georgia Tech presentation (whew) - LiveSide - News blog</a></li><li><a href='http://www.talios.com/twitter_me_this.htm'>Twitter me this...</a></li><li><a href='http://www.talios.com/myjabbernet_transports_offline.htm'>myjabber.net transports offline...</a></li><li><a href='http://www.talios.com/peter_millard.htm'>Peter Millard</a></li><li><a href='http://www.talios.com/instant_mobile_messaging__pull_me_push_me_make_me_beep.htm'>Instant Mobile Messaging - Pull Me Push Me Make Me Beep</a></li><li><a href='http://www.talios.com/google_talk.htm'>Google Talk...</a></li></ul>]]></description><category>twitter</category><category>jabber</category><category>scale</category><category>fail</category></item><item><title>Prototyped PostgreSQL database tables</title><guid isPermaLink="true">http://www.talios.com/prototyped_postgresql_database_tables.htm</guid><link>http://www.talios.com/prototyped_postgresql_database_tables.htm</link><pubDate>Tue, 10 Jun 2008 03:45:00 GMT</pubDate><comments>http://www.talios.com/console/comments/popup/?f=prototyped%5Fpostgresql%5Fdatabase%5Ftables</comments><dc:creator>Mark Derricutt</dc:creator><description><![CDATA[<p>Whilst setting up our database to work with <a href="http://www.jboss.org/envers">JBoss Envers</a> - a new project for automating a version history for JPA/Hibernate entities I learnt of a neat PostgreSQL DDL modifer: LIKE.</p>

<p>For awhile now I've known about PostgreSQL's ability to have inherited tables, but for envers I really wanted a clone of the table schema, but without any physical ties to the original table - LIKE provides that nicely:</p>

<pre>
CREATE TABLE user_login (
    user_login_id integer NOT NULL,
    user_name character varying(50) NOT NULL,
    current_password character varying(60),
    password_hint character varying(255),
);

CREATE TEMPORARY TABLE prototype_versions (
    _revision integer not null,
    _revision_type integer
);

CREATE TABLE user_login_versions (
    LIKE prototype_versions,
    LIKE user_login,
    UNIQUE(user_login_id, _revision)
);
</pre>

<p>Firstly we create our user_login table as normal, then we create a temporary table for our common version details, the finally create our versioned table which is LIKE the two original tables.</p>

<p>This certainly makes things nice and clean.  Now if only the tables remembered their LIKEness so that any ALTER TABLE's on the original table were automatically mirrored (I believe inherited tables will do this, but I don't want data from the versions table visible to the parent).</p><p><a href='http://www.talios.com/console/comments/popup/?f=prototyped%5Fpostgresql%5Fdatabase%5Ftables'>Leave Comment</a></p><p>Related Entries:</p><ul><li><a href='http://www.talios.com/java_6_breaks_your_connections.htm'>Java 6 breaks your Connections</a></li><li><a href='http://www.talios.com/databaseng__migrations_revisited.htm'>DatabaseNG - Migrations Revisited</a></li><li><a href='http://www.talios.com/jinspired_dead.htm'>JInspired dead?</a></li><li><a href='http://www.talios.com/simple_database_migration_processing.htm'>Database Migration With Spring</a></li><li><a href='http://www.talios.com/database_hibernate_and_spring_testing_with_testng.htm'>Database, Hibernate, and Spring Testing with TestNG</a></li><li><a href='http://www.talios.com/ludicrous_database_idea_of_the_day_branching_tagging_and_dif.htm'>Ludicrous Database Idea of the Day: Branching, Tagging, and Diffs</a></li></ul>]]></description><category>sql</category><category>postgresql</category></item><item><title>iTunes pricing is a rip-off</title><guid isPermaLink="true">http://www.talios.com/itunes_pricing_is_a_ripoff.htm</guid><link>http://www.talios.com/itunes_pricing_is_a_ripoff.htm</link><pubDate>Sat, 07 Jun 2008 13:36:00 GMT</pubDate><comments>http://www.talios.com/console/comments/popup/?f=itunes%5Fpricing%5Fis%5Fa%5Fripoff</comments><dc:creator>Mark Derricutt</dc:creator><description><![CDATA[<div style="text-align: center;">
  <br />
  <a href="http://www.flickr.com/photos/talios/2558538330/" title="iTunes rip-off by talios, on Flickr"><img src="http://farm4.static.flickr.com/3263/2558538330_dfccf007ab.jpg" width="500" height="52" alt="iTunes rip-off" /></a><br />
</div>
<p>NZ$1.79 for a <b>four second</b> 'untitled' track.... but hey - its DRM free and a high bit-rate mp3... and based on the sample on the <a href="http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?id=259318280&amp;s=143461">iTunes music store</a> it's pure silence...</p>

<div class="posttagsblock"><a href="http://technorati.com/tag/itunes" rel="tag">itunes</a>, <a href="http://technorati.com/tag/music" rel="tag">music</a>, <a href="http://technorati.com/tag/music" rel="tag">music</a></div><p><a href='http://www.talios.com/console/comments/popup/?f=itunes%5Fpricing%5Fis%5Fa%5Fripoff'>Leave Comment</a></p><p>Related Entries:</p><ul><li><a href='http://www.talios.com/the_music_of_2008__week_33.htm'>The Music of 2008 - week 33</a></li><li><a href='http://www.talios.com/the_music_of_2008__week_32.htm'>The Music of 2008 - week 32</a></li><li><a href='http://www.talios.com/the_music_of_2008__week_31.htm'>The Music of 2008 - week 31</a></li><li><a href='http://www.talios.com/the_music_of_2008__week_30_1.htm'>The Music of 2008 - week 30</a></li><li><a href='http://www.talios.com/the_music_of_2008__week_29.htm'>The Music of 2008 - week 29</a></li><li><a href='http://www.talios.com/the_music_of_2008__week_28.htm'>The Music of 2008 - week 28</a></li><li><a href='http://www.talios.com/the_music_of_2008__week_27.htm'>The Music of 2008 - week 27</a></li><li><a href='http://www.talios.com/the_music_of_2008__week_26.htm'>The Music of 2008 - week 26</a></li><li><a href='http://www.talios.com/the_music_of_2008__week_25.htm'>The Music of 2008 - week 25</a></li><li><a href='http://www.talios.com/the_music_of_2008__week_24.htm'>The Music of 2008 - week 24</a></li></ul>]]></description><category>itunes</category><category>music</category></item><item><title>CITCONF 2008</title><guid isPermaLink="true">http://www.talios.com/citconf_2008.htm</guid><link>http://www.talios.com/citconf_2008.htm</link><pubDate>Wed, 04 Jun 2008 11:46:00 GMT</pubDate><comments>http://www.talios.com/console/comments/popup/?f=citconf%5F2008</comments><dc:creator>Mark Derricutt</dc:creator><description><![CDATA[<p>Just booked my flights off to this years <a href="http://citconf.com/melbourne2008/">CITCONF Asia/Pacific</a> in Melbourne. Looking forward to it.</p><p><a href='http://www.talios.com/console/comments/popup/?f=citconf%5F2008'>Leave Comment</a></p><p>Related Entries:</p><ul><li><a href='http://www.talios.com/automated_acceptance_testing_in_plain_english.htm'>Automated acceptance testing in plain english</a></li><li><a href='http://www.talios.com/osgi_based_integration_testing_with_testng_and_apache_felix.htm'>OSGi based Integration testing with TestNG and Apache Felix</a></li><li><a href='http://www.talios.com/combining_test_regression_failure_reports.htm'>Combining Test Regression Failure Reports</a></li><li><a href='http://www.talios.com/writing_fine_grained_test_requirements_with_expressions.htm'>Writing fine grained test requirements with expressions</a></li><li><a href='http://www.talios.com/writing_your_last_forloop__beautiful_code.htm'>Writing Your Last For-Loop - Beautiful Code</a></li><li><a href='http://www.talios.com/intellij_idea_7_with_testng_support_released.htm'>IntelliJ IDEA 7 with TestNG Support Released</a></li><li><a href='http://www.talios.com/otaku_cedrics_weblog_next_generation_testing_book_now_a.htm'>Otaku, Cedric's weblog: "Next Generation Testing" book now available for preorder</a></li><li><a href='http://www.talios.com/citcon_2007_sydney.htm'>CITCON 2007 Sydney</a></li><li><a href='http://www.talios.com/testng_idea_code_coverage_resupported.htm'>TestNG Idea Code Coverage Resupported</a></li><li><a href='http://www.talios.com/testngj_050_for_intellij_idea_released.htm'>TestNG-J 0.5.0 for IntelliJ IDEA released</a></li></ul>]]></description><category>testing</category></item><item><title>OSGi based Integration testing with TestNG and Apache Felix</title><guid isPermaLink="true">http://www.talios.com/osgi_based_integration_testing_with_testng_and_apache_felix.htm</guid><link>http://www.talios.com/osgi_based_integration_testing_with_testng_and_apache_felix.htm</link><pubDate>Tue, 13 May 2008 10:37:00 GMT</pubDate><comments>http://www.talios.com/console/comments/popup/?f=osgi%5Fbased%5Fintegration%5Ftesting%5Fwith%5Ftestng%5Fand%5Fapache%5Ffelix</comments><dc:creator>Mark Derricutt</dc:creator><description><![CDATA[<p>Over the last month or so I've been getting my feet wet with a new job, new team mates, and new technology - with the majority of my time getting my head around OSGi and our custom OSGi orientated build tool. Now that I've settled in and starting to see my code take shape it's starting to irk me that I have ZERO tests in any of the code I've written - everything has been a developed under a cycle of code, build, update, test, repeat whilst single stepping through the code in the debugger.</p>
<p>Initially I was 'ok' with the lack of tests as I was still experimenting inside the debugger, interactively hacking my way through foreign code.  However now I need to move on from the hacking and get something a little more respectable along with some reproducible tests.</p><p>However, now I have a series of OSGi bundles which are exporting services, listening and interacting with other bundles, and doing all manner of things which crossed the boundary of a single bundle - this means I'm needing integration tests more than unit tests.</p>
<p>After thinking up various interesting, but overkill ways of OSGi-enabling TestNG to provide some nice integration testing I settled on the simplest approach (which also looks to be the best, and most flexible so far): <a href="http://felix.apache.org/site/launching-and-embedding-apache-felix.html">embed felix</a> - we already had a custom Felix launcher so this was very much similar (and so simple that it's almost not worth blogging about).</p>
<p>The basic test class simply starts and stops an embedded felix instance:</p>
<pre>
public class FelixTest {
  private Felix m_felix;

  @BeforeTest
  public void setupFelix() throws IOException, BundleException {
    Map configMap = new StringMap(false);
    configMap.put(Constants.FRAMEWORK_SYSTEMPACKAGES,
      "org.osgi.framework; version=1.3.0," +
      "org.osgi.service.packageadmin; version=1.2.0," +
      "org.osgi.service.startlevel; version=1.0.0," +
      "org.osgi.service.url; version=1.0.0");

    configMap.put(BundleCache.CACHE_PROFILE_PROP, "test");
    File file = File.createTempFile("osgi", "testng");
    file.delete();
    file.mkdir();
    file.deleteOnExit();

    configMap.put(BundleCache.CACHE_PROFILE_DIR_PROP, file.getPath());
    // Create an instance of the framework.
    m_felix = new Felix(configMap, new ArrayList());
    m_felix.start();
  }

  @AfterTest
  public void turnOffFelix() throws BundleException {
    m_felix.stop();
  }
}
</pre>

<p>This simply starts the Felix OSGi container, with a fresh/temp profile directory. Now comes the actual test:</p>

<pre>
  @Test
  public void testSomethingWithFelix() throws BundleException, InterruptedException {
    BundleContext bundleContext = m_felix.getBundleContext();

    bundleContext
      .installBundle("file:///Users/amrk/temp/osgi-test/test-rest/target/test-rest-1.0-SNAPSHOT.jar")
      .start();
    bundleContext
      .installBundle("file:///Users/amrk/temp/osgi-test/test-client/target/test-client-1.0-SNAPSHOT.jar")
      .start();

    Bundle[] bundles = bundleContext.getBundles();
    for (Bundle bundle : bundles) {
      assert bungle.getState() == Bundle.ACTIVE
        : "Bundle " + bundle.getSymbolicName() + " is not started.";
    }

    ServiceReference sr = bundleContext.getServiceReference(MyService.class.getName());
    if (sr != null) {
      Object myService = bundleContext.getService(sr);
      if (myService != null) {
        method("run").in(myService).invoke();
      }
    } else {
      assert false: "No Service Reference for MyService";
    }
  }
</pre>
<p>The test starts off by installing and starting two bundles from the file system then checks they all have the ACTIVE state (meaning they installed, resolved, and started running without problem). The test then looks up a service which should be exported from the test-rest bundle, then via reflection (using <a href="http://fest.easytesting.org/reflect/wiki">FEST-Reflect</a>) executes the service. (<i>reflection is used here as 'myService' service is an instance of MyService from the OSGi bundles class loader and not from the tests class loader</i>.)</p>
<p>Now I have a good base for writing OSGi based integration tests that easily be extended with <a href="http://www.talios.com/databaseng__migrations_revisited.htm">database creations/migrations</a> and anything else that may come to mind.</p><p><a href='http://www.talios.com/console/comments/popup/?f=osgi%5Fbased%5Fintegration%5Ftesting%5Fwith%5Ftestng%5Fand%5Fapache%5Ffelix'>Leave Comment</a></p><p>Related Entries:</p><ul><li><a href='http://www.talios.com/google_xml_pages.htm'>Google XML Pages</a></li><li><a href='http://www.talios.com/simple_time_tracker_redux.htm'>Simple Time Tracker redux</a></li><li><a href='http://www.talios.com/automated_acceptance_testing_in_plain_english.htm'>Automated acceptance testing in plain english</a></li><li><a href='http://www.talios.com/citconf_2008.htm'>CITCONF 2008</a></li><li><a href='http://www.talios.com/osgi_is_shiny.htm'>OSGi is Shiny</a></li><li><a href='http://www.talios.com/java_6_now_available_for_apple_macs.htm'>Java 6 now available for Apple Mac's</a></li><li><a href='http://www.talios.com/wanted_more_control_over_jdk_annotation_targets.htm'>WANTED: More control over JDK Annotation Targets</a></li><li><a href='http://www.talios.com/envy_code_r_pr7_vs_pr6__preview_thoughts.htm'>Envy Code R PR7 vs PR6 - Preview thoughts</a></li><li><a href='http://www.talios.com/job_search_20.htm'>Job Search 2.0</a></li><li><a href='http://www.talios.com/java_se_6_developer_preview_9_release_notes.htm'>Java SE 6 Developer Preview 9 Release Notes</a></li></ul>]]></description><category>osgi</category><category>testng</category><category>java</category><category>testing</category><category>apache</category></item><item><title>New INBOX:0 Strategy</title><guid isPermaLink="true">http://www.talios.com/new_inbox0_strategy.htm</guid><link>http://www.talios.com/new_inbox0_strategy.htm</link><pubDate>Mon, 12 May 2008 04:52:00 GMT</pubDate><comments>http://www.talios.com/console/comments/popup/?f=new%5Finbox0%5Fstrategy</comments><dc:creator>Mark Derricutt</dc:creator><description><![CDATA[<p>For the last month or so I've been able to sit myself at INBOX:0 quite consistently and have been experimenting with various ways of keeping it that way - I think I've got a decent working setup now which takes advantage of a change in GMail's URL handling (I believe it always worked, only now the search urls are exposed to the browser: https://mail.google.com/a/DOMAIN/#search/is%3Aunread).</p>

<p>So I now have Firefox configured to open 4 GMail tabs on start up with the following searches:</p>

<ul>
<li>to:me in:inbox is:unread</li>
<li>to:me is:unread</li>
<li>in:inbox is:unread</li>
<li>is:unread</li>
</ul>

<p>The four searches give me easy access to direct personal email, personal email that's been filed away for less importance, anything else unread in the INBOX, and finally - anything anywhere that's unread.  It works like a 4-step program, and so far seems to work quite well.</p><p><a href='http://www.talios.com/console/comments/popup/?f=new%5Finbox0%5Fstrategy'>Leave Comment</a></p><p>Related Entries:</p><ul><li><a href='http://www.talios.com/what_colour_is_your_toolbox.htm'>What colour is your toolbox?</a></li><li><a href='http://www.talios.com/myjabbernet_transports_offline.htm'>myjabber.net transports offline...</a></li><li><a href='http://www.talios.com/google_talk.htm'>Google Talk...</a></li></ul>]]></description><category>gmail</category><category>inbox</category><category>productivity</category></item><item><title>OSGi is Shiny</title><guid isPermaLink="true">http://www.talios.com/osgi_is_shiny.htm</guid><link>http://www.talios.com/osgi_is_shiny.htm</link><pubDate>Wed, 07 May 2008 11:42:00 GMT</pubDate><comments>http://www.talios.com/console/comments/popup/?f=osgi%5Fis%5Fshiny</comments><dc:creator>Mark Derricutt</dc:creator><description><![CDATA[<p>At tonight's <a href="http://java.meetup.com/162/calendar/7702965/">JavaCom</a> meeting I gave a short lightening talk on OSGi - I was caught a little unprepared and hadn't realized the meeting was tonight so it was a bit rushed together - still the presentation went well - I still need to work more on slowing down, and not jumping ahead of my slides:</p>
  <div style="width:425px; text-align:left" id="__ss_392112">
    <br />
    <object style="margin:0px" width="425" height="355">
      <param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=osgi-is-shiny-1210156931275145-8" />
      <param name="allowFullScreen" value="true" />
      <param name="allowScriptAccess" value="always" />
      <br />
      <embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=osgi-is-shiny-1210156931275145-8" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355" /><br />
    </object><br />

    <div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">
      <br />
      <a href="http://www.slideshare.net/?src=embed"><img src="http://static.slideshare.net/swf/logo_embd.png" style="border:0px none;margin-bottom:-5px" alt="SlideShare" /></a> | <a href="http://www.slideshare.net/talios/osgi-is-shiny?src=embed" title="View 'Osgi Is Shiny' on SlideShare">View</a> | <a href="http://www.slideshare.net/upload?src=embed">Upload your own</a>
    </div>
  </div>
<p>As with the presentation itself, seeing some code actually run is more interesting than mere slides, so I recorded a <a href="http://screencast.com/t/IbZ7o0AYo">short screen cast</a> showing the two small bundles in operation.</p>
<p>It wasn't a big turn out tonight, but it was still a good night out.</p>

<div class="posttagsblock"><a href="http://technorati.com/tag/java" rel="tag">java</a>, <a href="http://technorati.com/tag/javacom" rel="tag">javacom</a>, <a href="http://technorati.com/tag/maven" rel="tag">maven</a></div><p><a href='http://www.talios.com/console/comments/popup/?f=osgi%5Fis%5Fshiny'>Leave Comment</a></p><p>Related Entries:</p><ul><li><a href='http://www.talios.com/google_xml_pages.htm'>Google XML Pages</a></li><li><a href='http://www.talios.com/osgi_based_integration_testing_with_testng_and_apache_felix.htm'>OSGi based Integration testing with TestNG and Apache Felix</a></li><li><a href='http://www.talios.com/java_6_now_available_for_apple_macs.htm'>Java 6 now available for Apple Mac's</a></li><li><a href='http://www.talios.com/wanted_more_control_over_jdk_annotation_targets.htm'>WANTED: More control over JDK Annotation Targets</a></li><li><a href='http://www.talios.com/envy_code_r_pr7_vs_pr6__preview_thoughts.htm'>Envy Code R PR7 vs PR6 - Preview thoughts</a></li><li><a href='http://www.talios.com/job_search_20.htm'>Job Search 2.0</a></li><li><a href='http://www.talios.com/java_se_6_developer_preview_9_release_notes.htm'>Java SE 6 Developer Preview 9 Release Notes</a></li><li><a href='http://www.talios.com/embedded_resin_for_testing.htm'>Embedded Resin for Testing</a></li><li><a href='http://www.talios.com/integrating_facebook_with_wicket.htm'>Integrating Facebook with Wicket</a></li><li><a href='http://www.talios.com/maven_based_deployments.htm'>Maven Based Deployments</a></li></ul>]]></description><category>java</category><category>osgi</category></item><item><title>Java 6 now available for Apple Mac&apos;s</title><guid isPermaLink="true">http://www.talios.com/java_6_now_available_for_apple_macs.htm</guid><link>http://www.talios.com/java_6_now_available_for_apple_macs.htm</link><pubDate>Wed, 30 Apr 2008 05:25:00 GMT</pubDate><comments>http://www.talios.com/console/comments/popup/?f=java%5F6%5Fnow%5Favailable%5Ffor%5Fapple%5Fmacs</comments><dc:creator>Mark Derricutt</dc:creator><description><![CDATA[<p>Apple has finally released Java 6 for OSX:</p>
<blockquote cite="http://www.apple.com/support/downloads/javaformacosx105update1.html">
<p><b>About Java for Mac OS X 10.5 Update 1</b></p>
<p>This Java for Mac OS X 10.5 Update 1 adds Java SE 6 version 1.6.0_05 to your Mac. This update does not replace the existing installation of J2SE 5.0 or change the default version of Java.</p>
<p>&mdash;&nbsp;<a href="http://www.apple.com/support/downloads/javaformacosx105update1.html">Java for Mac OS X 10.5 Update 1</a>
</blockquote>
<p>Let there be rejoicing!</p><p><a href='http://www.talios.com/console/comments/popup/?f=java%5F6%5Fnow%5Favailable%5Ffor%5Fapple%5Fmacs'>Leave Comment</a></p><p>Related Entries:</p><ul><li><a href='http://www.talios.com/google_xml_pages.htm'>Google XML Pages</a></li><li><a href='http://www.talios.com/osgi_based_integration_testing_with_testng_and_apache_felix.htm'>OSGi based Integration testing with TestNG and Apache Felix</a></li><li><a href='http://www.talios.com/osgi_is_shiny.htm'>OSGi is Shiny</a></li><li><a href='http://www.talios.com/wanted_more_control_over_jdk_annotation_targets.htm'>WANTED: More control over JDK Annotation Targets</a></li><li><a href='http://www.talios.com/alpine_idax001.htm'>Alpine IDA-X001</a></li><li><a href='http://www.talios.com/envy_code_r_pr7_vs_pr6__preview_thoughts.htm'>Envy Code R PR7 vs PR6 - Preview thoughts</a></li><li><a href='http://www.talios.com/job_search_20.htm'>Job Search 2.0</a></li><li><a href='http://www.talios.com/java_se_6_developer_preview_9_release_notes.htm'>Java SE 6 Developer Preview 9 Release Notes</a></li><li><a href='http://www.talios.com/embedded_resin_for_testing.htm'>Embedded Resin for Testing</a></li><li><a href='http://www.talios.com/integrating_facebook_with_wicket.htm'>Integrating Facebook with Wicket</a></li></ul>]]></description><category>java</category><category>osx</category><category>apple</category></item></channel></rss>