<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7242182</id><updated>2011-11-28T01:11:39.506+01:00</updated><category term='source'/><category term='flockbrowser web adblock ie7 firefox opera'/><category term='catch'/><category term='cvs'/><category term='java'/><category term='git'/><category term='security'/><category term='kernel'/><category term='aop'/><category term='exception'/><category term='otp'/><category term='profanities'/><category term='throw'/><category term='requirements'/><category term='password'/><category term='svn'/><title type='text'>You Are Number 6</title><subtitle type='html'>This is a POTB (Plain Old Techie Blog). You are likely to come across references to Open Source software, Java, J2EE and various internet topics like security and search engines.
Be Seeing You.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default?start-index=101&amp;max-results=100'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>149</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7242182.post-8771335129295644544</id><published>2009-05-06T15:04:00.000+02:00</published><updated>2009-05-06T15:05:19.717+02:00</updated><title type='text'>Create UML diagrams online in seconds, no special tools needed.</title><content type='html'>&lt;a href="http://yuml.me/"&gt;yUML&lt;/a&gt; is a tool that uses the URL to generate a diagram on the fly.&lt;br /&gt;&lt;br /&gt;Here is an example:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;img src="http://yuml.me/diagram/class/[Customer]&amp;lt;&amp;gt;1-orders 0..*&amp;gt;[Order], [Order]++*-*&amp;gt;[LineItem], [Order]-1&amp;gt;[DeliveryMethod], [Order]*-*&amp;gt;[Product], [Category]&amp;gt;-&amp;gt;[Product], [DeliveryMethod]^[National], [DeliveryMethod]^[International]"/&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Gives you:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://yuml.me/diagram/class/%5BCustomer%5D%3C%3E1-orders%200..*%3E%5BOrder%5D,%20%5BOrder%5D++*-*%3E%5BLineItem%5D,%20%5BOrder%5D-1%3E%5BDeliveryMethod%5D,%20%5BOrder%5D*-*%3E%5BProduct%5D,%20%5BCategory%5D%3C-%3E%5BProduct%5D,%20%5BDeliveryMethod%5D%5E%5BNational%5D,%20%5BDeliveryMethod%5D%5E%5BInternational%5D"/&gt;&lt;br /&gt;&lt;br /&gt;The technology behind it appears to be Ruby on Rails, which begs the question "will it still be useful when it gets overused?", lets hope there is a cloud waiting to host it, because this could really take off.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-8771335129295644544?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/8771335129295644544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=8771335129295644544' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/8771335129295644544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/8771335129295644544'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2009/05/create-uml-diagrams-online-in-seconds.html' title='Create UML diagrams online in seconds, no special tools needed.'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-8430416925343267801</id><published>2009-02-25T12:20:00.000+01:00</published><updated>2009-02-25T12:21:39.525+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='requirements'/><title type='text'>Fluid Requirements (Going Down The Pan)</title><content type='html'>Had this from a customer today:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Please find attached the latest version of the &lt;i&gt;XXX Spec&lt;/i&gt;. As communicated before this document has been signed-off in-principle as it keep evolving.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;  &lt;br /&gt;Oh joy, at least it is not a fixed price contract.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-8430416925343267801?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/8430416925343267801/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=8430416925343267801' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/8430416925343267801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/8430416925343267801'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2009/02/fluid-requirements-going-down-pan.html' title='Fluid Requirements (Going Down The Pan)'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-653883356085787189</id><published>2008-12-19T16:39:00.001+01:00</published><updated>2008-12-19T16:39:30.927+01:00</updated><title type='text'>BBC iPlayer finally available on Mac &amp; Linux</title><content type='html'>&lt;a href="http://news.bbc.co.uk/1/hi/technology/7787335.stm"&gt;BBC NEWS | Technology | BBC iPlayer now available on Mac&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Go &lt;a href="http://www.bbc.co.uk/iplayer/labs"&gt;here&lt;/a&gt; to get it.&lt;br /&gt;&lt;br /&gt;Bamzooki still waiting&lt;br /&gt;&lt;br /&gt;&lt;div class="flockcredit" style="text-align: right; color: #CCC; font-size: x-small;"&gt;Blogged with the &lt;a href="http://www.flock.com/blogged-with-flock" style="color: #999; font-weight: bold;" target="_new" title="Flock Browser"&gt;Flock Browser&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-653883356085787189?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/653883356085787189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=653883356085787189' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/653883356085787189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/653883356085787189'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2008/12/bbc-iplayer-finally-available-on-mac.html' title='BBC iPlayer finally available on Mac &amp;amp; Linux'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-6439931291058781114</id><published>2008-12-05T15:51:00.001+01:00</published><updated>2008-12-05T15:51:59.191+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>JavaFX = Processing + (Axis2 - i18n)/2</title><content type='html'>&lt;a href="http://javafx.com/"&gt;JavaFX&lt;/a&gt; = &lt;a href="http://processing.org/"&gt;Processing&lt;/a&gt; + (&lt;a href="http://ws.apache.org/axis2/"&gt;Axis2&lt;/a&gt; - i18n)/2&lt;br /&gt;&lt;br /&gt;&lt;blockquote cite="http://www.javafx.com/faq/#4"&gt;What type of Web services can I call from JavaFX applications?&lt;br /&gt;JavaFX applications can call any REST- based Web service that returns ASCII data. If the returned data is in XML or JSON formats then they are automatically parsed for easy access. Examples of Web services that can be called from JavaFX are Yahoo Local and Flick Photo Web services.&lt;/blockquote&gt;&lt;cite cite="http://www.javafx.com/faq/#4"&gt;&lt;a href="http://www.javafx.com/faq/#4"&gt;JavaFX FAQ's | Howto and General Questions About Java FX&lt;/a&gt;&lt;/cite&gt;&lt;br /&gt;&lt;br /&gt;I think I will only pay slight attention this one until it is actually a step forward.&lt;br /&gt;&lt;div class="flockcredit" style="text-align: right; color: #CCC; font-size: x-small;"&gt;Blogged with the &lt;a href="http://www.flock.com/blogged-with-flock" style="color: #999; font-weight: bold;" target="_new" title="Flock Browser"&gt;Flock Browser&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-6439931291058781114?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/6439931291058781114/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=6439931291058781114' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/6439931291058781114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/6439931291058781114'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2008/12/javafx-processing-axis2-i18n2.html' title='JavaFX = Processing + (Axis2 - i18n)/2'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-19024140348749737</id><published>2008-12-04T14:33:00.001+01:00</published><updated>2008-12-04T14:33:51.815+01:00</updated><title type='text'>The problem with measuring elapsed time on a laptop</title><content type='html'>Someone pointed out &lt;a href="http://rachota.sourceforge.net/en/index.html"&gt;Rachota Timetracker&lt;/a&gt; to me the other day, probably yet another hint that I should try and do my timesheets on time. It probably came from Elijah Alcantara's comment on &lt;a href="http://digg.com/software/5_Tools_to_Track_How_Much_Time_you_Waste_while_Online"&gt;this digg&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;My requirement is that I need a quick way to record what I am doing, but I am not always connected to the web (although I am about 90% now). A typical day is open laptop at home, slap lid down go to office, move offline to meeting room, back to office, get on train to client site, open laptop in meeting, slap lid down and head home, open and catch up in evening. The laptop gets rebooted on average twice a week.&lt;br /&gt;&lt;br /&gt;The problem I have is that the tools for measuring time, and reacting to it, tend to go wrong when my laptop hibernates/sleeps between usage. Lightning calendar is a classic example, alarms work fine from startup to first sleep but after that the drift causes alarms to go off at the wrong time, I could use a web based calendar as that would not suffer, but I am not always connected and when I do connect it can be too late.&lt;br /&gt;&lt;br /&gt;I was hoping that Rachota would have sorted this out, but no, sadly. I have to remember to 'relax' before slapping the lid down and running.&lt;br /&gt;&lt;br /&gt;There are a number of possible solutions but the best one I have found in my own work as been to 'observe the system clock'. The principal is that you sample the system clock at known intervals and note the difference between the system clock delta and the interval period, assuming normal operation the minor drift that you get should average out to 0 over time (using the right kind of timer). When the computer hibernates/sleeps or you get a DST changover then you might get a difference of +1 hour for example (depending if you read localtime or UTC). That way if I start a task at 12:00 and hibernate at 12:15 for 30 minutes, when I reawaken the process and Rachota would have said 45 minutes elapsed, I know that by observing a +30 minute shift I should take 30 minutes off. If someone was messing about with the system clock then they can move it back and forth as much as they like and the technique should keep up subject to the granularity of the time interval (which will vary depending on the timing accuracy required). The system clock observer would fire off TimeShiftEvents to elapsed time listeners that would be registered and deregistered as they start and stop.&lt;br /&gt;&lt;br /&gt;I know there are scenarios where you want to measure that off time, but you could easily make that an option for the user.&lt;br /&gt;&lt;br /&gt;I would do the change myself but I just can't stand netbeans based projects. ;-)&lt;div class="flockcredit" style="text-align: right; color: #CCC; font-size: x-small;"&gt;Blogged with the &lt;a href="http://www.flock.com/blogged-with-flock" style="color: #999; font-weight: bold;" target="_new" title="Flock Browser"&gt;Flock Browser&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-19024140348749737?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/19024140348749737/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=19024140348749737' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/19024140348749737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/19024140348749737'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2008/12/problem-with-measuring-elapsed-time-on.html' title='The problem with measuring elapsed time on a laptop'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-4902678823992757939</id><published>2008-11-14T01:39:00.001+01:00</published><updated>2008-11-14T01:39:57.543+01:00</updated><title type='text'>Email is a battleground, a developer minefield</title><content type='html'>The leading email apps are Outlook, Thunderbird, Mac Mail, Evolution, Lotus Notes, Gmail, Hotmail, Yahoo Mail and that's about it. In terms of market share and success there are a significant number of 'also rans', but why?&lt;br /&gt;&lt;br /&gt;My first thought was that the main contenders dominated the market so completely that no-one bothered with the others, but then I thought back to 2003 when Thunderbird first became usable (some might say it is still not) and suddenly it gained market share. Mozilla Thunderbird proved that you can go from nothing to something, perhaps on the back of Firefox, but unlike so many other apps, users stuck with it. I have only just realised why.&lt;br /&gt;&lt;br /&gt;A bit of background is required here. Where I work we have archives of business critical emails from certain accounts, users don't have to keep half a million emails they can access old messages using a web interface to the database of archived messages. At the moment all emails they open are downloaded as '.eml' files and so open in their desktop email client (Outlook or Thunderbird), but that method means that laptop users have to remember to remove the files as they go (which they often forget to do) because of the potentially sensitive nature of the messages. My solution was to get the web interface to display the message with the appropriate cache headers, which solved my immediate need but I realised that it would expose the system to spam (especially as some users access the system from their home networks and so cannot be proxy protected). In case the full horror is not clear, this would mean that an embedded image link in a spam email would effectively gift the spammers the bona fide email address - at best, at worst using an old IE (thinking it is in the trusted zone) we have security meltdown.&lt;br /&gt;&lt;br /&gt;It was this that made me realise just what a fine line email clients are treading between functionality and security. The webmail systems have to inhibit the browsers natural instict to connect and show, the desktop systems have to emulate the web functionality while still limiting access. Email is a battleground, would anyone willingly enter the fray? Images, JavaScript, Applets, Flash, Ajax and application attachements all present risk in remote communications and local access.&lt;br /&gt;&lt;br /&gt;The apps that can cut it are ones that provide just enough functionality and maintain security or provide more functionality and expose their users to 'some risk' (I would say that any risk is unnacceptable, but I don't work in their security department). Both approaches have their warfare equivalent, but what are 'acceptable losses' in this context?. There is still room for another client in the market, no-one has nailed it yet. I think Mac Mail is closest, although spammers can crash it remotely at the moment. As for my problem, I have a solution but it is probably not cost effective to implement.&lt;br /&gt;&lt;br /&gt;   &lt;div class="flockcredit" style="text-align: right; color: #CCC; font-size: x-small;"&gt;Blogged with the &lt;a href="http://www.flock.com/blogged-with-flock" style="color: #999; font-weight: bold;" target="_new" title="Flock Browser"&gt;Flock Browser&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-4902678823992757939?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/4902678823992757939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=4902678823992757939' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/4902678823992757939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/4902678823992757939'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2008/11/email-is-battleground-developer.html' title='Email is a battleground, a developer minefield'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-1060045933055986764</id><published>2008-06-20T22:42:00.001+02:00</published><updated>2008-06-20T22:42:15.688+02:00</updated><title type='text'>Checkout svn 1.5</title><content type='html'>&lt;a href="http://subversion.tigris.org/"&gt;Subversion 1.5&lt;/a&gt; has been released. For the server/repo side the changes are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Merge Tracking - svn now sets a property [mergeinfo] to track what changesets/revisions resulted from a merge activity. What this means is that the 'safe' merging technique of first trunk to branch and then branch to trunk is more efficiently handled.&lt;/li&gt;&lt;li&gt;Better FSFS - svn now provides the administrator with the enough flexibility to work around the limitations of various filesystems. Basically the repository files can be split up and spread around as things get large (e.g. mount a new partition), and OS file caching can be optimised.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Scalability Proxy - svn allows the concept of master and slave svn instances (as in 1.4), but now all writes are directed to the master (via webdav proxy) and reads can work from the slave thus keeping things synchronised nicely. This really helps with distributed development and goes some way to providing some of the features of Git and Mercurial.&lt;/li&gt;&lt;/ul&gt;In addition on the client side:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Sparse Checkouts - the way in which you can specify what gets checked out or updated has been made more logically complete. What this means is that you need to issue fewer, more readable commands to checkout defined subsets of a tree than before.&lt;/li&gt;&lt;li&gt;Interactive Conflict Resolution - doing a 'svn up' used to then leave you hunting around for the merge to do, now it pops up with a set of options. Useful if your IDE does not have conflict resolution capabilities.&lt;/li&gt;&lt;li&gt;Changelists - a way of tagging files (not directories) with a name that is used to create a set of changes that can later be used by a commit or other such command. Again this is something a good IDE will normally do for you (e.g. Mylyn).&lt;/li&gt;&lt;li&gt;Relative svn:externals - a long overdue feature that finally permits the use of relative paths (e.g. ../other-project) in externals definitions. Prior to this externals had to use the full path which made usage via VPN or renamed servers of this feature impossible to manage. Now you can specify workspaces as disjoint repository trees and freely re-organise the repo without trashing all you externals definitions (as long as they were expressed well in the first place). Perhaps in the next version they will go even further and outlaw all absolute paths (replace external hosts with symbolic internal name?).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;What else...? Bug fixes and security enhancements of course - oh and if you are still using 1.3 then you just lost your support.&lt;br /&gt;&lt;div class="flockcredit" style="text-align: right; color: #CCC; font-size: x-small;"&gt;Blogged with the &lt;a href="http://www.flock.com/blogged-with-flock" style="color: #999; font-weight: bold;" target="_new" title="Flock Browser"&gt;Flock Browser&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-1060045933055986764?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/1060045933055986764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=1060045933055986764' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/1060045933055986764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/1060045933055986764'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2008/06/checkout-svn-15.html' title='Checkout svn 1.5'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-8542023795548100637</id><published>2008-03-27T18:10:00.001+01:00</published><updated>2008-03-27T18:10:43.862+01:00</updated><title type='text'>Lean build cycles with antro</title><content type='html'>&lt;a href="http://sourceforge.net/projects/antro/"&gt;Antro&lt;/a&gt; was released last week onto SF under GPLv3. It is a kind of visualisation tool for the performance of an ant build. It gives you colour coded drill down into your build and its files, red means long running, green means quick.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sourceforge.net/project/screenshots.php?group_id=221690" target="_blank"&gt;&lt;img src="http://sourceforge.net/dbimage.php?id=165405"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And I expected it to be just another tool that works for simple examples but never for the real thing, like so many other promising ideas. And as it was so simple to use I decided to give it a chance to shine.&lt;br /&gt;&lt;br /&gt;Simple to use the nice part here, you just add a listener and the jar to your ant command line (or drop the jar into the ant/lib folder). Run your script and then open up the UI on the output json file. If liked the way I did not have to touch my build.xml files.&lt;br /&gt;&lt;br /&gt;It worked on my complex build (i.e. long depends tree and heavy use of antcall etc.). And I was able to see a number of interesting 'features' of my build and then shave 10% off its cycle time. So this one gets used again.&lt;br /&gt;&lt;br /&gt;&lt;div class="flockcredit" style="text-align: right; color: #CCC; font-size: x-small;"&gt;Blogged with the &lt;a href="http://www.flock.com/blogged-with-flock" style="color: #999; font-weight: bold;" target="_new" title="Flock Browser"&gt;Flock Browser&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-8542023795548100637?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/8542023795548100637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=8542023795548100637' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/8542023795548100637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/8542023795548100637'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2008/03/lean-build-cycles-with-antro.html' title='Lean build cycles with antro'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-505848632679917720</id><published>2008-03-07T17:51:00.001+01:00</published><updated>2008-03-07T17:51:40.893+01:00</updated><title type='text'>Another missing piece in the calendar puzzle</title><content type='html'>&lt;a href="http://googleblog.blogspot.com/2008/03/google-calendar-sync.html"&gt;Google's Calendar Sync&lt;/a&gt; for Outlook is going to go a long way to solving the "I don't want Exchange" puzzle.&lt;br /&gt;&lt;br /&gt;My objective for some time has been to combine the blinding convenience of Google Calendar with the working patterns of my family and work environments. I want to have a set of calendars for my job and home life that are read/writable as required. I use Thunderbird/Sunbird with the Google calendar add-on 'Provider for Google Calendar' at work and my web browser at home on the Mac. The missing part was for my work colleagues who use Outlook to be able to contribute to my job calendar, and this is the part that can now be solved.&lt;br /&gt;&lt;br /&gt;&lt;p style="text-align: right; font-size: 8px"&gt;Blogged with &lt;a href="http://www.flock.com/blogged-with-flock" title="Flock" target="_new"&gt;Flock&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-505848632679917720?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/505848632679917720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=505848632679917720' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/505848632679917720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/505848632679917720'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2008/03/another-missing-piece-in-calendar.html' title='Another missing piece in the calendar puzzle'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-2435727430906062829</id><published>2008-01-08T02:23:00.001+01:00</published><updated>2008-01-08T02:23:02.174+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='throw'/><category scheme='http://www.blogger.com/atom/ns#' term='catch'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='exception'/><category scheme='http://www.blogger.com/atom/ns#' term='aop'/><title type='text'>Why Multiple Exceptions is so hot</title><content type='html'>It seems that Monday was Exceptional arguments day - &lt;a href="http://www.javalobby.org/java/forums/t105307.html"&gt;Catching multiple exceptions: good or bad?&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;I have to admit that I could not be bothered to follow all the replies, after the 10th stock answer and the 10th wannabe architect half baked wisdom, I stopped reading.&lt;br /&gt;&lt;br /&gt;The reason why there are so many right and even more wrong answers is that Exception handling is contextual, and in the end the best you can ever do is achieve a 'reasonable compromise'. Exceptions represent unforeseen circumstances, or at least that was the original idea [I don't want to judge programming style, what matters is accurate 1s and 0s and the maintainability of the code that produces them], and so someone needs to sit and think about the bigger picture.&lt;br /&gt;&lt;br /&gt;I have seen some strange programming environments over the years, as far as Exceptions go they range from:&lt;br /&gt;&lt;br /&gt;catch (Throwable ignoreall) {}&lt;br /&gt;&lt;br /&gt;to dropping into a full blown AI fault analysis and blame system. Both techniques were correct for their context, and have served their masters well. This is one of the reasons why writing re-usable software is so hard; you cannot predict the context of its eventual use.&lt;br /&gt;&lt;br /&gt;My advice is to avoid writing lines of code like the above, only special circumstances demand that degree of insanity. Generally you should follow these basic guidelines:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Never lose an Exception, always do something with it, even if that is just passing it to a piece of null code (AOP later)&lt;/li&gt;&lt;li&gt;Play Ball [sometimes I pander to the audience], catch and throw anew, that way you can always participate if need be.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Dots in handlers are dangerous, there is nothing worse than a NPE masking the real issue.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Never throw other people's Exceptions, it can make a real mess of your dependency tree. Catch then wrap or fix.&lt;/li&gt;&lt;li&gt;Don't throw when you can return, thrown business related objects make an architectural mess.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;As far as the original article goes, any syntax that promotes good practice is beneficial, and this suggestion is one that might encourage developers to avoid unhealthy temptation. Java is a general language and so I don't really care how many different ways there are to specify what you want to do as long as the Jit compiler still has the opportunity to do a good job.&lt;br /&gt;&lt;p style="text-align: right; font-size: 8px"&gt;Blogged with &lt;a href="http://www.flock.com/blogged-with-flock" title="Flock" target="_new"&gt;Flock&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-2435727430906062829?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/2435727430906062829/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=2435727430906062829' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/2435727430906062829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/2435727430906062829'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2008/01/why-multiple-exceptions-is-so-hot.html' title='Why Multiple Exceptions is so hot'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-6248631497032919328</id><published>2008-01-04T16:57:00.001+01:00</published><updated>2008-01-04T16:57:34.642+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='password'/><category scheme='http://www.blogger.com/atom/ns#' term='otp'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Password Expiry is Evil?</title><content type='html'>A colleague asked me yesterday if password expiry was considered best practice, and my immediate answer was no - changing your passwords regularly is best practice, expiry is an implementation technique that forces users to follow best practice.&lt;br /&gt;&lt;br /&gt;Personally I hate password expiry with a vengeance, I change my passwords regularly on accounts that need it and I leave other ones the same for years on end, why should I be forced into a pattern of behaviour? Being asked to advise on a security policy I always say that users should be instructed to employ all security best practice advice and be accountable for their actions and inactions. Even when the implementation of this forces users to change via a password expiry scheme then it is human nature to adopt a password scheme.&lt;br /&gt;&lt;br /&gt;The problem is that every single scheme makes passwords more predictable than before, so that a user can go away and drink beer for a week and then come back and get in at the second attempt. Is a randomly generated password that never expires more secure that a changed password that always includes the month in it? I think it is, at least in the online sense.&lt;br /&gt;&lt;br /&gt;Randomly generated passwords' problem is that they are generally forgettable. People write them down as a result. What that does is shift the security issue from the virtual world to the physical world, which is a mixed blessing. On the one hand staff are more familiar and well trained in the art of physical security (doors, locks, keys, etc.) and more naturally protect their passwords in that world. The other side of the coin is that, in the case of espionage, physical security is one of the most commonly compromised elements.&lt;br /&gt;&lt;br /&gt;A side effect of having active password changing in use it that you end up with your users requiring a larger number of support requests when they do accidentally lock themselves out during a changeover. What this does is encourage the support systems to be streamlined and often forget the basic authentication required before resetting a users password. Try ringing up your support desk and pretend to be your boss!&lt;br /&gt;&lt;br /&gt;So my verbose answer to the question is that password expiry generally does not improve security because of human nature and therefore is evil.&lt;br /&gt;&lt;br /&gt;  &lt;p style="text-align: right; font-size: 8px"&gt;Blogged with &lt;a href="http://www.flock.com/blogged-with-flock" title="Flock" target="_new"&gt;Flock&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-6248631497032919328?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/6248631497032919328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=6248631497032919328' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/6248631497032919328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/6248631497032919328'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2008/01/password-expiry-is-evil.html' title='Password Expiry is Evil?'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-5647783059356835565</id><published>2007-12-31T14:24:00.001+01:00</published><updated>2007-12-31T14:24:42.930+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='source'/><category scheme='http://www.blogger.com/atom/ns#' term='profanities'/><category scheme='http://www.blogger.com/atom/ns#' term='kernel'/><category scheme='http://www.blogger.com/atom/ns#' term='cvs'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>Thanks Linus and Junio</title><content type='html'>I just wanted to thank those behind Git for giving me the pleasure of including the word Git in serious corporate documents. On many occasions have I wanted to use that word, but only now can I use it without the threat of reprimand.&amp;nbsp;&amp;nbsp;  &lt;br /&gt;&lt;br /&gt;&lt;a href="http://git.or.cz/"&gt;Git - Fast Version Control System&lt;/a&gt; &lt;p style="text-align: right; font-size: 8px"&gt;Blogged with &lt;a href="http://www.flock.com/blogged-with-flock" title="Flock" target="_new"&gt;Flock&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-5647783059356835565?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/5647783059356835565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=5647783059356835565' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/5647783059356835565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/5647783059356835565'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2007/12/thanks-linus-and-junio.html' title='Thanks Linus and Junio'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-4338902376766954417</id><published>2007-12-02T17:35:00.001+01:00</published><updated>2007-12-02T17:35:21.817+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flockbrowser web adblock ie7 firefox opera'/><title type='text'>Back to Flock</title><content type='html'>I have been getting more and more fed up with Firefox, or more correctly its extensions. My main issue is the rate at which it gobbles up cpu &amp;amp; memory, so I decided a few weeks ago to find an alternative. I am still going to use FF, mainly because I cannot work without the Live Headers, Web Developer, Open QA &amp;amp; standards compliance checking tools. But for my general browsing I wanted something I could have running all the time without fear of grinding my machine into submission. The main issue I have with FF extensions is that I use a laptop that never really gets time to be rebooted, so it lives in hibernation for the few hours a week when I am not developing. FF extensions don't cope with hibernation well, the naive programmers who write many of these things have not thought that the clock can shift dramatically while the app is still running.&lt;br /&gt;&lt;br /&gt;I use a number of different browsers generally, on a number of different OS, but my target environment was a Windows XP laptop, I that meant leaving out Linux &amp;amp; Mac based options. So I set my criteria at must be easy on the eye, supported by most websites, secure and lightweight. I started my search with Opera which is most certainly lightweight, good on security, average visually but unfortunately it is not supported by many sites I use. Then I reluctantly tried IE7 again, which has proven to be more secure than expected, I found it worked well and was surprisingly lightweight for a MS app. But after a couple of years of using FF IE rendering is ugly, large and garish, and that was enough to discourage me.&lt;br /&gt;&lt;br /&gt;Then I remembered flock, a FF derivative with the social extensions built in. Running this with one extension 'Adbock Plus' gives me a stable environment with all the benefits of FF without the need for risky extensions. So far it works.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p style="text-align: right; font-size: 8px"&gt;Blogged with &lt;a href="http://www.flock.com/blogged-with-flock" title="Flock" target="_new"&gt;Flock&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-4338902376766954417?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/4338902376766954417/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=4338902376766954417' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/4338902376766954417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/4338902376766954417'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2007/12/back-to-flock.html' title='Back to Flock'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-2458032443050866892</id><published>2007-05-31T01:14:00.000+02:00</published><updated>2007-05-31T02:10:03.402+02:00</updated><title type='text'>Guice Flaw</title><content type='html'>It is not really a flaw, more of an opportunity missed. I have just spent a wee while converting a project from semi-spring to guice. Anecdotally, I prefer to refer to this exercise as goosing, and I don't care what your culture currently associates with that word, Google is a global culture and the act of exacting its influence may take over the definition as far as I am concerned, big up for the living English language! Mr Knowles will hate me.&lt;br /&gt;&lt;br /&gt;Back to the techie end...&lt;br /&gt;Moving to Java 1.5/5.0 as our LCD of new java products led us to re-evaluate various existing design choices. The conclusion was that big steps need to be taken, quite simply because they can and should be taken (cost is worth it). Guice appears to be the ideal selection for such a way forward because you can always regress to a Spring, Pico or home grown framework without having to rewrite too much. But having gone through such an exercise there is one remaining doubt; which is the flaw of the title.&lt;br /&gt;&lt;br /&gt;The doubt/flaw is that seriously used Guice requires you to transfer your 'design of linkage' to a module class, which previously was in a mixture of xml and lookup code. The people who designed Guice did the right thing by making the Binder class an interface so that you can unit test your modules, which helps, but that still leaves two issues:&lt;br /&gt;&lt;br /&gt;1. It is hard to support build systems for multiple target environments. The modules tend towards the monolithic, and even if they are testable themselves, there are still better techniques for this kind of application extensibility, e.g. OSGI. I suggest that you use inheritance and delegation in the modules, but my issue is still that the linkage becomes a development exercise in its own right, and one that required in depth Guice knowledge to boot.&lt;br /&gt;2. If you try to write a generic server style application, e.g. another web container, then you are forced to create a 'team' pattern between a Module implementation and its domain specific business classes, because they have to work together in this type of context.&lt;br /&gt;&lt;br /&gt;I managed to resolve the build issues of multiple targets by using a 'ClasspathScanner' to discover indicator files that pointed to Module classes that constituted the application. For example the Swing app would have a jar in its classpath that had a Module indicator pointing at the swing module class to be included in the injection list, while the war build would be constructed using the modules in the war path. But I think Guice should take a step in this direction, as its own processes would be best suited to this 'discovery' phase.&lt;br /&gt;&lt;br /&gt;I suppose what I am getting at is that the strong typing of Guice is both a pain and a pleasure. I hope Guice does for the J2EE framework world what Ada95 did for the fast jets of today, i.e. try and balance the industry concerns with the realities of development. Luckily the nature of DI is such that all these things are soluble, you just might have to learn another framework in the process. The pleasure is that it is testable, the pain is that you have to code it rather than just configure it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-2458032443050866892?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/2458032443050866892/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=2458032443050866892' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/2458032443050866892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/2458032443050866892'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2007/05/guice-flaw.html' title='Guice Flaw'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-116170643878295784</id><published>2006-10-24T18:13:00.001+02:00</published><updated>2006-10-24T18:15:01.200+02:00</updated><title type='text'>Ant Custom Search Engine</title><content type='html'>I thought I would try the &lt;a href="http://www.google.com/coop/cse/overview"&gt;Google Co-op - Custom Search Engine&lt;/a&gt;. So I created &lt;a href="http://www.google.com/coop/cse?cx=005336764082724295647%3A5qnza6ykjwm"&gt;one for Apache Ant&lt;/a&gt;. I included some general technology sites as well as the usual enties, let me know if you have any suggestions.&lt;br /&gt;&lt;br /&gt;&lt;!-- Google CSE Search Box Begins --&gt;&lt;br /&gt;&lt;form id="searchbox_005336764082724295647:5qnza6ykjwm" action="http://www.google.com/cse"&gt;&lt;br /&gt;  &lt;input type="hidden" name="cx" value="005336764082724295647:5qnza6ykjwm" /&gt;&lt;br /&gt;  &lt;input name="q" type="text" size="40" /&gt;&lt;br /&gt;  &lt;input type="submit" name="sa" value="Search" /&gt;&lt;br /&gt;  &lt;input type="hidden" name="cof" value="FORID:1" /&gt;&lt;br /&gt;&lt;/form&gt;&lt;br /&gt;&lt;!-- Google CSE Search Box Ends --&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-116170643878295784?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/116170643878295784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=116170643878295784' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/116170643878295784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/116170643878295784'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2006/10/ant-custom-search-engine_24.html' title='Ant Custom Search Engine'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-116014155453680004</id><published>2006-10-06T15:32:00.000+02:00</published><updated>2006-10-06T15:32:34.683+02:00</updated><title type='text'>lang:java HelloWorld - Google Code Search</title><content type='html'>&lt;a href="http://www.google.com/codesearch"&gt;Google Code Search&lt;/a&gt; is here. Wow!&lt;br /&gt;&lt;br /&gt;Not only can you look up to see where your open source code is being used. But you can easily police its license.&lt;br /&gt;&lt;br /&gt;As you are developing you can be constantly searching for snippets of the code you write to see how others have used the same api.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.google.com/codesearch?hl=en&amp;amp;lr=&amp;amp;q=lang%3Ajava+HelloWorld&amp;amp;btnG=Search"&gt;lang:java HelloWorld - Google Code Search&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-116014155453680004?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/116014155453680004/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=116014155453680004' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/116014155453680004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/116014155453680004'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2006/10/langjava-helloworld-google-code-search.html' title='lang:java HelloWorld - Google Code Search'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-115997362596349662</id><published>2006-10-04T16:53:00.000+02:00</published><updated>2006-10-04T16:54:56.360+02:00</updated><title type='text'>Spring Simple Powerful Proven</title><content type='html'>&lt;a href="http://www.springframework.org/go-2.0/"&gt;Spring 2.0&lt;/a&gt; has just been released. Ironically the same day we make a strategic decision to use Spring widely in new and existing projects.&lt;br /&gt;&lt;br /&gt;The key benefits (unordered):&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Modular Development&lt;br /&gt;&lt;li&gt;JSP Shortcuts&lt;br /&gt;&lt;li&gt;Best of Breed AOP&lt;br /&gt;&lt;li&gt;JMS Processing Support&lt;br /&gt;&lt;li&gt;Scripting Support&lt;br /&gt;&lt;li&gt;Tight Scheduler Integration&lt;br /&gt;&lt;li&gt;Transaction Support&lt;br /&gt;&lt;li&gt;Enterprise Ready&lt;br /&gt;&lt;li&gt;Easy Configuration&lt;br /&gt;&lt;li&gt;Annotation Based Exception Handling&lt;br /&gt;&lt;li&gt;EJB Utilities&lt;br /&gt;&lt;li&gt;Efficient JDBC&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;But the biggest thing is that simply making your code IoC friendly improves your design and deployment options. The enterprise integrations are a bonus after that. I just wish the beans files were as simple as pico to set up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-115997362596349662?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/115997362596349662/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=115997362596349662' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/115997362596349662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/115997362596349662'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2006/10/spring-simple-powerful-proven.html' title='Spring Simple Powerful Proven'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-115754484796008433</id><published>2006-09-06T14:14:00.000+02:00</published><updated>2006-09-06T14:14:08.170+02:00</updated><title type='text'>Free Private JVM Web Host</title><content type='html'>&lt;a href="http://s43.eatj.com/index.jsp"&gt;EATJ.com&lt;/a&gt; are providing free hosting account featuring a private JVM. But watch out, there is no backup, they switch off your VM every 6 hours to save resources, and they bump you off if you go away for too long.&lt;br /&gt;&lt;br /&gt;The production account is not that expensive for a private JVM coming in at about half the going rate. But it sounds ideal for a quick and dirty test environment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-115754484796008433?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/115754484796008433/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=115754484796008433' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/115754484796008433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/115754484796008433'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2006/09/free-private-jvm-web-host.html' title='Free Private JVM Web Host'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-115744690580573852</id><published>2006-09-05T10:46:00.000+02:00</published><updated>2006-09-05T11:01:45.820+02:00</updated><title type='text'>I was late for work because...</title><content type='html'>Good excuse from a colleague:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;I was unable to leave my house because the front door was stuck.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-115744690580573852?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/115744690580573852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=115744690580573852' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/115744690580573852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/115744690580573852'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2006/09/i-was-late-for-work-because.html' title='I was late for work because...'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-115689407207791753</id><published>2006-08-30T01:24:00.000+02:00</published><updated>2006-08-30T01:27:52.120+02:00</updated><title type='text'>1 Habit of the upper echelons of software engineers</title><content type='html'>Habit Number:&lt;br /&gt;&lt;br /&gt;#1 Just get on with the work, stop blogy blogging about it.&lt;br /&gt;&lt;br /&gt;Note to self - follow own advice.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-115689407207791753?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/115689407207791753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=115689407207791753' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/115689407207791753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/115689407207791753'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2006/08/1-habit-of-upper-echelons-of-software.html' title='1 Habit of the upper echelons of software engineers'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-115650753846966438</id><published>2006-08-25T14:05:00.000+02:00</published><updated>2006-08-25T14:07:14.326+02:00</updated><title type='text'>Got Spam? Make Money If You Are Quick</title><content type='html'>It must come as no surprise that &lt;a href="http://news.bbc.co.uk/1/hi/technology/5284618.stm"&gt;Spammers manipulate money markets&lt;/a&gt;. But until I read that article I did not realise just how much of a percentage the spammer could make.&lt;br /&gt;&lt;br /&gt;So I did a straw poll of my last 20 or so stock spam emails and looked at the &lt;a href="http://finance.yahoo.com/mt?u"&gt;online history&lt;/a&gt;. Fair enough, the difference is 4-6% over the period, I am always amazed about human nature. But then I realised that the time at which I received the spam emails was usually on the upcurve, so again with my small sample I concluded that I too could make 2-4% from selected scams.&lt;br /&gt;&lt;br /&gt;I am going to carry on watching the stock spam alerts and seeing if there is a significant pattern here. I am not planning on putting my money where my mouth is, as that would be profiting from the stupidity of spam victims. But if you were an anti-spam vigilante and you needed funding it might be a good source of income.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-115650753846966438?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/115650753846966438/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=115650753846966438' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/115650753846966438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/115650753846966438'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2006/08/got-spam-make-money-if-you-are-quick.html' title='Got Spam? Make Money If You Are Quick'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-115410213125811370</id><published>2006-07-28T17:25:00.000+02:00</published><updated>2006-07-28T18:05:52.786+02:00</updated><title type='text'>My First GoogleCode Hosted Project</title><content type='html'>It just so happens I was about to publish a small open source project. And what happens? Google let people know about &lt;a href="http://code.google.com/hosting" target="_blank"&gt;Project Hosting&lt;/a&gt; on the same day. It had to be fate, so I put my SF application on hold and decided to give google a go.&lt;br /&gt;&lt;br /&gt;My motives were really to check it out for a much bigger &lt;a href="http://code.google.com/webtoolkit/" target="_blank"&gt;GWT&lt;/a&gt; based project which is still under wraps at the moment.&lt;br /&gt;&lt;br /&gt;This is how it went:&lt;br /&gt;1. I am already a Google account holder, so I assume that I skipped the first steps.&lt;br /&gt;2. Filled in the create project form. [Which has changed in the 4 hours since I did it!!!] A look at other projects gave me an idea about the labels and I quickly realised that I had to make my description the entirety of the installation instructions. (Once you are in you can create links to other web pages for documentation)&lt;br /&gt;3. Straight in no delay, you even get a subdomain set up instantly!&lt;br /&gt;4. Fired up Eclipse (because Java is normally my thing) and checked out my source tree. Had to fiddle with the url a bit because my svn is a bit rusty. Got my generated access password and so I had a development environment within 5 minutes of the project submission.&lt;br /&gt;5. Copied into the workspace all 3 of my project files. Made adjustments to the 'powered by' statement to link back to the GCH project location. And comitted.&lt;br /&gt;6. Posted the roadmap as enhancement issues against the project.&lt;br /&gt;7. Got bored because it was too easy.&lt;br /&gt;&lt;br /&gt;Comments:&lt;br /&gt;a) It is nice and simple&lt;br /&gt;b) There is not much exposure at the moment, so I am still going to create a project reference on freshmeat.net&lt;br /&gt;c) Commit was slow, probably because there are some large projects being uploaded.&lt;br /&gt;d) It is under active development, the create project page changed in the space of a few hours (probably because it was a security risk).&lt;br /&gt;&lt;br /&gt;I will watch the feature enhancements as they grow.&lt;br /&gt;&lt;br /&gt;My project : &lt;a href="http://code.google.com/p/hackstop/"&gt;hackstop&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-115410213125811370?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/115410213125811370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=115410213125811370' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/115410213125811370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/115410213125811370'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2006/07/my-first-googlecode-hosted-project.html' title='My First GoogleCode Hosted Project'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-115409616284385353</id><published>2006-07-28T16:16:00.000+02:00</published><updated>2006-07-28T18:05:04.370+02:00</updated><title type='text'>Spot the 3D difference - Vista 3D - LG3D</title><content type='html'>First look at this one which is free, java and available now...&lt;br /&gt;&lt;img src="https://lg3d.dev.java.net/images/screenshot/lg3d-imageviewer.jpg" width="100%"&gt;&lt;br /&gt;From &lt;a href="https://lg3d.dev.java.net/"&gt;https://lg3d.dev.java.net/&lt;/a&gt; and make sure you look at the Minority Report (Go Monkey) video in the blog3d section&lt;br /&gt;&lt;br /&gt;Then check out this bootleg:&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=bnqyQotPhFY"&gt;Internal Review Of Microsoft Windows 3D Vista @ 2007&lt;/a&gt;, which is not out until next year.&lt;br /&gt;&lt;br /&gt;Try it through webstart @&lt;a href="https://lg3d-webstart.dev.java.net/"&gt;lg3d&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If you look carefully you can see where they are trying to catch up with Gnome too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-115409616284385353?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/115409616284385353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=115409616284385353' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/115409616284385353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/115409616284385353'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2006/07/spot-3d-difference-vista-3d-lg3d.html' title='Spot the 3D difference - Vista 3D - LG3D'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-115409095259458352</id><published>2006-07-28T14:49:00.000+02:00</published><updated>2006-07-28T14:49:12.686+02:00</updated><title type='text'>Rip it up and start again</title><content type='html'>Same author, same problem, better understanding, clean room implementation.&lt;br /&gt;&lt;a href="http://logback.qos.ch/index.html"&gt;LOGBack&lt;/a&gt;&lt;br /&gt;I wish more of the old guard of OSS projects would do this.&lt;br /&gt;&lt;br /&gt;Rip it up and start again&lt;br /&gt;I said rip it up and start again&lt;br /&gt;I said rip it up and rip it up and rip it up and rip it up and rip it up and start again&lt;br /&gt;&lt;br /&gt;[Orange Juice - Rip It Up]&lt;br /&gt;&lt;br /&gt;And why not put it on &lt;a href="http://code.google.com/hosting"&gt;GoogleCode Hosting&lt;/a&gt; while you are at it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-115409095259458352?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/115409095259458352/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=115409095259458352' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/115409095259458352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/115409095259458352'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2006/07/rip-it-up-and-start-again.html' title='Rip it up and start again'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-115341014908840834</id><published>2006-07-20T17:42:00.000+02:00</published><updated>2006-07-20T17:57:00.130+02:00</updated><title type='text'>Microsoft = Remotely Exploitable = No Protection</title><content type='html'>To illustrate the point:&lt;br /&gt;&lt;img src="http://secunia.com/graph/?type=sol&amp;period=all&amp;prod=22"&gt;&lt;br /&gt;&lt;img src="http://secunia.com/graph/?type=sol&amp;period=all&amp;prod=1"&gt;&lt;br /&gt;&lt;img src="http://secunia.com/graph/?type=sol&amp;period=all&amp;prod=15"&gt;&lt;br /&gt;&lt;img src="http://secunia.com/graph/?type=sol&amp;period=all&amp;prod=13"&gt;&lt;br /&gt;&lt;br /&gt;By contrast...&lt;br /&gt;&lt;br /&gt;&lt;img src="http://secunia.com/graph/?type=sol&amp;period=all&amp;prod=96"&gt;&lt;br /&gt;&lt;img src="http://secunia.com/graph/?type=sol&amp;period=all&amp;prod=4670"&gt;&lt;br /&gt;&lt;img src="http://secunia.com/graph/?type=sol&amp;period=all&amp;prod=6221"&gt;&lt;br /&gt;&lt;br /&gt;More than 20 unpatched advisories on Win XP alone!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.informit.com/discussion/index.asp?postid=60db6ead-5b26-42ed-b19d-164cbe4dbea2&amp;amp;f1=rss&amp;amp;rl=1"&gt;Weblog Discussion: Microsoft = Remotely Exploitable = Owned&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-115341014908840834?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/115341014908840834/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=115341014908840834' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/115341014908840834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/115341014908840834'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2006/07/microsoft-remotely-exploitable-no.html' title='Microsoft = Remotely Exploitable = No Protection'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-115223180076049039</id><published>2006-07-07T00:07:00.000+02:00</published><updated>2006-07-07T02:23:20.883+02:00</updated><title type='text'>Why Open Source Projects don't practice what they preach</title><content type='html'>A lot of people use OSS resources, OSS projects want lots of people to use them, but my experience is that OSS projects don't use other OSS project resources as much as their closed source counterparts.&lt;br /&gt;&lt;br /&gt;In my experience closed source projects tend to use twice as many open source libraries as similar open source projects. So I thought I would investigate why...&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Developer Ego&lt;/h3&gt;&lt;br /&gt;This was my first thought. Historically it has taken a certain type of developer to make that step towards and open source project; and knowing a few of these developers I would expect that they would prefer to show off rather than save time and effort. So there must be an element of "not invented here".&lt;br /&gt;&lt;br /&gt;Also when you make use of a large number of applied resources your project changes from being a development exercise into one of integration. But integration projects don't carry as much kudos as green field developments for their founders. If you have an ego then you would much prefer to be known for your development skills than your ability to integrate.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;The Problem With Being Open&lt;/h3&gt;&lt;br /&gt;If your users are the inquisitive kind, and a lot of them are, then they are going to look at the choices you have made regarding the supporting services upon which your project is based. That is why so many projects use Apache commons logging, for example, because it alleviates the developer from fixing that choice in stone. But not every service can be abstracted so cleanly, and bad choices can reduce the scope in which your project can be applied. The most common one is the persistence layer where a choice such as Prevayler can prevent your project from scaling in an enterprise context. But the solution, to provide alternative options, can drain your development resources and give you an increasing number of maintainability issues.&lt;br /&gt;&lt;br /&gt;Another issue is the rate of change of your chosen supporting resources. Say, for example, your project is based on Azereus libraries which update every few weeks. The question in your mind is which version or versions do I support? If 2 projects make conflicting choices then it gets harder to use them in conjunction (as happened with Cobertura, Hibernate &amp; ASM). The other side of this coin is that you also don't know what versions of your own project are still in general use, and so when you make changes to your API are you creating compatibility problems for those that might re-use your software? Closed source projects don't have this issue because they are rarely used outside the sphere of knowledge of the creators.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Responsibility&lt;/h3&gt;&lt;br /&gt;End user applications need to go through some degree of systems testing. Bugs in live systems need someone to accept responsibility for fixing them. And there is always a license to uphold. Closed projects have an advantage with all of these areas of responsibility because there is usually some money to pay for extensive testing of incorporated systems, fix bugs in other people's code and investigate the legal basis of the product.&lt;br /&gt;&lt;br /&gt;But open source projects typically do not have the luxury of a budget for supporting their re-distributed software. And more scarily, license compatibility and patent infringement are really nasty issues to have to deal with.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Feeling Exposed?&lt;/h3&gt;&lt;br /&gt;So the reason why OSS projects don't make use of many of their own kind are really related to the way in which most projects are run; a small number of personally involved developers working usually for small change handouts. The effects of this scenario subtly drive the developers to work in greater isolation, which is ironic.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-115223180076049039?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/115223180076049039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=115223180076049039' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/115223180076049039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/115223180076049039'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2006/07/why-open-source-projects-dont-practice.html' title='Why Open Source Projects don&apos;t practice what they preach'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-115149381629534418</id><published>2006-06-28T13:23:00.000+02:00</published><updated>2006-06-28T13:23:38.186+02:00</updated><title type='text'>Contributing to Java - What would you fix?</title><content type='html'>The article:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.infoworld.com/article/06/06/27/79685_HNsunopensourcejava_1.html"&gt;Sun says open-source Java possible in 'months' | InfoWorld | News | 2006-06-27 | By Jeremy Kirk, IDG News Service&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;...inspired me to think.&lt;br /&gt;What would I contribute to an Open Source version of Java?&lt;br /&gt;&lt;br /&gt;Assuming that Sun provide a nice test environment so that I know that I will not break the sacred compatibility of the langauge and its standard libraries, then what could you do?&lt;br /&gt;&lt;br /&gt;These are my first thoughts:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;An interface based abstraction of the Swing widgets.&lt;br /&gt;&lt;li&gt;Better use of models in Swing widgets, e.g. ModelBasedJLabel&lt;br /&gt;&lt;li&gt;Back 'plumbing' of JMX and JNDI support into older APIs&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Please comment with your own.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-115149381629534418?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/115149381629534418/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=115149381629534418' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/115149381629534418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/115149381629534418'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2006/06/contributing-to-java-what-would-you.html' title='Contributing to Java - What would you fix?'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-114670008673088010</id><published>2006-05-04T01:42:00.000+02:00</published><updated>2006-05-04T01:57:13.966+02:00</updated><title type='text'>Why version 6 is always crap</title><content type='html'>Whenever you write a new bit of product/functionality at the best of times you might:&lt;br /&gt;&lt;br /&gt;Test version 1&lt;br /&gt;&lt;br /&gt;Write code for version 2&lt;br /&gt;&lt;br /&gt;Do design for version 3&lt;br /&gt;&lt;br /&gt;Create requirements for version 4&lt;br /&gt;&lt;br /&gt;Fill a need for someone with version 5&lt;br /&gt;&lt;br /&gt;So it is always number 6 that lets you down. Perhaps I should rename my blog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-114670008673088010?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/114670008673088010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=114670008673088010' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/114670008673088010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/114670008673088010'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2006/05/why-version-6-is-always-crap.html' title='Why version 6 is always crap'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-114618085178949827</id><published>2006-04-28T00:34:00.000+02:00</published><updated>2006-04-28T01:34:11.810+02:00</updated><title type='text'>My Maiden Mythical Mac Month</title><content type='html'>I am cheating really, I first used a Mac in anger in 1992 as part of a University project, since then I have been a Solaris-Linux-Windows based developer (in that rough order of environments) and I kind of lost touch with what they were doing and where they were going. What is virgin status as a OS user?&lt;br /&gt;&lt;br /&gt;Anyway, So when it came to upgrading my audio-visual equipment I came up with the plan to create a media centre machine in the lounge next to a new TV. I costed the 'build your own' Linux/Haupage/MythTV option, and decided that the cost of mistakes would be too high. So that left me with three options - dedicated hardware (Kiss), Microsoft Media Centre or a Mac Mini. To cut a year long story short I ended up waiting for the Intel based Mac Mini to come out.&lt;br /&gt;&lt;br /&gt;In the beginning I was dissapointed, my Mac user mates had over-hyped it. Despite spending hard earned cash on some Tiger books (like the one for Tux fans) and actually reading them, I found the user interface very unfamilar. This is surprising as I was expecting some kind of cunning cross between XP and Gnome. Several times I resorted to the command line and my Linux knowledge to bail me out of 'where is that dialog box' syndrome.&lt;br /&gt;&lt;br /&gt;Of course I expected to have issues, after all I had bought a brand new hardware/software combination. There were issues with the matchbox sized freeview decoder, Quicktime media formats, network protocol compatibility, and various software glitches in things like iMovie. But I expected that. But I also expected that I would like the Mac environment, and that is a close call.&lt;br /&gt;&lt;br /&gt;What has grown on me is iTunes. So Easy (Eple Eple). I don't have an iPod, but still once I got past the quirky UI and 'unlearned' how to copy tracks to my mp3 player and organise smart playlists I was hooked. You don't need a Mac for iTunes, but having one with 10x rip rate is quite amazing. You put in a new CD, it starts ripping track 1 at 10x, I select track 6 to listen to at the same time, tick tick tick goes the box, the ripping continues at 9x and I listen to my track, before the end the ticking of the CD head stops because the ripper has overtaken the player. That is the kind of quality functionality I demand of my own work.&lt;br /&gt;&lt;br /&gt;Front Row is magic, I don't let the kids touch the remote control. Just one suggestion Mac developers - plugins please.&lt;br /&gt;&lt;br /&gt;The next big thing was iMovie HD. I took the video of my family skiing in the alps, and in a couple of hours had edited to a rather neat summary video. Smart, just as Jeff Goldbloom had adverised. Combine that with EyeTV and for my next trick I took Michael Schumacher's hot lap at Imola and cut it into 2 laps looped then added Gorillaz 5/4 over the top (sorry Martin) and I made myself a memorable piece of art, good driving good music.&lt;br /&gt;&lt;br /&gt;The TV on demand side of things is not that special, there are lots of systems out there that do the same for less. But I got the Mac for its ability to expand and adapt over time. Having said that the quality of the TV that I watch (when I am not fighting to turn Swing code into proper MVC) has been dramatically improved by having digital recordings at the click of a mouse (even from work).&lt;br /&gt;&lt;br /&gt;My next mission is to investigate Xcode which looks very promising. I am coming up to a laptop upgrade at work, if Xcode works well then I might investigate Steve's new portable offerings.&lt;br /&gt;&lt;br /&gt;But what of the month...&lt;br /&gt;Now I am used to the interface things are getting better. The shock of the new environment is more than that encountered when switching from XP to Gnome for example; and in my opinion a great deal of the quirkyness seems just to be there to be different (why Apple-C not Ctrl-C? I don't care which came first any more). Visually the UI is excellent, and the concepts like Hot Corners and Spotlight search are really addictive. The real winner is the applications though.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-114618085178949827?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/114618085178949827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=114618085178949827' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/114618085178949827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/114618085178949827'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2006/04/my-maiden-mythical-mac-month.html' title='My Maiden Mythical Mac Month'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-114470959490946261</id><published>2006-04-11T00:44:00.000+02:00</published><updated>2006-04-11T00:53:14.960+02:00</updated><title type='text'>Make Jars of Your Ant Builds</title><content type='html'>This &lt;a href="http://www.hughreid.com/articles/ant_build_components.html"&gt;article&lt;/a&gt; describes the use of the antlib task to make common build tasks into deployable jars.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-114470959490946261?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/114470959490946261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=114470959490946261' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/114470959490946261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/114470959490946261'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2006/04/make-jars-of-your-ant-builds.html' title='Make Jars of Your Ant Builds'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-113007167417035183</id><published>2005-10-23T14:44:00.000+02:00</published><updated>2005-10-23T14:47:54.206+02:00</updated><title type='text'>Browser Security Summary</title><content type='html'>&lt;img src="http://secunia.com/graph/?type=imp&amp;period=all&amp;prod=4932" /&gt;&lt;br /&gt;&lt;img src="http://secunia.com/graph/?type=imp&amp;period=all&amp;prod=4227" /&gt;&lt;br /&gt;&lt;img src="http://secunia.com/graph/?type=imp&amp;period=all&amp;prod=11" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-113007167417035183?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/113007167417035183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=113007167417035183' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/113007167417035183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/113007167417035183'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2005/10/browser-security-summary.html' title='Browser Security Summary'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-112870139961832117</id><published>2005-10-07T18:09:00.000+02:00</published><updated>2005-10-07T18:09:59.670+02:00</updated><title type='text'>I bet they call it 'fairway'</title><content type='html'>&lt;a href="http://news.bbc.co.uk/1/hi/technology/4309620.stm"&gt;BBC NEWS | Technology | Golf lovers get broadband package&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-112870139961832117?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/112870139961832117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=112870139961832117' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/112870139961832117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/112870139961832117'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2005/10/i-bet-they-call-it-fairway.html' title='I bet they call it &apos;fairway&apos;'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-112864110139315109</id><published>2005-10-07T01:25:00.000+02:00</published><updated>2005-10-07T01:31:52.903+02:00</updated><title type='text'>Forget Maven, jpackage.org and Ivy - use HttpUnit!</title><content type='html'>With a 24k jar, 4 lines of xml you get the jars you need in a classpath of your ant script - job done. The HttpUnit team have a little known ant extension that does the 'maven download' thing very well. It is so little known that it is easier to find it from the Ivy site than the HttpUnit site.&lt;br /&gt;&lt;a href="http://www.httpunit.org/doc/dependencies.html"&gt;http://www.httpunit.org/doc/dependencies.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I suppose that it is a little unfair on the 'dependency management' tools to compare them to something as simple as a Maven aware downloader. But the problem with all of the dm tools is their habit of being dependant on things not in their respective repositories.&lt;br /&gt;&lt;br /&gt;HttpUnit's ant-dependencies tool avoids that issue by not bothering with the minefield of inter-jar dependencies, and simply concentrating on search, version resolution and caching. Ant has built in process dependency management: e.g. &amp;lt;target name="hibernate-download" depends="c3p0-download"&amp;gt;... should do the trick. And with tools like jarhoo, jarfind etc. it does not take long to sort out your dependency tree.&lt;br /&gt;&lt;br /&gt;All this simplicity makes the tool much faster than the others. And good developers should know their class dependencies quite well anyway. For example, hibernate only requires c3p0 if you use its pooling facilities. So you would have the line: &amp;lt;dependency group="c3p0" latest="true" if="hibernate.use.connectionpool" /&amp;gt; and use the same flag to control your hibernate config generation. Manual conflict/dependency resolution is a small price to pay for empowerment.&lt;br /&gt;&lt;br /&gt;Credit where it is due though. None of this would be possible without the vision of the Maven style projects that have both driven expectations and developed the invaluable repositories.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-112864110139315109?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/112864110139315109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=112864110139315109' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/112864110139315109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/112864110139315109'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2005/10/forget-maven-jpackageorg-and-ivy-use.html' title='Forget Maven, jpackage.org and Ivy - use HttpUnit!'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-112747962614475325</id><published>2005-09-23T14:47:00.000+02:00</published><updated>2005-09-23T14:47:06.150+02:00</updated><title type='text'>JavaCast becomes The Java Posse</title><content type='html'>Dick Wall has managed to get things moving again after a bit of a stormy time by the sound of it. &lt;br /&gt;You can find the new feed here:&lt;br /&gt;&lt;a href="http://feeds.feedburner.com/javaposse"&gt;The Java Posse - RSS powered by FeedBurner&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-112747962614475325?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/112747962614475325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=112747962614475325' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/112747962614475325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/112747962614475325'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2005/09/javacast-becomes-java-posse.html' title='JavaCast becomes The Java Posse'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-112747732037161388</id><published>2005-09-23T14:08:00.000+02:00</published><updated>2005-09-23T14:08:41.083+02:00</updated><title type='text'>MG4J: Managing Gigabytes for Java™ 1.0 Released</title><content type='html'>MG4J is a project that aims to provide facilities to index and query vast quantities of information. It is the kind of thing that will allow you to build your own version of GoogleDesktop. To be precise it implements a compressed inverted-index.&lt;br /&gt;&lt;br /&gt;The critical feature of the release is its fundamental scalabiliy - both for its simple performance and its scope for multi-index, multi-process handling. All very useful features for a LGPL licensed library.&lt;br /&gt;&lt;br /&gt;It is certainly on my 'to evaluate thoroughly' list.&lt;br /&gt;&lt;a href="http://mg4j.dsi.unimi.it/"&gt;http://mg4j.dsi.unimi.it/&lt;/a&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-112747732037161388?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/112747732037161388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=112747732037161388' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/112747732037161388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/112747732037161388'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2005/09/mg4j-managing-gigabytes-for-java-10.html' title='MG4J: Managing Gigabytes for Java™ 1.0 Released'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-112717618694492843</id><published>2005-09-20T02:29:00.000+02:00</published><updated>2005-09-20T02:32:18.226+02:00</updated><title type='text'>Making the native XML pill easier to swallow for RDBMS addicts</title><content type='html'>The &lt;a href="http://sixdml.sourceforge.net/sixdml_spec_draft.htm"&gt;Simple XML Data Manipulation Language&lt;/a&gt; is still a draft version. But it provides an interface and environment that is less alien than directly using a native XML database.&lt;br /&gt;&lt;br /&gt;For a start SiXDML provides a hybrid syntax that combines the familiar SQL format with XPath and other query languages. Secondly the driver provides transaction support, which is a must in any serious environment these days.&lt;br /&gt;&lt;br /&gt;This allows you to quickly leverage the very powerful hierarchical nature of XML databases through their ability to query objects at any depth in the document collection. Which frees the data model from the rigity and prescriptive nature of RDBMS.&lt;br /&gt;&lt;br /&gt;There are some features worthy of any killer app too. Let your imagination wander... &lt;code&gt;SELECT //myobj FROM COLLECTION mydata AND TRANSFORM WITH XSLT IN http://www.mine.com/transformer.xsl&lt;/code&gt; ...nice&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-112717618694492843?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/112717618694492843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=112717618694492843' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/112717618694492843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/112717618694492843'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2005/09/making-native-xml-pill-easier-to.html' title='Making the native XML pill easier to swallow for RDBMS addicts'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-112717075144035922</id><published>2005-09-20T00:59:00.000+02:00</published><updated>2005-09-20T00:59:11.466+02:00</updated><title type='text'>A Disk Full of JAR Files</title><content type='html'>I am not bragging, but I have 12698 &lt;a href="http://java.sun.com/docs/books/tutorial/jar/"&gt;JAR Files&lt;/a&gt; on my local hard disk. I am a heavy Java user and developer, but surely there must be &lt;b&gt;something wrong with the platform&lt;/b&gt; if you get this kind of proliferation. I don't expect it to be any kind extraordinary example - certainly no record.&lt;br /&gt;&lt;br /&gt;I know that if I used a better OS I could hard link them and get a few gig back, but I should not have to do that. I am also aware that quite a few of these jars are copies produced by various application server instances and ant builds.&lt;br /&gt;&lt;br /&gt;To illustrate the scale of the problem I scanned for Jakarta's commons-logging.jar. I found over 200 of them - 4 different versions. That is not too bad because each jar is only around 30k. But log4j is ten times the size and when I searched for that jar I found about the same number. Some commonly used (and growing) jars are very large, like Xalan and jaxrpc.&lt;br /&gt;&lt;br /&gt;All this disk usage makes the Java platform/technology the single biggest user of disk space on my machine. Java is already the biggest user of my cpu cycles and memory. And this annoys me, that bloat could be easily avoided.&lt;br /&gt;&lt;br /&gt;So that is my suggestion for the next version of Java: solve the bloat problem.&lt;br /&gt;&lt;br /&gt;My own suggestion for a solution would be to make the classloader use an inbuilt cache of jars. So that way jars are imported into the VM environment rather than just loaded by reference. Now that most manifest files have the 'Class-Path:' setting then it would be possible to extend this behaviour to a build guid style reference model.&lt;br /&gt;&lt;br /&gt;There are obvious problems with this solution that I am aware of. But even a slightly better system would alleviate the issue.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-112717075144035922?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/112717075144035922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=112717075144035922' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/112717075144035922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/112717075144035922'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2005/09/disk-full-of-jar-files.html' title='A Disk Full of JAR Files'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-112670836292137999</id><published>2005-09-14T16:32:00.000+02:00</published><updated>2005-09-14T16:32:42.963+02:00</updated><title type='text'>A Replacement for JavaBlogs.com?</title><content type='html'>Google have launched their new &lt;a href="http://www.google.co.uk/blogsearch"&gt;blog search&lt;/a&gt; tool, which like their news search tool obviously needs to keep track of a vast number of web resources.&lt;br /&gt;&lt;br /&gt;It is still early days for the tool because its indexing appears to be several hours behind (either that or they forgot to set their timezone). For example a search for &lt;a href="http://www.google.com/blogsearch?hl=en&amp;q=java&amp;btnG=Search+Blogs&amp;scoring=d"&gt;Java&lt;/a&gt; shows the latest entry as from 5 hours ago. Whereas specialist aggregators will be typically under 1 hour behind.&lt;br /&gt;&lt;br /&gt;Where it does win is the way that it is a search tool and thus a complex filter. Javablogs is an opt in environment where anyone who mostly talks about Java opts into the aggregator. This means that sometimes you get stuff that is unrelated, and sometimes you miss good content on 'not normally Java'  blogs. With the search you get what the Google engine considers relevant, which means that you may miss all those blogs on Ruby (shame :'( ).&lt;br /&gt;&lt;br /&gt;The 'link:' and other search options are supported, which is an improvement on the javablogs search (which rarely works anyway).&lt;br /&gt;&lt;br /&gt;The really good feature is the atom/rss feed option for a search. That really is a nail in the specialist aggregator coffin.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-112670836292137999?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/112670836292137999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=112670836292137999' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/112670836292137999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/112670836292137999'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2005/09/replacement-for-javablogscom.html' title='A Replacement for JavaBlogs.com?'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-112660161815575979</id><published>2005-09-13T10:53:00.000+02:00</published><updated>2005-09-13T10:53:38.200+02:00</updated><title type='text'>JavaCast? RIP!</title><content type='html'>For those of you who can't find an explanation.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.voiceoftheresistance.com/?p=59"&gt;Dick Wall's&lt;/a&gt; blog.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-112660161815575979?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/112660161815575979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=112660161815575979' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/112660161815575979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/112660161815575979'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2005/09/javacast-rip.html' title='JavaCast? RIP!'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-112578094870259235</id><published>2005-09-03T22:43:00.000+02:00</published><updated>2005-09-03T22:55:48.776+02:00</updated><title type='text'>Ant macros - one step to an abstraction in the build process</title><content type='html'>&lt;a href="http://binkley.blogspot.com/2005/09/fun-with-ant-macros.html"&gt;binkley's Blog - Fun with Ant macros&lt;/a&gt; explains very clearly why macros are good for your build process. This alone is a good enough reason to move to the latter versions of ant (app server vendors take note).&lt;br /&gt;&lt;br /&gt;Combine this with the suggestions &lt;a href="http://www.hughreid.com/articles/aspirational_ants.html"&gt;here&lt;/a&gt; to build better builds and you are bound to be able to improve your build process.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-112578094870259235?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/112578094870259235/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=112578094870259235' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/112578094870259235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/112578094870259235'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2005/09/ant-macros-one-step-to-abstraction-in.html' title='Ant macros - one step to an abstraction in the build process'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-112348922108582028</id><published>2005-08-08T10:20:00.000+02:00</published><updated>2005-08-08T10:20:24.210+02:00</updated><title type='text'>ePOST Serverless Email System</title><content type='html'>&lt;a href="http://epostmail.org/"&gt;ePOST Serverless Email System&lt;/a&gt;&lt;br /&gt;is an interesting concept. I wonder if it will catch on.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-112348922108582028?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/112348922108582028/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=112348922108582028' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/112348922108582028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/112348922108582028'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2005/08/epost-serverless-email-system.html' title='ePOST Serverless Email System'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-112182046688549960</id><published>2005-07-20T02:47:00.000+02:00</published><updated>2005-07-21T10:19:04.776+02:00</updated><title type='text'>Slicker, Quicker, Slimmer IDE</title><content type='html'>I was reading the page &amp;quot;&lt;a href="http://www.netbeans.org/switch/why.html"&gt;Why Switch to NetBeans IDE ?&lt;/a&gt;&amp;quot; after yet another person had harped about it. I was reading it because I wanted to satisfy myself that &lt;i&gt;my approach&lt;/i&gt; was still correct.&lt;br /&gt;&lt;br /&gt;What is &lt;i&gt;my approach&lt;/i&gt;?&lt;br /&gt;The same one I apply when the &lt;acronym&gt;RAD&lt;/acronym&gt; borg try and assimilate me [Rational will always be the 'borg' to me no matter who owns them]. &lt;b&gt;Always Always Always know what you are doing.&lt;/b&gt; Transparency of tools is paramount, and being able to see what they are doing on your behalf is the most important factor when choosing a tool. Evaluations of tools normally only scratch the surface of a tool's capabilities and being able to spot when it makes a mistake (and then when to throw it away). I can just about stomach mock object test facilitating tools polluting the test using their own helper classes, but I draw the line at production code.&lt;br /&gt;&lt;br /&gt;So what is slicker, quicker and slimmer? I rely on very few tools, but I use them to the limits of their capabilities. Those tools are J2SE, ant and junit at the first level and then I use another set of tools that give me the ability to perform verification. These other tools are Eclipse (minimal plugins), xdoclet and various J2EE aids. The key thing is that none of them 'sing and dance' they should 'sing or dance'. So why give myself extra work? The answer is that it is usually no extra work, except when things go wrong, but then you have good visibility anyway. And if you don't understand what you are doing then you are lost anyway.&lt;br /&gt;&lt;br /&gt;In recent tests my ant build that shelled out to the wsadmin tool outperformed RAD/Websphere in a web services development project. And I have acheived similar results with Weblogic targeted builds in the past. Furthermore, such environment agnostic approaches lead to very portable development processes should you switch servers or even just have variations between development and production environments.&lt;br /&gt;&lt;br /&gt;So in the same way when you are developing enterprise software you do not want to 'eat the elephant again' then I urge you to not 'eat the donkey' in your development environment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-112182046688549960?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/112182046688549960/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=112182046688549960' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/112182046688549960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/112182046688549960'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2005/07/slicker-quicker-slimmer-ide.html' title='Slicker, Quicker, Slimmer IDE'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-111869320750728481</id><published>2005-06-13T22:06:00.000+02:00</published><updated>2005-06-13T22:42:32.340+02:00</updated><title type='text'>Fedora goes forth with Eclipse!</title><content type='html'>The &lt;a href="http://fedora.redhat.com/download/"&gt;Fedora Project&lt;/a&gt; has release Core 4 today. To anyone interested this is hardly news, but here is a quick summary on why I think it is work checking out:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Eclipse built in! IBM's Java development platform that has become popular with other languages now. [&lt;i&gt;smart move&lt;/i&gt;]&lt;br /&gt;&lt;br /&gt;AND combine that with OpenOffice which already has good MS compatability, but is also no heavily Java enabled, and finally a Java desktop integration [&lt;i&gt;ish&lt;/i&gt;]&lt;/li&gt;&lt;br /&gt;&lt;li&gt;GFS, operating system level clustering.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Progressively improving security with the SELinux security architecture.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Xen virtual machine environment.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Downloading now...................&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-111869320750728481?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/111869320750728481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=111869320750728481' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/111869320750728481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/111869320750728481'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2005/06/fedora-goes-forth-with-eclipse.html' title='Fedora goes forth with Eclipse!'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-111835654413947988</id><published>2005-06-10T00:35:00.000+02:00</published><updated>2005-06-10T00:35:44.176+02:00</updated><title type='text'>Probably the best free web log file analysis tool?</title><content type='html'>&lt;a href="http://www.nettrackerlite.com/"&gt;NetTracker Lite&lt;/a&gt; was released as 'freeware' a couple of months ago. I needed a solution that would show me user experience data in particular. So I thought I would give it a try.&lt;br /&gt;&lt;br /&gt;Most analysis tools are fiddly to set up, especially on Windows. But NetTracker Lite installed and ran first time, hooked up with my log files and gave me top class reports within minutes. The drill down reports are very impressive and the export options are useful.&lt;br /&gt;&lt;br /&gt;The free version is limited to one website and one million page views, but that should do for most sites.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-111835654413947988?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/111835654413947988/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=111835654413947988' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/111835654413947988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/111835654413947988'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2005/06/probably-best-free-web-log-file.html' title='Probably the best free web log file analysis tool?'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-111597429172307228</id><published>2005-05-13T10:51:00.000+02:00</published><updated>2005-05-13T10:51:31.726+02:00</updated><title type='text'>We are hiring Java/XML people - Surrey UK</title><content type='html'>We are looking for recent/new graduates and project lead developers.&lt;br /&gt;It is a friendly and challenging place to work.&lt;br /&gt;&lt;br /&gt;Here is the formal advert for the junior role:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Trainee Junior Developer&lt;br /&gt;&lt;br /&gt;Based in Guildford, Point specialise in eCommerce software and consultancy.  Due to recent expansion, new business and ongoing projects, we are interested in discussing career opportunities with high quality graduates with Java and/or good XML skills to join our software development team.  Web development experience would be a distinct advantage as would an understanding of  network/infrastructure management.&lt;br /&gt;&lt;br /&gt;The successful candidates would join an established team of developers with a background in delivering successful enterprise-scale applications to undertake customer project work as well as enhancing the feature set of Point’s software products.  Initially, additional duties would include web-site development and management as well as general network and infrastructure management.&lt;br /&gt;&lt;br /&gt;Key requirements are the ability to work as part of a team and to contribute to, and learn from, the team experience.  Good communication skills are essential as the role may include direct customer interaction.&lt;br /&gt;&lt;br /&gt;Salary and benefits will be related to the successful candidates’ skills and experience.&lt;br /&gt;&lt;br /&gt;If you are interested in joining a dynamic, leading-edge environment, where your personal and technical skills will be fully valued and developed, email us an introductory letter outlining your reasons for applying and why you believe you would make a positive impact on Point.&lt;br /&gt;&lt;br /&gt;For further information, please contact Max Liguori on 01483 685295&lt;br /&gt;&lt;br /&gt;Point Solutions, Surrey Technology Centre, 40 Occam Road, Surrey Research Park, Guildford GU2 7YG&lt;br /&gt;&lt;br /&gt;email to &lt;a href="mailto:recruitment@point-solutions.co.uk"&gt;recruitment@point-solutions.co.uk&lt;/a&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;This will be an ongoing process over the next few months, so get in touch anyway if you come across this later in the year.&lt;br /&gt;&lt;br /&gt;Usual EU working regulations apply.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-111597429172307228?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/111597429172307228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=111597429172307228' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/111597429172307228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/111597429172307228'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2005/05/we-are-hiring-javaxml-people-surrey-uk_13.html' title='We are hiring Java/XML people - Surrey UK'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-111443355935762252</id><published>2005-04-25T14:49:00.000+02:00</published><updated>2005-04-25T14:52:39.356+02:00</updated><title type='text'>Tip: When Weblogic says "String index out of range: -1"</title><content type='html'>This is more of a 'note to self' than a tip, but when Weblogic says "String index out of range: -1" upon deployment, what it really means is that the length of the classpath in the manifest file has exceeded the maximum number of allowed characters.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-111443355935762252?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/111443355935762252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=111443355935762252' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/111443355935762252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/111443355935762252'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2005/04/tip-when-weblogic-says-string-index.html' title='Tip: When Weblogic says &quot;String index out of range: -1&quot;'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-111415621584112668</id><published>2005-04-22T09:50:00.000+02:00</published><updated>2005-04-22T09:50:15.840+02:00</updated><title type='text'>Shaj simple, uncomplicated, perfect for a white hat hacking tool</title><content type='html'>&lt;a href="http://opensource.cenqua.com/shaj/"&gt;Shaj&lt;/a&gt; is my kind of open source. You only have to overcome the hurdle of using JNI and then you have a useful tool simply expressed.&lt;br /&gt;&lt;br /&gt;When you are basing products on open source there is a large element of risk associated with each library. Keeping each one simple and not allowing it to take over your architecture is the key to mitigating this risk.&lt;br /&gt;&lt;br /&gt;I like Shaj because its API is 3 methods, but its impact on the functionality of the system is potentially huge.&lt;br /&gt;&lt;br /&gt;Here are some potential uses:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;To verify on a local system that the user who originally logged in is still the user of the application.&lt;br /&gt;&lt;br /&gt;This is the only &lt;i&gt;safe&lt;/i&gt; use of this library.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;To verify that a remote user is a valid user of the operation system.&lt;br /&gt;&lt;br /&gt;Just don't tell your system administrator that you are using it, they might get a little worried about exposing OS security through an application - unless you are using a powerful distributed security framework already.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;To write a password cracker. Although, you would need access to run your own JVM on the target machine.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;What would be nice is if there was the option to 'become' that user as far as the OS is concerned, either on a VM or Thread level. But that would make things more complicated.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-111415621584112668?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/111415621584112668/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=111415621584112668' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/111415621584112668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/111415621584112668'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2005/04/shaj-simple-uncomplicated-perfect-for.html' title='Shaj simple, uncomplicated, perfect for a white hat hacking tool'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-111317608810971366</id><published>2005-04-11T01:34:00.000+02:00</published><updated>2005-04-11T01:34:48.110+02:00</updated><title type='text'>XSL the ball and chain of FO</title><content type='html'>Reading Kris Thompson's &lt;a href="http://adigio.com/blogs/kris/archives/2005/04/xslfo_just_shoo.html"&gt;XSL-FO... just shoot me!&lt;/a&gt; blog entry, echoes an internal report on FO processing that I recently produced. Well, almost...&lt;br /&gt;&lt;br /&gt;I had an 'Ugly' section to my summary and that was focused on the tool support. And I am not just talking about rendering engines or XSL processors, I am talking about IDE support and authoring tools. As Kris touches on, bad FO is too easy to do - which is normally where you have some great tool to help you out (like a good IDE does). And although there are commercial FO authoring tools, and HP's stirling effort FOA, by the time you learn the tool you might as well have learned FO.&lt;br /&gt;&lt;br /&gt;The scary thing about FO is its multitude of options. And knowing which option to use to get what effect is not that obvious. But combine that with all the headaches that go with XSL and you have a 'train wreck' prone feature. As I recommended in my report, stick with the FO - forget the XSL; if your app is already dealing with XML at the DOM or SAX level then treat the FO as just another XML format (as you would XHTML). With that strategy the renderers work much more effectively (mainly using less memory which speeds things up), which only leaves the black art of good FO.&lt;br /&gt;&lt;br /&gt;Don't read this the wrong way. FO is top class. A client recently requested that the content of a FO sourced PDF document be sent in a plain text email, it was almost too easy. Just don't let the, was trendy, XSL part drag it down.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-111317608810971366?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/111317608810971366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=111317608810971366' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/111317608810971366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/111317608810971366'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2005/04/xsl-ball-and-chain-of-fo.html' title='XSL the ball and chain of FO'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-111154394039650725</id><published>2005-03-23T02:29:00.000+01:00</published><updated>2005-03-23T03:12:20.396+01:00</updated><title type='text'>PDF vs CSS printing</title><content type='html'>Having just spent the last few weeks setting up a FO based print solution for an enterprise architecture (SoA + JCA), and going through the hoops required to get it working with plugin branding and other dynamic stuff, I finally had time to return to polishing the final stages of my new look &lt;a href="http://www.hughreid.com/"&gt;personal website&lt;/a&gt;. [I do have other parts to my life, but I left those out]&lt;br /&gt;&lt;br /&gt;I generate the website, and for a while I used Forrest and other similar technologies that created a pukka pdf for every page, but the pdf templates were lame and hard to improve without deep FO knowledge. I now have that knowledge, but I wanted to find an easier way.&lt;br /&gt;&lt;br /&gt;The main argument used for requiring PDF is that of security, because in theory a PDF document is immutable. In practice they are not, but they are a lot harder to change than almost any other electronic document format I know. The second reason is portability, i.e. that the document will look the same on all platforms. Ignoring the security aspects, the portability aspect is what I am getting at here.&lt;br /&gt;&lt;br /&gt;The web is increasingly portable, standards compliant browsers and better formats like CSS2 and XHTML are making life easier. One such improvement is the 'media' type of CSS layers. And this is the technique that I have employed for my website. The 'print' media type is used to turn on and off the visibility of certain divs and spans to make a printable version. Other more subtle changes like wrapping code blocks in the printed form, but scrolling them in the online format, make the whole distinction cleaner.&lt;br /&gt;&lt;br /&gt;So I thought: why don't companies who want you to print their material supply CSS based printing instead of the costly to develop and cumbersome PDF files? The client for the enterprise FO solution can sleep soundly because they required the PDF anti-tamper support, but very few purposes need this feature. But FO processing is relatively slow and resource hungry (especially Apache FOP) and client side processing is much more server friendly.&lt;br /&gt;&lt;br /&gt;I can only assume that your average web technical architect these days has not kept up with the advances in CSS over the last few years. Shame, because one of the advantages of using media typed CSS is the easy integration of handheld, kiosk and mobile clients. The rebadging or 'white label' capabilities of CSS is also much simpler because of CSS support for multiple inheritance of properties of elements (one of the few areas of less than 100% support though).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-111154394039650725?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/111154394039650725/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=111154394039650725' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/111154394039650725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/111154394039650725'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2005/03/pdf-vs-css-printing.html' title='PDF vs CSS printing'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-111080388292903582</id><published>2005-03-14T13:38:00.000+01:00</published><updated>2005-03-14T13:41:19.056+01:00</updated><title type='text'>If James Bond was a tux fan...</title><content type='html'>Q: &amp;quot;Right look here James, take this watch &lt;img src="http://www.techadvice.com/images/k88n2/thumb/27000/ta27053k2r.gif"/&gt;&amp;quot;&lt;br /&gt;&lt;br /&gt;Bond: &amp;quot;What's so special about this one Q?&amp;quot;&lt;br /&gt;&lt;br /&gt;Q: &amp;quot;Just listen for a moment! Connect this USB cable to any PC and reboot, and in no time at all...&amp;quot;&lt;br /&gt;&lt;br /&gt;Bond: &amp;quot;I am listening.&amp;quot;&lt;br /&gt;&lt;br /&gt;Q: &amp;quot;...the PC will be running Linux, with all kinds of useful applications including JEdit. It is based on a version of &lt;a href="http://featherlinux.berlios.de/"&gt;Feather Linux&lt;/a&gt; and we have remastered it to connect to the MI6 extranet. And James...&amp;quot;&lt;br /&gt;&lt;br /&gt;Bond: &amp;quot;Don't worry Q I will be careful with it.&amp;quot;&lt;br /&gt;&lt;br /&gt;Q: &amp;quot;Ah but thats just it, this time you don't have to because it is not very expensive &lt;a href="http://www.techadvice.com/info/item.asp?cid=1019&amp;pid=1464&amp;iid=27053"&gt;to buy a new one&lt;/a&gt;.&amp;quot;&lt;br /&gt;&lt;br /&gt;Bond: &amp;quot;Where is the fun in that?&amp;quot;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-111080388292903582?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/111080388292903582/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=111080388292903582' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/111080388292903582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/111080388292903582'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2005/03/if-james-bond-was-tux-fan.html' title='If James Bond was a tux fan...'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-111029080641543198</id><published>2005-03-08T15:06:00.000+01:00</published><updated>2005-03-08T15:06:46.416+01:00</updated><title type='text'>Tales of CatastrophicFailover</title><content type='html'>Martin Fowler's blog on &lt;a href="http://martinfowler.com/bliki/CatastrophicFailover.html"&gt;CatastrophicFailover&lt;/a&gt; reminded me of a classic example.&lt;br /&gt;&lt;br /&gt;I was working on a military command system project about 10 years ago. The project was in the 'systems shakedown' phase as it would now be called, which involved doing lots of things that the local population complained about, great fun but nauseatingly slow project. After 4 years and 200 developers working shifts, we had a reasonably good system. The core was in Ada (draconianly typed, excellent in other ways), interfaces to hardware were in C and C++ and the system consisted of 200 nodes each with several processors and truck loads of dual redundancy to resist physical damage.&lt;br /&gt;&lt;br /&gt;One fine day in the main operations room something happened. One by one, each of the control consoles in the room rebooted, you could see that it was happening in sequence but at a very high rate. Ada is a very robust language, the strong typing means that runtime exceptions should never happen, as a result the default exception handler is normally set to reboot the system in this context. This had never happened in the simulated 'facility'.&lt;br /&gt;&lt;br /&gt;Obviously, what was happening was that one console was being rebooted by an exception, but as part of its systems handover it was propagating the cause to its failover node, which was in turn being tripped up by the same problem. The system used a core memory replication system as a means to implement lossless hot failover, very effective but prone to this problem. Just to make matters worse the error could only be replicated (or so we thought) during periods of high activity, and so the background logging thread had not had time to record the state of the node yet and so the sophisticated replay system was useless.&lt;br /&gt;&lt;br /&gt;Step one was to avert the domino effect. So extra exception handling was temporarily added to prevent the exception from causing the meltdown. And then extra logging was added to try and discover the source.&lt;br /&gt;&lt;br /&gt;It did not take long to find the source, at least the line of code. The read of a variable that represented the direction of a target was the culprit. But this variable had been set in another node by another part of the software that had in turn read it from a hardware interface. Why then in 99.999% of cases did it work and then under conditions of heavy load it was being tripped about once a day? Heads were scratched for weeks, until one day I was in the 'facility' at a strange time of day doing some very 'quiet' testing of systems and (as we were still running the old build) the consoles rebooted in sequence. We only had a low load on the system that day and I noticed that one of the targets had just passed north....&lt;br /&gt;&lt;br /&gt;The next day I went back to the nice warm development site and started ploughing through the source of the relevant sections of code, tracing the variable back through the layers of software to its hardware origins and see why north might be significant. I discovered that the variable was being converted back and forward between radians and degrees in several different layers, but this did not answer my question. Then I took a close look at the value of PI being used, and in the C code the value was specified to one more decimal place than the Ada definition. And that was the answer, the numerical accuracy of the C conversion was different from that of the Ada so in rare circumstances the Ada could be given a value of more than 360.0 degrees and fall over in a heap.&lt;br /&gt;&lt;br /&gt;The reason why I am writing this now is that I am in the process of integrating an enterprise standard Java calculation engine with various J2EE based platforms, and despite so called standardisation - this problem of botched numerical accuracy still exists in code today. At least Java's exception handling conventions are more forgiving.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-111029080641543198?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/111029080641543198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=111029080641543198' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/111029080641543198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/111029080641543198'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2005/03/tales-of-catastrophicfailover.html' title='Tales of CatastrophicFailover'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-110920833626609633</id><published>2005-02-24T02:25:00.000+01:00</published><updated>2005-02-24T02:25:36.266+01:00</updated><title type='text'>Herons drink trendy coffee?</title><content type='html'>&lt;a href="http://www.heron-language.com/"&gt;Heron&lt;/a&gt; is a programming language that aims to embody best practice principles in a kind of 'meta' C++. It pulls together several good patterns (including AOP) in such a way that it promotes open, maintainable code; but at the same time it avoids the common pitfalls of C++.&lt;br /&gt;&lt;br /&gt;From a Java perspective, I looked at the 'hype' style text and thought 'yes', but when I looked at code examples I thought 'no not again'. The problem is that it has inherited some of the ghastly C/C++ syntax that after years of Java programming seems pathetically cryptic. And before anyone complains, I have seen the look on fresh graduates faces when they first see C syntax, and we don't need barriers like that in this industry.&lt;br /&gt;&lt;br /&gt;Syntax shock aside, Sun could have learnt a thing or two from this language definition when they spawned Java 1.5. No casts, pragmatic OO, templates and references - Christopher Diggins deserves a pat on the back. I have not had time to really get into it yet (too many customers, too little time), but the more I look at the features and see the examples the more I am reminded of a language that celebrates its 10 (or 22) year birthday - Ada95 [an excellent but overengineered language that has never been called trendy, that defined generics and mandated programming by contract back in 1983, and has the best runtime kernel for multithreaded applications - search for '&lt;a href="http://www.google.co.uk/search?q=ravenscar+rendezvous"&gt;ravenscar rendezvous&lt;/a&gt;']. I hope Heron fares better than that countess.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-110920833626609633?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/110920833626609633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=110920833626609633' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/110920833626609633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/110920833626609633'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2005/02/herons-drink-trendy-coffee.html' title='Herons drink trendy coffee?'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-110856150294159078</id><published>2005-02-16T14:45:00.000+01:00</published><updated>2005-02-16T14:48:22.666+01:00</updated><title type='text'>First Security Flaw in IE7</title><content type='html'>The &lt;a href="http://2005.rsaconference.com/us/"&gt;RSA Conference 2005&lt;/a&gt; saw the announcement of IE7 as a 'more secure' browser. Presumably he means more secure than Firefox. I wonder if any of the major betting companies are taking odds on the date of the first security flaw being found? Or how about the number of days that IE7 has fewer vulnerabilities reported than Firefox? Post a comment if you find one.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://secunia.com/graph/?type=cri&amp;period=all&amp;prod=4227" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://secunia.com/graph/?type=cri&amp;period=all&amp;prod=11" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-110856150294159078?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/110856150294159078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=110856150294159078' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/110856150294159078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/110856150294159078'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2005/02/first-security-flaw-in-ie7.html' title='First Security Flaw in IE7'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-110476984612448470</id><published>2005-01-03T17:13:00.000+01:00</published><updated>2005-01-03T17:30:46.123+01:00</updated><title type='text'>5 Top Articles For 2005</title><content type='html'>I thought that I would start the year with some topical articles of the last few months.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.informit.com/articles/article.asp?p=340869"&gt;Developing Secure Applications Through Aspect-Oriented Programming&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.pivolis.com/pdf/Distributed_Agile_V1.0.pdf"&gt;Distributed Agile Development&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.research.ibm.com/journal/sj/401/kreger.html"&gt;Java Management Extensions for application management&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.hughreid.com/contents.php?id=20"&gt;Dependency Injection with XStream&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://research.sun.com/techrep/2004/abstract-136.html"&gt;Comparative Study of Persistence Mechanisms for the Java™ Platform&lt;/a&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-110476984612448470?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/110476984612448470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=110476984612448470' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/110476984612448470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/110476984612448470'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2005/01/5-top-articles-for-2005.html' title='5 Top Articles For 2005'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-110181318339025131</id><published>2004-11-30T12:13:00.000+01:00</published><updated>2004-11-30T12:13:03.390+01:00</updated><title type='text'>Make LOVE not SPAM</title><content type='html'>&lt;a href="http://makelovenotspam.com/intl/"&gt;Make LOVE not SPAM&lt;/a&gt; is a very good idea.&lt;br /&gt;&lt;br /&gt;One word of warning though.&lt;br /&gt;If you have a mail server running at your point of presence on the default port then be careful as your ip address will appear in the logs and then the spammer will be able to target you back. My advice is only use this if you have your email server on a different ip address.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-110181318339025131?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/110181318339025131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=110181318339025131' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/110181318339025131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/110181318339025131'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/11/make-love-not-spam.html' title='Make LOVE not SPAM'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-110174307397967042</id><published>2004-11-29T16:44:00.000+01:00</published><updated>2004-11-29T17:33:36.813+01:00</updated><title type='text'>Google again does the right thing</title><content type='html'>When you use a web based email service like gmail, you rely on the service provider to protect you from virus infection. Unlike spam protection, you never need to be consulted by any filter ("would you like to be infected by this virus that I found in your email?" - Yes my name is George or No), you just ditch the message.&lt;br /&gt;&lt;br /&gt;This article - &lt;a href="http://www.hughreid.com/contents.php?id=22"&gt;Webmail Email Virus Protection Comparison&lt;/a&gt;, shows that Google is doing the right thing by protecting users completely where it can. And even though Hotmail manages to do the same by enforcing "thou shalt not have attachments" rules, infected files still get through.&lt;br /&gt;&lt;br /&gt;Interestingly it appears that Norton beats McAfee at finding virus infected files.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-110174307397967042?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/110174307397967042/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=110174307397967042' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/110174307397967042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/110174307397967042'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/11/google-again-does-right-thing.html' title='Google again does the right thing'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-110137603625034900</id><published>2004-11-25T10:47:00.000+01:00</published><updated>2004-11-25T10:47:16.250+01:00</updated><title type='text'>7 Signs of Agility</title><content type='html'>Alistair Cockburn has released a sample chapter from "&lt;a href="http://www.informit.com/articles/article.asp?p=345009"&gt;Crystal Clear Applied: The Seven Properties of Running an Agile Project&lt;/a&gt;". I thought I would blog about it because I like that it is neatly and succinctly explained. Even though most of the signs are just repeats of 'Mythical Man Month' principles with the agile spin, it is still worth having a read through. It is nice that he applies his own signs to the article.&lt;br /&gt;&lt;br /&gt;For those without time to plough through 10 pages here is my summary of the 7 signs:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Frequent delivery/integration using time-boxed iterations&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Reflect and improve, criticise and fix&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Osmotic (passive) knowledge acquisition and communication through office organisation and open channels&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Personal Safety, safe to be honest, confidence to court criticism&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Stay focused, clear tasks, priorities on work, limit the workload&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Access to expert users, fast, quality feedback&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The usual agile stuff: automated testing, CM, continuous integration&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-110137603625034900?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/110137603625034900/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=110137603625034900' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/110137603625034900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/110137603625034900'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/11/7-signs-of-agility.html' title='7 Signs of Agility'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-110112627719759538</id><published>2004-11-22T13:24:00.000+01:00</published><updated>2004-11-22T13:24:37.196+01:00</updated><title type='text'>iText 1.1</title><content type='html'>&lt;a href="http://www.lowagie.com/iText/"&gt;iText&lt;/a&gt; is a PDF library. It is widely used.&lt;br /&gt;Version 1.1 adds significantly XFDF merges, 1.5 compression, more font subsets, better scripting support and signed/verified documents.&lt;br /&gt;Apparently it is much better at recovering damaged PDF files now.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-110112627719759538?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/110112627719759538/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=110112627719759538' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/110112627719759538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/110112627719759538'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/11/itext-11.html' title='iText 1.1'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109996200967381665</id><published>2004-11-09T02:00:00.000+01:00</published><updated>2004-11-09T02:00:09.673+01:00</updated><title type='text'>SOA - "Super Open" Architectures</title><content type='html'>I was reading the snippet on SOA in this &lt;a href="http://www.javalobby.org/forums/thread.jspa?threadID=15457"&gt;Javalobby article&lt;/a&gt; and it struck me that a large number of people consider SOA to be "yet another software architect's differentiating gravy boat", and to a certain extent it is. If you approach a classic consulting architect and ask them to drive you down the SOA road, then chances are they will "do you for the basics" - in other words you might get an ESB (tarted up MOM layer), a set of technology components (repackaged Tuxedo) and a half proven (Corba style) interface framework with the badge 'SOA'.&lt;br /&gt;&lt;br /&gt;The challenges of a standard SOA implementation have not really been solved. The vendors of the likely SOA platforms are only just now getting around the table to either buy each other, swap specs or invite each other into court, and almost no implementation has been accepted as the 'industry leader' (not even IBM imho).&lt;br /&gt;&lt;br /&gt;The general idea of having well defined component interfaces that meet the broad requirements of all their possible clients is understood by the designers of SOA systems, but the technical challenges of having complete consistent and efficient interfaces for all the range of service users are very difficult to reconcile.&lt;br /&gt;The issues are further compounded by the lack of a real answers to the following:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;How do you achieve reliable communications?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;How do you ensure enterprise standard security?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;How do you keep the business logic and processes out of the technical quagmire?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;How do you maintain integrations with legacy systems?&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Add to this the transitional issues related to rolling out architectural change across business critical systems and you have a challenge that is beyond most technical architects.&lt;br /&gt;&lt;br /&gt;From my own experience, it has become clear that a successful SOA implementation is more down to defining good services and having well organised interfaces into those services than any ESB or BPEL integration. The stock answer from a consulting architect is normally, base yourself on vendor X and Y, use the backbone technology Z and the platform technology U, and then defining your interfaces is as easy as ABC and glue it all together with XML. The trick is in the bit that they typically skip, or leave to the troops on the ground - the systems design.&lt;br /&gt;&lt;br /&gt;But how do you design a component to be 'at home' in any system? With great difficulty. The problem is like having a house that you should be able to pick up and move anywhere, one that will automatically connect up to the local pipes and facilities after each relocation. One of my colleagues likens SOA design to changing jobs every month, where each time you have to forge new trust relationships, define your role in the organisation and get your email and business cards. In both analogies it takes time to get to know your surroundings, and so it follows that any component must also adapt as we do to changes. And although self adapting software does exist, the best we can hope for is configurable scripted tailoring and 'hints' management. But to script or hint correctly you need to understand the system design.&lt;br /&gt;&lt;br /&gt;I fear that most people use SOA to hide the true cost of having a good systems design. The technologies in use work well to enable flexible systems implementations, and as such allow the architect the opportunity to rework the systems design without a great deal of cost. But your first SOA implementation will typically be only about 50% efficient. And that is why I refer to SOA as "Super Open" and not "Service Oriented", architects tend to leave the systems questions open and use low quality scripts and inefficient messages to paper over the cracks.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109996200967381665?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109996200967381665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109996200967381665' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109996200967381665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109996200967381665'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/11/soa-super-open-architectures.html' title='SOA - &quot;Super Open&quot; Architectures'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109961641651558901</id><published>2004-11-05T01:21:00.000+01:00</published><updated>2004-11-05T02:00:16.516+01:00</updated><title type='text'>"Jim is a tool, Donna is a database" - designing good interfaces through roleplay</title><content type='html'>For a while now I have been trying to find a way of describing to those around me the mental process that goes into designing good software interfaces, APIs, web services or SOA components. And now I have found a good analogy I wanted to share it.&lt;br /&gt;&lt;br /&gt;The basic idea breaks down into the following stages:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Having reached a degree of business knowledge you start by trying a first cut of the grouping of operations into interfaces.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Next, you give each interface a person's name and one that has nothing to do with anyone you know.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Then you build a human character around the persons name, based on the type of operations they carry out and their degree of responsibility for the underlying business purpose.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Having done that you can start to refine your interfaces based on imagining a person in a role, doing the kind of operations you require. And that is when the human aspect comes into its own.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Take for example a B2B system, there you might have Lucy who speaks good XML and will happily go out of the office to meet clients, and Nigel who has a lot of work to do in his backroom office, normally only speaks Cobol and goes home at 6pm every day.&lt;br /&gt;&lt;br /&gt;By imagining your interfaces as people you can assign them behaviour and apply common sense to that behaviour. It allows stakeholders to be able to discuss what is in each persons job description and whether it is efficient for them to perform various tasks.&lt;br /&gt;&lt;br /&gt;So in our example B2B system, if a new customer needs an account number - then you would much rather they deal with Lucy than Nigel, but Nigel is the one with the master list of account numbers. So you have a compromise to make and decisions to be take, you might want to install an ESB telephone so that Lucy can ring Nigel from her mobile to get the number or Lucy takes a new account number before leaving to visit any potential new customer, or even introduce James as a middle man.&lt;br /&gt;&lt;br /&gt;I find that it makes spotting mistakes on an interface straightforward. If Jess your office post boy had been assigned operations that involved any degree of business knowledge then there is obviously something wrong, and similarly wrong would be if the CEO had to deliver his own post. From experience this technique works better in higher level interfaces than the programming language level, because the language level is far mor abstract and it is harder to assign human characteristics.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109961641651558901?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109961641651558901/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109961641651558901' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109961641651558901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109961641651558901'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/11/jim-is-tool-donna-is-database.html' title='&quot;Jim is a tool, Donna is a database&quot; - designing good interfaces through roleplay'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109895069438474407</id><published>2004-10-28T10:04:00.000+02:00</published><updated>2004-10-28T10:04:54.383+02:00</updated><title type='text'>Thoughtworks Crystallise Selenium</title><content type='html'>&lt;a href="http://selenium.thoughtworks.com/index.html"&gt;Selenium&lt;/a&gt; is a web based testing tool. It has been developed using standard JavaScript and uses test scripts that are themselves simple html pages, which has big implications for test management.&lt;br /&gt;&lt;br /&gt;You define tests by writing a single html table with 3 columns, &lt;i&gt;command&lt;/i&gt;, &lt;i&gt;target&lt;/i&gt; and optionally &lt;i&gt;value&lt;/i&gt;. The commands are what you might expect, doThis, checkThat style, but I did not see a 'sleep' command which might be useful for session management testing and customer acceptance tests (so they can watch).&lt;br /&gt;&lt;br /&gt;Although you can operate setup/teardown activities and there is rudimentary support for continuous integration I think that a test generation tool would be a better way to manage the complexity of tests. For example, if you had a database of low level tests and setup activities then there is no reason why the test table provided to the JavaScript test engine could not be either generated from a database or spliced together on the fly by a test server.&lt;br /&gt;&lt;br /&gt;Keep up the good work.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109895069438474407?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109895069438474407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109895069438474407' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109895069438474407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109895069438474407'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/10/thoughtworks-crystallise-selenium.html' title='Thoughtworks Crystallise Selenium'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109675880807874561</id><published>2004-10-03T01:13:00.000+02:00</published><updated>2004-10-03T01:13:28.076+02:00</updated><title type='text'>Why I went Thunderbird</title><content type='html'>The &lt;a href="http://www.mozilla.org/projects/thunderbird/"&gt;Thunderbird Mail Project&lt;/a&gt; has legs, but not quite wings.&lt;br /&gt;I have used Outlook to manage my correspondence for many years, and over the last 2 years I have enthusiastically and reluctntly converted to Evolution. Up until a few weeks ago I wanted Outlook on my XP and Evo on the good stuff.&lt;br /&gt;"Save messages on server" is a must in this scenario, 2 environments 2 email clients, no option. But that is where the TBird starts soaring, being 'standards compliant' no matter how loose the standard, means that I can share the client files not just the connection. So what?&lt;br /&gt;&lt;br /&gt;I have an ant script that makes heavy use of the sync task to keep my laptop, desktop, and home systems in a 'ready for action' state. It is along the lines of Martin's Subversioned Desktop, but without the version control. Almost every project I have been involved with starts with an exchange of very meaningful emails, and being able to access and search these emails is relatively important to the success of the project. In the past I have found myself converting Outlook PST files when necessary, it all depends on what I was doing when I received the pertinient email.&lt;br /&gt;&lt;br /&gt;TBird allows me to share a common email folder in both Windows and Linux environments. And its news/rss etc. integration gives you the ability to mix emails with targeted news. I am still a long way from reaching the limits of what it can do to merge and cross polenate ideas between fields.&lt;br /&gt;&lt;br /&gt;However, there is no calendar/scheduling function. Mozilla consider this to be a separate project, but they have 2 projects that fit that niche. Unusually, they are letting both run - one version targeted at integration with email and browser technologies and the other designed to work on its own.  Microsoft have proved the value of such integrated applications, and I hope that Mozilla can make the right decisions in this area. In the mean time the 2 project complement very nicely the 'de facto' functionality provided.&lt;br /&gt;&lt;br /&gt;TBird is nothing special on its own. It is a mixture of familiar common email features; which makes reading the manual almost obsolete. But what is does do is free you from a proprietary email system -  you can even grep your emails. To sum it up, Thunderbird is sharing friendly.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109675880807874561?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109675880807874561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109675880807874561' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109675880807874561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109675880807874561'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/10/why-i-went-thunderbird.html' title='Why I went Thunderbird'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109641204816011278</id><published>2004-09-29T00:54:00.000+02:00</published><updated>2004-09-29T00:54:08.160+02:00</updated><title type='text'>Ready Set Go Document</title><content type='html'>&lt;a href="http://readyset.tigris.org/"&gt;The ReadySet project&lt;/a&gt; provides a useful resource of project templates. Born from academia, it is intended to be honed by industry professionals who are supposed to put the templates and checklists through their paces on a daily basis.&lt;br /&gt;&lt;br /&gt;A nice idea, but is anyone really using them?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109641204816011278?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109641204816011278/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109641204816011278' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109641204816011278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109641204816011278'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/09/ready-set-go-document.html' title='Ready Set Go Document'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109541152845405424</id><published>2004-09-17T10:58:00.000+02:00</published><updated>2004-09-17T10:58:48.453+02:00</updated><title type='text'>I am leaving today</title><content type='html'>Just to keep up with the theme of 'getting out' blogs recently I thought that I would add mine. Yes, today is my last day at the ponderous governmental organisation, Monday will be the new dawn of a new company in a new country working in a new industry - but still doing the same old J2EE stuff only hopefully better, faster and lighter.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.i-resign.com/uk/resigning/how-to-resign.asp"&gt;How to Resign with Style and Dignity&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Might be a bit too busy to blog over the next few weeks though.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109541152845405424?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109541152845405424/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109541152845405424' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109541152845405424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109541152845405424'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/09/i-am-leaving-today.html' title='I am leaving today'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109532728137793012</id><published>2004-09-16T11:34:00.000+02:00</published><updated>2004-09-16T11:34:41.376+02:00</updated><title type='text'>What's New In GNOME 2.8</title><content type='html'>1. New File Manager with an inversion of the relationship between the file manager and the applications. The apps now tell the file manager what they can cope with.&lt;br /&gt;2. The Glider theme "wow...smooth...boring"&lt;br /&gt;3. Keyboard layout previews, "does your keyboard look like this?" useful if you use a remote desktop in another country (as you do every day).&lt;br /&gt;4. Panel Applet selector.&lt;br /&gt;5. Calendar now integrated with Evolution&lt;br /&gt;6. Network Monitor now does wifi monitoring.&lt;br /&gt;7. A battery monitor that actually works.&lt;br /&gt;8. Weather now supports the new UK forecasts, yet another topic of conversation on the train - "did you catch the Gnome forecast last night?", "yes its going to rain later", "yes". Just in time, I move to the UK next week.&lt;br /&gt;9. Evolution 2.0 (the evolved one)&lt;br /&gt;10. Epiphany desktop aware web browser&lt;br /&gt;11. Built in VNC for big brothers&lt;br /&gt;12. Unified system clock, network and user management tools&lt;br /&gt;13. GUI for network analysis tools, hmmm...familiar&lt;br /&gt;14. Configuration search, hmmmm...dangerous&lt;br /&gt;&lt;br /&gt;&lt;a href="http://gnome.org/start/2.8/"&gt;See GNOME 2.8&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109532728137793012?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109532728137793012/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109532728137793012' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109532728137793012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109532728137793012'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/09/whats-new-in-gnome-28.html' title='What&apos;s New In GNOME 2.8'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109514747916044285</id><published>2004-09-14T09:37:00.000+02:00</published><updated>2004-09-14T09:37:59.160+02:00</updated><title type='text'>Java Open Single Sign-On Project</title><content type='html'>Ever since the concepts behind JAAS really clicked inside my head I have been meaning to write this kind of thing. The &lt;a href="http://www.josso.org/"&gt;Java Open Single Sign-On Project&lt;/a&gt; groups together the sign on requirements of a system.&lt;br /&gt;One of the useful things it adds is a reverse proxy, something that is quite unique among OSS security projects.&lt;br /&gt;It is at RC1 at the moment, but I can envisage a whole raft of feature requests for version 1.1 - like adding a distributed element (multi layer Realm) or supporting other security schemes like one-time passwords.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109514747916044285?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109514747916044285/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109514747916044285' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109514747916044285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109514747916044285'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/09/java-open-single-sign-on-project.html' title='Java Open Single Sign-On Project'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109482920353382539</id><published>2004-09-10T17:13:00.000+02:00</published><updated>2004-09-10T17:13:23.533+02:00</updated><title type='text'>LDAP in Eclipse from Cyrone</title><content type='html'>&lt;a href="http://cyrone.com/en/downloads.html"&gt;Cyrone&lt;/a&gt; have released an LGPL LDAP plugin for eclipse 3.0.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109482920353382539?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109482920353382539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109482920353382539' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109482920353382539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109482920353382539'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/09/ldap-in-eclipse-from-cyrone.html' title='LDAP in Eclipse from Cyrone'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109473031287631595</id><published>2004-09-09T13:45:00.000+02:00</published><updated>2004-09-09T13:45:12.876+02:00</updated><title type='text'>Robot that eats flies for fuel</title><content type='html'>&lt;a href="http://www.ias.uwe.ac.uk/Energy-Autonomy-New/New%20Scientist%20-%20EcoBot%20II.htm"&gt;UWE&lt;/a&gt; have produced a robot powered by dead flies or rotten fruit. How it catches the flies in the first place is not clear from the site, but perhaps they land on the rotten fruit.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109473031287631595?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109473031287631595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109473031287631595' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109473031287631595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109473031287631595'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/09/robot-that-eats-flies-for-fuel.html' title='Robot that eats flies for fuel'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109462859670861636</id><published>2004-09-08T09:29:00.000+02:00</published><updated>2004-09-08T09:39:55.450+02:00</updated><title type='text'>Web Design with Apache Forrests Skins</title><content type='html'>Recently I have been using &lt;a href="http://forrest.apache.org"&gt;Forrest&lt;/a&gt; to generate websites for existing projects (I use maven for new ones). And like a number of people have pointed out it is very good at doing that.&lt;br /&gt;&lt;br /&gt;On the other side of the coin there are a few websites that are not techie orientated that could benefit from this kind of 'just type forrest' generation.&lt;br /&gt;One of the key enabling factors is that Forrest 0.6 will have docbook 4.1.2 support that means that Open Office and Abiword documents can act as sources. But in my experience most people are quite happy with WordPad to edit structured text.&lt;br /&gt;&lt;br /&gt;Installation for a website owner is very simple, install forrest, seed or unzip a template I give them, create a couple of links on their menus, add a record task to the ant build to log to a desktop file, set up the upload.&lt;br /&gt;&lt;br /&gt;The biggest drawback of Forrest is that its skins are a real mess. They produce standards compiant xhtml, but the design is not up to slick business website quality - with a large number of little 'hacks' here and there to make things look better. For example the ForrestTable template has 'width=100%' which makes page alignment die.&lt;br /&gt;&lt;br /&gt;I have just completed my first conversion of an &lt;a href="http://www.oswd.org/"&gt;Open Source Web Design&lt;/a&gt; template to a Forrest Skin. It took a while to unpick the XSL from the nested html elements of the default skin and apply that to the test design from the OSWD. I chose the &lt;a href="http://www.oswd.org/viewdesign.phtml?id=1192"&gt;Gila&lt;/a&gt; design as my test because it is one I know quite well, and it looks good IMHO.&lt;br /&gt;&lt;br /&gt;There were a number of things that I needed to compromise on to get it to work visually as well as functionally. The use of logos in a skinned page does not work well and so I opted to use the project/group names that could be compatibly styled. I moved the search, host, credits and pdf links to a right hand panel. To get the pdf link outside the document section I needed to select an otherwise hidden section of the document template output and import it to the panel. The menu was a bit ticky to keep working properly, I ended up keeping the group div that the javascript depends on and losing all the other divs in favour of ul/li structure. I also adjusted parts of the document colour scheme (e.g. table) to match the overall skin scheme.&lt;br /&gt;&lt;br /&gt;The tabs and the content of the page needed some XPath voodoo, because the default skin designs are based on referencing certain div classes created by other templates. Cocoon is a very powerful tool, and the ability to do this is important to be able to have flexibility, but it creates a really difficult to maintain coupling between different templates.&lt;br /&gt;&lt;br /&gt;I am going to release a website with a Gila like skin soon, then you will see what it can look like. In the mean time if you want a beta version of the skin then email me at skins ut hughreid ot com. Imagine what your project website might look like with this &lt;a href="http://www.oswd.org/viewdesign.phtml?id=54"&gt;Face&lt;/a&gt; skin.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109462859670861636?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109462859670861636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109462859670861636' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109462859670861636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109462859670861636'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/09/web-design-with-apache-forrests-skins.html' title='Web Design with Apache Forrests Skins'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109454026642258983</id><published>2004-09-07T08:57:00.000+02:00</published><updated>2004-09-07T08:57:46.423+02:00</updated><title type='text'>"Maths holy grail could bring disaster for internet"</title><content type='html'>Sensational journalism really gets to me sometimes. The article &lt;a href="http://www.guardian.co.uk/uk_news/story/0,3604,1298728,00.html"&gt;Maths holy grail could bring disaster for internet&lt;/a&gt; is a prime ;) example.&lt;br /&gt;&lt;br /&gt;The piece of news is that 2 big maths problems might have been solved. And almost every other media agency has taken that slant. But this headline is pure sensationalism, based on a grain of fact, that understanding why primes are primes will pull the rug from under strong encryption.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;On the one hand, Tim might be right.&lt;br /&gt;Assuming that, armed with intimate knowledge of prime numbers, someone can devise a way to crack any strong encryption quickly and efficiently. And then that technique falls into the wrong hands, and becomes widely used.&lt;br /&gt;What you get is the internet a few years ago again, where there is no https in general use and 'man in the middle' attacks are impossible to detect or protect against.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;But more likely is that the maths does give you that first step to understanding primes. But instead of opening the flood gates it only gives the number one step of many insights required to provide instant cracking.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Security is not just about encryption. Excryption is a technology that enables many features of internet security systems. Take away that technology and you still have some security, but you need to plug the holes with solutions based on other technologies. While this might be really inconvenient it is not impossible.&lt;br /&gt;&lt;br /&gt;So if you have any ideas kicking round your head that provide security without encryption then now is the time to file the patent. But I wouldn't bother building them yet.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109454026642258983?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109454026642258983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109454026642258983' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109454026642258983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109454026642258983'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/09/maths-holy-grail-could-bring-disaster.html' title='&quot;Maths holy grail could bring disaster for internet&quot;'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109448952234682604</id><published>2004-09-06T18:52:00.000+02:00</published><updated>2004-09-06T18:52:02.346+02:00</updated><title type='text'>AnandTech - MythTV Setup and Install</title><content type='html'>This is interesting stuff at the moment, shame I did not have this before the glorious summer of sport.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.anandtech.com/linux/showdoc.aspx?i=2190"&gt;AnandTech&lt;/a&gt;.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109448952234682604?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109448952234682604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109448952234682604' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109448952234682604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109448952234682604'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/09/anandtech-mythtv-setup-and-install.html' title='AnandTech - MythTV Setup and Install'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109448605548229094</id><published>2004-09-06T17:54:00.000+02:00</published><updated>2004-09-06T17:54:15.483+02:00</updated><title type='text'>Guarded against myself</title><content type='html'>I was trying to track down why my email just appeared to melt away over the last few days. I checked the usual reason, my ISP, but for once they were blameless and actually helpful.&lt;br /&gt;&lt;br /&gt;I eventually realised that it must be &lt;a href="http://antispam.yahoo.com/tools?tool=1"&gt;Yahoo! SpamGuard&lt;/a&gt; that was declaring each and every email I was getting as spam. Once real emails are classified as spam then they can very easily get lost in the bulk folder, as many spams are post dated, leading properly dated emails to appear on about page 19 - and there is no way to sort by sequence. So to get anything back I have to do some imaginative searching, for emails I think I might have recently recieved.&lt;br /&gt;&lt;br /&gt;Even now that I have retrained SpamGuard not to classify emails from myself to myself as spam, they still end up going back in the bulk folder eventually. The reason for that is that spammers send thousands of emails claiming to be from me, and these get bounced as spam by ligitimate system admins, then SpamGuard associates emails from me with being spam.&lt;br /&gt;&lt;br /&gt;Hell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109448605548229094?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109448605548229094/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109448605548229094' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109448605548229094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109448605548229094'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/09/guarded-against-myself.html' title='Guarded against myself'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109398687641695811</id><published>2004-09-01T11:14:00.000+02:00</published><updated>2004-09-01T11:31:35.980+02:00</updated><title type='text'>IETF Sender ID ready in sendmail patch!</title><content type='html'>If you are a sendmail user then the &lt;a href="http://www.sendmail.net/"&gt;sendmail.net&lt;/a&gt; test site is advertising for testers for the soon to be launched 'Sender ID'.&lt;br /&gt;&lt;br /&gt;You need to be at the latest version of sendmail and download a small patch program. Whether or not you agree with the solution I think that it is worth trying.&lt;br /&gt;&lt;br /&gt;I hope that initiatives like this will finally turn the tide against spam and prove that &lt;a href="http://www.hughreid.com/contents.php?id=13"&gt;my article&lt;/a&gt; is wrong.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109398687641695811?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109398687641695811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109398687641695811' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109398687641695811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109398687641695811'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/09/ietf-sender-id-ready-in-sendmail-patch.html' title='IETF Sender ID ready in sendmail patch!'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109393159212637034</id><published>2004-08-31T07:53:00.000+02:00</published><updated>2004-08-31T07:53:12.126+02:00</updated><title type='text'>Program with Smileys</title><content type='html'>Here is the latest in my list of minimalist programming languages.&lt;br /&gt;&lt;a href="http://deekoo.net/technocracy/vertica_smile/"&gt;Vertica Smile - The Programming Language of the Future&lt;/a&gt;, takes a different approach, instead of using single characters it uses various types of smileys. For example the increment operator is :-) and the decrement :*(.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109393159212637034?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109393159212637034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109393159212637034' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109393159212637034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109393159212637034'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/08/program-with-smileys.html' title='Program with Smileys'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109393107801351785</id><published>2004-08-31T07:44:00.000+02:00</published><updated>2004-08-31T07:44:38.013+02:00</updated><title type='text'>Open Source, Closed Shutters</title><content type='html'>As ever here is another example of how OSS is driven by real needs rather than just profit. See &lt;a href="http://weather.rudis.net/megatrack/"&gt;MegaTrack, Tropical Storm Tracking&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The red storm in the top right looks like it is heading straight for my house.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109393107801351785?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109393107801351785/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109393107801351785' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109393107801351785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109393107801351785'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/08/open-source-closed-shutters.html' title='Open Source, Closed Shutters'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109385260998661612</id><published>2004-08-30T09:56:00.000+02:00</published><updated>2004-08-30T09:56:49.986+02:00</updated><title type='text'>Cargo Cult Security - Windows Live Update</title><content type='html'>It is like saying that "our roads are safer now that we have much faster ambulances". Microsoft have obviously looked at effective security products and effectively secure operating systems and decided that in order to &lt;i&gt;give the impression&lt;/i&gt; that their systems are secure they need to exhibit the same features as those systems.&lt;br /&gt;Richard Feynman describes this 'form' as the cargo cult, put into a software engineering context &lt;a href="http://www.stevemcconnell.com/CargoCultSe.pdf"&gt;here&lt;/a&gt;. In the security context the cult of good security exhibits:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Full Disclosure&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Open Source Audit&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Built in Cryptography&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Active Patching&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;The OpenBSD model of "proactive" auditing of software and "security by default" distributions, leads to good security. The fact that they have all the exhibited form is incidental. The OpenBSD patch mechanism is very basic, because there are not that many security holes to patch, most potential exploits were designed out from an early stage.&lt;br /&gt;&lt;br /&gt;I suppose when you have a 'runaway train' of security issues then you would need a 256Mb brake. I hope it works.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109385260998661612?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109385260998661612/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109385260998661612' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109385260998661612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109385260998661612'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/08/cargo-cult-security-windows-live.html' title='Cargo Cult Security - Windows Live Update'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109384780156766246</id><published>2004-08-30T08:36:00.000+02:00</published><updated>2004-08-30T08:37:27.523+02:00</updated><title type='text'>Doctor, Doctor - I am suffering from the Agile virus!</title><content type='html'>&lt;em&gt;"Take two requirements documents now, come back on Monday for your analysis, then Tuesday for design, then Wednesday for coding, then Thursday for testing and on Friday you can meet the customer"&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Dean Margerison has released an article, &lt;a href="http://freshmeat.net/articles/view/1279/"&gt;Agile Practices&lt;/a&gt;, which describes how "viral adoption" is spreading this new way of working.&lt;br /&gt;&lt;br /&gt;It is very high level look at the world of Agile technologies and practices, it has some nice phrases sprinkled around like "&lt;i&gt;weight of the ceremony associated with methodology&lt;/i&gt;" and even some stats on things like Maven.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109384780156766246?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109384780156766246/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109384780156766246' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109384780156766246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109384780156766246'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/08/doctor-doctor-i-am-suffering-from.html' title='Doctor, Doctor - I am suffering from the Agile virus!'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109384659140852768</id><published>2004-08-30T08:16:00.000+02:00</published><updated>2004-08-30T08:16:31.406+02:00</updated><title type='text'>Microsoft leaves the door open for the competition.</title><content type='html'>Bill, does it really take 5 years to make your Windows product secure? Has the slip in launch dates been directly related to the effort to make Longhorn secure?&lt;br /&gt;&lt;br /&gt;I am sure that Apple, IBM, HP and RedHat are not going to pass up this opportunity to take a slice of market share. But how are they going to do it? Where is the key to the market? What segment should they target?&lt;br /&gt;&lt;br /&gt;Apple have a good, but expensive, alternative to Windows already doing reasonably well. IBM's drive to integrate everything should put them in a good position to move into the desktop (presumably with Java applications). RedHat have a very well packaged Linux distribution that gets better on a daily basis.&lt;br /&gt;&lt;br /&gt;It used to be that the home market was made up of souped up games machines, until people realised that they could afford to get the equivalent of their office machines. Now the tables are a bit turned, the home market tends to lead the office market on the operating systems, whereas the office market leads the home market on hardware. For example, my office machine is 10x faster than my home machine, my office operating system is 10x older than my home operating system.&lt;br /&gt;&lt;br /&gt;XP is 3 years old next month, and I have to say that in my experience its adoption into the office environment has been cautiously done. I don't think there is a sysadmin out there who has not been challenged by the TCO question of switching to a Linux alternative.&lt;br /&gt;&lt;br /&gt;Maybe the delay of Longhorn will allow XP to cement itself properly, by giving Windows sysadmins a chance to improve systems without changing them every 2 years. Or it might give them time to test out alternative solutions. Whatever the situation, the door has been left open for a short time, see who makes the most of it.&lt;br /&gt;&lt;br /&gt;Also watch out for Google, they might not have any plans in this area but there is something going on behind the scenes at the moment (they keep hiring top Java people). It might be that they enter the platform market with integrated desktop applications.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.reuters.com/newsArticle.jhtml?type=technologyNews&amp;amp;storyID=6093123"&gt;Technology News Article | Reuters.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109384659140852768?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109384659140852768/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109384659140852768' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109384659140852768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109384659140852768'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/08/microsoft-leaves-door-open-for.html' title='Microsoft leaves the door open for the competition.'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109361098067375382</id><published>2004-08-27T14:49:00.000+02:00</published><updated>2004-08-27T14:56:55.610+02:00</updated><title type='text'>Swing JAAS - poor Dr Dee</title><content type='html'>I don't want to be too critical about &lt;a href="http://www.photeus.com:8080/swing_jaas/design.jsp"&gt;Swing JAAS&lt;/a&gt;, because its is a nice idea. But...&lt;br /&gt;&lt;br /&gt;Dr. Dee appears to be confusing the UI (Swing in this case) with Client applications. The two normally go together, but the former implies JAAS4Swing and the latter distributed JAAS. Reading the design notes it is obvious that this library tried to do both.&lt;br /&gt;&lt;br /&gt;In a bit more detail:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Distibuted JAAS is very hard to achieve without going vendor specific, because there is little support for the concept in the standards.&lt;br /&gt;Having written two djaas implementations over the last few years I know the difficulties (sorry closed source). For example certain key components of the JAAS framework are not Serializable, and you always have the security issues associated with 'man in the middle' attacks. Once you have solved these problems Distributed JAAS is very cool, because you can break the single server notion. Using the EJB model is probably a bit limiting in this case because it is not as powerful as the JAAS mechanism (but a bit easier to get your head round).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Swing Authentication &amp;amp; Authorisation, is what I think Dr. Dee was originally trying to do here.&lt;br /&gt;The authentication part should be simple, provide a default callback handler that delegates to a Document and bean model that is used to power the app's login screen; you can also allow an app to register its own CallbackHandler if it needs to.&lt;br /&gt;With the current approach to authorisation you are likely to get problems, because of the 101 ways that swing lets you do things. Using actions is the right way to do things if you are going to take this approach, and developers should be using actions for all things they want 'authorizable'. But if you go further then you must be prepared to do the whole job, rather than leaving it ad hoc and inconsistent.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;The way an EJB client security normally works is by using a Proxy object, that checks the authorization of the method call in progress. Exceptions are thrown to represent the various failure cases. Because all EJB components are produced from their Home interface, which does the Proxy magic, then all access is protected by this mechanism. Doing the same with Swing is a very difficult task because it is not all action based, nor would using Proxy objects to wrap the various Model interfaces work either because the interface is so inconsistent. You could require and impose good techniques on the developer, but unfortunately security is normally an afterthought, and so requiring major code adaption would make people look at other solutions.&lt;br /&gt;&lt;br /&gt;The real world examples of UI authorisation that I have actually seen and built are all based around bespoke implementations of the AccessController concept, because it is quicker to do than wrap most of Swing. You can of course use AOP point cuts to augment the swing byte code or even use a decompiler to build checks into faux versions of the swing components (and you might get a visit from Sun's lawyers). Another idea is to use an XML driven UI that would be unique for each role.&lt;br /&gt;&lt;br /&gt;The most plausibly workable, but still simple, solution I have come across is the 'permit on pack' paradigm. Most swing application UIs are fully formed when the window.pack() gets called, all the panels, text boxes and buttons are in the component tree. Typically you have also logged in at this point, just before the window.show() is called. So why not parse the component tree and try and match all optional elements to their authorisation settings? The code to do this would not be pretty, but at least it would be a 'one stop shop' for making panels in/visible and menus enabled etc. You could also find out what to authenticate for by analysing the tree at the same time; so if your ACL permits you to use features of another system then you could log into that one as well.&lt;br /&gt;&lt;br /&gt;How do you do it? In your Swing implementation you make sure that you add your nested components to the parent containers in the constructor (which is fortunately what most people do by default). Then in the Applet.start() or JFrame.show() method your wrap the super call in a Subject.doAs() having obtained the Subject from a LoginContext. Inside the doAs call  you should then call the code that does the turning on and off of the various parts of the UI before actually starting/showing the application. This 'one time' check works for most application types. Running the whole application as a particular Subject has the added advantage of providing support to remote security like samba drive access.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109361098067375382?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109361098067375382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109361098067375382' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109361098067375382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109361098067375382'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/08/swing-jaas-poor-dr-dee.html' title='Swing JAAS - poor Dr Dee'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109359444392855171</id><published>2004-08-27T10:14:00.000+02:00</published><updated>2004-08-27T10:14:03.926+02:00</updated><title type='text'>Embedding Perl in Java - PLJava</title><content type='html'>JPL was the first commercial Perl tool, it embedded a Perl interpreter into the JVM. Now a free alternative has emerged &lt;a href="http://search.cpan.org/src/GMPASSOS/PLJava-0.04/README"&gt;PLJava&lt;/a&gt;.&lt;br /&gt;It is still very alpha but looks promising.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109359444392855171?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109359444392855171/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109359444392855171' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109359444392855171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109359444392855171'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/08/embedding-perl-in-java-pljava.html' title='Embedding Perl in Java - PLJava'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109353884317054401</id><published>2004-08-26T17:17:00.000+02:00</published><updated>2004-08-26T18:59:14.923+02:00</updated><title type='text'>James Drools</title><content type='html'>Take two top class bits of Java technology, &lt;a href="http://james.apache.org/"&gt;James&lt;/a&gt; apache's mail server and &lt;a href="http://drools.org/"&gt;Drools&lt;/a&gt; from Codehaus. Mix them together and what do you get, a powerful rule engine for email processing.&lt;br /&gt;&lt;br /&gt;The way to do it is to take the Mailet interface of James and write a DroolsMailet like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public class DroolsMailet extends GenericMailet {&lt;br /&gt;&lt;br /&gt;    private WorkingMemory memory = null;&lt;br /&gt;&lt;br /&gt;    public void init() throws MessagingException {&lt;br /&gt;        super.init();&lt;br /&gt;        MailetConfig config = getMailetConfig();&lt;br /&gt;        String rules = config.getInitParameter("rules");&lt;br /&gt;        RuleBase ruleBase = RuleBaseBuilder.buildFromUrl(&lt;br /&gt;            this.getClass().getResource(rules));&lt;br /&gt;        memory = ruleBase.newWorkingMemory();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void service(Mail mail) throws MessagingException {&lt;br /&gt;        ...&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;You may want to persist the working memory or have some kind of rule reload, but this simple implementation should do for most things.&lt;br /&gt;&lt;br /&gt;When James calls the service method you want to trigger Drools to work on the new message. So the service method in its basic form looks like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    memory.assertObject(mail);&lt;br /&gt;    memory.fireAllRules();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;But there is a problem with that, your working memory will slowly fill up with all the messages that go through James. So you want to have some way to limit the number of messages in your working memory. You could do this by timestamp, have a Drools rule that retracts messages where the lastUpdated timestamp is more than a certain time ago. But if you get a flood of emails through your server then you could still blow its memory capacity. So instead you should fix a limited number of message to hold, like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    private final LinkedList messageList = new LinkedList();&lt;br /&gt;    private int maxMessagesToHold = 100; // some default size&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;then in your init method:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    maxMessagesToHold = Integer.parseInt(config.getInitParameter("windowSize"));&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;and in the service method:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    messageList.addLast(mail);&lt;br /&gt;    if (messageList.size() &gt; maxMessagesToHold) {&lt;br /&gt;        Mail oldMessage = (Mail) messageList.removeFirst();&lt;br /&gt;        memory.retractObject(oldMessage);&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So now your Drools working memory holds the last X messages in it, so what! This is where you start being able to write some powerful rules. Most people are probably thinking of various spam filtering techniques. But how about this for a different kind of rule:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  &amp;lt;rule name="ClientRecordIncoming"&amp;gt;&lt;br /&gt;    &amp;lt;parameter identifier="message"&amp;gt;&lt;br /&gt;      &amp;lt;java:class&amp;gt;org.apache.mailet.Mail&amp;lt;/java:class&amp;gt;&lt;br /&gt;    &amp;lt;/parameter&amp;gt;&lt;br /&gt;    &amp;lt;parameter identifier="clients"&amp;gt;&lt;br /&gt;      &amp;lt;java:class&amp;gt;com.mycorp.ClientDatabase&amp;lt;/java:class&amp;gt;&lt;br /&gt;    &amp;lt;/parameter&amp;gt;&lt;br /&gt;    &amp;lt;java:condition&amp;gt;clients.isClientAddress(message.getSender())&amp;lt;/java:condition&amp;gt;&lt;br /&gt;    &amp;lt;java:consequence&amp;gt;&lt;br /&gt;      Client client = clients.getClientByAddress(message.getSender());&lt;br /&gt;      clients.recordMessage(client, message);&lt;br /&gt;    &amp;lt;/java:consequence&amp;gt;&lt;br /&gt;  &amp;lt;/rule&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This rule will record all incoming messages from a recognised client in your client database, assuming you can write the ClientDatabase class and load it into working memory in the mailet init method. You could just as easily write this into the mailet, but the power of Drools really shows when you start cross relating emails.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  &amp;lt;rule name="RelationshipMapper"&amp;gt;&lt;br /&gt;    &amp;lt;parameter identifier="first"&amp;gt;&lt;br /&gt;      &amp;lt;java:class&amp;gt;org.apache.mailet.Mail&amp;lt;/java:class&amp;gt;&lt;br /&gt;    &amp;lt;/parameter&amp;gt;&lt;br /&gt;    &amp;lt;parameter identifier="second"&amp;gt;&lt;br /&gt;      &amp;lt;java:class&amp;gt;org.apache.mailet.Mail&amp;lt;/java:class&amp;gt;&lt;br /&gt;    &amp;lt;/parameter&amp;gt;&lt;br /&gt;    &amp;lt;java:condition&amp;gt;first.getRecipients().size() == 1&amp;lt;/java:condition&amp;gt;&lt;br /&gt;    &amp;lt;java:condition&amp;gt;second.getRecipients().size() == 1&amp;lt;/java:condition&amp;gt;&lt;br /&gt;    &amp;lt;java:condition&amp;gt;first.getRecipients().contains(second.getSender())&amp;lt;/java:condition&amp;gt;&lt;br /&gt;    &amp;lt;java:condition&amp;gt;second.getRecipients().contains(first.getSender())&amp;lt;/java:condition&amp;gt;&lt;br /&gt;    &amp;lt;java:consequence&amp;gt;&lt;br /&gt;      EmailRelationship related = Relationships.get(first.getSender(), second.getSender());&lt;br /&gt;      if (related.isNew()) {&lt;br /&gt;        drools.assertObject(related);&lt;br /&gt;      } else {&lt;br /&gt;        drools.modifyObject(related);&lt;br /&gt;      }&lt;br /&gt;    &amp;lt;/java:consequence&amp;gt;&lt;br /&gt;  &amp;lt;/rule&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This rule will fire when there is an exchange of emails between two addresses within the window. This way you could track the business relationships of your staff through their emails.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  &amp;lt;rule name="DepartmentalRelationshipMapper"&amp;gt;&lt;br /&gt;    &amp;lt;parameter identifier="related"&amp;gt;&lt;br /&gt;      &amp;lt;java:class&amp;gt;com.mycopr.EmailRelationship&amp;lt;/java:class&amp;gt;&lt;br /&gt;    &amp;lt;/parameter&amp;gt;&lt;br /&gt;    &amp;lt;parameter identifier="staff"&amp;gt;&lt;br /&gt;      &amp;lt;java:class&amp;gt;com.mycorp.StaffDatabase&amp;lt;/java:class&amp;gt;&lt;br /&gt;    &amp;lt;/parameter&amp;gt;&lt;br /&gt;    &amp;lt;java:condition&amp;gt;staff.deptOf(related.first) != staff.deptOf(related.second)&amp;lt;/java:condition&amp;gt;&lt;br /&gt;    &amp;lt;java:consequence&amp;gt;&lt;br /&gt;       ...&lt;br /&gt;    &amp;lt;/java:consequence&amp;gt;&lt;br /&gt;  &amp;lt;/rule&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And the list goes on...&lt;br /&gt;It reminds me of chinese wall compliance tools.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109353884317054401?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109353884317054401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109353884317054401' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109353884317054401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109353884317054401'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/08/james-drools.html' title='James Drools'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109344138153850807</id><published>2004-08-25T15:43:00.000+02:00</published><updated>2004-08-25T15:59:33.530+02:00</updated><title type='text'>Backdoor DI with XStream</title><content type='html'>Simple, scary; got objects, externalize them to XML, tinker with the XML, render them back, and bingo a static IoC container implementation. No getters, setters or constructors in sight.&lt;br /&gt;&lt;br /&gt;This article &lt;a href="http://www.hughreid.com/contents.php?id=20"&gt;Dependency Injection with XStream&lt;/a&gt; follows on in the vein of "cool things you can do with XStream" that I began with &lt;a href="http://youarenumber6.blogspot.com/2004/08/configurable-factories-and-proxy.html"&gt;this blog&lt;/a&gt;, combining it with my other meme of the moment, IoC.&lt;br /&gt;&lt;br /&gt;It works because XStream uses XPath to ensure that object relationships are preserved in the same Object graph. That way when objects get unmarshalled they are created with their dependencies already injected. The defined container is transparent because it uses a Proxy implementation to delegate to its contents, simple (and restrictive) but very clean.&lt;br /&gt;&lt;br /&gt;The two main drawbacks are that there is no lifecycle and the object definition can get a bit messy. But with a bit of extra code you can get round these issues.&lt;br /&gt;&lt;br /&gt;I would appreciate comments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109344138153850807?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109344138153850807/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109344138153850807' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109344138153850807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109344138153850807'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/08/backdoor-di-with-xstream.html' title='Backdoor DI with XStream'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109338918063163422</id><published>2004-08-25T01:13:00.000+02:00</published><updated>2004-08-25T10:57:00.053+02:00</updated><title type='text'>What the butler said about Gymnastics</title><content type='html'>The BBC delivered a memorable evenings viewing tonight when a servant commentator, used to rugby, was given a 'free hand' to wax lyrical about olympic synchronised swimming. Oh the humour, oh the irony, it is what makes an uninhibited BBC worth paying for. Seriously, it is what counts.&lt;br /&gt;From the heart of the EU, i.e. abroad.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Never mind the 'beer blogs in the morning'.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109338918063163422?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109338918063163422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109338918063163422' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109338918063163422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109338918063163422'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/08/what-butler-said-about-gymnastics.html' title='What the butler said about Gymnastics'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109333919603581657</id><published>2004-08-24T11:19:00.000+02:00</published><updated>2004-08-24T11:23:26.953+02:00</updated><title type='text'>Start of a Java OSS name drought?</title><content type='html'>Marius is quite certain that his new alpha GPL project called &lt;a href="http://jini.matux.de/"&gt;Jini is not IRC&lt;/a&gt; is a good name. The fact that it has been listed as Jini on freshmeat and is packaged as jini also, make it probably not a very good name. It might be quite a good IRC client in the end, so I don't want to knock the project. But is this a sign that we are running out of OSS names?&lt;br /&gt;&lt;br /&gt;The classic Java OSS naming conventions are getting quite well used now. I am talking about:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;j[something]&lt;/li&gt;&lt;br /&gt;&lt;li&gt;[something]4j&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Java[something]&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;And most meaningful words to substitute for something have been used. e.g. jLog, log4j and JavaLog.&lt;br /&gt;&lt;br /&gt;I don't think that we will ever run out of names. And some names will eventually get re-used (Jini is in use Marius). But there may be a lack of unique representative names in some topic areas. There are a couple of ways to handle the name drought.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Create an official OSS name registry, to prevent duplicates and speed up name re-use.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Have a more structured naming scheme - org.java.logging.myspecialframework project&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;I don't actually like any of these suggestions. There are some advantages to having an official registry, things like trademarking. Project owners would be discouraged from naming projects things like 'MicrosoftWord4j' while with the help of funding protected from the reverse - commercial name hijacking. Offensive names could be weeded out too.&lt;br /&gt;&lt;br /&gt;Sourceforge (and the osdn in general) could probably be considered as the master list of OSS projects; but there is not a 100% coverage, particularly in areas of Sun's technology and Apache's projects.&lt;br /&gt;&lt;br /&gt;I would be interested in hearing about any suggestions for Java naming conventions for OSS projects, or any comments on the idea of a registry.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109333919603581657?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109333919603581657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109333919603581657' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109333919603581657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109333919603581657'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/08/start-of-java-oss-name-drought.html' title='Start of a Java OSS name drought?'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109326134742453644</id><published>2004-08-23T13:42:00.000+02:00</published><updated>2004-08-23T13:43:37.766+02:00</updated><title type='text'>How to stop your CM from strangling Eclipse</title><content type='html'>How many times have you had to abandon a refactoring exercise because you can't check something out or regretted doing it after spending days blocked in a merge?&lt;br /&gt;&lt;br /&gt;Eclipse, or any other modern IDE, should be able to let you refactor hundreds of files in one go. But most projects would shy away from any such change, preferring to work in an imperfect world than face the project disruption or ensuing merge hell.&lt;br /&gt;&lt;br /&gt;I don't like it when support tools like CM, invaluable though they are, have a direct influence to the project implementation. Which is why this &lt;a href="http://www.hughreid.com/contents.php?id=19"&gt;article&lt;/a&gt; came about. It tries to solve the issues of using archive files as the unit of control, albeit with a step back in technology.&lt;br /&gt;&lt;br /&gt;Using a higher level of source control produces some benefits that may tip the balance. Things like consitent checkins, build script simplification, one source one jar etc. But these are more conveniences, the main gain is in allowing the refactoring to take place unhindered.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109326134742453644?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109326134742453644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109326134742453644' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109326134742453644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109326134742453644'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/08/how-to-stop-your-cm-from-strangling.html' title='How to stop your CM from strangling Eclipse'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109324814589243352</id><published>2004-08-23T10:02:00.000+02:00</published><updated>2004-08-23T10:02:25.893+02:00</updated><title type='text'>502 Server Error - from Google!</title><content type='html'>I have encountered a Google server error for the first time ever today. 502 are normally sent when the proxy gets garbage from the backend servers.&lt;br /&gt;Monday, August 23, 2004, at 08:00:00 UTC ish&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109324814589243352?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109324814589243352/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109324814589243352' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109324814589243352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109324814589243352'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/08/502-server-error-from-google.html' title='502 Server Error - from Google!'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109324552861660068</id><published>2004-08-23T09:18:00.000+02:00</published><updated>2004-08-23T09:18:48.616+02:00</updated><title type='text'>Open, Honest and Exploitable?</title><content type='html'>The blog &lt;a href="http://weblogs.java.net/pub/wlg/1764"&gt;JXTA Yields an Application for P2P Backups&lt;/a&gt; is worth a read, because it has a great deal of good information in it. I applaud the 'declaration of interests', which is always good to know when you are reading something in a public context. And I agree with the comments on Swing, done right it is as good as any other.&lt;br /&gt;&lt;br /&gt;LeanOnMe is a good idea, and by being a commercial product makes the 'size' problem less of an issue. The 'size' problem is that when you create a backup, your backup sets are generally larger than the original (the exact size depends on the compression to number of versions ratio). So your backup media needs to be at least the same size as what you are backup up.&lt;br /&gt;&lt;br /&gt;I differentiate between backups that allow a user to get the file back that they accidentally deleted on Friday (when they got back from the pub); and backups that permit timely recovery from virus attack, disk failure or "your office is toast". LeanOnMe is potentially a good piece of a larger backup scheme, where local and remote backups play different roles. I like the idea of being able to upload my entire HD when upgrading my PC. See &lt;a href="http://youarenumber6.blogspot.com/2004/06/what-to-do-with-gigabyte-email-storage.html"&gt;my other blog&lt;/a&gt; for another idea about remote backup.&lt;br /&gt;&lt;br /&gt;There is a danger when being this open though. By naming the technologies involved and describing the process Daniel has provided hackers with one piece of the puzzle required to write a successful exploit. The security consultants mantra "the hacker knows your system" is true now for LeanOnMe, and although "security through obscurity" is a myth (even the Amiga has worms), keeping your security system quiet is still a good idea to prevent you becoming the Google "I feel lucky" choice. 312 should keep a very close eye on security advisories for the technology used. A virus infested backup is almost useless.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109324552861660068?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109324552861660068/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109324552861660068' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109324552861660068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109324552861660068'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/08/open-honest-and-exploitable.html' title='Open, Honest and Exploitable?'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109299642812430943</id><published>2004-08-20T12:07:00.000+02:00</published><updated>2004-08-20T12:07:08.123+02:00</updated><title type='text'>Agile Pigs and Unit Testing Tips</title><content type='html'>I have just posted an article that people might find interesting. &lt;a href="http://www.hughreid.com/contents.php?id=18"&gt;Agile Bug Finding with Risk Targeted Testing in Java&lt;/a&gt;, is a bit of a long winded way to say "use the Halstead Volume metric".&lt;br /&gt;&lt;br /&gt;But part of its is tips on unit testing in Java that is more blog relevant.&lt;br /&gt;Here is an extract:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;UL&gt;&lt;br /&gt;  &lt;LI&gt;Run the tests every time you change something. If you use Ant then have a &lt;br /&gt;  test task that gets triggered on change. Keep your old test results for &lt;br /&gt;  reference.&lt;/LI&gt;&lt;br /&gt;  &lt;LI&gt;Use XML for your test data. Hard coded tests are more difficult to &lt;br /&gt;  maintain. An XML database is the ultimate form, but using a simple tool like &lt;br /&gt;  XStream can do what you need. Use the XML include directive to share data &lt;br /&gt;  between sets of test cases.&lt;/LI&gt;&lt;br /&gt;  &lt;LI&gt;Check your test classes with FindBugs. FindBugs will examine the logic, &lt;br /&gt;  which should be very simple in test classes. Having passed that your test &lt;br /&gt;  classes can be safely used.&lt;/LI&gt;&lt;br /&gt;  &lt;LI&gt;Use MockObjects or real classes with Proxy interceptors to keep the unit &lt;br /&gt;  tests at the unit level. This insulates test classes, test data and test &lt;br /&gt;  running against changes to other parts of the system.&lt;/LI&gt;&lt;br /&gt;  &lt;LI&gt;The test class hierarchy should mimic that of the real code under test, &lt;br /&gt;  this allows abstract classes to be tested properly.&lt;/LI&gt;&lt;br /&gt;  &lt;LI&gt;For reviewing code use an integrated tool like Jupiter for Eclipse, that &lt;br /&gt;  stores the review information with the source code.&lt;/LI&gt;&lt;br /&gt;  &lt;LI&gt;Build metrics collection into your test process. Use the extensions to &lt;br /&gt;  Checkstyle to get some and test to get the others. For example try running a &lt;br /&gt;  complex test case 1000 times to get an idea of performance, or at the end of &lt;br /&gt;  the test serialize the object under test and see its size. You can then watch &lt;br /&gt;  for dramatic changes in metrics.&lt;/LI&gt;&lt;br /&gt;  &lt;LI&gt;Use architectural checks like Macker rules to preserve the architecture &lt;br /&gt;  standards.&lt;/LI&gt;&lt;br /&gt;  &lt;LI&gt;Use a tool like vDoclet to generate an initial set of test cases and your &lt;br /&gt;  basic JUnit test class from the interface definition.&lt;/LI&gt;&lt;/UL&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109299642812430943?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109299642812430943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109299642812430943' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109299642812430943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109299642812430943'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/08/agile-pigs-and-unit-testing-tips.html' title='Agile Pigs and Unit Testing Tips'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109298238478943011</id><published>2004-08-20T08:13:00.000+02:00</published><updated>2004-08-20T08:20:58.576+02:00</updated><title type='text'>Got a question about Java? Fred or Eric will know.</title><content type='html'>For a while now I have been asking &lt;a href="http://www.hughreid.com/links.php?go=113"&gt;Eric&lt;/a&gt; about Java links. But I have recently discovered that &lt;a href="http://www.hughreid.com/links.php?go=135"&gt;Fred&lt;/a&gt; is worthy of note too.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109298238478943011?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109298238478943011/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109298238478943011' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109298238478943011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109298238478943011'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/08/got-question-about-java-fred-or-eric.html' title='Got a question about Java? Fred or Eric will know.'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109294890625937125</id><published>2004-08-19T22:55:00.000+02:00</published><updated>2004-08-19T23:19:54.420+02:00</updated><title type='text'>No one would have believed in the last years of the nineteenth century...</title><content type='html'>New type of spam warning: The Literary Quote form&lt;br /&gt;&lt;br /&gt;In the last few days several emails trying to sell me mortgages have got through my multi tool net, those dirty rats.&lt;br /&gt;&lt;br /&gt;For those of you who did not recognise it, the &lt;a href="http://www.fourmilab.ch/etexts/www/warworlds/b1c1.html"&gt;title&lt;/a&gt; is from the first lines of H.G.Wells' War of the Worlds. Which my bayesian filter would not have caught, because I live where the book was set, and so quite a number of words in the text appear in my valid emails.&lt;br /&gt;&lt;br /&gt;I try and keep track of the variations using the article &lt;a href="http://www.hughreid.com/contents.php?id=13"&gt;Spammers Will Always Win&lt;/a&gt;. Which will get updated shortly with this one.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109294890625937125?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109294890625937125/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109294890625937125' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109294890625937125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109294890625937125'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/08/no-one-would-have-believed-in-last.html' title='No one would have believed in the last years of the nineteenth century...'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109294331427015344</id><published>2004-08-19T21:21:00.000+02:00</published><updated>2004-08-19T21:21:54.270+02:00</updated><title type='text'>Concentrate on the leaks in your Java heap, without springing a leak in your bank account!</title><content type='html'>I give the &lt;a href="http://www.khelekore.org/jmp/"&gt;Java Memory Profiler (JMP)&lt;/a&gt; a Silver medal, no Gold, no, my mistake, Silver (pending appeal).&lt;br /&gt;&lt;br /&gt;It is written in C (herecy!) but for 2 very good reasons, firstly the JVM interface is a native one anyway, and secondly it needs to out perform the JVM to work at all.&lt;br /&gt;&lt;br /&gt;The UI is GTK+ based, which means that the Windows version is a bit fiddly to install. And provides a simple uncomplicated interface to controlling the program. There is, however, a way to use it without the UI, presumably for shell based usage.&lt;br /&gt;&lt;br /&gt;Feature wise, JMP does the basics. If you work the JVM built in profiler hard then you just about get what JMP gives you out of the box. If you work JMP hard then you can get results that are just as useful as those from a pro tool like JProbe.&lt;br /&gt;&lt;br /&gt;The latest version just released contains a call tree display, which is a useful addition, and also improves on the filtering capabilities. JMP provides a very effective way to analyse memory usage and time spent in method calls.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109294331427015344?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109294331427015344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109294331427015344' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109294331427015344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109294331427015344'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/08/concentrate-on-leaks-in-your-java-heap.html' title='Concentrate on the leaks in your Java heap, without springing a leak in your bank account!'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109291423865499546</id><published>2004-08-19T09:42:00.000+02:00</published><updated>2004-08-19T13:17:18.653+02:00</updated><title type='text'>$$ per CPU cycle and better, faster, lighter applications</title><content type='html'>Reading &lt;a href="http://blog.topix.net/archives/000016.html"&gt;about Gmail&lt;/a&gt; prompted me to do a rough cost per CPU cycle on some of the systems I have been using.&lt;br /&gt;&lt;br /&gt;Using Google as one extreme example. Say it has 100,000 servers that run on average a 1GHz clock, and that the networking overhead is around 10% of cpu cycles. Then imagine that each server costs $100 a year to run (estimated - mostly power consumption, support and investment cost). The creation cost is far higher. You get 9Mhz per dollar per year, or each CPU cycle costs 0.00001111 cents per year. The reason why that figure can be so low is because of the scale of the system, the low initial cost of the units and support cost per unit.&lt;br /&gt;&lt;br /&gt;Next lets take my home PC. 1 CPU with a 333Mhz clock. It cost $3000 about 8 years ago which equates to $500 a year (assuming 10 year life and I could have got 6% in the bank). Doing the same calculations you get 666Khz per dollar per year, or 0.00015 cents per cycle per year. I assume my support is free in this case.&lt;br /&gt;&lt;br /&gt;How about an upgrade? 1 CPU with a 2.4GHz clock at $1000 equates to around $200 a year. This gives you 12MHz per dollar per year or 0.0000083 cents per cycle per year. Even my wife might be convinced by that one.&lt;br /&gt;&lt;br /&gt;Now an example of a lightweight dot com (circa 2000). 10 twin processor 1.8Ghz CPUs. From memory this costed at $2300 per year per server, which comes mostly from support and infrastructure charges. Tap,tap, tap... 1.5MHz per dollar per year or 0.000064 cents per cycle per year.&lt;br /&gt;&lt;br /&gt;A development server. 1x8 CPU 800MHz box from a major brand with double gold SLA. This typically comes out at $30000 a year (support is a big earner). Equates to 213KHz per dollar per year, or 0.00047 cents per cycle per year.&lt;br /&gt;&lt;br /&gt;Which means that if you spend $1 per year you get (in KHz):&lt;br /&gt;12000 New PC&lt;br /&gt;9000 Google&lt;br /&gt;1500 Dot Com&lt;br /&gt;666 Old PC&lt;br /&gt;213 Dev Server&lt;br /&gt;&lt;br /&gt;Take for example a set of programs that you can run. Each one takes a certain percentage of the CPU when in operation and so you can roughly equate that to an 'in use' figure in MHz of cycles required. For example an application that uses 100MHz continuously would cost a new PC user $8 per year to run, Google $11, Dot Com $67, me $150 and a Dev Server $470 a year.&lt;br /&gt;&lt;br /&gt;Then take your inhouse application running on your business systems server (not unlike a dev server). In production using classic elephant techniques you might have a 5GHz application. That's $23k per year for your monolithic server or $555 for Google. Using better faster, lighter techniques you might have a 3GHz application with the proportional saving in cost.&lt;br /&gt;&lt;br /&gt;When you scale up your platform the costs obviously come down and the cycles per dollar rise. For example having 2 monolithic servers pushes the 100MHz cost down to around $350 per year. So if the 5GHz application became a 10GHz app and you added another server then the delta cost is around $12k. If you were running the lighter version then you could stick with 1 server and the delta cost for doubling requirements would be $14k or if you went for 2 anyway $6k (but don't forget the $100k capital investment).&lt;br /&gt;&lt;br /&gt;How about an email spam filter server, something an ISP might consider putting in. Assuming a fast pipe, we are talking about a 20GHz application, costed using the dot com model $13k per year. But what if you used a peer-to-peer architecture for the application, cost at home PC model is $1670 per year. So even if you compensated the PC users for their loss of cycles and even bandwidth it is still cheaper.&lt;br /&gt;&lt;br /&gt;To summarize:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Unless you are google then server side processing has to be lighweight.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Client side processing is cheap, therefore peer networks are cheap.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Moore's law will soon make even the time spent to write this blog seem costly.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;I must try not to write rambling blogs.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109291423865499546?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109291423865499546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109291423865499546' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109291423865499546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109291423865499546'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/08/per-cpu-cycle-and-better-faster.html' title='$$ per CPU cycle and better, faster, lighter applications'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109289996346527054</id><published>2004-08-19T07:53:00.000+02:00</published><updated>2004-08-19T09:19:23.466+02:00</updated><title type='text'>Finding a home for your open source baby</title><content type='html'>Assuming you are intending on using Java and a license like LGPL then here are some choices.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://sourceforge.net/register/"&gt;SourceForge&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://savannah.gnu.org/"&gt;Savannah (GNU)&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.java.net/request_project.csp"&gt;java.net&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.codehaus.org/FAQ"&gt;Codehaus&lt;/a&gt; - if you are interesting.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.tigris.org/"&gt;Tigris&lt;/a&gt; - if you fit their mission.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://incubator.apache.org/index.html"&gt;Apache Incubator&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;So what are your requirements from a host?&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;CVS or similar&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Website&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Mailing List&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Bug Tracking&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Membership Management&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Automated Build &amp;amp; Test&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Download Server&lt;/li&gt;&lt;br /&gt;&lt;li&gt;High Visibility&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Good Security&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Legal Aid&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ibiblio.org/fosphost/"&gt;This&lt;/a&gt; is a good place to start. No host matches all the requirements, but they are after all free services.&lt;br /&gt;But it comes down to 2 really, sf.net and java.net and by all accounts there is not much to choose between them. java.net sounds more reliable (probably because its is still small), sf.net has slightly better features and visibility.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109289996346527054?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109289996346527054/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109289996346527054' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109289996346527054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109289996346527054'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/08/finding-home-for-your-open-source-baby.html' title='Finding a home for your open source baby'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109273987195489504</id><published>2004-08-17T12:51:00.000+02:00</published><updated>2004-08-17T14:46:28.870+02:00</updated><title type='text'>Configurable Factories and Proxy Injection using XStream</title><content type='html'>&lt;a href="http://xstream.codehaus.org/"&gt;XStream&lt;/a&gt; is a useful lightweight persistence/transport/config xml round-trip library. Here is an example of how to use it for configurable factories.&lt;br /&gt;&lt;br /&gt;So you have got your factory pattern in use:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;MyObject.java&lt;br /&gt;MyObjectImpl.java&lt;br /&gt;MyObjectFactory.java&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;[please don't nit pick about the pattern implementation it is not the point of the blog]&lt;br /&gt;You interface class MyObject is implemented by MyObjectImpl and you use the MyObjectFactory class to bind them together.&lt;br /&gt;&lt;br /&gt;Here is the basic factory skeleton:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class MyObjectFactory {&lt;br /&gt;    ...&lt;br /&gt;    MyObject getMyObject() {&lt;br /&gt;        MyObject object;&lt;br /&gt;        // whatever creational method is used will contain&lt;br /&gt;        object = createMyObject();&lt;br /&gt;        // and whatever&lt;br /&gt;        return object;&lt;br /&gt;    }&lt;br /&gt;    private MyObject createMyObject() {&lt;br /&gt;        // return new MyObjectImpl();&lt;br /&gt;        ...&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Next we create a utility class to abstract out the file and XStream handling. This is only a simple implementation, if you do this for real you should consider JNDI, getResourceAsStream and the use of patch directories.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public final class PrototypeFileReader {&lt;br /&gt;    private static final XStream XSTREAM = new XStream();&lt;br /&gt;    public static Object read(Class prototypeClass) {&lt;br /&gt;        try {&lt;br /&gt;            String fileName = prototypeClass.getName() + "-prototype.xml";&lt;br /&gt;            Reader myPrototypeReader = new FileReader(fileName);&lt;br /&gt;            return XSTREAM.fromXML(myPrototypeReader);&lt;br /&gt;        } catch (FileNotFoundException e) {&lt;br /&gt;            e.printStackTrace(); // or whatever&lt;br /&gt;            return null;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The factory method then becomes:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    Object created = PrototypeFileReader.read(MyObject.class);&lt;br /&gt;    if (created == null) {&lt;br /&gt;        // throw a runtime exception of your choice&lt;br /&gt;    }&lt;br /&gt;    return created;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And to make it work you create the MyObject-prototype.xml file:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;example.xstream.MyObjectImpl&amp;gt;&lt;br /&gt;  &amp;lt;name&amp;gt;defaultName&amp;lt;/name&amp;gt;&lt;br /&gt;  &amp;lt;value&amp;gt;defaultValue&amp;lt;/value&amp;gt;&lt;br /&gt;&amp;lt;/example.xstream.MyObjectImpl&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And to make that file you would use this little utility:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public class PrototypeOutput {&lt;br /&gt;    private static final XStream XSTREAM = new XStream();&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;        String className = args[0];&lt;br /&gt;        try {&lt;br /&gt;            Object object = Class.forName(className).newInstance();&lt;br /&gt;            System.out.println(XSTREAM.toXML(object));&lt;br /&gt;        } catch (Exception e) { // naughty&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Note that XStream will normally leave null fields out of serialized form. See the documentation for more details.&lt;br /&gt;&lt;br /&gt;That is how you get the basic version running. The real power comes when you need to change the implementation either temporarily or permanently.&lt;br /&gt;&lt;br /&gt;Here are 2 use cases of how you might want to change what the factory produces:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Version 2 needs to use an extended version to support a new feature.&lt;br /&gt;&lt;br /&gt;To do this you add the new class to the classpath and change the xml file to be something like:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;example.xstream.MyObjectExtendedImpl&amp;gt;&lt;br /&gt;  &amp;lt;name&amp;gt;defaultName&amp;lt;/name&amp;gt;&lt;br /&gt;  &amp;lt;value&amp;gt;defaultValue&amp;lt;/value&amp;gt;&lt;br /&gt;  &amp;lt;description&amp;gt;defaultDescription&amp;lt;/description&amp;gt;&lt;br /&gt;&amp;lt;/example.xstream.MyObjectExtendedImpl&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;You need to trace the calls to the methods of the object.&lt;br /&gt;&lt;br /&gt;XStream has a DynamicProxyConverter which is very useful for inserting a proxy implementation in the place of your class, as in:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;dynamic-proxy&amp;gt;&lt;br /&gt;  &amp;lt;interface&amp;gt;example.xstream.MyObject&amp;lt;/interface&amp;gt;&lt;br /&gt;  &amp;lt;handler class="example.xstream.MyInvocationHandler"&amp;gt;&lt;br /&gt;    &amp;lt;real class="example.xstream.MyObjectImpl"&amp;gt;&lt;br /&gt;      &amp;lt;name&amp;gt;UNKNOWN&amp;lt;/name&amp;gt;&lt;br /&gt;      &amp;lt;value&amp;gt;UNKNOWN&amp;lt;/value&amp;gt;&lt;br /&gt;    &amp;lt;/real&amp;gt;&lt;br /&gt;  &amp;lt;/handler&amp;gt;&lt;br /&gt;&amp;lt;/dynamic-proxy&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This example uses the InvocationHandler implementation MyInvocationHandler which is constructed with the member variable 'real' that is invoked as you trace the call. Other handlers might not need the 'real' implementation and could instead bind to test data or raise exceptions.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109273987195489504?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109273987195489504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109273987195489504' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109273987195489504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109273987195489504'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/08/configurable-factories-and-proxy.html' title='Configurable Factories and Proxy Injection using XStream'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109273236578150474</id><published>2004-08-17T10:46:00.000+02:00</published><updated>2004-08-17T10:56:14.990+02:00</updated><title type='text'>Getter-based is the mother of all dependency injection</title><content type='html'>A while ago I wrote the blog &lt;a href="http://youarenumber6.blogspot.com/2004/06/containers-their-injections.html"&gt;Containers &amp;amp; their injections&lt;/a&gt;, and I have noticed that arguments still rage on the merits of the various types of IoC paradigm.&lt;br /&gt;&lt;br /&gt;Using a getter based pattern gives you full control of how to manage your injections. You are then free to map this to any of the various types, even those that use AOP.&lt;br /&gt;&lt;br /&gt;So for example you have:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;abstract class MyThingy {&lt;br /&gt;    final void doMyThingyThing() {&lt;br /&gt;        ...&lt;br /&gt;        serviceThingy = getMyRequiredServiceThingy();&lt;br /&gt;        ...&lt;br /&gt;    }&lt;br /&gt;    protected abstract ServiceThingy getMyRequiredServiceThingy();&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Note the lack of a constructor and that it uses the classic getter style. You can use this class directly for getter based injection using AOP, but you can also use constructor and setter based approaches using subclasses.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class MyThingySetter extends MyThingy {&lt;br /&gt;    private ServiceThingy myRequiredServiceThingy;&lt;br /&gt;    protected final ServiceThingy getMyRequiredServiceThingy() {&lt;br /&gt;        return myRequiredServiceThingy;&lt;br /&gt;    }&lt;br /&gt;    final void setMyRequiredServiceThingy(ServiceThingy thingy) {&lt;br /&gt;        myRequiredServiceThingy = thingy;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So you can now support getter based and setter based, but the class is not final and so you can subclass to the next step.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;final class MyThingyConstructed extends MyThingySetter {&lt;br /&gt;    MyThingyConstructed(ServiceThingy thingy) {&lt;br /&gt;        setMyRequiredServiceThingy(thingy);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;or even for static relationships&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;final class MyThingyConstructed extends MyThingy {&lt;br /&gt;    private final ServiceThingy myRequiredServiceThingy;&lt;br /&gt;    protected ServiceThingy getMyRequiredServiceThingy() {&lt;br /&gt;        return myRequiredServiceThingy;&lt;br /&gt;    }&lt;br /&gt;    MyThingyConstructed(ServiceThingy thingy) {&lt;br /&gt;        myRequiredServiceThingy = thingy;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;A library that implements its service management in such a way, with the three levels of abstraction, is capable of being used in most common types of injection model. It is also capable of being used effectively in a factory pattern for those systems that are not container orientated.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109273236578150474?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109273236578150474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109273236578150474' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109273236578150474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109273236578150474'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/08/getter-based-is-mother-of-all.html' title='Getter-based is the mother of all dependency injection'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109265981652194873</id><published>2004-08-16T14:36:00.000+02:00</published><updated>2004-08-16T15:51:04.330+02:00</updated><title type='text'>How to set a world record for code reviews using Eclipse plugins.</title><content type='html'>Code reviews are boring, but necessary. What gets really boring is reviewing unit tests for correctness too. Code reviews can also get personal and hit team morale as a result. What you need are the tools to take all the nasty note taking, bug explanation, and other tedious parts away and concentrate on the 'does it do what is says on the tin' checks.&lt;br /&gt;&lt;br /&gt;The eclipse plugins are:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://csdl.ics.hawaii.edu/Tools/Jupiter/"&gt;Jupiter&lt;/a&gt;, which organises all the reporting and tracking of defects. It incorporates a good &lt;i&gt;review process&lt;/i&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://findbugs.sourceforge.net/manual/eclipse.html"&gt;FindBugs&lt;/a&gt;, which uses byte code analysis to notice strange things about the code - and could quite possibly be sufficient for reviewing unit test classes on its own. See &lt;a href="http://findbugs.sourceforge.net/docs/oopsla2004.pdf"&gt;this paper&lt;/a&gt; for more information.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://ond.vein.hu/~dyn/updatesite/"&gt;JDocs&lt;/a&gt;, to help you look up the API information you need.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://eclipse-cs.sourceforge.net/"&gt;CheckStyle&lt;/a&gt;, with all the class design and metrics analysis extras turned on. Use the metrics to target your second glances.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;and &lt;a href="http://www.informatik.uni-oldenburg.de/~matrix/da/"&gt;Dupman&lt;/a&gt; will analyse for duplicates, if you are brave enough to tackle the German documentation.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;There are a number of other tools that can help, but these cover the same areas as CheckStyle and Dupman do together, so rather than put in a large number of specialised tools you can get away with using the extras of the latest version of checkstyle and a good (free) duplication spotter.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://findbugs.sourceforge.net/"&gt;FindBugs&lt;/a&gt; is a fantastic concept, it is really a time saver in this case. It finds "problem areas" more than anything else and so does require someone afterwards to look at the code and say something like "hmmm... that could have been embarassing" or "its not actually wrong, but it needs refactoring anyway".&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109265981652194873?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109265981652194873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109265981652194873' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109265981652194873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109265981652194873'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/08/how-to-set-world-record-for-code.html' title='How to set a world record for code reviews using Eclipse plugins.'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109264010589846087</id><published>2004-08-16T09:08:00.000+02:00</published><updated>2004-08-16T09:08:25.896+02:00</updated><title type='text'>Departmental Eclipse with Ant</title><content type='html'>Oleg Shteynbuk has come up with an ant task set that allows you to script the installation and update of eclipse. &lt;a href="http://home.nyc.rr.com/olegs/eclipse/antscript/readme.htm"&gt;Update/Install Eclipse with Ant Script, different Update/Install Strategies&lt;/a&gt; describes this great piece of work.&lt;br /&gt;&lt;br /&gt;I have been working for a number of largeish companies recently and (probably too often) they notice my extensive eclipse experience and ask "can you set up a template/default eclipse for our standard installation?". Installing eclipse as an individual is straightforward, but installing a department wide version is not easy. I now prefer not to do it because it takes a long time to get right, and being an architect I don't really want to spend my time on tools. But Oleg's work might change that.&lt;br /&gt;&lt;br /&gt;The alternatives are to use the services that 'sell' tested eclipse installations, like &lt;a href="http://www.yoxos.com/yoxos/"&gt;Yoxos&lt;/a&gt;, but these still need tailoring to the CM, filesystem and project settings required. You could also use rpms, such as those from &lt;a href="http://www.jpackage.org/"&gt;jpackage.org&lt;/a&gt;, but this would require you to repackage your plugin set.&lt;br /&gt;&lt;br /&gt;The key elements of a department wide installation are:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Ease of management.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Tested plugins.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Common settings, e.g. checkstyle settings.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Project information integration.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;I will use a &lt;i&gt;current&lt;/i&gt; situation to illustrate the problems - moving from eclipse 2 to 3. To do this manually is prohibitively costly where I am at the moment. The update instructions for users is 3 pages of detailed commands that take more that an hour to complete. The number of working plugins has been drastically reduced and the number of minor configuration tweaks required is large. To complicate matters many users have additional plugins and non-standard workspace architectures. Combine that with the length of time developers will spend playing with the new version and you have a cost in man days rather than man hours - so we are sticking with version 2 for the moment.&lt;br /&gt;&lt;br /&gt;What this ant task should do is automate the first two parts. Make installation and update a simple matter of releasing updates to the network. A separate installation can be used to test the bleeding edge versions and manage the plugin dependancies. The way the update works should preserve a large number of the configuration settings between versions, but there will always be tweaks required. Eclipse 3's new workspace switching implementation should also make the project integration simpler.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109264010589846087?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109264010589846087/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109264010589846087' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109264010589846087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109264010589846087'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/08/departmental-eclipse-with-ant.html' title='Departmental Eclipse with Ant'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109263589065473493</id><published>2004-08-16T07:58:00.000+02:00</published><updated>2004-08-16T07:58:10.653+02:00</updated><title type='text'>SDK for ASR and TTS from IBM</title><content type='html'>On Friday, alphaworks released the &lt;a href="http://www.alphaworks.ibm.com/tech/evvmasdk"&gt;Embedded ViaVoice Multi-Application SDK&lt;/a&gt; project. This is an SDK for creating applications involving speech recognition (ASR) and text-to-speech (TTS).&lt;br /&gt;&lt;br /&gt;There is a subtle shift in this offering and that is that the sound devices are no longer required to be dominated by the speech software. This release's main feature is its ability to share resources between applications.&lt;br /&gt;&lt;br /&gt;TTS software has been around for some time now, most free implementations are based on the &lt;a href="http://www.cstr.ed.ac.uk/projects/festival/"&gt;Festival&lt;/a&gt; project.&lt;br /&gt;ASR software is less common, but there is &lt;a href="http://cmusphinx.sourceforge.net/sphinx4/"&gt;Sphinx-4&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This release from alphaworks is aimed straight at the mobile platform market. You can imagine dictating text messages at the same time as making voice dial calls for example, or having a transcription of all your conversations for that day.&lt;br /&gt;&lt;br /&gt;But being aimed at the mobile market will highlight the CPU and memory/storage cost of these applications. This is why IBM have come up with a client server model for these services so that the CPU intensive activity can be centralised, how effective for applications this will be remains to be seen.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109263589065473493?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109263589065473493/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109263589065473493' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109263589065473493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109263589065473493'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/08/sdk-for-asr-and-tts-from-ibm.html' title='SDK for ASR and TTS from IBM'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109238743625195425</id><published>2004-08-13T10:57:00.000+02:00</published><updated>2004-08-13T11:10:48.143+02:00</updated><title type='text'>GOOG.O - but no dividends</title><content type='html'>&lt;a href="https://www.ipo.google.com/"&gt;Google&lt;/a&gt; goes IPO in the next few hours. Will Eric, Larry and Sergey become billionaires or will it turn into a Friday 13th nightmare?&lt;br /&gt;&lt;br /&gt;I think we all know the answer to that question. I just wish I was eligible to bid, and had the cash to.&lt;br /&gt;&lt;br /&gt;If you are eligible beware, the prospectus says:&lt;br /&gt;&lt;em&gt;We do not intend to pay dividends on our common stock&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109238743625195425?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109238743625195425/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109238743625195425' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109238743625195425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109238743625195425'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/08/googo-but-no-dividends.html' title='GOOG.O - but no dividends'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7242182.post-109237621895859536</id><published>2004-08-13T07:50:00.000+02:00</published><updated>2004-08-13T07:50:18.956+02:00</updated><title type='text'>ZetaGrid from alphaworks - J2EE based</title><content type='html'>&lt;a href="http://www.alphaworks.ibm.com/tech/zetagrid"&gt;ZetaGrid&lt;/a&gt; is a grid computing solution that is based on a standard 3 tier J2EE architecture using a client server model. The name comes from the first project that used/developed it - zeros of the zeta function.&lt;br /&gt;&lt;br /&gt;It claims "ZetaGrid is also the first ever specification of simple J2EE interfaces to distribute applications securely and reliably in a cross-platform grid infrastructure" (strange claim?), and communicates "via stateless sessions using HTTP" (EJB?).&lt;br /&gt;&lt;br /&gt;A great deal of the project effort seems to have gone into being able to make it work in a real world scenario. The project has been careful to give its participating systems full control of client resource consumption. The system is client driven, so no unusual firewall rules required, and takes into account the connection speeds and network architectures to communicate 'work units' effectively. The server side's big plus is that it functions as a J2EE application on an application server with a database making it easy for sysadmins to get to grips with.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7242182-109237621895859536?l=youarenumber6.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youarenumber6.blogspot.com/feeds/109237621895859536/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7242182&amp;postID=109237621895859536' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109237621895859536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7242182/posts/default/109237621895859536'/><link rel='alternate' type='text/html' href='http://youarenumber6.blogspot.com/2004/08/zetagrid-from-alphaworks-j2ee-based.html' title='ZetaGrid from alphaworks - J2EE based'/><author><name>straun</name><uri>http://www.blogger.com/profile/16418566670316468267</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/_-Ih2JhkY0WE/SXzz4_Tkz9I/AAAAAAAAAAM/XQaSxmQnqCg/S220/me.jpg'/></author><thr:total>0</thr:total></entry></feed>
