<?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;CEYFR3c4cSp7ImA9WxBWFks.&quot;"><id>tag:blogger.com,1999:blog-11593374</id><updated>2010-02-08T20:48:36.939Z</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>215</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/andrewbeacock" /><feedburner:info uri="andrewbeacock" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><logo>http://bp0.blogger.com/_Vu_eUOpUOMk/RgWamJV19TI/AAAAAAAAAGw/Lu_6ZKf-Glw/s400/buddy_icon.png</logo><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><entry gd:etag="W/&quot;DUYBQX8yfyp7ImA9WxBXGUo.&quot;"><id>tag:blogger.com,1999:blog-11593374.post-9122651077406842668</id><published>2010-01-31T22:32:00.000Z</published><updated>2010-01-31T22:32:30.197Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-31T22:32:30.197Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><title>How to use Junction if you want Symbolic links in Windows XP</title><content type="html">Ever since I started developing using Unix machines I've wanted &lt;a href="http://en.wikipedia.org/wiki/Symbolic_link"&gt;symbolic links&lt;/a&gt; in Windows XP.&amp;nbsp; A recent pursuit of backup solutions left me really wanting symbolic links so I started the search.&amp;nbsp; &lt;a href="http://www.paraesthesia.com/archive/2010/01/05/sync-any-folder-with-dropbox-via-symbolic-links.aspx"&gt;This blog post&lt;/a&gt; gave me everything I needed, using a tool from Microsoft's website called &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb896768.aspx"&gt;junction&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
This command line tool created junction points between a symbolic name and a real folder on your hard drive (sorry network drives cannot be linked to).&lt;br /&gt;
&lt;br /&gt;
I downloaded it and placed the &lt;code&gt;junction.exe&lt;/code&gt; file in my &lt;code&gt;C:\WINDOWS\system32&lt;/code&gt; directory so it would be on my system path. &lt;br /&gt;
&lt;br /&gt;
Below is my little walk-through of how to use &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb896768.aspx"&gt;junction&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I created a folder on my desktop called "junction test" and created a folder inside that called "folder":&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_Vu_eUOpUOMk/S2YBHkOl0iI/AAAAAAAAAqw/r_bpzU7kxtI/s1600-h/folder.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_Vu_eUOpUOMk/S2YBHkOl0iI/AAAAAAAAAqw/r_bpzU7kxtI/s320/folder.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
I created a text file called "README.txt" inside the "folder" directory:&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/S2YBIxFaHlI/AAAAAAAAArA/09bZiuYrxMI/s1600-h/inside_folder.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_Vu_eUOpUOMk/S2YBIxFaHlI/AAAAAAAAArA/09bZiuYrxMI/s320/inside_folder.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
I opened a Windows DOS prompt (cmd) and navigated to the "junction test" folder on my desktop, then I ran the junction command like this:&lt;br /&gt;
&lt;pre&gt;junction "junction" folder&lt;/pre&gt;&lt;br /&gt;
This gave the following output:&lt;br /&gt;
&lt;pre&gt;Junction v1.05 - Windows junction creator and reparse point viewer

Copyright (C) 2000-2007 Mark Russinovich

Systems Internals - http://www.sysinternals.com


Created: C:\Documents and Settings\abeacock\Desktop\junction test\junction

Targetted at: C:\Documents and Settings\abeacock\Desktop\junction test\folder&lt;/pre&gt;&lt;br /&gt;
And the folder now looked like this:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_Vu_eUOpUOMk/S2YBIVn614I/AAAAAAAAAq4/qOXa9v1HrD4/s1600-h/folder_and_junction.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_Vu_eUOpUOMk/S2YBIVn614I/AAAAAAAAAq4/qOXa9v1HrD4/s320/folder_and_junction.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
If I double-clicked on the "junction" folder this is what I saw:&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/S2YBJnNvq7I/AAAAAAAAArI/_LYdBI8pE1Y/s1600-h/inside_junction.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_Vu_eUOpUOMk/S2YBJnNvq7I/AAAAAAAAArI/_LYdBI8pE1Y/s320/inside_junction.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
So as you can see the contents of the "folder" directory is now available in via the "junction" directory as well.&amp;nbsp; Obviously the junction doesn't need to be next to the folder you want to link too (that would be of little use) but it can be anywhere on your harddrive (I was using it to point into my DropBox sync folder).&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;b style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-large;"&gt;&lt;span style="color: red;"&gt;WARNING&lt;/span&gt;&lt;span style="color: red;"&gt; ABOUT JUNCTION&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
Only the junction tool knows that these folders are actually symbolic links, the rest of the Windows file system thinks they are normal folders. So for example you can simply delete the junctions via Windows and they go in your recycle bin and the folder that it points to stays where it was:&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/S2YBKI3VXII/AAAAAAAAArQ/2xfEjWK8xFI/s1600-h/recycle_bin.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_Vu_eUOpUOMk/S2YBKI3VXII/AAAAAAAAArQ/2xfEjWK8xFI/s320/recycle_bin.png" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;But if you then empty your recycle bin it also empties the contents of the folder that this junction was pointing at (which is probably NOT what you wanted to happen!):&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_Vu_eUOpUOMk/S2YBG0Dq3jI/AAAAAAAAAqo/IxsVnKASNE4/s1600-h/empty_folder.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_Vu_eUOpUOMk/S2YBG0Dq3jI/AAAAAAAAAqo/IxsVnKASNE4/s320/empty_folder.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
So please remember to always use the junction command to create &amp;amp; delete junctions, you can also use it to show you which directories are actually junctions so you know if you should delete it or not, refer to the &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb896768.aspx"&gt;junction download page&lt;/a&gt; for more details.&lt;br /&gt;
&lt;br /&gt;
It's a fantastic tool for Windows XP and very very handy for certain things but please bear in mind the warning above...&lt;br /&gt;
&lt;br /&gt;
&lt;span class="technoratitag"&gt;Technorati Tags: &lt;a href="http://www.technorati.com/tags/Symbolic%20Link" rel="tag"&gt;Symbolic Link&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Junction" rel="tag"&gt;Junction&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Microsoft" rel="tag"&gt;Microsoft&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Andrew%20Beacock" 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-9122651077406842668?l=blog.andrewbeacock.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=kQSwSeEvltY:7Cu4BVzVseg: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=kQSwSeEvltY:7Cu4BVzVseg: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=kQSwSeEvltY:7Cu4BVzVseg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=kQSwSeEvltY:7Cu4BVzVseg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=kQSwSeEvltY:7Cu4BVzVseg: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=kQSwSeEvltY:7Cu4BVzVseg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=kQSwSeEvltY:7Cu4BVzVseg: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/9122651077406842668/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11593374&amp;postID=9122651077406842668" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/9122651077406842668?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/9122651077406842668?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/andrewbeacock/~3/kQSwSeEvltY/how-to-use-junction-if-you-want.html" title="How to use Junction if you want Symbolic links in Windows XP" /><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/S2YBHkOl0iI/AAAAAAAAAqw/r_bpzU7kxtI/s72-c/folder.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/2010/01/how-to-use-junction-if-you-want.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIGQH47eSp7ImA9WxBXEE8.&quot;"><id>tag:blogger.com,1999:blog-11593374.post-8286481668828418553</id><published>2010-01-20T21:49:00.005Z</published><updated>2010-01-20T21:55:21.001Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-20T21:55:21.001Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><title>Are your Maven profiles being picked up as 'default'?</title><content type="html">We recently noticed that the profile that we had marked as default in our Maven &lt;code&gt;settings.xml&lt;/code&gt; file was not being set as the default.  Like many examples on the web we had the following XML element set in the appropriate profile:&lt;br /&gt;
&lt;pre class="brush:xml"&gt;&amp;lt;profiles&amp;gt;
    &amp;lt;profile&amp;gt;
        &amp;lt;activation&amp;gt;
            &amp;lt;activeByDefault/&amp;gt;
        &amp;lt;/activation&amp;gt;
    &amp;lt;/profile&amp;gt;
&amp;lt;/profiles&amp;gt;
&lt;/pre&gt;After some searching we found this &lt;a href="http://mail-archives.apache.org/mod_mbox/maven-users/"&gt;maven-users&lt;/a&gt; mailing list &lt;a href="http://mail-archives.apache.org/mod_mbox/maven-users/200607.mbox/%3Cf62c92fe0607191659od99af36sb4fb86d6511aff21@mail.gmail.com%3E"&gt;post detailing the solution&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&amp;lt;activeByDefault/&amp;gt;&lt;/code&gt; isn't enough to set the value, you need to explicitly set the boolean value to true:&lt;br /&gt;
&lt;pre class="brush:xml"&gt;&amp;lt;activeByDefault&amp;gt;true&amp;lt;/activeByDefault&amp;gt; 
&lt;/pre&gt;Once we saved that change in our &lt;code&gt;settings.xml&lt;/code&gt; file the profile was picked up as the default.&lt;br /&gt;
&lt;br /&gt;
Technorati Tags: &lt;a href="http://www.technorati.com/tags/Maven" rel="tag"&gt;Maven&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-8286481668828418553?l=blog.andrewbeacock.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=hffptnpZ05A:w_ITLIm6cmY: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=hffptnpZ05A:w_ITLIm6cmY: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=hffptnpZ05A:w_ITLIm6cmY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=hffptnpZ05A:w_ITLIm6cmY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=hffptnpZ05A:w_ITLIm6cmY: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=hffptnpZ05A:w_ITLIm6cmY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=hffptnpZ05A:w_ITLIm6cmY: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/8286481668828418553/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11593374&amp;postID=8286481668828418553" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/8286481668828418553?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/8286481668828418553?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/andrewbeacock/~3/hffptnpZ05A/are-your-maven-profiles-being-picked-up.html" title="Are your Maven profiles being picked up as 'default'?" /><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/2010/01/are-your-maven-profiles-being-picked-up.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEAFQHg_eSp7ImA9WxBRF04.&quot;"><id>tag:blogger.com,1999:blog-11593374.post-7998153082195196637</id><published>2010-01-05T21:37:00.003Z</published><updated>2010-01-05T23:05:11.641Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-05T23:05:11.641Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><title>A cool way to assert Lists using JUnit</title><content type="html">I found this &lt;a href="http://www.junit.org/"&gt;JUnit &lt;/a&gt;tip recently over on &lt;a href="http://joewalnes.com/"&gt;Joe Walnes's blog&lt;/a&gt;, a rather nifty (and different) way to assert whether two &lt;a href="http://java.sun.com/javase/6/docs/api/java/util/List.html"&gt;Lists &lt;/a&gt;contain the same items:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://joewalnes.com/2009/10/22/junittestng-tip-diffing-lists/" rel="bookmark" title="Permanent Link: JUnit/TestNG tip: Diffing Lists"&gt;JUnit/TestNG tip: Diffing&amp;nbsp;Lists&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Technorati Tags: &lt;a href="http://www.technorati.com/tags/JUnit" rel="tag"&gt;JUnit&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Joe%20Walnes" rel="tag"&gt;Joe Walnes&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-7998153082195196637?l=blog.andrewbeacock.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=oZSyQiX4sIY:wPLaF6cwdbA: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=oZSyQiX4sIY:wPLaF6cwdbA: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=oZSyQiX4sIY:wPLaF6cwdbA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=oZSyQiX4sIY:wPLaF6cwdbA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=oZSyQiX4sIY:wPLaF6cwdbA: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=oZSyQiX4sIY:wPLaF6cwdbA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=oZSyQiX4sIY:wPLaF6cwdbA: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/7998153082195196637/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11593374&amp;postID=7998153082195196637" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/7998153082195196637?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/7998153082195196637?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/andrewbeacock/~3/oZSyQiX4sIY/cool-way-to-assert-lists-using-junit.html" title="A cool way to assert Lists using JUnit" /><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/2010/01/cool-way-to-assert-lists-using-junit.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4GR384fyp7ImA9WxBTE00.&quot;"><id>tag:blogger.com,1999:blog-11593374.post-6095342839681521698</id><published>2009-12-08T20:08:00.000Z</published><updated>2009-12-08T20:08:46.137Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-08T20:08:46.137Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Web" /><title>Shorten links to be Twitter-friendly with j.mp</title><content type="html">Any &lt;a href="http://twitter.com/abeacock"&gt;Twitter&lt;/a&gt; users out there will know that URLs and 140 characters don't really mix that well, especially if you actually want to talk about the link as well!&amp;nbsp; Typically you would use a URL shortening service such as the original &lt;a href="http://tinyurl.com/"&gt;tinyurl.com&lt;/a&gt; or one of the newer, shorter versions such as &lt;a href="http://bit.ly/"&gt;bit.ly&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Well there is a new kid on the block who's even shorter: &lt;a href="http://j.mp/"&gt;j.mp&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://j.mp/"&gt;J.mp&lt;/a&gt; is another member of the bit.ly family just with two less letters, but it's going to be perfect for &lt;a href="http://twitter.com/abeacock"&gt;Twitter&lt;/a&gt;.&amp;nbsp; I use the bit.ly bookmarklet to generate my links but it appears that there is not a version for j.mp yet, so I created my own:&lt;br /&gt;
&lt;br /&gt;
Drag this link to your browser toolbar to get started:&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="javascript:var%20d=document,w=window,enc=encodeURIComponent,e=w.getSelection,k=d.getSelection,x=d.selection,s=(e?e():(k)?k():(x?x.createRange().text:0)),s2=((s.toString()=='')?s:('%22'+enc(s)+'%22')),f='http://j.mp/',l=d.location,p='?v=3&amp;amp;u='+enc(l.href)%20+'&amp;amp;s='+enc(d.title)+'%20'+s2,u=f+p;try{if(!/^(.*\.)?tumblrzzz[^.]*$/.test(l.host))throw(0);tstbklt();}catch(z){a%20=function(){if(!w.open(u))l.href=u;};if(/Firefox/.test(navigator.userAgent))setTimeout(a,0);else%20a();}void(0)"&gt;Shorten with j.mp&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="technoratitag"&gt;Technorati Tags: &lt;a href="http://www.technorati.com/tags/j.mp" rel="tag"&gt;j.mp&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/bit.ly" rel="tag"&gt;bit.ly&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/tinyurl.com" rel="tag"&gt;tinyurl.com&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/twitter" rel="tag"&gt;twitter&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Andrew%20Beacock" 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-6095342839681521698?l=blog.andrewbeacock.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=QIA9Sd-w25s:hTZWXdORd14: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=QIA9Sd-w25s:hTZWXdORd14: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=QIA9Sd-w25s:hTZWXdORd14:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=QIA9Sd-w25s:hTZWXdORd14:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=QIA9Sd-w25s:hTZWXdORd14: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=QIA9Sd-w25s:hTZWXdORd14:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=QIA9Sd-w25s:hTZWXdORd14: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/6095342839681521698/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11593374&amp;postID=6095342839681521698" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/6095342839681521698?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/6095342839681521698?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/andrewbeacock/~3/QIA9Sd-w25s/shorten-links-to-be-twitter-friendly.html" title="Shorten links to be Twitter-friendly with j.mp" /><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/12/shorten-links-to-be-twitter-friendly.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkAGQXw9cSp7ImA9WxBTE0g.&quot;"><id>tag:blogger.com,1999:blog-11593374.post-3862654284668602523</id><published>2009-12-04T23:29:00.003Z</published><updated>2009-12-09T11:38:40.269Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-09T11:38:40.269Z</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="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><title>Summary of December's Manchester Spring User Group Meeting</title><content type="html">The December Spring meeting was held on Tuesday 1st December at the same venue as &lt;a href="http://blog.andrewbeacock.com/2009/08/summary-of-augusts-manchester-spring.html"&gt;previous meetings&lt;/a&gt;. Two talks were lined up: one on Grails by Adam Evans and one on Spring 3.0 by Rick Evans.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://twitter.com/guyremond"&gt;Guy Remond&lt;/a&gt; of &lt;a href="http://www.cakesolutions.net/"&gt;Cake Solutions&lt;/a&gt; started the evening off with introductions and explained that the Spring User Group was going to be expanding to become the 'Open Source Central User Group' so as to attract a more diverse audience.  He also discussed the &lt;a href="http://www.opensource-central.com/"&gt;Open Source Central website&lt;/a&gt; which has plans to become the 'Hub for successful Open Source Enterprise Application Development'.  It's going to pull various blogs together into one central place as well as offering video and podcasts of open source technologies.  We were also some of the first people to get a physical copy of the Open Source Journal, a 5,000-copy print run (sponsored by &lt;a href="http://www.hays.com/it/"&gt;Hays IT&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Practical Grails Demonstration by &lt;a href="http://twitter.com/ajevans85"&gt;Adam Evans&lt;/a&gt; of &lt;a href="http://www.ctisn.com/"&gt;CTI&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Adam started his presentation with a brief run through of what is &lt;a href="http://www.grails.org/"&gt;Grails&lt;/a&gt;, what is &lt;a href="http://groovy.codehaus.org/"&gt;Groovy&lt;/a&gt; and showed that Groovy 'can' be just standard Java code.  Grails applications compile cleanly down to a WAR file so deployment in your favourite appserver is easy.  It uses &lt;a href="http://grails.org/doc/latest/guide/6.%20The%20Web%20Layer.html#6.2%20Groovy%20Server%20Pages"&gt;GSP&lt;/a&gt;s and &lt;a href="http://www.opensymphony.com/sitemesh/"&gt;Sitemesh&lt;/a&gt; for the view layer, &lt;a href="http://www.grails.org/GORM"&gt;GORM&lt;/a&gt; for the database layer and supports a &lt;a href="http://www.grails.org/plugin/home"&gt;plugin-based architecture&lt;/a&gt; allowing you to 'plugin' views, controllers, domain objects, sessions and scripts.&lt;br /&gt;
&lt;br /&gt;
He then went on to demo building a Grails application on the fly using &lt;a href="http://www.grails.org/STS+Integration"&gt;SpringSource Tool Suite (STS)&lt;/a&gt;.  Unfortunately Adam's laptop wasn't up to the job of running STS (basically Eclipse) and Powerpoint at the same time and so he had major 'not responding' issues.  Despite these technical difficulties Adam battled on filling the gaps with details of Grails (Grails 1.2 supports annotated Spring beans) and had the foresight to have a slide-based version of the demo to hand (major kudos to Adam!)&lt;br /&gt;
&lt;br /&gt;
Then he 'built' a demo application which uses the Twitter API to perform a search on whatever you type into the input box.  An interesting point was that the Twitter results were returned in JSON and the GSP expression language allows you to parse that data as if it was a first-class object, doing things like &lt;code&gt;tweet.username&lt;/code&gt;.&lt;br /&gt;
&lt;br /&gt;
Adam has also kindly posted &lt;a href="http://www.slideshare.net/ajevans/spring-northwest-usergroup-grails-presentation"&gt;a copy of his slides to SlideShare.net&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Guy then stepped back in to thank the sponsors of the event: &lt;a href="http://www.cakesolutions.net/"&gt;Cake Solutions&lt;/a&gt;, &lt;a href="http://www.opencredo.com/"&gt;OpenCredo&lt;/a&gt;, &lt;a href="http://skillsmatter.com/"&gt;Skills Matter&lt;/a&gt;, &lt;a href="http://www.fdmgroup.com/"&gt;FDM Group&lt;/a&gt;, &lt;a href="http://www.hays.com/it/"&gt;Hays IT&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Spring 3.0 :: Weapons for the war on Java complexity by &lt;a href="http://twitter.com/rickdevans"&gt;Rick Evans&lt;/a&gt;  of &lt;a href="http://www.qficonsulting.com/cs.html"&gt;QFI&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Rick has been working with Spring since 2004 and has delivered loads of training courses on it as well.  He started his presentation with a humorous &lt;a href="http://www.youtube.com/watch?v=p4ebtj1jR7c"&gt;youtube clip of a mega-beast of a shotgun&lt;/a&gt;, and his theme was whether various Spring 3 features were &lt;a href="http://en.wikipedia.org/wiki/Spud_gun"&gt;potato guns&lt;/a&gt; or &lt;a href="http://www.youtube.com/watch?v=p4ebtj1jR7c"&gt;super shotguns&lt;/a&gt;...&lt;br /&gt;
&lt;br /&gt;
He started off with a brief overview of the changes made in Spring 2.5 ('ease of use') and then moved on to the new things in Spring 3.0 - key points: embrace Java 5 and heavy use of annotations as 'declarations of intent'. Spring 3 introduces &lt;a href="http://static.springsource.org/spring/docs/3.0.0.RC3/spring-framework-reference/html/ch06.html"&gt;SPEL - the Spring Expression Language&lt;/a&gt; as the default expression language across all the modules (Webflow, Batch, etc.).&lt;br /&gt;
&lt;br /&gt;
REST is nicely supported now with both server-side support in the form of additional annotations for controllers: &lt;a href="http://blog.springsource.com/2009/03/08/rest-in-spring-3-mvc/"&gt;@PathVariable &amp;amp; the enhanced @RequestMapping&lt;/a&gt;, and client-side with the use of &lt;a href="http://blog.springsource.com/2009/03/27/rest-in-spring-3-resttemplate/"&gt;RestTemplate&lt;/a&gt;s. Rick also mentioned the use of &lt;a href="http://static.springsource.org/spring/docs/3.0.0.RC3/javadoc-api/org/springframework/web/filter/HiddenHttpMethodFilter.html"&gt;HiddenHttpMethodFilter&lt;/a&gt; to ensure that your standard browser forms could correctly call the right type of REST operation, silently mapping POSTs to DELETEs if required.&lt;br /&gt;
&lt;br /&gt;
There are some new annotations in the Controller world: @RequestParam now has a 'defaultValue' attribute and &lt;a href="http://static.springsource.org/spring/docs/3.0.0.RC3/spring-framework-reference/html/ch15s03.html#mvc-ann-cookievalue"&gt;@CookieValue&lt;/a&gt; and &lt;a href="http://static.springsource.org/spring/docs/3.0.0.RC3/spring-framework-reference/html/ch15s03.html#mvc-ann-requestheader"&gt;@RequestHeader&lt;/a&gt; allow you to extract data from cookies and HTTP headers accordingly.  Validation has been revisited with a smattering of new annotations to ensure objects are @NotNull, have @Max and @Min values, etc.  This is all activated via a Validator - either &lt;a href="http://jackson.codehaus.org/javadoc/bean-validation-api/1.0/javax/validation/Validator.html"&gt;javax.validation.Validator&lt;/a&gt; or the old-skool &lt;a href="http://static.springsource.org/spring/docs/2.5.6/api/org/springframework/validation/Validator.html"&gt;org.springframework.validation.Validator&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Rick's final words were to do with the fact that there is no 'all encompassing' spring.jar anymore, it's split up into it's component parts and you pull in what you want - if you are using Maven or Ivy then I suppose this isn't a problem, but how do you deal with it if not?  He also said that loads of stuff had been deleted, cleaned up or deprecated which is always a good thing - no point carrying cruft around.&lt;br /&gt;
&lt;br /&gt;
Rick has also kindly posted &lt;a href="http://www.box.net/shared/d525r8cnx0"&gt;a copy of his slides to Box.net&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Then it was over the road to The Bowling Green pub for a pint on Cake Solutions (cheers Cake!) and a catch up with some old colleagues and meet some new north west developers...&lt;br /&gt;
&lt;br /&gt;
Technorati Tags: &lt;a href="http://www.technorati.com/tags/Spring" rel="tag"&gt;Spring&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/User%20Group" rel="tag"&gt;User Group&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Grails" rel="tag"&gt;Grails&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Adam%20Evans" rel="tag"&gt;Adam Evans&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Rick%20Evans" rel="tag"&gt;Rick Evans&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-3862654284668602523?l=blog.andrewbeacock.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=Y4kmmAH8FF4:BgsSUSRDX88: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=Y4kmmAH8FF4:BgsSUSRDX88: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=Y4kmmAH8FF4:BgsSUSRDX88:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=Y4kmmAH8FF4:BgsSUSRDX88:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=Y4kmmAH8FF4:BgsSUSRDX88: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=Y4kmmAH8FF4:BgsSUSRDX88:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=Y4kmmAH8FF4:BgsSUSRDX88: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/3862654284668602523/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11593374&amp;postID=3862654284668602523" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/3862654284668602523?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/3862654284668602523?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/andrewbeacock/~3/Y4kmmAH8FF4/summary-of-decembers-manchester-spring.html" title="Summary of December'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">0</thr:total><feedburner:origLink>http://blog.andrewbeacock.com/2009/12/summary-of-decembers-manchester-spring.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4MRH8-eSp7ImA9WxNaEUU.&quot;"><id>tag:blogger.com,1999:blog-11593374.post-7184105293829946742</id><published>2009-11-25T22:08:00.001Z</published><updated>2009-11-25T22:09:45.151Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-25T22:09:45.151Z</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 miss the December Manchester Spring User Group on Tuesday 1st December</title><content type="html">There was a little doubt recently if this event was going to take place as the main speaker had to pull out at the last minute.&amp;nbsp; We now have a new and excellent speaker &lt;a href="http://skillsmatter.com/expert-profile/java-jee/rick-evans"&gt;Rick Evans&lt;/a&gt; talking about Spring 3.0 - Weapons for the War on Java Complexity".&lt;br /&gt;
&lt;br /&gt;
Doors open at 6pm and the main keynote normally starts around 6:30 (a chance for coffee and a chat before hand).It's in the &lt;a href="http://maps.google.co.uk/maps?q=53.464223,-2.226932&amp;amp;num=1&amp;amp;t=h&amp;amp;sll=53.464374,-2.22977&amp;amp;sspn=0.006295,0.006295&amp;amp;hl=en&amp;amp;ie=UTF8&amp;amp;ll=53.464145,-2.226869&amp;amp;spn=0.001154,0.00239&amp;amp;z=19&amp;amp;iwloc=A"&gt;usual place&lt;/a&gt;, just don't forget to &lt;a href="http://www.springusergroup.org.uk/registration/"&gt;register&lt;/a&gt; if you plan on going!&lt;br /&gt;
&lt;br /&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%20Group" rel="tag"&gt;User Group&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Andrew%20Beacock" rel="tag"&gt;Andrew Beacock&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/" rel="tag"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11593374-7184105293829946742?l=blog.andrewbeacock.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=Ckz3FM6edf0:Cs17OmIiUkY: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=Ckz3FM6edf0:Cs17OmIiUkY: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=Ckz3FM6edf0:Cs17OmIiUkY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=Ckz3FM6edf0:Cs17OmIiUkY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=Ckz3FM6edf0:Cs17OmIiUkY: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=Ckz3FM6edf0:Cs17OmIiUkY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=Ckz3FM6edf0:Cs17OmIiUkY: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/7184105293829946742/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11593374&amp;postID=7184105293829946742" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/7184105293829946742?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/7184105293829946742?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/andrewbeacock/~3/Ckz3FM6edf0/dont-miss-december-manchester-spring.html" title="Don't miss the December Manchester Spring User Group on Tuesday 1st December" /><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/11/dont-miss-december-manchester-spring.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQARX08eip7ImA9WxNbEUk.&quot;"><id>tag:blogger.com,1999:blog-11593374.post-4121944107212148047</id><published>2009-11-13T21:22:00.000Z</published><updated>2009-11-13T21:22:24.372Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-13T21:22:24.372Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Web" /><category scheme="http://www.blogger.com/atom/ns#" term="firefox" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><title>Paste Email Plus - perfect for multiple text snippets in Firefox</title><content type="html">I've found recently when commenting on various blogs that I want to add a little footer to the comment with my name and blog address.  For one or two comments typing it out by hand is fine but after a while I decided to try and find an automated way to deal with this issue.&lt;br /&gt;
&lt;br /&gt;
So I was looking for something that allows me to enter multiple lines of text and then very easily insert this text wherever I choose.  Well I quickly found the perfect solution - a &lt;a href="http://www.mozilla.com/firefox/"&gt;Firefox &lt;/a&gt;add-on called &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/7040"&gt;Paste Email Plus&lt;/a&gt; by &lt;a href="http://customsoftwareconsult.com/extensions/"&gt;Chuck Baker&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
You simply open the Paste Email Plus options window, enter a 'Label' to help identify this text, then enter the multi-line text in the 'Pastetext' field and click 'Save changes':&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_Vu_eUOpUOMk/Sv3NopXms2I/AAAAAAAAApI/h61yBgvE74o/s1600-h/2009-11-13_203518.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_Vu_eUOpUOMk/Sv3NopXms2I/AAAAAAAAApI/h61yBgvE74o/s320/2009-11-13_203518.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
You are now set up and ready to start pasting that text snippet, in any area where you would normally type text just right-click and select 'Paste Email Plus' (below 'Paste' on my system) and then choose your labelled snippet:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_Vu_eUOpUOMk/Sv3N2wgVIKI/AAAAAAAAApQ/UMxNPuwuVJw/s1600-h/2009-11-13_203918.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_Vu_eUOpUOMk/Sv3N2wgVIKI/AAAAAAAAApQ/UMxNPuwuVJw/s320/2009-11-13_203918.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
You will now see your text chunk pasted into the text area wherever your cursor was at the time of the right-click!&lt;br /&gt;
&lt;br /&gt;
Technorati Tags: &lt;a href="http://www.technorati.com/tags/Firefox" rel="tag"&gt;Firefox&lt;/a&gt;, &lt;a href="http://www.technorati.com/tags/Chuck%20Baker" rel="tag"&gt;Chuck Baker&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-4121944107212148047?l=blog.andrewbeacock.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=Q89ELI6fyJw:R72jDi0EbzI: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=Q89ELI6fyJw:R72jDi0EbzI: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=Q89ELI6fyJw:R72jDi0EbzI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=Q89ELI6fyJw:R72jDi0EbzI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/andrewbeacock?a=Q89ELI6fyJw:R72jDi0EbzI: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=Q89ELI6fyJw:R72jDi0EbzI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/andrewbeacock?i=Q89ELI6fyJw:R72jDi0EbzI: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/4121944107212148047/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=11593374&amp;postID=4121944107212148047" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/4121944107212148047?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11593374/posts/default/4121944107212148047?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/andrewbeacock/~3/Q89ELI6fyJw/paste-email-plus-perfect-for-multiple.html" title="Paste Email Plus - perfect for multiple text snippets in Firefox" /><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/Sv3NopXms2I/AAAAAAAAApI/h61yBgvE74o/s72-c/2009-11-13_203518.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/11/paste-email-plus-perfect-for-multiple.html</feedburner:origLink></entry><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' alt='' /&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' alt='' /&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' alt='' /&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="2 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">2</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' alt='' /&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' alt='' /&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' alt='' /&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' alt='' /&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' alt='' /&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' alt='' /&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' alt='' /&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' alt='' /&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' alt='' /&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' alt='' /&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' alt='' /&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' alt='' /&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' alt='' /&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' alt='' /&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' alt='' /&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></feed>
