<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CUAHSX87fCp7ImA9WxNUFk8.&quot;"><id>tag:blogger.com,1999:blog-11593374</id><updated>2009-11-07T19:55:38.104Z</updated><title>Andrew Beacock's Blog</title><subtitle type="html">&lt;a href="/search/label/Agile"&gt;agile&lt;/a&gt; / &lt;a href="/search/label/Apache"&gt;apache&lt;/a&gt; / &lt;a href="/search/label/Java"&gt;java&lt;/a&gt; / &lt;a href="/search/label/Leadership"&gt;leadership&lt;/a&gt; / &lt;a href="/search/label/Linux"&gt;linux&lt;/a&gt; / &lt;a href="/search/label/Mobile"&gt;mobile&lt;/a&gt; / &lt;a href="/search/label/Ruby"&gt;ruby&lt;/a&gt; / &lt;a href="/search/label/Subversion"&gt;subversion&lt;/a&gt; / &lt;a href="/search/label/Web"&gt;web&lt;/a&gt;</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.andrewbeacock.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.andrewbeacock.com/" /><link rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Andy B</name><uri>http://www.blogger.com/profile/01039992884679308726</uri><email>blog@andrewbeacock.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>208</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><logo>http://bp0.blogger.com/_Vu_eUOpUOMk/RgWamJV19TI/AAAAAAAAAGw/Lu_6ZKf-Glw/s400/buddy_icon.png</logo><link rel="self" href="http://feeds.feedburner.com/andrewbeacock" type="application/atom+xml" /><feedburner:emailServiceId>andrewbeacock</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site.</feedburner:browserFriendly><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry gd:etag="W/&quot;AkUMSXcyfip7ImA9WxNVF0s.&quot;"><id>tag:blogger.com,1999:blog-11593374.post-7590248954489540240</id><published>2009-10-28T22:18:00.000Z</published><updated>2009-10-28T22:18:08.996Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-28T22:18:08.996Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Web" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><title>JavaScript splits &amp; matches with regular expressions (regex)</title><content type="html">I had been developing some client-side validation code in &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt;/&lt;a href="http://en.wikipedia.org/wiki/JavaScript"&gt;JavaScript&lt;/a&gt; and using &lt;a href="http://www.mozilla.com/firefox/"&gt;Firefox&lt;/a&gt; (and the excellent &lt;a href="http://getfirebug.com/"&gt;Firebug&lt;/a&gt;) to test and debug it.  I was then asked to ensure that it worked in IE6 &amp;amp; IE7 and that's when the problems started.&lt;br /&gt;
&lt;br /&gt;
Apart from the usual "which file does that line number equate to, and why does it not tie up?" issues I found that IE doesn't like taking a regular expression as it's parameter to the &lt;a href="http://www.w3schools.com/jsref/jsref_split.asp"&gt;JavaScript &lt;code&gt;split&lt;/code&gt; function&lt;/a&gt;.  Firefox will happily accept this and works fine but IE doesn't.  After some searching it appears that Firefox might be the odd one out and that it's non-standard to pass in a regex.&lt;br /&gt;
&lt;br /&gt;
So what do you do if you want to split up a string based on a regular expression or rather a rule that can't be simply expressed in the way that the split function wants it?  Wouldn't it be nice if you could ask if a string matches a regex but then use certain matched bits of the string in your next few lines of code?&lt;br /&gt;
&lt;br /&gt;
Well you can, simply use the &lt;a href="http://www.w3schools.com/jsref/jsref_match.asp"&gt;&lt;code&gt;match&lt;/code&gt; method&lt;/a&gt;, surrounding the bits of the regex that you want to use later in parenthesis '(' and ')' and then you can use the global JavaScript variable &lt;code&gt;RegEx&lt;/code&gt; to pull them out.&lt;br /&gt;
&lt;br /&gt;
So if &lt;code&gt;1234-ABC&lt;/code&gt; is your text, and you want the numbers as one part and the characters as another then you would use this regular expression to match on: &lt;code&gt;^([0-9]*)-([A-Z]*)$&lt;/code&gt;.  You can then get hold of the matched numbers bit with &lt;code&gt;RegEx.$1&lt;/code&gt; and the letters bit with &lt;code&gt;RegEx.$2&lt;/code&gt;.&lt;br /&gt;
&lt;pre class="brush:javascript"&gt;var productCode = "1234-ABC";
productCode.match(/^([0-9]*)-([A-Z]*)$/);
var numbers = RegEx.$1;
var letters = RegEx.$2;&lt;/pre&gt;Technorati Tags: &lt;a href="http://www.technorati.com/tags/Regular%20Expression" rel="tag"&gt;Regular Expression&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/JavaScript" rel="tag"&gt;JavaScript&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Andrew%20Beacock" rel="tag"&gt;Andrew Beacock&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11593374-7590248954489540240?l=blog.andrewbeacock.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=-Kv19tZxEjs:nCFLtOyFD0Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=-Kv19tZxEjs:nCFLtOyFD0Y:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=-Kv19tZxEjs:nCFLtOyFD0Y:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=-Kv19tZxEjs:nCFLtOyFD0Y:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=-Kv19tZxEjs:nCFLtOyFD0Y:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=-Kv19tZxEjs:nCFLtOyFD0Y:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=-Kv19tZxEjs:nCFLtOyFD0Y:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.andrewbeacock.com/feeds/7590248954489540240/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11593374&amp;postID=7590248954489540240" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/7590248954489540240?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/7590248954489540240?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/andrewbeacock/~3/-Kv19tZxEjs/javascript-splits-matches-with-regular.html" title="JavaScript splits &amp; matches with regular expressions (regex)" /><author><name>Andy B</name><uri>http://www.blogger.com/profile/01039992884679308726</uri><email>blog@andrewbeacock.com</email><gd:extendedProperty name="OpenSocialUserId" value="16044632545316934027" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.andrewbeacock.com/2009/10/javascript-splits-matches-with-regular.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0IFRHw_eCp7ImA9WxNWF08.&quot;"><id>tag:blogger.com,1999:blog-11593374.post-6808370387603812951</id><published>2009-10-16T21:38:00.000+01:00</published><updated>2009-10-16T21:38:35.240+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-16T21:38:35.240+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><title>How to disable the auto-completion 'bell' in Cygwin (using RXVT)</title><content type="html">If you have ever hit TAB a few times in bash (via RXVT) you will probably be greeted with the loudest 'bell' your PC can muster.  After a while this gets pretty annoying so here's how to disable it if you are using RXVT inside Cygwin (this might work for other Cygwin terminals, I've just not checked)&lt;br /&gt;
&lt;br /&gt;
Navigate to your home directory (normally just by typing &lt;code&gt;cd&lt;return&gt;&lt;/code&gt; and either edit or create a file called &lt;code&gt;.inputrc&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Add the following lines to the &lt;code&gt;.inputrc&lt;/code&gt; file:&lt;pre class="brush:bash"&gt;# Disable the annoying bell
set bell-style none
&lt;/pre&gt;Save the file, close the terminal and reopen - you should now be bell-less!&lt;br /&gt;
&lt;br /&gt;
&lt;span class="technoratitag"&gt;Technorati Tags: &lt;a href="http://www.technorati.com/tags/Cygwin" rel="tag"&gt;Cygwin&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/RXVT" rel="tag"&gt;RXVT&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Andrew Beacock" rel="tag"&gt;Andrew Beacock&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11593374-6808370387603812951?l=blog.andrewbeacock.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=HRzOqp2kYWo:9MQXXUtLnnI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=HRzOqp2kYWo:9MQXXUtLnnI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=HRzOqp2kYWo:9MQXXUtLnnI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=HRzOqp2kYWo:9MQXXUtLnnI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=HRzOqp2kYWo:9MQXXUtLnnI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=HRzOqp2kYWo:9MQXXUtLnnI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=HRzOqp2kYWo:9MQXXUtLnnI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.andrewbeacock.com/feeds/6808370387603812951/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11593374&amp;postID=6808370387603812951" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/6808370387603812951?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/6808370387603812951?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/andrewbeacock/~3/HRzOqp2kYWo/how-to-disable-auto-completion-bell-in.html" title="How to disable the auto-completion 'bell' in Cygwin (using RXVT)" /><author><name>Andy B</name><uri>http://www.blogger.com/profile/01039992884679308726</uri><email>blog@andrewbeacock.com</email><gd:extendedProperty name="OpenSocialUserId" value="16044632545316934027" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.andrewbeacock.com/2009/10/how-to-disable-auto-completion-bell-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcHRnc-cCp7ImA9WxNWEU8.&quot;"><id>tag:blogger.com,1999:blog-11593374.post-1428129130449503441</id><published>2009-10-09T22:16:00.001+01:00</published><updated>2009-10-09T22:17:17.958+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-09T22:17:17.958+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><title>How to get Scala working with the RXVT terminal on Cygwin</title><content type="html">Out of the box &lt;a href="http://www.scala-lang.org/"&gt;Scala&lt;/a&gt; support &lt;a href="http://www.cygwin.com/"&gt;Cygwin&lt;/a&gt;, but this is only with the Windows command prompt-based bash terminal.  If you have opted for the more UNIX-like terminal of &lt;a href="http://blog.andrewbeacock.com/2008/12/rxvt-better-console-for-cygwin-unix-on.html"&gt;RXVT&lt;/a&gt; then you will find that although the interactive Scala interpreter runs, you can't get it to do anything!&lt;br /&gt;
&lt;br /&gt;
This has been raised as a bug (&lt;a href="http://lampsvn.epfl.ch/trac/scala/ticket/2097"&gt;Ticket #2097&lt;/a&gt;) against the Scala project and graehl even &lt;a href="http://lampsvn.epfl.ch/trac/scala/attachment/ticket/2097/tool-unix.diff"&gt;posted a patch&lt;/a&gt; to changed the generation of the scala runtime scripts.&amp;nbsp; As my Scala install was based on the downloaded Windows binaries (&lt;a href="http://www.scala-lang.org/downloads/distrib/files/scala-2.7.6.final.zip" style="text-decoration: none;"&gt;scala-2.7.6.final.zip&lt;/a&gt;) I couldn't directly use this patch, but I could examine it to see what graehl's fix was.&lt;br /&gt;
&lt;br /&gt;
It appears that the key bit was to add the following &lt;a href="http://www.coderanch.com/t/178539/Associate-Certification-SCJA/certification/What-java-D-command-line"&gt;Java command line option&lt;/a&gt; to the java statement that starts the scala interactive interpreter:&lt;pre class="brush:bash"&gt;-Djline.terminal=jline.UnixTerminal&lt;/pre&gt;So the last line of my &lt;code&gt;bin/scala&lt;/code&gt; file is:&lt;pre class="brush:bash"&gt;exec "${JAVACMD:=java}" $JAVA_OPTS -cp "$TOOL_CLASSPATH" -Dscala.home="$SCALA_HOME" -Denv.classpath="$CLASSPATH" -Denv.emacs="$EMACS" -Djline.terminal=jline.UnixTerminal scala.tools.nsc.MainGenericRunner&amp;nbsp; "$@"&lt;/pre&gt;This appears to work, my interactive environment is now interactive!&lt;br /&gt;
&lt;br /&gt;
Technorati Tags: &lt;a href="http://www.technorati.com/tags/Scala" rel="tag"&gt;Scala&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Cygwin" rel="tag"&gt;Cygwin&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/RXVT" rel="tag"&gt;RXVT&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Andrew%20Beacock" rel="tag"&gt;Andrew Beacock&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11593374-1428129130449503441?l=blog.andrewbeacock.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=e9ukcMC1zgo:RlEqrny5p7Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=e9ukcMC1zgo:RlEqrny5p7Q:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=e9ukcMC1zgo:RlEqrny5p7Q:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=e9ukcMC1zgo:RlEqrny5p7Q:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=e9ukcMC1zgo:RlEqrny5p7Q:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=e9ukcMC1zgo:RlEqrny5p7Q:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=e9ukcMC1zgo:RlEqrny5p7Q:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.andrewbeacock.com/feeds/1428129130449503441/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11593374&amp;postID=1428129130449503441" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/1428129130449503441?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/1428129130449503441?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/andrewbeacock/~3/e9ukcMC1zgo/how-to-get-scala-working-with-rxvt.html" title="How to get Scala working with the RXVT terminal on Cygwin" /><author><name>Andy B</name><uri>http://www.blogger.com/profile/01039992884679308726</uri><email>blog@andrewbeacock.com</email><gd:extendedProperty name="OpenSocialUserId" value="16044632545316934027" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.andrewbeacock.com/2009/10/how-to-get-scala-working-with-rxvt.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8EQXk-cCp7ImA9WxNXGEs.&quot;"><id>tag:blogger.com,1999:blog-11593374.post-861494886205118584</id><published>2009-10-06T22:33:00.000+01:00</published><updated>2009-10-06T22:33:20.758+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-06T22:33:20.758+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Guitar" /><title>Tommy Emmanuel being VERY creative with an acoustic guitar and some clever delay</title><content type="html">I don't often post about guitar stuff as I really want to keep this blog focused on the tech side of my life but I couldn't help but pass this YouTube link on:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://guitarforworship.wordpress.com/2009/09/22/delay-creative-uses-for-it/"&gt;Delay (&amp; Creative Uses for It)&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
I started to watch it and was soon completely captivated by it, hope you like it too!&lt;br /&gt;
&lt;br /&gt;
&lt;span class="technoratitag"&gt;Technorati Tags: &lt;a href="http://www.technorati.com/tags/Tommy Emmanuel," rel="tag"&gt;Tommy Emmanuel,&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Guitar," rel="tag"&gt;Guitar,&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Andrew Beacock" rel="tag"&gt;Andrew Beacock&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11593374-861494886205118584?l=blog.andrewbeacock.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=M5Tm_5-DdgY:fPNVtdTtku4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=M5Tm_5-DdgY:fPNVtdTtku4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=M5Tm_5-DdgY:fPNVtdTtku4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=M5Tm_5-DdgY:fPNVtdTtku4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=M5Tm_5-DdgY:fPNVtdTtku4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=M5Tm_5-DdgY:fPNVtdTtku4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=M5Tm_5-DdgY:fPNVtdTtku4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.andrewbeacock.com/feeds/861494886205118584/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11593374&amp;postID=861494886205118584" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/861494886205118584?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/861494886205118584?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/andrewbeacock/~3/M5Tm_5-DdgY/tommy-emmanuel-being-very-creative-with.html" title="Tommy Emmanuel being VERY creative with an acoustic guitar and some clever delay" /><author><name>Andy B</name><uri>http://www.blogger.com/profile/01039992884679308726</uri><email>blog@andrewbeacock.com</email><gd:extendedProperty name="OpenSocialUserId" value="16044632545316934027" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.andrewbeacock.com/2009/10/tommy-emmanuel-being-very-creative-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEBQ3o-cCp7ImA9WxNXEkg.&quot;"><id>tag:blogger.com,1999:blog-11593374.post-8064758483790162148</id><published>2009-09-29T21:04:00.000+01:00</published><updated>2009-09-29T21:04:12.458+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-29T21:04:12.458+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><title>The next Manchester Spring User Group meetup is 13th October</title><content type="html">&lt;a href="http://www.springusergroup.org.uk/meetings/"&gt;Details&lt;/a&gt; of the next Manchester Spring User Group meeting are now available, as a taster for what it could be like I &lt;a href="http://blog.andrewbeacock.com/2009/08/summary-of-augusts-manchester-spring.html"&gt;blogged about the last meeting&lt;/a&gt;.  It looks like the main talk is going be from &lt;a href="http://www.jonaspartner.com/"&gt;Jonas Partner&lt;/a&gt; on &lt;a href="http://www.springsource.org/spring-integration"&gt;Spring Integration&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
It's a 6pm start in the &lt;a href="http://maps.google.co.uk/maps?q=53.464223,-2.226932&amp;num=1&amp;t=h&amp;sll=53.464374,-2.22977&amp;sspn=0.006295,0.006295&amp;hl=en&amp;ie=UTF8&amp;ll=53.464145,-2.226869&amp;spn=0.001154,0.00239&amp;z=19&amp;iwloc=A"&gt;usual place&lt;/a&gt; (there's a lovely space-age building where the building site is on Google maps...) Remember there's free parking if you pull up to the barrier and mention the Spring User Group.&lt;br /&gt;
&lt;br /&gt;
Hope to see you there - if you see a skinhead with glasses please come over and say hello!  Oh and make sure you &lt;a href="http://www.springusergroup.org.uk/registration/"&gt;register&lt;/a&gt; to be guaranteed entry!&lt;br /&gt;
&lt;br /&gt;
&lt;span class="technoratitag"&gt;Technorati Tags: &lt;a href="http://www.technorati.com/tags/Manchester" rel="tag"&gt;Manchester&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Spring" rel="tag"&gt;Spring&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/User Group" rel="tag"&gt;User Group&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Spring Integration" rel="tag"&gt;Spring Integration&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Jonas Partner" rel="tag"&gt;Jonas Partner&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Andrew Beacock" rel="tag"&gt;Andrew Beacock&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11593374-8064758483790162148?l=blog.andrewbeacock.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=min7ZqIR1X8:KQdeXr98xvc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=min7ZqIR1X8:KQdeXr98xvc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=min7ZqIR1X8:KQdeXr98xvc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=min7ZqIR1X8:KQdeXr98xvc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=min7ZqIR1X8:KQdeXr98xvc:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=min7ZqIR1X8:KQdeXr98xvc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=min7ZqIR1X8:KQdeXr98xvc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.andrewbeacock.com/feeds/8064758483790162148/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11593374&amp;postID=8064758483790162148" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/8064758483790162148?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/8064758483790162148?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/andrewbeacock/~3/min7ZqIR1X8/next-manchester-spring-user-group.html" title="The next Manchester Spring User Group meetup is 13th October" /><author><name>Andy B</name><uri>http://www.blogger.com/profile/01039992884679308726</uri><email>blog@andrewbeacock.com</email><gd:extendedProperty name="OpenSocialUserId" value="16044632545316934027" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.andrewbeacock.com/2009/09/next-manchester-spring-user-group.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4BSHY4eip7ImA9WxNRFkw.&quot;"><id>tag:blogger.com,1999:blog-11593374.post-4813657733373373796</id><published>2009-09-10T21:57:00.001+01:00</published><updated>2009-09-10T22:42:39.832+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-10T22:42:39.832+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><title>Use Pidgin? Send screenshots with this great new plugin!</title><content type="html">I've been a big fan of &lt;a href="http://www.pidgin.im/"&gt;Pidgin (formerly Gaim)&lt;/a&gt; for the past few years and one feature that I've always wanted was an easy way to send a screenshot to a buddy.&lt;br /&gt;
&lt;br /&gt;
Well &lt;a href="http://http://raoulito.info/"&gt;Raoul Berger&lt;/a&gt; obviously wanted it too and he's gone and developed the excellent &lt;a href="http://raoulito.info/plugins/pidgin_screenshot/"&gt;'send screenshot' plugin&lt;/a&gt;.  Download and install it and make sure you have enabled it:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_Vu_eUOpUOMk/SqlnkRZG39I/AAAAAAAAAn4/5w4fpl-5pyw/s1600-h/enable_send_screenshot_plugin.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_Vu_eUOpUOMk/SqlnkRZG39I/AAAAAAAAAn4/5w4fpl-5pyw/s200/enable_send_screenshot_plugin.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Then you can right-click and buddy in your buddy list and choose 'Send screen capture...' - your screen then darkens and you have a crosshair with which to select the region that you would like to send to you 'buddy':&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_Vu_eUOpUOMk/SqlnrzSeONI/AAAAAAAAAoA/7QxQmBUmFKE/s1600-h/buddy_list.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_Vu_eUOpUOMk/SqlnrzSeONI/AAAAAAAAAoA/7QxQmBUmFKE/s200/buddy_list.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
You can also send a screenshot within a existing conversation by choosing the 'Convesation' -&amp;gt; 'More' -&amp;gt; 'Send screen capture...' option:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_Vu_eUOpUOMk/SqlnzbVx_2I/AAAAAAAAAoI/GetHiPMNi1g/s1600-h/within_conversation.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_Vu_eUOpUOMk/SqlnzbVx_2I/AAAAAAAAAoI/GetHiPMNi1g/s200/within_conversation.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Another and fast, better way is to ensure that you have 'Show detailed information' selected in the 'Conversations' tab of the preferences and then you can simply right-click on the person's banner and select the option:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_Vu_eUOpUOMk/Sqln3nyNVRI/AAAAAAAAAoQ/ftGVKTh5bf4/s1600-h/within_conversation_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_Vu_eUOpUOMk/Sqln3nyNVRI/AAAAAAAAAoQ/ftGVKTh5bf4/s200/within_conversation_2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Also, after an email conversation with the &lt;a href="http://raoulito.info/plugins/pidgin_screenshot/"&gt;send screenshot plugin&lt;/a&gt; author he's mentioned that he's looking to add a keyboard shortcut in the next release, which will make the whole process even slicker!&lt;br /&gt;
&lt;br /&gt;
This is a great plugin and thanks to Raoul for taking the time to develop it (for a number of platforms I may add).&lt;br /&gt;
&lt;br /&gt;
Technorati Tags: &lt;a href="http://www.technorati.com/tags/Pidgin" rel="tag"&gt;Pidgin&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Screenshot" rel="tag"&gt;Screenshot&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/IM" rel="tag"&gt;IM&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Raoul%20Berger" rel="tag"&gt;Raoul Berger&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Andrew%20Beacock" rel="tag"&gt;Andrew Beacock&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11593374-4813657733373373796?l=blog.andrewbeacock.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=3LRSvF7cezw:VKbUDOwxk1Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=3LRSvF7cezw:VKbUDOwxk1Q:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=3LRSvF7cezw:VKbUDOwxk1Q:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=3LRSvF7cezw:VKbUDOwxk1Q:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=3LRSvF7cezw:VKbUDOwxk1Q:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=3LRSvF7cezw:VKbUDOwxk1Q:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=3LRSvF7cezw:VKbUDOwxk1Q:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.andrewbeacock.com/feeds/4813657733373373796/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11593374&amp;postID=4813657733373373796" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/4813657733373373796?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/4813657733373373796?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/andrewbeacock/~3/3LRSvF7cezw/use-pidgin-send-screenshots-with-this.html" title="Use Pidgin? Send screenshots with this great new plugin!" /><author><name>Andy B</name><uri>http://www.blogger.com/profile/01039992884679308726</uri><email>blog@andrewbeacock.com</email><gd:extendedProperty name="OpenSocialUserId" value="16044632545316934027" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_Vu_eUOpUOMk/SqlnkRZG39I/AAAAAAAAAn4/5w4fpl-5pyw/s72-c/enable_send_screenshot_plugin.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.andrewbeacock.com/2009/09/use-pidgin-send-screenshots-with-this.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QGSXo4cSp7ImA9WxNREUU.&quot;"><id>tag:blogger.com,1999:blog-11593374.post-645663618840951121</id><published>2009-09-05T23:22:00.000+01:00</published><updated>2009-09-05T23:22:08.439+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-05T23:22:08.439+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Shopping" /><category scheme="http://www.blogger.com/atom/ns#" term="Guitar" /><title>You NEED an X-mini II speaker for your MP3 player or iPod</title><content type="html">My wife was looking around for an external speaker for her MP3 player and in our searching we came across the &lt;a href="http://www.x-mini.com/"&gt;XMI X-Mini speaker&lt;/a&gt; on &lt;a href="http://www.amazon.co.uk/gp/product/B001UEBN42?ie=UTF8&amp;tag=andrewbeacock-21&amp;linkCode=xm2&amp;creativeASIN=B001UEBN42"&gt;Amazon&lt;/a&gt;.  This little mono speaker has 105 five star reviews (out of 115) on &lt;a href="http://www.amazon.co.uk/gp/product/B001UEBN42?ie=UTF8&amp;tag=andrewbeacock-21&amp;linkCode=xm2&amp;creativeASIN=B001UEBN42"&gt;Amazon&lt;/a&gt; and at the time was £20 (it's now &lt;a href="http://www.amazon.co.uk/gp/product/B001UEBN42?ie=UTF8&amp;tag=andrewbeacock-21&amp;linkCode=xm2&amp;creativeASIN=B001UEBN42"&gt;£16.96&lt;/a&gt; - was £15 for a short time).&lt;br /&gt;
&lt;br /&gt;
It's an absolutely cracking speaker - the internal (rechargeable) battery lasts for hours and this thing can really pump it out - with the bass expansion chamber opened up it sounds amazing.  We have used it as a speaker for an MP3 player as well as an output speaker for a guitar headphone amp - true rock guitar sound on the move!&lt;br /&gt;
&lt;br /&gt;
If you are on the look out for a mini speaker for your MP3 player you will not be disappointed with an X-Mini!&lt;br /&gt;
&lt;br /&gt;
&lt;span class="technoratitag"&gt;Technorati Tags: &lt;a href="http://www.technorati.com/tags/" rel="tag"&gt;&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/XMI" rel="tag"&gt;XMI&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/X-Mini" rel="tag"&gt;X-Mini&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/MP3" rel="tag"&gt;MP3&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/speaker" rel="tag"&gt;speaker&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Andrew Beacock" rel="tag"&gt;Andrew Beacock&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11593374-645663618840951121?l=blog.andrewbeacock.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=jqdelAS-i1Q:xkwY7Q5zyWw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=jqdelAS-i1Q:xkwY7Q5zyWw:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=jqdelAS-i1Q:xkwY7Q5zyWw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=jqdelAS-i1Q:xkwY7Q5zyWw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=jqdelAS-i1Q:xkwY7Q5zyWw:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=jqdelAS-i1Q:xkwY7Q5zyWw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=jqdelAS-i1Q:xkwY7Q5zyWw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.andrewbeacock.com/feeds/645663618840951121/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11593374&amp;postID=645663618840951121" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/645663618840951121?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/645663618840951121?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/andrewbeacock/~3/jqdelAS-i1Q/you-need-x-mini-ii-speaker-for-your-mp3.html" title="You NEED an X-mini II speaker for your MP3 player or iPod" /><author><name>Andy B</name><uri>http://www.blogger.com/profile/01039992884679308726</uri><email>blog@andrewbeacock.com</email><gd:extendedProperty name="OpenSocialUserId" value="16044632545316934027" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.andrewbeacock.com/2009/09/you-need-x-mini-ii-speaker-for-your-mp3.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEASXo9fCp7ImA9WxNTFEg.&quot;"><id>tag:blogger.com,1999:blog-11593374.post-7212168280139325643</id><published>2009-08-16T22:01:00.001+01:00</published><updated>2009-08-16T22:04:08.464+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-16T22:04:08.464+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><title>Summary of August's Manchester Spring User Group Meeting</title><content type="html">The August Spring meeting was held on Tuesday 11th August at the same venue as &lt;a href="http://blog.andrewbeacock.com/2009/06/summary-of-junes-manchester-spring-user.html"&gt;June's meeting&lt;/a&gt;.  The location was the the excellent &lt;a href="http://skillsmatter.com/location-details/java-jee/382/55"&gt;University of Manchester Core Technology Facility&lt;/a&gt; which has free parking immediately outside the building, just press the buzzer and mention the Spring User Group and they let you in. The evening was introduced by Guy Remond of &lt;a href="http://www.cakesolutions.net/"&gt;Cake Solutions&lt;/a&gt; who laid out the agenda.&lt;br /&gt;&lt;br /&gt;The first talk was by &lt;a href="http://www.cakesolutions.net/teamblogs/category/cornels-blog/"&gt;Cornel Foltea&lt;/a&gt; of Cake Solutions entitled:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Hello World! (OSGi debugging in IDEA)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Cornel started out by giving a little overview of &lt;a href="http://www.osgi.org/"&gt;OSGi&lt;/a&gt; including a walk-through of the layered approach that the Open Service Gateway Initiative takes. He pointed out that it's key objectives were:&lt;ul&gt;&lt;li&gt;modularization&lt;br /&gt;&lt;li&gt;versioning&lt;br /&gt;&lt;li&gt;services&lt;br /&gt;&lt;li&gt;access control&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Vu_eUOpUOMk/SoNHKACSfzI/AAAAAAAAAmc/5Xw_CiHkdYg/s1600-h/osgi.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:right;cursor:pointer; cursor:hand;width: 400px; height: 244px;" src="http://4.bp.blogspot.com/_Vu_eUOpUOMk/SoNHKACSfzI/AAAAAAAAAmc/5Xw_CiHkdYg/s400/osgi.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5369213417889627954" /&gt;&lt;/a&gt;The key component of any OSGi system is a '&lt;a href="http://en.wikipedia.org/wiki/OSGi#Bundles"&gt;bundle&lt;/a&gt;' which get deployed into an OSGi container.  A bundle can then be dynamically installed, started, stopped, updated and uninstalled.  They are modular in nature 'assuming nothing' - they are a JAR file, with it's contents protected from access unless it explicitly exports it's services and declares that it needs to import services offered by other bundles.  Multiple versions of the same bundle can exist in the application server without conflicting with each other.  OSGi also provides a &lt;a href="http://www.osgi.org/About/Technology#Standard_Services"&gt;Service Registry&lt;/a&gt; so that bundles can register (export) their services for use by other bundles.&lt;br /&gt;&lt;br /&gt;Then Cornel went on to talk about what OSGi features &lt;a href="http://www.jetbrains.com/idea/"&gt;IntelliJ's IDEA&lt;/a&gt; currently offers (a MANIFEST.MF editor and OSGi facet detection) and how to create a "Hello World!" application OSGi-style.  The heart of this is the &lt;a href="http://www.osgi.org/javadoc/r4v41/org/osgi/framework/BundleActivator.html"&gt;BundleActivator interface&lt;/a&gt; that you need implement to provide &lt;code&gt;start&lt;/code&gt; and &lt;code&gt;stop&lt;/code&gt; methods called by the OSGi application server (make sure you have downloaded the OSGi framework jar and add it to your classpath first):&lt;pre class="brush:java"&gt;package com.cake.dmsd.primer;&lt;br /&gt;&lt;br /&gt;import org.osgi.framework.BundleActivator;&lt;br /&gt;import org.osgi.framework.BundleContext;&lt;br /&gt;&lt;br /&gt;public class HelloWorldActivator implements BundleActivator {&lt;br /&gt;&lt;br /&gt;    public void start(BundleContext context) throws Exception {&lt;br /&gt;        System.out.println("Hello, World.");&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void stop(BundleContext context) throws Exception {&lt;br /&gt;        System.out.println("Goodbye World.");&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Then you need to create the jar's MANIFEST.MF file to look like the following:&lt;pre class="brush:css"&gt;Manifest-Version: 1.0&lt;br /&gt;Bundle-Name: Helloworld Bundle&lt;br /&gt;Bundle-Activator: com.cake.dmsd.primer.HelloWorldActivator&lt;br /&gt;Import-Package: org.osgi.framework;version="1.4.0"&lt;br /&gt;Bundle-ManifestVersion: 2&lt;br /&gt;Bundle-SymbolicName: helloworld&lt;br /&gt;Bundle-Version: 1.0.0&lt;br /&gt;&lt;/pre&gt;Next he talked a little about setting up a remote server 'Debug Configuration' to allow IDEA to connect to the debug port of the &lt;a href="http://www.springsource.com/products/dmserver"&gt;dmServer&lt;/a&gt; (think this picture paints a thousand words!) - note the port number of &lt;code&gt;5005&lt;/code&gt; and the fact that one of the parameters is &lt;code&gt;-Xdebug&lt;/code&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Vu_eUOpUOMk/SoNHJziAPhI/AAAAAAAAAmU/p9C7esEINPw/s1600-h/idea_dmserver_debugging.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 325px;" src="http://1.bp.blogspot.com/_Vu_eUOpUOMk/SoNHJziAPhI/AAAAAAAAAmU/p9C7esEINPw/s400/idea_dmserver_debugging.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5369213414532988434" /&gt;&lt;/a&gt;&lt;br /&gt;Then he showed screenshots of shelled out to a console to start up the dmServer in debug mode by running:&lt;pre class="brush:shell"&gt;./startup.sh -debug 5005&lt;/pre&gt;Once that was running the next step was to telnet to the dmServer running on the local machine and install the previously created bundle:&lt;pre class="brush:shell"&gt;telnet localhost 2401&lt;br /&gt;install &lt;file-based URI pointing at the expanded development version of the bundle that IDEA is building into&gt;&lt;/pre&gt;This step gives us a bundle ID (111 in Cornel's example) which refers to the specific instance of the bundle that we have just installed.  This ID means that we can start and stop the bundle in the future using &lt;code&gt;start 111&lt;/code&gt; and &lt;code&gt;stop 111&lt;/code&gt; from the dmServer telnet console.&lt;br /&gt;&lt;br /&gt;After Cornel's talk there was a little break which contained a mention of the Manchester Spring User Group sponsors: &lt;a href="http://www.umic.co.uk/"&gt;UMIC&lt;/a&gt;, &lt;a href="http://www.hays.com/it/"&gt;Hays IT&lt;/a&gt;, &lt;a href="http://skillsmatter.com/"&gt;Skills Matter&lt;/a&gt;, &lt;a href="http://www.springsource.com/"&gt;SpringSource&lt;/a&gt; &amp; &lt;a href="http://www.cakesolutions.net/"&gt;Cake Solutions&lt;/a&gt; and the new sponsor of the event: &lt;a href="http://www.linkedin.com/pub/keith-dauris/a/490/a02"&gt;Keith Dauris&lt;/a&gt; of &lt;a href="http://www.fdmgroup.com/"&gt;FDM Group&lt;/a&gt; (and it's associated &lt;a href="http://www.fdmacademy.com/"&gt;FDM Academy&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;The next talk was by &lt;a href="http://blog.springsource.com/author/dsyer/"&gt;Dave Syer&lt;/a&gt; and his talk was:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Spring 3.0 and Spring Batch Quick Tour&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The first half of Dave's presentation was on the new features of &lt;a href="http://blog.springsource.com/2009/02/25/spring-framework-30-m2-released/"&gt;Spring 3.0&lt;/a&gt; and it was an excellent way to quickly get an idea of the type of stuff that's coming very soon.  Spring 3.0 is the first version of Spring to only work on Java 5 and above, meaning that even more annotation support can be included.  It's also introducing the &lt;a href="http://www.h-online.com/open/Spring-3-is-in-the-air-a-first-look--/features/112683/3"&gt;Spring Expression Language&lt;/a&gt; (influenced by Unified EL++), full &lt;a href="http://en.wikipedia.org/wiki/Representational_State_Transfer"&gt;REST support&lt;/a&gt; and declarative scheduling &amp; background task execution.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://static.springsource.org/spring-ws/sites/1.5/reference/html/oxm.html"&gt;Object &lt;-&gt; XML Mapping (OXM)&lt;/a&gt; has been revised to offer better support for REST stateless mappers and SQL XML access.  The &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/beans/PropertyEditor.html"&gt;JDK PropertyEditors&lt;/a&gt; are being superceded by a revised binding &amp; type conversion infrastructure.  If you don't like writing your Spring bean configuration in XML then you are in luck with Spring 3.0 - you can now write it in Java (although I thought the idea of the config _not_ in Java was that you could change it without recompile?  Maybe it would have been better to offer non-XML config via something like &lt;a href="http://groovy.codehaus.org/"&gt;Groovy&lt;/a&gt;?)&lt;br /&gt;&lt;br /&gt;Full REST support is now available (with a custom filter to help support PUT &amp; DELETE) which includes annotations to be able to extract values from within the URL:&lt;pre class="brush:java"&gt;@RequestMapping(value="/rewards/{id}", method="GET")&lt;br /&gt;public Reward reward(@PathVariable("id") long id) {&lt;br /&gt;    ...&lt;br /&gt;}&lt;/pre&gt;By using multiple &lt;code&gt;@PathVariable&lt;/code&gt; annotations you will be able to offer some pretty 'deep' URLs, meaning that you won't be held back by the normal servlet mappings. Dave mentioned that someone was using some shell scripts consisting of &lt;a href="http://linux.die.net/man/1/wget"&gt;wget&lt;/a&gt;/&lt;a href="http://linux.die.net/man/1/curl"&gt;curl&lt;/a&gt; and pipes to create some pretty complex business logic.  Non-HTML representations are also offered 'out of the box' so it's very easy to offer &lt;a href="http://en.wikipedia.org/wiki/JSON"&gt;JSON&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/XML"&gt;XML&lt;/a&gt;, &lt;a href=" http://en.wikipedia.org/wiki/Atom_%28standard%29"&gt;ATOM&lt;/a&gt;, etc. without using complex URLs or query strings.&lt;br /&gt;&lt;br /&gt;Scheduling has been given a complete overhaul in Spring 3.0, with enhanced &lt;code&gt;&lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/package-summary.html"&gt;java.util.concurrent&lt;/a&gt;&lt;/code&gt; support and a new &lt;a href="http://static.springsource.org/spring/docs/3.0.0.M3/javadoc-api/org/springframework/scheduling/TaskScheduler.html"&gt;TaskScheduler&lt;/a&gt; with triggers (a little like a simplified &lt;a href="http://www.opensymphony.com/quartz/"&gt;Quartz&lt;/a&gt;).  There is a new &lt;code&gt;@Async&lt;/code&gt; annotation (indicating that this method should be run in the background) along with an &lt;code&gt;@Scheduled&lt;/code&gt; annotation for CRON-triggered methods.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://commons.apache.org/attributes/"&gt;Commons Attributes&lt;/a&gt; has now been removed along with traditional &lt;a href=" http://www.oracle.com/technology/products/ias/toplink/index.html"&gt;TopLink&lt;/a&gt; and &lt;a href="http://struts.apache.org/1.x/"&gt;Struts 1.x&lt;/a&gt; (subclass-style).  Traditional MVC controllers are now marked as &lt;a href=" http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Deprecated.html"&gt;deprecated&lt;/a&gt; along with &lt;a href="http://junit.sourceforge.net/doc/cookbook/cookbook.htm"&gt;JUnit&lt;/a&gt; 3.8 support (as why would you not want to use JUnit the annotated way?) and several other outdated helper classes.&lt;br /&gt;&lt;br /&gt;Expect a &lt;a href="http://en.wikipedia.org/wiki/Software_release_life_cycle#General_availability_.28GA.29"&gt;GA release&lt;/a&gt; of Spring 3.0 sometime after August, and a 3.1 release in Q4 2009.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Vu_eUOpUOMk/Sohx3Nd5WgI/AAAAAAAAAmk/jBY2mtnHhLo/s1600-h/batch.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 305px; height: 320px;" src="http://4.bp.blogspot.com/_Vu_eUOpUOMk/Sohx3Nd5WgI/AAAAAAAAAmk/jBY2mtnHhLo/s320/batch.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5370667748961114626" /&gt;&lt;/a&gt;&lt;br /&gt;Dave's second presentation was on &lt;a href="http://static.springsource.org/spring-batch/"&gt;Spring Batch&lt;/a&gt;, which he has been the project leader on for the past three years (version 2.0 was released back in April). He started with an overview of the architecture, saying that the Batch Infrastructure layer contains reusable low level stuff: flat files, XML, database configuration.  The Batch Core layer contains the quality of service (QoS), audibility and management information and the Application is your business logic.&lt;br /&gt;&lt;br /&gt;He said that in it's most basic form it was a "glorified state management system" and then proceeded to describe some of the key objects that make up the heart of Spring Batch (item oriented processing, the &lt;a href="http://static.springsource.org/spring-batch/apidocs/org/springframework/batch/core/Step.html"&gt;Step&lt;/a&gt;, &lt;a href="http://static.springsource.org/spring-batch/apidocs/org/springframework/batch/core/Job.html"&gt;Job&lt;/a&gt; &amp; &lt;a href="http://static.springsource.org/spring-batch/apidocs/org/springframework/batch/core/launch/JobLauncher.html"&gt;JobLauncher&lt;/a&gt; classes).   The Quality of Service features are interesting as they allow you to detect job and item failures and then deal with them in one of three ways: try it again (transient), ignore it and maybe retry it later (Skippable), or mark it as needing manual intervention (Fatal).&lt;br /&gt;&lt;br /&gt;Dave then gave a brief overview of a number of different strategies in which you can introduce multi-threaded behaviour to get your jobs done faster, these included:&lt;ul&gt;&lt;li&gt;Sequential Execution&lt;br /&gt;&lt;li&gt;Multi-threaded Step&lt;br /&gt;&lt;li&gt;Parallel Execution&lt;br /&gt;&lt;li&gt;Remote Chunking&lt;br /&gt;&lt;li&gt;Partitioning&lt;/ul&gt;Note: Please refer to &lt;a href="http://www.cakesolutions.net/teamblogs/wp-content/uploads/2009/08/SUG-David-Syer-Spring-Batch.zip"&gt;Dave's slides&lt;/a&gt; for details regarding any of the above points...&lt;br /&gt;&lt;br /&gt;Dave then gave us a little teaser with a run through of a rather useful-looking Spring Batch Administration interface, allowing you to view and manage your 'jobs' and the 'executions' of those jobs providing full details all the way down to stacktraces if the execution failed.  This really did look like an extremely useful tool and one that will make Spring Batch much easier to 'sell' to management.  Here are a few screenshots (kindly provided by Dave himself):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Vu_eUOpUOMk/SohyPhal82I/AAAAAAAAAm8/yJgr29MehdM/s1600-h/batch_admin1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 248px;" src="http://2.bp.blogspot.com/_Vu_eUOpUOMk/SohyPhal82I/AAAAAAAAAm8/yJgr29MehdM/s400/batch_admin1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5370668166632829794" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Vu_eUOpUOMk/SohyPMJMEbI/AAAAAAAAAm0/Mzk9UqvpRJA/s1600-h/batch_admin2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 142px;" src="http://3.bp.blogspot.com/_Vu_eUOpUOMk/SohyPMJMEbI/AAAAAAAAAm0/Mzk9UqvpRJA/s400/batch_admin2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5370668160922685874" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Vu_eUOpUOMk/SohyO87RrII/AAAAAAAAAms/i0ZR9spwwJM/s1600-h/batch_admin3.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 178px;" src="http://3.bp.blogspot.com/_Vu_eUOpUOMk/SohyO87RrII/AAAAAAAAAms/i0ZR9spwwJM/s400/batch_admin3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5370668156837801090" /&gt;&lt;/a&gt;&lt;br /&gt;That was the official end to the evening, but SpringSource were buying the first round in the &lt;a href="http://www.qype.co.uk/place/155848-The-Bowling-Green-Manchester"&gt;Bowling Green pub&lt;/a&gt; afterwards, so the majority of attendees carried on the discussions there (thanks for the beer SpringSource!).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Note&lt;/span&gt;: Both &lt;a href="http://www.cakesolutions.net/teamblogs/2009/08/12/spring-user-group-speaker-icebreaker/"&gt;Cornel's and Dave's presentations&lt;/a&gt; can be found over on the &lt;a href="http://www.cakesolutions.net/teamblogs/2009/08/12/spring-user-group-speaker-icebreaker/"&gt;Cake Solutions Blog&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span class="technoratitag"&gt;Technorati Tags: &lt;a href="http://www.technorati.com/tags/Manchester" rel="tag"&gt;Manchester&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Spring" rel="tag"&gt;Spring&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/User Group" rel="tag"&gt;User Group&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Guy Remond" rel="tag"&gt;Guy Remond&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Cornel Foltea" rel="tag"&gt;Cornel Foltea&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Cake Solutions" rel="tag"&gt;Cake Solutions&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Dave Syer" rel="tag"&gt;Dave Syer&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/SpringSource" rel="tag"&gt;SpringSource&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Andrew Beacock" rel="tag"&gt;Andrew Beacock&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11593374-7212168280139325643?l=blog.andrewbeacock.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=KQsIep_xYEI:czEWKiPmKy0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=KQsIep_xYEI:czEWKiPmKy0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=KQsIep_xYEI:czEWKiPmKy0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=KQsIep_xYEI:czEWKiPmKy0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=KQsIep_xYEI:czEWKiPmKy0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=KQsIep_xYEI:czEWKiPmKy0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=KQsIep_xYEI:czEWKiPmKy0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.andrewbeacock.com/feeds/7212168280139325643/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11593374&amp;postID=7212168280139325643" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/7212168280139325643?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/7212168280139325643?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/andrewbeacock/~3/KQsIep_xYEI/summary-of-augusts-manchester-spring.html" title="Summary of August's Manchester Spring User Group Meeting" /><author><name>Andy B</name><uri>http://www.blogger.com/profile/01039992884679308726</uri><email>blog@andrewbeacock.com</email><gd:extendedProperty name="OpenSocialUserId" value="16044632545316934027" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_Vu_eUOpUOMk/SoNHKACSfzI/AAAAAAAAAmc/5Xw_CiHkdYg/s72-c/osgi.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://blog.andrewbeacock.com/2009/08/summary-of-augusts-manchester-spring.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMEQ349fCp7ImA9WxJaFkk.&quot;"><id>tag:blogger.com,1999:blog-11593374.post-2234340972396368319</id><published>2009-08-07T13:00:00.001+01:00</published><updated>2009-08-07T13:00:02.064+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-07T13:00:02.064+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><title>Don't forget the next Manchester Spring User Group meeting!</title><content type="html">Just to reiterate my blog post from a few weeks ago:&lt;br /&gt;&lt;a href="http://blog.andrewbeacock.com/2009/07/next-manchester-spring-user-group.html"&gt;&lt;br /&gt;The next Manchester Spring User Group meetup is 11th August&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'll be there, come over and say "Hi" if you see a skinhead with glasses... ;)&lt;br /&gt;&lt;br /&gt;&lt;span class="technoratitag"&gt;Technorati Tags: &lt;a href="http://www.technorati.com/tags/Manchester" rel="tag"&gt;Manchester&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Spring" rel="tag"&gt;Spring&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/User Group" rel="tag"&gt;User Group&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Andrew Beacock" rel="tag"&gt;Andrew Beacock&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11593374-2234340972396368319?l=blog.andrewbeacock.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=vOGrAeeo0dA:EgXLRiKR-Wk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=vOGrAeeo0dA:EgXLRiKR-Wk:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=vOGrAeeo0dA:EgXLRiKR-Wk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=vOGrAeeo0dA:EgXLRiKR-Wk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=vOGrAeeo0dA:EgXLRiKR-Wk:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=vOGrAeeo0dA:EgXLRiKR-Wk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=vOGrAeeo0dA:EgXLRiKR-Wk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.andrewbeacock.com/feeds/2234340972396368319/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11593374&amp;postID=2234340972396368319" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/2234340972396368319?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/2234340972396368319?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/andrewbeacock/~3/vOGrAeeo0dA/dont-forget-next-manchester-spring-user.html" title="Don't forget the next Manchester Spring User Group meeting!" /><author><name>Andy B</name><uri>http://www.blogger.com/profile/01039992884679308726</uri><email>blog@andrewbeacock.com</email><gd:extendedProperty name="OpenSocialUserId" value="16044632545316934027" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.andrewbeacock.com/2009/08/dont-forget-next-manchester-spring-user.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQGRXs_eCp7ImA9WxJaFU0.&quot;"><id>tag:blogger.com,1999:blog-11593374.post-3529669967257429850</id><published>2009-08-05T21:26:00.001+01:00</published><updated>2009-08-05T21:32:04.540+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-05T21:32:04.540+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><title>Installing Ubuntu inside Windows XP using VirtualBox</title><content type="html">Since &lt;a href="http://blog.andrewbeacock.com/2008/04/my-excuse-for-why-i-didnt-blog-much-in.html"&gt;moving companies over a year ago&lt;/a&gt; I've missed my Ubuntu desktop having moved back to development on Windows.  I've had a few comments that some of my old Ubuntu blog posts are now out of date and I've wanted a way to ensure that they remain 'correct'.&lt;br /&gt;&lt;br /&gt;After discussing virtualisation with a friend I opted to install &lt;a href="http://www.virtualbox.org/"&gt;VirtualBox&lt;/a&gt; - an open source virtualization tool which is free and easy to get going.  This blog post contains my installation notes from installing VirtualBox and then creating an Ubuntu9 virtual machine...&lt;br /&gt;&lt;br /&gt;First I &lt;a href="http://www.virtualbox.org/wiki/Downloads"&gt;downloaded the latest version of VirtualBox&lt;/a&gt; (version 3.0.0) and selected the "VirtualBox 3.0.0 for Windows hosts".  Then I downloaded the latest version of the &lt;a href="http://www.ubuntu.com/getubuntu/download"&gt;Ubuntu Desktop edition&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;After both of these were fully downloaded I double-clicked the VirtualBox installer and choose to install everything.&lt;ul&gt;&lt;li&gt;When the "not passed Windows Logo testing" alerts pop-up choose to "Continue anyway" then register if you wish.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Once it's all installed run VirtualBox and click "New" to create a new virtual machine.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;On the "VM Name and OS Type" page I entered "Ubuntu9" as the name, and for the operating System I chose "Linux" and "Ubuntu" as the version.  On the "Memory" page I chose the default option, same for the "Virtual Hard Disk" setup.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Within the "New Disk Wizard" I chose "dynamically expanding storage" for the "Hard Disk Storage Type".&lt;/li&gt;&lt;/ul&gt;This will have just created a new virtual server called "Ubuntu9" in a "powered off" state.&lt;ul&gt;&lt;li&gt;Right-click "Ubuntu9" and choose "Settings...":&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Vu_eUOpUOMk/SlNB7NxEwFI/AAAAAAAAAkI/wSP3qnXzJsU/s1600-h/virtualbox_new.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 308px;" src="http://2.bp.blogspot.com/_Vu_eUOpUOMk/SlNB7NxEwFI/AAAAAAAAAkI/wSP3qnXzJsU/s400/virtualbox_new.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5355696867437232210" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Click "CD/DVD-ROM" on the left-handside, then click "Mount CD/DVD Drive", choose "ISO Image File" and click the folder icon to the right-handside:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Vu_eUOpUOMk/SlNB4disbdI/AAAAAAAAAkA/U93RGZVdVIg/s1600-h/virtualbox_settings.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 345px;" src="http://3.bp.blogspot.com/_Vu_eUOpUOMk/SlNB4disbdI/AAAAAAAAAkA/U93RGZVdVIg/s400/virtualbox_settings.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5355696820132277714" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The Virtual Media Manager windows appears.&lt;br /&gt;Click "Add" and browse to where the downloaded Ubuntu ISO image was saved and click "Open". Then click "Select".&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Vu_eUOpUOMk/SlNB1Dzu_MI/AAAAAAAAAj4/emn_kDMT7eo/s1600-h/virtualbox_media_manager.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 393px; height: 400px;" src="http://4.bp.blogspot.com/_Vu_eUOpUOMk/SlNB1Dzu_MI/AAAAAAAAAj4/emn_kDMT7eo/s400/virtualbox_media_manager.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5355696761684819138" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;You will now be back at the Settings window, just click "Ok"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Now select "Ubuntu9" and then click the "Start" button&lt;/li&gt;&lt;/ul&gt;The virtual server now starts with the Ubuntu disk image auto-mounted and boots from this image.  Use the cursor keys to select your default language and then choose "Install Ubuntu".&lt;br /&gt;&lt;br /&gt;Ubuntu will start to install and load up the Gnome based installation wizard.&lt;ul&gt;&lt;li&gt;Select your language, timezone and keyboard layout when prompted.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;You will now be presented with the disk formatting screen - choose "SCSI1 (0,0,0) (sda) 8.6GB ATA VBOX HARDDISK"&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Vu_eUOpUOMk/SlNBomCXhyI/AAAAAAAAAjs/yekFjTr-_DA/s1600-h/ubuntu_prepare_hard_disk.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 331px;" src="http://3.bp.blogspot.com/_Vu_eUOpUOMk/SlNBomCXhyI/AAAAAAAAAjs/yekFjTr-_DA/s400/ubuntu_prepare_hard_disk.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5355696547534702370" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Enter some user information and login details and then click the "Install" button - this was a little scary as the host box is my main PC and although I'm running the installation via the VirtualBox it's still felt strange thinking that I might be clicking to reformat my main drive with Linux...&lt;/li&gt;&lt;/ul&gt;Ubuntu will automatically install after the disk formatting is complete, this can take a while. If it gets stucks at the "checking mirrors" stage then you might have some issues with the networking setup - the Ubuntu setup wants to be able to connect to the internet.  I had to change my network settings from "NAT" to "Bridged" to get it working on my system.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Vu_eUOpUOMk/SlNBkLI87qI/AAAAAAAAAjk/o1I8TCJUDIY/s1600-h/ubuntu_installing.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 331px;" src="http://2.bp.blogspot.com/_Vu_eUOpUOMk/SlNBkLI87qI/AAAAAAAAAjk/o1I8TCJUDIY/s400/ubuntu_installing.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5355696471595085474" /&gt;&lt;/a&gt;&lt;br /&gt;If everything went ok you should now now be able to un-mount the Ubuntu disk image (via the Settings option) and start up your new Ubuntu machine:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Vu_eUOpUOMk/SlNBdrGEINI/AAAAAAAAAjc/YOtOTX__ztM/s1600-h/ubuntu_installed.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 332px;" src="http://4.bp.blogspot.com/_Vu_eUOpUOMk/SlNBdrGEINI/AAAAAAAAAjc/YOtOTX__ztM/s400/ubuntu_installed.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5355696359913824466" /&gt;&lt;/a&gt;&lt;br /&gt;That's it you can now use Ubuntu as if it was installed as your primary OS!&lt;br /&gt;&lt;br /&gt;&lt;span class="technoratitag"&gt;Technorati Tags: &lt;a href="http://www.technorati.com/tags/VirtualBox" rel="tag"&gt;VirtualBox&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Virtualization" rel="tag"&gt;Virtualization&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Ubuntu" rel="tag"&gt;Ubuntu&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Linux" rel="tag"&gt;Linux&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Windows" rel="tag"&gt;Windows&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Andrew Beacock" rel="tag"&gt;Andrew Beacock&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11593374-3529669967257429850?l=blog.andrewbeacock.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=422geODG7g0:O94jonUAo40:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=422geODG7g0:O94jonUAo40:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=422geODG7g0:O94jonUAo40:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=422geODG7g0:O94jonUAo40:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=422geODG7g0:O94jonUAo40:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=422geODG7g0:O94jonUAo40:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=422geODG7g0:O94jonUAo40:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.andrewbeacock.com/feeds/3529669967257429850/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11593374&amp;postID=3529669967257429850" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/3529669967257429850?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/3529669967257429850?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/andrewbeacock/~3/422geODG7g0/installing-ubuntu-inside-windows-xp.html" title="Installing Ubuntu inside Windows XP using VirtualBox" /><author><name>Andy B</name><uri>http://www.blogger.com/profile/01039992884679308726</uri><email>blog@andrewbeacock.com</email><gd:extendedProperty name="OpenSocialUserId" value="16044632545316934027" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_Vu_eUOpUOMk/SlNB7NxEwFI/AAAAAAAAAkI/wSP3qnXzJsU/s72-c/virtualbox_new.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://blog.andrewbeacock.com/2009/08/installing-ubuntu-inside-windows-xp.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcNRn87cCp7ImA9WxJbGEw.&quot;"><id>tag:blogger.com,1999:blog-11593374.post-3883117856562384959</id><published>2009-07-28T21:26:00.005+01:00</published><updated>2009-07-28T21:31:37.108+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-28T21:31:37.108+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><title>A great answer to the "What is Agile?" question</title><content type="html">My friend &lt;a href="http://www.agiledesign.co.uk/"&gt;David Draper&lt;/a&gt; has just posted a great response that he gave to a potential client recently in answer to the dreaded question "what, in a nutshell, does agile mean?"&lt;br /&gt;&lt;br /&gt;Check out &lt;a href="http://www.agiledesign.co.uk/uncategorized/what-is-agile-2/"&gt;David's blog for his answer&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span class="technoratitag"&gt;Technorati Tags: &lt;a href="http://www.technorati.com/tags/Agile" rel="tag"&gt;Agile&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/David Draper" rel="tag"&gt;David Draper&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Andrew Beacock" rel="tag"&gt;Andrew Beacock&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11593374-3883117856562384959?l=blog.andrewbeacock.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=YKpSmebQbCk:PpiCaPtMhF4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=YKpSmebQbCk:PpiCaPtMhF4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=YKpSmebQbCk:PpiCaPtMhF4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=YKpSmebQbCk:PpiCaPtMhF4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=YKpSmebQbCk:PpiCaPtMhF4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=YKpSmebQbCk:PpiCaPtMhF4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=YKpSmebQbCk:PpiCaPtMhF4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.andrewbeacock.com/feeds/3883117856562384959/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11593374&amp;postID=3883117856562384959" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/3883117856562384959?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/3883117856562384959?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/andrewbeacock/~3/YKpSmebQbCk/great-answer-to-what-is-agile-question.html" title="A great answer to the &quot;What is Agile?&quot; question" /><author><name>Andy B</name><uri>http://www.blogger.com/profile/01039992884679308726</uri><email>blog@andrewbeacock.com</email><gd:extendedProperty name="OpenSocialUserId" value="16044632545316934027" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://blog.andrewbeacock.com/2009/07/great-answer-to-what-is-agile-question.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8NRns9fip7ImA9WxJbEUo.&quot;"><id>tag:blogger.com,1999:blog-11593374.post-3720795749252325736</id><published>2009-07-20T21:12:00.003+01:00</published><updated>2009-07-21T13:04:57.566+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-21T13:04:57.566+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><title>Better Java Dates, Times &amp; Calendars with Joda-Time</title><content type="html">Anyone who has used Java to manipulate &lt;a href="http://java.sun.com/javase/6/docs/api/java/util/Date.html"&gt;Dates&lt;/a&gt; will know that it's one of the most frustrating parts of the core APIs - it should just be so easy!&lt;br /&gt;&lt;br /&gt;As an example, here is one way to create a 'date of birth' Date - in this object we want the time part of the Date to be all zeros (midnight):&lt;pre class="brush:java"&gt;import java.util.Calendar;&lt;br /&gt;import java.util.Date;&lt;br /&gt;&lt;br /&gt;Calendar calendar = Calendar.getInstance();&lt;br /&gt;calendar.clear();&lt;br /&gt;calendar.set(2004, Calendar.JULY, 10);&lt;br /&gt;Date dob = calendar.getTime();&lt;/pre&gt;There are a few gotchas to be aware of here, first is that you can't specify the month value as just "7" or "07" as that would give the month as August (as month 0 = January!) and the other is that without the call to &lt;code&gt;clear()&lt;/code&gt; the time part will be set to the time when the &lt;code&gt;Calendar.getInstance()&lt;/code&gt; was called.&lt;br /&gt;&lt;br /&gt;Now compare this to creating a 'date of birth' Date object using &lt;a href="http://joda-time.sourceforge.net/"&gt;Joda-Time&lt;/a&gt;:&lt;pre class="brush:java"&gt;import org.joda.time.DateMidnight;&lt;br /&gt;&lt;br /&gt;Date dob = new DateMidnight(2004, 07, 10).toDate();&lt;/pre&gt;The &lt;a href="http://joda-time.sourceforge.net/api-release/org/joda/time/DateMidnight.html"&gt;DateMidnight class&lt;/a&gt; indicates that the time part will be zeros (more explicit than the "clear()" method) and you don't have to use any constants to build up the months.&lt;br /&gt;&lt;br /&gt;The Joda-Time package is rammed full of useful bits like this, including &lt;a href="http://joda-time.sourceforge.net/key_instant.html"&gt;instants&lt;/a&gt;, &lt;a href="http://joda-time.sourceforge.net/key_period.html"&gt;periods&lt;/a&gt;, &lt;a href="http://joda-time.sourceforge.net/key_interval.html"&gt;intervals&lt;/a&gt;, &lt;a href="http://joda-time.sourceforge.net/key_duration.html"&gt;durations&lt;/a&gt;, &lt;a href="http://joda-time.sourceforge.net/userguide.html#Architecture_Overview"&gt;etc.&lt;/a&gt; as well as full calendar support and the ability to &lt;a href="http://blog.jayfields.com/2009/06/freezing-joda-time.html"&gt;'freeze time'&lt;/a&gt; (very useful for unit testing).&lt;br /&gt;&lt;br /&gt;It's a fantastic package and should be considered a replacement for the cumbersome &lt;a href="http://java.sun.com/javase/6/docs/api/java/util/Calendar.html"&gt;java.util.Calendar class&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span class="technoratitag"&gt;Technorati Tags: &lt;a href="http://www.technorati.com/tags/Java" rel="tag"&gt;Java&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Date" rel="tag"&gt;Date&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Calendar" rel="tag"&gt;Calendar&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/JodaTime" rel="tag"&gt;JodaTime&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Andrew Beacock" rel="tag"&gt;Andrew Beacock&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11593374-3720795749252325736?l=blog.andrewbeacock.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=oT38HSGapTw:plHsQ2AKUV0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=oT38HSGapTw:plHsQ2AKUV0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=oT38HSGapTw:plHsQ2AKUV0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=oT38HSGapTw:plHsQ2AKUV0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=oT38HSGapTw:plHsQ2AKUV0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=oT38HSGapTw:plHsQ2AKUV0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=oT38HSGapTw:plHsQ2AKUV0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.andrewbeacock.com/feeds/3720795749252325736/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11593374&amp;postID=3720795749252325736" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/3720795749252325736?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/3720795749252325736?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/andrewbeacock/~3/oT38HSGapTw/better-java-dates-times-calendars-with.html" title="Better Java Dates, Times &amp; Calendars with Joda-Time" /><author><name>Andy B</name><uri>http://www.blogger.com/profile/01039992884679308726</uri><email>blog@andrewbeacock.com</email><gd:extendedProperty name="OpenSocialUserId" value="16044632545316934027" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://blog.andrewbeacock.com/2009/07/better-java-dates-times-calendars-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQEQX48cCp7ImA9WxJUFkQ.&quot;"><id>tag:blogger.com,1999:blog-11593374.post-6386966075507147553</id><published>2009-07-15T23:35:00.002+01:00</published><updated>2009-07-15T23:35:00.078+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-15T23:35:00.078+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><title>The next Manchester Spring User Group meetup is 11th August</title><content type="html">Following on from an &lt;a href="http://blog.andrewbeacock.com/2009/06/summary-of-junes-manchester-spring-user.html"&gt;excellent gathering in June&lt;/a&gt;, Guy Remond (MD of &lt;a href="http://www.cakesolutions.net/"&gt;Cake Solutions&lt;/a&gt;)  has announced the details of August's meeting:&lt;br /&gt;&lt;br /&gt;"Introducing &lt;a href="http://static.springsource.org/spring-batch/"&gt;Spring Batch&lt;/a&gt; 2.0 plus Spring Framework 3.0 update" by &lt;a href="http://blog.springsource.com/author/dsyer/"&gt;Dave Syer&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;Well known as lead committer to the Spring Batch project as well as having a major influence throughout SpringSource, Dave will be sharing insight into the use of Spring Batch, showing some demonstrations and unveiling enhancements (scalability, XML config, Java 5…) within Spring Batch 2.0.  In addition he has promised some interesting thoughts on the long awaited Spring Framework 3.0.&lt;/blockquote&gt;There was a brief mention of Spring Batch at the &lt;a href="http://blog.andrewbeacock.com/2009/06/summary-of-junes-manchester-spring-user.html"&gt;last SUG meeting&lt;/a&gt; so I'm looking forward to finding out more...&lt;br /&gt;&lt;br /&gt;Oh, don't forget to &lt;a href="http://www.springusergroup.org.uk/meetings/"&gt;register for the August meeting&lt;/a&gt; over on the &lt;a href="http://www.springusergroup.org.uk/"&gt;Spring User Group website&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span class="technoratitag"&gt;Technorati Tags: &lt;a href="http://www.technorati.com/tags/Manchester" rel="tag"&gt;Manchester&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Spring" rel="tag"&gt;Spring&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/User Group" rel="tag"&gt;User Group&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Spring Batch" rel="tag"&gt;Spring Batch&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Dave Syer" rel="tag"&gt;Dave Syer&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Andrew Beacock" rel="tag"&gt;Andrew Beacock&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11593374-6386966075507147553?l=blog.andrewbeacock.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=llXxO9UmyXI:VHDm91cOd4Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=llXxO9UmyXI:VHDm91cOd4Q:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=llXxO9UmyXI:VHDm91cOd4Q:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=llXxO9UmyXI:VHDm91cOd4Q:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=llXxO9UmyXI:VHDm91cOd4Q:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=llXxO9UmyXI:VHDm91cOd4Q:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=llXxO9UmyXI:VHDm91cOd4Q:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.andrewbeacock.com/feeds/6386966075507147553/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11593374&amp;postID=6386966075507147553" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/6386966075507147553?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/6386966075507147553?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/andrewbeacock/~3/llXxO9UmyXI/next-manchester-spring-user-group.html" title="The next Manchester Spring User Group meetup is 11th August" /><author><name>Andy B</name><uri>http://www.blogger.com/profile/01039992884679308726</uri><email>blog@andrewbeacock.com</email><gd:extendedProperty name="OpenSocialUserId" value="16044632545316934027" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.andrewbeacock.com/2009/07/next-manchester-spring-user-group.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU4CQH46cCp7ImA9WxJUEkg.&quot;"><id>tag:blogger.com,1999:blog-11593374.post-1341072306693951823</id><published>2009-07-10T20:26:00.000+01:00</published><updated>2009-07-10T20:26:01.018+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-10T20:26:01.018+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><title>Supporting the Oracle XMLTYPE datatype via JPA (Spring, Hibernate &amp; JDBC)</title><content type="html">On a recent project I was tasked with developing two domain objects which mapped via JPA to a couple of tables.  This would have been easy apart from one table used the the &lt;a href="http://www.oracle-base.com/articles/9i/XMLTypeDatatype.php"&gt;Oracle-specific XMLTYPE data type&lt;/a&gt;:&lt;pre class="brush:sql"&gt;create table PERSON&lt;br /&gt;(&lt;br /&gt; P_ID number not null,&lt;br /&gt; P_NAME varchar2(50),&lt;br /&gt; P_UPDATED date,&lt;br /&gt; P_XML xmltype&lt;br /&gt;);&lt;/pre&gt;The XMLTYPE datatype is not supported by JPA (or any Hibernate-specific annotations) and so I had to use a different approach.  I created the JPA-based &lt;code&gt;Person&lt;/code&gt; class as normal, adding &lt;code&gt;@Column&lt;/code&gt; annotations to the class, ignoring the P_XML column.  I then added the following bit of code to be a placeholder for the XML:&lt;pre class="brush:java"&gt;@Transient&lt;br /&gt;// required so that JPA doesn't try to persist it, we need JDBC for that&lt;br /&gt;private String xml;&lt;/pre&gt;I then developed the JpaPersonDao as normal, using the &lt;code&gt;getJpaTemplate()&lt;/code&gt; methods to select, insert and update the database. This handles all the columns except the XMLTYPE one - you need to use JDBC for that one due to the way in which Oracle expects the column to be filled and read.&lt;br /&gt;&lt;br /&gt;My approach was to use the JPA-based DAO to perform most of the work loading and saving the rows, but hook in a JDBC-based DAO behind the scenes to handle the XMLTYPE column.  By hiding it in the DAO, the users of the PersonDao will not have to worry about the special nature of the XMLTYPE column.&lt;br /&gt;&lt;br /&gt;This is the JdbcPersonDao performing access to the XMLTYPE-based column only:&lt;pre class="brush:java"&gt;public class JdbcPersonDao extends JdbcDaoSupport {&lt;br /&gt;&lt;br /&gt;   private static final String SELECT_XML_SQL = "select p.P_XML.getClobVal() from PERSON p where P_ID = ?";&lt;br /&gt;   private static final String UPDATE_XML_SQL = "update PERSON set P_XML = xmltype(?) where P_ID = ?";&lt;br /&gt;&lt;br /&gt;   public String getXml(Integer id) {&lt;br /&gt;       Object[] args = { new Integer(id) };&lt;br /&gt;       int[] argTypes = new int[] { Types.INTEGER };&lt;br /&gt;       return (String) getJdbcTemplate().queryForObject(SELECT_XML_SQL, args, argTypes, String.class);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public void setXml(Integer id, String xml) {&lt;br /&gt;       OracleLobHandler lobHandler = new OracleLobHandler();&lt;br /&gt;       lobHandler.setNativeJdbcExtractor(new CommonsDbcpNativeJdbcExtractor());&lt;br /&gt;&lt;br /&gt;       Object[] args = { new SqlLobValue(xml, lobHandler), new Integer(id) };&lt;br /&gt;       int[] argTypes = new int[] { Types.CLOB, Types.INTEGER };&lt;br /&gt;       getJdbcTemplate().update(UPDATE_XML_SQL, args, argTypes);&lt;br /&gt;   }&lt;br /&gt;}&lt;/pre&gt;And here are the important bits of the JpaPersonDao hooking into the JDBC-based one to ensure that the data stays consistent, both accesses to the database are within the same transaction and so are atomic:&lt;pre class="brush:java"&gt;public class JpaPersonDao extends JpaDaoSupport implements PersonDao {&lt;br /&gt;&lt;br /&gt;   @Autowired&lt;br /&gt;   private JdbcPersonDao jdbcPersonDao; // deals with the xmltype clob&lt;br /&gt;&lt;br /&gt;   public Person getPersonById(Integer id) {&lt;br /&gt;       Person person = getJpaTemplate().find(Person.class, id);&lt;br /&gt;&lt;br /&gt;       if (person != null) {&lt;br /&gt;           person.setXml(jdbcPersonDao.getXml(id));&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;       return person;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public void savePerson(Person person) {&lt;br /&gt;       getJpaTemplate().persist(person);&lt;br /&gt;       getJpaTemplate().flush(); // forces the generation of an ID, required in the saveXml call&lt;br /&gt;       saveXml(person);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public Person updatePerson(Person person) {&lt;br /&gt;       // put the xml to one side as the merge clears out the transient field&lt;br /&gt;       String xml = person.getXml();&lt;br /&gt;       Person updatedPerson = getJpaTemplate().merge(person);&lt;br /&gt;       updatedPerson.setXml(xml);&lt;br /&gt;       saveXml(updatedPerson);&lt;br /&gt;&lt;br /&gt;       return updatedPerson;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   private void saveXml(Person person) {&lt;br /&gt;       if (person.getXml() != null) {&lt;br /&gt;           jdbcPersonDao.setXml(person.getId(), person.getXml());&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;}&lt;/pre&gt;Not the most elegant solution, but at least with the use of the &lt;code&gt;@Autowired&lt;/code&gt; JDBC-based DAO the mess is hidden from the caller...&lt;br /&gt;&lt;br /&gt;&lt;span class="technoratitag"&gt;Technorati Tags: &lt;a href="http://www.technorati.com/tags/Java" rel="tag"&gt;Java&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Spring" rel="tag"&gt;Spring&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/JPA" rel="tag"&gt;JPA&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/JDBC" rel="tag"&gt;JDBC&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Hibernate" rel="tag"&gt;Hibernate&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Oracle" rel="tag"&gt;Oracle&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/XMLTYPE" rel="tag"&gt;XMLTYPE&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Andrew Beacock" rel="tag"&gt;Andrew Beacock&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11593374-1341072306693951823?l=blog.andrewbeacock.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=sZUiQakD-RU:SaGPblmaL2c:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=sZUiQakD-RU:SaGPblmaL2c:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=sZUiQakD-RU:SaGPblmaL2c:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=sZUiQakD-RU:SaGPblmaL2c:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=sZUiQakD-RU:SaGPblmaL2c:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=sZUiQakD-RU:SaGPblmaL2c:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=sZUiQakD-RU:SaGPblmaL2c:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.andrewbeacock.com/feeds/1341072306693951823/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11593374&amp;postID=1341072306693951823" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/1341072306693951823?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/1341072306693951823?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/andrewbeacock/~3/sZUiQakD-RU/supporting-oracle-xmltype-datatype-via.html" title="Supporting the Oracle XMLTYPE datatype via JPA (Spring, Hibernate &amp; JDBC)" /><author><name>Andy B</name><uri>http://www.blogger.com/profile/01039992884679308726</uri><email>blog@andrewbeacock.com</email><gd:extendedProperty name="OpenSocialUserId" value="16044632545316934027" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://blog.andrewbeacock.com/2009/07/supporting-oracle-xmltype-datatype-via.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4MSXw_fip7ImA9WxJVGEQ.&quot;"><id>tag:blogger.com,1999:blog-11593374.post-7115862377819437616</id><published>2009-07-04T11:36:00.001+01:00</published><updated>2009-07-06T16:09:48.246+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-06T16:09:48.246+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Shopping" /><title>MP3 purchase comparison between Amazon.co.uk &amp; Play.com</title><content type="html">My first foray into purchasing MP3 was from &lt;a href="http://www.amazon.co.uk/?&amp;tag=andrewbeacock-21&amp;camp=1698&amp;creative=11426&amp;linkCode=ez&amp;adid=1NB7J8ZETJKXNQRCE4PH&amp;"&gt;Amazon.co.uk&lt;/a&gt; some months back. It was a smooth experience much like buying anything else from Amazon and it's quirky MP3 downloader popped the nicely named MP3 files into my music folder in the normal directory structure of &lt;code&gt;Artist name/Album name/track number &amp; name&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;This week I purchased an album from &lt;a href="http://www.play.com/"&gt;Play.com&lt;/a&gt;'s MP3 catalogue due to it being a little cheap than Amazon.  It's download format was a large zip file that had to be saved to the desktop, it's content was just the tracks - no artist/album directory structure, no track numbers.  Because I don't have an iPod I had to look up the track listing on the net and rename the files just to put them in the right album order!&lt;br /&gt;&lt;br /&gt;Next time I want to buy some music online I think I will be skipping &lt;a href="http://www.play.com/"&gt;Play.com&lt;/a&gt;'s offering completely and paying the little more that &lt;a href="http://www.amazon.co.uk/?&amp;tag=andrewbeacock-21&amp;camp=1698&amp;creative=11426&amp;linkCode=ez&amp;adid=1NB7J8ZETJKXNQRCE4PH&amp;"&gt;Amazon.co.uk&lt;/a&gt; was charging - it will be worth it to just have my music just download straight into the right place rather than messing around with zip file and renames...&lt;br /&gt;&lt;br /&gt;&lt;span class="technoratitag"&gt;Technorati Tags: &lt;a href="http://www.technorati.com/tags/MP3" rel="tag"&gt;MP3&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Amazon.co.uk" rel="tag"&gt;Amazon.co.uk&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Play.com" rel="tag"&gt;Play.com&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Andrew Beacock" rel="tag"&gt;Andrew Beacock&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11593374-7115862377819437616?l=blog.andrewbeacock.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=mKK8huI_US0:tZvXFcljINI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=mKK8huI_US0:tZvXFcljINI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=mKK8huI_US0:tZvXFcljINI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=mKK8huI_US0:tZvXFcljINI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=mKK8huI_US0:tZvXFcljINI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=mKK8huI_US0:tZvXFcljINI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=mKK8huI_US0:tZvXFcljINI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.andrewbeacock.com/feeds/7115862377819437616/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11593374&amp;postID=7115862377819437616" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/7115862377819437616?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/7115862377819437616?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/andrewbeacock/~3/mKK8huI_US0/mp3-purchase-comparison-between.html" title="MP3 purchase comparison between Amazon.co.uk &amp; Play.com" /><author><name>Andy B</name><uri>http://www.blogger.com/profile/01039992884679308726</uri><email>blog@andrewbeacock.com</email><gd:extendedProperty name="OpenSocialUserId" value="16044632545316934027" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.andrewbeacock.com/2009/07/mp3-purchase-comparison-between.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcNRHk6eCp7ImA9WxJVFEo.&quot;"><id>tag:blogger.com,1999:blog-11593374.post-7534879925760191504</id><published>2009-07-01T19:16:00.002+01:00</published><updated>2009-07-01T19:31:35.710+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-01T19:31:35.710+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Web" /><title>A new way to label in GMail (and the end of Right-Sided Labels)</title><content type="html">Back in March I blogged about &lt;a href="http://blog.andrewbeacock.com/2009/03/customising-gmail-with-google-mail-labs.html"&gt;my favourite GMail labs&lt;/a&gt;.  One of them has died today - &lt;a href="http://gmailblog.blogspot.com/2008/09/new-in-labs-right-side-labels-and-chat.html"&gt;Right-side Labels&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Google are &lt;a href="http://gmailblog.blogspot.com/2009/07/labels-drag-and-drop-hiding-and-more.html"&gt;grouping labels&lt;/a&gt; together with Inbox, Drafts, Chats and other system labels, and so putting the labels over on the right-hand side doesn't make sense anymore.&lt;br /&gt;&lt;br /&gt;The problem is, &lt;a href="http://gmailblog.blogspot.com/2009/07/labels-drag-and-drop-hiding-and-more.html"&gt;my GMail's not been updated yet&lt;/a&gt; so I can't play with the new features! :)&lt;br /&gt;&lt;br /&gt;&lt;span class="technoratitag"&gt;Technorati Tags: &lt;a href="http://www.technorati.com/tags/Google" rel="tag"&gt;Google&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/GMail" rel="tag"&gt;GMail&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Google Labs" rel="tag"&gt;Google Labs&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Andrew Beacock" rel="tag"&gt;Andrew Beacock&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11593374-7534879925760191504?l=blog.andrewbeacock.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=vYVZoePsE_0:B10PQ_Aneho:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=vYVZoePsE_0:B10PQ_Aneho:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=vYVZoePsE_0:B10PQ_Aneho:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=vYVZoePsE_0:B10PQ_Aneho:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=vYVZoePsE_0:B10PQ_Aneho:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=vYVZoePsE_0:B10PQ_Aneho:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=vYVZoePsE_0:B10PQ_Aneho:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.andrewbeacock.com/feeds/7534879925760191504/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11593374&amp;postID=7534879925760191504" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/7534879925760191504?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/7534879925760191504?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/andrewbeacock/~3/vYVZoePsE_0/new-way-to-label-in-gmail-and-end-of.html" title="A new way to label in GMail (and the end of Right-Sided Labels)" /><author><name>Andy B</name><uri>http://www.blogger.com/profile/01039992884679308726</uri><email>blog@andrewbeacock.com</email><gd:extendedProperty name="OpenSocialUserId" value="16044632545316934027" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://blog.andrewbeacock.com/2009/07/new-way-to-label-in-gmail-and-end-of.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8NQ34yeCp7ImA9WxJVEk8.&quot;"><id>tag:blogger.com,1999:blog-11593374.post-5569800077542329204</id><published>2009-06-27T22:38:00.001+01:00</published><updated>2009-06-28T22:18:12.090+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-28T22:18:12.090+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><title>Be careful writing hashCode() methods when using HashCodeBuilder</title><content type="html">I've blogged in the past about &lt;a href="http://blog.andrewbeacock.com/2008/08/write-simpler-equals-hashcode-java.html"&gt;using the Apache Commons EqualsBuilder and HashCodeBuilder to write simpler equals() &amp; hashCode() methods&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://slackaliss.blogspot.com/"&gt;My colleague&lt;/a&gt; recently blogged about a &lt;a href="http://slackaliss.blogspot.com/2009/06/hashcodebuilder-is-great-but.html"&gt;potential pitfall when using this approach&lt;/a&gt;, I'll summarise his findings here:&lt;br /&gt;&lt;br /&gt;Be VERY careful when you ask the &lt;a href="http://commons.apache.org/lang/api/index.html?org/apache/commons/lang/builder/HashCodeBuilder.html"&gt;HashCodeBuilder &lt;/a&gt;to generate the resulting hashcode value:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Make sure you call &lt;code&gt;builder.toHashCode()&lt;/code&gt; rather than &lt;code&gt;builder.hashCode()&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The first correctly generates a hashcode value based on the objects that you have added to the builder, the second gives you the hashcode of the builder object itself - definitely not the value you would be expecting (and would be a sure fire way to &lt;a href="http://blog.andrewbeacock.com/2008/11/how-to-lose-java-object-in-collection.html"&gt;lose your objects in a Collection&lt;/a&gt;)...&lt;br /&gt;&lt;br /&gt;&lt;span class="technoratitag"&gt;Technorati Tags: &lt;a href="http://www.technorati.com/tags/Java" rel="tag"&gt;Java&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Apache Commons" rel="tag"&gt;Apache Commons&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/HashCodeBuilder" rel="tag"&gt;HashCodeBuilder&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/hashCode" rel="tag"&gt;hashCode&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Andrew Beacock" rel="tag"&gt;Andrew Beacock&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11593374-5569800077542329204?l=blog.andrewbeacock.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=BaOypSfVxxY:nBb1sq0gsI4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=BaOypSfVxxY:nBb1sq0gsI4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=BaOypSfVxxY:nBb1sq0gsI4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=BaOypSfVxxY:nBb1sq0gsI4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=BaOypSfVxxY:nBb1sq0gsI4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=BaOypSfVxxY:nBb1sq0gsI4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=BaOypSfVxxY:nBb1sq0gsI4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.andrewbeacock.com/feeds/5569800077542329204/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11593374&amp;postID=5569800077542329204" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/5569800077542329204?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/5569800077542329204?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/andrewbeacock/~3/BaOypSfVxxY/be-careful-writing-hashcode-methods.html" title="Be careful writing hashCode() methods when using HashCodeBuilder" /><author><name>Andy B</name><uri>http://www.blogger.com/profile/01039992884679308726</uri><email>blog@andrewbeacock.com</email><gd:extendedProperty name="OpenSocialUserId" value="16044632545316934027" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.andrewbeacock.com/2009/06/be-careful-writing-hashcode-methods.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMCSHc8fSp7ImA9WxJVGUQ.&quot;"><id>tag:blogger.com,1999:blog-11593374.post-2127676990634920624</id><published>2009-06-23T20:49:00.004+01:00</published><updated>2009-07-07T20:04:29.975+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-07T20:04:29.975+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><title>How to escape text when pasting into Eclipse (including XML)</title><content type="html">When you paste text into &lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt; it does just that - places where the cursor is in it's full un-altered original form.  This is fine most of the time apart from when you might want to copy a chunk of XML (or a similar large body of text).  What you end up with in this case is the text pasted in with red lines everywhere because the text hasn't been properly escaped for Java code.&lt;br /&gt;&lt;br /&gt;To enable escaping of pasted text open the Preferences panel ('Window' menu -&gt; 'Preferences...' option), then choose: 'Java' -&gt; 'Editor' -&gt; 'Typing' and tick the box which says "Escape text when pasting in a string literal":&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_Vu_eUOpUOMk/Sj6O7PxpGdI/AAAAAAAAAhc/K6ZLW9E3KHc/s1600-h/pasting_xml_into_eclipse.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 297px; height: 400px;" src="http://2.bp.blogspot.com/_Vu_eUOpUOMk/Sj6O7PxpGdI/AAAAAAAAAhc/K6ZLW9E3KHc/s400/pasting_xml_into_eclipse.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5349870555860900306" /&gt;&lt;/a&gt;&lt;br /&gt;Now whenever you post in text which is broken over multiple lines, Eclipse will insert the relevant quotes of Java to make Eclipse happy.&lt;br /&gt;&lt;br /&gt;&lt;span class="technoratitag"&gt;Technorati Tags: &lt;a href="http://www.technorati.com/tags/Java" rel="tag"&gt;Java&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Eclipse" rel="tag"&gt;Eclipse&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Editor" rel="tag"&gt;Editor&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Escaping Text" rel="tag"&gt;Escaping Text&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/XML" rel="tag"&gt;XML&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Andrew Beacock" rel="tag"&gt;Andrew Beacock&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11593374-2127676990634920624?l=blog.andrewbeacock.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=DdaZpCkqrus:QfqXSAmEXUI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=DdaZpCkqrus:QfqXSAmEXUI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=DdaZpCkqrus:QfqXSAmEXUI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=DdaZpCkqrus:QfqXSAmEXUI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=DdaZpCkqrus:QfqXSAmEXUI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=DdaZpCkqrus:QfqXSAmEXUI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=DdaZpCkqrus:QfqXSAmEXUI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.andrewbeacock.com/feeds/2127676990634920624/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11593374&amp;postID=2127676990634920624" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/2127676990634920624?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/2127676990634920624?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/andrewbeacock/~3/DdaZpCkqrus/how-to-escape-text-when-pasting-into.html" title="How to escape text when pasting into Eclipse (including XML)" /><author><name>Andy B</name><uri>http://www.blogger.com/profile/01039992884679308726</uri><email>blog@andrewbeacock.com</email><gd:extendedProperty name="OpenSocialUserId" value="16044632545316934027" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_Vu_eUOpUOMk/Sj6O7PxpGdI/AAAAAAAAAhc/K6ZLW9E3KHc/s72-c/pasting_xml_into_eclipse.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.andrewbeacock.com/2009/06/how-to-escape-text-when-pasting-into.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUDQnczeSp7ImA9WxJVEks.&quot;"><id>tag:blogger.com,1999:blog-11593374.post-3433340710083434434</id><published>2009-06-17T16:24:00.001+01:00</published><updated>2009-06-29T10:04:33.981+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-29T10:04:33.981+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Web" /><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><title>Summary of June's Manchester Spring User Group Meeting</title><content type="html">I missed the first &lt;a href="http://www.springusergroup.org.uk/"&gt;Manchester Spring User Group&lt;/a&gt; meeting back in April which I &lt;a href="http://billcomer.blogspot.com/2009/04/spring-user-group-in-north-west.html"&gt;heard&lt;/a&gt; was excellent so I made sure I didn't miss &lt;a href="http://blog.andrewbeacock.com/2009/06/spring-user-group-comes-back-to.html"&gt;June's meeting&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The sessions (based at the &lt;a href="http://skillsmatter.com/location-details/java-jee/382/55"&gt;University of Manchester Core Technology Facility&lt;/a&gt; - &lt;a href="http://maps.google.co.uk/maps?cbp=12,21.53,,0,5&amp;cbll=53.463788,-2.227503&amp;ll=53.463788,-2.227503&amp;layer=c"&gt;cool building&lt;/a&gt; BTW) were organised by &lt;a href="http://www.cakesolutions.net/"&gt;Cake Solutions&lt;/a&gt; (in particular their MD Guy Remond) and it was Guy that introduced the evening and laid out the agenda.  Just a quick note about the venue, it's a very new tidy building, the room was an excellent size (seating for 50+ people) and coffee (and cake!) were provided.  Parking was free and immediately outside the building, just press the buzzer and mention the Spring User Group...&lt;br /&gt;&lt;br /&gt;The first talk was by Paul Sweby (of &lt;a href="http://www.uk.capgemini.com/"&gt;CapGemini&lt;/a&gt;) entitled:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Spring in Government - Improving System &amp; Personal Performance&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Paul works on the &lt;a href="http://www.hmrc.gov.uk/index.htm"&gt;HM Revenue &amp; Customs website&lt;/a&gt; and started his talk by providing some pretty impressive statistics: around 40 million tax payers use the HMRC web site for various purposes.  The software is developed by CapGemini, the systems integration provided by Fujitsu, with BT providing the network connectivity.&lt;br /&gt;&lt;br /&gt;Previous versions were composed of a mixture of COBOL, Java and .Net, and since 2000 it was predominately Java with &lt;a href="http://en.wikipedia.org/wiki/Session_Beans"&gt;stateless sessions beans&lt;/a&gt; and the &lt;a href="http://en.wikipedia.org/wiki/Facade_pattern"&gt;facade pattern&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Since then this has been ripped out and replaced with &lt;a href="http://www.springsource.org/"&gt;Spring&lt;/a&gt;.  It's now made up of the following software technologies: &lt;a href="http://www.springsource.org/"&gt;Spring 2.0&lt;/a&gt;, &lt;a href="https://www.hibernate.org/"&gt;Hibernate 3.2&lt;/a&gt;, &lt;a href="http://commons.apache.org/"&gt;Apache Commons&lt;/a&gt;, &lt;a href="http://www.jboss.org/drools/"&gt;Drools 4&lt;/a&gt;, and the following supporting components: &lt;a href="http://www.f5.com/products/big-ip/"&gt;F5 BigIP&lt;/a&gt;, &lt;a href="http://httpd.apache.org/"&gt;Apache&lt;/a&gt;, &lt;a href="http://www.oracle.com/appserver/index.html"&gt;WebLogic&lt;/a&gt;, &lt;a href="http://www.oracle.com/database/index.html"&gt;Oracle 10g (with RAC)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here are the notes that I was able to capture as Paul described some of the key points to being able to build such a large scale application:&lt;ul&gt;&lt;li&gt;Minimal use of JavaScript to ensure widest reach and browser compatibility&lt;br /&gt;&lt;li&gt;Uses &lt;a href="http://en.wikipedia.org/wiki/Representational_State_Transfer"&gt;REST&lt;/a&gt; extensively - will be migrating to &lt;a href="http://blog.springsource.com/2009/03/08/rest-in-spring-3-mvc/"&gt;Spring 3.0's REST support&lt;/a&gt;&lt;br /&gt;&lt;li&gt;Strictly one business call per request&lt;br /&gt;&lt;li&gt;The HTTP session is bad, difficult &amp; expensive to replicate, compromises the compliance of the browsers navigation features (back button)&lt;br /&gt;&lt;li&gt;Minimal shared user data is maintained (around 2k) this is passed around between servers either via the database or sometimes as hidden fields on the page&lt;br /&gt;&lt;li&gt;Because of the above the pages are all bookmarkable&lt;br /&gt;&lt;li&gt;Careful planning of the URLs is important due to the use of REST and the exposure of data and services as 'resources'&lt;br /&gt;&lt;li&gt;Using &lt;a href="http://cruisecontrol.sourceforge.net/"&gt;CruiseControl&lt;/a&gt; (and possibly &lt;a href="https://hudson.dev.java.net/"&gt;Hudson&lt;/a&gt;) for &lt;a href="http://www.martinfowler.com/articles/continuousIntegration.html"&gt;continuous integration&lt;/a&gt;&lt;br /&gt;&lt;li&gt;The used agile 'by stealth', &lt;a href="http://astore.amazon.co.uk/andrewbeacock-21/detail/0321146530"&gt;test first development&lt;/a&gt; and &lt;a href="http://www.agilemodeling.com/essays/barelyGoodEnough.html"&gt;'barely enough' modelling&lt;/a&gt;&lt;/ul&gt;Future plans include:&lt;ul&gt;&lt;li&gt;Increased use of &lt;a href="http://static.springframework.org/spring-batch/"&gt;Spring Batch&lt;/a&gt;&lt;br /&gt;&lt;li&gt;Migration from Spring 2 to Spring 3 (remove the concrete inheritance of the controllers)&lt;br /&gt;&lt;li&gt;Add support for &lt;a href="http://en.wikipedia.org/wiki/Web_2.0"&gt;'Web 2.0'&lt;/a&gt; components&lt;/ul&gt;The Spring-based system described above was able to deal with 400,000 filings on the last allowed day (Jan 30th) with 40,000 submissions filed in the last hour alone!  For the tax year of 2008/2009 over 5.8 million tax returns were filed, with a saving to the government of £20 million.  Pretty impressive stuff!&lt;br /&gt;&lt;br /&gt;There was a little break which contained a mention of the Manchester Spring User Group sponsors: &lt;a href="http://www.umic.co.uk/"&gt;UMIC&lt;/a&gt;, &lt;a href="http://www.hays.com/it/"&gt;Hays IT&lt;/a&gt;, &lt;a href="http://skillsmatter.com/"&gt;Skills Matter&lt;/a&gt;, &lt;a href="http://www.springsource.com/"&gt;SpringSource&lt;/a&gt; &amp; &lt;a href="http://www.cakesolutions.net/"&gt;Cake Solutions&lt;/a&gt; and a mention about a new open source portal/forum/community site called &lt;a href="http://opensource-central.com/"&gt;OpenSource-Central&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The next talk was by &lt;a href="http://www.russmiles.com/"&gt;Russ Miles&lt;/a&gt; (author and MD of &lt;a href="http://www.opencredo.com/"&gt;OpenCredo&lt;/a&gt; amongst other things) and his talk was:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Grails Eye for the Spring Guy&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://grails.org/"&gt;Grails&lt;/a&gt; is an "open-source web application framework that leverages the &lt;a href="http://groovy.codehaus.org/"&gt;Groovy language&lt;/a&gt; and complements Java Web development".  It aims to make you more productive by providing a natural process from idea to concrete solution.  It follows the &lt;a href="http://en.wikipedia.org/wiki/Convention_over_Configuration"&gt;'convention over configuration'&lt;/a&gt; approach giving you an opinionated 'right way' of doing things - this is helpful in that fact that if you follow it's way of doing things you end up doing your work in less time, it's taken care of a lot of the mundane and background tasks for you.&lt;br /&gt;&lt;br /&gt;After Russ explained some of the core ideas behind Grails, he then proceeded for the rest of the presentation to build a simple web application from scratch using Grails.  He started by asking Grails to create the basic project structure: &lt;code&gt;grails create-app&lt;/code&gt; and then followed by explaining some of the directory structure.&lt;br /&gt;&lt;br /&gt;Without writing any code he then started his web application: &lt;code&gt;grails run-app&lt;/code&gt; and navigated to a simple start page in his browser - the basic guts of getting a running application was done for you.  He then created a domain class using the built-in Groovy scripts to create various types of artefacts, this auto-created an appropriate controller and a number of views suitable for simple &lt;a href="http://en.wikipedia.org/wiki/Create,_read,_update_and_delete"&gt;CRUD&lt;/a&gt; operations.  The controller doesn't have normal methods for the CRUD operations, it has &lt;a href="http://en.wikipedia.org/wiki/Closure_(computer_science)"&gt;'closures'&lt;/a&gt; - methods which are assigned to properties and so can be passed around like variables.&lt;br /&gt;Without writing any database code he re-ran the web app and added a new domain object which was then displayed in a resulting list - Grails had created a development database using &lt;a href="http://hsqldb.org/"&gt;HSQLDB&lt;/a&gt; and mapped the domain object to a backing table created when the web-application started up.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://grails.org/plugin/home"&gt;Grails plugins&lt;/a&gt; were mentioned next, it appears that most non-core functionality will be released as plugins which can cover the full technology stack from raw Spring access all the way up through controllers and domain objects up to the views.  It's with the use of plugins that new 'conventions' can be introduced enriching the Grails world - one example of this was the &lt;a href="http://grails.org/plugin/quartz"&gt;quartz&lt;/a&gt; plugin - this provided some new commands including &lt;code&gt;grails create-job&lt;/code&gt;.  Other useful plugins included &lt;a href="http://grails.org/plugin/jsecurity"&gt;jsecurity&lt;/a&gt;, &lt;a href="http://grails.org/plugin/springws"&gt;springws&lt;/a&gt; and &lt;a href="http://grails.org/plugin/yui"&gt;yui&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;He also dived a little into the world of Groovy showing that it's a smooth learning curve from Java to Groovy - you can write normal Java in a &lt;code&gt;.groovy&lt;/code&gt; file and the Groovy interpreter/compiler understands it.  Groovy also follows the same path as some of the other dynamic languages in that it has a &lt;a href="http://en.wikipedia.org/wiki/Metaobject"&gt;'metaobject protocol' (MOP)&lt;/a&gt; allowing the application to add functionality to objects and classes at runtime.&lt;br /&gt;&lt;br /&gt;From my point of view, having done some &lt;a href="http://www.ruby-lang.org/en/"&gt;Ruby&lt;/a&gt; and &lt;a href="http://rubyonrails.org/"&gt;Rails&lt;/a&gt; development &lt;a href="http://blog.andrewbeacock.com/2005/09/ruby-to-replace-java-or-compliment-it.html"&gt;in the past&lt;/a&gt;, was that Grails appears to be a port of Rails to the Groovy language, taking the same ethos that 'convention of configuration' and simplicity are best.  That's not to say that I don't see vast benefit in Grails just that I didn't see any new 'magic' being presented.  One great advantage of Grails is the fact that it's underlying language (Groovy) is Java-based and runs (and compiles down to) standard Java which runs in the JVM.  This allows a much smoother transition for Java developers to migration to something like Grails rather than learn Ruby and then figure out how to deploy Rails - quite different than dropping WAR files into Tomcat...&lt;br /&gt;&lt;br /&gt;Guy concluded the evening with a little prize draw and then it was off to the local pub for some beers provided by Arie Chapman of &lt;a href="http://www.springsource.com/"&gt;SpringSource&lt;/a&gt;, cheers Arie!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;UPDATE: Russ Miles has kindly &lt;a href="http://www.russmiles.com/home/2009/6/26/grails-eye-slides-from-manchester-sug-now-available.html"&gt;uploaded his slides to his blog&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="technoratitag"&gt;Technorati Tags: &lt;a href="http://www.technorati.com/tags/Java" rel="tag"&gt;Java&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Spring" rel="tag"&gt;Spring&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/User Group" rel="tag"&gt;User Group&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/MSUG" rel="tag"&gt;MSUG&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Guy Remond" rel="tag"&gt;Guy Remond&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Cake Solutions" rel="tag"&gt;Cake Solutions&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Paul Sweby" rel="tag"&gt;Paul Sweby&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/CapGemini" rel="tag"&gt;CapGemini&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Russ Miles" rel="tag"&gt;Russ Miles&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/OpenCredo" rel="tag"&gt;OpenCredo&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Arie Chapman" rel="tag"&gt;Arie Chapman&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/SpringSource" rel="tag"&gt;SpringSource&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Andrew Beacock" rel="tag"&gt;Andrew Beacock&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11593374-3433340710083434434?l=blog.andrewbeacock.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=cO3EXUj2Ick:wyVzG6HO9bM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=cO3EXUj2Ick:wyVzG6HO9bM:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=cO3EXUj2Ick:wyVzG6HO9bM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=cO3EXUj2Ick:wyVzG6HO9bM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=cO3EXUj2Ick:wyVzG6HO9bM:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=cO3EXUj2Ick:wyVzG6HO9bM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=cO3EXUj2Ick:wyVzG6HO9bM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.andrewbeacock.com/feeds/3433340710083434434/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11593374&amp;postID=3433340710083434434" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/3433340710083434434?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/3433340710083434434?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/andrewbeacock/~3/cO3EXUj2Ick/summary-of-junes-manchester-spring-user.html" title="Summary of June's Manchester Spring User Group Meeting" /><author><name>Andy B</name><uri>http://www.blogger.com/profile/01039992884679308726</uri><email>blog@andrewbeacock.com</email><gd:extendedProperty name="OpenSocialUserId" value="16044632545316934027" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total><feedburner:origLink>http://blog.andrewbeacock.com/2009/06/summary-of-junes-manchester-spring-user.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MCQXYyeip7ImA9WxJWEU0.&quot;"><id>tag:blogger.com,1999:blog-11593374.post-5005565615939559818</id><published>2009-06-15T22:31:00.000+01:00</published><updated>2009-06-15T22:31:00.892+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-15T22:31:00.892+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><title>Improving slow wifi bandwidth performance on an Acer Aspire One</title><content type="html">We've noticed over the past few days that it was taking a long time to download stuff on &lt;a href="http://blog.andrewbeacock.com/2009/05/acer-aspire-one-backing-up-hidden.html"&gt;our Acer Aspire One&lt;/a&gt;.  Tonight I found out that it was only slow when it was unplugged from the mains - so it's a power-saving 'feature'.  I couldn't find any options within the power saving section of Windows control panel, so it was off to google for some help.&lt;br /&gt;&lt;br /&gt;Within seconds I found &lt;a href="http://apevere.blogspot.com/2009/01/acer-aspire-one-slow-wifi.html"&gt;the perfect solution&lt;/a&gt; explained very clearly over on &lt;a href="http://apevere.blogspot.com/"&gt;Peve's Blog&lt;/a&gt;.  I'm not going to repeat his instructions as he explains it great already so head over there to read his post entitled &lt;a href="http://apevere.blogspot.com/2009/01/acer-aspire-one-slow-wifi.html"&gt;Acer Aspire One Slow Wifi&lt;/a&gt; - Thanks Peve!&lt;br /&gt;&lt;br /&gt;&lt;span class="technoratitag"&gt;Technorati Tags: &lt;a href="http://www.technorati.com/tags/Acer" rel="tag"&gt;Acer&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Aspire One" rel="tag"&gt;Aspire One&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Wifi" rel="tag"&gt;Wifi&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Apevere" rel="tag"&gt;Apevere&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Andrew Beacock" rel="tag"&gt;Andrew Beacock&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11593374-5005565615939559818?l=blog.andrewbeacock.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=lTJPQeWSPQM:AAtVStGeFBs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=lTJPQeWSPQM:AAtVStGeFBs:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=lTJPQeWSPQM:AAtVStGeFBs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=lTJPQeWSPQM:AAtVStGeFBs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=lTJPQeWSPQM:AAtVStGeFBs:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=lTJPQeWSPQM:AAtVStGeFBs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=lTJPQeWSPQM:AAtVStGeFBs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.andrewbeacock.com/feeds/5005565615939559818/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11593374&amp;postID=5005565615939559818" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/5005565615939559818?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/5005565615939559818?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/andrewbeacock/~3/lTJPQeWSPQM/improving-slow-wifi-bandwidth.html" title="Improving slow wifi bandwidth performance on an Acer Aspire One" /><author><name>Andy B</name><uri>http://www.blogger.com/profile/01039992884679308726</uri><email>blog@andrewbeacock.com</email><gd:extendedProperty name="OpenSocialUserId" value="16044632545316934027" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://blog.andrewbeacock.com/2009/06/improving-slow-wifi-bandwidth.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8CQHs9eip7ImA9WxJXFks.&quot;"><id>tag:blogger.com,1999:blog-11593374.post-7195146289959291004</id><published>2009-06-10T21:56:00.004+01:00</published><updated>2009-06-10T22:04:21.562+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-10T22:04:21.562+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><title>How to copy recorded TV programmes off your PVR (Humax 9200T)</title><content type="html">We have had a &lt;a href="http://www.trustedreviews.com/home-cinema/review/2008/03/27/Humax-PVR-9200T-Personal-Video-Recorder/p1"&gt;Humax 9200T PVR&lt;/a&gt; for quite some time now and occasionally we have wanted a more portable copy (think DVD) of a particular programme that we have recorded.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Vu_eUOpUOMk/SjAeCNDDYyI/AAAAAAAAAgs/OCO7ShVXKNg/s1600-h/humax1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 98px;" src="http://2.bp.blogspot.com/_Vu_eUOpUOMk/SjAeCNDDYyI/AAAAAAAAAgs/OCO7ShVXKNg/s400/humax1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5345805780899816226" /&gt;&lt;/a&gt;&lt;br /&gt;If you flip down the right-hand panel you will notice an unlabelled &lt;a href="http://en.wikipedia.org/wiki/USB#Types_of_USB_connector"&gt;standard USB B socket&lt;/a&gt;.  It's by the use of this socket that you can stream recorded programmes off the Humax and onto a PC ready for converting to a DVD (or just watching on the PC).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Vu_eUOpUOMk/SjAeCflzUSI/AAAAAAAAAg0/unJ98o23aM8/s1600-h/humax2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 125px;" src="http://3.bp.blogspot.com/_Vu_eUOpUOMk/SjAeCflzUSI/AAAAAAAAAg0/unJ98o23aM8/s400/humax2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5345805785877401890" /&gt;&lt;/a&gt;&lt;br /&gt;Here's how you do it:&lt;br /&gt;&lt;br /&gt;Visit Humax's support site and download &amp; install their rather old and flaky &lt;a href="http://www.humaxdigital.com/uk/support/downloadcenter_model.aspx?category_seq=56"&gt;Media E-Linker software&lt;/a&gt; (Click the "Media E-Linker software (Version 2.5) download link).&lt;br /&gt;&lt;br /&gt;Get a regular USB lead with an 'A' type plug on one end, and a 'B' type plug on the other.  Plug the 'B' end into the Humax, and the 'A' into any USB socket on your PC.  Your PC should now 'find' the Humax and request to install the drivers, I let mine 'auto-search' and it found and installed the drivers just fine (I think they also might be packaged in the Humax E-Linker software installation).&lt;br /&gt;&lt;br /&gt;Once the Humax is correctly attached, run the E-Linker software and choose to 'connect'.  If everything is successful you be given a file listing on the righthand side - probably giving you options of Pictures &amp; MP3.  Change the drive letter in the drop-down box on the top-right and you should now see a listing of all your recorded programs.&lt;br /&gt;&lt;br /&gt;Select the one that you want to transfer and click the button in the middle with an arrow pointing from right to left.  Now the tricky part: wait, and wait, and wait, etc.  On my rather old laptop (with USB1.1 I might add) it took over 24 hours to transfer a two hour program.  It may be quicker with a USB2.0 PC but I had problems getting &lt;a href="http://blog.andrewbeacock.com/2009/05/acer-aspire-one-backing-up-hidden.html"&gt;our Acer Aspire One&lt;/a&gt; to connect to the Humax correctly.&lt;br /&gt;&lt;br /&gt;Once the transfer has completed you will be left with the program as a ".ts" file - this is an MPEG2 file but with "&lt;a href="http://en.wikipedia.org/wiki/MPEG_transport_stream"&gt;transport stream&lt;/a&gt;" encoding, exactly the same format as the file came over the air to your Humax in the first place.  Many players and DVD burning software know how to deal with this format, but if not you can simply convert it to a regular MPEG2 video file with something like &lt;a href="http://www.midwinter.com/~bcooley/"&gt;HDTVtoMPEG2&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Vu_eUOpUOMk/SjAeCvcL0-I/AAAAAAAAAg8/xFGxe5qXauE/s1600-h/hdtv_to_mpeg2.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 337px;" src="http://4.bp.blogspot.com/_Vu_eUOpUOMk/SjAeCvcL0-I/AAAAAAAAAg8/xFGxe5qXauE/s400/hdtv_to_mpeg2.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5345805790132032482" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="technoratitag"&gt;Technorati Tags: &lt;a href="http://www.technorati.com/tags/Humax" rel="tag"&gt;Humax&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/PVR" rel="tag"&gt;PVR&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Andrew Beacock" rel="tag"&gt;Andrew Beacock&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11593374-7195146289959291004?l=blog.andrewbeacock.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=kWmYFq5dNCI:FGN0OqtdIl4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=kWmYFq5dNCI:FGN0OqtdIl4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=kWmYFq5dNCI:FGN0OqtdIl4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=kWmYFq5dNCI:FGN0OqtdIl4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=kWmYFq5dNCI:FGN0OqtdIl4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=kWmYFq5dNCI:FGN0OqtdIl4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=kWmYFq5dNCI:FGN0OqtdIl4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.andrewbeacock.com/feeds/7195146289959291004/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11593374&amp;postID=7195146289959291004" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/7195146289959291004?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/7195146289959291004?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/andrewbeacock/~3/kWmYFq5dNCI/how-to-copy-recorded-tv-programmes-off.html" title="How to copy recorded TV programmes off your PVR (Humax 9200T)" /><author><name>Andy B</name><uri>http://www.blogger.com/profile/01039992884679308726</uri><email>blog@andrewbeacock.com</email><gd:extendedProperty name="OpenSocialUserId" value="16044632545316934027" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_Vu_eUOpUOMk/SjAeCNDDYyI/AAAAAAAAAgs/OCO7ShVXKNg/s72-c/humax1.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://blog.andrewbeacock.com/2009/06/how-to-copy-recorded-tv-programmes-off.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkEEQXs4fSp7ImA9WxJQGEQ.&quot;"><id>tag:blogger.com,1999:blog-11593374.post-5247848265310046943</id><published>2009-06-01T22:10:00.001+01:00</published><updated>2009-06-01T22:10:00.535+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-01T22:10:00.535+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><title>The Spring User Group comes back to Manchester on June 15th</title><content type="html">Back in March I blogged about the &lt;a href="http://blog.andrewbeacock.com/2009/03/spring-user-group-comes-to-north-west.html"&gt;first North West Spring User Group meeting&lt;/a&gt;.  Well on the &lt;a href="http://skillsmatter.com/event/java-jee/msug"&gt;15th June&lt;/a&gt; they are coming back to Manchester.  I wasn't able to attend the last one but an old colleague &lt;a href="http://billcomer.blogspot.com/"&gt;Bill Comer&lt;/a&gt; &lt;a href="http://billcomer.blogspot.com/2009/04/spring-user-group-in-north-west.html"&gt;attended the session&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;June's session is on "Grails eye for the Spring guy" by &lt;a href="http://skillsmatter.com/expert-profile/java-jee/russell-miles"&gt;Russ Miles&lt;/a&gt; (MD of &lt;a href="http://www.opencredo.com/index.html"&gt;OpenCredo&lt;/a&gt;). Russ has also &lt;a href="http://www.russmiles.com/home/2009/5/12/speaking-the-manchester-spring-user-group-monday-15th-june.html"&gt;blogged about the future talk over on his blog&lt;/a&gt;.  It sounds good and I'm planning on attending this time so if you see me there come over and say hi!&lt;br /&gt;&lt;br /&gt;&lt;span class="technoratitag"&gt;Technorati Tags: &lt;a href="http://www.technorati.com/tags/Java" rel="tag"&gt;Java&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Spring" rel="tag"&gt;Spring&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Hibernate" rel="tag"&gt;Hibernate&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Manchester" rel="tag"&gt;Manchester&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/North West" rel="tag"&gt;North West&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Russ Miles" rel="tag"&gt;Russ Miles&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Andrew Beacock" rel="tag"&gt;Andrew Beacock&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11593374-5247848265310046943?l=blog.andrewbeacock.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=0U5zNUq-NTE:ozQztqyMvK0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=0U5zNUq-NTE:ozQztqyMvK0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=0U5zNUq-NTE:ozQztqyMvK0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=0U5zNUq-NTE:ozQztqyMvK0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=0U5zNUq-NTE:ozQztqyMvK0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=0U5zNUq-NTE:ozQztqyMvK0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=0U5zNUq-NTE:ozQztqyMvK0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.andrewbeacock.com/feeds/5247848265310046943/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11593374&amp;postID=5247848265310046943" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/5247848265310046943?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/5247848265310046943?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/andrewbeacock/~3/0U5zNUq-NTE/spring-user-group-comes-back-to.html" title="The Spring User Group comes back to Manchester on June 15th" /><author><name>Andy B</name><uri>http://www.blogger.com/profile/01039992884679308726</uri><email>blog@andrewbeacock.com</email><gd:extendedProperty name="OpenSocialUserId" value="16044632545316934027" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.andrewbeacock.com/2009/06/spring-user-group-comes-back-to.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMEQXY6fip7ImA9WxJQE04.&quot;"><id>tag:blogger.com,1999:blog-11593374.post-786466028663579779</id><published>2009-05-26T12:30:00.000+01:00</published><updated>2009-05-26T12:30:00.816+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-26T12:30:00.816+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><title>Replace your broadband provider's DNS servers with OpenDNS ones for more reliable service</title><content type="html">I had an 'internet issue' last week when around 10am my connection to the internet was lost.  Well not completely lost - my work PC (a remote box accessed via &lt;a href="http://en.wikipedia.org/wiki/Vpn"&gt;VPN&lt;/a&gt;) was still working fine so I still had a connection (at an IP level), but I couldn't visit any websites.  The problem was that Pipex's &lt;a href="http://en.wikipedia.org/wiki/Domain_name_system"&gt;DNS&lt;/a&gt; servers were offline (I couldn't ping them) and it wasn't planned maintenance.&lt;br /&gt;&lt;br /&gt;So I replace them with settings for the &lt;a href="http://www.opendns.com/"&gt;free OpenDNS servers&lt;/a&gt;.  These DNS servers are used by millions of people around the world, I suppose I've not migrated to them before because I've not had an issue until now.  The migration couldn't have been easier - I logged into &lt;a href="http://blog.andrewbeacock.com/2006/07/dead-broadband-routers-fantastic.html"&gt;my router&lt;/a&gt;, accessed the 'internet settings' menu option, and selected 'DNS'.  Then I unticked the "Automatic from ISP" box and entered the OpenDNS server details in the IP address boxes:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Vu_eUOpUOMk/ShKBJq6CGEI/AAAAAAAAAgg/0SdZR7EeXeo/s1600-h/opendns_settings.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 218px;" src="http://1.bp.blogspot.com/_Vu_eUOpUOMk/ShKBJq6CGEI/AAAAAAAAAgg/0SdZR7EeXeo/s400/opendns_settings.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5337470511523960898" /&gt;&lt;/a&gt;&lt;br /&gt;The OpenDNS DNS server IP addresses are:&lt;pre&gt;Primary   DNS Server: 208.67.222.222&lt;br /&gt;Secondary DNS Server: 208.67.220.220&lt;/pre&gt;Once my router had restarted itself with these DNS settings I was back online again...&lt;br /&gt;&lt;br /&gt;More &lt;a href="https://www.opendns.com/start/"&gt;detailed setup instructions&lt;/a&gt; can be found on the OpenDNS site.&lt;br /&gt;&lt;br /&gt;&lt;span class="technoratitag"&gt;Technorati Tags: &lt;a href="http://www.technorati.com/tags/DNS" rel="tag"&gt;DNS&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Broadband" rel="tag"&gt;Broadband&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Pipex" rel="tag"&gt;Pipex&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/OpenDNS" rel="tag"&gt;OpenDNS&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Andrew Beacock" rel="tag"&gt;Andrew Beacock&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11593374-786466028663579779?l=blog.andrewbeacock.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=O0A-zKKhwz8:JN7hfZwcaUs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=O0A-zKKhwz8:JN7hfZwcaUs:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=O0A-zKKhwz8:JN7hfZwcaUs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=O0A-zKKhwz8:JN7hfZwcaUs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=O0A-zKKhwz8:JN7hfZwcaUs:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=O0A-zKKhwz8:JN7hfZwcaUs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=O0A-zKKhwz8:JN7hfZwcaUs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.andrewbeacock.com/feeds/786466028663579779/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11593374&amp;postID=786466028663579779" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/786466028663579779?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/786466028663579779?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/andrewbeacock/~3/O0A-zKKhwz8/replace-your-broadband-providers-dns.html" title="Replace your broadband provider's DNS servers with OpenDNS ones for more reliable service" /><author><name>Andy B</name><uri>http://www.blogger.com/profile/01039992884679308726</uri><email>blog@andrewbeacock.com</email><gd:extendedProperty name="OpenSocialUserId" value="16044632545316934027" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_Vu_eUOpUOMk/ShKBJq6CGEI/AAAAAAAAAgg/0SdZR7EeXeo/s72-c/opendns_settings.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://blog.andrewbeacock.com/2009/05/replace-your-broadband-providers-dns.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4NRn44eip7ImA9WxJRFkU.&quot;"><id>tag:blogger.com,1999:blog-11593374.post-3979855691056421849</id><published>2009-05-18T22:40:00.001+01:00</published><updated>2009-05-18T22:43:17.032+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-18T22:43:17.032+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><title>JSTL date comparisons with the current time (now) in JSPs</title><content type="html">When you are coding JSPs and using the &lt;a href="http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/index.html"&gt;JSTL tags&lt;/a&gt; you will often be presenting information captured in a domain object, using the JavaBean-style getters to pull out the values within the JSP page.&lt;br /&gt;&lt;br /&gt;What do you do if you need to show some text if the date stored within the domain object is before (or after) the current time?&lt;br /&gt;&lt;br /&gt;There are many wrong or messy solutions - polluting the domain object by adding a method to 'get' the text to display, do the comparison in the controller and add the text to display to the request, etc.&lt;br /&gt;&lt;br /&gt;One clean way is to use the &lt;a href="http://java.sun.com/products/jsp/tags/11/syntaxref11.fm14.html"&gt;&lt;code&gt;jsp:useBean&lt;/code&gt; tag&lt;/a&gt; to create a page-scoped variable containing the current date/time and then use normal JSTL to compare the objects.&lt;br /&gt;&lt;br /&gt;First create the page-scoped &lt;code&gt;&lt;a href="http://java.sun.com/javase/6/docs/api/java/util/Date.html"&gt;java.util.Date&lt;/a&gt;&lt;/code&gt; object (using &lt;code&gt;jsp:useBean&lt;/code&gt;), then use &lt;code&gt;${now}&lt;/code&gt; to reference the current date/time. This is a regular JSP object now and so the normal JSTL operators work with this variable:&lt;br /&gt;&lt;pre&gt;&amp;lt;jsp:useBean id=&amp;quot;now&amp;quot; class=&amp;quot;java.util.Date&amp;quot;/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;c:if test=&amp;quot;${someEvent.startDate lt now}&amp;quot;&amp;gt;&lt;br /&gt;   It's history!&lt;br /&gt;&amp;lt;/c:if&amp;gt;&lt;/pre&gt;&lt;span class="technoratitag"&gt;Technorati Tags: &lt;a href="http://www.technorati.com/tags/Java" rel="tag"&gt;Java&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/JSP" rel="tag"&gt;JSP&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/JSTL" rel="tag"&gt;JSTL&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Date" rel="tag"&gt;Date&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Comparison" rel="tag"&gt;Comparison&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Andrew Beacock" rel="tag"&gt;Andrew Beacock&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11593374-3979855691056421849?l=blog.andrewbeacock.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=M3mlvzik8eM:f5tN5BxqVDk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=M3mlvzik8eM:f5tN5BxqVDk:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=M3mlvzik8eM:f5tN5BxqVDk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=M3mlvzik8eM:f5tN5BxqVDk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=M3mlvzik8eM:f5tN5BxqVDk:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=M3mlvzik8eM:f5tN5BxqVDk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=M3mlvzik8eM:f5tN5BxqVDk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.andrewbeacock.com/feeds/3979855691056421849/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11593374&amp;postID=3979855691056421849" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/3979855691056421849?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/3979855691056421849?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/andrewbeacock/~3/M3mlvzik8eM/jstl-date-comparisons-with-current-time.html" title="JSTL date comparisons with the current time (now) in JSPs" /><author><name>Andy B</name><uri>http://www.blogger.com/profile/01039992884679308726</uri><email>blog@andrewbeacock.com</email><gd:extendedProperty name="OpenSocialUserId" value="16044632545316934027" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.andrewbeacock.com/2009/05/jstl-date-comparisons-with-current-time.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04GQHs_eSp7ImA9WxJWEEw.&quot;"><id>tag:blogger.com,1999:blog-11593374.post-7714441961061734322</id><published>2009-05-12T23:09:00.006+01:00</published><updated>2009-06-14T21:38:41.541+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-14T21:38:41.541+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><title>Acer Aspire One: Backing up the hidden Windows XP factory image partition</title><content type="html">My wife recently got the Windows XP 160GB version of the amazing popular &lt;a href="http://astore.amazon.co.uk/andrewbeacock-21/detail/B001MIYOME"&gt;Acer Aspire One&lt;/a&gt; (this seems to be the only netbook people ever have!).&lt;br /&gt;&lt;br /&gt;I'd heard from a friend that we should save off the backup image which is preloaded onto a hidden partition (called PQSERVICE).  But how do you gain access to the partition in order to save it off?&lt;br /&gt;&lt;br /&gt;After much research I came up with the following options:&lt;ul&gt;&lt;li&gt;Install Linux on a USB pendrive, boot from that, then save the partition using Linux tools&lt;br /&gt;&lt;li&gt;Hack the master boot record to remove the 'hidden' attribute of the partition, then save it somehow&lt;br /&gt;&lt;li&gt;Numerous other tough/dangerous/involved methods&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Follow my method below which is easy, safe and free!&lt;/span&gt;&lt;/ul&gt;Here are the steps you need to follow to be able to save off a backup image of the factory install of your Acer Aspire One as well as save a copy of your &lt;a href="http://en.wikipedia.org/wiki/Master_boot_record"&gt;Master Boot Record (MBR)&lt;/a&gt;  incase your hard drive dies...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Saving your hidden PQSERVICE partition&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Download the &lt;a href="http://www.macrium.com/reflectfree.asp"&gt;free version of Macrium Reflect&lt;/a&gt; and install it&lt;br /&gt;&lt;br /&gt;Run Macrium Reflect, let it analyse your drive and then right-click on the listed PQSERVICE partition (it's not hidden to this tool!):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Vu_eUOpUOMk/Sgnzs3ZpX5I/AAAAAAAAAgQ/s91a7rtTIJk/s1600-h/create_image.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 273px;" src="http://4.bp.blogspot.com/_Vu_eUOpUOMk/Sgnzs3ZpX5I/AAAAAAAAAgQ/s91a7rtTIJk/s400/create_image.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5335063185708375954" /&gt;&lt;/a&gt;&lt;br /&gt;Choose the "Create Image of '1 - PQSERVICE'" option&lt;br /&gt;&lt;br /&gt;Save the partition to wherever is suitable, I place mine directly on my &lt;a href="http://en.wikipedia.org/wiki/Network-attached_storage"&gt;NAS storage box&lt;/a&gt; (I selected the "Intelligent Copy" option rather than the sector by sector copy, but I've not restored the image so please don't rely on that advice for a safe copy...).&lt;br /&gt;&lt;br /&gt;An image of your hidden WinXP partition will now be saved:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Vu_eUOpUOMk/SgnztHnyahI/AAAAAAAAAgY/DUcr-XykOmw/s1600-h/saving_image.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 319px;" src="http://2.bp.blogspot.com/_Vu_eUOpUOMk/SgnztHnyahI/AAAAAAAAAgY/DUcr-XykOmw/s400/saving_image.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5335063190062656018" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Saving your Master Boot Record (MBR)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You will also probably want to save off the master boot record of the Acer's drive so that in the case of a complete drive failure you can set it up in a similar manner to the factory settings to be able to restore it correctly.&lt;br /&gt;&lt;br /&gt;Download the free &lt;a href="http://mbrwizard.com/"&gt;MBRWizard&lt;/a&gt; and extract the archive&lt;br /&gt;&lt;br /&gt;Open a DOS box, navigate to where you extracted MBRWiz.exe and run the following command:&lt;br /&gt;&lt;pre&gt;MBRWiz /Save=C:\acer_aspire_one.mbr&lt;/pre&gt;Copy the &lt;code&gt;acer_aspire_one.mbr&lt;/code&gt; file in your C drive to somewhere safe (I put mine in the same place on the NAS box as the above PQSERVICE partition image file.&lt;br /&gt;&lt;br /&gt;That's it!&lt;br /&gt;&lt;br /&gt;Note: I've not restored this partition or master boot record, and I don't expect to, but at least you have a copy without messing about with your new netbook too much!&lt;br /&gt;&lt;br /&gt;All this information was gleamed from &lt;a href="http://www.raymond.cc/blog/archives/2008/11/11/the-importance-of-backing-up-eisa-hidden-pqservice-partition-and-mbr-on-a-new-laptop/"&gt;The Importance of Backing Up EISA Hidden PQSERVICE Partition and MBR on a New Laptop&lt;/a&gt; (includes details on how to view the contents of the backed up image) and &lt;a href="http://www.raymond.cc/blog/archives/2008/11/10/5-free-tools-to-backup-and-restore-master-boot-record-mbr/"&gt;5 Free Tools to Backup and Restore Master Boot Record (MBR)&lt;/a&gt; from &lt;a href="http://www.raymond.cc/blog/"&gt;the fantastic Raymond.cc blog&lt;/a&gt;.  They go into much more detail and I would recommend that you give them both a good read.&lt;br /&gt;&lt;br /&gt;UPDATE: This blog post looks like a good source of information if you want to &lt;a href="http://nerdfortress.com/2009/04/14/restore-xp-on-the-acer-aspire-one-how-to-restore-xp-from-the-acer-aspire-one-hidden-partition/"&gt;Restore XP from the Acer Aspire One Hidden Partition&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span class="technoratitag"&gt;Technorati Tags: &lt;a href="http://www.technorati.com/tags/Acer" rel="tag"&gt;Acer&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Aspire" rel="tag"&gt;Aspire&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Backup" rel="tag"&gt;Backup&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Partition" rel="tag"&gt;Partition&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Image" rel="tag"&gt;Image&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/WindowsXP" rel="tag"&gt;WindowsXP&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Macrium" rel="tag"&gt;Macrium&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/MBRWizard" rel="tag"&gt;MBRWizard&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Raymond.cc" rel="tag"&gt;Raymond.cc&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Andrew Beacock" rel="tag"&gt;Andrew Beacock&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11593374-7714441961061734322?l=blog.andrewbeacock.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=JOWsXNORgfc:vpziNh0Y0-Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=JOWsXNORgfc:vpziNh0Y0-Y:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=JOWsXNORgfc:vpziNh0Y0-Y:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=JOWsXNORgfc:vpziNh0Y0-Y:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=JOWsXNORgfc:vpziNh0Y0-Y:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=JOWsXNORgfc:vpziNh0Y0-Y:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=JOWsXNORgfc:vpziNh0Y0-Y:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.andrewbeacock.com/feeds/7714441961061734322/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11593374&amp;postID=7714441961061734322" title="8 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/7714441961061734322?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/7714441961061734322?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/andrewbeacock/~3/JOWsXNORgfc/acer-aspire-one-backing-up-hidden.html" title="Acer Aspire One: Backing up the hidden Windows XP factory image partition" /><author><name>Andy B</name><uri>http://www.blogger.com/profile/01039992884679308726</uri><email>blog@andrewbeacock.com</email><gd:extendedProperty name="OpenSocialUserId" value="16044632545316934027" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_Vu_eUOpUOMk/Sgnzs3ZpX5I/AAAAAAAAAgQ/s91a7rtTIJk/s72-c/create_image.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">8</thr:total><feedburner:origLink>http://blog.andrewbeacock.com/2009/05/acer-aspire-one-backing-up-hidden.html</feedburner:origLink></entry></feed>
