<?xml version="1.0" encoding="UTF-8"?>
<!--Generated by Squarespace Site Server v5.11.5 (http://www.squarespace.com/) on Fri, 10 Sep 2010 11:41:13 GMT--><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>Journal</title><link>http://www.wayne-robinson.com/journal/</link><description></description><lastBuildDate>Fri, 03 Sep 2010 04:55:15 +0000</lastBuildDate><copyright></copyright><language>en-AU</language><generator>Squarespace Site Server v5.11.5 (http://www.squarespace.com/)</generator><item><title>Task Management</title><category>RTM</category><category>products</category><dc:creator>Wayne Robinson</dc:creator><pubDate>Fri, 03 Sep 2010 04:49:36 +0000</pubDate><link>http://www.wayne-robinson.com/journal/2010/9/3/task-management.html</link><guid isPermaLink="false">63827:549828:8758609</guid><description><![CDATA[<p>OK, after playing a little more I have decided to try Remember the Milk as suggested by Rohan and others.</p>
<p>Likes:</p>
<p>
<ul>
<li>Fast, especially for non-Australian servers</li>
<li>Quick add shortcuts cool</li>
</ul>
</p>
<p>Dislikes:</p>
<p>
<ul>
<li>Ugly (in my opinion) with unintuitive navigation in the iPhone app.</li>
<li>No ability to upload and attach files to tasks (I haven't seen this anywhere else either unfortunately).</li>
</ul>
</p>]]></description><wfw:commentRss>http://www.wayne-robinson.com/journal/rss-comments-entry-8758609.xml</wfw:commentRss></item><item><title>iTunes 10</title><category>Apple</category><category>iTunes</category><category>products</category><dc:creator>Wayne Robinson</dc:creator><pubDate>Thu, 02 Sep 2010 08:10:26 +0000</pubDate><link>http://www.wayne-robinson.com/journal/2010/9/2/itunes-10.html</link><guid isPermaLink="false">63827:549828:8749377</guid><description><![CDATA[<p>&ldquo;iTunes 10 feels like an iTunes clone&rdquo;</p>
<p>- Jon Maddox <a class="offsite-link-inline" href="http://twitter.com/maddox/status/22764237287">sums it up nicely</a>.&nbsp;</p>]]></description><wfw:commentRss>http://www.wayne-robinson.com/journal/rss-comments-entry-8749377.xml</wfw:commentRss></item><item><title>Task Management Options</title><category>Mac</category><category>app</category><category>iPad</category><category>iPhone</category><category>personal</category><category>task management</category><dc:creator>Wayne Robinson</dc:creator><pubDate>Thu, 02 Sep 2010 05:56:00 +0000</pubDate><link>http://www.wayne-robinson.com/journal/2010/9/2/task-management-options.html</link><guid isPermaLink="false">63827:549828:8748827</guid><description><![CDATA[<p>The quantity of small tasks with fluid priorities is starting to get to me and I've decided to attempt to use electronic task management again, even though all my previous attempts have caused me to give up, sometimes only days into the trial.</p>
<p>There are a vast quantity of applications available for every-day task management. My minimum requirements are that there is a web/Mac and an iPhone version of the application and, if I'm going to spending all my time in the application, it also has to be beautiful and easy-to-use.</p>
<p>At the top of my list is <a href="http://culturedcode.com/things/">Things</a>.&nbsp;</p>
<p>Things gets rave reviews everywhere, is simple and beautiful. It's biggest disadvantages to me (someone who has failed at task management in the past) are it's price. AUD$69.95 for the Mac version and AUD$12.99 for the iPhone version and AUD$23.99 for the iPad version. On top of this, syncing doesn't happen over 3G (I have no idea why not), which seems like a huge limitation for me, although at least it syncs via WiFi.</p>
<p>The positive of this expense (AUD$106.93 for all three devices) is that I will have invested a significant chunk of cash in my everyday task management. Maybe this will encourage me to keep it up.&nbsp;</p>
<p>Maybe I should just try out the iPhone app first (as I will probably be spending most of my time in that).</p>
<p>Any thoughts or recommendations?</p>]]></description><wfw:commentRss>http://www.wayne-robinson.com/journal/rss-comments-entry-8748827.xml</wfw:commentRss></item><item><title>Open letter to the Australian NBN2 detractors</title><category>Australia</category><category>NBN</category><category>article</category><category>broadband</category><category>internet</category><dc:creator>Wayne Robinson</dc:creator><pubDate>Fri, 27 Aug 2010 03:37:04 +0000</pubDate><link>http://www.wayne-robinson.com/journal/2010/8/27/open-letter-to-the-australian-nbn2-detractors.html</link><guid isPermaLink="false">63827:549828:8688592</guid><description><![CDATA[<p>What's the point of the National Broadband Network Version 2.0 (NBN2)? It seems simple to me, the existing copper network is aging and unmaintained. What do we replace it with?</p>
<p>Wireless services, on the face of it, seem like a great solution. The issue is, there is only so much bandwidth (in Hz) available through the air, a figure which is dwarfed by the quantity available via copper which is dwarfed again by that available for delivery via light.&nbsp;<br /><br />You may say that ADSL &amp; wireless technologies are adequate for the average user. Right now, you're probably right.&nbsp;<br /><br />However, this usage pattern is going to continue to change. Mid-to-high range TVs now are being released with Internet-based connectivity options bringing streamed services like YouTube, ABC iView, radio, etc to the average user. A wireless network, even if its density was increased by a significant factor, would fall over with a few thousand video streams at 400kbps each in a single regional zone.&nbsp;<br /><br />This assumes providers &amp; consumers of this content are going to be content with their low-quality versions of content. How long will it be before people start streaming 720p (&gt; 2Mbps) and 1080p (&gt; 4Mbps) content in 3D (x2 the bandwidth) in a way that is accessible to anyone?<br /><br />Again, you may say that the existing copper-based network could handle this, but speaking as someone who lives in a suburban area (the Gold Coast), the current copper-based network isn't suitable. Not only do I not qualify for ADSL2 on Telstra or other providers' networks, I am also lucky to max out my connection to 400KB/s to Australian servers - and this speaks nothing of the pitiful upstream capabilities available to me to make use of the many technologies to allow me to either communicate (video-conferencing) or work from home (requiring large amounts of uploaded data whether it be email, documents, source code or test data).<br /><br />So, given the existing infrastructure is very quickly becoming inadequate for most users, what do we replace this with?<br /><br />Do we build out the wireless network, increasing it's density, all the while, running out more fiber trunks to these new towers?<br /><br />Do we increase the connectivity and technology used at the copper 'node', rolling out more fiber to them along the way? Not to mention increasing the density of the nodes to decrease the copper between homes and the nodes?<br /><br />Do we replace the copper network with fiber? A technology that doesn't degrade at anywhere near the pace of copper cable. That continues to provide bandwidth capabilities that outstrip demand (1Gbps downstream and 100Mbps+ upstream available now for the last-mile connectivity - 40Gbps x 64 DWMP [with 100Gbps coming soon] over a single pair of fiber cables with regenerators throughout the network that aren't specific to the speeds being pumped through them using some interesting tricks of physics to increase single power).&nbsp;<br /><br />Sure, its a lot of money (or maybe it isn't... they haven't actually priced anything yet). But it is truly a future-proof option. We live in a world that is starting to provide access to higher-bandwidth content direct to its lay-man consumers.&nbsp;<br /><br />More and more bogans are going to demand access to their HD on-demand content to their living room TV and to their kids TVs whilst they download the latest magazines to their iPads, videoconferencing in HD to their relatives &amp; friends. And they are going to do it whilst demanding that there be no slow-downs, huge usage bills and whilst their neighbours all do the same.</p>]]></description><wfw:commentRss>http://www.wayne-robinson.com/journal/rss-comments-entry-8688592.xml</wfw:commentRss></item><item><title>iPhone 4 and Telstra</title><category>Electronics</category><category>Optus</category><category>Telstra</category><category>iPhone</category><category>personal</category><dc:creator>Wayne Robinson</dc:creator><pubDate>Fri, 06 Aug 2010 07:13:23 +0000</pubDate><link>http://www.wayne-robinson.com/journal/2010/8/6/iphone-4-and-telstra.html</link><guid isPermaLink="false">63827:549828:8476973</guid><description><![CDATA[<p>I just couldn't stand the speed of iOS4 (or iOS3 for that matter) on my iPhone 3G any more.</p><p>Thankfully, my Optus plan was over, so getting a new phone was a no-brainer and, after seeing the iPhone 4 and its sexy glass and stainless-steel surfaces, how could I resist?</p><p>You see, my primary requirement for a phone, above everything else, is that it has a glass or sapphire-coated screen. When in my pocket, the screens of my phones get quite scratched up and I detest phone cases, so the screen needs to be as scratch-proof as possible. When it comes to the smart-phone market, Apple is about the only game in town when it comes to glass screens. And now, with the new iPhone 4, I get a glass back as well!</p><p>Another point of pain for me over the past two years is the Optus network. Whilst I understand that before the iPhone 4 the Optus network didn't support the 900MHz range however, given the similar issues I've had with Optus over-subscribing their network via my 3G dongle I just didn't want to chance it again. So, to cut a long story short, I ported to the Telstra network (on a plan cheaper than my original Optus plan anyway... the tribulations of being an early-adopter).</p><p>My experience with the new iPhone 4 and the Telstra network have been stellar. On the Telstra network I have connectivity everywhere, including parking garages and bathrooms (yes, eww). It's fast (much faster than the Optus network ever was) with extremely low-latency. Additionally, I can't replicate the antenna problem the iPhone 4 is meant to have with any consistency. In the worst case, I drop a couple of bars but, on the Telstra network at least, this doesn't affect call-quality or Internet connectivity.</p><p>The iPhone 4 itself is a big improvement over the iPhone 3G. In fact, it even appears faster than my iPad 3G (also on Telstra), even though it should have the same CPU. iOS4 or the 512MB of memory might be contributing to this speed-boost. Especially applications that support "multi-tasking" well like the Facebook and Twitteriffic applications. It's also nice to get an extra 20-30% out of the battery during the day and I haven't managed to run it flat yet.</p><p>Anyway, I would highly recommend both the iPhone 4 and Telstra networks to anyone coming out of their contracts. I know the new Optus plan is very temping however, do you really want to put yourself through the same crap again for the next two years for the sake of $20-30 per month?</p>]]></description><wfw:commentRss>http://www.wayne-robinson.com/journal/rss-comments-entry-8476973.xml</wfw:commentRss></item><item><title>Selecting an element/object in an IFRAME</title><category>dom</category><category>iframe</category><category>javascript</category><category>javascript</category><dc:creator>Wayne Robinson</dc:creator><pubDate>Tue, 06 Apr 2010 01:33:10 +0000</pubDate><link>http://www.wayne-robinson.com/journal/2010/4/6/selecting-an-elementobject-in-an-iframe.html</link><guid isPermaLink="false">63827:549828:7238541</guid><description><![CDATA[<p>I recently needed to get an object from a child IFRAME from its parent. Without using any helper libraries, the easiest way to do this is with the following:</p>
<script src="http://gist.github.com/357103.js?file=gistfile1.js"></script>]]></description><wfw:commentRss>http://www.wayne-robinson.com/journal/rss-comments-entry-7238541.xml</wfw:commentRss></item><item><title>A JRuby/Rails Message Driven Bean</title><category>ejb</category><category>java</category><category>jruby</category><category>mdb</category><category>ruby</category><category>ruby on rails</category><category>ruby on rails</category><dc:creator>Wayne Robinson</dc:creator><pubDate>Thu, 01 Apr 2010 01:04:18 +0000</pubDate><link>http://www.wayne-robinson.com/journal/2010/4/1/a-jrubyrails-message-driven-bean.html</link><guid isPermaLink="false">63827:549828:7193476</guid><description><![CDATA[<p><strong>A while ago I found this tutorial on getting an EJB message-driven bean up and running utilising JRuby and Rails at <a href="http://nodnol.org/blog/chris/entry/a_jruby_rails_message_driven">http://nodnol.org/blog/chris/entry/a_jruby_rails_message_driven</a>. This website now appears to be down so I am reproducing it here for posterity (and my own reference).</strong></p>

<p>I'm building a system which receives messages from a larger application platform and records the details in its local database. It's built with Rails and JRuby, with <a href="http://activemq.apache.org/">Apache ActiveMQ</a> as the message broker. Using JRuby lets me use ActiveMQ's native JMS-based client, rather than speaking STOMP to the broker (as our larger platform does on the other end of the queue). My deployment platform is <a href="http://glassfish.dev.java.net/">Glassfish</a>, and I'm deploying the Rails app to it in the usual way with <a href="http://blog.nicksieger.com/articles/2007/09/04/warbler-a-little-birdie-to-introduce-your-rails-app-to-java">Warbler</a>. </p>

<p>To begin with, I wrote a standalone script to subscribe to the JMS queue, based on the suggestion to <a href="http://www.shaneharvie.com/2007/07/jruby-jms-as-replacement-for.html">use JMS rather than ActiveMessaging</a>. This works well, and is very simple to deploy for development. As Shane points out, it's just a literal translation from Java to (J)Ruby. A problem is that even when configured to use a failover transport to a pair of message brokers, the script will frequently exit and need restarting. Not only that, but starting the script as a separate process means I've got two JVMs running - one for Glassfish and one for the JRuby script, and they can't share a common JDBC connection pool, so there's more to manage there. </p>

<p>Finally, I'd have to manage any concurrency required myself - the script is resolutely single-threaded, and if I need multiple threads to saturate the hardware, I'd need to write the thread management code as part of the script. </p>

<p>Since I'm already using an app server for the web part of the system, the answer seems to be to move the script into Glassfish as a message-driven Bean.</p>

<p>There are a few issues to be solved: I only want a single copy of the Rails environment, and I need to arrange for the relevant parts of our application to be packaged so it can be correctly deployed with the bean.</p>

<p>The upside is that with Rails 2.2, I can share that Rails environment among as many threads as I need, without having to synchronize access to the app - given a JDBC connection pool, Glassfish will start many bean instances to handle incoming messages.</p>

<p>Unfortunately there doesn't seem to be anything like Warbler to help out with packaging the app into an MDB, so it's all rather manual. Here's what I needed to do to set this up:</p>

<ul>
  <li>Provide an app entry point which would accept a message, and run the required business logic in ruby</li>
  <li>Create a standard J2EE Message-driven Bean in Java, and hook it to an external ActiveMQ instance</li>
  <li>Spin up a single Rails instance inside the container</li>
  <li>Arrange for the message receipt handler to call the app entry point with the contents of the message</li>
</ul>

<h3>App entry point for messaging</h3>

<p>This is a class method on the model the app will create as a result of receiving the message. My messages are simple YAML strings, and this method accepts that YAML directly. </p>

<p>That means I'm converting to a Ruby data structure from YAML in Ruby code, and it might be better to make sure it's done in Java - the messages are small enough that this isn't a big deal though. </p>

<h3>Create an MDB</h3>

<p>I'm using NetBeans for this, simply because of its integration with Glassfish. Everything is done with Java 5 annotations, bar the selection of activemq instead of the built in broker (which doesn't have native STOMP support). </p>

<p>All that's needed beyond the standard Bean that NetBeans sets up is this stanza in sun-ejb-jar.xml:</p>

<script src="http://gist.github.com/351167.js?file=gistfile1.htm"></script>

<p>assuming the ActiveMQ RA is deployed in Glassfish as "activemq". This configuration is taken from <a href="http://forums.java.net/jive/thread.jspa?messageID=254034">this forum post</a></p>

<h3>Rails Instance</h3>

<p>I only want to start one Rails instance to be shared among all the bean instances. I'll create a RailsRuntime class, which loads JRuby, initialises Rails and provides a "string eval" method, and then another class, RailsRuntimeSingleton, to maintain that single instance. </p>

<p>Here's the RailsRuntime class:</p>

<script src="http://gist.github.com/351170.js?file=RailsRuntime.java"></script>

<p>There's a hardcoded path to the JRuby home directory here, which isn't ideal - really I should just include a jruby-complete jar but I don't have the infrastructure in place yet to also include all the required gems, so I'm relying on that fixed path for now. </p>

<p>I do bundle up the Rails app into the jar, and so there's a fixed path available to environment.rb. Production mode is also set here.</p>

<p>The singleton class is very simple. A static property is guaranteed to be initialised only once, so this avoids the need for any synchronization around the RailsRuntime setup.</p>

<script src="http://gist.github.com/351171.js?file=RailsRuntimeSingleton.java"></script>

<h3>Call the app when we receive a message</h3>

<p>Now I've got a Rails instance spun up, and messages coming into the bean, it's time to plug it all together. Here's the bean's onMessage method and the hook into the Rails app:</p>

<script src="http://gist.github.com/351172.js?file=gistfile1.java"></script>

<p>Before Rails 2.2, I needed to synchronize around the eval() method, to serialise access to Rails. Now that's not necessary, and I can allow the container to spawn as many threads as I have connections available in the JDBC pool.</p>

<p>My test environment is a simple, single-threaded Perl STOMP sender running flat out to an ActiveMQ instance, plus the bean in Glassfish all on a Macbook Pro. When the bean runs serialized, the receiver isn't able to keep up and a backlog of messages builds up. Simply removing the synchronized block means the receiver can keep up with the sender easily. </p>

<br />

<h2>Next steps</h2>

<p>There's a lot to get right with this setup even leaving aside the dependency on the external JRuby.</p>

<ul>
  <li>The message queue configuration in Java in the Bean class</li>
  <li>The external message broker configuration in sun-ejb-jar.xml</li>
  <li>Packaging up Rails and the application as part of the Bean</li>
</ul>

<p>More work is required to include jruby-complete.jar and remove that external dependency. Beyond that, making the Java parts generic, allowing configuration in Ruby and building outside of the IDE in the style of Warbler seems to be the way to go. </p>]]></description><wfw:commentRss>http://www.wayne-robinson.com/journal/rss-comments-entry-7193476.xml</wfw:commentRss></item><item><title>yUML makes UML fun?</title><category>business</category><category>programming</category><category>programming</category><dc:creator>Wayne Robinson</dc:creator><pubDate>Tue, 13 Oct 2009 23:53:25 +0000</pubDate><link>http://www.wayne-robinson.com/journal/2009/10/14/yuml-makes-uml-fun.html</link><guid isPermaLink="false">63827:549828:5480978</guid><description><![CDATA[<p>Thankfully, due to the way I work and the 'clients' I work for I have few requirements to diagramme the applications I work on. However, there is the odd occassion where I need to create documentation for less (or traditionally) technically-minded people.</p>
<p>This usually results in me pulling out OmniGraffle or Visio and fighting with GUI-based design tools for presentation that really just represents fairly simple relationships, but I think I've found an answer.</p>
<p><a class="offsite-link-inline" href="http://yuml.me/">yUML</a> is a UML digramming tool that uses a simple, text-base DSL to describe your diagrammes, rather than fighting with mice and grids to get everything to fit together nicely.</p>
<p>For example, the below diagramme is generated with this very simple code:</p>
<blockquote>
<pre>[User]-(Login)<br />[User]-(Logout) <br />(Login)&lt;(Reminder) <br />(Login)&gt;(Captcha)</pre>
</blockquote>
<p><span class="full-image-block ssNonEditable"><span><img style="width: 450px;" src="http://www.wayne-robinson.com/storage/uml-use_case_example.png?__SQUARESPACE_CACHEVERSION=1255478860525" alt="" /></span></span></p>
<p>If you want a simple, command line script to generate these images, check out the <a class="offsite-link-inline" href="http://blog.10to1.be/ruby/2009/10/13/yuml-me-gem/">yUML Me Gem</a> (although you will have to install Gemcutter first).</p>
<p>yUML can also make class and activity diagrammes, so check it out today.</p>]]></description><wfw:commentRss>http://www.wayne-robinson.com/journal/rss-comments-entry-5480978.xml</wfw:commentRss></item><item><title>Xero is greater than the rest</title><category>accounting</category><category>business</category><category>business</category><category>programming</category><category>programming</category><category>ruby</category><category>xero</category><dc:creator>Wayne Robinson</dc:creator><pubDate>Fri, 14 Aug 2009 06:28:15 +0000</pubDate><link>http://www.wayne-robinson.com/journal/2009/8/14/xero-is-greater-than-the-rest.html</link><guid isPermaLink="false">63827:549828:4899316</guid><description><![CDATA[<p><span class="full-image-float-left ssNonEditable"><span><img style="width: 243px;" src="http://www.wayne-robinson.com/storage/xero_dashboard.jpg?__SQUARESPACE_CACHEVERSION=1250232029020" alt="" /></span></span>Well, that title definitely sounds like a marketing introduction but I swear, I have no affiliation with <a class="offsite-link-inline" href="http://www.xero.com/">Xero</a> apart from thinking that they have some of the best SME accounting software that I've come across.</p>
<p>Being web-based, getting transaction feeds directly from banks, having multi-currency support, simple expense claims, fixed-asset register and most importantly, an API for developers; Xero is highly integrated and, most importantly (and rarely), is actually fun to use.</p>
<p>For the last week or so I have been hacking away at the <a class="offsite-link-inline" href="http://github.com/tlconnor/xero_gateway/">Ruby xero_gateway library</a> project started by Tim Connor and have been having quite a lot of fun. It's great to take a break from customer-facing software for a while and developing code that will be used by other developers.</p>
<p>If you want to check out Xero, head on over to their <a class="offsite-link-inline" href="http://www.xero.com/">main site</a> or their <a class="offsite-link-inline" href="http://blog.xero.com/developer/">developer's site</a>.</p>
<p>Now, shameless plug, if you are an SME and looking to get some extra efficiency by integrating your current business processes/software with your accounting package, <a href="mailto:wayne@wayne-robinson.com">give me a shout</a> and I'm sure to be able to help you get more (time/information/money) from less.</p>
<p>&nbsp;</p>]]></description><wfw:commentRss>http://www.wayne-robinson.com/journal/rss-comments-entry-4899316.xml</wfw:commentRss></item><item><title>Word/Excel HTTP POST</title><dc:creator>Wayne Robinson</dc:creator><pubDate>Tue, 28 Jul 2009 04:32:31 +0000</pubDate><link>http://www.wayne-robinson.com/journal/2009/7/28/wordexcel-http-post.html</link><guid isPermaLink="false">63827:549828:4766760</guid><description><![CDATA[<p>A little essoteric, but I recently needed to post some merge fields on a Word application form to a server to save on rekeying when the application form is completed.</p>
<p>Thankfully, VBA in Word can utilise any of the built-in Windows libraries and therefore the above can be easily accomplished using the MSXML2 library.</p>
<p>Some sample code for posting data to a HTTP server in VBA:</p>
<pre>Private Sub PostData()<br /><br />  Set http = CreateObject("MSXML2.ServerXMLHTTP")<br />  http.Open "POST", "http://mycompany.com/url/path", False<br />  http.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"<br />  http.Send "field1=a&amp;field2=b"<br /><br />  MsgBox http.responseText<br /><br />End Sub<br /></pre>
<p>&nbsp;</p>]]></description><wfw:commentRss>http://www.wayne-robinson.com/journal/rss-comments-entry-4766760.xml</wfw:commentRss></item></channel></rss>