<?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-3473871805404328405</id><updated>2012-01-10T13:07:28.058Z</updated><category term='nokia mac osx n95'/><category term='linux'/><category term='mac osx firefox'/><category term='hibernate'/><category term='java linux bash unix tips'/><category term='JPA'/><category term='scala'/><category term='odbms'/><category term='javascript'/><category term='domain-driven-design'/><category term='java'/><category term='coldfusion'/><category term='development'/><category term='random'/><category term='camel java servicemix'/><category term='schema generation'/><category term='maven'/><category term='gwt'/><category term='music'/><category term='rdbms'/><category term='ramblings'/><category term='sybase'/><category term='netbeans'/><category term='dell'/><category term='drumming'/><category term='ddd'/><category term='sql'/><category term='spring'/><category term='mac'/><category term='palm'/><category term='findbugs'/><category term='SansSQL'/><category term='ipcop'/><category term='debian'/><category term='email'/><category term='old technology'/><category term='eclipse'/><category term='xbox'/><category term='ubuntu'/><category term='printers'/><category term='gmail'/><category term='hardware'/><category term='mylar'/><category term='database'/><title type='text'>RB Tech</title><subtitle type='html'>Ramon Buckland is a Java Solutions Architect and Finance IT Consultant based in Bristol, UK.

His experience is vast across all areas of IT. Focus is online development and architecting with the Java platform(s).</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Ramon Buckland</name><uri>http://www.blogger.com/profile/16744583593281442424</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>63</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-5246761373942787501</id><published>2012-01-10T13:02:00.000Z</published><updated>2012-01-10T13:02:56.714Z</updated><title type='text'>Sakis3g Control Script</title><content type='html'>I have found that my USB Modems, two of them, did not work out of the box with Ubuntu 11.10.&lt;br /&gt;Not to worry, there is a great script that contains all the pieces for Ubuntu.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sakis3g&lt;br /&gt;&lt;/pre&gt;You can read all about it here - &lt;a href="http://www.sakis3g.org"&gt;www.sakis3g.org&lt;/a&gt; and what it does.In essence, you use it in replace of your Network Manager or ppp/wvdial. Now I would prefer to use the built in method  that the distribution has, however it plain does not work! Instead sakis3g and I have work to do.&lt;br/&gt;&lt;br/&gt;I wanted a better way to control it, I created a command line control script for it for my modem. (Didn't like the GUI)&lt;pre&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;BASE_CMD="/usr/local/bin/sakis3g"&lt;br /&gt;OPTIONS="--term"&lt;br /&gt;MODEMETC="OTHER='USBMODEM' USBMODEM='19d2:1003' USBINTERFACE='1' APN='3internet'"&lt;br /&gt;COMMAND="$1"&lt;br /&gt;shift&lt;br /&gt;&lt;br /&gt;case $COMMAND in&lt;br /&gt;status)&lt;br /&gt;    $BASE_CMD $OPTIONS status&lt;br /&gt;    ;;&lt;br /&gt;connect)&lt;br /&gt;    sudo $BASE_CMD $OPTIONS $MODEMETC connect &lt;br /&gt;    ;;&lt;br /&gt;disconnect)&lt;br /&gt;    sudo $BASE_CMD $OPTIONS disconnect &lt;br /&gt;    ;;&lt;br /&gt;*)&lt;br /&gt;    echo This is a wrapper to Sakis3g&lt;br /&gt;    echo $0 connect&lt;br /&gt;    echo $0 disconnect&lt;br /&gt;    echo $0 status&lt;br /&gt;    exit 1&lt;br /&gt;esac&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-5246761373942787501?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/5246761373942787501/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=5246761373942787501' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/5246761373942787501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/5246761373942787501'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2012/01/sakis3g-control-script.html' title='Sakis3g Control Script'/><author><name>Ramon Buckland</name><uri>http://www.blogger.com/profile/16744583593281442424</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-2146734780879759717</id><published>2011-12-29T23:50:00.001Z</published><updated>2011-12-29T23:50:20.003Z</updated><title type='text'>Crashplan Active Bandwidth Control</title><content type='html'>&lt;br /&gt;I love what random things I get up to over the holidays. Crashplan is a Cloud backup service that I use for all my backups. I have devised a way so that Crashplan starts backing up at FULL speed, when everyone is not at home, or are not doing anything on the internet. And then drops back down to a trickle backup when things become busy.&lt;br /&gt;&lt;br /&gt;Essentially I have one computer, my server, and it has the Crashplan service running on it. The server is an Ubuntu based Linux distrubution. Nothing fancy there. What is interesting is how I have managed to control the Crashplan bandwidth it utilises. In the previous house, I had a good 18-20Mbps internet connection, so my backups were really nice. Now, I only have a 3Mbps connection so the "usage" is very important. If crashplan hogs the connection you reall notice it.&lt;br /&gt;&lt;br /&gt;Crashplan has two ways of controlling it's backup usage. First is on a backup set basis, you set the time that it runs. Helpful, for the past 2 months, my backups have been scheduled for 12am to 7am. Works well, but at that rate, I will be completely backed up in about 12 months time... hrmm.&lt;br /&gt;&lt;br /&gt;The other way Crashplan operates is by bandwidth limiting. This is how I roll it now.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Attempt 1 - See when they Connect&lt;/h2&gt;I needed to determine the best method to "ascertain" if someone was using the internet. I pondered looking at when the phones (we have 4 adults, 3 iPhones and 1 Android) are "on" or can be seen as that is a good indicator that someone is home. But of course it goes a bit more than that.&lt;br /&gt;&lt;br /&gt;I did however, to test the theory, write a quick Perl script which was the start of monitoring when an iPhone connects to the WiFi. The Android apparently uses Zeroconf also, but I didn't test that.&lt;br /&gt;Basically, each time the phone connects for the initial session, it sends a multicast out. If you are listening, you will see it. Simply, this perl script listens on the right port.&lt;br /&gt;&lt;script class="brush:perl" type="syntaxhighlighter"&gt;&lt;![CDATA[#!/usr/bin/perluse strict;use IO::Socket::Multicast;use Net::ARP;use constant GROUP =&gt; '224.0.0.251';use constant PORT  =&gt; '5353';my $device  = q{eth1};my $sock = IO::Socket::Multicast-&gt;new(Proto=&gt;'udp',LocalPort=&gt;PORT) || die "could not creat listen: $!\n";$sock-&gt;mcast_add(GROUP) || die "Couldn't set group: $!\n";while (1) {   my $data;   next unless $sock-&gt;recv($data,1024);   my $remoteIp = $sock-&gt;peerhost();   system ('ping -c 1 ' . $remoteIp);   print "\nReceived: [[" . $sock-&gt;peerhost() . "]] " . Net::ARP::arp_lookup("",$sock-&gt;peerhost());}]]&gt;&lt;/script&gt;I quickly discounted this method when I realised that some devices just wont tell me they connected. And because I want to keep my network largely zero configuation, I want to just use DHCP and not have to bother with static entries, or Static leases for my clients. Which is when it hit me: &lt;h2&gt;Attempt 2 - Scan the Known DHCP Range&lt;/h2&gt;&lt;br/&gt;The premise behind my final solution is simple. I have two types of devices in use in our household.&lt;ul&gt;&lt;li&gt;Infrastructure - servers, printer, wirless and network switches / routers&lt;/li&gt;&lt;li&gt;Clients - Laptops, phones (soon tablets)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;All my infrastructure devices use static IP addresses, such as 1 to 39. All the clients, use a DHCP IP address.We have no desktops in the house, only laptops and when they are closed, they are not in use. &lt;/p&gt;&lt;p&gt;If they are not in the house, they are not in use. Same goes with the phones, they are either sleeping or not in the house.&lt;/p&gt;&lt;p&gt;&lt;h3&gt;The Solution&lt;/h3&gt;So, if all the laptops are closed and all the phones are out, I know that none of the "clients" will ping, and therefore I can ramp up the Crashplan bandwidth.&lt;/p&gt;&lt;h2&gt;Solution to Attempt 2 - Monitor for Active Clients&lt;/h2&gt;&lt;p&gt;I had a few things to solve. But for each I knew that Perl would be all that I would need.&lt;h3&gt;Part 1 - Automatically Raise and Lower Crashplan Bandwidth&lt;/h3&gt;&lt;p&gt;I needed to determine how Crashplan "stored" it's bandwidth rate. Turns out it is in a config file, but the web site can also change the config. So, the client (my Crashplan service running on my server) and the Crashplan Cloud keep in contact all the time· If I change the bandwidth on the client, it updates on the website, and vice versa.&lt;/p&gt;&lt;p&gt;I fired off a few support queries to Crashplan and they basically said that the config file I found (/usr/local/crashplan/conf/my.service.xml) is not editable by hand. And that the only supported way is via the Client (desktop Java App) or the Website.&lt;/p&gt;&lt;p&gt;Call WWW::Mechanize - I used this module to login to the Crashplan Website and change the bandwidth (kbps) based on my argument. Simple and it looks like this. &lt;/p&gt;&lt;script class="brush:perl" type="syntaxhighlighter"&gt;&lt;![CDATA[#!/usr/bin/perluse strict;use WWW::Mechanize;my $kbps = $ARGV[0];my $computer_id = 99999999; # determine what your computer ID is (look at the URLs on the webmy $change_url = 'https://www.crashplan.com/account/mycomputers/manage_config.vtl?reset=true&amp;computer=';my $login_url = 'https://www.crashplan.com/account/login.vtl';my $logout_url = 'https://www.crashplan.com/logout.vtl';my $username = 'your_magic_username';my $password = 'your_magic_password';# login to Crashplanmy $mech = WWW::Mechanize-&gt;new();$mech-&gt;get($login_url);$mech-&gt;submit_form(    form_name =&gt; 'loginForm',    fields      =&gt; { 'loginForm.username' =&gt; $username ,                     'loginForm.password' =&gt; $password },);die unless ($mech-&gt;success);$mech-&gt;get($change_url . $computer_id);$mech-&gt;submit_form(    form_name =&gt; 'manageConfigForm',    fields    =&gt; { 'manageConfigForm.bandwidthIdleKbps' =&gt; $kbps });die unless ($mech-&gt;success);$mech-&gt;get($logout_url);]]&gt;&lt;/script&gt;&lt;p&gt;Not rabbit proof, but it works for my needs&lt;/p&gt;&lt;h3&gt;Part 2 - Monitor for Activity&lt;/h3&gt;&lt;p&gt;This was the hardest part, but as always, was solvable. The router (Sky Broadband Provider) I currently use "knows" what clients are using it. VERY handy. So like the Crashplan website solution above, I again use WWW::Mechanize to determine what IP addresses are currently using the router.&lt;/p&gt;&lt;p&gt;I do a filter out of all the ip addresses that do NOT fall inside my DHCP range.&lt;/p&gt;&lt;script class="brush:perl" type="syntaxhighlighter"&gt;&lt;![CDATA[my $subnet = '192.168.1';my $dhcp_lower = '40';my $dhcp_upper = '100';my $sky_attached_devices_url = 'http://192.168.1.1/sky_attached_devices.html';my $sky_logout_url = 'http://192.168.1.1/sky_logout.html';my $sky_username = 'magic_admin_username';my $sky_password = 'magic_router_password';sub get_sky_attached_devices {  my $mech = WWW::Mechanize-&gt;new();  $mech-&gt;credentials( $sky_username =&gt; $sky_password );  $mech-&gt;get($sky_attached_devices_url);  my $root = HTML::TreeBuilder-&gt;new_from_content($mech-&gt;content);  my @attached_hosts = $root-&gt;findvalues( '//table[tr/th/text() = "MAC Address"]/tr/td[position() = 2]/text()' );  my @dhcp_hosts;  $mech-&gt;get($sky_logout_url);  foreach my $host (@attached_hosts) {    $host =~ /$subnet\.(\d+)/;    push(@dhcp_hosts,$host) if ( $1 &gt;= $dhcp_lower &amp;&amp; $1 &lt;= $dhcp_upper );  }  return @dhcp_hosts;}]]&gt;&lt;/script&gt;&lt;p&gt;I won't go into the details of using XPath on the HTML from the Router, but, you can see that it is quite succinct. Essentially the IP Addresses appear in a 2nd column in a table. I use an XPath expression to select the right values.&lt;/p&gt;&lt;p&gt;This approach is brittle in as much as, when / if I change my router then I need to code or come up with another way to determine which hosts, within the DHCP range, are currently "in use". I did first to this by just pinging all 60 possible IP addresses; works, brute force, but of course worked :-)&lt;/p&gt;&lt;p&gt;So .. now putting it all together. The script, a perl script, runs from Cron every minute. and performs the following tasks.&lt;ul&gt;&lt;li&gt;Get the Current Rate from the Crashplan Config file&lt;/li&gt;&lt;li&gt;Get all the current "hosts" that the Router knows&lt;/li&gt;&lt;li&gt;Ping each host to MAKE sure they are active&lt;/li&gt;&lt;li&gt;If we have an active host (one or more) - we need to go slow  &lt;ul&gt;  &lt;li&gt;If the current rate that Crashplan is running is more than our slow rate, tell Crashplan to slow down&lt;/li&gt;  &lt;li&gt;If the current rate is slow, do nothing&lt;/li&gt;  &lt;/ul&gt;&lt;/li&gt;&lt;li&gt;If we have no active hosts - we can go fast  &lt;ul&gt;  &lt;li&gt;If the current rate that Crashplan is running is less than our fast rate, tell Crashplan to go fast&lt;/li&gt;  &lt;li&gt;If the current rate is fast, do nothing&lt;/li&gt;  &lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Simple! And the full Script looks like below. Enjoy!&lt;/p&gt;&lt;p&gt;&lt;script class="brush:perl" type="syntaxhighlighter"&gt;&lt;![CDATA[#!/usr/bin/perluse strict;use Net::Ping;use WWW::Mechanize;use HTML::TreeBuilder::XPath;use Sys::Syslog qw(:standard :macros);use XML::XPath;my $base_path = '/opt/crashplan-rate-controller';my $adjust_rate_command = $base_path . "/" . 'adjust-wan-rate.pl';my $slow_rate = 50;my $fast_rate = 4096;my $subnet = '192.168.1';my $dhcp_lower = '40';my $dhcp_upper = '100';my $sky_attached_devices_url = 'http://192.168.1.1/sky_attached_devices.html';my $sky_logout_url = 'http://192.168.1.1/sky_logout.html';my $sky_username = 'magic_admin_username';my $sky_password = 'a_magic_password';my $crashplan_config_file = '/usr/local/crashplan/conf/my.service.xml';## load the current rate that Crashplan is running as / onmy $current_rate = &amp;get_current_rate;## load the ip addresses we want to seemy @hosts_to_check = &amp;get_sky_attached_devices;## check each onemy $ping = Net::Ping-&gt;new("icmp",3);my $have_active_hosts = 0;my $active_hosts = '';for my $host (@hosts_to_check) {  if ($ping-&gt;ping($host)) {    $active_hosts .= $host . " ";    $have_active_hosts = 1;  }}chop($active_hosts);if ($have_active_hosts) {  # print "Current = $current_rate , slow = $slow_rate\n";  if ($current_rate &gt; $slow_rate) {    system($adjust_rate_command,$slow_rate);    syslog(LOG_INFO, "[crashplan] Lowered - " . $slow_rate . "kbps - hosts active (". $active_hosts . ")");  } else {    # syslog(LOG_INFO, "[crashplan] Keeping - " . $current_rate . "kbps - hosts active (". $active_hosts . ")");  }} else {  if ($current_rate &lt; $fast_rate) {   system($adjust_rate_command,$fast_rate);   syslog(LOG_INFO, "[crashplan] Raised to - " . $fast_rate . "kbps - No active Hosts");  }}exit;sub get_sky_attached_devices {  my $mech = WWW::Mechanize-&gt;new();  $mech-&gt;credentials( $sky_username =&gt; $sky_password );  $mech-&gt;get($sky_attached_devices_url);  my $root = HTML::TreeBuilder-&gt;new_from_content($mech-&gt;content);  my @attached_hosts = $root-&gt;findvalues( '//table[tr/th/text() = "MAC Address"]/tr/td[position() = 2]/text()' );  my @dhcp_hosts;  $mech-&gt;get($sky_logout_url);  foreach my $host (@attached_hosts) {    $host =~ /$subnet\.(\d+)/;    push(@dhcp_hosts,$host) if ( $1 &gt;= $dhcp_lower &amp;&amp; $1 &lt;= $dhcp_upper );  }  return @dhcp_hosts;}##sub get_current_rate {   my $xp = XML::XPath-&gt;new(filename =&gt; $crashplan_config_file);   my $rate = $xp-&gt;getNodeText('/config/serviceBackupConfig/highBandwidthRate');   # the value is stored in KBytes per second on the config file.   # the web iface at crashplan.com accepts a kbps however.   # the 8 is to bring the KBytes in the file to Kbits    return $rate-&gt;string_value * 8; }]]&gt;&lt;/script&gt;&lt;/p&gt;&lt;p&gt;Of course, I did all this and know and realise that QoS could be used, but my Sky Broadband Router is just not that smart today and I haven't got the devices spare or the time to reconfigure to installl a dd-wrt based router or some such other. So perl scripts it is for now.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-2146734780879759717?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/2146734780879759717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=2146734780879759717' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/2146734780879759717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/2146734780879759717'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2011/12/crashplan-active-bandwidth-control.html' title='Crashplan Active Bandwidth Control'/><author><name>Ramon Buckland</name><uri>http://www.blogger.com/profile/16744583593281442424</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-5582706721934760461</id><published>2011-10-27T12:33:00.002+01:00</published><updated>2011-10-27T12:33:53.673+01:00</updated><title type='text'>Neo4J - 2nd Look - Setting a Primary Key on Nodes</title><content type='html'>&lt;h2&gt;Primary Key&lt;/h2&gt;&lt;p&gt;In my last post I considered the lack of Primary Key like Id's as something I need to solve. My use case is&lt;p&gt;&lt;blockquote&gt;The application I will be building out will have, after all is said and done a really simple Web Interface with REST type URLs. So .. for example, I will be able to do.&lt;br/&gt;http://myservice.co.uk/superwebapp/mySpecialThing/detailedView/55&lt;br/&gt;The 55 there will result in a query to Neo4J to locate the "MySpecialThing" object with ID of type 55 and display it.&lt;/blockquote&gt;&lt;p&gt;I also considered using a UUID across objects which is also good, but not really what I was after. I want a class of objects to all share an identifier. It has a lot of use. To solve the problem I arrived at the following solution.&lt;/p&gt;&lt;h2&gt;Solution Outline&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;All Domain Objects extend fro super type of AbstractLongDomain which has getId()/setId() (Long)&lt;/li&gt;&lt;li&gt;An Aspect wrapped around the getId() looks for a null value and if no Id is found. It creates one&lt;/li&gt;&lt;li&gt;In the aspect creation of an ID involves talking to a singleton IdManager for a "nextId()"&lt;/li&gt;&lt;li&gt;nextId() on the manager looks to it's cache HashMap&lt;String,IdObject&gt; to see if it has an IdObject that knows what the next Id is&lt;/li&gt;&lt;li&gt;IdObject self persists to the repository after each call (** this could be slow.. see how we go)&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;To the Code&lt;/h2&gt;All my Objects extend the AbstractLongDomain&lt;script type="syntaxhighlighter" class="brush:java"&gt;&lt;![CDATA[public abstract class AbstractNamedDomainObject extends AbstractLongDomain {]]&gt;&lt;/script&gt;The ID Object holds a "per" class Long Id, so each time an ID is needed, one of these objects gives one out.&lt;script type="syntaxhighlighter" class="brush:java"&gt;&lt;![CDATA[package org.soqqo.luap.model;import org.springframework.data.neo4j.annotation.Indexed;import org.springframework.data.neo4j.annotation.NodeEntity;/** * Simple Pojo, one per "class" set we want to track individual Id's on idKey is * typically the Canonical Class Name. *  * @author rbuckland *  */@NodeEntitypublic class IdObject {    @Indexed    private Long nextId;    @Indexed    private String idKey;    public IdObject(String idKey) {        this.idKey = idKey;    }    public Long getNextId() {        try {            if (nextId == null) {                nextId = 1L;            }            return nextId++;        } finally {            this.persist();        }    }}]]&gt;&lt;/script&gt;Next we have the IdManager that is managed as a Spring Singleton Bean. Its job is to return an id based on the "class" that needs an Id via getNextId(Class klass).&lt;script type="syntaxhighlighter" class="brush:java"&gt;&lt;![CDATA[package org.soqqo.luap.model;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.soqqo.luap.server.repository.neo4j.IdObjectRepository;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;/** * IdManager is a Singleton managed bean which looks after locating the * idObjects in the repository. *  * It will load them up if it does not have as reference for one. And will * retain a reference in the map to the ones it has already loaded. *  * This ensures we are not going crazy to finding them in the repository every * time. *  * @author rbuckland *  */@Componentpublic class IdManager {    Logger log = LoggerFactory.getLogger(IdManager.class);    @Autowired    private IdObjectRepository idObjectRepository;    // our internal cache    private Map&lt;String, IdObject&gt; idObjects;    /**     * returns a new Id     *      * @param klass     * @return     */    public Long getNextId(Class&lt;?&gt; klass) {        if (idObjects == null) {            idObjects = new HashMap&lt;String, IdObject&gt;();            log.debug("creating new cache map");        }        // have we a cached version ?        if (!idObjects.containsKey(klass.getCanonicalName())) {            // find it in the repo            Iterator&lt;IdObject&gt; idObjectIter = idObjectRepository.findAllByPropertyValue("idKey", klass.getCanonicalName()).iterator();            if (idObjectIter.hasNext()) {                // there was one in the repo, so we will store it in our HashMap                idObjects.put(klass.getCanonicalName(), idObjectIter.next());                log.debug("Loaded a new idObject[" + klass.getCanonicalName() + "] from the repo to cache");            } else {                // none, so add one to the repo and store it in our hashmap for                // later use                log.debug("Created a new idObject[" + klass.getCanonicalName() + "] to the repo &amp; to cache");                idObjects.put(klass.getCanonicalName(), (IdObject) new IdObject(klass.getCanonicalName()).persist());            }        }        // return a new id        return idObjects.get(klass.getCanonicalName()).getNextId();    }    /**     * In Unit tests, within each method the repository is flushed as it's     * transactional per method.     *      * So we use this method to reset for each Unit test. Otherwise our cached     * objects become stale resulting in org.neo4j.graphdb.NotFoundException:     * Node[3] not found. (or which ever node it is)     */    public void flush() {        idObjects = new HashMap&lt;String, IdObject&gt;();    }}]]&gt;&lt;/script&gt;The idRepository you see there is a simple Spring Data Neo4J Repository which has aspect-magic dust sprinkled on it to make the actual implementation. &lt;script type="syntaxhighlighter" class="brush:java"&gt;&lt;![CDATA[package org.soqqo.luap.server.repository.neo4j;import org.soqqo.luap.model.IdObject;import org.springframework.data.neo4j.repository.GraphRepository;import org.springframework.data.neo4j.repository.NamedIndexRepository;public interface IdObjectRepository extends GraphRepository&lt;IdObject&gt;, NamedIndexRepository&lt;IdObject&gt; {}]]&gt;&lt;/script&gt;&lt;p&gt;Because I am not sure if neo4j is the "best" place to store the Id's (though it is the logical) I created a simple idGenerator interface which is simply what the aspect will call and talk to. One implementation (the only) is the Neo4JBackedIdGenerator which uses the id objects and idmanager above.&lt;/p&gt;&lt;p&gt;So first the interface for the IdGenerator&lt;/p&gt;&lt;script type="syntaxhighlighter" class="brush:java"&gt;&lt;![CDATA[package org.soqqo.luap.model;public interface IdGenerator {    public Long nextId(Class&lt;? extends AbstractLongDomain&gt; class1);}]]&gt;&lt;/script&gt;And then the  actual Neo4JBackedIdGenerator which is created and managed as a spring bean. &lt;script type="syntaxhighlighter" class="brush:java"&gt;&lt;![CDATA[package org.soqqo.luap.model;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;@Componentpublic class Neo4JBackedIdGenerator implements IdGenerator {    Logger log = LoggerFactory.getLogger(Neo4JBackedIdGenerator.class);    @Autowired    IdManager idManager;    @Override    // @Transactional(propagation = Propagation.REQUIRED)    public synchronized Long nextId(Class&lt;? extends AbstractLongDomain&gt; klass) {        Long id = idManager.getNextId(klass);        log.debug("Allocated a new Id("+ id +") for [" + klass.getCanonicalName() + "]");        return id;    }}]]&gt;&lt;/script&gt;&lt;p&gt;I will have to play with the transactional semantics on this one. I recall a horrid situation which a similar design but via stored procs many moons ago where we had the sproc that generate Id's wrapped in transactions. They needed to be in their own transaction to ensure that mass object thread creation would not get stuck on a lock. (just an area I know can be sticky and bite.. so I put the @Transactional in there and commented out to remind me.&lt;/p&gt;&lt;p&gt;So last, we have the AspectJ which wraps our getId(). All the domain objects extend org.soqqo.luap.model.AbstractLongDomain which means we will get the Id creation and generation for free each time getId is called. (technically a catch here is that setId doesn't get checked if called manually on setting an Id. It could I guess look into the repo to see if the Id is already used. &lt;/p&gt;&lt;script type="syntaxhighlighter" class="brush:java"&gt;&lt;![CDATA[package org.soqqo.luap.model;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Pointcut;import org.springframework.beans.factory.annotation.Autowired;/** * This class is also managed as a bean having the idGenerator of choice * injected in. *  * It needs the &amp;lt;bean id="longIDGeneratorAspect" * class="org.soqqo.luap.model.LongIDGeneratorAspect" factory-method="aspectOf" * /&amp;lt; Configuration in a Spring aspect. *  * @author rbuckland *  */@Aspectpublic class LongIDGeneratorAspect {    @Autowired    IdGenerator idGenerator;    @Pointcut("execution(Long org.soqqo.luap.model.AbstractLongDomain.getId())")    public void doIDGeneration() {    }    @Around("doIDGeneration()")    public Object generateId(ProceedingJoinPoint pjp) throws Throwable {        Object val = pjp.proceed();        if (val == null) {            // calling the generator to get a new value            AbstractLongDomain ald = (AbstractLongDomain) pjp.getThis();            ald.setId(idGenerator.nextId(ald.getClass()));            val = ald.getId();        }        return val;    }}]]&gt;&lt;/script&gt;And finally the Unit Test code to show that it all works&lt;script type="syntaxhighlighter" class="brush:java"&gt;&lt;![CDATA[package org.soqqo.luap.model.tests;import org.junit.Assert;import org.junit.Test;import org.junit.runner.RunWith;import org.soqqo.luap.model.IdManager;import org.soqqo.luap.model.core.Member;import org.soqqo.luap.model.party.Person;import org.soqqo.luap.server.repository.neo4j.MemberRepository;import org.soqqo.luap.server.repository.neo4j.PersonRepository;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.annotation.DirtiesContext;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import org.springframework.transaction.annotation.Transactional;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration({ "/model-test-context.xml" })@Transactionalpublic class Neo4jDomainTest {    @Autowired    MemberRepository memberRepository;    @Autowired    PersonRepository personRepository;        @Autowired    IdManager idManager;        @Test    //@DirtiesContext (flush the idManager instead, it is quicker!)    public void persistedMemberIsRetrievable() {        idManager.flush();        Member frank = new Member("Frank", "Low").persist();        Person jim = new Person("Jim", "Fow").persist();        Member retrievedMember = memberRepository.findOne(1L);        Assert.assertEquals("retrieved member matches persisted one", frank, retrievedMember);        Assert.assertEquals("retrieved member first name must match", "Frank", retrievedMember.getFirstName());        Person retrievedPerson = personRepository.findByPropertyValue("firstName", "Jim");        Assert.assertEquals("retrieved member matches persisted one", jim, retrievedPerson);        Assert.assertEquals("retrieved member first name matches", "Fow", retrievedPerson.getLastName());        Assert.assertEquals("id's should be 1 each", new Long(1L), frank.getId());        Assert.assertEquals("id's should be 1 each", new Long(1L), jim.getId());    }    @Test    //@DirtiesContext    public void persistedMembersGetNewIds() {        idManager.flush();        Member frank = new Member("Frank", "Low").persist();        Member jim = new Member("Jim", "Fow").persist();        Assert.assertNotSame("id's should not be equal", jim.getId(), frank.getId());    }}]]&gt;&lt;/script&gt;&lt;p&gt;Note the use of @DirtiesContext, because the Neo4J is transactional, after each test the contents are dumped, which means that the idManager which has the HashMap cache becomes stale and it is singleton and has a lifecycle of the test class, not just the method. So the fix is either..manually flush() the cache or use @DirtiesContext which tells spring to re-build the context file. Both work but manually flushing my HashMap (new() ) is 2 seconds faster (0.037s for the test) than spring is at rebuilding.&lt;/p&gt;&lt;p&gt;The 2nd last piece to show is my test context file - model-test-context.xml&lt;/p&gt;&lt;script type="syntaxhighlighter" class="brush:xml"&gt;&lt;![CDATA[&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;&lt;beans xmlns="http://www.springframework.org/schema/beans"       xmlns:context="http://www.springframework.org/schema/context"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:neo4j="http://www.springframework.org/schema/data/neo4j"       xmlns:tx="http://www.springframework.org/schema/tx"       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd  http://www.springframework.org/schema/data/neo4j http://www.springframework.org/schema/data/neo4j/spring-neo4j-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"&gt;    &lt;context:annotation-config/&gt;    &lt;context:spring-configured/&gt;    &lt;bean id="longIDGeneratorAspect" class="org.soqqo.luap.model.LongIDGeneratorAspect" factory-method="aspectOf" /&gt;    &lt;context:component-scan base-package="org.soqqo.luap"/&gt;    &lt;neo4j:config graphDatabaseService="graphDatabaseService"/&gt;    &lt;neo4j:repositories base-package="org.soqqo.luap.server.repository"/&gt;    &lt;bean id="graphDatabaseService" class="org.neo4j.test.ImpermanentGraphDatabase"/&gt;    &lt;tx:annotation-driven mode="aspectj"/&gt;&lt;/beans&gt;]]&gt;&lt;/script&gt;The very last piece is what my Maven POM looks like because a lot of people like to see that... Hopefully these are the correct relevant bits.&lt;script type="syntaxhighlighter" class="brush:xml"&gt;&lt;![CDATA[  &lt;dependencies&gt;  &lt;!-- @DateTimeFormat --&gt;    &lt;dependency&gt;      &lt;groupId&gt;org.springframework&lt;/groupId&gt;      &lt;artifactId&gt;spring-context&lt;/artifactId&gt;    &lt;/dependency&gt;  &lt;!-- @Configurable --&gt;    &lt;dependency&gt;      &lt;groupId&gt;org.springframework&lt;/groupId&gt;      &lt;artifactId&gt;spring-beans&lt;/artifactId&gt;    &lt;/dependency&gt;  &lt;!-- @Transactional --&gt;    &lt;dependency&gt;      &lt;groupId&gt;org.springframework&lt;/groupId&gt;      &lt;artifactId&gt;spring-tx&lt;/artifactId&gt;    &lt;/dependency&gt;  &lt;!-- Joda Time Date and time formats --&gt;    &lt;dependency&gt;      &lt;groupId&gt;joda-time&lt;/groupId&gt;      &lt;artifactId&gt;joda-time&lt;/artifactId&gt;    &lt;/dependency&gt;    &lt;dependency&gt;      &lt;groupId&gt;org.springframework.data&lt;/groupId&gt;      &lt;artifactId&gt;spring-data-neo4j-aspects&lt;/artifactId&gt;    &lt;/dependency&gt;    &lt;!-- Neo4j Libraries --&gt;    &lt;dependency&gt;      &lt;groupId&gt;org.neo4j&lt;/groupId&gt;      &lt;artifactId&gt;neo4j-kernel&lt;/artifactId&gt;      &lt;type&gt;test-jar&lt;/type&gt;      &lt;scope&gt;test&lt;/scope&gt;    &lt;/dependency&gt;  &lt;/dependencies&gt;  &lt;build&gt;    &lt;plugins&gt;      &lt;!-- the eclipse plugin interacts with the aspectj-maven-plugin                              BUT ONLY if the ajdtVersion config value is set (remove it and it won't) --&gt;      &lt;plugin&gt;        &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;        &lt;artifactId&gt;maven-eclipse-plugin&lt;/artifactId&gt;        &lt;version&gt;2.8&lt;/version&gt;        &lt;configuration&gt;          &lt;downloadSources&gt;true&lt;/downloadSources&gt;          &lt;!-- The ajdtVersion configuration parameter is optional. The valid values are none, 1.4, and 1.5. none indicates that AJDT should not be enabled even though Aspectj is enabled in maven. 1.4 generates the org.eclipse.ajdt.ui.prefs file in the .settings directory. 1.5 (or later) includes the configuration into the .classpath file and is the default value. --&gt;          &lt;ajdtVersion&gt;1.5&lt;/ajdtVersion&gt;          &lt;additionalProjectnatures&gt;            &lt;projectnature&gt;org.eclipse.ajdt.ui.ajnature&lt;/projectnature&gt;            &lt;projectnature&gt;org.eclipse.jdt.core.javanature&lt;/projectnature&gt;            &lt;projectnature&gt;org.springframework.ide.eclipse.core.springnature&lt;/projectnature&gt;          &lt;/additionalProjectnatures&gt;        &lt;/configuration&gt;      &lt;/plugin&gt;      &lt;plugin&gt;        &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;        &lt;artifactId&gt;aspectj-maven-plugin&lt;/artifactId&gt;        &lt;version&gt;1.2&lt;/version&gt;        &lt;dependencies&gt;          &lt;dependency&gt;            &lt;groupId&gt;org.aspectj&lt;/groupId&gt;            &lt;artifactId&gt;aspectjrt&lt;/artifactId&gt;            &lt;version&gt;${aspectj.version}&lt;/version&gt;          &lt;/dependency&gt;          &lt;dependency&gt;            &lt;groupId&gt;org.aspectj&lt;/groupId&gt;            &lt;artifactId&gt;aspectjtools&lt;/artifactId&gt;            &lt;version&gt;${aspectj.version}&lt;/version&gt;          &lt;/dependency&gt;        &lt;/dependencies&gt;        &lt;executions&gt;          &lt;execution&gt;            &lt;goals&gt;              &lt;goal&gt;compile&lt;/goal&gt;              &lt;goal&gt;test-compile&lt;/goal&gt;            &lt;/goals&gt;          &lt;/execution&gt;        &lt;/executions&gt;        &lt;configuration&gt;          &lt;outxml&gt;true&lt;/outxml&gt;          &lt;aspectLibraries&gt;            &lt;aspectLibrary&gt;              &lt;groupId&gt;org.springframework&lt;/groupId&gt;              &lt;artifactId&gt;spring-aspects&lt;/artifactId&gt;            &lt;/aspectLibrary&gt;            &lt;aspectLibrary&gt;              &lt;groupId&gt;org.springframework.data&lt;/groupId&gt;              &lt;artifactId&gt;spring-data-neo4j-aspects&lt;/artifactId&gt;            &lt;/aspectLibrary&gt;          &lt;/aspectLibraries&gt;          &lt;source&gt;1.6&lt;/source&gt;          &lt;target&gt;1.6&lt;/target&gt;        &lt;/configuration&gt;      &lt;/plugin&gt;    &lt;/plugins&gt;  &lt;/build&gt;This is the versions of libraries I am using today  &lt;properties&gt;    &lt;spring.version&gt;3.0.6.RELEASE&lt;/spring.version&gt;    &lt;aspectj.version&gt;1.6.12.M1&lt;/aspectj.version&gt;    &lt;slf4j.version&gt;1.6.1&lt;/slf4j.version&gt;    &lt;gwt.version&gt;2.3.0&lt;/gwt.version&gt;    &lt;jetty.version&gt;7.4.1.v20110513&lt;/jetty.version&gt;    &lt;project.build.sourceEncoding&gt;UTF-8&lt;/project.build.sourceEncoding&gt;    &lt;neo4j.version&gt;1.5.M02&lt;/neo4j.version&gt;    &lt;spring-data-graph.version&gt;2.0.0.M1&lt;/spring-data-graph.version&gt;  &lt;/properties&gt;And these are the repositories I have configured.  &lt;repositories&gt;    &lt;repository&gt;      &lt;id&gt;jetty-sonatype&lt;/id&gt;      &lt;name&gt;Sonatype Repository&lt;/name&gt;      &lt;url&gt;https://oss.sonatype.org/content/groups/jetty&lt;/url&gt;    &lt;/repository&gt;    &lt;repository&gt;      &lt;id&gt;spring-maven-release&lt;/id&gt;      &lt;name&gt;Spring Maven Release Repository&lt;/name&gt;      &lt;url&gt;http://maven.springframework.org/release&lt;/url&gt;    &lt;/repository&gt;    &lt;repository&gt;      &lt;id&gt;spring-maven-milestone&lt;/id&gt;      &lt;name&gt;Spring Maven Milestone Repository&lt;/name&gt;      &lt;url&gt;http://maven.springframework.org/milestone&lt;/url&gt;    &lt;/repository&gt;    &lt;repository&gt;      &lt;id&gt;JBoss Repo&lt;/id&gt;      &lt;url&gt;https://repository.jboss.org/nexus/content/repositories/releases&lt;/url&gt;      &lt;name&gt;JBoss Repo&lt;/name&gt;    &lt;/repository&gt;  &lt;/repositories&gt;]]&gt;&lt;/script&gt;I am happy to provide all this as a ZIP or push it up to github if people want to see more of it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-5582706721934760461?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/5582706721934760461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=5582706721934760461' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/5582706721934760461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/5582706721934760461'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2011/10/neo4j-2nd-look-setting-primary-key-on.html' title='Neo4J - 2nd Look - Setting a Primary Key on Nodes'/><author><name>Ramon Buckland</name><uri>http://www.blogger.com/profile/16744583593281442424</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-2107524672460321656</id><published>2011-10-26T12:33:00.000+01:00</published><updated>2011-10-26T12:33:28.709+01:00</updated><title type='text'>Neo4J - My First Look with Spring Data Graph</title><content type='html'>&lt;h2&gt;Spring Data Neo4J&lt;/h2&gt;&lt;br /&gt;I have been working on some proof of concept code and decided on a clean route to using NoSQL. Of course there are many choices and because the application I am working on is highly connected around relationships. (not boyfriend girlfriend types) I figured I would look at Neo4j. Given my favourite library of the year is &lt;a href="http://www.springsource.org/spring-data"&gt;spring-data&lt;/a&gt; I would take a look at the recently release spring-data-neo4j library (formerly called Spring Data Graph).&lt;br /&gt;&lt;br /&gt;Spring Data provides some funky interface abstraction over your data store, be that an RDBMS, or other type of storage like NoSQL forms.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Specifics to Neo4j and Spring Data Neo4J&lt;/h2&gt;A Quick Overview: &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Neo4J allows you to store POJOs without the need of a Schema.&lt;/li&gt;&lt;li&gt;POJOs are tied together using Relationships&lt;/li&gt;&lt;li&gt;Neo4J Understands a Node and a Relationship (that is it)&lt;/li&gt;&lt;li&gt;Spring Data Graph makes the "Node storage" and "relationship" tie-ing really simple with Annotations&lt;/li&gt;&lt;/ul&gt;Let's look at that last point in detail.spring-data-neo4j uses a few special annotations, not unlike JPA's annotations.&lt;br /&gt;&lt;h2&gt;Declaring a Node&lt;/h2&gt;A Node is declared with the following annotation&lt;br /&gt;&lt;pre class="brush:java"&gt;@NodeEntity&lt;br /&gt;public class MySpecialPojo {&lt;br /&gt;&lt;br /&gt;    @Indexed&lt;br /&gt;    Long id;&lt;br /&gt;&lt;br /&gt;    @Indexed(indexType=IndexType.FULLTEXT, indexName = "search")&lt;br /&gt;    String textField;&lt;br /&gt;    //...&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Effectively these annotations make some magic happen. One of the big magic happen things is to do with some special methods() you will find on the objects.If you include the right "stuff" in your Maven POM for spring-data-neo4j, you will get some good stuff happening.Effectively some "DAO/repository" style methods get woven into your domain objects.&lt;br /&gt;&lt;pre class="brush:java"&gt;        // for free we get .persist() Which wraps up a call to neo4j and put my Pojo as a Node down to Neo4j.&lt;br /&gt;        MySpecialPojo special = new MySpecialPojo(1,"Some Data").persist();&lt;br /&gt;&lt;br /&gt;        MySpecialPojo foundSpecial = this.pojoRepository.findByPropertyValue("textField", "Some Data");&lt;br /&gt;&lt;/pre&gt;You will also have .remove() and other fun stuff. The best document I have found (as it is very new (2.0.0.M1) is the following PDF. &lt;a href="http://static.springsource.org/spring-data/data-graph/snapshot-site/reference/pdf/spring-data-neo4j-reference.pdf"&gt;Spring Data Neo4J - Good Relationships&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Missing Identity or Mimicking(sp?) a Primary Key&lt;/h2&gt;The application I will be building out will have, after all is said and done a really simple Web Interface with REST type URLs.So .. for example, I will be able to do &lt;pre&gt;&lt;br /&gt;http://myservice.co.uk/superwebapp/mySpecialThing/detailedView/55&lt;br /&gt;&lt;/pre&gt;The 55 there will result in a query to Neo4J to locate the "MySpecialThing" object with ID of type 55 and display it. The problem I have is a two fold&lt;ul&gt;&lt;li&gt;Neo4J just stores objects and does not have "primary keys" other than a "nodeId". &lt;/li&gt;&lt;li&gt;The NodeId is collection wide. So Pojo1 shares the incremental nodeIds with Pojo2.&lt;/ul&gt;&lt;br/&gt;spring-data-neo4j adds (via an aspect ITD) a getNodeId() method to my POJOs but I don't want to depend on these for my "primary key" (future proofing my app if I move from Neo4J to something else).&lt;br/&gt;&lt;br/&gt;So I want a Class wide "Id" so that when an object is persisted it has an ID for it.&lt;br/&gt; I may be thinking about this wrong, and should just mold and accept a collection (database/store) wide ID system.&lt;br/&gt;I am heading down this path &lt;pre class="brush:java"&gt;&lt;br /&gt;public class Foo { &lt;br /&gt;   @NodeId(collection=Foo.class)&lt;br /&gt;   private Long id;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// or &lt;br /&gt;@NodeId(collection=Foo.class)&lt;br /&gt;public class Foo extends AbstractLongIdDomainObject { &lt;br /&gt;    // .... get/setId() is found on super class.&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;This would then store and manage an ID, like we used to in RDBMS days when they did not have Primary Key AUTO INCREMENT or IDENTITY type stuff. The way you would implement Primary ID's is to have a table that stores the ID for "each collection" and a lookup stored-procedure or code that would "get" the next ID for you (within a transaction for example).&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;I have not perfected this, but I figured I would show what I was thinking. Plus I will do some more reading, (maybe Neo4J has some config to allow per class type nodeIds. * I always go the hard way first *&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;pre class="brush:java"&gt;&lt;br /&gt;&lt;br /&gt;@NodeEntity&lt;br /&gt;public class IdManager { &lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * This map holds an idObject per "className" for each object we want to "have a Primary KEY id for"&lt;br /&gt;     */&lt;br /&gt;    @Indexed&lt;br /&gt;    private Map&lt;String,IdObject&gt; idCollection;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;@NodeEntity&lt;br /&gt;public class IdObject {&lt;br /&gt;&lt;br /&gt;    public Long getNextId() {&lt;br /&gt;        return nextId;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setNextId(Long nextId) {&lt;br /&gt;        this.nextId = nextId;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br/&gt;So with this magic code I would then annotate as above with my custom (@NodeId) and some magic happens using aspects and stuff to weave in the "next" ID when an object is "created" and about to be stored through spring-data-neo4j.&lt;h2&gt;Can't Default Values&lt;/h2&gt;Probably just by how the aspects interact with the get/set methods for your fields, I found that you cannot default a fields value like you can with JPA.&lt;pre class="brush:java"&gt;&lt;br /&gt;@NodeEntity&lt;br /&gt;public class Foo { &lt;br /&gt;&lt;br /&gt;   private Long someNumber = 1L;&lt;br /&gt;   // .. getter setters&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;If you create this object, and set the someNumber to 55 for example. And then fooInstances.persist() and then retrieve it from the repository, it will not have the value of 55, but the value of 1. !! Annoying. So that is okay .. but I think the apsects that "populate" the fields are going in too early or something. I have a test case that shows this happening but it was in a complex Aspect( because of my above primary key playing) so it may be a special case. I'll see.&lt;h2&gt;Summary&lt;/h2&gt;Really nice and I like the simplicity that neo4j and spring-data give. GO away SQL.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-2107524672460321656?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/2107524672460321656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=2107524672460321656' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/2107524672460321656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/2107524672460321656'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2011/10/neo4j-my-first-look-with-spring-data.html' title='Neo4J - My First Look with Spring Data Graph'/><author><name>Ramon Buckland</name><uri>http://www.blogger.com/profile/16744583593281442424</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-4415068753097800628</id><published>2011-09-16T13:51:00.004+01:00</published><updated>2011-10-26T10:30:43.417+01:00</updated><title type='text'>Released a New Open Source Library</title><content type='html'>For a while it has slightly or mildly annoyed me how clunky creating random data can be.&lt;br /&gt;You see all manner of approaches from Importing CSV files and XML to loading up JSON objects and the like.&lt;br /&gt;What I have wanted was a library that allows random or specific generation into your Java POJO domain model which you then simply persist using your preferred storage layer (Hibernate, JPA, Neo4j) etc. &lt;br/&gt;DBUnit is fantastic and I have often used &lt;a href="http://www.generatedata.com/"&gt;http://www.generatedata.com&lt;/a&gt; to generate XML files to upload through DBUnit. &lt;br /&gt;&lt;br /&gt;Well know I sctarched that itch over the last day to create the aptly named&lt;br /&gt;&lt;br /&gt;random-data-generator - &lt;a href="http://code.google.com/p/random-data-generator"&gt;http://code.google.com/p/random-data-generator&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In short, see the project page as it explains most of how it works. It is a library for use in your code for "seeding" objects with random data.&lt;br /&gt;&lt;br /&gt;Enjoy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-4415068753097800628?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/4415068753097800628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=4415068753097800628' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/4415068753097800628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/4415068753097800628'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2011/09/released-new-open-source-library.html' title='Released a New Open Source Library'/><author><name>Ramon Buckland</name><uri>http://www.blogger.com/profile/16744583593281442424</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-9048915355182416550</id><published>2011-09-15T11:29:00.001+01:00</published><updated>2011-09-15T11:31:40.703+01:00</updated><title type='text'>Love *Nix</title><content type='html'>I Still love *nix after all these years. It only took me 1 minute to convert  lines like&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;1880,"Mary",0.072381,"girl"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;to what I wanted.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ grep \"girl\" baby-names.csv  | head | cut -d, -f2 | sed 's/"//g;s/$/,F/g'&lt;br /&gt;Mary,F&lt;br /&gt;Anna,F&lt;br /&gt;Emma,F&lt;br /&gt;Elizabeth,F&lt;br /&gt;Minnie,F&lt;br /&gt;Margaret,F&lt;br /&gt;Ida,F&lt;br /&gt;Alice,F&lt;br /&gt;Bertha,F&lt;br /&gt;Sarah,F&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-9048915355182416550?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/9048915355182416550/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=9048915355182416550' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/9048915355182416550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/9048915355182416550'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2011/09/love-nix.html' title='Love *Nix'/><author><name>Ramon Buckland</name><uri>http://www.blogger.com/profile/16744583593281442424</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-6240816606383350245</id><published>2010-04-23T21:22:00.001+01:00</published><updated>2010-04-23T21:28:55.839+01:00</updated><title type='text'>GWT2 and Maven</title><content type='html'>GWT 2 and Maven - Close  I have been working with the new GWT 2 code. Especially the new IDE Plugin for eclipse. &lt;br&gt;&lt;br&gt; One things I remember doing with older 1.5 --&amp;gt; 1.7 code was run a separate Jetty container and pass -noserver to the GWT Dev mode, so that I could control &lt;br&gt;&lt;br&gt; (a) where the compiled JS files were and went to&lt;br&gt;&lt;br&gt; (b) running a servlet separate from the hosted app was nice.  &lt;br&gt;&lt;br&gt; With the new in-IDE mode and the new browser plugin, I found it is almost there.  Essentially, my issue I am resolving at the moment is a maven thing. &lt;ol&gt;&lt;li&gt; I don't want the GWT Hosted mode to put compiled *.js files (etc) in my src/main/webapp. Primarily because this folder is in Source Control.&lt;/li&gt;&lt;li&gt; My Maven compiler plugin writes out the WAR when i do mvn package. &lt;/li&gt;&lt;li&gt; I want (1.) solved by having it splay out the Compiled files to target/some-ignorable-directory and use the magic Jetty ALIAS do-hickey to "combine"      src/main/webapp and target/gwt-hosted-war.tmp &lt;/li&gt;&lt;/ol&gt;  achievable, yes/. The problem comes that ..   In the lanucher .. I try: -war "${workspace_loc:sample-gwt-webapp/target}/gwt-hosted-war.tmp"  &lt;br /&gt;&lt;blockquote&gt;-war "${workspace_loc:sample-gwt-webapp/target}/gwt-hosted-war.tmp" &lt;/blockquote&gt;But, that directory does not actually have the WEB-INF files in it.  &lt;br&gt;&lt;br&gt;How could I solve it:   &lt;ol&gt;&lt;li&gt;symlinks src/main/webapp/gwt/* to target/tmpfilder/gwt with Linux and Mac.. not portable to Windows .. except for linkd &lt;/li&gt;&lt;li&gt;before starting the Jetty Container, copy the src/main/webapp to target/tmp-war/ .. not nice for code changes of running jetty in src/main/webapp &lt;/li&gt;&lt;li&gt;Make changes to the dev classes .. (you can provide a new ServletContainer .. but only that .. and it's not in there where the checking is done) &lt;/li&gt;&lt;li&gt;use the -noserver and use Jetty (I want to run just on JVM for debugging) .. &lt;/li&gt;&lt;/ol&gt;bummer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-6240816606383350245?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/6240816606383350245/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=6240816606383350245' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/6240816606383350245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/6240816606383350245'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2010/04/gwt-2-and-maven-closei-have-been.html' title='GWT2 and Maven'/><author><name>Ramon</name><uri>http://www.blogger.com/profile/16939432390752100778</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-5363548628826997188</id><published>2010-03-26T22:47:00.001Z</published><updated>2010-03-26T22:48:13.022Z</updated><title type='text'>OSGi</title><content type='html'>A good read this.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;a href="http://njbartlett.name/blog/2010/03/17/osgi-and-how-it-got-that-way/"&gt;http://njbartlett.name/blog/2010/03/17/osgi-and-how-it-got-that-way/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I am looking at using OSGi to provide the plugin capability to this new Scala, JPA, GWT, Spring App.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-5363548628826997188?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/5363548628826997188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=5363548628826997188' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/5363548628826997188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/5363548628826997188'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2010/03/osgi.html' title='OSGi'/><author><name>Ramon</name><uri>http://www.blogger.com/profile/16939432390752100778</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-9191360168521968023</id><published>2010-03-20T23:15:00.005Z</published><updated>2010-03-21T13:03:43.936Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='gwt'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><category scheme='http://www.blogger.com/atom/ns#' term='JPA'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Scala, JPA, GWT, Spring, Eclipse, Maven - Part 1</title><content type='html'>About to embark on something ambitiuos (I suspect), I figured I would detail through some blog posts how I go.&lt;br /&gt;&lt;br /&gt;I am building an application (secret squirrel until it releases) that I want Scala to be it's core language.&lt;br /&gt;&lt;br /&gt;The GUI I want in Java (it just works so well), Eclipse is just the default IDE for me, Maven my absolute must build tool and then all the goodness of Spring and Hibernate as usual.&lt;br /&gt;&lt;br /&gt;My first challenge (beyond learning Scala) is to get Eclipse, Maven and Scala to co-operate. The project will have Java source and Scala Source mixed in.&lt;br /&gt;&lt;br /&gt;GWT, as per my other standard projects will be in it's own module anyway.&lt;br /&gt;&lt;br /&gt;So.. here goes. This is just the "I am trying this" post. I'll let you all know how I go.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://rbtech.blogspot.com/2010/03/scala-jpa-gwt-spring-eclipse-maven-p2.html"&gt;Read on for Part 2&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-9191360168521968023?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/9191360168521968023/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=9191360168521968023' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/9191360168521968023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/9191360168521968023'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2010/03/scala-gwt-spring-eclipse-maven.html' title='Scala, JPA, GWT, Spring, Eclipse, Maven - Part 1'/><author><name>Ramon</name><uri>http://www.blogger.com/profile/16939432390752100778</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-5946137949878513430</id><published>2009-12-30T11:25:00.002Z</published><updated>2009-12-30T11:31:59.367Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='email'/><category scheme='http://www.blogger.com/atom/ns#' term='gmail'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><title type='text'>Changing GMail Accounts</title><content type='html'>I recently decided to ditch my old gmail account in favour of my new gmail account, which is my personal domain name I have had for years (Google Apps for Domain).&lt;br /&gt;&lt;br /&gt;In doing so I needed to port all my mail from the old gmail account to the new gmail account.&lt;br /&gt;&lt;br /&gt;I setup the appropriate forwards etc, been running that way for about a month now.&lt;br /&gt;&lt;br /&gt;The best way I have found to "Move" all the mail from old to new is.&lt;br /&gt;&lt;br /&gt;Setup BOTH the GMail accounts in Mail (OSX on the Mac) as an IMAP account. The IMAP bit of course is important. Once they are setup, and you can see the mail in both of them.&lt;br /&gt;&lt;br /&gt;Simply: Drag and Drop. Go to Sent Mail, in the old. select all and drag it into the Sent Mail on the new. All the dates and everything is preserved. Similarly, the same for Drafts (yes I had over 50 drafts) .. and All Mail, that caps in at 10,000 emails.&lt;br /&gt;&lt;br /&gt;Just drag and drop to the same folder in the new account; Leave it running over night of course as it takes a LONG time. And without needed to state the obvious, the faster your connection, the faster this is. It moves the mail from the OLD to the new, VIA your computer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-5946137949878513430?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/5946137949878513430/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=5946137949878513430' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/5946137949878513430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/5946137949878513430'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2009/12/changing-gmail-accounts.html' title='Changing GMail Accounts'/><author><name>Ramon</name><uri>http://www.blogger.com/profile/16939432390752100778</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-8719639241657292516</id><published>2009-09-12T23:57:00.002+01:00</published><updated>2011-10-27T09:42:04.238+01:00</updated><title type='text'>Eclipse Galileo java.lang.ClassNotFoundException with JUnit Tests</title><content type='html'>&lt;strong&gt;This post describes my problem, and the solution&lt;/strong&gt;&lt;br /&gt;Recently I upgraded to Eclipse Galileo 3.5 on my Ubuntu dev box. All was well and I noticed no degradation or changes (new, good or bad) .. until ..&lt;br /&gt;Until I went to run my first testcase in my new &lt;strong&gt;ete&lt;/strong&gt; library. I received the beautiful&lt;br /&gt;&lt;pre class="brush:java"&gt;java.lang.ClassNotFoundException&lt;/pre&gt;.. on the JUnit Test case! :-) yuck.This was the stacktrace in it's entirety&lt;br /&gt;&lt;pre class="brush:java"&gt;Class not found org.soqqo.ete.source.data.EhCachedDataRowListTest&lt;br /&gt;java.lang.ClassNotFoundException: org.soqqo.ete.source.data.EhCachedDataRowListTest&lt;br /&gt;at java.net.URLClassLoader$1.run(URLClassLoader.java:200)&lt;br /&gt;at java.security.AccessController.doPrivileged(Native Method)&lt;br /&gt;at java.net.URLClassLoader.findClass(URLClassLoader.java:188)&lt;br /&gt;at java.lang.ClassLoader.loadClass(ClassLoader.java:306)&lt;br /&gt;at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)&lt;br /&gt;at java.lang.ClassLoader.loadClass(ClassLoader.java:251)&lt;br /&gt;at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClass(RemoteTestRunner.java:693)&lt;br /&gt;at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClasses(RemoteTestRunner.java:429)&lt;br /&gt;at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452)&lt;br /&gt;at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)&lt;br /&gt;at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)&lt;br /&gt;at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)&lt;br /&gt;&lt;/pre&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;span style="font-family: 'times new roman';"&gt;It really threw me because on the command line, Maven2 (mvn test) test cases still worked fine. So I knew I havd an Eclipse problem. The upgrade was my key, ie: it was within 20 minutes of starting Galileo that this error occured.&lt;br /&gt;&lt;br /&gt;So I ran my test cases in Eclipse 3.4 and it worked. 3.5 I say.. but then, that was too simple. There must be something up.&lt;br /&gt;&lt;br /&gt;Much googling around for a good few hours each day and I found nothing. It then struck me that it was NOT eclipse, but rather a plugin I had in Eclipse. As it turned out it was the opposite of that: In that I did NOT have a plugin.&lt;br /&gt;&lt;br /&gt;In the project, in the Maven 2 POM I declare some extra eclipse settings, to use the aspectJ Eclipse nature and also something for Spring as part of the Spring IDE. When you run&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;span style="font-family: 'courier new';"&gt;mvn eclipse:eclipse&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;/span&gt;the .classpath and .project files generated have all you relevate bits in there for eclipse.&lt;br /&gt;I had this in the POM.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush:xml"&gt;&lt;br /&gt;&lt;plugin&gt;&lt;br /&gt;  &lt;artifactId&gt;maven-eclipse-plugin&lt;/artifactId&gt;&lt;br /&gt;  &lt;configuration&gt;&lt;br /&gt;    &lt;additionalProjectnatures&gt;&lt;br /&gt;      &lt;projectnature&gt; org.eclipse.ajdt.ui.ajnature &lt;/projectnature&gt;&lt;br /&gt;      &lt;projectnature&gt; org.eclipse.jdt.core.javanature &lt;/projectnature&gt;&lt;br /&gt;      &lt;projectnature&gt; org.springframework.ide.eclipse.core.springnature &lt;/projectnature&gt;&lt;br /&gt;    &lt;/additionalProjectnatures&gt;&lt;br /&gt;    &lt;buildcommands&gt;&lt;br /&gt;      &lt;buildcommand&gt; org.eclipse.ajdt.core.ajbuilder &lt;/buildcommand&gt;&lt;br /&gt;      &lt;buildcommand&gt; org.springframework.ide.eclipse.core.springbuilder &lt;/buildcommand&gt;&lt;br /&gt;    &lt;/buildcommands&gt;&lt;br /&gt;    &lt;classpathContainers&gt;&lt;br /&gt;      &lt;classpathContainer&gt;org.eclipse.jdt.launching.JRE_CONTAINER&lt;/classpathContainer&gt;&lt;br /&gt;      &lt;classpathContainer&gt;org.eclipse.ajdt.core.ASPECTJRT_CONTAINER&lt;/classpathContainer&gt;&lt;br /&gt;    &lt;/classpathContainers&gt;&lt;br /&gt;  &lt;/configuration&gt;&lt;br /&gt;&lt;/plugin&gt;&lt;br /&gt;&lt;/pre&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;span style="font-family: 'times new roman';"&gt;My guess was that I did not have the AspectJ plugin and the Spring Builder plugins, so the build paths were all screwey, which meant that Eclipse classpaths for JUnit were failing.&lt;br /&gt;&lt;br /&gt;I was right, a quick uncomment of the whole extra customisation on the eclipse maven plugin in the pom.xml, and rerun&lt;span style="font-style: italic;"&gt; mvn eclipse:eclipse &lt;/span&gt;and I was up and running again.&lt;br /&gt;&lt;br /&gt;cheers. Hope this finds someone else a short path back to productivity.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-8719639241657292516?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/8719639241657292516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=8719639241657292516' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/8719639241657292516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/8719639241657292516'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2009/09/eclipse-galileo-javalangclassnotfoundex.html' title='Eclipse Galileo java.lang.ClassNotFoundException with JUnit Tests'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-5348580581147673130</id><published>2009-07-07T10:51:00.001+01:00</published><updated>2009-07-07T10:52:48.678+01:00</updated><title type='text'>Coffee .. so disappointing</title><content type='html'>Ok, my first post since moving to the UK. I just walked down the road to my closest, best possible coffee house thus far, and it was Starbucks. How disappointing. not to be dismayed, I will find a solution one day.&lt;br /&gt;&lt;br /&gt;All is well, lots to read and understand at my new role. (but without coffee, my goodness, how will I survive ?)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-5348580581147673130?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/5348580581147673130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=5348580581147673130' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/5348580581147673130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/5348580581147673130'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2009/07/coffee-so-disappointing.html' title='Coffee .. so disappointing'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-6553498426274472508</id><published>2009-02-18T13:16:00.002Z</published><updated>2009-02-18T13:22:10.701Z</updated><title type='text'>Importing old mail into GMail</title><content type='html'>I have a client you needed a good 4 years of emails imported into GMail.&lt;br /&gt;&lt;br /&gt;At first I thought, okay there must be a nice way of doing this. Then I found some python scripts which did some magic, and I thought .. ahh it works. And then I found without testing or checking, that perhaps they were not what i was after.&lt;br /&gt;&lt;br /&gt;I needed the following to occur&lt;br /&gt;(a) the emails appeared as if it was created when it was&lt;br /&gt;(b) it showed it was sent by or received from as per the original &lt;br /&gt;(c) there was no alteration to subjects or anything etc.&lt;br /&gt;&lt;br /&gt;So I managed to try a "rule" in Mac mail to forward all mail under certain criteria to the gmail address, and then apply the rule to the mails in question. But this was a bit dicky. It added the Fwd: subject prefix and amm mail appears as "me".&lt;br /&gt;&lt;br /&gt;I then thought about it ad it was simple... &lt;br /&gt;&lt;br /&gt;Just attach the Gmail mailbox in question as an IMAP folder in mac mail.&lt;br /&gt;&lt;br /&gt;Import (or no need if already there) the old email from wherever to mac mail. Then .. hat kiddies ? .. drag and drop the mail from the various folders to the IMAP folders.&lt;br /&gt;&lt;br /&gt;Simple. A quick check and the mail appears as if sent in 2007, from whom, to whom. (this was the sent mail) .&lt;br /&gt;&lt;br /&gt;Nice. No scripts or crap.. just time waiting to MacMail to do it's thing. I suspect my client will need to expand their data limit with Google.. but hey, what a service!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-6553498426274472508?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/6553498426274472508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=6553498426274472508' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/6553498426274472508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/6553498426274472508'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2009/02/importing-old-mail-into-gmail.html' title='Importing old mail into GMail'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-6601766670847888162</id><published>2009-02-06T00:19:00.004Z</published><updated>2009-02-06T01:15:52.810Z</updated><title type='text'>Maven2 dependency classifier fails</title><content type='html'>Got a beef with Maven2 classifier today. The classifier is an extra tag/property on the artifact (jar) identifier. Where it is used often is with -sources.jar and -javadoc.jar for a particular jar.&lt;br /&gt;&lt;br /&gt;An example of it's use is provided on the maven doco site&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;classifier&lt;/span&gt;:&lt;br /&gt;The classifier allows to distinguish artifacts that were built from the same POM but differ in their content. ...&lt;br /&gt;&lt;br /&gt;As a motivation for this element, consider for example a project that offers an artifact targeting JRE 1.5 but at the same time also an artifact that still supports JRE 1.4. The first artifact could be equipped with the classifier jdk15 and the second one with jdk14 such that clients can choose which one to use.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;I have two jars which are JDK specific, one depends on the other (version). This means I have 4 jars.&lt;br /&gt;&lt;br /&gt;    bcprov-jdk16-141.jar&lt;br /&gt;          ^ depends - bcpg-jdk16-141.jar&lt;br /&gt;&lt;br /&gt;    bcprov-jdk15-141.jar&lt;br /&gt;          ^ depends - bcpg-jdk15-141.jar&lt;br /&gt;&lt;br /&gt;This is of course, bouncy castle, and am using it with camel-crypto component for Camel. Bouncy castle comes in a version for each JDK, one for JDK 1.5, one for JDK 1.6. Great! The classifier is a case for this.&lt;br /&gt;&lt;br /&gt;The code I will be writing primarily depends on bcpg (PGP implementation). So if I just depend on it, it will (should) pull in the parent bcprov.&lt;br /&gt;&lt;br /&gt;A few things I noted when creating the pom changes was that&lt;br /&gt;(first)  The name of the bouncycastle jar is names as&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; bcprov-jdk16-141.jar&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Maven puts the classifier "after" the version.&lt;br /&gt;&lt;blockquote&gt;arbitrary string that - if present - is appended to the artifact name just after the version number.&lt;/blockquote&gt;So .. under maven, the bouncy castle jar should be&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; bcprov-141-jdk16.jar&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; bcprov-${version}-${classifier}.jar&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;At first, no worries, the bcprov jar up on ibiblio is old anyway and is missing the other jar I need which is bcpg, the PGP implementation. (the bit I want to add for Camel).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Putting this altogether:&lt;/span&gt;&lt;br /&gt;in the root pom, we need to get a "property" version string so we can use it in the classifier.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;    &amp;lt;!-- set a property for the jdk version we are using based on the match of the jdk in use --&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;    &amp;lt;profile&gt;&lt;/profile&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      &amp;lt;id&gt;jdk16&amp;lt;/id&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      &amp;lt;activation&gt;&amp;lt;jdk&gt;1.6&amp;lt;/jdk&gt;&amp;lt;/activation&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      &amp;lt;properties&gt;&amp;lt;jdk-version&gt;jdk16&amp;lt;/jdk-version&gt;&amp;lt;/properties&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &amp;lt;profile&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      &amp;lt;id&gt;jdk15&amp;lt;/id&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      &amp;lt;activation&gt;&amp;lt;jdk&gt;1.5&lt;/jdk&gt;&amp;lt;/activation&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      &amp;lt;properties&gt;&amp;lt;jdk-version&gt;jdk15&amp;lt;/jdk-version&gt;&amp;lt;/properties&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In doing this, we will have ${jdk-version} as a property. This leads to a dependency like&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;font-size:85%;"  &gt;   &lt;br /&gt;&lt;br /&gt;   &amp;lt;dependency&gt;&lt;br /&gt;       &amp;lt;groupid&gt;bouncycastle&amp;lt;/groupid&gt;&lt;br /&gt;       &amp;lt;artifactid&gt;bcpg&amp;lt;/artifactid&gt;&lt;br /&gt;       &amp;lt;version&gt;${bouncycastle-version}&amp;lt;/version&gt;&lt;br /&gt;       &amp;lt;classifier&gt;${jdk-version}&amp;lt;/classifier&gt;&lt;br /&gt;     &amp;lt;/dependency&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The last bit to resolve is to install the renamed jars into my local repository and have bcpg depend on bcprov. But this is where maven fell over. One classifer jar and another, share the same "non" classifier pom.&lt;br /&gt;&lt;br /&gt;&lt;blockquote  style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;mvn install:install-file -DgroupId=bouncycastle -DartifactId=bcpg -Dversion=141 -Dclassifier=jdk16 -Dpackaging=jar -Dfile=/home/rbuckland/datastore/java/bcpg-jdk16-141.jar&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;This will then put in the renamed jar bcpg-jdk16-141.jar as bcpg-141-jdk16.jar.&lt;br /&gt;&lt;br /&gt;Where it falls over. Maven2 has one pom for all classif(ied)er versions. So the listing for the repository is thus&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;ls /home/rbuckland/.m2/repository/org/bouncycastle/bcpg/141/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;bcpg-141-jdk15.jar&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;bcpg-141-jdk16.jar&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;bcpg-141.pom&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Not a pom for each. So in the pom (above) i need to declare the dependency on bcprov, but of course , in this repository pom for bcpg,&lt;br /&gt;&lt;br /&gt;(a) specificing no classifier, the dependency does not get picked up&lt;br /&gt;(b) tried ${classifier} .. hopeful&lt;br /&gt;(c) tried ${pom.classifier} .. hopeful&lt;br /&gt;&lt;br /&gt;I gave up. So instead the workaround is that the "version" of the var encompasses the JDK version instead. ie:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;      &amp;lt;dependency&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        &amp;lt;groupid&gt;bouncycastle&lt;br /&gt;&amp;lt;/groupid&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        &amp;lt;artifactid&gt;bcpg&amp;lt;/artifactid&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        &amp;lt;version&gt;${jdk-version}-${bouncycastle-version}&amp;lt;/version&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;And then we can do what we need (of note, with this, the original naming of the jar by bouncycastle team stays).&lt;br /&gt;&lt;br /&gt;Ah well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-6601766670847888162?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/6601766670847888162/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=6601766670847888162' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/6601766670847888162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/6601766670847888162'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2009/02/maven2-dependency-classifier-fails.html' title='Maven2 dependency classifier fails'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-5455703756875669589</id><published>2009-01-23T11:35:00.004Z</published><updated>2009-01-25T02:26:08.237Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='camel java servicemix'/><title type='text'>Apache Camel - Something Fresh</title><content type='html'>I have been working with Apache Camel for a good 8-9 months now, and have been committing as much as I can more recently. It is amazing as it feels like a breath of fresh air from the complexities of jbi in the servicemix arena. &lt;br /&gt;&lt;br /&gt;Of course, many who work on and with servicemix also work on and work with camel and that is why I find camel refreshing. Simply that it is all the goodness of servicemix without the layer of jbi. Not to knock jbi of course, but it was very complex working with myriads of SU and SA Zip files that sometimes did nothing more than bloat your .m2 repository. Ahh those were the days. (edit: I will add that I am looking forward to the new ServiceMix 4.0 kernel as it , from what I can tell, is making large task of simplifying the architecture).&lt;br /&gt;&lt;br /&gt;So what am I using Camel for ? Recently a client has had some iteresting gaps in a project that neither the global provided ETL PowerCenter informatica or locally developed scripts were sufficing or could suffice the gap. &lt;br /&gt;&lt;br /&gt;Primarily we have been camel riding inside AMQ so we get good cluster support (potential) but it's the out of box nature that I enjoy (used to it from the servicemix days).&lt;br /&gt;&lt;br /&gt;So .. good work Camel devs, keep it up, and hopefully I can keep it up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-5455703756875669589?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/5455703756875669589/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=5455703756875669589' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/5455703756875669589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/5455703756875669589'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2009/01/apache-camel-something-fresh.html' title='Apache Camel - Something Fresh'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-8061602704531684046</id><published>2009-01-12T00:46:00.003Z</published><updated>2009-01-12T05:51:24.747Z</updated><title type='text'>Stick with the masses ( Eclipse 3.4.1 XPCOM error -2147467262 )</title><content type='html'>There is a lot to be said about sticking with the masses, going with the crowd so to speak. Especially when you are riding the crowd (crowd) surfing for a different purpose .. huh ?&lt;br /&gt;&lt;br /&gt;Let me explain .. &lt;br /&gt;&lt;br /&gt;I have been an active user of Linux for the best part of 14 years. In that time, I have sat on the bleeding edge of changes and sometimes suffered. But, also I had time to kill, the fix and fix and patch time was kind of fun. &lt;br /&gt;&lt;br /&gt;These days I have a lot less time that I allocate to that discretionary IT time budget, as I have a 2 girls and my beautiful wife with whom I enjoy spending time.&lt;br /&gt;&lt;br /&gt;I still mass large amounts of work into my time, but when something goes wrong, ancillary to my task, (or, better put  - my tools fail), then i get cranky.&lt;br /&gt;&lt;br /&gt;Just on Friday I was prepping to make some changes to camel-file/ftp, adding support for commons-vfs and my eclipse failed to load.&lt;br /&gt;&lt;br /&gt;It worked on the Thu, but Fri, nothing. My error said look at workspace/.metadata/.log&lt;br /&gt;&lt;br /&gt;In there I find an obscure message... &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;!ENTRY org.eclipse.ui 4 0 2009-01-12 14:23:58.273&lt;br /&gt;!MESSAGE Unhandled event loop exception&lt;br /&gt;!STACK 0&lt;br /&gt;org.eclipse.swt.SWTException: Failed to execute runnable (org.eclipse.swt.SWTError: XPCOM error -2147467262)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As it turned out, this was caused by an incompatibility with my eclipse and (possible Firefox or something in a mozilla stack).&lt;br /&gt;&lt;br /&gt;What was my fix ? Well it turns out, the workspace info page at the first startup of eclipse uses a browser (no worries). But it had fundametal issues launching my system default browser. To get past the bug .. you need to unpack a jar &lt;br /&gt;&lt;br /&gt;(/opt/eclipse/plugins/org.eclipse.ui.intro_3.2.201.v20080702_34x.jar)&lt;br /&gt;&lt;br /&gt;and edit the plugin.xml, commenting out all extension elements, repack it and restart eclipse with a -clean.&lt;br /&gt;&lt;br /&gt;See here for details (this link was the 5th attempt at me getting around the problem).&lt;br /&gt;&lt;br /&gt;So why stick with the masses ? Well, I can only guess, but I suspect my running of Ubuntu amd64 is the cause of this eclipse issue biting me. Or, put it mildly, the error has not been tested much on this platform and I got stung, I could be wrong, but I can only guess that, surely others have seen the problem, I am not the only one running eclipse on Linux.&lt;br /&gt;&lt;br /&gt;Where it failed for me is that Ubuntu automatically updated (something) and then my eclipse broke. I haven't got the time to work out what updated in the last week due to the auto update manager .. ? question: is there such a place to see the install log.. dpkg must know).&lt;br /&gt;&lt;br /&gt;Anyways, my problem is gone and I am back to my usual eclipse-ing self. (minus the intro page, but i have never used that anyway).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-8061602704531684046?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/8061602704531684046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=8061602704531684046' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/8061602704531684046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/8061602704531684046'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2009/01/stick-with-masses-eclipse-341-xpcom.html' title='Stick with the masses ( Eclipse 3.4.1 XPCOM error -2147467262 )'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-7647003213099366725</id><published>2008-07-17T04:33:00.010+01:00</published><updated>2008-07-17T08:14:24.594+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java linux bash unix tips'/><title type='text'>bash commands, xml cleaning and Java Searching</title><content type='html'>&lt;span style="font-family:arial;"&gt;A lot of you are Linux users, some Mac and *NIX and the others, I want you to be *NIX. (perhaps use cygwin for a bit).&lt;/span&gt;  &lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;br /&gt;This post is primarily about two things .. helping you in the command line and helping you develop.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;I am, as most people know a Java developer (by trade) and work a lot with XML.&lt;/span&gt;  &lt;span style="font-family:arial;"&gt;I found two things annoyed me for some time a year or two back.&lt;/span&gt; &lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;br /&gt;1. Finding the jar of some class I had not seen (and it may be in my m2 repository)&lt;/span&gt; &lt;span style="font-family:arial;"&gt;&lt;br /&gt;2. Cleaning my XML files (especially the pom.xml files) so they were neat.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;I solved both of these with two seperate bash functions. A bash function acts like command on the command line, so if you have&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;function foo () { echo "foo and Hello World together" }&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;in your .bashrc, when you "source ~/.bashrc or open another shell, the command "foo" will work.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;C&lt;span style="font-family:arial;"&gt;obling this together with some good old unix commandline foo, you can do amazing stuff (I remember the first complex function I wrote was a wrapper for df (disk filesystem) and using awk to show the percentage of usage (of about 2MB) that I had used on the UNE CS Dec Alpha Server, mihi and later neumann).&lt;br /&gt;&lt;br /&gt;Sadly I don't have that command anymore, but I don't need it either as df -h gives you the wonderful details. I digress.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;Back to functions; it is all well and good to have them, but if you don't remember them, or how to run them, they become dusty (and your self help shell foo rusty).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;To solve this problem, I created my own simple help system, "myhelp" nothing robust, nothing fancy but it all works within the one .bashrc file. The principle is simple.&lt;/span&gt;  &lt;span style="font-family:arial;"&gt;Any function I write for me, adheres to two principles.&lt;/span&gt; &lt;ol style="font-family: arial;"&gt;&lt;li&gt;It calls a "help" function first off, which checks if the first argument is --help and promptly displays the help and exits the function.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;After the first { on the same line as the "function ..." brace, i add a comment # myFunction which signifies it is special and help can be listed for it. (and that is is my function)&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-family:arial;"&gt;Now to the functions themselves.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;1. First the XML Cleaner.&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# Use XMLLint to reformat the XML&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;function xmlclean () { # myFunction&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    myShowHelp $1 "xmlclean" "&lt;/span&gt;&lt;xmldocument&gt;&lt;span style="font-family:courier new;"&gt;     - Reformat the XML Document" || return&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    doc=$1;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    tmpDoc=/tmp/xcleaner.$$.xml&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    cp ${doc} ${tmpDoc} &amp;amp;&amp;amp; xmllint --format ${tmpDoc} --output ${doc} &amp;amp;&amp;amp; rm ${tmpDoc}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/xmldocument&gt;&lt;/blockquote&gt;&lt;br /&gt;The indentation is a little skewed (I'll try and resolve that later). This bash script uses xmllint&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;sudo apt-get install libxml2-utils&lt;br /&gt;&lt;/blockquote&gt;Fairly simple, in fact I THINK that the xmllint can do an inline replacement, but hey mine works.&lt;br /&gt;&lt;br /&gt;so .. formatting an XML file is simply ..&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;rbuckland@ld630:~$ xmlclean foo.xml&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. Now for locating classes in Jars ..&lt;/span&gt;&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;#&lt;br /&gt;# find a java class in the Repo&lt;br /&gt;#&lt;br /&gt;function jfind () { # myFunction&lt;br /&gt;   myShowHelp $1 "jfind" "&lt;classname&gt;  - Find a classname(substring also) in Maven2 jars. The classname is passed to egrep on the jar contents" || return&lt;br /&gt;   find ~/.m2/repository/ -name '*.jar' | xargs -l1 -ixx sh -c "jar tvf xx | egrep $1 &amp;amp;&amp;amp; echo xx"&lt;br /&gt;}&lt;/classname&gt;&lt;/blockquote&gt;&lt;br /&gt;An example of it in action:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;rbuckland@ld630:~$ jfind DxmlExecutor&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  1842 Fri Jul 04 09:09:06 EST 2008 com/mivira/dxml/core/DxmlExecutor.class&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/home/rbuckland/.m2/repository/com/mivira/dxml/dxml/0.9.1a/dxml-0.9.1a.jar&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;br /&gt;I won't go into what it is doing (it's pretty simple) just run each command seperately and you will get it all.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3. Now for the help system,&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To show your custom commands you have written, type the following.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;rbuckland@ld630:~$ myhelp&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;jfind &lt;/span&gt;&lt;classname&gt;&lt;span style="font-family:courier new;"&gt; - Find a classname(substring also) in Maven2 jars. The classname is passed to egrep on the jar contents&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;xmlclean &lt;/span&gt;&lt;xmldocument&gt;&lt;span style="font-family:courier new;"&gt; - Reformat the XML Document&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;rbuckland@ld630:~$&lt;/span&gt; &lt;/xmldocument&gt;&lt;/classname&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;To see the help for one command ..&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;rbuckland@ld630:~$ xmlclean --help&lt;br /&gt;xmlclean &lt;xmldocument&gt; - Reformat the XML Document&lt;/xmldocument&gt;&lt;/blockquote&gt;&lt;br /&gt;The myhelp works simply by looking for all "function name () { #myFunction" lines in your .bashrc and runs functionName --help for each one.&lt;br /&gt;&lt;br /&gt;here is the two help functions you need in the .bashrc.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;# declare -F shows the functions, and the shopt 'extdebug' is meant to show the line numbers&lt;br /&gt;# of the functions (and src file) but it didn't so I am going with a more fool proof&lt;br /&gt;# way of identifying my functions .. grep the .bashrc for all function lines that have the&lt;br /&gt;# comment on the same line (hack but works)&lt;br /&gt;#&lt;br /&gt;function myhelp () {&lt;br /&gt;   for i in `grep myFunction ~/.bashrc | cut -f2 -d' '`&lt;br /&gt;   do&lt;br /&gt;       $i --help&lt;br /&gt;   done&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function myShowHelp() {&lt;br /&gt;   if [ $1 == '--help' ]; then&lt;br /&gt;       echo $2 $3&lt;br /&gt;       return 1&lt;br /&gt;   fi&lt;br /&gt;   return 0&lt;br /&gt;}&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;That's it. Now when I add a new function. All I have to do is create it according to my template which is&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;function mynewcommand () { # myFunction&lt;br /&gt;   myShowHelp $1 "mynewcommand" "description"  || return&lt;br /&gt;&lt;br /&gt;   # do all the work here&lt;br /&gt;}&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;and that's it, re-source my .bashrc (source ~/.bashrc) and test it out. and myhelp just automagically picks it up for me.&lt;br /&gt;&lt;br /&gt;Done!&lt;br /&gt;&lt;br /&gt;Addendum: As is is often the case, looking at my old code I make imporevements and posting this blog entry did just that.&lt;br /&gt;&lt;br /&gt;I figured that maven related tasks should be prefixed with m2. and also I added another helper for maven.&lt;br /&gt;&lt;br /&gt;Here is my full set of relevant helpers.&lt;br /&gt;Cheers&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#-----------------------------------------------------------------------&lt;br /&gt;# declare -F shows the functions, and the shopt 'extdebug' is meant to show the line numbers&lt;br /&gt;# of the functions (and src file) but it didn't so I am going with a more fool proof&lt;br /&gt;# way of identifying my functions .. grep the .bashrc for all function lines that have the &lt;br /&gt;# comment on the same line (hack but works)&lt;br /&gt;#&lt;br /&gt;function myhelp () {&lt;br /&gt;  for i in `grep myFunction ~/.bashrc | cut -f2 -d' '`&lt;br /&gt;  do&lt;br /&gt;     $i --help&lt;br /&gt;  done&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function myShowHelp() {&lt;br /&gt;   if [ $1 == '--help' ]; then&lt;br /&gt;     echo $2 $3&lt;br /&gt;     return 1&lt;br /&gt;   fi&lt;br /&gt;   return 0&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#&lt;br /&gt;# print out all the matching jars in the repo&lt;br /&gt;#&lt;br /&gt;function m2showversions () { # myFunction&lt;br /&gt;    myShowHelp $1 "m2showversions" " - Simply lists all the jar filenames that match. Infer from that the versions you have on disk"&lt;br /&gt;&lt;br /&gt;    (cd ~/.m2/repository  &amp;&amp; find * -name "*$1*")&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#&lt;br /&gt;# find a java class in the Repo&lt;br /&gt;#&lt;br /&gt;function m2find () { # myFunction&lt;br /&gt;    myShowHelp $1 "m2find" "&lt;classname&gt;  - Find a classname(substring also) in Maven2 jars. The classname is passed to egrep on the jar contents" || return&lt;br /&gt;    find ~/.m2/repository/ -name '*.jar' | xargs -l1 -ixx sh -c "jar tvf xx | egrep $1 &amp;&amp; echo xx"&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#&lt;br /&gt;# Use XMLLint to reformat the XML&lt;br /&gt;#&lt;br /&gt;function xmlclean () { # myFunction&lt;br /&gt;    myShowHelp $1 "xmlclean" "&lt;xmlDocument&gt;     - Reformat the XML Document" || return&lt;br /&gt;&lt;br /&gt;    doc=$1;&lt;br /&gt;    tmpDoc=/tmp/xcleaner.$$.xml&lt;br /&gt;    cp ${doc} ${tmpDoc} &amp;&amp; xmllint --format ${tmpDoc} --output ${doc} &amp;&amp; rm ${tmpDoc}&lt;br /&gt;}&lt;br /&gt;#-----------------------------------------------------------------------&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;hope that helps&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-7647003213099366725?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/7647003213099366725/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=7647003213099366725' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/7647003213099366725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/7647003213099366725'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2008/07/bash-commands-xml-cleaning-and-java.html' title='bash commands, xml cleaning and Java Searching'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-2147057675811542090</id><published>2008-03-25T11:18:00.004Z</published><updated>2008-03-25T12:14:47.555Z</updated><title type='text'>Hoax Emails - Internet Banking Fraud</title><content type='html'>In my time of collecting and monitoring SPAM I  have noticed that I have not received many Internet Banking Fraud / Hoax emails. It might just be me but it seems a bit odd that the only one that I have received are for Internet Banking sites which I use. So, for example, I use ANZ Internet Banking and just today received my 3rd Internet Banking Hoax Email, this one was for ANZ.&lt;br /&gt;&lt;br /&gt;So how do the fraudsters (server registered in Chile (.cl) ) know that I bank ANZ, and why don;t I get NAB, St George or Bank Brunei Email Hoaxes ? The answer is that they KNOW I bank ANZ.&lt;br /&gt;&lt;br /&gt;What would be some ways they obtain this list ? I can certainly think of some. And I will add also, ways for the Banks to prevent it, and also for us to be mindful (as users).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 153, 0);"&gt;Buying the list&lt;/span&gt;&lt;br /&gt;At first you would hope it doesn't occur, but when you think about it, it is quite plausible.  A high enough price put up entices someone with access to "sell" the list.&lt;br /&gt;&lt;br /&gt;Imagine that of 100,000 emails sent out, only 100 people (.001%) provide their details. And if from this, the fraudsters were able to transfer an average of $500, that's a quick easy $50,000.&lt;br /&gt;&lt;br /&gt;Of course, some accounts have $50,000 in them to start with, so the bounty is much more of course.&lt;br /&gt;&lt;br /&gt;So let's go with $50,000. We can pay $5,000 to the list provider, all they have to provide is Email Addresses of valid customers, nothing more.&lt;br /&gt;&lt;br /&gt;$5k is not a lot, but if it were sold for $5k to 3 "fraud" groups, then the insider pockets $15k.&lt;br /&gt;&lt;br /&gt;A security breach is 90% of the time an insider job and is the one thing that banks must watch out for.&lt;br /&gt;&lt;br /&gt;So who could be an insider ? Well simply put anyone with access to the email list.&lt;br /&gt;&lt;br /&gt;This could be:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Anyone in IT with sufficient privileges (to the test, development, or production database).&lt;/li&gt;&lt;li&gt;Anyone in Marketing who can extract / export a list of email addresses for bulk email&lt;/li&gt;&lt;li&gt;Anyone in Customer Servicing with this type of access&lt;/li&gt;&lt;li&gt;The Vendor of the Banking System who is given the Database in original form for issue resolution (and of course then, any of the vendors employees)&lt;/li&gt;&lt;/ul&gt;So the insider is an issue. We know it, but it really is as scarey as that. So many IT systems are left open or "available" for reading but all users. I have certainly worked with my fair share that do.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;Moving On, so, if it's not an insider job, how else could it be done ?&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;The ISP Proxy Server&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;All requests that I make from my ISP (ie: at home) are logged, not only my ISP at home, but at work also.&lt;br /&gt;&lt;br /&gt;Might seem odd, but this data is worth money.&lt;br /&gt;&lt;br /&gt;At the ISP, they just have to marry my email address and a list of known "banking" logon sites that I access, then they have a decent list. Of course it is not ALL users, but a big ISP (Telstra Bigpond in Australia) would be a nice size and, sadly, the bigger the ISP, the more un-suspecting the user will be and more likely to click on that link.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;At a stretch&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;Virus / URL Logger / Spy&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;So this one is kind of logical, but probably not done. If there is software on my PC which is "logging" my surfing, they could use that. But if it's on my PC, then well, might as well log the logon to the internet banking site also.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-weight: bold;font-size:130%;" &gt;So How do We Prevent it ?&lt;br /&gt;&lt;/span&gt;I'll talk about us and the Bank.&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;For us&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;(a)&lt;/span&gt; Change banks to one which provides&lt;br /&gt;    &lt;span style="font-weight: bold;"&gt;(i)&lt;/span&gt; SMS Bank Pay Anyone Verification (With the CommonWealth Bank - not ANZ) for any new Pay Anyone Account not in my list, I need to verify it with an SMS code which is sent to my Mobile phone. That way, I must have my phone with my to pay anyone.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;(ii)&lt;/span&gt; Secure ID Number Generators for login&lt;br /&gt;HSBC in Australia and HSBC Commercial in the UK use these. A new number is generated every 60 seconds, and I need to supply my ID, password and this number to login.&lt;br /&gt;&lt;br /&gt;Fraudsters won't target banks which use either of these (a,i or a,ii) , they either can't get in, or can't do anything once they are in.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;(b)&lt;/span&gt; NEVER, EVER click on a link in an email for Internet Bank, for changing password, or for reactivating an account, or any activity. Go through your banks website directly, or ring them.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;(c) &lt;/span&gt;Change banks to someone that DOES provide good access.&lt;br /&gt;&lt;span style="color: rgb(153, 51, 153);"&gt; &lt;span style="font-weight: bold;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;For the banks&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Where do you start ?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 153, 0);"&gt;First - Secure internal Access&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Perform a full audit of all access methods to the "customer data" at length. This will show holes on how data can come and go, and don't think that just stopping USB access will prevent a user from getting large lists of data out. Where there is a will, there is a way. a quick UUENCODE and a Cut'n'Paste to a pastebin.ca will dump data out in next to no time. If that doesn't seem plausible, what about some steganography ?&lt;span style="color: rgb(153, 51, 153);"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 153, 0);"&gt;Second - Audit Access&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Goes without saying, but you would be suprised. Audit all access to the data, so that if data does get out, you know when and by whom (hopefully).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 153, 0);"&gt;Third - Provide Decent Security Features&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;It is almost ignorant for banks to NOT have a decent security feature such as SMS verification of Number Generator Fobs for use. They can tell us all they like what NOT to do, but really there are technologies out there which now prevent this type of attack from working, so just get to it an implement it.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;There is MUCH more to be said on this topic, but that will get you thinking for now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-2147057675811542090?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/2147057675811542090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=2147057675811542090' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/2147057675811542090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/2147057675811542090'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2008/03/hoax-emails-internet-banking-fraud.html' title='Hoax Emails - Internet Banking Fraud'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-7141745197145051663</id><published>2007-12-23T11:13:00.001Z</published><updated>2009-01-09T12:26:55.676Z</updated><title type='text'>Linux - Ubuntu RAID, Modules, my NAS and Fun</title><content type='html'>Ahh to be minimalist.&lt;br /&gt;&lt;br /&gt;It all started over 3 months ago. I have taken to decluttering our house, a personal goal. (I should have set a KPI or two). One task which leads me down this path is digitizing my music and movies.&lt;br /&gt;&lt;br /&gt;Many years ago, Sara and I decided to never rent another DVD, but to buy them. We don't buy the latest, unless we "really want it" but will buy the DVD's on special etc, or ex-rentals. Needless to say, from the past 3 years of DVD buying we have a very impressive collection, tipping the 200 mark. Digitising this lot of DVDs has caused a ripple into the Linux world. As you can gather, it takes up lots of space.&lt;br /&gt;&lt;br /&gt;To start with, I got rid of some old servers, but kept their hard drives, as my goal is (has been) to setup a home NAS (Network Attached Storage) as the central location for all CDs and DVDs.&lt;br /&gt;&lt;br /&gt;So, sitting in front of me is the glorious resurrected "icemaster" (i have to find my chroming again). I have the usual mechano (tip for extending drive bays) and the following drives. 40G x 3, 80G x 3 1 x 160G and 1 x 200G.&lt;br /&gt;&lt;br /&gt;My layout is essentially to have a 40G RAID1 / and the rest in LVM as RAID5 devices (split up by like sized partitions).&lt;br /&gt;&lt;br /&gt;To have so many drives, of course I needed to extend the IDE channels. (not upgrading to SATA yet.. maybe another few years). I purchased off eBay (new) 2 ITE 8212 IDE RAID cards. The Linux module these use is the it821x or, in the newer Ubuntu 7.10 series, the libata based pata_it821x module. This is where the fun begins.&lt;br /&gt;&lt;br /&gt;The card supports RAID0, RAID1, RAID1+0 and JBOD, and just a standard IDE bus. I wanted the latter as I am doing all the RAID in software using the mdadm tools. (very nice).&lt;br /&gt;&lt;br /&gt;I have been bouncing around with a few hurdles, and I will detail them each in turn, and how I have solved the, I am sure someone will come up with a similar problem.&lt;br /&gt;&lt;br /&gt;So to give a rundown on the hardware we are using.&lt;br /&gt;&lt;br /&gt;It's a P4 1.8Ghz, 256M RAM (yes is low spec, but it doesn't need to crunch galaxies, just serve files).&lt;br /&gt;I have a Wireless RT61 based Network Card. (used to always user the rt2x00 serialmonkey module.&lt;br /&gt;There is the standard USB and AGP display card, and an extra 10/100 NIC (8139too if I recall).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Problem #1 - noticing the sd[*] instead of hd[*]&lt;/span&gt;&lt;br /&gt;So when I first dived into installing Ubuntu 7.10, I noticed that my IDE harddrives were now appearing as /dev/sd[a-z] drives, instead of the older /dev/hd[a-z] devices. This is now because of the new libata subsystem, supporting PATA and SATA (and SCSI ??) drives. This had a little flow on effect, but largely okay. (just a symantec changed, and I like it actually)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Problem #2 - Recognising the IT8212 PCI RAID Controller.&lt;/span&gt;&lt;br /&gt;My first figured I would install onto one of the 40G hard drives, non RAID1 and standard swap of 2G and then setup my RAID and go from there. As I started before the IT8212 cards arrived from Hong Kong (yes it was cheaper then walking to the hardware shop), I actually setup a 150G RAID on booting 40G partition and transferred all my movies and music (and Gigs of data) onto the RAID array. This was on the 2 IDE buses, ie, no CDROM (DVD) after the initial install.&lt;br /&gt;&lt;br /&gt; .. then the cards arrived.&lt;br /&gt;&lt;br /&gt;The IT8212 by default, in Ubuntu uses the pata_it821x module. In older documentation people have asks some odd questions of this device, but it all seemed to centre around it being used as a RAID controller, ie doing RAID in hardware (good) , but I am using RAID5, which it didn't support.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;On first boot, only the primary drives showed up. ie, if the it8212 had a 80G,40G and 200G,160G. Then linux would detect the 80G and 200G only. (odd I thought, must be config).&lt;br /&gt;&lt;br /&gt;So into the BIOS of the card, and changed the config to IDE, from RAID (stripe).&lt;br /&gt;Come back out, reboot Linux. no change.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Problem #3 - detected order of the /dev/sd[a-z] changed&lt;/span&gt;&lt;br /&gt;Now, I'll pause for a moment from probem #2 and describe #3. when the drives were plugged in, my two boot drives (2 x 40G) on the first IDE bus, were moved from sda and sdb to AFTER the detected drives on the PCI card. For example.&lt;br /&gt;&lt;br /&gt;before the IT8212 is plugged in the drives were&lt;br /&gt;/dev/sda (40G)&lt;br /&gt;/dev/sdb (40G)&lt;br /&gt;/dev/sdc (DVD Drive)&lt;br /&gt;&lt;br /&gt;After plugging in the card (with the problem #2 still occuring) you see the following&lt;br /&gt;&lt;br /&gt;/dev/sda (80G)&lt;br /&gt;/dev/sdb (200G)&lt;br /&gt;/dev/sdc (40G)&lt;br /&gt;/dev/sdd (40G)&lt;br /&gt;/dev/sde (DVD Drive)&lt;br /&gt;&lt;br /&gt;Now, the fix to this problem is possibly two areas. One is more robust, the other I had NO success, but new it would work if I persisted.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Solution to Problem #3&lt;/span&gt;&lt;br /&gt;When Ubuntu installs, it uses UUID's in the fstab and grub to refer to a harddrive instead of using the known (possibly changing) device location. Let me explain as I see it. A UUID is a Universally Unique Idenitifer  and can be created and used as a ID for something. We use them in software / computers all the time. In this case, the Harddrive has a UUID. I don't exactly know who creates them for the drive, but they do exist. Actually, it's the partitions of the disk that have the UUID that we are interested in, the UUID of the harddrive (I assume there is one) is not that important.&lt;br /&gt;&lt;br /&gt;So, to make it so it doesn't matter "what" your root drives come under, you use the UUID everywhere to refer to it. that way, when it changes (ie moves, unplugs on the bus etc) it will still be a known device. To locate the uuid for a partition, just use vol_id&lt;br /&gt;&lt;br /&gt;once you have the UUID, pop it in the fstab and grub.&lt;br /&gt;/etc/fstab&lt;br /&gt;&lt;br /&gt;UUID=897ef-ab67c6-7785-abcb2 /  (etc)&lt;br /&gt;&lt;br /&gt;and /boot/grub/menu.lst&lt;br /&gt;&lt;br /&gt;Now once I had tested that I could (re)boot back in regardless of the "sd-ness" of the drive, I could go back to solving problem #2&lt;br /&gt;&lt;br /&gt;A little better (I feel) than the UUID=... is to use LABELs .. this seems to work nicer. But it could clash if you later add a new drive from another system which has a matching label.&lt;br /&gt;&lt;br /&gt;So make it easier for me, I just prefixed the label with the short version name of the server. so&lt;br /&gt;&lt;br /&gt;icem-root&lt;br /&gt;icem-swap&lt;br /&gt;&lt;br /&gt;Getting initramfs to recognise my LABELs (and the UUIDs) was a tad hard.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Solution to Problem #2&lt;/span&gt;&lt;br /&gt;Problem #2 was actually simple. and I learnt something too.&lt;br /&gt;&lt;br /&gt;The PCI RAID controller had to be told, via the module to load in passthrough mode so it was recognised as just an IDE bus and not a RAID controller.&lt;br /&gt;&lt;br /&gt;With the change to libata, the it821x module changed names (and code) to pata_it821x. I read some places about the noraid=1 option for the module. So I tried a few things. Firstly.&lt;br /&gt;if the module (pata_it821x or it821x) is compiled into the kernel, and not as a module, then getting this paratemer into the module is via the kernel parameters (ie, in the /boot/grub/menu.lst)&lt;br /&gt;so .. kernel image ... ro it821x.noraid=1 ...&lt;br /&gt;note the '.' dot in between the noraid and the module name.&lt;br /&gt;&lt;br /&gt;I intially got stumped between the pata_ and the (sans pata_) other module.&lt;br /&gt;&lt;br /&gt;the pata_ is the newer module, so for Ubuntu 7.10, the it821x doesn't exist (isn't compiled). but I also worked out that the "kernel" line is NOT for modules loaded on the fly.&lt;br /&gt;&lt;br /&gt;so .. after I realised that my 7.10 had no it821x, i tried kernel.... pata_it821x.noraid=1&lt;br /&gt;This would have worked had the moduled been compiled into the kernel. not to be.&lt;br /&gt;So .. it was actually meant to be done the way I knew from way back when days.&lt;br /&gt;&lt;br /&gt;/etc/modprobe.d/options&lt;br /&gt;&lt;br /&gt;option pata_it821x noraid=1&lt;br /&gt;&lt;br /&gt;That makes the it821x show the drives on the bus as "just" drives and NOT for linux to detect them as RAID drives. YAY! they all showed up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-7141745197145051663?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/7141745197145051663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=7141745197145051663' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/7141745197145051663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/7141745197145051663'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2007/12/linux-ubuntu-raid-modules-my-nas-and.html' title='Linux - Ubuntu RAID, Modules, my NAS and Fun'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-8065238873577953190</id><published>2007-12-17T00:47:00.000Z</published><updated>2007-12-17T01:15:39.705Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='nokia mac osx n95'/><title type='text'>Nokia N95 8G, iSync, 3 (Three), music, internet and my Mac</title><content type='html'>So, recently I have switched over my phone service to 3 (three) for the sole purpose of being a roaming IT worker. Since beginning of October I have found myself without internet access in a lot of places, so I switched to being mobile using three's Internet plans.&lt;br /&gt;&lt;br /&gt;To do this, of course it necessitated the phone upgrade (actually, my previous phone was a good 3 year run, the shoicking iMate K-JAM (don't buy)). so .. back to Nokia I went.&lt;br /&gt;The Nokia N95 8GB is the upgraded version to the N95 with the major difference being (for me) all the N95 stuff (software etc) didn't work.&lt;br /&gt;&lt;br /&gt;So .. what I wanted was to have this N95 as my modem through bluetooth. To be able to sync calendar, pull photos off it (5MP camera, nice) and to have some stuff to listen to such as my usual Java Posse).&lt;br /&gt;&lt;br /&gt;TO do this, seemed simple enough, but there were a few hurdles.&lt;br /&gt;&lt;br /&gt;First. Internet access, the most important.&lt;br /&gt;Turns out I had to locate som different modem scripts.&lt;br /&gt;The following was my source of succcess.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(102, 0, 204);"&gt;&lt;&lt;==-- Internet Access --==&gt;&gt;&lt;/span&gt;&lt;br /&gt;Download the Modem Scripts from &lt;a href="http://www.taniwha.org.uk/"&gt;Ross Barkman&lt;/a&gt; (thanks!)&lt;br /&gt;You want the ones labeled  &lt;span style="color: rgb(51, 204, 0);"&gt;Scripts for Nokia 3.5G (HSDPA) phones (26kB):   Nokia 3.5G Scripts.&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;Once you have put them in place ("/Library/Modem Scripts")&lt;br /&gt;you will have three new scripts to use. Nokia HSDPA CID[1-3]&lt;br /&gt;&lt;br /&gt;Pair you phone through th Bluetooth preference panel.&lt;br /&gt;Once paired, go into the Network Preference Page.&lt;br /&gt;&lt;br /&gt;The following settings are what I have used.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-weight: bold;"&gt;[PPP]&lt;/span&gt;&lt;br /&gt;Service Provider: &lt;blank&gt;&lt;br /&gt;Account Name: 3netaccess&lt;br /&gt;Password: &lt;blank&gt;&lt;br /&gt;&lt;/blank&gt;&lt;/blank&gt;&lt;/span&gt;&lt;/span&gt;Telephone Number: &lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;blank&gt;&lt;br /&gt;Alternate Number: &lt;/blank&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;blank&gt;&lt;/blank&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;In PPP Options&lt;span style="font-style: italic;"&gt;, the following are "ticked"&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;blockquote&gt;[v] Disconnect when user logs out&lt;br /&gt;[v] Disconnect when switching user accounts&lt;br /&gt;[v] Redial if busy&lt;br /&gt;[v] Send PPP echo packets&lt;br /&gt;[v] Use TCP header compression&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-weight: bold;"&gt;[TCP/IP]&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Configure IPv4: [Using PPP]&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;[Proxies]&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;** no proxies configured (i don't use any)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;[Bluetooth Modem]&lt;br /&gt;&lt;/span&gt;Nokia HSDPA CID1&lt;/blockquote&gt;&lt;span style="font-style: italic;"&gt;I have unticked the following&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;blockquote&gt;[  ] Enable error connection and compression in modem&lt;br /&gt;[  ] Wait for dial tone before dialling&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Now that that is all done, see if you can connect :-) the "3netaccess" account name, I found that from the following &lt;a href="http://forum.xda-developers.com/showthread.php?t=290818"&gt;link&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(102, 0, 204);"&gt;&lt;&lt;==-- iSync--==&gt;&gt;&lt;br /&gt;&lt;/span&gt;So, Internet Access was probably the easiest (1/2 hour research).&lt;br /&gt;iSync proved to be a good week battle of trying many iSync plugins until I happened upon the only one that worked which was this.&lt;br /&gt;&lt;br /&gt;  &lt;a href="http://blog.framtiden.net/2007/11/17/n95-8gb-isync/"&gt; iSync Plugin for Nokia N95 8GB&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Thank you Jussi Edlund!&lt;br /&gt;&lt;br /&gt;With this iSync plugin installed iSync works.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(102, 0, 204);"&gt;&lt;&lt;==-- Music and Pictures--==&gt;&gt;&lt;br /&gt;&lt;/span&gt;So, Nokia, they have this "almost" right .. the camera appears in iPhoto, but the phone doesn't appear as an iTunes "player" (probably can't do that).&lt;br /&gt;But anyway .. from Europe, download the following ..&lt;br /&gt;&lt;br /&gt;&lt;a href="http://europe.nokia.com/A4423135"&gt;Nokia Multimedia Transfer&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Hope that all helps someone!&lt;br /&gt;Have a great day.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-8065238873577953190?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/8065238873577953190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=8065238873577953190' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/8065238873577953190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/8065238873577953190'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2007/12/nokia-n95-isync-sending-smss-photos-and.html' title='Nokia N95 8G, iSync, 3 (Three), music, internet and my Mac'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-7888363997146727936</id><published>2007-09-18T01:02:00.000+01:00</published><updated>2007-09-18T01:14:02.722+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mac osx firefox'/><title type='text'>Firefox Files (Crap) on the Desktop on OSX</title><content type='html'>When you use Firefox and OSX, you will come to realise a VERY annoying feature / quirk of it's file management.&lt;br /&gt;&lt;br /&gt;If I download a file, I can choose where it goes (change preferences to set this feature) and that is all good, however, if I click on, say a PDF, to view it (and say "Open with Preview") then the file is downloaded, wait .. on my desktop, and left there. After sometime, you will notice a heck load of files that you have viewed, Excel Spreadsheets, PDFs, word documents, mp3 etc. and they just make a mess of what is supposed to be a clean machine (clean lines, clean desktop :-).&lt;br /&gt;&lt;br /&gt;So there are two solutions to this problem.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1. Changing the directory&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; Firefox saves these files based on the "setting" in Safari about where files get downloaded to.&lt;br /&gt;So the quick fix here is to open up Safari (never used it, except for downloading firefox :-). Go to preferences, go to the General tab and change the download directory to somewhere other than the Desktop.&lt;br /&gt;&lt;br /&gt;Now, I actually changed it to /tmp/ (I actually have a sym link in my home directory for tmp (always have done this) .. so firrefox now dumps all these "saved" files, to /tmp/ and /tmp gets purged every shutdown/reboot.. yay! No more mess.&lt;br /&gt;&lt;br /&gt;You could of course, make a directory in ~/ called Downloads, and then you can peruse and remove at your leisure. Might be handy to do that when you needed to "review" a file you viewed whilst "online".&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. Tell Firefox to delete these files when it shuts down&lt;/span&gt;&lt;br /&gt;In firefox about:config, you need to add a new config parameter that tells firefox to remove these files when it shuts down.&lt;br /&gt;The key is app.helperApps.deleteTempFileOnExit and needs to be a boolean.&lt;br /&gt;&lt;br /&gt;I haven't tried this way, but don't like it much because it means, if firefox crashes, or the mac crashes, firefox won't delete the files for that session. And also, my firefox is often open for weeks at a time, never closed, so the files will still grow in number.&lt;br /&gt;&lt;br /&gt;Of course, you could combine the 2.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-7888363997146727936?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/7888363997146727936/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=7888363997146727936' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/7888363997146727936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/7888363997146727936'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2007/09/firefox-files-crap-on-desktop-on-osx.html' title='Firefox Files (Crap) on the Desktop on OSX'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-5162715120041916452</id><published>2007-08-02T14:14:00.000+01:00</published><updated>2007-08-03T04:38:19.281+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='gwt'/><title type='text'>GWT Security Concerns - Object Injection</title><content type='html'>GWT opens a new way of building webapps with it's different AJAX development method(ology) and it also opens a new area of "hackable" software.&lt;br /&gt;&lt;br /&gt;I will term this new area "Object Injection".&lt;br /&gt;&lt;br /&gt;GWT makes the AJAX development easier as the code is written in a type safe language (Java) and "compiled" out to JavaScript, dealing with all the browser inconsistencies and nuances behind the scenes. You still have the ability to write JavaScript via a Java Native Interface (JNI) and "look and feel" is done through CSS.&lt;br /&gt;&lt;br /&gt;The process of writing a GWT web application is to write your GUI web interface or just parts of it in Java , and using the GWT compiler (a java app) compile your Java to JavaScript.&lt;br /&gt;&lt;br /&gt;What the GWT does, is trawls your code and converts what it finds to JavaScript. So if you use ObjectA as a POJO to make changes to a Drop Down Select Box (for example) then this ObjectA will be exposed (someway) as JavaScript.&lt;br /&gt;&lt;br /&gt;One of the niceties that the GWT Java-to-JavaScript model brings up is that your direct domain model objects can be worked on at the front interface without the need of DTOs, a code/time saving benefit.&lt;br /&gt;&lt;br /&gt;So .. code might look something like (simplified by not showing the Asyn Callback()&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;     MyDomainObejct obj = finder.findDOByID(myId);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;     myTextBox.setText(obj.getName());&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now this code above would be compiled to JavaScript and, even with the GWT J2JS compiler set to "DETAILED" and not OBF(USCATED)" you get some pretty hefty JavaScript.&lt;br /&gt;&lt;br /&gt;This is some real JavaScript from the GWT in Detailed Mode, showing a "BusinessEntity" object. (a POJO if you like)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;function pkg_BusinessEntity(){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;_ = pkg_BusinessEntity.prototype = new java_lang_Object();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;_.java_lang_Object_typeName = package_pkg_ + 'BusinessEntity';&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;_.java_lang_Object_typeId = 4;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;_.pkg_BusinessEntity_abn = null;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;_.pkg_BusinessEntity_commencementDate = null;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;_.pkg_BusinessEntity_isCurrent = false;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;_.pkg_BusinessEntity_isRegisteredForGST = false;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;_.pkg_BusinessEntity_name = null;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;_.pkg_BusinessEntity_postcode = null;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;_.pkg_BusinessEntity_registeredState = null;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;So, where is the security concern ?&lt;br /&gt;&lt;br /&gt;Well in some cases, such as most of my world, the domain model is fairly significant, with trading / transaction objects and user accounts with passwords, and money and settings etc etc.&lt;br /&gt;&lt;br /&gt;So if, in a GWT class, someone were simply to expose the DAO (Data Access Object) service such as&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;service.storeObject(myUserObject);&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;Then, essentially we have, assuming there is no or not sufficient checks, a direct way to store objects into the domain (database) from the browser.&lt;br /&gt;&lt;br /&gt;I will call this "Object Injection" in the same vain as "SQL Injection". An Object injection hole is could really be termed as a&lt;br /&gt;&lt;br /&gt;Poorly Coded RPC interface which does not check values and who and why of what it is "doing".&lt;br /&gt;&lt;br /&gt;Of course, finding an Object Injection hole in a GWT application is going to prove fairly complex to do (but surely not as hard as searching for a buffer over/under run). The types of tasks that a would-be inquisitive person might have to do is as follows.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;De-Obfuscate the javascript to find the "meaningful" objects that are being worked with&lt;/li&gt;&lt;li&gt;Dump out all the "Service" methods and try and tie these to where they are being used in the GUI (Web Application).&lt;/li&gt;&lt;li&gt;Identify the types of objects which would provide benefit of "changing", such as Bank Accounts, Limits, restrcitions, user account saving (like storing settings etc) and locate how the interface is working with the RPC method calls&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Write some Javascript to create a generated GWT object .. and send it to the RPC API.&lt;/li&gt;&lt;/ol&gt;The code that you write in Java to be compiled to JavaScript, is now available for all to see.&lt;br /&gt;Anything you do, can be repeated, out of step with simple JavaScript calls.&lt;br /&gt;&lt;br /&gt;If parts of the domain model are exposed, this is a good place to start hacking.&lt;br /&gt;&lt;br /&gt;The problem is no different with current non-GWT AJAX development. It is just that GWT does a lot of smoke and mirror compiling for you and if you unwittingly create holes in your Java RPC methods (without sufficient checks), then those holes are exposed for all to see (and play with).&lt;br /&gt;&lt;br /&gt;So what techniques can we use to prevent us making such a holes. The following would be my quick and dirty set of rules.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1. Don't expose the domain model to the GWT compiler. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Why ? Well for a few reasons&lt;br /&gt;&lt;br /&gt;(a) It will expose your internal workings of the application to the browser, and this is one place where the would-be nefarious person can start looking to analyse your application to understand its structure, thus weaknesses. You might think, "Gee, that's a lot of work when this JavaScript is obfuscated", but think for a second, is there anywhere in you application that one can profit (monetarily or otherwise) from your application, giving them an incentive to start the work ?&lt;br /&gt;&lt;br /&gt;(b) To expose a Domain Model Object, means you probably want to "change" and store it, which means the DAO service (or similar) will have to take an object and save it to the database. Simply, find that DAO Service and the right object that it requires, and I can then start poking in (Object Injection) other object values to see if I change some stuff at the server.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. Have Users / Accounts and Password - and Audit them&lt;br /&gt;&lt;/span&gt;If you use usernames/passwords and sufficient checks in the right places you will have the ability to log who is doing what. Another way to think of this is, minimise the amount of GWT you use to people who are not authenticated against your application.&lt;br /&gt;&lt;br /&gt;A way that I always achieve this these days is to use Acgei Security with Spring and webfilters over the whole application. This way I know which users are hitting which RPC methods and could audit appropriately.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3. Expose ONLY that which needs to be - Use DTO's,  simple APIs, push "work" to the server, Separate Projects.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Use DTO's to push and pull your data back and forth. This way you can check the DTO values before storing and also know what is being exposed at the front end.&lt;br /&gt;&lt;br /&gt;Use Simple API's - Make you RPC methods simple (ie, don't push too much back and forth). This is probably just a KISS principal and will help in making sure you don't inadvertantly expose that which shouldn't be.&lt;br /&gt;&lt;br /&gt;Move as much logic as you can to the server. This ties in with the previous point. A simple API logically means that the complex stuff is on the server. This way, code which does not need to be seen, is not seen. Plus the burden on the browser *our unknown environment* is kept at a minimum (which has an added bonus because we don't want the help desk of our application getting complain calls saying the application slows down their browser thus tarnishing the "company".)&lt;br /&gt;&lt;br /&gt;Separate Projects - One method I am using in my GWT apps is to have a separate project for GWT compiled code, for server (RPC and JSPs etc) and business / domain model. I use Maven 2 and a parent project compiles and assembles all 3 pieces together. So three projects, but ONLY one is the GWT compiled code, so I know that, anything potentially that goes in this client project, is going to be in JavaScript. Anything OUTSIDE that project, is hidden from the browser.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4. Secure all RPC interfaces&lt;br /&gt;&lt;/span&gt;Use Aspects or Filters  (I use Acegi Security) to secure your  GWT RPC methods. You will be able to lock down the method calls to the user and also ensure that the "objects" are allowed to be transported that are.&lt;br /&gt;&lt;br /&gt;I hope this little entry helps people see the potential issues and raise awareness in their designs about this potential security "feature".&lt;br /&gt;&lt;br /&gt;It is nothing new, of course, but the way in which GWT development is done, can have an impact on the "bad applications" we write if we are not careful.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-5162715120041916452?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/5162715120041916452/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=5162715120041916452' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/5162715120041916452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/5162715120041916452'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2007/08/gwt-security-concerns-object-injection.html' title='GWT Security Concerns - Object Injection'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-5141690684585333874</id><published>2007-07-25T18:52:00.000+01:00</published><updated>2007-07-25T19:01:42.637+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='gwt'/><title type='text'>GWT Fun</title><content type='html'>Over the past 4 weeks I have been building an impressive list of what to do an what not to do when it comes to GWT. In my last post I mentioned an issue with JSP 2.0 and GWT.&lt;br /&gt;&lt;br /&gt;Tip #1&lt;br /&gt;Tonight, I came across a very similar issue with IE6. (might be IE7 problem also).&lt;br /&gt;&lt;br /&gt;the Script tag which you include the GWT module with looks like&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&amp;lt;script .../&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;But , if that is how you do it, IE won't like it. In fact it will render a big blank page with no error and "Done." down the bottom.&lt;br /&gt;&lt;br /&gt;You won't even see an ounce of the "page" even if GWT is not the primary content.&lt;br /&gt;&lt;br /&gt;The quick fix is to change the single script tag to have an open and close (and put some space between them).&lt;br /&gt;&lt;br /&gt;That took all of about 20 minutes to discover.&lt;br /&gt;&lt;br /&gt;So far, my verdict on GWT is 80% for and 20% against. I am certain the 20% against, ie things that I can find I don't like, are because I have not yet worked out the "good" or proper way of doing things.&lt;br /&gt;&lt;br /&gt;Tip #2&lt;br /&gt;&lt;br /&gt;Some people have mentioned about needing the rpc interfaces in the client package and that they don;t like it. Well I didn't like it either. I have an rpc package.&lt;br /&gt;&lt;br /&gt;I found a sneaky (smelly) way of just having arbitrary "code" for GWT to find.&lt;br /&gt;&lt;br /&gt;Create a "BaseGWT.gwt.xml" and point the entry-point class at an empy implementation of EntryPoint. But in this gwt.xml, set all the source folders that you want.&lt;br /&gt;&lt;br /&gt;Then in the "other" modules, inherit it. Now, the compiler (maven2) complains and errors, but because of a bug in the maven2 GWT plugin, it keeps going (and doesn't fail) and the other modules happily inherit this dummy GWT module and all the trappings (other source folders).&lt;br /&gt;&lt;br /&gt;When I find a better way of doing this, I'll holler.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-5141690684585333874?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/5141690684585333874/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=5141690684585333874' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/5141690684585333874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/5141690684585333874'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2007/07/gwt-fun.html' title='GWT Fun'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-3230581335998826627</id><published>2007-06-20T02:54:00.001+01:00</published><updated>2007-06-20T03:49:13.069+01:00</updated><title type='text'>GWT and JSP 2.0 (Oh the Pain!)</title><content type='html'>So it's been four weeks now and I'm moving along at a steady pace with GWT.&lt;br /&gt;I found by shear accident that a new feature added into GWT 1.4 is that you don't need the gwt.js anymore or the &amp;lt;meta..&amp;gt; tag in the HTML and you can just include the module.nocache.js file directly. (good change guys).&lt;br /&gt;&lt;br /&gt;I have been trying to host my modules (GWT modules) into an already existing JSP page that is written in JSP 2.0 of the XML variety. I find these good because it means you are forced to create valid HTML markup. Anyways, combining the two, GWT and XML JSPs meant I was completely unable to get the GWT modules to attach and appear on the page.&lt;br /&gt;&lt;br /&gt;I was getting JavaScript Errors, j.write is not a function. Now, the GWT compiler is compiling by default using the OBFuscation setting. Which means that the JavaScript, is well, obfuscated, a little hard to read. Not knowing yet what the other settings are to change it (I think there is detailed and something else I saw) I dove (breifly) into the JS to see what j.write was all about.&lt;br /&gt;&lt;br /&gt;It took a bit to track down the problem. &lt;br /&gt;&lt;br /&gt;Essentially weird things happen to your markup, it gets all compressed to one line (obfuscated HTML) and open, no content, close tag elements get changed to /&gt; elements to make it more  valid XML. For those that have worked with JSP XML documents (ie, the &amp;lt;jsp:root&amp;gt; ...&amp;lt/jsp:root&amp;gt; variety) will know what I am talking about.&lt;br /&gt;&lt;br /&gt;The problem is that a jsp marked up this way just fails straight away with GWT in the works. I recalled a similar problem I had two years ago that was making javascript fail because the &amp;lt;script&amp;gt; tags written in the jsp as open &amp;lt;script&amp;gt; and closing &amp;lt/script&amp;gt; with no content in the middle (ie, a &amp;lt;script src="somefile.js"&gt;&amp;lt/script&amp;gt;) will get collapsed in the browsers view of the HTML as &amp;lt;script .. /&amp;gt;. ie, just one tag.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To get around this JS error, back then, was to add a CDATA and put a comment delimeter in the CDATA. This way the JSP XML parser would preserve the open and close tags.&lt;br /&gt;&lt;br /&gt;This looked like the following ..&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&amp;lt;script src="somfile.js"&amp;GT;&amp;lt![CDATA[&amp;lt!-- --&amp;gt;]]&amp;gt;&amp;lt/script&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Which will bre rendered correctly as &lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;script src="somfile.js"&amp;gt;&amp;lt!-- --&amp;gt;&amp;lt/script&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And the problem, can't remember what it was, but javascript loading issues, would work.&lt;br /&gt;&lt;br /&gt;Alas, this was not my problem with GWT as I changed the &amp;lt;script ...&gt;&amp;lt/script&amp;gt; and the &amp;lt;iframe.../&amp;gt; to have this CDATA hack and it didn't resolve my &lt;span style="font-family:courier new;"&gt; j.write is not a function&lt;/span&gt; error.&lt;br /&gt;&lt;br /&gt;So .. the quick simple test, cut and past the output of the JSP that has the GWT &amp;lt;script&amp;gt;&amp;lt/script&amp;gt; in it, and put that as an HTML file and try that. So, refresh my broken page, view source, cut and paste the ugly format (hard to read for others) HTML and put it into a new .html file and load that, it worked.&lt;br /&gt;&lt;br /&gt;So I have two files, tester.jsp which has the &amp;lt;jsp:root&amp;gt; top and bottom and then a html file which is the "output" viewed from the browser of this jsp file. So as far as the browser is concerned, hitting the /tester.jsp and /tester.html renders exactly the same looking HTML.&lt;br /&gt;&lt;br /&gt;Which lead me to only one conclusion, it was not "format" of the HTML presented that the browser was barfing on, (and then GWT not loading)  but rather the Headers that the server was sending that caused the problem.&lt;br /&gt;&lt;br /&gt;Loading up firebug (just clicking my little firebug icon in firefox.. thank you thank you firebug authors), I inspected the headers of the tester.jsp and tester.html, low (lo) and behold,&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;tester.jsp : Content-Type: text/xml;charset=UTF-8&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;tester.html: Content-type: text/html&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This then leads to the quick fix, change the content type for my JSP.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;jsp:root version="2.0" jsp="http://java.sun.com/JSP/Page"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;jsp:directive.page contenttype="text/html; charset=UTF-8"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And then all is good.&lt;br /&gt;&lt;br /&gt;So, what is happening here ? It would appear that the browser (Firefox 2.0 on Mac OSX in this instance) is not creating a DOM that the GWT javascript can interact with when the content type is XML as opposed to when the content type is HTML.&lt;br /&gt;&lt;br /&gt;This is evidenced by the line in question in the GWT module.nocache.js which is&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;j=document;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And a few lines in,&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;j.write("&amp;lt;script&amp;gt;...&amp;lt;/script&amp;gt;")&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;From this called attempt to write out some dynamic javascript to the page, the specific error message obtained is as follows&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;j.write is not a function&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Which just shows that the DOM is not how it is supposed to look. I am sure someone from the firefox community could explain that one a little more. (to how it structures the DOM based on content-type).&lt;br /&gt;&lt;br /&gt;So this one was not because of GWT pain, but JSP pain :-)&lt;br /&gt;&lt;br /&gt;All good so far. I have a few more improvements to the m2 GWT plugin which I will post in the next few days.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-3230581335998826627?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/3230581335998826627/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=3230581335998826627' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/3230581335998826627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/3230581335998826627'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2007/06/gwt-and-jsp-20-oh-pain.html' title='GWT and JSP 2.0 (Oh the Pain!)'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-3974675925369263372</id><published>2007-06-09T17:30:00.000+01:00</published><updated>2007-06-09T17:45:20.530+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='gwt'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><title type='text'>GWT and Maven 2, OH the pain!</title><content type='html'>GWT - Maven2 and Eclipse .. Ouch!&lt;br /&gt;&lt;br /&gt;Using GWT for all of 3 weeks now, I am finding it is nice. It's logical, well thought out and simple.&lt;br /&gt;&lt;br /&gt;But, I think there is a little way to go when it comes to using some de jure standards. I am a big Maven 2 fan because in an Enterprise (captial E for 'ooh' fancy) environment, standards go a LONG way and Maven 2 dictates a nice and well understood way of doing things.&lt;br /&gt;&lt;br /&gt;So, what's me beef with GWT ? Simply this, gosh it has been hard to get it working with Maven 2.&lt;br /&gt;&lt;br /&gt;Now, part of this is because I am still trying to get my head around how it works. I have been using the applicationCreator script to setup a quick hello world sample, then move that into the src/main/java and src/main/resources folders.&lt;br /&gt;But what does that do to my src/main/webapp ? where do the images get pulled from ? why don't index.jsp load in the GWTShell (when it's tomcat underneath) ? So many questions.&lt;br /&gt;&lt;br /&gt;So, there is a maven 2 plugin. I am currently using the 1.5.2 version of it.&lt;br /&gt;&lt;br /&gt;Google Code Homepage :&lt;a href="http://code.google.com/p/gwt-maven/"&gt; http://code.google.com/p/gwt-maven/&lt;/a&gt;&lt;br /&gt;Maven 2 Plugin Doc : &lt;a href="http://gwt-maven.googlecode.com/svn/docs/maven-googlewebtoolkit2-plugin/index.html"&gt;http://gwt-maven.googlecode.com/...&lt;/a&gt;&lt;br /&gt;A list of some problems : &lt;a href="http://code.google.com/p/gwt-maven/wiki/FAQ"&gt;http://code.google.com/p/gwt-maven/wiki/FAQ&lt;/a&gt;&lt;br /&gt;Maven Repo : &lt;a href="http://gwt-maven.googlecode.com/svn/trunk/mavenrepo/com/totsp/gwt/maven-googlewebtoolkit2-plugin/1.5.2/"&gt;http://gwt-maven.googlecode.com/...&lt;/a&gt;&lt;br /&gt;SVN Repository : &lt;a href="http://gwt-maven.googlecode.com/svn/tags/maven-googlewebtoolkit2-plugin-1_5_2/"&gt;http://gwt-maven.googlecode.com/.../&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;and as it turns out, there are a few bugs and features which need some work. (I wish I saw that FAQ page first before diving in)&lt;br /&gt;&lt;br /&gt;The first issue I cam across was the "plural" vs "singular" naming convention. In Maven 2, a configuration item for a plugin that requires more than one value is pluralised .. ie&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;options&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;option&gt;...&amp;lt;/option&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;option&gt;...&amp;lt;/option&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&amp;lt;/options&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;What's the problem ?&lt;br /&gt;&lt;br /&gt;Well, the com.totsp.gwt plugin needs a configuration line like&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;compiletarget&gt;org.sobbo.ui.Home&amp;lt;/compiletarget&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;However,  this config value in the plugin source needs an [] array or targets. (logical yes) but m2 plugins, dictate that the property name is then plural (compileTargets) otherwise you get this kind of error message.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    [INFO] Failed to configure plugin parameters for: com.totsp.gwt:maven-googlewebtoolkit2-plugin:1.5.3-SNAPSHOT&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        (found static expression: 'org.sobbo.ui.client.Home' which may act as a default value).&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    Cause: Cannot assign configuration entry 'compileTarget' to 'class [Ljava.lang.String;' from 'org.sobbo.ui.client.Home', which is of type class java.lang.String&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;so .. the AbstractGWTMojo has to change to have a plural of configurationTargets (there must be a way else how would they be using it right now ?&lt;br /&gt;&lt;br /&gt;It turns out there is an issue logged for this .. &lt;a href="http://code.google.com/p/gwt-maven/issues/detail?id=37"&gt;http://code.google.com/p/gwt-maven/issues/detail?id=37&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Anyways, what's the next pain ? well to checkout the src from the subversion repository, you get this nice little gem.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$ svn co http://gwt-maven.googlecode.com/svn/trunk/maven-googlewebtoolkit2-plugin/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   svn: REPORT request failed on '/svn/!svn/vcc/default'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   svn: REPORT of '/svn/!svn/vcc/default': 400 Bad Request (http://gwt-maven.googlecode.com)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;BANG, and there is my pain. This looks like a straight up Google SVN problem. Funny enough, I have an SVN downloaded script that works to "download" src from SVN repositories using wget.&lt;br /&gt;&lt;br /&gt;See the end of this post for the shell script.&lt;br /&gt;&lt;br /&gt;So .. my third issue ? Well there was some unusual "Java Execution Mojo Bootstrapping" stuff going on, and it's broken. Essentially when trying to launch java to compile (testing, shell etc) it (the GWT maven plugin) couldn't find it (java) and died. I found the problem (after downloading the src and corrected it) and logged this issue with a patch @ &lt;a href="http://code.google.com/p/gwt-maven/issues/detail?id=43"&gt;GWT M2 Plugin Issue 43&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So .. is it ready ? This Maven 2 plugin really needs to be working, maven 2 is big and GWT / M2 / Spring / Eclipse is pretty important (to me at least).&lt;br /&gt;&lt;br /&gt;I'll keep battling with it because this way I can probably make it a little better. I hope that it gets better.&lt;br /&gt;&lt;br /&gt;So, that SVN downloader script, it's not completely "safe" because the revision could change by a third party part way through your download, but hey, it works.&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;#!/bin/sh&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# Author: Ramon Buckland ramon#at#thebuckland.com&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#     Quick hack script to pull the latest SVN Revision version from a repo repo when you have no SVN tools&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#     or SVN through ISA proxy servers are just not working ..  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;function usage {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   echo "$0 &lt;svn-url&gt; &lt;product-name&gt;"&lt;/product-name&gt;&lt;/svn-url&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   echo "svn-url:       SVN URL is a URL to the trunk or a tag you interested in"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   echo "               eg: http://svn.apache.org/repos/asf/incubator/servicemix/trunk/"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   echo "product-name:  A short name of the product so that we can  create a directory for you"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   echo "               eg: servicemix"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   echo "(also, set the http_proxy=http://hostrunning-ntlmaps:port)"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   exit&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;if [ "X$1" == 'X' ]; then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        usage&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;fi&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;if [ "X$2" == 'X' ]; then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        usage&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;fi&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;if [ "X$http_proxy" == 'X' ]; then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        echo "WARNING: http_proxy is not set. Do you need it ?"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;fi&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;SVN_REPO=$1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;PRODUCT_NAME=$2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mkdir ${PRODUCT_NAME}-svn-pid-$$&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;cd ${PRODUCT_NAME}-svn-pid-$$&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# nv=non-verbose&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# nH=noHost directory created&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# -np=no ascend to paremt dirs&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# --cut-dirs=3&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# -erobots=off .. don't look at robots.txt to see what you are and aren't allowed to do&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# -m mirror&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;wget -nv -nH -np --cut-dirs=3 -erobots=off -m ${SVN_REPO}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;NEWDIR=`grep Revision index.html | grep h2 | cut -d':' -f1  | cut -d'&gt;' -f2 | tr ' ' _`&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;cd ..&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mv ${PRODUCT_NAME}-svn-pid-$$ ${PRODUCT_NAME}-svn-${NEWDIR}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;find . -type f -name index.html | xargs rm&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Hope that helps someone. I use it a bit here and there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-3974675925369263372?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/3974675925369263372/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=3974675925369263372' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/3974675925369263372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/3974675925369263372'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2007/06/gwt-and-maven-2-oh-pain.html' title='GWT and Maven 2, OH the pain!'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-6612662457429245999</id><published>2007-06-05T23:48:00.001+01:00</published><updated>2007-06-06T00:14:32.745+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='domain-driven-design'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='ddd'/><title type='text'>Switching Domains</title><content type='html'>In my new role I have been pouring my brain into a new domain (industry) for the past 2 weeks.&lt;br /&gt;&lt;br /&gt;For the years I have been writing code, moving from one language to another has never a big issue. ie, from Pascal to Modula-2, C to C++, Perl in the middle, Java from the dawn of ages, dabble in C#, poor over XML and become a quasi-guru in XSLT's. So when a new language comes about, it's a matter of learning a new language construct or few (expansion of the language domain) and then give it a crack.  Being bi-lingual is not too difficult. It is probably because not a lot of things have been written under the sun recently that bend the brain.&lt;br /&gt;&lt;br /&gt;For the most part, the "spoken language description" or nomenclature of the languages is the same ie: objects, methods, procedures, closures, fucntions, instance variables, parameters etc. So only when someone bakes up a new "thing" and gives it a name, do you have a learning exercise. This is to exclude the obvious of learning a new feature or third party system which is ever-on-going.&lt;br /&gt;&lt;br /&gt;For those who have been coding for many years in many languages you will know what I mean. It's fun looking at new languages and it's not long before you are proficient. For ths most part, coding in another language is only slowed by the environment in which it has to operate, so OS, execution platform (JVM, native) the IDEs, no IDE, dynamic, compiled etc.&lt;br /&gt;&lt;br /&gt;So .. how about switching the domain in which you are coding for? This, I have not done often. I have currently side stepped from funds management and trading over to insurance. I knew there would be challenges and yes there are. Insurance is another whole industry unto itself, there certainly are links and in the FM and Trading game you come across these links a bit.&lt;br /&gt;&lt;br /&gt;It's not so much the concepts of insurance, they are easy, or easy enough, but it's the nomenclature that is used and when it applies, and who owns what. My view point is that I MUST be proficient in understanding the business before I can really code. Sometimes you won't have that luxury, perhaps due to time pressure. But if you work for an ISV or interact with a department, not being able to speak their language gives you no credibility and also makes you untrust worthy. The business domain experts will instantly pick up on this.&lt;br /&gt;&lt;br /&gt;I am studying insurance like it's a new degree for me.&lt;br /&gt;&lt;br /&gt;.. it's real Domain Driven Design back again (for me). It's fun. It's fun because it's forcing me to think outside the square and, as an outsider (at the moment) see how things work and then twist my brain around it to understand how it hangs together.&lt;br /&gt;&lt;br /&gt;A policy, quotations, indications, endorsements, declines.. the list goes on. and to write a system I first have to understand the domain.&lt;br /&gt;&lt;br /&gt;It reminds me of 7 years ago when I was first cutting systems for fund management. What a battle in the brain that was. I am finding this new domain a bit easier now than then. Perhaps because I know the right types of questions.&lt;br /&gt;&lt;br /&gt;I think working with business people who are amenable to your plight (lack of knowledge) helps, of course :-)&lt;br /&gt;&lt;br /&gt;So.. I encourage anyone who faces new domains, often or not often, study it, learn it. You will be noted as a good developer simply because it shows you actually do care. And, BTW, this goes for not only coding, but Systems support and DBA's and everyone.&lt;br /&gt;&lt;br /&gt;We are like Vets, we have to know a lot in order to do our job.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-6612662457429245999?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/6612662457429245999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=6612662457429245999' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/6612662457429245999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/6612662457429245999'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2007/06/switching-domains.html' title='Switching Domains'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-2861715127276377516</id><published>2007-05-26T03:31:00.000+01:00</published><updated>2007-05-26T04:28:26.707+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='mylar'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='netbeans'/><title type='text'>Eclipse Mylar ... Wow!</title><content type='html'>So, Subclipse is installed. I noticed (well was forced to notice) that Subclipse required Mylar before it would install. Okay .. dependency yicky, but, quickly sorted out by installing Mylar.&lt;br /&gt;&lt;br /&gt;But, as Always, I MUST know what something is (which is a painful character trait as it does get me distracted often) and Mylar quickly became on top of my list. (Talk about being distracted, at 9:50am today (Saturday) I was starting the day for prototyping an idea I had last night at 2am using GWT, and now I am blogging, not yet into my prototype).&lt;br /&gt;&lt;br /&gt;So, where was I.. Mylar, Mylar after it installed in Eclipse actually prompted me to look at the Getting Started Webinar, which was good because I was just about to minimise eclipse and go looking myself.&lt;br /&gt;&lt;br /&gt;Mylar loaded a browser in Eclipse, without hassle, and on the Mac (love it when things work).. so I went along for the journey. It's a 40 minute presentation by Mik Kersten. All I can say is wow. It truely is something to be seen, even for small shops you should be using this stuff.&lt;br /&gt;&lt;br /&gt;What is it ? Well you really need to see the webinar, but in summary it helps you do your work by showing you the things you are working on (automatically) and not involving you in the stuff you don't need to see right now. Eclipse has excellent integration hooks into the whole environment for controlling stuff (views and issues and notes etc), and Mylar has just gone one step further and controls all of this for you based on issue or tasks that you are working on (which you choose). So what you see, is only what you NEED to see, and it has the quick flick buttons to show all if you know you need to see something, and then, once you looked at that item, its now in your "filtered" view (if that's an ugly term for it).&lt;br /&gt;&lt;br /&gt;It is far more than just filtering too, because integration into the Issue Tracking software is built in for Bugzilla, Jira and Trac which means team collaboration and project deadlines are at your fingre tips to make you more productive.&lt;br /&gt;&lt;br /&gt;Really, watch the webinar (link is at the bottom) and you will see what I mean.&lt;br /&gt;&lt;br /&gt;Here is (Ramon's dodgey list) the QUICKEST way to get the most out of Mylar.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Install Trac (Bug tracking software) somewhere in your org (or use Jira if you can it's GREAT!)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Install Eclipse 3.2.2&lt;/li&gt;&lt;li&gt;Setup Subversion&lt;/li&gt;&lt;li&gt;Install Mylar then Subclipse (the Subversion plugin for Eclipse)&lt;/li&gt;&lt;li&gt;.. and watch this webinar&lt;/li&gt;&lt;/ol&gt;In my previous employment, issue tracking was managed by Tracker (Merant) and now the newer version TeamTrack. The benefits for Java Developers using Eclipse with integrated source repository and issue tracking software is just brilliant, and it's complete dark ages if you aren't. (now that I have said that I will have to practice what I preach hey).&lt;br /&gt;&lt;br /&gt;Seriously, watch that Webinar and you will see why I have just become so excited. If anyone has worked on a project that is big, and you have to collaborate, it, Mylar, MUST be a MUST. If you aren't on a big project, then use it anyway because&lt;br /&gt;&lt;ol&gt;&lt;li&gt;You are probably WANTING to make it big and you might as well start with a good foundation; and &lt;/li&gt;&lt;li&gt;A good practice of coding ONLY leads to good quality code which relates to more time with your family and THAT is important.&lt;/li&gt;&lt;/ol&gt;Netbeans users, I see that there is something called ALM (Application Lifecycle Management). Sorry NB peoples, I MUST not get distracted, I might look at it another day. Someone can surely comment on the differences between Mylar and ALM. Not being a big Netbeans user it's lower on my priority list, sorry.&lt;br /&gt;&lt;br /&gt;Back to Mylar, what's the name deal ..&lt;br /&gt;&lt;br /&gt;  Mylar is a term oft heard around the spacey  dudes that watch the sun.&lt;br /&gt;&lt;br /&gt;and Mik explains in his webinar&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    Mylar for the Sun - Aluminised film used to avoid blindness when staring at an eclipse.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    Mylar for Eclipse - Task focused UI to avoid information blindness when staring at Eclipse.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So in closing&lt;br /&gt;&lt;br /&gt;&lt;div  style="text-align: center;font-family:arial;"&gt;&lt;div style="text-align: left; color: rgb(0, 153, 0); font-weight: bold;"&gt;    &lt;span style="color: rgb(51, 204, 0);"&gt;To the Mylar Team&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;Brilliant tool guys and what an idea. A product feature like this deserves an award and it shows that you have thought long and hard about what you wanted it to be.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;And .. oh, what a fantastic name for your project .. I absolutely loved the definition.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;Good Job!&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div  style="text-align: left;font-family:times new roman;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;I wish there was something like mylar for my web browsing which would have removed the crud I waft through daily so that I would have seen Mylar earlier (like 7 months ago) :-) Excellent job Mylar Team.. just brilliant.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;References&lt;br /&gt;The Mylar Webinar -&lt;a href="https://admin.adobe.acrobat.com/_a300965365/p46246963"&gt; https://admin.adobe.acrobat.com/_a300965365/p46246963&lt;/a&gt;&lt;br /&gt;A Podcast from EclipseCon 2007 - &lt;a href="http://www.eclipse.org/resources/resource.php?id=366"&gt;http://www.eclipse.org/resources/resource.php?id=366&lt;/a&gt;&lt;br /&gt;Netbeans ALM - &lt;a href="http://www.intland.com/products/cb-download.html"&gt;http://www.intland.com/products/cb-download.html&lt;/a&gt;&lt;br /&gt;Trac Issue tracking - &lt;a href="http://trac.edgewall.org/"&gt;http://trac.edgewall.org/&lt;/a&gt;&lt;br /&gt;Jira Issue Tracking - &lt;a href="http://www.atlassian.com/software/jira/"&gt;http://www.atlassian.com/software/jira/&lt;/a&gt;&lt;br /&gt;Subversion - &lt;a href="http://subversion.tigris.org/"&gt;http://subversion.tigris.org/&lt;/a&gt;&lt;br /&gt;Subclipse - &lt;a href="http://subclipse.tigris.org/"&gt;http://subclipse.tigris.org/&lt;/a&gt;&lt;br /&gt;The Mylar Homepage - &lt;a href="http://www.eclipse.org/mylar/index.php"&gt;http://www.eclipse.org/mylar/index.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Can I just say again .. Mik and the team, this deserves the biggest pat on the back of your careers. Fantastic!!! A Killer Plugin for an Already Brilliant IDE. You have made me love Eclipse even more... good work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-2861715127276377516?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/2861715127276377516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=2861715127276377516' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/2861715127276377516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/2861715127276377516'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2007/05/eclipse-mylar-wow.html' title='Eclipse Mylar ... Wow!'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-3972893036626863141</id><published>2007-05-25T18:12:00.000+01:00</published><updated>2007-05-25T18:17:49.865+01:00</updated><title type='text'>My old avatar, and my iPod</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_TUzygx4zcpk/RlcZviIpZFI/AAAAAAAAAAU/h5lfrFcbmP8/s1600-h/ramon3.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp0.blogger.com/_TUzygx4zcpk/RlcZviIpZFI/AAAAAAAAAAU/h5lfrFcbmP8/s320/ramon3.jpg" alt="" id="BLOGGER_PHOTO_ID_5068548210036401234" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;So, following on from the previous post, I have "reposted" all the OLD blog entries 03 - 04 (not lots, but you know, something for the kiddies).&lt;br /&gt;&lt;br /&gt;Anyway, I also found my old avatar. Not so much an avatar as it is me back 3 years ago. :-)&lt;br /&gt;&lt;br /&gt;It took a while to repost. iPod is still trying to find it's bad sectors... the long story is that I spent $160 on a 60G iPod Harddriver from the US.. and it doesn't work .. ARGH.. THAT really frustrates me. I might just go out and buy an iPod and be done with tinkering I think.&lt;br /&gt;&lt;br /&gt;&lt;img src="file:///Users/rbuckland/Desktop/ramon3.jpg" alt="" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-3972893036626863141?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/3972893036626863141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=3972893036626863141' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/3972893036626863141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/3972893036626863141'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2007/05/my-old-avatar-and-my-ipod.html' title='My old avatar, and my iPod'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_TUzygx4zcpk/RlcZviIpZFI/AAAAAAAAAAU/h5lfrFcbmP8/s72-c/ramon3.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-4693866414769603311</id><published>2007-05-25T17:13:00.000+01:00</published><updated>2007-05-25T17:26:03.116+01:00</updated><title type='text'>The WayBackMachine (internet archive)</title><content type='html'>Having recently moved my blog over to blogspot, I have wanting to "retrieve" all my old blog posts. Some are just historical and one is just funny.&lt;br /&gt;&lt;br /&gt;In irony of a good IT professional, I was unable to find my blog backups, so instead, a waking (6:55am) thought prompted me to look on the &lt;a href="http://web.archive.org"&gt;Internet Archive (aka The Wayback Machine).&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Of course, the posts were there. (this story has a good ending). So I am now proceeding to copy my old posts over to "here". For those bored, you  can take a look at the RSS feeds and see which "old" posts have "modified" dates of 2007. (told you it's for the bored).&lt;br /&gt;&lt;br /&gt;One post in particular that I didn't want to copy verbatim in is the following..&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;h2 style="font-family: courier new;"&gt;&lt;span style="font-size:78%;"&gt;Wed, 9th Apr 2003&lt;/span&gt;&lt;/h2&gt;&lt;span style="font-size:78%;"&gt;&lt;a style="font-family: courier new;" href="http://web.archive.org/web/20040925103212/http://www.thebuckland.com/" name="12"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div style="font-family: courier new;" class="storyTitle"&gt;&lt;span style="font-size:78%;"&gt;web load testing tools   &lt;a href="http://web.archive.org/web/20040925103212/http://www.thebuckland.com/?cat=9" title="category: web development"&gt;&lt;span class="storyCategory"&gt;[web development]&lt;/span&gt;&lt;/a&gt; -  &lt;span class="storyAuthor"&gt;ramon - ramon@thebuckland.com&lt;/span&gt; @ &lt;a href="http://web.archive.org/web/20040925103212/http://www.thebuckland.com/index.php?m=200304#12"&gt;09:09:11&lt;/a&gt;&lt;/span&gt; &lt;/div&gt;  &lt;span style="font-size:78%;"&gt;&lt;span style="font-family: courier new;"&gt; Here is a list of Web Testing tools that I have found&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt; Comments on the ones I have used:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: courier new;" href="http://web.archive.org/web/20040925103212/http://www.joedog.org/siege/index.shtml"&gt;Siege&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt; Open Source&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: courier new;" href="http://web.archive.org/web/20040925103212/http://www.opensta.org/"&gt;OpenSTA&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt; Open Source&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: courier new;" href="http://web.archive.org/web/20040925103212/http://www.microsoft.com/technet/treeview/default.asp?url=/technet/itsolutions/intranet/downloads/webstres.asp"&gt;MS Web Appplication Stress Tool (MS WAST)&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt; Free for Download, Usage Persuant to EULA&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: courier new;" href="http://web.archive.org/web/20040925103212/http://www.pushtotest.com/ptt/load.html"&gt;Load&lt;/a&gt;&lt;span style="font-family: courier new;"&gt; (by PushToTest) - No longer Maintained&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: courier new;" href="http://web.archive.org/web/20040925103212/http://www.pushtotest.com/ptt"&gt;TestMaker&lt;/a&gt;&lt;span style="font-family: courier new;"&gt; (by PushToTest)&lt;/span&gt;&lt;/span&gt;         &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So I have copied it in because, technically (or chronologically) it is my first public blog posting. Bit boring, but just hilighting it's contents, testing has well moved on from here now.&lt;br /&gt;&lt;br /&gt;Two items when it comes to GUI Unit and load testing comes to mind (actually 3).&lt;br /&gt;First is that with (Google Web Toolkit) GWT, the unit testing framework is built in. (A plus of course).&lt;br /&gt;Second is the mozilla initiative to provide a Java testing framework for web pages. I have not yet had the pleasure (possibly) of using it, but suffice to say it looks great.&lt;br /&gt;&lt;br /&gt;Of course, the third is really just a note, that since this 2003 posting, I have hammered grinder, weighed jmeter even more and, .. the browsers are finally starting to behave like you want them to .. THANK you FireFox!!)&lt;br /&gt;&lt;br /&gt;(as I type this I hear the horrid sound of&lt;br /&gt;    &lt;span style="font-family: courier new;"&gt;&lt;span style="font-style: italic;"&gt;mke2fs -c -v /dev/sda&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="font-family: georgia;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-family: lucida grande;"&gt;&lt;span style="font-family: times new roman;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="font-family: georgia;"&gt;&lt;span style="font-family: lucida grande;"&gt;&lt;span style="font-family: times new roman;"&gt;clicking away on my iPod because the HDD has completely died. .. Im scanning for the bad blocks on Linux so that I can recreate the partition map skipping the majority (with buffers) of the bad sectors. Let' see what I come up with .. (there is a MUCH bigger story to this, one which I hope has a happy ending).&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="font-family: georgia;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-family: lucida grande;"&gt;&lt;span style="font-family: times new roman;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-4693866414769603311?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/4693866414769603311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=4693866414769603311' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/4693866414769603311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/4693866414769603311'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2007/05/waybackmachine-internet-archive.html' title='The WayBackMachine (internet archive)'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-6062802946268380536</id><published>2007-05-23T12:28:00.000+01:00</published><updated>2007-05-23T12:42:53.493+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='netbeans'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><title type='text'>MacOSX and .. and ..</title><content type='html'>So it's been 2 days now that I have been using the Mac for my primary machine.&lt;br /&gt;I have used Mac's for a while in the past, but primarily as test machines, or in my earlier days as a network admin, supporting users on them.&lt;br /&gt;&lt;br /&gt;Now having officially switched, I can say I like it, certainly as much as I thought I would.&lt;br /&gt;&lt;br /&gt;So, how odd is this, I have switched from, now Windows but from Linux. Now .. it's not Linux that I don't like. In fact I love it, but it's that as a development platform, the mac powerbook is just right.&lt;br /&gt;&lt;br /&gt;I installed eclipse on monday and used it for about 5 hours today. I had some odd problems trying to install subclipse, and also the spring ide plugin.&lt;br /&gt;&lt;br /&gt;I had downloaded 3.2.2 and Eclipse was saying that a particular version of some package was not installed. The odd thing was that it was the stable version of the plugin(s).&lt;br /&gt;&lt;br /&gt;Because people all around me have been talking netbeans, I figured I would give it a good try.&lt;br /&gt;I have never liked the concept that ant is at it's heart, especially since I have been a maven advocate for the past 2 years. Anyways, I'll see how it goes.&lt;br /&gt;&lt;br /&gt;So far, I have followed the setup for a maven project in netbeans, and have seen how they hook goal execution into the ant subsystem. Not a bad way of doing it.&lt;br /&gt;&lt;br /&gt;I created a fairly comprehensive domain model today (30+ classes) and I want to now see this as a model, so I couldn't install the Eclipse UML modelling (see above) .. which is why I am trying netbeans. Perhaps I will have better luck.&lt;br /&gt;&lt;br /&gt;In theory the install for the UML Modelling went well, but poor old netbeans didn't register that the plugin was installed.&lt;br /&gt;&lt;br /&gt;All is not fair in war. Some things are not as they seem (as they are described) .. but never get disheartened, there will be a way around or through this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-6062802946268380536?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/6062802946268380536/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=6062802946268380536' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/6062802946268380536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/6062802946268380536'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2007/05/macosx-and-and.html' title='MacOSX and .. and ..'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-487181699263145128</id><published>2007-05-17T13:31:00.000+01:00</published><updated>2007-05-17T13:52:36.709+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='odbms'/><category scheme='http://www.blogger.com/atom/ns#' term='SansSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='rdbms'/><title type='text'>Desire vs Need - Part 2</title><content type='html'>In building a proof of concept, a sound architecture is abstract from it's infrastricture. In this view, the project 014 (my codename) will be put on to an ODBMS and an RDBMS.&lt;br /&gt;&lt;br /&gt;Now,  being the good timesheeting developer that I am. I will break up my development time into framework, and then also time the effort for the data access layer, and then the time for implementing the datastore.&lt;br /&gt;&lt;br /&gt;For this datastore, I will choose one for the prototype (RDBMS or ODBMS) and then as a research (non-official) will choose the other.&lt;br /&gt;&lt;br /&gt;I will literally ask my magic 8-ball which one to start with.&lt;br /&gt;&lt;br /&gt;I &lt;span style="font-weight: bold;"&gt;do&lt;/span&gt; expect that the ODBMS will come out trumps, but lets see.&lt;br /&gt;&lt;br /&gt;So .. the need vs desire is simply that the I know RDBMS systems extremely well  which is the "need" for time to market (prototype) a time thing) and the "desire" (see previous posts)&lt;br /&gt;to use an ODBMS instead.&lt;br /&gt;&lt;br /&gt;I actually expect that developing with the RDBMS will take longer than with the ODBMS, as quite simply, it looks simpler.&lt;br /&gt;&lt;br /&gt;So what should I choose ?&lt;br /&gt;Well .. you have to compare like fruits, so&lt;br /&gt;db4objects embedded has to be compared with Hibernate+Derby&lt;br /&gt;db4objects client/server has to be compared with Hibernate+MySQL.&lt;br /&gt;&lt;br /&gt;I am NOT comparing speed, I will just compare effort. I will do that afterwards.&lt;br /&gt;&lt;br /&gt;&lt;brain&gt;&lt;br /&gt;One of the many reasons  some people jump to Ruby on Rails and other "X" fancy platforms is because of all this "crap" we have to put up with. (Ruby and ActiveRecords apparently does away with the Hibernate Crud..) it just still feels wrong. So, if we like Java as much as we say we do, we MUST do something about it. Sun will, but it will probably take them about 2 years longer than 6 months it would take "us" to make change happen. After all, we are the users who "sell" this stuff.&lt;br /&gt;&lt;/brain dump&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-487181699263145128?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/487181699263145128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=487181699263145128' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/487181699263145128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/487181699263145128'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2007/05/desire-vs-need-part-2.html' title='Desire vs Need - Part 2'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-4006068295254816717</id><published>2007-05-14T14:36:00.001+01:00</published><updated>2007-05-14T14:36:52.576+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='odbms'/><category scheme='http://www.blogger.com/atom/ns#' term='SansSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Desire vs Need .. ODBMS vs RDBMS</title><content type='html'>I have been on the think track of not using SQL for sometime now and have completely come to th conclusion that it is entirely possible. Possible in the sense that a decent well founded ODBMS will suit my need.&lt;br /&gt;&lt;br /&gt;I mentioned a few things that needed to be investigated in order for the switch to be solid.&lt;br /&gt;&lt;br /&gt;1. Administration - So presumably, the chosen ODBMS (Server, Platform) will provide a level of administration, such as object browsing, log, db maintenence etc What evere the underlying "architecture" is, there has to be tools to see it, so it is not a black hole. One of the nicesties of an RDBMS is it is not a black hole in as much as SQL from any compliant tool gets you to your data, a plus.&lt;br /&gt;&lt;br /&gt;2. Monitoring - How can we monitor this beast. I put this here because in my line of work, there are clear distinctions between those who build and those whome maintain and the maintainers want a system, that, well, can be maintained. So it's important.&lt;br /&gt;&lt;br /&gt;SO, where is this desire and need. The desire, I want to switch, the need. The project I am embarking on does not have the funds to splash around and this puts it squarley into the hands of OSS for the chosen ODBMS. If you look around, it leaves only a few choices. After you weed the crappy and incompatible ones out, the clear winner is db4objects. But ahh, Here is my catch, db4o is GPL based, and you HAVE to code with it, ie, embed it. Which means that I can't use it, unless you buy their commercial license.&lt;br /&gt;&lt;br /&gt;What is lacking is a non-viral license ODBMS to the quality of db4objects (Apache 2, Mozilla, LGPL) such that it suits the needs of this "commercial" yet cost constrained project.&lt;br /&gt;&lt;br /&gt;So, there is my desire (ODBMS) and need (RDBMS). I must (need) have a running architecture with which to start.&lt;br /&gt;&lt;br /&gt;I must make sure that this "platform" chosen (Hybernate, MySQL (PostgreSQL)) is "removeable" for the day (if) when a compatible ODBMS comes available, or the project at hand makes some money to warrant a change.&lt;br /&gt;&lt;br /&gt;Hrmm, certainly has you thinking. I will look further into the db4o world. Here is a thought: if db4o were running as a server, in the SAME way that MySQL runs as a server, then there is no impact to your licenses. db4o is well within it's platform, wrapped in server code, .. hrmm .. cheeky. Let me take look at that.&lt;br /&gt;&lt;br /&gt;So, the server code could be GPL'd next to db4o.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-4006068295254816717?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/4006068295254816717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=4006068295254816717' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/4006068295254816717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/4006068295254816717'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2007/05/desire-vs-need-odbms-vs-rdbms.html' title='Desire vs Need .. ODBMS vs RDBMS'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-4384750422181788750</id><published>2007-05-12T10:24:00.000+01:00</published><updated>2007-05-12T12:44:28.831+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='odbms'/><category scheme='http://www.blogger.com/atom/ns#' term='SansSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='rdbms'/><title type='text'>KISS - RDBMS and ODBMS</title><content type='html'>Well, you can guess the title right there (Keep it Simple Stupid). Another title could have been (for controversey). Why the heck are we still dealing with RDBMS platforms and architectures ?&lt;br /&gt;So living in the Object world of Java I have come in contact with many databases. Sybase, MSSQL, PostgreSQL, MySQL and some Oracle (in that order of exposure).&lt;br /&gt;&lt;br /&gt;In each case I have had to deal with the RDBMS and the Relational Mapping layer (RM).&lt;br /&gt;&lt;br /&gt;Experience has whispered to me that .. "there has to be a better way", but certainly until about a year ago, shy on stating that there has to be a better way. I have known about ODBMS's for as long as I have known RDBMS's but have never worked with one.&lt;br /&gt;&lt;br /&gt;Certainly, legacy (and I mean that in the "ODBMS to RDBMS sense") platforms have to stay RDBMS and that is where OR mapping stays, but .. I want a simpler system.&lt;br /&gt;&lt;br /&gt;I blogged some time back that my goal for the next project is to make it sans-SQL. Now why on earth would I want to do that ? Well for one, I want to reduce complexity. It's that simple really (Keep It Simple Stupid).&lt;br /&gt;&lt;br /&gt;This is such a "hot" topic (many people have an opinion) that I am going out on a little (hopefully stong) limb and stating that RDBMS platforms are just simply getting long in the tooth and now is certainly a best time to move away from the RDBMS.&lt;br /&gt;&lt;br /&gt;Why (why are you being so nuts, why move away from proven technology, why ?)&lt;br /&gt;I have just finished listening to a very good talk by Ted Neward on TheServerSide&lt;br /&gt;The Webcast Talk - &lt;a href="http://theserversidecom.bitpipe.com/detail/RES/1178562676_577.html?src=wc_atssc_sitepost_05_08_07_c&amp;li=53472"&gt;Object/Relational Mapping and the Vietnam of Computer Science - Expert Webcast&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This talk centres around the idea that when working in the Object space, we should just not use RDBMS's. For background reading, the comment of OR Mapping being the "Vietnam of Computer Science" is found &lt;a href="http://blogs.tedneward.com/2006/06/26/The+Vietnam+Of+Computer+Science.aspx"&gt;here at his blog.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;One of the good quotes, which aligns with my previous post is this.&lt;br /&gt;Ted was talking about the "lure" of OR Mapping&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-family:times new roman;" &gt;"[OR Mapping has a]... selling point that says, I don't have to think about SQL, I don't have to think about tables, I don't have to think about manually unwrapping this stuff myself.. phew .. I don't have to worry about these issues anymore, and then to get bit by them .. at the 11th hour"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So true, with Hibernate, OJB, and JPA (etc etc),  SQL is still there when you have to do complex stuff. It is still there when Crystal Reports or JReports or platform X comes into it.&lt;br /&gt;&lt;br /&gt;I remember many a time sitting at night trying to tune that sproc that was mapped to my business service pouring over SQL, just to get my data right and quick. That HAS to Cost something.&lt;br /&gt;&lt;br /&gt;There has to be an extraordinary TCO attached to using OO and an RDBMS, one which could be lost if we remove the RDBMS altogether.&lt;br /&gt;&lt;br /&gt;Of course, there are problems, how to we make sure the ODBMS is quick, and efficient, and what do we do when we want reports ? &lt;span style="font-style: italic;"&gt;(These answers I am going to find out)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Ted mentioned, rightly, that it all depends what is on top of the paltform, is it Objects, or relational Data. What is the priority of the platform ?&lt;br /&gt;&lt;br /&gt;Back to the TCO. So If I have no DBA (only Operations looking after the "service" and "data" tier) and I have no need for SQL developers (if there are sprocs involved) and I don't have to worry about OR layers .. It has to mean that I have less to worry about, surely, which means that "time" to market, TCO etc is lower. It just has to .. It has to mean a simpler system.&lt;br /&gt;&lt;br /&gt;This KISS principle, A very interesting WebCast that.&lt;br /&gt;&lt;br /&gt;So where to from here ? I have decided that my projects will not use *SQL. So that means I have to choose an ODBMS platform.&lt;br /&gt;&lt;br /&gt;Two issues that were rasied in the Webcast which are VERY real are the following.&lt;br /&gt;&lt;br /&gt;- How do you administer the chosen ODBMS ?&lt;br /&gt;- How do you monitor the chosen ODBMS ?&lt;br /&gt;&lt;br /&gt;Very true, kind of a worry (possibly). We'll see.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-4384750422181788750?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/4384750422181788750/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=4384750422181788750' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/4384750422181788750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/4384750422181788750'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2007/05/kiss-rdbms-and-odbms.html' title='KISS - RDBMS and ODBMS'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-2420301255333095098</id><published>2007-05-10T15:43:00.000+01:00</published><updated>2007-05-10T15:54:24.106+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='old technology'/><title type='text'>So glad things have moved on...</title><content type='html'>Having always been in IT for most of my (post age 13) life. I take notes, and lots of them.&lt;br /&gt;&lt;br /&gt;Here is a snippet of some notes I took about 5 - 6 years ago. It's like my Own personal "change control" sheet. Before I even really knew what the heck a change control "form" was.&lt;br /&gt;&lt;br /&gt;Oh, the icemaster is my "server" almost always. I have a gorgeous old 60's chrome that belongs on the back of a car, which is script says icemaster. Funny thing is I found it in the inside of the freezer box of a 60's fridge. It is&lt;br /&gt;fantatic and has moved with me to all my servers over the years...&lt;br /&gt;&lt;br /&gt;Why do I say things have moved on. Well now Ubuntu (and other distros just make this stuff so much easier). I don't need to worry about installing stuff to any great detail like you used to have to.&lt;br /&gt;&lt;br /&gt;I remember sitting down for 6 hours with Adam Spann (Druss) and working on Slackware with was running kernel 1.2.28 in 1994. Gosh those were the days of 2 hour kernel compiles !!!&lt;br /&gt;&lt;br /&gt;I don't think I have even compile a kernel for Linux in the last 18 months. whoa.. is that even happening, wait till I have kids, I might forget XML.&lt;br /&gt;&lt;br /&gt;soo .. here you are .. snippet of 6 years ago&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;icemaster - P120 32M RAM .. lots of disk space to play with as well&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;     &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;2001 07 12&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    After much fluffing around and installing Debian 2.2r3&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    I have a working systems&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        To do .. install SCSI modules for the SCSI cards&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            Configure the snd card it's conflicting on IRQ10&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            so I need to get it off there at some stage.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;2001 07 12&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    Install Xvnc (vncserver) .. gives us X windows vnc Access .. Neato!&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    tar it out&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    xmkmf&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    make World&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    ...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    cd Xvnc&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    make World&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    make install and make install.man&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    Edit the /etc/vnc.conf file and uncomment the fontPath settings .. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    All is well .. now let's get some X interface happening&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;2001 07 12&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    Installed samba 2.2.1a with default options into /usr/local/samba and /etc/samba/conf&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        /var/log/samba/%m.log&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    Have 'make'd apache 1.3.20 .. it isn't installed yet.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;2001 07 16&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    Installed apache 1.3.20&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    Attempted to connect .. no go .. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    after a few mins .. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        Did an netstat -an&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    Ahh there the bugger is .. port 8080 ,Must have been because I was compiling as a user&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    Ahh well .. fixed now.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;2001 07 16&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    Setup swat&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    /etc/services    ---&gt; swat     901/tcp&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    /etc/inetd.conf  ---&gt; swat            stream  tcp     nowait.400  root    /usr/local/samba/bin/swat swat&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;     &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    Now .. killall -HUP inetd&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    DOH! .. bad username/password .. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    Looked aorund using google.. possible that it needs PAM configs to auth root&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    Seems to need:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    icemaster:/home/rbuckland/software/samba-2.2.1a/source/pam_smbpass# less /etc/pam.d/samba&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        auth    required /lib/security/pam_pwdb.so nullok shadow&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        account required /lib/security/pam_pwdb.so&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    Couldn't find pam_pwdb.so... Try net for 2 mins&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    Nope .. use dselect .. Ahh there it is.  ** NOPE STILL NOT WORKING **&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    -- Recompiling samba &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    ~/software/samba-2.2.1a/src/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    ./configure --with-pam&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    cd src&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    make&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    make install&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    ... YESS!&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;2001 07 16&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    Setting up jakarta-tomcat (compiling it)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    + Installed j2sdk 1.3.1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;2001 07 17&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    Setup a symlink from /etc/samba/smb.conf --&gt; /usr/local/samba/lib/smb.conf&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    so that swat can use the same file (quick fix)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;... and it went on, but I have snipped it&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-2420301255333095098?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/2420301255333095098/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=2420301255333095098' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/2420301255333095098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/2420301255333095098'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2007/05/so-glad-things-have-moved-on.html' title='So glad things have moved on...'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-5886612525168994077</id><published>2007-05-10T15:08:00.000+01:00</published><updated>2007-05-10T15:12:23.736+01:00</updated><title type='text'>A close friend .. replaces Rod Johnson</title><content type='html'>Was just chatting with Vishal Puri, a very close friend and colleague of mine.&lt;br /&gt;He said the following ..&lt;br /&gt;--------------------------&lt;br /&gt;&lt;span chatdir="1"&gt;&lt;div class="bz_msg"&gt;&lt;div&gt;&lt;b style="margin-left: 3px;"&gt;Vishal: &lt;/b&gt;&lt;span chatindex="CB77B04185C0A18B8"&gt;hehe all the best!&lt;/span&gt;&lt;/div&gt;&lt;div class="bz_msg_cont" chatindex="CB77B04185C0A18B9"&gt;me going to india&lt;/div&gt;&lt;div class="bz_msg_cont" chatindex="CB77B04185C0A18B10"&gt;on 29th may&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;span chatdir="2"&gt;&lt;div class="bz_msg"&gt;&lt;div&gt;&lt;b style="margin-left: 3px;"&gt;me: &lt;/b&gt;&lt;span chatindex="61ADCADF93927D6E5"&gt;Way ! When did this happen&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;span chatdir="1"&gt;&lt;div class="bz_msg"&gt;&lt;div&gt;&lt;b style="margin-left: 3px;"&gt;Vishal: &lt;/b&gt;&lt;span chatindex="CB77B04185C0A18B11"&gt;yeahh yesterday&lt;/span&gt;&lt;/div&gt;&lt;div class="bz_msg_cont" chatindex="CB77B04185C0A18B12"&gt;confirmed only today&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;span chatdir="2"&gt;&lt;div class="bz_msg"&gt;&lt;div&gt;&lt;b style="margin-left: 3px;"&gt;me: &lt;/b&gt;&lt;span chatindex="61ADCADF93927D6E6"&gt;did u tell me and I wasn't listening ?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;span chatdir="1"&gt;&lt;div class="bz_msg"&gt;&lt;div&gt;&lt;b style="margin-left: 3px;"&gt;Vishal: &lt;/b&gt;&lt;span chatindex="CB77B04185C0A18B13"&gt;speaking in place of Rod Johnson &lt;img style="background-image: url(https://mail.google.com/mail/im/emotisprites/smile.png); background-position: 0px -132px;" id="emoticon1" onload="if(top.js &amp;&amp; top.js._BZ_RotaSmile){top.js._BZ_RotaSmile._Register(this, 1)}else{setTimeout('emoticon1.onload()',100)}" src="https://mail.google.com/mail/images/cleardot.gif" onmouseover="top.js._BZ_RotaSmile._Start(this, 1)" alt="[smile]" height="12" width="13" /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;--------------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I like the casual statement .. speaking "in place of" Rod. Now who gets a chance like that. :-) He left working with me to go and work for I21. Ish pish.&lt;br /&gt;&lt;br /&gt;Good job Vishal, you'll do well.&lt;br /&gt;&lt;br /&gt;http://www.sda-india.com/conferences/jax-india/speakers.php&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-5886612525168994077?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/5886612525168994077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=5886612525168994077' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/5886612525168994077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/5886612525168994077'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2007/05/close-friend-replaces-rod-johnson.html' title='A close friend .. replaces Rod Johnson'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-1544849688137660622</id><published>2007-05-10T14:46:00.000+01:00</published><updated>2007-05-10T15:04:14.475+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Vendor lock in</title><content type='html'>Big Appservers annoy me. Websphere, WebLogic .. even JBoss sometimes. But, you know what. They are good. Now .. there's a revoke of statements.&lt;br /&gt;&lt;br /&gt;I have used JBoss from early V2 days and now use V4. If I could everything would just run on Tomcat but in banking circles this is just not a goer (wish it could be).&lt;br /&gt;&lt;br /&gt;Brands, and branding sells.&lt;br /&gt;&lt;br /&gt;A Colleague made a (un)true statement today. .. spoken from the client view ..&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"It doesn't matter, we want Websphere because it scales". &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now the statement is not the (un)true part, but he said it tonque in cheek.&lt;br /&gt;&lt;br /&gt;WAS scales, it does and that's why our clients will use it, want it.. think they want it. But what about when you have a standalone (runs on a JVM (thanks Spring)) app and then you run it in Websphere and it has a 300% degradation. ie, 1s response becomes 3s.&lt;br /&gt;&lt;br /&gt;I suspect that the app is not "plugged" well into WAS 6.1. It's ServiceMix that we are talking here..&lt;br /&gt;&lt;br /&gt;I mean where do you start, we can tune our code, but obviously the code runs well stand alone, so it's off to WAS to see what's going on.&lt;br /&gt;&lt;br /&gt;I'm not acually the dev doing the performance testing. That is another one of our merry men. It's a hard task and it is only solved by starting at the top.&lt;br /&gt;&lt;br /&gt;Back to Application Servers. I hate vendor lock in. It's a necessary evil though, I make no quarms about using a product when it's good. Weblogic 9 was great to dev with. Websphere 5.1 was clunky. 6 seems better. But any appserver, Java is meant to be portable and when you have a "from the start" idea that you use one, you might as well go MicroSoft and get far better "rubbing shoulders" experience than you will with Java.&lt;br /&gt;&lt;br /&gt;A few things leae a bad taste in my mouth, one of them is the jboss-*.xml files that have to be in wars, ears etc .. That's just annoying. :-) (Maven solves that but so I don't have to worry about it, so did ant to think of it)&lt;br /&gt;&lt;br /&gt;So , I am a technologist who chooses product or library X because it works.&lt;br /&gt;I hate something that doesn't work.&lt;br /&gt;&lt;br /&gt;Stuff I found works, absolutely brilliantly I might add is, Spring and Maven 2.&lt;br /&gt;These two products alone have changed the way I view Java Development.&lt;br /&gt;&lt;br /&gt;So How do I avoid vendor lockin there ?&lt;br /&gt;Well, Maven doesn't go near my code, it sits on the edge, ie Ant and Maven co-exist for sure.&lt;br /&gt;&lt;br /&gt;Spring, (some, not many) people have this conception that Spring is through your code. to me, if spring is in your code it's because you either found something there that really helps, or you have not thought well about how to keep it out.&lt;br /&gt;&lt;br /&gt;Can't wait to see how Java Dev'ing on the Mac goes. Vishal says it's brilliant. My brother swears by it (but he's a designery type so he would ;-).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-1544849688137660622?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/1544849688137660622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=1544849688137660622' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/1544849688137660622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/1544849688137660622'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2007/05/vendor-lock-in.html' title='Vendor lock in'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-8151688558282526754</id><published>2007-05-10T14:23:00.000+01:00</published><updated>2007-05-10T14:42:32.981+01:00</updated><title type='text'>Bottom of the food chain</title><content type='html'>Free Stuff websites. That's the bottom of the food chain.. and now I landed there.&lt;br /&gt;&lt;br /&gt;Partly because my iPod was stolen many a year ago. But let me tell you more..&lt;br /&gt;&lt;br /&gt;These websites work by offering a "free" price in exchange (there, it's no longer free) of you completing an "offer" from an advertiser and then referring X number of friends to the site, X being based on the gift you choose.&lt;br /&gt;&lt;br /&gt;These sites do work, simply. The offer might cost me, anywhere between $1 - $20 or more, and if I sign up for a "subscription" to the advertiser, then more of course.&lt;br /&gt;&lt;br /&gt;The pinch is that the "gift wanter" may just take up an offer. I'm sure there are kickbacks.&lt;br /&gt;Now why am I blogging this in the tech side ?&lt;br /&gt;Well .. I got lured, I have chosen an iPod as my free gift, I have to have 8 "friends" do the same thing, they go to the site and accept an offer. Then I get my iPod.&lt;br /&gt;&lt;br /&gt;(Shameless link to "my" referral) &lt;a href="http://gifts.freepay.com/?r=38178588" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;http://gifts.freepay.com/?r&lt;wbr&gt;=38178588&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So here's the tech bit.&lt;br /&gt;&lt;br /&gt;I chose the "advertiser" that had the most non-boring thing, which was a subscription $10/wk to mobile phone games. I made sure there was an opt out option .. (scoured the advertisers website first) .. and then went through the "sign up" phase.&lt;br /&gt;&lt;br /&gt;I entered my mobile #, it sends an SMS asking me to confirm, I confirmed with OK.&lt;br /&gt;&lt;br /&gt;The website, in the mean time is "waiting for" my OK SMS. The SMS obviously gets picked up because it moves to stage 2 which is "success" and sends me a "welcome SMS".&lt;br /&gt;&lt;br /&gt;Now I go back to the gifts.freepay website and refresh my "you have not completed the offer" stage. ... No change.&lt;br /&gt;&lt;br /&gt;Well .. I refreshed once or twice and then I went to help, help says to wait 1 - 15 days to see acknowledgement from the "advertiser" that accepted the offer.  ... bummer...&lt;br /&gt;&lt;br /&gt;Then, sure enough, an email arrives in my inbox which says my offer has been confirmed.  There's the technology bit. I shouldn't be too surprised, but interestingly enough, it was server to server communication. ie, the mobile phone company notified the freepay website that my offer was accepted.&lt;br /&gt;&lt;br /&gt;Anyways, click on my link, sign up. I get an iPod. ;-)&lt;br /&gt;&lt;br /&gt;And this the title of this post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-8151688558282526754?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/8151688558282526754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=8151688558282526754' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/8151688558282526754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/8151688558282526754'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2007/05/bottom-of-food-chain.html' title='Bottom of the food chain'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-4013375268439893023</id><published>2007-05-07T23:48:00.000+01:00</published><updated>2007-05-08T00:16:44.855+01:00</updated><title type='text'>OJB, Hibernate and the Cage</title><content type='html'>I have been working for one company for the past 2.5 years and back about 3-4 years a go. The ORM platform chosen was OJB. Now Apache OJB (from the DB Project) had quite a potential lead in the ORM world.&lt;br /&gt;&lt;br /&gt;It was logical in it's design, goals for JDO compatibility etc. (it made them all).&lt;br /&gt;&lt;br /&gt;Over time, users waned and moved over, or took up hibernate. Hibernate having the market share takes the cake now for&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Performance&lt;/li&gt;&lt;li&gt;Configuration Ease&lt;/li&gt;&lt;li&gt;Options&lt;/li&gt;&lt;li&gt;Assistance&lt;/li&gt;&lt;li&gt;Stability&lt;/li&gt;&lt;/ol&gt;and last and NOT least&lt;br /&gt;&lt;br /&gt;    6. Plugability&lt;br /&gt;&lt;br /&gt;This is OJB's main killer.&lt;br /&gt;In my 2.5 years working with it I can honestly say that it is the worst Java library I have ever used, ever had problems with, and more than ever passionately wanted to move off.&lt;br /&gt;&lt;br /&gt;Now this is not a diss to the authors of OJB. By all means, they did a great job. But some things just died in there and before you know it, the project is like a car running on rims with no tyres trying to drive the nullabor. Just ill equipped for a big task.&lt;br /&gt;&lt;br /&gt;My main pet peaves for OJB are the following&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;1. Class loading issues&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Deep in the bowels of OJB it all starts with an OJB.properties file. This is the beginning of a painful end. OJB locates this from the classpath and then inside this properties file, locates youre repository.xml file (akin to *.hbm.xml).&lt;br /&gt;&lt;br /&gt;Now, the repository.xml has all the settings for the mappings, but it also requires you to declare you datasource (can be a JNDI) but also transaction demarcationb (the OJB way) and a few other nasties.&lt;br /&gt;&lt;br /&gt;Coding MUST be done such that infrastcuture is a side concern. ? What do I mean. Write your code, but write it like it;s on an island. Don't include code, logicthat binds you to a database, or a way of communicating across the wire.&lt;br /&gt;&lt;br /&gt;This classloading issues gets ugly in many ways. It I wanted to merge repository files together, I have to do this by either, writing an adaptor class to join them all up or .. just hand (or ant,maven) hack them together.&lt;br /&gt;&lt;br /&gt;But .. remember, a repository file is for one database.. how do you do two databases ? (seperate schemas) ..&lt;br /&gt;&lt;br /&gt;Know, that we worked it out .. how, by ensuring that one OJB for one schema was in a sibling or seperate classloader.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;2. Inconsistencies between versions (minor versions)&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;The Apache Portable Runtime project has a very nice succint way to describe versions. &lt;a href="http://apr.apache.org/versioning.html"&gt;http://apr.apache.org/versioning.html&lt;span class="down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;img src="img/gl.link.gif" alt="Link" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;OJB certainy did not follow any of these guidlines.&lt;br /&gt;&lt;br /&gt;The library is still stuck on 1.0.4, 1.0.2 is about 3 years old and 1.0.3 was just skipped because it was full of bugs (for us).&lt;br /&gt;&lt;br /&gt;OJB 1.0.4 seems stable enough, this was after a massive code change that occured to our base product to make it work.. oh the pain.&lt;br /&gt;&lt;br /&gt;Now the observant among you would say that you shouldn't have to change code if you change your ORM  tool. Sadly we had to because of the legacy Java Code, but even still. There was horrid work to be done just trying to work with the incompatibilities.&lt;br /&gt;&lt;br /&gt;Why upgrade then ? Well we found some things didn't work in 1.0.2 (something with key Sequences and Sybase (yes another groan, see my Sans SQL Post) and 1.0.4 supported it.&lt;br /&gt;&lt;br /&gt;From the site itself (on the news section)&lt;br /&gt;&lt;br /&gt;&lt;h4&gt; &lt;em&gt;    12/2005&lt;/em&gt; - OJB 1.0.4 released&lt;/h4&gt; &lt;p&gt;    Contains bug fixes and new features. For more details see &lt;a href="http://db.apache.org/ojb/release-notes.txt"&gt;release-notes&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;Argh ..&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;3. It's just plain dead&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;The site is tumble weed city. Everywhere you look on OJB it just smells of a house that is falling.&lt;br /&gt;Where I work(ed soon) we have a large application that relies, depends, is hard coded to, OJB, it is an inherited platform and we now know what not and what to do with OJB.&lt;br /&gt;&lt;br /&gt;Some initial analysis has gone into the replacing it with Hibernate, but a lot of the other code is going to be shelved so it is almost not worth it now.&lt;br /&gt;&lt;br /&gt;All the new work has a clear separation of ORM and Domain so that way it can easily be shifted in or out as you see fit. (thanks Spring).&lt;br /&gt;&lt;br /&gt;I think the project (OJB) is dead, or should be left alone.&lt;br /&gt;The mailing lists are a dieing world.&lt;br /&gt;&lt;a href="http://mail-archives.apache.org/mod_mbox/db-ojb-user/"&gt;http://mail-archives.apache.org/mod_mbox/db-ojb-user/&lt;span class="down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;img src="img/gl.link.gif" alt="Link" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Summary&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Why did I mention hibernate in the title ? Well, Im never using OJB again that is why.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;OJB users now and future, your mileage may vary, because you might now how to make OJB work sanely. The thing is, it was not obvious to me or about 6 other developers I worked with who also have a bad taste in their mouth from this seemingly harmless library.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Have fun, and keep the code away from the hardware :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-4013375268439893023?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/4013375268439893023/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=4013375268439893023' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/4013375268439893023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/4013375268439893023'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2007/05/ojb-hibernate-and-cage.html' title='OJB, Hibernate and the Cage'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-5770973604761986801</id><published>2007-05-03T14:07:00.000+01:00</published><updated>2007-05-12T11:37:37.798+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='odbms'/><category scheme='http://www.blogger.com/atom/ns#' term='SansSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='rdbms'/><title type='text'>More Thoughts .. Moving from that proverbial database</title><content type='html'>I posted back in November my desire to move away from the database, somehow.&lt;br /&gt;&lt;br /&gt;Well .. my chance has come .. I will still use it, but let's not have any SQL shall we. I am moving work-house.&lt;br /&gt;&lt;br /&gt;So, Starting this new company in a few weeks time, I have the opportunity to not rely on a Database. Let's read that anotherway. I won't (want) have to write another piece of SQL.&lt;br /&gt;&lt;br /&gt;Now, I actually have a great fondness of SQL. I actually becomes quite a proficient Sybase Tuner (knowing the profiler better than the walk home) back in 2002 - 2004. So I actually like the stuff and SQL is certainly a way to shift sheer lare amounts of data.&lt;br /&gt;&lt;br /&gt;But why another language, I will already have CSS, XHTML, JavaScript, Java and a hack of XML for Maven, config, oh and Im sure my favourite XSLT language will land somewhere in the next big app I write.. so .. where does that leave SQL.&lt;br /&gt;&lt;br /&gt;Well I am going to go dry .. I will look for all options, (logical), where I don't have to have any SQL. It is just another language, that when I am hiring or training or handing over, that I don't want to be the only one in the team that knows it so well that I get scared looking at others working on it ..&lt;br /&gt;(told you it was a rambling).&lt;br /&gt;&lt;br /&gt;So what are the options ?&lt;br /&gt;How can you develop an enterprise app, that HAS a database but has no SQL (ie auto-gen'd SQL).&lt;br /&gt;&lt;br /&gt;Here are some avenues to pursue.&lt;br /&gt;- ODBMS (most likely)&lt;br /&gt;- Auto Gen of OR Mappings&lt;br /&gt;- Direct cache storage of Objects (eww!)&lt;br /&gt;&lt;br /&gt;What happens when my objects grow, what about the old data etc ? That will be fun. I don't want to have to write "update" SQL (remember, sansSQL&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-5770973604761986801?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/5770973604761986801/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=5770973604761986801' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/5770973604761986801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/5770973604761986801'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2007/05/more-thoughts-moving-from-that.html' title='More Thoughts .. Moving from that proverbial database'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-1072355855727990738</id><published>2007-05-03T13:22:00.000+01:00</published><updated>2007-05-03T14:04:53.214+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='findbugs'/><title type='text'>Shoot em down, clear em out, get them bugs !</title><content type='html'>Listening to #115 of the Java Posse in traffic this morning (taking the car to the mechanics), the boys have mentioned it many times before, the findBugs plugin.&lt;br /&gt;&lt;br /&gt;I finally remembered again to go back to the podcast listing http://javaposse.com and take a look.&lt;br /&gt;&lt;br /&gt;FindBugs looks great, I quickly ran it across two projects I had open in Eclipse and it certainly picked up a 3 in one and about 28 in the other.&lt;br /&gt;&lt;br /&gt;Going by class (I should go by LOC) the 28 bugs on 60 classes is a bad.&lt;br /&gt;&lt;br /&gt;The other is 20 classes and 3 bugs .. good thing this second project is recent :-) and the other 3 years active.&lt;br /&gt;&lt;br /&gt;Good job for that plugin I say.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-1072355855727990738?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/1072355855727990738/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=1072355855727990738' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/1072355855727990738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/1072355855727990738'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2007/05/shoot-em-down-clear-em-out-get-them.html' title='Shoot em down, clear em out, get them bugs !'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-1434214593114138515</id><published>2007-05-02T01:15:00.000+01:00</published><updated>2007-05-02T02:19:10.555+01:00</updated><title type='text'>JEE and Spring</title><content type='html'>I was in discussion with a colleague the other day who had not used Spring before. He was describing to me how Spring is not needed now because of JEE5.&lt;br /&gt;It suddenly occured to me that, anyone who hasn't used Spring doesn't really understand how it works.&lt;br /&gt;&lt;br /&gt;Se we were on the discussion of View handlers.. so the bit that finally renders (X)HTML in the browser.&lt;br /&gt;&lt;br /&gt;Here is my theory : Spring has become well known for a lightweight IOC Container and famous for it. But people seem to miss the point that this is one area of Spring. I can take the Spring Portlet code and pop it right next to the JEE stack and it's all good.&lt;br /&gt;&lt;br /&gt;This is akin to saying let's run struts in a JEE stack.&lt;br /&gt;Same as me saying, let's run SpringMVC in a JEE stack&lt;br /&gt;&lt;br /&gt;Interesting.. Anyways.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-1434214593114138515?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/1434214593114138515/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=1434214593114138515' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/1434214593114138515'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/1434214593114138515'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2007/05/jee-and-spring.html' title='JEE and Spring'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-3652762951823085955</id><published>2007-04-30T00:59:00.000+01:00</published><updated>2007-04-30T01:31:10.158+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>The Ideal Java Development Environment - Post 1</title><content type='html'>Starting a new job in a few weeks, my mind has slightly been drawn to what is the quickest way to setup a fledgling company with a stable build system and a structured project and development lifecycle for Java.&lt;br /&gt;&lt;br /&gt;Now many of you will be very observant to note that I have tagged few big issues in that first paragraph. Yes, that is the problem.. or the focus of my attention for a short number of days (what, he's mad, setting up something in a short number of days).&lt;br /&gt;&lt;br /&gt;So where do you start ?&lt;br /&gt;&lt;br /&gt;My new company I am working for primarily exists to raise funds for charities, technically we are not non-for-profit, because it is not 100% of profit which goes to the charities, but let's just say it is more that 40%.&lt;br /&gt;&lt;br /&gt;So .. costs are critical, we need to keep them fairly low, and software development certainly sits at the high end of draining resource (money).&lt;br /&gt;&lt;br /&gt;Of course being a major supporter, user and contributor of Open Source, it will sit majorly within the realms of my new job.&lt;br /&gt;&lt;br /&gt;At a brief glance, these are the items for which I either (a) know intricately and will bring to the table, or (b) know I need to look at them.&lt;br /&gt;&lt;br /&gt;So lets start shall we, here is a quick run down of items I will either be using, or will investigate ..&lt;br /&gt;&lt;span&gt;Build and Development&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Eclipse - (for many years now)&lt;/li&gt;&lt;li&gt;Maven 2 - Without a doubt&lt;/li&gt;&lt;li&gt;Subversion - goes without saying&lt;/li&gt;&lt;li&gt;Continuum - (CI - Continuous Integration) - &lt;span style="font-style: italic;"&gt;Would love to use Bamboo (atlassian)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;Some things I want to take a look at (suspect they may be of benefit)&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Bamboo&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Buildix (ThoughtWorks Out-of-the-Box of all the above)&lt;/li&gt;&lt;li&gt;Tracs (it's in the Buildix platform)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Artifactory for Maven - Definitely a Winner here&lt;/li&gt;&lt;/ul&gt;Some standard "stuff" I will always add to the Java projects&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Checkstyle via Maven&lt;/li&gt;&lt;li&gt;Maven Site Build (customise it)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Spring (Security, JDBCTemplate)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;Some stuff I will certainly look at&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Maven Dependency Graphs http://philhoser.blogspot.com/2007/01/dependency-graph-for-maven-2.html&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;So that is a brief list of items that will form the new "bucko" workshop.&lt;br /&gt;I'll keep you all updated on this as I grow this area.&lt;br /&gt;There are a few things I am missing there, but I'll keep you all posted on that front.&lt;br /&gt;&lt;br /&gt;Oh, one last thing I do want to add it, when the team becomes &gt;=2 developers.&lt;br /&gt;and that is hooked up to the CI .. build notification.&lt;br /&gt;&lt;br /&gt;A lot can be said on this topic. Here is a place for it.&lt;br /&gt;&lt;br /&gt;http://www.pragmaticautomation.com/cgi-bin/pragauto.cgi&lt;br /&gt;&lt;br /&gt;I have seen a whacky lamp at a lighting shop in Balgowlah, hideous. $100 or so .. and it would be great to "turn" it on, when it all goes bad. It's a foul looking angel on the back of a dragon. Perhaps the ubiquitous (sp?) lava lamp will do.&lt;br /&gt;&lt;br /&gt;I will post the steps I take in the next few postings to detail what I setup. But It wont be for a few more posting yet because I am still with my current (and fantastic employer) so need to be honourable there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-3652762951823085955?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/3652762951823085955/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=3652762951823085955' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/3652762951823085955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/3652762951823085955'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2007/04/ideal-java-development-environment-post.html' title='The Ideal Java Development Environment - Post 1'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-4697641852194142574</id><published>2007-04-30T00:22:00.000+01:00</published><updated>2007-04-30T00:25:33.406+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ramblings'/><title type='text'>Aargh ! Letting Others 0wn U</title><content type='html'>Having a few issues with the blogs lately.&lt;br /&gt;&lt;br /&gt;Hopefully this can be the last place of my blog. The blogger.com / blogspot would not let me migrate the old account across to my recently heavily used gmail account.&lt;br /&gt;&lt;br /&gt;So I have ditched the old in favour of the new.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-4697641852194142574?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/4697641852194142574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=4697641852194142574' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/4697641852194142574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/4697641852194142574'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2007/04/aargh-letting-others-0wn-u.html' title='Aargh ! Letting Others 0wn U'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-5201999271355888084</id><published>2007-03-18T11:53:00.000Z</published><updated>2007-05-03T13:58:07.804+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dell'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Installing Ubuntu Server 6.10 on Dell PowerEdge 2400 Server</title><content type='html'>&lt;p&gt;After much pain in trying to start the install, I was finally able to get the install underway.&lt;/p&gt;&lt;p style="font-weight: bold;"&gt;What was the problem ? &lt;/p&gt;&lt;p&gt;I have 4 disks (2x 9 and 2 x 18G) and the installer was not recognising the logical disk that I setup on the RAID array (2 x 8 as one,   RAID1 or 0) &lt;/p&gt;&lt;p&gt;&lt;span style="font-weight: bold;"&gt;What was the "possible" solution ?&lt;/span&gt; &lt;/p&gt;&lt;p&gt;Apparently it is a common found problem with these MegaRAID adaptors.&lt;/p&gt;&lt;p&gt;Essentially I2O is a specification used in these RAID arrays.&lt;/p&gt;&lt;p&gt;Personally I don't care too much, I just need my server running.&lt;/p&gt;&lt;p&gt;Apparently, the i2o module (i2o_core) for linux loads up first and then the megaraid module can't find the disks when it loads. &lt;/p&gt;&lt;p&gt;A few people found ways around it by manually loading the modules in the right&lt;br /&gt;order (RHE, Fedora).&lt;/p&gt;&lt;p style="font-weight: bold;"&gt;My answer for Ubuntu 6.10 server:&lt;/p&gt;&lt;p&gt;I found a tip on the RHEL "release" notes for RHEL 5 beta 2.&lt;/p&gt;&lt;p&gt;http://www.linuxcompatible.org/Red_Hat_Enterprise_Linux_5_Beta_2_s76179.html&lt;/p&gt;&lt;p&gt;It states: Change the megaraid mode from I2O to Mass Storage.&lt;/p&gt;&lt;p&gt;I did that .. (Ctrl-M when it pops up) and then went back through the install. No problem. &lt;/p&gt;&lt;p&gt;I can see my 9G and then also my 2 x 18G's.&lt;/p&gt;&lt;p&gt;Nice.&lt;/p&gt;&lt;p&gt;Thanks Red Hat. (Sorry I left you at RE 4.2)&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-5201999271355888084?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/5201999271355888084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=5201999271355888084' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/5201999271355888084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/5201999271355888084'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2007/03/installing-ubuntu-server-610-on-dell.html' title='Installing Ubuntu Server 6.10 on Dell PowerEdge 2400 Server'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-5353983912596957309</id><published>2007-01-08T02:05:00.000Z</published><updated>2007-05-03T14:04:35.842+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='schema generation'/><title type='text'>Java and Schema Generation</title><content type='html'>&lt;p&gt;You'd think that generating an XML schema from a set of Java Classes would be a simple thing. But gee it is hard.&lt;/p&gt;&lt;p&gt;I have spent the better part of four hours and three coffees pouring over the inner workings of the JAXB 2 SchemaGenerator classes. Odd stuff this, I know I am close because I have it working for simple types, but I am trying to work out how I get it to handle a complex map of objects. Hrmm..&lt;/p&gt;&lt;p&gt;[[ Edit ]]&lt;/p&gt;&lt;p&gt;I did work it out in the end. It was horrid code, in that there was so much of it which I suspect means that I didn't have it right. (it does do what I needed it for though so, close that door).&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-5353983912596957309?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/5353983912596957309/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=5353983912596957309' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/5353983912596957309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/5353983912596957309'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2007/01/java-and-schema-generation.html' title='Java and Schema Generation'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-5160247328637165258</id><published>2006-11-18T05:02:00.000Z</published><updated>2007-05-13T00:45:55.685+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='odbms'/><category scheme='http://www.blogger.com/atom/ns#' term='SansSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='rdbms'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Thoughts .. Moving away from the DB</title><content type='html'>&lt;p&gt;This is often the topic of an OO developer. How do I distance myself from the database platform, &lt;strong&gt;&lt;em&gt;but not lose, and only gain, as would be the goal.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;So I want to not have to rely on a DBA.. I mean, whay have two models. One for the database and one for the code.&lt;/p&gt;&lt;p&gt;The problems I still see are&lt;/p&gt;&lt;p&gt;- Invested expertise in DB coding (SQL sprocs etc)&lt;/p&gt;&lt;p&gt;- Speed of Batch processing. (one of these days Im going to bench mark some hardcore processing and see how I can get the same performance from a platform)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Client requirements, speed, experience dictate that we are tied to the RDBMS, Oracle, DB2, Sybase, SQL Server, great platforms. I myself have extensive experience in knowing how to get the diamonds out of the Sybase Parser, but not practising that black art any more I often wonder what my next "personal" project architecture would be.&lt;/p&gt;&lt;p&gt;James Strachan mentioned to me the other day how cool it would be to have XPath (Xquery) on top of Jaxb2. That is a cool thought. &lt;/p&gt;&lt;p&gt;The XML Content repository JSR-170 is a good read if anyone ever thinks of an XML database :-) that is essentially what it is.. I will certainly look at it again as a thought.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-5160247328637165258?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/5160247328637165258/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=5160247328637165258' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/5160247328637165258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/5160247328637165258'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2007/11/thoughts-moving-away-from-db.html' title='Thoughts .. Moving away from the DB'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-4300116653991138334</id><published>2006-09-06T00:03:00.000+01:00</published><updated>2007-05-10T16:00:53.692+01:00</updated><title type='text'>SOA, SOAP, RMI, TLA, FLA and Horses</title><content type='html'>&lt;p&gt;&lt;br /&gt;Picking that horse. I'm not a betting man at all, never been trackside, but some describe technology like betting a horse.&lt;br /&gt;Do your homework and choose, then hope it wins, maybe needing a good relationship with your bookie (I am not sure who the bookie is in this analogy).&lt;br /&gt;&lt;br /&gt;My own take is technology far much more than betting, (and the punters would say the same about horses).&lt;br /&gt;But in fairness, some people get burnt, myself included, when then chose the wrong horse.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;So taking some pages from anyones book, do your research, and, if your're&lt;br /&gt;at the other end when the horse is scrapped, don't give up and move on.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;My point is, a technology, platform can be chosen which ensures you don't have to worry, too much, about what is going to&lt;br /&gt;come up against if you follow a few simple guide lines.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Ramon's Tech Tip #1 - Horses will be scrapped&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;What do you do when the horse you backed is scrapped ? Same as you do in business, learn from it.&lt;br /&gt;It may have been the best horse when you started, and sure, it got you to now.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Ramon's Tech Tip #2 - Choose the Horse, Jockey, Race History and the Silks&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;You trusted your instinct and your fellow peers, but something went wrong.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The way I apprach a choice area is to talk to people who would agree with me, easy. I also&lt;br /&gt;get opinions from people who I know won't like it, two outcomes come from that approach, (1) I will learn something, like that&lt;br /&gt;they are definitely wrong and I am right, or that they actually have a valid point. (2) They show I am wrong and in fact they&lt;br /&gt;do like it anyway.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;The other approach I do is to research the other technology camps to find out where they are heading. In this I mean .NET, LAMP, Java,&lt;br /&gt;bright people with bright ideas working in another language, what do they see the future in X area to be ?&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Silks ? Well, go with what you like, at the end of the day you will have to be the decider.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Ramon's Tech Tip #3 - Think of the future bets&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;All good and well when you have to decide for a short term item (1 - 2 years), but what about choosing a&lt;br /&gt;direction when you yourself won't even be looking after it.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;A well guided decision that will impact others beyond you must be well thought out and planned. Don't rush into&lt;br /&gt;any decision lightly (Sub tip #3a). I have recently been involved in the decision making process that will see a platform&lt;br /&gt;being used well into the next 3 - 4 years. I can be good and say I will be around in that time, most likely I will, but what if I am not?&lt;br /&gt;I need to be considerate of the fact that the choices we make now, take us that far into the future, expecting that things will change.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Ramon's Tech Tip #4 - Follow the Jockey&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;If you don't get too friendly and passionate about Mega-Deployed Platform AlphaX, you will be happy to change to Simple-Deployed Platform AlphaX&lt;br /&gt;when you need to. My tip here, make the choices such that each component is not interdependent on another, don't couple things so tightly&lt;br /&gt;that it means cutting off when all you wanted to do was change cars&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Ramon's Tech Tip #5 - Horses fall over&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Expect it to change. In all our dealings with IT, the one thing that is guaranteed is that something will change.&lt;br /&gt;Be it that it will become obsoleted or improved.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;I have just been involved in a project where the first cut of our product was available for no more than 9 months&lt;br /&gt;and then we saw a radical change in how it should be offered to clients.&lt;br /&gt;One key component to the easing of this transition is that it was well engineered from the onset to cope with the change.&lt;br /&gt;So the best way to describe this is, write it so it can be changed, but write it to last. Loosely coupled.&lt;br /&gt;&lt;br /&gt;in the .NET land I have seen comments that interfaces should be removed, but in the land of dependency injection. Interfaces&lt;br /&gt;are king. Sure interfaces may change and need to be redrawn but so will a tightly coupled system. I can tell you&lt;br /&gt;that IoC Frameworks are becoming King, and, bottom line, they save money. and I don't mean small cost cutting here&lt;br /&gt;and there. I mean in the order of weeks of work for teams of developers. Relating to $1k's to $10k's for large projects.&lt;br /&gt;Prove me in this and I'll be quiet, but they really work and are not just some Astronaut engineering Oxygenless fad.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Ramon's Tech Tip #6 - Don't sweat when you lose&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Let's face it, and that's it, you will have to face it one time or another.&lt;br /&gt;Horses collapse, decisions made may die. It may not have been a bad horse, it may not have been a mistake.&lt;br /&gt;It could have been due to external factors such as another horse on the track destroying yours, or a big comet&lt;br /&gt;taking out the whole race.&lt;br /&gt;In any case, accept it and move on. The person that hangs on to the, "oh but it was good" and doesn't learn from it&lt;br /&gt;doesn't learn. Sometimes things were good and there are hard factors that caused them to fail, such as humans.&lt;br /&gt;So ..  learn from it, analyse what you did wrong and choose another horse.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Ramon's Tech Tip #7 - You're betting for someone else&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;I once had a colleague that, when I asked him what he wanted to be doing in 3 - 5 years time, said, "I don't want to be doing the 'next IT project' which just involves another set of requirements and tasks". He wanted to get out.&lt;br /&gt;Now sure, that's valid, and he probably needed to move on. My take on IT and the next project similar to the last&lt;br /&gt;is that I am pleasing a client. The client is always right, and IT forgets that. Sadly there has been this thing that the techy dude,&lt;br /&gt;sys admin, software engineer, whoever, knows better than business person X because they know something. Knowledge is king, sharing it with someone else and letting them make a decision is power to the king.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;It's always said, and often in retail. The client is always right. Well that is also so true in IT. IT department, make the client the person that pays your wage. Software guys, the client is the one who is funding the project.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;IT from it's onset has always been around to "solve" a problem, make a buck, help someone do task X. The key thread in all these is that there is a client, and there is the problem they want solved.&lt;br /&gt;They are the ones that will dictate what needs to be done, how much to spend and the cut off point at&lt;br /&gt;which foobar-option-ABC is implemented using pure methodology Reverse Vegemite Toast.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-4300116653991138334?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/4300116653991138334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=4300116653991138334' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/4300116653991138334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/4300116653991138334'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2006/09/soa-soap-rmi-tla-fla-and-horses.html' title='SOA, SOAP, RMI, TLA, FLA and Horses'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-5571758636835327303</id><published>2004-05-08T18:08:00.000+01:00</published><updated>2007-05-25T18:09:30.684+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><title type='text'>Upgrading to Kernel 2.6</title><content type='html'>Due to various technicality issues arising from incompatibilities with my kernel 2.5, I was forced to upgrade to 2.6 (on the laptop here)&lt;br /&gt;&lt;br /&gt;So a quick check, and then by force having to reboot back to 2.4 to do it,&lt;br /&gt;I upgraded, and a few things didn't work. I needed to add a line in /etc/netowkr/interfaces&lt;br /&gt;eth2 inet dhcp auto&lt;br /&gt;&lt;br /&gt;# or similar and /etc/modules&lt;br /&gt;psmouse&lt;br /&gt;&lt;br /&gt;The first, (eth2) my PCMCIA wireless network card moved to eth2 (when under 2.4 and 2.5)&lt;br /&gt;it was eth1.&lt;br /&gt;&lt;br /&gt;At the psmouse, it's a new module needed for the PS2 type interfaces, of which my Trackpad on the Vaio lappy&lt;br /&gt;is one.&lt;br /&gt;&lt;br /&gt;So .. a quick, 40 mins of play and Im up to 2.6.5 .. not bad for a days work.&lt;br /&gt;&lt;br /&gt;Thanks Linux (and debian) for making this all possible.!&lt;br /&gt;(love it)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-5571758636835327303?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/5571758636835327303/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=5571758636835327303' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/5571758636835327303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/5571758636835327303'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2004/05/upgrading-to-kernel-26.html' title='Upgrading to Kernel 2.6'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-7204765210081842476</id><published>2004-04-08T18:09:00.000+01:00</published><updated>2007-05-25T18:10:48.480+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>Some JS Links to Fancy</title><content type='html'>Always looking for some links to deal with JS,  specifically, obfucating it.&lt;br /&gt;&lt;br /&gt;See this link for more links on compressing, stripping, crunching and obfuscating JavaScript (ECMAScript)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://web.archive.org/web/20040925103212/http://www.websiteoptimization.com/speed/9/"&gt;Optimizing JavaScript&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This link (from above link) has worked best at the moment (didn't break the 23k JS file we had)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://web.archive.org/web/20040925103212/http://squisher.homeip.net/projects/scriptsquisher/"&gt;Script Squisher&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-7204765210081842476?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/7204765210081842476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=7204765210081842476' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/7204765210081842476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/7204765210081842476'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2004/04/some-js-links-to-fancy.html' title='Some JS Links to Fancy'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-8271775588351805070</id><published>2004-03-11T16:02:00.000Z</published><updated>2007-05-25T18:07:53.665+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coldfusion'/><category scheme='http://www.blogger.com/atom/ns#' term='sybase'/><title type='text'>Sybase output parameter issue with ColdFusion</title><content type='html'>Using Sybase 12.5 we have a stored procedure that&lt;br /&gt;returns a string in an output parameter.&lt;br /&gt;&lt;br /&gt;The Stored procedure is declared like&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt; create proc sp_foobar &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt; @pc_char1 char(10),&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt; @pi_int1 int,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt; @pvc_vc1 varchar(512),&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt; @pc_char2 char(6),&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt; @pvc_vc2 varchar(40),&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt; @pvc_vc3 varchar(255),&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt; @pb_bit1 bit,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt; @pvc_vc4 varchar(20),&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt; @pvc_return_code varchar(30) output&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt; as&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt; ...&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;In ColdFusion, we were calling the stored procedure as follows.&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt; &lt;cfstoredproc procedure="sp_foobar" datasource="DSN" returncode="Yes"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  &lt;cfprocparam type="In" cfsqltype="CF_SQL_VARCHAR" value="#val#" null="No"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  &lt;cfprocparam type="In" cfsqltype="CF_SQL_INTEGER" value="#int1#" null="No"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  &lt;cfprocparam type="In" cfsqltype="CF_SQL_VARCHAR" value="#vc1#" null="No"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  &lt;cfprocparam type="In" cfsqltype="CF_SQL_VARCHAR" value="#vc2#" null="No"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  &lt;cfprocparam type="In" cfsqltype="CF_SQL_VARCHAR" value="#vc3#" null="No"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  &lt;cfprocparam type="In" cfsqltype="CF_SQL_VARCHAR" value="#vc4#" null="No"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  &lt;cfprocparam type="In" cfsqltype="CF_SQL_BIT" value="1" null="No"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  &lt;cfprocparam type="in" cfsqltype="CF_SQL_VARCHAR" value="#vc2#"&gt;     &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  &lt;cfprocparam type="out" cfsqltype="CF_SQL_VARCHAR" variable="v_return_code"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt; &lt;/cfstoredproc&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;But this throws an error,&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);font-size:85%;" &gt;&lt;span style="font-family: courier new;"&gt;[Macromedia][Sybase JDBC Driver][Sybase]Operand type clash: VARCHAR is incompatible with VOID TYPE &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;and it highlights the last &lt;span style="font-family: courier new;"&gt;cfprocparam&lt;/span&gt; (the output variable).as the issue&lt;br /&gt;&lt;br /&gt;I worked out that if you pass it a value="" parameter, it stops it from failing.. ie&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt; &lt;cfprocparam type="out" cfsqltype="CF_SQL_VARCHAR" variable="v_return_code" value=""&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;The sproc, in this example as part of it's internal logic/contract returns "SPROC_SUCCESS" as it's varchar, in @pvc_return_code. What Coldfusion puts in this&lt;br /&gt;v_return_code is now equal to only the first letter.  (ie 'S')&lt;br /&gt;&lt;br /&gt;Hrmmm, .. so .. I worked a way around this one also... A Fix for this BUG .. make the 'value=""' a string as long as the string you expect to be returned. eg,&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt; &lt;cfprocparam type="out" cfsqltype="CF_SQL_VARCHAR" variable="v_return_code" value=".............................."&gt;    &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;and then you would get #v_return_code# equal to "SPROC_SUCCESS"&lt;br /&gt;&lt;br /&gt;Odd, any takers? Someone SURELY has seen this before.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-8271775588351805070?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/8271775588351805070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=8271775588351805070' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/8271775588351805070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/8271775588351805070'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2004/03/sybase-output-parameter-issue-with.html' title='Sybase output parameter issue with ColdFusion'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-8525459936463836849</id><published>2003-11-10T15:59:00.000Z</published><updated>2007-05-25T18:00:39.109+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>(In)Sane Scanner for Linux</title><content type='html'>I'm blogging this one because I have needed it before today (this time being the 2nd time I have needed to know this info).&lt;br /&gt;&lt;br /&gt;I have a BENQ 4300U USB Scanner, was $70 8 months a go and is still great.&lt;br /&gt;&lt;br /&gt;Making it work with Linux is not too hard as some might think.&lt;br /&gt;install the sane drivers .. (apt-get install sane) debian-esq&lt;br /&gt;&lt;br /&gt;apt-get install xsane (the front gui scanning tool)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;and now the firmware,&lt;br /&gt;&lt;br /&gt;The sane driver (snapscan.sf.net) needs to know&lt;br /&gt;how to talk to the scanner.&lt;br /&gt;This is all in the scanner driver/bios/something file (i don't care much&lt;br /&gt;for these details. I just need it to work .. gosh I'm changing :-), in the past&lt;br /&gt;I would investigate everything..&lt;br /&gt;&lt;br /&gt;so .. find this file on your windows install .. reference the table at snapscan.sf.net&lt;br /&gt;My file is the u176v046.bin&lt;br /&gt;&lt;br /&gt;How do I know this ?&lt;br /&gt;Easy .. the device has a number, when you plug the USB scanner in, the linux USB drivers will&lt;br /&gt;detect it and throw a message in /var/log/messages about such event.&lt;br /&gt;&lt;br /&gt;In the log message, is the device number, which will correspond to the snapscan device id they know&lt;br /&gt;about.. egc:&lt;br /&gt;&lt;br /&gt;# dmesg | grep -i usb&lt;br /&gt;... skip all this to the last lines ..&lt;br /&gt;hub.c: new USB device 00:07.2-1, assigned address 3&lt;br /&gt;usb.c: USB device 3 (vend/prod 0x4a5/0x20b0) is not claimed by any active driver.&lt;br /&gt;&lt;br /&gt;vendor id and product ID ..  0x4a5/0x20b0&lt;br /&gt;&lt;br /&gt;These quite cheerily map to the table entry at the aforementioned driver website.&lt;br /&gt;&lt;br /&gt;So Search for this file on your windows boxen.&lt;br /&gt;Mine of course is u176v046.bin&lt;br /&gt;&lt;br /&gt;So .. I created a directoy /usr/lib/sane/firmware (anyone know where else this is meant to go, seems good to me)&lt;br /&gt;&lt;br /&gt;and then edit the /etc/sane.d/snapscan.conf file ,&lt;br /&gt;at the top set the path to your firmware file.&lt;br /&gt;&lt;br /&gt;restart xsane and hey presto ..&lt;br /&gt;&lt;br /&gt;BUT, something has changed since I did this on the laptop.&lt;br /&gt;&lt;br /&gt;As I understand it, previously, sane used to use an object file&lt;br /&gt;scanner.o method to talk to the scanner.&lt;br /&gt;now it is all via /proc/bus/usb, which debian rightly warned me,&lt;br /&gt;only root has access to.&lt;br /&gt;&lt;br /&gt;So, a quick check in /usr/src/&lt;yourfavourite src=""&gt;/Documentation/usb&lt;br /&gt;grep usbfs reveals proc_usb.txt, in there reveals&lt;br /&gt;that you set devmode=0666 for the mount and the device entry points will get&lt;br /&gt;-rw-rw-rw-&lt;br /&gt;&lt;br /&gt;so my now /etc/fstab entry for the /dev/usbfs looks like&lt;br /&gt;&lt;br /&gt;none /proc/bus/usb              usbfs   defaults,devmode=0666   0       0&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Hope that all helps someone (and me next time I have to do it again and forgot&lt;br /&gt;how I did it last time).&lt;br /&gt;&lt;br /&gt;cheerios.&lt;/yourfavourite&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-8525459936463836849?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/8525459936463836849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=8525459936463836849' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/8525459936463836849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/8525459936463836849'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2003/11/insane-scanner-for-linux.html' title='(In)Sane Scanner for Linux'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-5871080819749503255</id><published>2003-10-11T17:58:00.000+01:00</published><updated>2007-05-25T17:59:29.182+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><title type='text'>1RY CPU coolers for AMD are hard to find</title><content type='html'>I am currently in the process of building a lowish spec 1RU server for a project I'm working on.&lt;br /&gt;&lt;br /&gt;The Server spec is an AMD XP 2000+ 512MB RAM and IDE Disks. (big whoop I hear - I told you it was low spec).&lt;br /&gt;&lt;br /&gt;SO anyways, a 1RU server needs a 1RU CPU heat sink and fan.&lt;br /&gt;&lt;br /&gt;the AMD Chip was the lowest in the Athlon range at the moment. I think it's around 1.6Ghz&lt;br /&gt;but, being the lower end, puts it in the workstation class of course, so do you think I&lt;br /&gt;could find a CPU heat sink and fan for it easy. Nope, issue was (here is Aussie World) that&lt;br /&gt;most suppliers won;t stock it, not a "fast moving item".&lt;br /&gt;&lt;br /&gt;Since it is a 'desktop' class CPU most people just answered, "Nope, don't have any, won't have any"&lt;br /&gt;&lt;br /&gt;So anyway, thanks to the nice mag I buy monthly (just to keep my ear on the hardware ground)&lt;br /&gt;Computer Market (not related to &lt;a href="http://web.archive.org/web/20040925103212/http://www.computermarket.com.au/"&gt;www.computermarket.com.au&lt;/a&gt;)&lt;br /&gt;(where was I.. ). Yeah, this mag, I find an ad&lt;br /&gt;for some guy selling lots of Fan stuff. This is after 2 weeks of calling about 20 suppliers,&lt;br /&gt;going straight to thermaltake.com.au in Melbourne even and asking them. (it's one of their fans I was&lt;br /&gt;after)&lt;br /&gt;&lt;br /&gt;This guy, &lt;a href="http://web.archive.org/web/20040925103212/http://www.comparts.com.au/"&gt;www.comparts.com.au&lt;/a&gt; had one of the Tsunami fans I wanted.&lt;br /&gt;A Socket 462 AMD Athlon 1U (1RU) Heatsink and fan.So $40 later it should be in my mailbox on Monday.&lt;br /&gt;&lt;br /&gt;I'd just like to add that so far service from there is great!&lt;br /&gt;&lt;br /&gt;Also, the 1RU case I have purchased (if your interested also)&lt;br /&gt;was a good buy..&lt;br /&gt;1RU server case: &lt;a href="http://web.archive.org/web/20040925103212/http://www.macase.cn/products/101.htm"&gt;Maccase 101 1RU ATX Case&lt;/a&gt;&lt;br /&gt;   From: &lt;a href="http://web.archive.org/web/20040925103212/http://www.computermarket.com.au/"&gt;Online Marketing Pty Ltd&lt;/a&gt; (Sydney - Often good prices)&lt;br /&gt;   Direct Product Listing &lt;a href="http://web.archive.org/web/20040925103212/http://www.computermarket.com.au/prodDetail.php?ID=402878&amp;amp;catid=1451"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-5871080819749503255?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/5871080819749503255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=5871080819749503255' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/5871080819749503255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/5871080819749503255'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2003/10/1ry-cpu-coolers-for-amd-are-hard-to.html' title='1RY CPU coolers for AMD are hard to find'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-8008904278532925872</id><published>2003-10-08T17:57:00.000+01:00</published><updated>2007-05-25T17:58:29.387+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='random'/><title type='text'>Had a birthday the other day</title><content type='html'>As you do most every year, I have had my 28th birthday.&lt;br /&gt;&lt;br /&gt;Got myself a CD or two&lt;br /&gt;* Grandaddy's 2003 album, title escapes me. Fine listening there&lt;br /&gt;* The Beatles White Album (laying now)&lt;br /&gt;&lt;br /&gt;some parfume (is it perfume for guys or aftershave ?) some nice&lt;br /&gt;smelly Gucci Stuff that is.. and an egg cooker. Bit of a funny&lt;br /&gt;one that..&lt;br /&gt;&lt;br /&gt;Growing up my mum had a Sunbeam Egg Center. It cooked your eggs. :-)&lt;br /&gt;It was shaped like a flying saucer (like a bad B-Grade Movie FLying Saucer).&lt;br /&gt;&lt;br /&gt;The eggs sat it a tray (5 or 6 I think). You filled the lid (had a measure&lt;br /&gt;in it) to your desired 'softness', poured that water into tha base,&lt;br /&gt;turned it on and waited.&lt;br /&gt;&lt;br /&gt;I gues it detects a rise in temp to know when it's boiled off all the water.&lt;br /&gt;&lt;br /&gt;Anyway, a few months back, that got me thinking (I was never getting the&lt;br /&gt;cooked egg thing right by guessing the timing).&lt;br /&gt;I grabbed a saucepan, put in 1/2 cup of water, but on top of the saucepan&lt;br /&gt;the 'asian style' steamer (made of bamboo). Put in my 4 eggs (standard issue&lt;br /&gt;700 grammers).&lt;br /&gt;&lt;br /&gt;Put on the lid, gas on high, and waited.&lt;br /&gt;&lt;br /&gt;I waited probably 5 minutes, the trick I figured was, given I got the amount&lt;br /&gt;of water correct, all I had to do was listen and detect the lack of&lt;br /&gt;water in my pot.&lt;br /&gt;&lt;br /&gt;First few goes weren;t too bad, overcooked them really. I like&lt;br /&gt;a soft/mushy centre.&lt;br /&gt;&lt;br /&gt;SO .. I worked out that 1/2 a cup of water was just right, and you&lt;br /&gt;could just hear when there was no more boiling&lt;br /&gt;water, thus eggs a ready.&lt;br /&gt;&lt;br /&gt;BUT, I wanted a better way. My next thought (untested) is to put&lt;br /&gt;in the saucepan (with the water), some light balls, like ceramic&lt;br /&gt;balls the size of marbles. This way, they would get tossed by the water&lt;br /&gt;making a sound until the water is no more, then you know the eggs&lt;br /&gt;are ready. reduce the amount of water to soften your eggs etc..&lt;br /&gt;&lt;br /&gt;So little beknownst to I, Sara had bought me a 'real egg cooker'&lt;br /&gt;&lt;br /&gt;It's shaped like a chicken, fancy that. and it cheeps when the eggs are&lt;br /&gt;ready.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-8008904278532925872?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/8008904278532925872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=8008904278532925872' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/8008904278532925872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/8008904278532925872'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2003/10/had-birthday-other-day.html' title='Had a birthday the other day'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-7524084332838442348</id><published>2003-10-08T17:56:00.000+01:00</published><updated>2007-05-25T17:57:10.569+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xbox'/><title type='text'>Ahh the joys of the XBox</title><content type='html'>Just today, I've noticed my xbox has stopped a responding on the network.&lt;br /&gt;Not hardware related as the EvoX menu responds with pings (Phew).&lt;br /&gt;&lt;br /&gt;Bit of a fiddle here and there, looks like my XBox ethernet card is failing&lt;br /&gt;to be picked up by the kernel.&lt;br /&gt;&lt;br /&gt;No matter, on to debian xbox 0.4.1 I say.&lt;br /&gt;&lt;br /&gt;I installed this on my brothers XBox and it went ithout a hitch,&lt;br /&gt;my issue is going to be if it will allow me to install over the top of the existing filesystem&lt;br /&gt;since I have my full datastore on there.&lt;br /&gt;&lt;br /&gt;I _think_ it's time to get the datastore (aka my 80G drive) _out_ of the XBox and back&lt;br /&gt;into the server. Im a little nervous about not having that nice control&lt;br /&gt;of the drive when it's in the XBox. Putting it on&lt;br /&gt;the server again means I can still have nfs'd.&lt;br /&gt;&lt;br /&gt;Ahh ramblings. .. and All I want to do is get on with the other big project&lt;br /&gt;Im working on.&lt;br /&gt;&lt;br /&gt;Bah!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-7524084332838442348?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/7524084332838442348/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=7524084332838442348' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/7524084332838442348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/7524084332838442348'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2003/10/ahh-joys-of-xbox.html' title='Ahh the joys of the XBox'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-250596392359064517</id><published>2003-08-21T17:52:00.000+01:00</published><updated>2007-05-25T18:32:45.911+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='sybase'/><title type='text'>A Nifty SQL for T-SQL (Sybase and MS-SQL)</title><content type='html'>&lt;div class="storyTitle"&gt;A nifty SQL for T-SQL (Sybase and MSSQL)   &lt;a href="http://web.archive.org/web/20040925103212/http://www.thebuckland.com/?cat=9" title="category: web development"&gt;&lt;span class="storyCategory"&gt;[web development]&lt;/span&gt;&lt;/a&gt; -  &lt;span class="storyAuthor"&gt;ramon - ramon@thebuckland.com&lt;/span&gt; @ &lt;a href="http://web.archive.org/web/20040925103212/http://www.thebuckland.com/index.php?m=200308#21"&gt;12:31:24&lt;/a&gt; &lt;/div&gt;   When playing with SQL I often find that I create some massive SQL statement ..  like&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;select blah,blah, (case foo when ... end)&lt;br /&gt;from ...&lt;br /&gt;&lt;pre&gt;&lt;span style="font-family:georgia;"&gt;and i need to put that into a temp table.. &lt;/span&gt;&lt;span style="font-family:georgia;"&gt;what should the temp table look like was &lt;/span&gt;&lt;span style="font-family:georgia;"&gt;always the next step. So .. thinking about it&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;I decided to hack up my solution.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Insert the select statement into a #temp_table&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;select *&lt;br /&gt;into #my_tmp_table&lt;br /&gt;from ...&lt;/pre&gt;&lt;span style="font-family:times new roman;"&gt;and then I wrote this whopper to extract out of the sys tables&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;what the Temp table looks like as a CREATE statement&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;It's a bit crude but it will give the basic overview of what you want&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;select sc.name +  ' ' + st.name +&lt;br /&gt;&lt;pre&gt;       (case st.name&lt;br /&gt;     when 'varchar' then&lt;br /&gt;         '(' + convert(varchar,sc.length) + ') ' + (case status when 0 then 'not null' else 'null' end) + ','&lt;br /&gt;     when 'numeric' then&lt;br /&gt;         '(' + convert(varchar,sc.prec) + ',' + convert(varchar,sc.scale) + ') ' + (case status when 0 then 'not null' else 'null' end) + ','&lt;br /&gt;     when 'decimal' then&lt;br /&gt;         '(' + convert(varchar,sc.prec) + ',' + convert(varchar,sc.scale) + ') ' + (case status when 0 then 'not null' else 'null' end) + ','&lt;br /&gt;     else&lt;br /&gt;         ' ' + (case status when 0 then 'not null' else 'null' end) + ','&lt;br /&gt;      end) ,-- sc.*&lt;br /&gt;from tempdb..syscolumns sc&lt;br /&gt;  inner join systypes st&lt;br /&gt;  on st.usertype = sc.usertype&lt;br /&gt;where id in (select id&lt;br /&gt;           from tempdb..sysobjects&lt;br /&gt;          where name like "#transaction%")&lt;/pre&gt;&lt;span style="font-family:times new roman;"&gt;HTH.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;Ramon&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-250596392359064517?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/250596392359064517/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=250596392359064517' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/250596392359064517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/250596392359064517'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2003/08/nifty-sql-for-t-sql-sybase-and-mssql.html' title='A Nifty SQL for T-SQL (Sybase and MS-SQL)'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-443646568878574723</id><published>2003-06-08T17:48:00.000+01:00</published><updated>2007-05-25T17:49:42.814+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xbox'/><title type='text'>My XBOX is Up</title><content type='html'>&lt;div class="storyTitle"&gt;xbox is up   &lt;a href="http://web.archive.org/web/20040925103212/http://www.thebuckland.com/?cat=11" title="category: xbox"&gt;&lt;span class="storyCategory"&gt;[xbox]&lt;/span&gt;&lt;/a&gt; -  &lt;span class="storyAuthor"&gt;ramon - ramon@thebuckland.com&lt;/span&gt; @ &lt;a href="http://web.archive.org/web/20040925103212/http://www.thebuckland.com/index.php?m=200306#20"&gt;15:15:25&lt;/a&gt; &lt;/div&gt;   we finally did it. My Mod took a very long to to complete (all of about three weeks I would guess).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What Happened I here you ask?&lt;/b&gt;&lt;br /&gt;The CromWell BIOS that came with my Modchip did not sit too well with&lt;br /&gt;heat issues.&lt;br /&gt;&lt;br /&gt;Each time Tux the penguin started to go across the screen, he would stop&lt;br /&gt;about halfway and freeze. This became worse and worse upon each succession of boot.&lt;br /&gt;After about two or three goes. No go. The XBOX would show  the red circle&lt;br /&gt;as if a hardware failure had occurred.&lt;br /&gt;&lt;br /&gt;Disable the Modchip however, and all was well.&lt;br /&gt;&lt;br /&gt;I spoke with a few people on IRC (Wilber #ozxchip) whom pointed me to info&lt;br /&gt;regarding the cromwell and this very issue.&lt;br /&gt;&lt;br /&gt;My solution was to re flash the chip with a later version, or try&lt;br /&gt;a different BIOS altogether.&lt;br /&gt;&lt;br /&gt;So I decided to go the programmer route.. being a hands on that I am&lt;br /&gt;I decided to make the CheapLPC Programmer at &lt;a href="http://web.archive.org/web/20040925103212/http://cheaplpc.com/"&gt;this site&lt;/a&gt;&lt;br /&gt;This was most wonderfully pointed out to me by GreenGian (#ozxchip) whom happens to run&lt;br /&gt;that site. He had some good tips.&lt;br /&gt;&lt;br /&gt;So off I went on my merry way.&lt;br /&gt;&lt;br /&gt;The Programmer proved to be a tough nut to crack for me.&lt;br /&gt;&lt;br /&gt;Spending about $15 all up on parts I started with the power circuit.&lt;br /&gt;My brother helped out there where I used a circuit with a voltage regulator (opted&lt;br /&gt;not to use USB because, well I didn't).&lt;br /&gt;&lt;br /&gt;The voltage circuit was perfect, 3.32v all the time (could go up or&lt;br /&gt;down in increments of about .01v according to my multi-meter.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Day 4&lt;/i&gt;&lt;br /&gt;So once that was complete, I then had the lovely task of putting the&lt;br /&gt;whole thing together&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Day 6&lt;/i&gt;&lt;br /&gt;After a few days of rest The circuit was complete and the weekend was here.&lt;br /&gt;I sat down a late Friday evening with my trusty multi-meter, my beauty Laptop&lt;br /&gt;and the programmer.&lt;br /&gt;&lt;br /&gt;After a bit of sorting stuff out, I had the milksop software pumping&lt;br /&gt;out some data for me.&lt;br /&gt;&lt;br /&gt;On Windows XP. milksop was showing 1100 fairly consistency (1100 being the output&lt;br /&gt;of it's testing procedure).&lt;br /&gt;&lt;br /&gt;Knowing I was to be expecting 1111 I decided to ditch XP and I put the&lt;br /&gt;programmer into the back of my trusty Linux Server of 2 years.&lt;br /&gt;&lt;br /&gt;Now here it was worse, 1100 1010 0011 1101 and stuff like that ..&lt;br /&gt;but consistently unusual.&lt;br /&gt;&lt;br /&gt;I slowly (after about 2 hours, and many conversations with my brother again) worked&lt;br /&gt;out that the issue was that I had some software (a kernel module paraport)&lt;br /&gt;listening in on my conversations on the alp0 port and was stuffing&lt;br /&gt;my readings.&lt;br /&gt;&lt;br /&gt;telinit 1 into safe (root user only) mode&lt;br /&gt;and check ..&lt;br /&gt;&lt;br /&gt;better but not good. 1101 and then 1010 on and off.&lt;br /&gt;&lt;br /&gt;.. now Here I thought, aha! Software on the XP was stuffing&lt;br /&gt;my readings as well. and sure enough, at 3am. It all came together..&lt;br /&gt;the Programmer testing software showed up 1111 and n o 1010 every 20 seconds.&lt;br /&gt;&lt;br /&gt;(I shutdown the print spooler).&lt;br /&gt;&lt;br /&gt;So onto re-flashing my modchip.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;no go either&lt;/b&gt;&lt;br /&gt;The actually flashing never succeeded, The milksop software wonderfully&lt;br /&gt;written by Andy Green could not detect my device and I had to concede&lt;br /&gt;defeat on my programmer (5am).&lt;br /&gt;&lt;br /&gt;I packed up and washed the dishes.&lt;br /&gt;&lt;br /&gt;9am rolls around and I chucked all my gear in bags&lt;br /&gt;and hopped on a train (little to know trains weren't running and I would&lt;br /&gt;be on a 2.5 hr buss trip) I made my way to the Central Coast at my brothers place.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Install fest of XBOX v1.1 and v1.0&lt;/b&gt;&lt;br /&gt;Jono and I discussed the dilema, he being a fully qualified electrical and&lt;br /&gt;electronic engineer, in his wisdom said, "Forget the programmer, we will spend&lt;br /&gt;hours on this thing as it's hard stuff".&lt;br /&gt;&lt;br /&gt;Our other option: Mod his v1.0 XBox (Which we had to do anyway) and flash my&lt;br /&gt;chip.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The v1.0 Mod&lt;/b&gt;&lt;br /&gt;Jono started on his mod, got the solder out of the LPC header (I didn't have to&lt;br /&gt;do that thankfully) and put in the pins.&lt;br /&gt;&lt;br /&gt;Identifying the d0 port on the back he started to fix his wire, and after a&lt;br /&gt;few bad takes, BANG! the d0 point just came right off the board and also broke the&lt;br /&gt;track.&lt;br /&gt;&lt;br /&gt;Bugger! But Jono, determined as he is, stuck at it, With my trusty B and W camera&lt;br /&gt;lens from an old video camera helping as his eye, he fixed that track (even De-soldered&lt;br /&gt;the CAP next to the d0 to get at the point so he could put in his wire).&lt;br /&gt;&lt;br /&gt;After about 2 hours of fun (about 4am Sat just gone) he had the mod installed.&lt;br /&gt;Scary stuff, we almost lost the XBox then.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Onto flashing my chip&lt;/b&gt;&lt;br /&gt;Thankfully i brought 3 CD-RW's with me and we proceeded to burn the ozxflash.&lt;br /&gt;&lt;br /&gt;After about an hour, we had my chip flashed with Xecutor-2 BIOS and .. it worked!&lt;br /&gt;&lt;br /&gt;I was able to boot and also play my games still.&lt;br /&gt;&lt;br /&gt;So next thing was to get my 80G drive in there. I booted trusty EvolutionX&lt;br /&gt;and found the FTP server, Backed up the data and then went on&lt;br /&gt;to do the HDD swap trick.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;It goes horribly wrong 2&lt;/b&gt;&lt;br /&gt;Now, I've been working IT for about 9 year and in my time, I have hot swapped&lt;br /&gt;one or two drives. (that weren't meant to be hot swapped) and it never did&lt;br /&gt;what I wanted and I was always worried about damaging them.&lt;br /&gt;&lt;br /&gt;Well wouldn't you know it. I hot swap this drive following their instructions&lt;br /&gt;very carefully and it .. well I now have a dead 10G harddrive. (I'm yet&lt;br /&gt;to determine what exactly has gone wrong, but Jono suspects that I have damaged the buffer&lt;br /&gt;chip of something like that on the PCB of the drive).&lt;br /&gt;&lt;br /&gt;When you boot a PC with this 10G in, it detects OK, but then says (for eg:) Secondary Master Hard&lt;br /&gt;Disk Fail. A clear indication that the computer was not able to contact the drive.&lt;br /&gt;&lt;br /&gt;Unbeknownst to us. I continued on thinking, this HDD swap didn't work, there&lt;br /&gt;must be another way to get my drive in the machine.&lt;br /&gt;&lt;br /&gt;I plugged the 10G back into my XBox after the failed attempts and ..&lt;br /&gt;&lt;br /&gt;&lt;b&gt;XBox no longer liked my drive&lt;/b&gt;&lt;br /&gt;The XBox would start it's little BIOS routine and make a beautiful BRRRRR&lt;br /&gt;sound (brief, about a 1/2 a second or so) before it shows the X logo.&lt;br /&gt;&lt;br /&gt;Noticing this straight away, I got worried. of course, the XBox only gives&lt;br /&gt;error codes and all I could determine was... the DVD would no&lt;br /&gt;longer eject, The XBox would boot to my MS Dashboard (I hadn't&lt;br /&gt;installed EvolutionX Dashboard) and it would no longer boot off any DVD (play games etc).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;where's my paddle?&lt;/b&gt;&lt;br /&gt;When I disabled the XBox BIOS, i still got the brrr sound but then I would get an error&lt;br /&gt;code of 6 and a notice to contact Tech support.&lt;br /&gt;&lt;br /&gt;Not to be out done. I decided, put this drive in Jono's XBox and see how&lt;br /&gt;it goes... same thing .. BRRRRR.&lt;br /&gt;&lt;br /&gt;I took the drive out (11PM there abouts) and put it in the spare PC we had and that's&lt;br /&gt;when I first saw the "Secondary Master Hard Disk Fail" having seen this more than a few thousand&lt;br /&gt;times over the past 9 year I knew exactly what had happened, my heart sank. I had done in&lt;br /&gt;my HDD (which incidently I was going to flog off on EBay after I had unlocked it)..&lt;br /&gt;&lt;br /&gt;Not to worry .. I had the 80G to put in anyways! :-)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3am and I fall asleep&lt;/b&gt;&lt;br /&gt;So we put the 80G in my machine and it booted CD-RW's again, put it in Jono's XBox and same thing.&lt;br /&gt;&lt;br /&gt;I did some fishing around and Found reference to Slayers ISO Tools. Looked like it&lt;br /&gt;could format my HDD, Brilliant!.&lt;br /&gt;&lt;br /&gt;Download that and burnt it to a CD-RW (about 0th or 10th CD-RW we had reburmt that evening).&lt;br /&gt;&lt;br /&gt;Loaded it up and it had a few options for what i was looking for. One, Format Drive and&lt;br /&gt;install EvoX.. Select .. wait..&lt;br /&gt;&lt;br /&gt;Looks good.&lt;br /&gt;&lt;br /&gt;Put it on My XBox .. Error 13. No Default DashBoard found!!! Bugger!&lt;br /&gt;&lt;br /&gt;I think, from memory it was at about this time that I fell asleep.&lt;br /&gt;I was sitting on the couch and .. next thing I know, I woke up to Jono was asking me a question.&lt;br /&gt;I was out to it. I had been up since 7am on the Friday morning and it was now 2am on Sunday morning. That makes about 43 hrs (I had about a 40min sleep on the bus).&lt;br /&gt;&lt;br /&gt;That brief moment of sleep ... it woke me up.. I thought more, Jono and I talked&lt;br /&gt;more and about an hour later decided to call it a night.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;A Remote Control&lt;/b&gt;&lt;br /&gt;I woke at about 10am that morning. (Jono was up much earlier trying to fix his 2nd TV's&lt;br /&gt;remote control so we could have 2 TV's to be doing installs and setups with.).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Why a remote ? Well the previous night we tried to get his little TV to work but the TV (as like many, don't have the TV/AV switch on the TV, only the remote, and as a result we weren't able to&lt;br /&gt;switch the TV to AV to see XBox. (and had no Video Player to act as an AV to RF converter) ah well.&lt;br /&gt;&lt;br /&gt;This brief attempt at fixing the remote didn't work ( I suspect Jono spent a good hour&lt;br /&gt;or two doing that :-).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Config Magic&lt;/b&gt;&lt;br /&gt;Enter Config Magic. So I jumped on IRC again and spoke with some guy&lt;br /&gt;called I_am_zim on #xbox-scene. He mentioned this software "Config Magic" but didn't&lt;br /&gt;mention what it was. I jumped onto the old XBox place and pulled it down.&lt;br /&gt;&lt;br /&gt;After a quick Format and burn of the CD_RW we saw this cool tool booting up&lt;br /&gt;on Jono's XBox. We put my 80G drive into his and played abit .. inadvertently locking&lt;br /&gt;it to his XBox ..&lt;br /&gt;well little did we know .. this cost us about 4 hours of pain and grief,&lt;br /&gt;&lt;br /&gt;&lt;b&gt;A locked drive can only stay locked for so long&lt;/b&gt;&lt;br /&gt;Locking my 80G Drive to his XBox . meant that now .. we were seeing&lt;br /&gt;a different error code on my XBox .. 9 I think it was. well many boots&lt;br /&gt;later I started to get this sick feeling in my throat that, not only had I&lt;br /&gt;destroyed my 10G drive, but I had also stuffed the IDE Bus on My XBox as well.&lt;br /&gt;&lt;br /&gt;We tried all sorts of stuff, but nothing would make my XBox boot.&lt;br /&gt;Sometimes I would see an error 16 and at one stage, we saw this Error&lt;br /&gt;page but it was Half there Cut diagonally, top left, to bottom right&lt;br /&gt;and the bottom half was black (It was the Xecutor2 error page) and the error&lt;br /&gt;number was 16.&lt;br /&gt;&lt;br /&gt;OF course, the PC we had could not read my 80G drive (BIOS was not supportive :-)&lt;br /&gt;and that just made stuff hard.&lt;br /&gt;&lt;br /&gt;The drive worked in Jono's, not in mine.&lt;br /&gt;&lt;br /&gt;Finally, we  started at the beginning again.&lt;br /&gt;&lt;br /&gt;Downloaded Cromwell 1.22dev &lt;a href="http://web.archive.org/web/20040925103212/http://www.thebuckland.com/xbox-linux.sf.net/"&gt;from xbox-linux.sf.net&lt;/a&gt;and flashed my chip (In the 1.0 XBox). With this BIOS we could actually&lt;br /&gt;see what was going on.&lt;br /&gt;&lt;br /&gt;We put in a 1.2G Hard Drive into my XBox and booted Cromwell. It locked up .. Not too worry.. grabbed my trusty BIG fan and .. whoohoo! it went further, even booted the debian install CD.&lt;br /&gt;&lt;br /&gt;SO .. this proved that my XBox was still okay, but there was something wary with the 80G HardDrive. (and my 10G hee hee).&lt;br /&gt;&lt;br /&gt;Put the 80G in and debian install showed all this BUS Errors, failed to read from&lt;br /&gt;disk error seeking etc etc .. now I should have clicked at this stage but not&lt;br /&gt;being around XBox stuff for long it wasn't obvious.&lt;br /&gt;&lt;br /&gt;Incidently, the 1.2G Drive freaked out Xeceutor2 BIOS (and native XBox BIOS, possibly because&lt;br /&gt;it is too small and they were trying to read past the end of the drive looking for&lt;br /&gt;the non-partition table FATX partitions.&lt;br /&gt;&lt;br /&gt;So a few more plays with trying various things, (seeing if I could reformat my drive in another&lt;br /&gt;machine (which required flashing it's BIOS to support 80G drives) and then&lt;br /&gt;&lt;br /&gt;&lt;b&gt;a Road to freedom&lt;/b&gt;&lt;br /&gt;and then... (a quick toilet stop)  and bang! it hit me .. we had locked my drive&lt;br /&gt;to Jono's XBox.&lt;br /&gt;&lt;br /&gt;So .. fired up this cool tool Config Magic and unlocked it, re-flashed my BIOS BACK&lt;br /&gt;to Xecutor2.&lt;br /&gt;&lt;br /&gt;We did this because even though the 1.22dev still booted okay it locked up&lt;br /&gt;through an attempt at install on the 1.2G drive which was to me a heat problem again, not unlike the 1.18 stuff I saw. With the 1.18 I used the fan as well but never had ANY luck, so they must be close&lt;br /&gt;to fixing that issue because the 1.22dev worked so much better.&lt;br /&gt;&lt;br /&gt;After a re-flash, and confirmed that my drive worked in mine, we backed up&lt;br /&gt;Jono's drive and then copied stuff onto my 80G Drive and then I finally&lt;br /&gt;after 2 weeks and then a MEGA install fest of 16 hours .. had my XBox booting&lt;br /&gt;EvolutionX! (not wanted that, as it is running Linux solely).&lt;br /&gt;&lt;br /&gt;Whoa!.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Unplug that DVD for me could you?&lt;/u&gt;&lt;br /&gt;Oh did I mention, because Jono's box was 1.0, he had a Thomson drive and none&lt;br /&gt;of the CD-Rw's we had would boot on that drive (additional to the fact that Jono's&lt;br /&gt;CD-RW drive was freezing when it was trying to burn his CD-RW's he had ..).&lt;br /&gt;&lt;br /&gt;We used my Philips Drive (comes with most of the v1.1 XBoxes apparently) and decided&lt;br /&gt;to between the two XBox's. I think I swapped that DVD out about 20 or 30 times.&lt;br /&gt;&lt;br /&gt;so because we had three Verbatim CD-RW's we rotated then on a number system.&lt;br /&gt;1 2 and 3 and a sheet that showed what was on them. (go pen and paper).&lt;br /&gt;&lt;br /&gt;The Stuff we were rotating on three CD's over the whole time was&lt;br /&gt;&lt;br /&gt;EvolutionX&lt;br /&gt;Ozxflash&lt;br /&gt;bios's for Ozxflash&lt;br /&gt;Slayers tool (yup, I_am_zim said it was useless)&lt;br /&gt;Config Magic &lt; --  this saves the world. Debian Install CD Debian Boot CD  All of the time, a Quick Erase using CD Creator was okay to make the CD. We used Disk At Once.2 speed.  &lt;installing&gt;&lt;br /&gt;&lt;br /&gt;When I finally booted debian install on my XBox with my 80G drive attached&lt;br /&gt;It started okay, but wouldn't login to X properly.. no probs..&lt;br /&gt;I flicked to Console and started the install of XBOXLinuxInstall.&lt;br /&gt;&lt;br /&gt;It seemed to come up okay but . then halfway through copying the&lt;br /&gt;files saw all these errors everyone and then about unable to read from&lt;br /&gt;device hdb (the DVD) ..&lt;br /&gt;&lt;br /&gt;I though, ahh, maybe she'll be okay.. but when I rebooted into the install&lt;br /&gt;vi wouldn;t work.&lt;br /&gt;"Bus Error"&lt;br /&gt;&lt;br /&gt;was the err message.&lt;br /&gt;No worries.&lt;br /&gt;&lt;br /&gt;ssh the config files off and edit them on the server and transfer back ..&lt;br /&gt;"Bus Error"&lt;br /&gt;&lt;br /&gt;ifup eth0&lt;br /&gt;"Bus Error"&lt;br /&gt;&lt;br /&gt;hrmmm, maybe those errors had something to do with my bus errors.&lt;br /&gt;jono's Linux Install worked okay. (he used CD-RW 1 I think, whereas mine&lt;br /&gt;was from CD-RW 3, just the numbering system).&lt;br /&gt;&lt;br /&gt;I decided to call it a day at Jono's and came home.&lt;br /&gt;&lt;br /&gt;&lt;monday&gt;&lt;br /&gt;I wake up and did a few chores. (make chicken soup).&lt;br /&gt;&lt;br /&gt;and reformatted (COMPLETE) one of Jono's CD-RW's he had .. lMEDIA was the brand.&lt;br /&gt;&lt;br /&gt;Waited, the reburnt Ed'd Debian to the CD and ..&lt;br /&gt;&lt;br /&gt;it installed .. no errors I have no BUS errors.&lt;br /&gt;&lt;br /&gt;AND ..&lt;br /&gt;&lt;br /&gt;here I am .. typing out this beautiful story of sadness and joy on my IBM&lt;br /&gt;USB keyboard looking at a fuzzy Mozilla Browser on my 48cm colour TV with my&lt;br /&gt;XBox pulling down deb relevant to debian unstable whilst listening to Sting&lt;br /&gt;on my CD player (not the XBox yet, coming).&lt;br /&gt;&lt;br /&gt;And I hope this was a nice read and you picked up some tips from the&lt;br /&gt;pain Jono and I felt.&lt;br /&gt;&lt;br /&gt;:-)&lt;/monday&gt;&lt;/installing&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-443646568878574723?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/443646568878574723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=443646568878574723' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/443646568878574723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/443646568878574723'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2007/05/my-xbox-is-up.html' title='My XBOX is Up'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-1724175821365921716</id><published>2003-06-01T15:13:00.000+01:00</published><updated>2007-05-25T17:46:42.380+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xbox'/><title type='text'>Problems booting the Cromwell BIOS on the XBox</title><content type='html'>So I installed the modchip all okay. But no luck being able to boot the cromwell BIOS (GPL BIOS for the XBox).&lt;br /&gt;&lt;br /&gt;I found a survey &lt;a href="http://web.archive.org/web/20040925103212/http://www.vvsoft.fi/xboxsite/crsurvey/"&gt;for failed cromwell booting info&lt;/a&gt; so go there and help out.&lt;br /&gt;&lt;br /&gt;I will be tryong to flash up to a later version at some stage soon.&lt;br /&gt;&lt;br /&gt;in the mean time, it's still an XBox (shame im not much of a gamer :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-1724175821365921716?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/1724175821365921716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=1724175821365921716' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/1724175821365921716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/1724175821365921716'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2003/06/problems-booting-cromwell-bios-on-xbox.html' title='Problems booting the Cromwell BIOS on the XBox'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-8393005817775206257</id><published>2003-05-24T17:45:00.000+01:00</published><updated>2007-05-25T17:49:03.266+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='drumming'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><title type='text'>Drummers Click Alternative</title><content type='html'>&lt;div class="storyTitle"&gt;Drummers click alternative   &lt;a href="http://web.archive.org/web/20040925103212/http://www.thebuckland.com/?cat=1" title="category: myworld"&gt;&lt;span class="storyCategory"&gt;[myworld]&lt;/span&gt;&lt;/a&gt; -  &lt;span class="storyAuthor"&gt;ScottiouS - &lt;/span&gt;@ &lt;a href="http://web.archive.org/web/20040925103212/http://www.thebuckland.com/index.php?m=200305#18"&gt;14:45:02&lt;/a&gt; &lt;/div&gt;   I've found a great solution to the annoying beep in your ear that keeps you in time.&lt;br /&gt;&lt;br /&gt;A friend let me in on this one which I haven't tried yet but I'm sure that you will be interested Ramon.&lt;br /&gt;&lt;br /&gt;Well you know the shock packs you buy for games which you strap to your back and it pumps a low level sound or something into your back. Well simply get one and plug it straight into your click track's headphones output and it'll pump the click into the pack. Neat hey!&lt;br /&gt;&lt;br /&gt;You can buy them from JB Hi-Fi for about $20&lt;br /&gt;&lt;br /&gt;And when your not using it on ur drums plug it into the tv out and feel the tremble of the movies you watch.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-8393005817775206257?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/8393005817775206257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=8393005817775206257' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/8393005817775206257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/8393005817775206257'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2007/05/drummers-click-alternative.html' title='Drummers Click Alternative'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-174260543641245745</id><published>2003-05-24T17:42:00.000+01:00</published><updated>2007-05-25T17:43:47.275+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>Music via JavaScript - (Reading the floppy drive from the browser ? :-)</title><content type='html'>Umm,&lt;br /&gt;&lt;br /&gt;Click on this link to take you to some weird javascript that uses your floppy&lt;br /&gt;to make music, and yes I wrote it ;)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://web.archive.org/web/20040925103212/http://www.thebuckland.com/floppy_music.html" target="_top"&gt;floppy music&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(just couldn't resist could you.. :-)&lt;br /&gt;and They said I'd grow up!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-174260543641245745?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/174260543641245745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=174260543641245745' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/174260543641245745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/174260543641245745'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2003/05/music-via-javascript-reading-floppy.html' title='Music via JavaScript - (Reading the floppy drive from the browser ? :-)'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-2296979107495926838</id><published>2003-05-21T17:41:00.000+01:00</published><updated>2007-05-25T17:42:17.684+01:00</updated><title type='text'>MOding the XBox with an OZXChip</title><content type='html'>Reason: to run linux..&lt;br /&gt;details so far.&lt;br /&gt;&lt;br /&gt;I mod'd the xbox.&lt;br /&gt;&lt;br /&gt;The new BIOS screen loaded up straight away.. no issues. (so far)&lt;br /&gt;(yet to boot linux or put in new harddrive)&lt;br /&gt;&lt;br /&gt;A good note I read was, before you mod the xbox, burn a copy of&lt;br /&gt;a music CD and see if you can use the standard Xbox music copy&lt;br /&gt;thingo to 'rip' it to the harddrive, if you can then the CD&lt;br /&gt;brand you used should be okay, some DVD drives don't like CD-R's&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I used a cheapey CDR and it ripped okay.. I have heaps of CDRW's&lt;br /&gt;which are said to have far less problems.&lt;br /&gt;&lt;br /&gt;I put the BIOS disable/enable switch at the back&lt;br /&gt;(drilled hole in plastic and metal sheeting)&lt;br /&gt;I completely dismantled it to do this though.&lt;br /&gt;&lt;br /&gt;There was a few tricks, in all.&lt;br /&gt;&lt;br /&gt;1. the picture in 4b of instructions does not give a clear view&lt;br /&gt;   of which pin to solder the wire onto.&lt;br /&gt;&lt;br /&gt;   This piccy helped me&lt;br /&gt;   &lt;a href="http://web.archive.org/web/20040925103212/http://207.44.195.206/newxbox12.jpg"&gt;modchip pikky&lt;/a&gt;&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;2. my wire was a little taught for my liking if I went around the board&lt;br /&gt;   so I ran it through one of the spare holes in the LPC plug where the&lt;br /&gt;   modchip goes.&lt;br /&gt;  &lt;br /&gt;   the wire can be soldered to the top or bottom,(i think)&lt;br /&gt;   but the bottom has a lot better access and less obstacles.&lt;br /&gt;&lt;br /&gt;3  to remove the metal tray, you have to remove the front panel&lt;br /&gt;    after you have removed the motherboard, usb ports, powersupply.&lt;br /&gt;&lt;br /&gt;     the front panel is clipped on the sides and three clips along the front&lt;br /&gt;     inside (easy to see with everything removed)&lt;br /&gt;     I just gently prised one side clip and the closest front clip to that&lt;br /&gt;     side to pop it off.&lt;br /&gt;&lt;br /&gt;4.    The fan, unclips at the bottom, either side, and slides up and&lt;br /&gt;      unclips again at the bottom to come out.&lt;br /&gt;&lt;br /&gt;the back of my xbox looks like&lt;br /&gt;&lt;br /&gt;                        (x)  (o)&lt;br /&gt;     [vga/soundport]             [net]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(x) is the switch.. it's high and clear of the board inside and&lt;br /&gt;plenty of room there, I think it's nicer&lt;br /&gt;at the back.&lt;br /&gt;&lt;br /&gt;(o) is a dummy hole (only in metal, not in plastic)&lt;br /&gt;next to the installed toggle, i put 2nd hole in the metal&lt;br /&gt;sheet, but not in the plastic, (in case i want to add that 2nd toggle&lt;br /&gt;for BIOS protection or something other later).&lt;br /&gt;&lt;br /&gt;ramon&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-2296979107495926838?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/2296979107495926838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=2296979107495926838' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/2296979107495926838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/2296979107495926838'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2003/05/moding-xbox-with-ozxchip.html' title='MOding the XBox with an OZXChip'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-4503288570537758923</id><published>2003-05-19T17:39:00.000+01:00</published><updated>2007-05-25T17:40:51.673+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='printers'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><title type='text'>Paper jams on HP LaserJet and Canon LBP Printers (a free fix)</title><content type='html'>Does you Laser printer take too many sheets ?&lt;br /&gt;&lt;br /&gt;Does it Jam when it takes too many sheets ;)&lt;br /&gt;&lt;br /&gt;This might be your answer, HP has it.&lt;br /&gt;&lt;br /&gt;Found a fix for it (a bit left field).&lt;br /&gt;Apparently there is a fault with some&lt;br /&gt;HP lasejets and the fix is provided by HP &lt;br /&gt;&lt;a href="http://web.archive.org/web/20040925103212/http://www.hp.com/support/ljsepkit/"&gt;HP Support&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Read more from these URL's  &lt;a href="http://web.archive.org/web/20040925103212/http://www.google.com/search?hl=en&amp;lr=&amp;amp;ie=UTF-8&amp;q=%22%2Bwww.hp.%2Bcom/support/ljsepkit/%22"&gt;google&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The fix is a tool they send out, for Free and you use this tool to fix the printer.&lt;br /&gt;&lt;br /&gt;Basically, Our printer is a Canon LBP-660 and about a year a go it started taking&lt;br /&gt;2 then 3 then more sheets of paper.&lt;br /&gt;&lt;br /&gt;I scouted aroud for a DIY fix and found a reference somwehere for paper jams&lt;br /&gt;and the HP laserjet. Knowing that some printer engines are the same (manufactured&lt;br /&gt;by same company) I did some more googling and found that the canon printer I have&lt;br /&gt;is similar to a HP one (just ngine wise, not firmware interface etc).&lt;br /&gt;&lt;br /&gt;So, thought I'd give it a go, (it was free).&lt;br /&gt;&lt;br /&gt;The parcel took about 2 months to arrive.. but, it worked.&lt;br /&gt;&lt;br /&gt;The 'thing' that HP gives away is like a sticky label that is installed&lt;br /&gt;into the printer using this tool they provide. (weird)&lt;br /&gt;&lt;br /&gt;.. why post this now? Well 9 months has past and the printer is at it again&lt;br /&gt;and luckily I have found the URL. so .. when I need to find it next time&lt;br /&gt;I can just look on my website ;)&lt;br /&gt;&lt;br /&gt;I can't remember which of the printer 'tool' version I ordered. Maybe it&lt;br /&gt;was for the 6L that I used. The difference is in the shape of the tool&lt;br /&gt;that they provide.&lt;br /&gt;&lt;br /&gt;The tool is made of cardboard&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-4503288570537758923?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/4503288570537758923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=4503288570537758923' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/4503288570537758923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/4503288570537758923'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2003/05/paper-jams-on-hp-laserjet-and-canon-lbp.html' title='Paper jams on HP LaserJet and Canon LBP Printers (a free fix)'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-6905123645726442932</id><published>2003-04-21T17:33:00.000+01:00</published><updated>2007-05-25T17:35:51.312+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='palm'/><title type='text'>First Sync in linux with my m505</title><content type='html'>First thing would be to get the palm pilot syncing. I have a Palm m505&lt;br /&gt;  and it comes with a USB cradle only. First thought was that I would need&lt;br /&gt;  to go out an buy a serial sync cable to get the console.&lt;br /&gt;&lt;br /&gt;  But thanks to some awesome work, there is the visor module (created from&lt;br /&gt;  the original HandSpring Visor as it was the first Palm to have USB&lt;br /&gt;  as it's syncing technology.&lt;br /&gt;&lt;br /&gt;  So .. to get syncing...&lt;br /&gt;  I used  this site to do my first linux sync.&lt;br /&gt;  &lt;a href="http://web.archive.org/web/20040925103212/http://home.earthlink.net/%7Ecleryd/"&gt;http://home.earthlink.net/~cleryd/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;  Best part of all this was simple steps. Because I run debian (any many&lt;br /&gt;  other distros support this also), all I had to do was&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;      modprobe visor&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  This loaded the module into the kernel.&lt;br /&gt;  and I saw this spew up on the console, always a good sign (no errors)&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;      usb.c: registered new driver serial&lt;br /&gt;&lt;br /&gt;      usbserial.c: USB Serial support registered for Generic&lt;br /&gt;&lt;br /&gt;      usbserial.c: USB Serial Driver core v1.4&lt;br /&gt;&lt;br /&gt;      usbserial.c: USB Serial support registered for Handspring Visor&lt;br /&gt;&lt;br /&gt;      usbserial.c: USB Serial support registered for Palm 4.0&lt;br /&gt;&lt;br /&gt;      usbserial.c: USB Serial support registered for Sony Clié 3.5&lt;br /&gt;&lt;br /&gt;      usbserial.c: USB Serial support registered for Sony Clié 4.0&lt;br /&gt;&lt;br /&gt;      visor.c: USB HandSpring Visor, Palm m50x, Sony Clié driver v1.5&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  next bit was to get the pilot-link&lt;br /&gt;&lt;br /&gt;  (thanks debian ...)&lt;br /&gt;     &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;      apt-get install pilot-link&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  I notice there is another 'type' of syncing software, coldsync.&lt;br /&gt;  Didn't / haven't tried it, will tell more when I know more I guess.&lt;br /&gt;&lt;br /&gt;  So now, the test, let's back this baby up.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;      mkdir somedir&lt;br /&gt;&lt;br /&gt;      cd somedir&lt;br /&gt;&lt;br /&gt;      pilot-xfer -p /dev/ttyUSB1 -b .&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      * Press the HotSync *&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  :-( didn't work..&lt;br /&gt;&lt;br /&gt;  oh wait, I need the core usb stuff loaded...&lt;br /&gt;  (* took a guess, ohci (either that or uhci, there is a way to&lt;br /&gt;  work out what type of bridge you have, it's all in the lspci&lt;br /&gt;  from memory) *)&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;      modprobe usb-ohci&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  That  worked !!&lt;br /&gt;&lt;br /&gt;  So now , try again,&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;      pilot-xfer -p /dev/ttyUSB1 -b .&lt;br /&gt;&lt;br /&gt;      * Press the HotSync button, whammo! *&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  I saw this on the console..&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;      usbserial.c: Palm 4.0 converter detected&lt;br /&gt;&lt;br /&gt;      visor.c: Palm 4.0: Number of ports: 2&lt;br /&gt;&lt;br /&gt;      visor.c: Palm 4.0: port 1, is for Generic use and is bound to ttyUSB0&lt;br /&gt;&lt;br /&gt;      visor.c: Palm 4.0: port 2, is for HotSync use and is bound to ttyUSB1&lt;br /&gt;&lt;br /&gt;      usbserial.c: Palm 4.0 converter now attached to ttyUSB0 (or usb/tts/0 for devfs)&lt;br /&gt;&lt;br /&gt;      usbserial.c: Palm 4.0 converter now attached to ttyUSB1 (or usb/tts/1 for devfs)&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  Now, notice a few things here, I had no idea if the Palm was on&lt;br /&gt;  ttyUSB0 or ttyUSB1. But I just followed what was done before,&lt;br /&gt;  and lo and behold, it was the right one because if you see,&lt;br /&gt;  The USB interface must have two logical ports, which the visor kernel module&lt;br /&gt;  must map to the 'serial like' devices USB0 and 1&lt;br /&gt;  .. and the "HotSync use and is bound to ttyUSB1" says it all.&lt;br /&gt;&lt;br /&gt;  cool!&lt;br /&gt;&lt;br /&gt;  Now on to compiling my first linux kernel into this puppy and blow it up!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-6905123645726442932?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/6905123645726442932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=6905123645726442932' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/6905123645726442932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/6905123645726442932'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2007/05/first-sync-in-linux-with-my-m505.html' title='First Sync in linux with my m505'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3473871805404328405.post-2331063420649897042</id><published>2003-03-20T15:38:00.000Z</published><updated>2007-05-25T17:38:55.112+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ipcop'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Satellite SM200D Installation Instructions for Smoothwall (and IPCop)</title><content type='html'>Okay..&lt;br /&gt;&lt;br /&gt;After a huge delay, I have finally managed to put the smoothwall/satellite mod together...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://web.archive.org/web/20040925103212/http://www.thebuckland.com/projects/smoothwall_satellite/v1.0/smoothwall_sm200d_1.0.tgz"&gt;smoothwall_sm200d_1.0.tgz&lt;/a&gt; - my v1.0[415k]&lt;br /&gt;&lt;a href="http://web.archive.org/web/20040925103212/http://www.thebuckland.com/projects/smoothwall_satellite/v1.0/"&gt;list_of_new_files.txt&lt;/a&gt; - A list of the files I have changed/added.&lt;br /&gt;&lt;br /&gt;The original drivers.&lt;br /&gt;&lt;a href="http://web.archive.org/web/20040925103212/http://www.telemann.com/lounge/download/sm200d.asp"&gt;SM200D SkyMedia Telemann v2.20 drivers - For SM200Dxx Series.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Helps to see what I did if you diff each file against the original smoothwall file.&lt;br /&gt;It really wasn't that hard. Just a lot of working out. So use what I ahev done and go forth!&lt;br /&gt;&lt;br /&gt;eg: tar cvfz /tmp/originals.tgz -T list_of_new_files.txt&lt;br /&gt;   diff -r &lt;smoothwall&gt; &lt;mychangedfile&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What's in there ?&lt;/b&gt;&lt;br /&gt;&lt;li&gt;Compiled 2.20 Text Drivers (app and module) against the 2.2.25 Kernel (smoothwall kernel in 2.2.25) (using debian of course)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Built for smoothwall 1.0 patch level 4.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Control scripts to load the module and change firewall rules (at start up)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A web interface to put in the settings you need.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;How do I use them&lt;/b&gt;&lt;br /&gt;Backup your smoothie, (of it's a new one, don't worry you've got the CD ;)&lt;br /&gt;&lt;li&gt;patch it to level 4. (if they go beyond level 4, let me know and I'll check&lt;br /&gt;this tar file for conflictions).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Setup smoothwall to be a normal dialin machine. (Red Modem is Dialup)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Using scp (scp, WinSCP etc etc), copy the tgz to /tmp&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Login as root.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;cd / &amp;&amp;amp; tar xvfz /tmp/&lt;the_file_you_uploaded&gt;&lt;/the_file_you_uploaded&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Go to the smoothwall admin and you will see a new link under [dialup] satellite. Put your settings in there.&lt;br /&gt;&lt;i&gt;I just realised that the IP address is irrelevant. leave it as 1.1.1.1 if you want. I used to use it where the dialup account was not meant for dialup (was given a different IP address via PPP)&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Email me if you have any issues - ramon_at_thebuckland.com and I'll see if I can help.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;How did I compile them&lt;/b&gt;&lt;br /&gt;1. Loaded up a 2.2.25 kernel in debian to match that of smoothwall. (this isn't necessary I believe)&lt;br /&gt;2. Obtained the kernel headers for 2.2.25.&lt;br /&gt;3. Downloaded the drives from telemann's site.&lt;br /&gt;4. Ran the INSTALL script once.&lt;br /&gt;5. Edited the INSTALL script  and commented out the 'gzip lines for each section'&lt;br /&gt;6. edited drv/drv.mak and added -I/usr/src/kernel-headers-2.2.25/include&lt;br /&gt; to the end of CFLAGS (after the -O)&lt;br /&gt;7. Ran the INSTALL again.&lt;br /&gt;8. This did create some warnings, but all googling showed that they were okay.&lt;br /&gt; ... but I can't test these drivers as I no longer have this card. This is just a service to you :-)&lt;br /&gt; hope you appreciate it.&lt;br /&gt;9. collected the bits together (in the Release directory)&lt;br /&gt;10. Used the smoothwall 1.0 patched to level4.&lt;br /&gt;11. Added my mods created back in April last year.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Some notes&lt;/b&gt;&lt;br /&gt;I have noticed that there is a mysterious 2.30 version of the driver but I was never able&lt;br /&gt;to find it. A friend pointed me to an smdstats program that someone wrote. Text based, similar to the Windows stuff, shows the signal strength. (Excercise for the reader to get it into smoothwall).&lt;br /&gt;&lt;br /&gt;This 'hack' is not suggested to work against a smoothwall &gt; 1.0 pl 4.&lt;br /&gt;&lt;br /&gt;I don't have a card, so these drivers may not work. But they error saying they can't&lt;br /&gt;find a card okay so that is always good.&lt;br /&gt;&lt;br /&gt;If you want to donate me a card ;) i can test them and get them working proper.&lt;br /&gt;&lt;br /&gt;&lt;b&gt; Extra bits&lt;/b&gt;&lt;br /&gt;I used to use my satellite service with a dialup ISP that did not know about it.&lt;br /&gt;What this meant was that the dialup account I used did not have the satellite IP address.&lt;br /&gt;It was dynamic.&lt;br /&gt;&lt;br /&gt;Basically, on top of this patch above, what I did was added some lines to the /etc/ppp/ip-up&lt;br /&gt;to create an alias interface so my packets would go out with the source address of my satellite&lt;br /&gt;&lt;br /&gt;Add this after&lt;br /&gt;system('/usr/bin/killall', 'dnrd');&lt;br /&gt;system @commandlist&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;# change the ppp0 to ppp0:0 for satellite&lt;br /&gt;&lt;br /&gt;&amp;readhash("${swroot}/satellite/settings", \%satsettings)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if ($satsettings{'ENABLED'} eq 'on')&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;$localip = $satsettings{'IP_ADDRESS'};&lt;br /&gt;&lt;br /&gt;$interface = $interface . ':0';&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# ifconfig ppp0:0 &lt;satellite ip=""&gt; netmask 255.255.255.255 pointopoint &lt;ppp serv=""&gt;&lt;br /&gt;&lt;br /&gt;er-IP&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;log("Satelite: &lt; ".$interface."&gt; is now ".$satsettings{'IP_ADDRESS'});&lt;br /&gt;&lt;br /&gt;system(@cmd,('/sbin/ifconfig',$interface, $localip,'netmask',&lt;br /&gt;&lt;br /&gt;         '255.255.255.255','pointopoint',$remoteip));&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;system(@cmd,('/sbin/route','del','default'));&lt;br /&gt;&lt;br /&gt;system(@cmd,('/sbin/route','add','default','gw',$remoteip,'dev',$interface));&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/ppp&gt;&lt;/satellite&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Cheers!&lt;br /&gt;Ramon&lt;/li&gt;&lt;/mychangedfile&gt;&lt;/smoothwall&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3473871805404328405-2331063420649897042?l=rbtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbtech.blogspot.com/feeds/2331063420649897042/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3473871805404328405&amp;postID=2331063420649897042' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/2331063420649897042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3473871805404328405/posts/default/2331063420649897042'/><link rel='alternate' type='text/html' href='http://rbtech.blogspot.com/2007/05/satellite-sm200d-installation.html' title='Satellite SM200D Installation Instructions for Smoothwall (and IPCop)'/><author><name>Ramon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
