<?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>HappyPappy Blog</title>
	<atom:link href="http://www.happypappy.net/feed" rel="self" type="application/rss+xml" />
	<link>http://www.happypappy.net</link>
	<description>Happy's rantings</description>
	<lastBuildDate>Sat, 17 Apr 2010 13:30:34 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>The iPad, a Canadian perspective</title>
		<link>http://www.happypappy.net/archives/204</link>
		<comments>http://www.happypappy.net/archives/204#comments</comments>
		<pubDate>Sat, 17 Apr 2010 13:28:20 +0000</pubDate>
		<dc:creator>Happy</dc:creator>
				<category><![CDATA[Techno]]></category>

		<guid isPermaLink="false">http://www.happypappy.net/archives/204</guid>
		<description><![CDATA[As one of what I imagine is a minority of Canadians I thought I&#8217;d report my thought on this device.

I happen to have family in the US and I happened to have a visit planned there the week after the iPads launch so I took advantage of my family&#8217;s US  address and pre-ordered a [...]]]></description>
			<content:encoded><![CDATA[<p>As one of what I imagine is a minority of Canadians I thought I&#8217;d report my thought on this device.<br />
<span id="more-204"></span><br />
I happen to have family in the US and I happened to have a visit planned there the week after the iPads launch so I took advantage of my family&#8217;s US  address and pre-ordered a 64gb iPad from the Apple store. </p>
<p>The apple store let&#8217;s you have a different billing address from your shipping address otherwise this wouldn&#8217;t have worked.  </p>
<p>I placed my order and sure enough the device showed up exactly on launch day as promised by Apple. Oddly enough about 48 hours after I placed my order Apple ran out off stock and further iPad shipments were delayed until a week after launch.</p>
<p>On initial brush the device was wholly underwhelming, to quote Steve Jobs &#8220;it just works&#8221;. It had to connect to iTunes to setup but then just worked on it&#8217;s own from there.</p>
<p>No wifi issues for me, I just started using it.</p>
<p>The one difficulty however was using the iTunes App store; unlike the Apple store, it insisted that I have a US based funding source, in other words I couldn&#8217;t use a credit card with a Canadian billing address. No luck with pay pal or cross border gift cards either. The only solution was to setup an iTunes account without a funding source and go buy iTunes gift cards from the local Best Buy.</p>
<p>About a month before international launch however the computer based iTunes app store now has iPad apps while the Canadian iPad based app store still won&#8217;t connect. In the end it was a pain to get apps but not impossible.</p>
<p>Loaded with an iPad under my arm I said my goodbyes and headed home. I was a bit nervous about crossing the border with the iPad but I thought I would only have to pay GST at worst. I declared the device and the customs agent simply waved me through, go figure.</p>
<p>A week later my appreciation of the iPads capabilities and the imagination and enthusiasm of iPad developers continues to impress me. As I learn how to use the device better each day, it becomes more powerful and useful to me.</p>
<p>I&#8217;m fairly certain it will replace my laptop shortly.</p>
<p>&#8211; Post From My iPad<br /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.happypappy.net/archives/204/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Finding or viewing a deleted file in SubVersion (SVN)</title>
		<link>http://www.happypappy.net/archives/202</link>
		<comments>http://www.happypappy.net/archives/202#comments</comments>
		<pubDate>Fri, 29 Jan 2010 15:45:51 +0000</pubDate>
		<dc:creator>Happy</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.happypappy.net/archives/202</guid>
		<description><![CDATA[Yes it does happen that sometimes a file is deleted either inadvertently or on purpose and you either need to get it back or you just want to see what was there.
Since I keep forgetting on how to do this I thought I&#8217;d write it down.
The first step to recovering the file is to find [...]]]></description>
			<content:encoded><![CDATA[<p style="clear: both">Yes it does happen that sometimes a file is deleted either inadvertently or on purpose and you either need to get it back or you just want to see what was there.</p>
<p style="clear: both">Since I keep forgetting on how to do this I thought I&#8217;d write it down.</p>
<p>The first step to recovering the file is to find the version in which it existed; to do so either go go to the directory it was in (or as close as you can get to the directory it was in) and run:</p>
<blockquote style="clear: both"><p>svn log &#8211;verbose</p>
</blockquote>
<p style="clear: both">Note the revision of the file you are looking for.</p>
<p style="clear: both">If you want to restore your file to your current source tree then issue an</p>
<blockquote style="clear: both"><p>svn up -r [revision number] filename</p>
</blockquote>
<p style="clear: both">If you just want to look at it then just go to any temporary folder and issue an</p>
<blockquote style="clear: both"><p>svn export -r [revision number] repository path (in the form of http://../filename)</p>
</blockquote>
<p style="clear: both">Not that for the export notation you could use the parent folder name to get all the files in that folder at the same time.</p>
<p><br class="final-break" style="clear: both" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.happypappy.net/archives/202/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using JavaScript with a Wicket LinkTree</title>
		<link>http://www.happypappy.net/archives/197</link>
		<comments>http://www.happypappy.net/archives/197#comments</comments>
		<pubDate>Tue, 01 Sep 2009 14:37:15 +0000</pubDate>
		<dc:creator>Happy</dc:creator>
				<category><![CDATA[Techno]]></category>

		<guid isPermaLink="false">http://www.happypappy.net/archives/197</guid>
		<description><![CDATA[I have to say that so far I really like Wicket, after years of developing J2EE Web application it&#8217;s a big relief to be able to develop Web application without having to maintain reams of URL or Action mappings in XML files.
Wicket offers a programming paradigm much closer to standard Java Swing instead which makes [...]]]></description>
			<content:encoded><![CDATA[<p>I have to say that so far I really like Wicket, after years of developing J2EE Web application it&#8217;s a big relief to be able to develop Web application without having to maintain reams of URL or Action mappings in XML files.</p>
<p>Wicket offers a programming paradigm much closer to standard Java Swing instead which makes Web development much smoother.</p>
<p>There are a few pitfalls unfortunately as nothing is perfect but so far it&#8217;s been great.</p>
<p>One problem I&#8217;ve run into is when using Wickets LinkTree component (an Ajax based explorer like tree structure) is that it assumes that I always want to do an Ajax update from the server. But what if I want to run some JavaScript or simply redirect based on the clicked node.<span id="more-197"></span>My solution is convoluted as I will admit that I am NOT a Wicket expert (yet) but to date I have not found another work around.</p>
<p>The gist of the solution is to override the newNodeComponent method which allows you to substitute your own code for the creation of tree nodes and I also overrode the onNodeClicked method as I wanted to expand and collapse tree nodes if the user clicked the nodes and not just the + and &#8211; icons.</p>
<p>Code:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;&#8230;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;_tree = <span class="kw2">new</span> LinkTree<span class="br0">&#40;</span><span class="st0">&quot;catalog&quot;</span>, treeModel<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; @Override</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">protected</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AComponent+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Component</span></a> newNodeComponent<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> id, IModelObject model<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Our user object stored in each node</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">final</span> CatalogItem item = <span class="br0">&#40;</span>CatalogItem<span class="br0">&#41;</span> <span class="br0">&#40;</span><span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ADefaultMutableTreeNode+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">DefaultMutableTreeNode</span></a><span class="br0">&#41;</span> model.<span class="me1">getObject</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="me1">getUserObject</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Is this a leaf node?</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Your own condition may be different</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>item.<span class="me1">getItem</span><span class="br0">&#40;</span><span class="br0">&#41;</span> != <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Override standard node creation so we can setup our own component</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// This kind of blows since if the standard LinkTree implementation changes we</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// may be hooped, pooched, or even twaddled</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">final</span> LinkIconPanel panel = <span class="kw2">new</span> LinkIconPanel<span class="br0">&#40;</span>id, model, <span class="kw2">this</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">static</span> <span class="kw2">final</span> <span class="kw4">long</span> serialVersionUID = 1L;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Override</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">protected</span> <span class="kw4">void</span> onNodeLinkClicked<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AObject+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Object</span></a> node, BaseTree tree, AjaxRequestTarget target<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">super</span>.<span class="me1">onNodeLinkClicked</span><span class="br0">&#40;</span>node, tree, target<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; onNodeLinkClicked<span class="br0">&#40;</span>node, tree, target<span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Override</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">protected</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AComponent+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Component</span></a> newContentComponent<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> componentId, BaseTree tree, IModelObject model<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span> <span class="kw2">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ALabel+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Label</span></a><span class="br0">&#40;</span>componentId, getNodeTextModel<span class="br0">&#40;</span>model<span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Override</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">protected</span> <span class="kw4">void</span> addComponents<span class="br0">&#40;</span><span class="kw2">final</span> IModelObject model, <span class="kw2">final</span> BaseTree tree<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">final</span> BaseTree.<span class="me1">ILinkCallback</span> callback = <span class="kw2">new</span> BaseTree.<span class="me1">ILinkCallback</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">static</span> <span class="kw2">final</span> <span class="kw4">long</span> serialVersionUID = 1L;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">void</span> onClick<span class="br0">&#40;</span>AjaxRequestTarget target<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; onNodeLinkClicked<span class="br0">&#40;</span>model.<span class="me1">getObject</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, tree, target<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; MarkupContainer link = tree.<span class="me1">newLink</span><span class="br0">&#40;</span><span class="st0">&quot;iconLink&quot;</span>, callback<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; add<span class="br0">&#40;</span>link<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; link.<span class="me1">add</span><span class="br0">&#40;</span>newImageComponent<span class="br0">&#40;</span><span class="st0">&quot;icon&quot;</span>, tree, model<span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// link = tree.newLink(&quot;contentLink&quot;, callback);</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Which return an AjaxLink or we can setup our own component instead&#8230;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; link = <span class="kw2">new</span> WebMarkupContainer<span class="br0">&#40;</span><span class="st0">&quot;contentLink&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Add our own JavaScript</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; link.<span class="me1">add</span><span class="br0">&#40;</span><span class="kw2">new</span> SimpleAttributeModifier<span class="br0">&#40;</span><span class="st0">&quot;onclick&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;ezprint.setSku(&#8216;&quot;</span> + item.<span class="me1">getItem</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getPartnerCode</span><span class="br0">&#40;</span><span class="br0">&#41;</span> + <span class="st0">&quot;&#8217;);return false;&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Standard node creation resumes</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; link.<span class="me1">add</span><span class="br0">&#40;</span>newContentComponent<span class="br0">&#40;</span><span class="st0">&quot;content&quot;</span>, tree, model<span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; add<span class="br0">&#40;</span>link<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span> panel;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Standard node creation</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span> <span class="kw2">super</span>.<span class="me1">newNodeComponent</span><span class="br0">&#40;</span>id, model<span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; @Override</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">protected</span> <span class="kw4">void</span> onNodeLinkClicked<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AObject+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Object</span></a> object, BaseTree tree, AjaxRequestTarget target<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Expand or collapse a node if the user clicks on a node &nbsp;(in addition to the +/- signs)</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">final</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ATreeNode+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">TreeNode</span></a> node = <span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ATreeNode+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">TreeNode</span></a><span class="br0">&#41;</span> object;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>!node.<span class="me1">isLeaf</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>tree.<span class="me1">getTreeState</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">isNodeExpanded</span><span class="br0">&#40;</span>node<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _tree.<span class="me1">getTreeState</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">collapseNode</span><span class="br0">&#40;</span>node<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _tree.<span class="me1">getTreeState</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">expandNode</span><span class="br0">&#40;</span>node<span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// and else here would handle your leaf node</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tree.<span class="me1">updateTree</span><span class="br0">&#40;</span>target<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.happypappy.net/archives/197/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sending Javascript functions using JSON and Java</title>
		<link>http://www.happypappy.net/archives/183</link>
		<comments>http://www.happypappy.net/archives/183#comments</comments>
		<pubDate>Wed, 29 Jul 2009 17:41:53 +0000</pubDate>
		<dc:creator>Happy</dc:creator>
				<category><![CDATA[Techno]]></category>

		<guid isPermaLink="false">http://www.happypappy.net/?p=183</guid>
		<description><![CDATA[I originally got my inspiration from this article on how to send Javascript functions over JSON and most of this work here is based on it.

By default every string attribute specified inside a JSON string is bounded by double quotes which works fine most of the time except when you are trying to pass a [...]]]></description>
			<content:encoded><![CDATA[<p style="clear: both">I originally got my inspiration from this <a href="http://solutoire.com/2008/06/12/sending-javascript-functions-over-json/" target="_blank">article</a> on how to send Javascript functions over JSON and most of this work here is based on it.</p>
<p style="clear: both">
<div>By default every string attribute specified inside a JSON string is bounded by double quotes which works fine most of the time except when you are trying to pass a Javascript function in which case you have a string but it needs to be without double quotes.</div>
<p style="clear: both">
<p><span id="more-183"></span></p>
<div>Every JSON implementations that I&#8217;ve seen (both in PHP and Java) does not allow this in that every string is returned bounded by double quotes.</div>
<p style="clear: both">
<div>So short of implementing my own JSON tools in Java my only solution was to somehow work around the results products by the various JSON implementations.</div>
<p style="clear: both">
<div>The essence of our solution is to append some unique string values to the beginning and end of our Javascript function name and then remove these and attached quotes from our resulting JSON output.</div>
<p style="clear: both">
<p style="clear: both">
<div>I wrote a simple wrapper around the <a href="http://code.google.com/p/google-gson/" target="_blank">GSON</a> implementation to do this:</div>
<p style="clear: both">
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import com.google.gson.Gson;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import com.truecool.stagetwo.utils.StringUtils;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw2">public</span> <span class="kw2">class</span> GsonUtils <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// Magic strings are delimiters used to denote the start and end of a string</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// you don&#8217;t want bounded by double quotes in the resulting json string</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">static</span> <span class="kw2">final</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> MAGIC_STRING_START = <span class="st0">&quot;ycaBQm9T8UPT&#8212;&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">static</span> <span class="kw2">final</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> MAGIC_STRING_END = <span class="st0">&quot;&#8212;1IRJDEPhW&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">static</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> toJson<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AObject+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Object</span></a> object<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">Gson gson = <span class="kw2">new</span> Gson<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> json = gson.<span class="me1">toJson</span><span class="br0">&#40;</span>object<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">json = StringUtils.<span class="me1">searchAndReplace</span><span class="br0">&#40;</span>json, <span class="st0">&quot;<span class="es0">\&quot;</span>&quot;</span> + MAGIC_STRING_START, <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">json = StringUtils.<span class="me1">searchAndReplace</span><span class="br0">&#40;</span>json, MAGIC_STRING_END + <span class="st0">&quot;<span class="es0">\&quot;</span>&quot;</span>, <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span>; <span class="kw2">return</span> json;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>Standard GSON/JSON up to the point where we replace our double quotes and magic strings with an empty string (&#8220;&#8221;).</p>
<p>To properly invoke the serialization method I use a map which I stuff with a value that surrounds my actual function name with the magic strings as follows:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&#8230;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw4">void</span> setReadyCallback<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> readyCallback<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="co1">// getAttributes() is a map</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; getAttributes<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">put</span><span class="br0">&#40;</span>READYCALLBACK,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; GsonUtils.<span class="me1">MAGIC_STRING_START</span> + readyCallback + GsonUtils.<span class="me1">MAGIC_STRING_END</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&#8230;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>Which in turn produces this; notice that someFunction is a string without double quotes.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span><span class="st0">&quot;elementId&quot;</span>:<span class="st0">&quot;test&quot;</span>,<span class="st0">&quot;height&quot;</span>:<span class="nu0">100</span>,<span class="st0">&quot;readyCallback&quot;</span>:someFunction,<span class="st0">&quot;width&quot;</span>:<span class="st0">&quot;80%&quot;</span>&#8230;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.happypappy.net/archives/183/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Good Times</title>
		<link>http://www.happypappy.net/archives/175</link>
		<comments>http://www.happypappy.net/archives/175#comments</comments>
		<pubDate>Wed, 01 Jul 2009 16:07:33 +0000</pubDate>
		<dc:creator>Happy</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.happypappy.net/archives/175</guid>
		<description><![CDATA[Was cleaning out my desk and found this&#8230;.

We spent the weekend in Seattle with our friends, ate good food, visited Pikes Market, the Boeing Flight Museum, and went to the game (Green Bay at Seattle).


Le Sigh.
Pictures here.
&#8220;Remember Gary? Gary from the office, good times.&#8221;



]]></description>
			<content:encoded><![CDATA[<p style="clear: both">Was cleaning out my desk and found this&#8230;.</p>
<p style="clear: both"><img src="http://www.happypappy.net/wp-content/uploads/2009/07/zz6e1978fa-thumb1.jpg" height="193" align="left" width="380" style=" display: inline; float: left; margin: 0 10px 10px 0;" /><br style="clear: both" />
<div>We spent the weekend in Seattle with our friends, ate good food, visited Pikes Market, the Boeing Flight Museum, and went to the game (Green Bay at Seattle).</div>
</p>
<p style="clear: both">
<div>Le Sigh.</p>
<p>Pictures <a href="http://www.flickr.com/photos/happypappy/sets/72157608030544407/" title="" target="_blank">here</a>.</p>
<p>&#8220;Remember Gary? Gary from the office, good times.&#8221;</p></div>
</p>
<p style="clear: both">
<p><br class="final-break" style="clear: both" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.happypappy.net/archives/175/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Crying Plover</title>
		<link>http://www.happypappy.net/archives/166</link>
		<comments>http://www.happypappy.net/archives/166#comments</comments>
		<pubDate>Sun, 14 Jun 2009 20:37:15 +0000</pubDate>
		<dc:creator>Happy</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.happypappy.net/archives/166</guid>
		<description><![CDATA[Went for a walk in Fish Creek Park in Calgary and just at the southern end of Sikome Lake we heard a bird crying.
Looked like a little plover and it sounded like this.
]]></description>
			<content:encoded><![CDATA[<p style="clear: both">Went for a walk in Fish Creek Park in Calgary and just at the southern end of <a href="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=sikome+lake,calgary,alberta&amp;mrt=kmlkmz&amp;sll=50.89743,-114.009247&amp;sspn=0.023711,0.042958&amp;ie=UTF8&amp;ll=50.896104,-114.014997&amp;spn=0.023712,0.042958&amp;t=h&amp;z=15">Sikome Lake</a> we heard a bird crying.</p>
<p style="clear: both">Looked like a little plover and it sounded like <a href="http://www.happypappy.net/wp-content/uploads/2009/06/plover.wav">this</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.happypappy.net/archives/166/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.happypappy.net/wp-content/uploads/2009/06/plover.wav" length="1130476" type="audio/x-wav" />
		</item>
		<item>
		<title>Coolest Bus Stop Ever&#8230;</title>
		<link>http://www.happypappy.net/archives/163</link>
		<comments>http://www.happypappy.net/archives/163#comments</comments>
		<pubDate>Wed, 20 May 2009 15:25:04 +0000</pubDate>
		<dc:creator>Happy</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.happypappy.net/archives/163</guid>
		<description><![CDATA[Wish we had these&#8230;
In Italy, futuristic bus stops to blend practical, chic &#124; Planetary Gear &#8211; CNET News
Unfortunately where I live they probably wouldn&#8217;t last fifteen minutes; notice the nice white paint and the missing glass (smashed)&#8230;


]]></description>
			<content:encoded><![CDATA[<p style="clear: both">Wish we had these&#8230;</p>
<p style="clear: both"><img src="http://www.happypappy.net/wp-content/uploads/2009/05/senseable-1-610x3-thumb.jpg" height="269" align="left" width="380" style=" display: inline; float: left; margin: 0 10px 10px 0;" /><br style="clear: both" /><a href="http://news.cnet.com/8301-17912_3-10245304-72.html?tag=newsEditorsPicksArea.0">In Italy, futuristic bus stops to blend practical, chic | Planetary Gear &#8211; CNET News</a><u><br /></u></p>
<p style="clear: both">Unfortunately where I live they probably wouldn&#8217;t last fifteen minutes; notice the nice white paint and the missing glass (smashed)&#8230;</p>
<p style="clear: both"><img src="http://www.happypappy.net/wp-content/uploads/2009/05/634862493-7038111ed9-thumb.jpg" height="237" align="left" width="377" style=" display: inline; float: left; margin: 0 10px 10px 0;" /></p>
<p><br class="final-break" style="clear: both" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.happypappy.net/archives/163/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fix sleep and network issues on Mac Leopard 10.5.7</title>
		<link>http://www.happypappy.net/archives/157</link>
		<comments>http://www.happypappy.net/archives/157#comments</comments>
		<pubDate>Tue, 19 May 2009 03:28:32 +0000</pubDate>
		<dc:creator>Happy</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.happypappy.net/archives/157</guid>
		<description><![CDATA[Not sure what caused the actual problem but it seems that shortly after upgrading Leopard on my Macbook Pro to 10.5.7 my Macbook wouldn&#8217;t fall asleep properly and wouldn&#8217;t show all my shared computers in Finder.
I tried a variety of things but finally the simplest solution worked, I deleted the SystemConfiguration folder inside the /Macintosh [...]]]></description>
			<content:encoded><![CDATA[<p style="clear: both">Not sure what caused the actual problem but it seems that shortly after upgrading Leopard on my Macbook Pro to 10.5.7 my Macbook wouldn&#8217;t fall asleep properly and wouldn&#8217;t show all my shared computers in Finder.</p>
<p style="clear: both">I tried a variety of things but finally the simplest solution worked, I deleted the SystemConfiguration folder inside the /Macintosh HD/Library/Preferences folder and rebooted the computer.</p>
<p style="clear: both">This fixed both the sleep issue and the shared computers not showing up in Finder issue.</p>
<p style="clear: both">Good Luck.</p>
<p><br class="final-break" style="clear: both" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.happypappy.net/archives/157/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>It&#8217;s the content stupid</title>
		<link>http://www.happypappy.net/archives/153</link>
		<comments>http://www.happypappy.net/archives/153#comments</comments>
		<pubDate>Mon, 27 Apr 2009 15:11:39 +0000</pubDate>
		<dc:creator>Happy</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.happypappy.net/archives/153</guid>
		<description><![CDATA[
I recently powered though the new Resident Evil 5 title in about 10 hours (rounded up from 8.9) which was fairly disappointing for a $60 game. Technically the game was superb both in terms of graphics, controls, and gameplay. But the story and length of the game were severely disappointing. Not sure why but the [...]]]></description>
			<content:encoded><![CDATA[<p style="clear: both"><img style=" display: inline; float: right; margin: 0 0 10px 10px;" src="http://www.happypappy.net/wp-content/uploads/2009/04/re5-ps3-esrbboxart-160w1-thumb.jpg" alt="" width="160" height="185" align="right" /><br />
I recently powered though the new <a href="http://ps3.ign.com/objects/734/734381.html">Resident Evil 5</a> title in about 10 hours (rounded up from 8.9) which was fairly disappointing for a $60 game. Technically the game was superb both in terms of graphics, controls, and gameplay. But the story and length of the game were severely disappointing. Not sure why but the Japanese game makers make technically great games but their stories are so convoluted I usually give up trying to follow any of it (see if you can make any sense out of <a href="http://ps3.ign.com/objects/714/714044.html">Metal Gear Solid 4</a>) and just pound my way through the levels and then I get rid of the game.</p>
<p><span id="more-153"></span></p>
<p style="clear: both"><img style=" display: inline; float: left; margin: 0 10px 10px 0;" src="http://www.happypappy.net/wp-content/uploads/2009/04/uncharted-box-artboxart-160w1-thumb.jpg" alt="" width="160" height="185" align="left" />I also recently played <a href="http://ps3.ign.com/objects/812/812550.html">Uncharted: Drake&#8217;s Fortune</a> which had a story that I was able to relate to much more deeply and which in turn provided me with a more enjoyable overall experience. Took me about 40 hours to play the game and I&#8217;m actually considering a replay</p>
<p style="clear: both">Point being that what makes a game great is the content rather than the actual technical achievements. Look at World of Warcraft&#8217;s success, it&#8217;s the content, not the technical achievement.</p>
<p style="clear: both">Another thing that seems to be happening in gaming is that the game makers now throw content creation back at the user rather than investing significant effort into an actual game story and associated levels and maps.</p>
<p style="clear: both">If you notice most games have a fairly short campaign or story mode but then try to encourage repeat play or gaming through the use or provisions of online gaming where other users effectively create new content. This can work very well if done correctly if one was to judge by the success of titles such as <a href="http://pc.ign.com/objects/818/818215.html">Left for Dead</a> or <a href="http://pc.ign.com/objects/011/011640.html">Team Fortress 2</a>.</p>
<p style="clear: both">I guess the moral of the story is be careful which games you decide to play and look at both the content as well as the actual technical achievement of the game.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.happypappy.net/archives/153/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Photography Equipment Tip #1</title>
		<link>http://www.happypappy.net/archives/140</link>
		<comments>http://www.happypappy.net/archives/140#comments</comments>
		<pubDate>Fri, 24 Apr 2009 16:29:13 +0000</pubDate>
		<dc:creator>Happy</dc:creator>
				<category><![CDATA[Techno]]></category>

		<guid isPermaLink="false">http://www.happypappy.net/archives/140</guid>
		<description><![CDATA[Modern cameras have become very powerful and have myriads of features to help us take better and more pictures.
Unfortunately with all that power comes significant complexity which sometimes makes it hard to use these cameras and gear effectively.

Carrying books and manuals when you already have a pack full of gear is not fun either.
Enter the [...]]]></description>
			<content:encoded><![CDATA[<p style="clear: both">Modern cameras have become very powerful and have myriads of features to help us take better and more pictures.</p>
<p style="clear: both">Unfortunately with all that power comes significant complexity which sometimes makes it hard to use these cameras and gear effectively.</p>
<p><span id="more-140"></span></p>
<p style="clear: both">Carrying books and manuals when you already have a pack full of gear is not fun either.</p>
<p style="clear: both">Enter the iPhone (although there are probably similar solutions for our friends using CrackBerries) and a simple and easy to use application called Air Sharing (which you can purchase from the App Store).</p>
<p style="clear: both">Air Sharing lets you transfer a number of file formats to your iPhone and then read them when required.</p>
<p style="clear: both">In my case I was able to download Canon manuals for both my G9 and my 50D onto my iPhone and reference these as required in the field.</p>
<p style="clear: both">Hope this helps, happy shooting!!!</p>
<p style="clear: both"><img style=" display: inline; float: left; margin: 0 10px 10px 0;" src="http://www.happypappy.net/wp-content/uploads/2009/04/img-0001-thumb1.png" alt="" width="306" height="458" align="left" /></p>
<p style="clear: both"><img style=" display: inline; float: left; margin: 0 10px 10px 0;" src="http://www.happypappy.net/wp-content/uploads/2009/04/img-0002-thumb.png" alt="" width="306" height="458" align="left" /></p>
<p><br class="final-break" style="clear: both" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.happypappy.net/archives/140/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
